@wordpress/block-library 9.31.1-next.f56bd8138.0 → 9.32.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/edit.js +62 -12
- package/build/accordion/edit.js.map +1 -1
- package/build/accordion/index.js +15 -8
- package/build/accordion/index.js.map +1 -1
- package/build/accordion/view.js +15 -15
- package/build/accordion/view.js.map +1 -1
- package/build/accordion-heading/edit.js +68 -0
- package/build/accordion-heading/edit.js.map +1 -0
- package/build/accordion-heading/icon.js.map +1 -0
- package/build/{accordion-header → accordion-heading}/index.js +9 -17
- package/build/accordion-heading/index.js.map +1 -0
- package/build/{accordion-content → accordion-heading}/init.js.map +1 -1
- package/build/{accordion-header → accordion-heading}/save.js +7 -20
- package/build/accordion-heading/save.js.map +1 -0
- package/build/{accordion-content → accordion-item}/edit.js +8 -2
- package/build/accordion-item/edit.js.map +1 -0
- package/build/accordion-item/icon.js.map +1 -0
- package/build/{accordion-content → accordion-item}/index.js +6 -5
- package/build/accordion-item/index.js.map +1 -0
- package/build/accordion-item/init.js.map +1 -0
- package/build/{accordion-content → accordion-item}/save.js +5 -7
- package/build/accordion-item/save.js.map +1 -0
- package/build/accordion-panel/edit.js +2 -1
- package/build/accordion-panel/edit.js.map +1 -1
- package/build/accordion-panel/index.js +5 -3
- package/build/accordion-panel/index.js.map +1 -1
- package/build/accordion-panel/save.js +3 -1
- package/build/accordion-panel/save.js.map +1 -1
- package/build/block/index.js +1 -0
- package/build/block/index.js.map +1 -1
- package/build/group/variations.js +3 -4
- package/build/group/variations.js.map +1 -1
- package/build/index.js +24 -4
- package/build/index.js.map +1 -1
- package/build/navigation/edit/leaf-more-menu.js +6 -1
- package/build/navigation/edit/leaf-more-menu.js.map +1 -1
- package/build/navigation-link/edit.js +3 -140
- package/build/navigation-link/edit.js.map +1 -1
- package/build/navigation-link/shared/controls.js +171 -0
- package/build/navigation-link/shared/controls.js.map +1 -0
- package/build/navigation-link/shared/index.js +13 -0
- package/build/navigation-link/shared/index.js.map +1 -0
- package/build/navigation-submenu/edit.js +7 -114
- package/build/navigation-submenu/edit.js.map +1 -1
- package/build/pattern/index.js +1 -0
- package/build/pattern/index.js.map +1 -1
- package/build/post-date/edit.js +16 -3
- package/build/post-date/edit.js.map +1 -1
- package/build/post-time-to-read/edit.js +27 -15
- package/build/post-time-to-read/edit.js.map +1 -1
- package/build/post-time-to-read/index.js +7 -1
- package/build/post-time-to-read/index.js.map +1 -1
- package/build/post-time-to-read/variations.js +41 -0
- package/build/post-time-to-read/variations.js.map +1 -0
- package/build/query-title/edit.js +1 -1
- package/build/query-title/edit.js.map +1 -1
- package/build/table-of-contents/index.js +1 -0
- package/build/table-of-contents/index.js.map +1 -1
- package/build/template-part/index.js +1 -0
- package/build/template-part/index.js.map +1 -1
- package/build/utils/get-transformed-metadata.js +7 -0
- package/build/utils/get-transformed-metadata.js.map +1 -1
- package/build-module/accordion/edit.js +66 -16
- package/build-module/accordion/edit.js.map +1 -1
- package/build-module/accordion/index.js +15 -8
- package/build-module/accordion/index.js.map +1 -1
- package/build-module/accordion/view.js +15 -15
- package/build-module/accordion/view.js.map +1 -1
- package/build-module/accordion-heading/edit.js +61 -0
- package/build-module/accordion-heading/edit.js.map +1 -0
- package/build-module/accordion-heading/icon.js.map +1 -0
- package/build-module/{accordion-header → accordion-heading}/index.js +9 -17
- package/build-module/accordion-heading/index.js.map +1 -0
- package/build-module/{accordion-content → accordion-heading}/init.js.map +1 -1
- package/build-module/{accordion-header → accordion-heading}/save.js +7 -18
- package/build-module/accordion-heading/save.js.map +1 -0
- package/build-module/{accordion-content → accordion-item}/edit.js +8 -2
- package/build-module/accordion-item/edit.js.map +1 -0
- package/build-module/accordion-item/icon.js.map +1 -0
- package/build-module/{accordion-content → accordion-item}/index.js +6 -5
- package/build-module/accordion-item/index.js.map +1 -0
- package/build-module/accordion-item/init.js.map +1 -0
- package/build-module/{accordion-content → accordion-item}/save.js +5 -7
- package/build-module/accordion-item/save.js.map +1 -0
- package/build-module/accordion-panel/edit.js +2 -1
- package/build-module/accordion-panel/edit.js.map +1 -1
- package/build-module/accordion-panel/index.js +5 -3
- package/build-module/accordion-panel/index.js.map +1 -1
- package/build-module/accordion-panel/save.js +3 -1
- package/build-module/accordion-panel/save.js.map +1 -1
- package/build-module/block/index.js +1 -0
- package/build-module/block/index.js.map +1 -1
- package/build-module/group/variations.js +3 -4
- package/build-module/group/variations.js.map +1 -1
- package/build-module/index.js +25 -5
- package/build-module/index.js.map +1 -1
- package/build-module/navigation/edit/leaf-more-menu.js +6 -1
- package/build-module/navigation/edit/leaf-more-menu.js.map +1 -1
- package/build-module/navigation-link/edit.js +4 -141
- package/build-module/navigation-link/edit.js.map +1 -1
- package/build-module/navigation-link/shared/controls.js +165 -0
- package/build-module/navigation-link/shared/controls.js.map +1 -0
- package/build-module/navigation-link/shared/index.js +9 -0
- package/build-module/navigation-link/shared/index.js.map +1 -0
- package/build-module/navigation-submenu/edit.js +7 -114
- package/build-module/navigation-submenu/edit.js.map +1 -1
- package/build-module/pattern/index.js +1 -0
- package/build-module/pattern/index.js.map +1 -1
- package/build-module/post-date/edit.js +17 -4
- package/build-module/post-date/edit.js.map +1 -1
- package/build-module/post-time-to-read/edit.js +27 -15
- package/build-module/post-time-to-read/edit.js.map +1 -1
- package/build-module/post-time-to-read/index.js +7 -1
- package/build-module/post-time-to-read/index.js.map +1 -1
- package/build-module/post-time-to-read/variations.js +33 -0
- package/build-module/post-time-to-read/variations.js.map +1 -0
- package/build-module/query-title/edit.js +1 -1
- package/build-module/query-title/edit.js.map +1 -1
- package/build-module/table-of-contents/index.js +1 -0
- package/build-module/table-of-contents/index.js.map +1 -1
- package/build-module/template-part/index.js +1 -0
- package/build-module/template-part/index.js.map +1 -1
- package/build-module/utils/get-transformed-metadata.js +7 -0
- package/build-module/utils/get-transformed-metadata.js.map +1 -1
- package/build-style/{accordion → accordion-heading}/style-rtl.css +9 -54
- package/build-style/{accordion → accordion-heading}/style.css +9 -54
- package/build-style/accordion-item/style-rtl.css +155 -0
- package/build-style/accordion-item/style.css +155 -0
- package/build-style/accordion-panel/style-rtl.css +140 -0
- package/build-style/accordion-panel/style.css +140 -0
- package/build-style/style-rtl.css +23 -42
- package/build-style/style.css +23 -42
- package/package.json +35 -35
- package/src/accordion/block.json +11 -4
- package/src/accordion/edit.js +70 -13
- package/src/accordion/index.js +4 -4
- package/src/accordion/index.php +1 -1
- package/src/accordion/view.js +15 -15
- package/src/{accordion-header → accordion-heading}/block.json +10 -17
- package/src/accordion-heading/edit.js +70 -0
- package/src/{accordion-header → accordion-heading}/save.js +8 -18
- package/src/accordion-heading/style.scss +43 -0
- package/src/{accordion-content → accordion-item}/block.json +6 -5
- package/src/{accordion-content → accordion-item}/edit.js +12 -2
- package/src/{accordion-content → accordion-item}/index.php +11 -11
- package/src/{accordion-content → accordion-item}/save.js +4 -10
- package/src/accordion-item/style.scss +21 -0
- package/src/accordion-panel/block.json +5 -3
- package/src/accordion-panel/edit.js +1 -0
- package/src/accordion-panel/save.js +3 -1
- package/src/accordion-panel/style.scss +8 -0
- package/src/block/block.json +1 -0
- package/src/comments/index.php +2 -2
- package/src/group/variations.js +3 -14
- package/src/index.js +23 -4
- package/src/navigation/edit/leaf-more-menu.js +9 -1
- package/src/navigation/index.php +2 -2
- package/src/navigation-link/edit.js +3 -142
- package/src/navigation-link/shared/README.md +47 -0
- package/src/navigation-link/shared/controls.js +167 -0
- package/src/navigation-link/shared/index.js +8 -0
- package/src/navigation-link/shared/test/controls.js +210 -0
- package/src/navigation-submenu/edit.js +8 -129
- package/src/pattern/block.json +1 -0
- package/src/post-date/edit.js +16 -16
- package/src/post-time-to-read/block.json +5 -1
- package/src/post-time-to-read/edit.js +87 -59
- package/src/post-time-to-read/index.js +2 -0
- package/src/post-time-to-read/index.php +48 -23
- package/src/post-time-to-read/variations.js +39 -0
- package/src/query-title/edit.js +2 -1
- package/src/query-title/index.php +3 -1
- package/src/social-link/index.php +2 -2
- package/src/style.scss +3 -1
- package/src/table-of-contents/block.json +1 -0
- package/src/table-of-contents/index.php +44 -0
- package/src/template-part/block.json +1 -0
- package/src/utils/get-transformed-metadata.js +8 -0
- package/build/accordion-content/edit.js.map +0 -1
- package/build/accordion-content/icon.js.map +0 -1
- package/build/accordion-content/index.js.map +0 -1
- package/build/accordion-content/save.js.map +0 -1
- package/build/accordion-header/edit.js +0 -94
- package/build/accordion-header/edit.js.map +0 -1
- package/build/accordion-header/icon.js.map +0 -1
- package/build/accordion-header/index.js.map +0 -1
- package/build/accordion-header/init.js.map +0 -1
- package/build/accordion-header/save.js.map +0 -1
- package/build-module/accordion-content/edit.js.map +0 -1
- package/build-module/accordion-content/icon.js.map +0 -1
- package/build-module/accordion-content/index.js.map +0 -1
- package/build-module/accordion-content/save.js.map +0 -1
- package/build-module/accordion-header/edit.js +0 -85
- package/build-module/accordion-header/edit.js.map +0 -1
- package/build-module/accordion-header/icon.js.map +0 -1
- package/build-module/accordion-header/index.js.map +0 -1
- package/build-module/accordion-header/init.js.map +0 -1
- package/build-module/accordion-header/save.js.map +0 -1
- package/src/accordion/style.scss +0 -90
- package/src/accordion-header/edit.js +0 -94
- /package/build/{accordion-header → accordion-heading}/icon.js +0 -0
- /package/build/{accordion-content → accordion-heading}/init.js +0 -0
- /package/build/{accordion-content → accordion-item}/icon.js +0 -0
- /package/build/{accordion-header → accordion-item}/init.js +0 -0
- /package/build-module/{accordion-header → accordion-heading}/icon.js +0 -0
- /package/build-module/{accordion-content → accordion-heading}/init.js +0 -0
- /package/build-module/{accordion-content → accordion-item}/icon.js +0 -0
- /package/build-module/{accordion-header → accordion-item}/init.js +0 -0
- /package/src/{accordion-header → accordion-heading}/icon.js +0 -0
- /package/src/{accordion-content → accordion-heading}/index.js +0 -0
- /package/src/{accordion-content → accordion-heading}/init.js +0 -0
- /package/src/{accordion-content → accordion-item}/icon.js +0 -0
- /package/src/{accordion-header → accordion-item}/index.js +0 -0
- /package/src/{accordion-header → accordion-item}/init.js +0 -0
package/src/accordion/edit.js
CHANGED
|
@@ -6,7 +6,9 @@ import {
|
|
|
6
6
|
useInnerBlocksProps,
|
|
7
7
|
InspectorControls,
|
|
8
8
|
BlockControls,
|
|
9
|
+
useBlockEditingMode,
|
|
9
10
|
store as blockEditorStore,
|
|
11
|
+
HeadingLevelDropdown,
|
|
10
12
|
} from '@wordpress/block-editor';
|
|
11
13
|
import { __ } from '@wordpress/i18n';
|
|
12
14
|
import {
|
|
@@ -16,8 +18,9 @@ import {
|
|
|
16
18
|
__experimentalToolsPanel as ToolsPanel,
|
|
17
19
|
__experimentalToolsPanelItem as ToolsPanelItem,
|
|
18
20
|
ToolbarButton,
|
|
21
|
+
ToolbarGroup,
|
|
19
22
|
} from '@wordpress/components';
|
|
20
|
-
import { useDispatch } from '@wordpress/data';
|
|
23
|
+
import { useDispatch, useSelect, useRegistry } from '@wordpress/data';
|
|
21
24
|
import { createBlock } from '@wordpress/blocks';
|
|
22
25
|
|
|
23
26
|
/**
|
|
@@ -25,20 +28,32 @@ import { createBlock } from '@wordpress/blocks';
|
|
|
25
28
|
*/
|
|
26
29
|
import { useToolsPanelDropdownMenuProps } from '../utils/hooks';
|
|
27
30
|
|
|
28
|
-
const ACCORDION_BLOCK_NAME = 'core/accordion-
|
|
31
|
+
const ACCORDION_BLOCK_NAME = 'core/accordion-item';
|
|
32
|
+
const ACCORDION_HEADING_BLOCK_NAME = 'core/accordion-heading';
|
|
29
33
|
const ACCORDION_BLOCK = {
|
|
30
34
|
name: ACCORDION_BLOCK_NAME,
|
|
31
35
|
};
|
|
32
36
|
|
|
33
37
|
export default function Edit( {
|
|
34
|
-
attributes: {
|
|
38
|
+
attributes: {
|
|
39
|
+
autoclose,
|
|
40
|
+
iconPosition,
|
|
41
|
+
showIcon,
|
|
42
|
+
headingLevel,
|
|
43
|
+
levelOptions,
|
|
44
|
+
},
|
|
35
45
|
clientId,
|
|
36
46
|
setAttributes,
|
|
37
47
|
isSelected: isSingleSelected,
|
|
38
48
|
} ) {
|
|
49
|
+
const registry = useRegistry();
|
|
50
|
+
const { getBlockOrder } = useSelect( blockEditorStore );
|
|
39
51
|
const blockProps = useBlockProps();
|
|
40
52
|
const dropdownMenuProps = useToolsPanelDropdownMenuProps();
|
|
41
|
-
const { insertBlock } =
|
|
53
|
+
const { updateBlockAttributes, insertBlock } =
|
|
54
|
+
useDispatch( blockEditorStore );
|
|
55
|
+
const blockEditingMode = useBlockEditingMode();
|
|
56
|
+
const isContentOnlyMode = blockEditingMode === 'contentOnly';
|
|
42
57
|
|
|
43
58
|
const innerBlocksProps = useInnerBlocksProps( blockProps, {
|
|
44
59
|
template: [ [ ACCORDION_BLOCK_NAME ], [ ACCORDION_BLOCK_NAME ] ],
|
|
@@ -47,19 +62,60 @@ export default function Edit( {
|
|
|
47
62
|
templateInsertUpdatesSelection: true,
|
|
48
63
|
} );
|
|
49
64
|
|
|
50
|
-
const
|
|
51
|
-
|
|
52
|
-
|
|
65
|
+
const addAccordionItemBlock = () => {
|
|
66
|
+
// When adding, set the header's level to current headingLevel
|
|
67
|
+
const newAccordionItem = createBlock( ACCORDION_BLOCK_NAME, {}, [
|
|
68
|
+
createBlock( ACCORDION_HEADING_BLOCK_NAME, {
|
|
69
|
+
level: headingLevel,
|
|
70
|
+
} ),
|
|
71
|
+
createBlock( 'core/accordion-panel', {} ),
|
|
72
|
+
] );
|
|
73
|
+
insertBlock( newAccordionItem, undefined, clientId );
|
|
74
|
+
};
|
|
75
|
+
|
|
76
|
+
/**
|
|
77
|
+
* Update all child Accordion Header blocks with a new heading level
|
|
78
|
+
* based on the accordion group setting.
|
|
79
|
+
* @param {number} newHeadingLevel The new heading level to set
|
|
80
|
+
*/
|
|
81
|
+
const updateHeadingLevel = ( newHeadingLevel ) => {
|
|
82
|
+
const innerBlockClientIds = getBlockOrder( clientId );
|
|
83
|
+
|
|
84
|
+
// Get all accordion-header blocks from all accordion-content blocks.
|
|
85
|
+
const accordionHeaderClientIds = [];
|
|
86
|
+
innerBlockClientIds.forEach( ( contentClientId ) => {
|
|
87
|
+
const headerClientIds = getBlockOrder( contentClientId );
|
|
88
|
+
accordionHeaderClientIds.push( ...headerClientIds );
|
|
89
|
+
} );
|
|
90
|
+
|
|
91
|
+
// Update own and child block heading levels.
|
|
92
|
+
registry.batch( () => {
|
|
93
|
+
setAttributes( { headingLevel: newHeadingLevel } );
|
|
94
|
+
updateBlockAttributes( accordionHeaderClientIds, {
|
|
95
|
+
level: newHeadingLevel,
|
|
96
|
+
} );
|
|
97
|
+
} );
|
|
53
98
|
};
|
|
54
99
|
|
|
55
100
|
return (
|
|
56
101
|
<>
|
|
57
|
-
{ isSingleSelected && (
|
|
58
|
-
|
|
59
|
-
<
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
102
|
+
{ isSingleSelected && ! isContentOnlyMode && (
|
|
103
|
+
<>
|
|
104
|
+
<BlockControls>
|
|
105
|
+
<ToolbarGroup>
|
|
106
|
+
<HeadingLevelDropdown
|
|
107
|
+
value={ headingLevel }
|
|
108
|
+
options={ levelOptions }
|
|
109
|
+
onChange={ updateHeadingLevel }
|
|
110
|
+
/>
|
|
111
|
+
</ToolbarGroup>
|
|
112
|
+
</BlockControls>
|
|
113
|
+
<BlockControls group="other">
|
|
114
|
+
<ToolbarButton onClick={ addAccordionItemBlock }>
|
|
115
|
+
{ __( 'Add' ) }
|
|
116
|
+
</ToolbarButton>
|
|
117
|
+
</BlockControls>
|
|
118
|
+
</>
|
|
63
119
|
) }
|
|
64
120
|
<InspectorControls key="setting">
|
|
65
121
|
<ToolsPanel
|
|
@@ -69,6 +125,7 @@ export default function Edit( {
|
|
|
69
125
|
autoclose: false,
|
|
70
126
|
showIcon: true,
|
|
71
127
|
iconPosition: 'right',
|
|
128
|
+
headingLevel: 3,
|
|
72
129
|
} );
|
|
73
130
|
} }
|
|
74
131
|
dropdownMenuProps={ dropdownMenuProps }
|
package/src/accordion/index.js
CHANGED
|
@@ -21,10 +21,10 @@ export const settings = {
|
|
|
21
21
|
example: {
|
|
22
22
|
innerBlocks: [
|
|
23
23
|
{
|
|
24
|
-
name: 'core/accordion-
|
|
24
|
+
name: 'core/accordion-item',
|
|
25
25
|
innerBlocks: [
|
|
26
26
|
{
|
|
27
|
-
name: 'core/accordion-
|
|
27
|
+
name: 'core/accordion-heading',
|
|
28
28
|
attributes: {
|
|
29
29
|
title: __(
|
|
30
30
|
'Lorem ipsum dolor sit amet, consectetur.'
|
|
@@ -34,10 +34,10 @@ export const settings = {
|
|
|
34
34
|
],
|
|
35
35
|
},
|
|
36
36
|
{
|
|
37
|
-
name: 'core/accordion-
|
|
37
|
+
name: 'core/accordion-item',
|
|
38
38
|
innerBlocks: [
|
|
39
39
|
{
|
|
40
|
-
name: 'core/accordion-
|
|
40
|
+
name: 'core/accordion-heading',
|
|
41
41
|
attributes: {
|
|
42
42
|
title: __(
|
|
43
43
|
'Suspendisse commodo lacus, interdum et.'
|
package/src/accordion/index.php
CHANGED
|
@@ -20,7 +20,7 @@ function render_block_core_accordion( $attributes, $content ) {
|
|
|
20
20
|
|
|
21
21
|
if ( $p->next_tag( array( 'class_name' => 'wp-block-accordion' ) ) ) {
|
|
22
22
|
$p->set_attribute( 'data-wp-interactive', 'core/accordion' );
|
|
23
|
-
$p->set_attribute( 'data-wp-context', '{ "autoclose": ' . $autoclose . ', "
|
|
23
|
+
$p->set_attribute( 'data-wp-context', '{ "autoclose": ' . $autoclose . ', "accordionItems": [] }' );
|
|
24
24
|
|
|
25
25
|
// Only modify content if directives have been set.
|
|
26
26
|
$content = $p->get_updated_html();
|
package/src/accordion/view.js
CHANGED
|
@@ -6,28 +6,28 @@ import { store, getContext, withSyncEvent } from '@wordpress/interactivity';
|
|
|
6
6
|
store( 'core/accordion', {
|
|
7
7
|
state: {
|
|
8
8
|
get isOpen() {
|
|
9
|
-
const { id,
|
|
10
|
-
const
|
|
9
|
+
const { id, accordionItems } = getContext();
|
|
10
|
+
const accordionItem = accordionItems.find(
|
|
11
11
|
( item ) => item.id === id
|
|
12
12
|
);
|
|
13
|
-
return
|
|
13
|
+
return accordionItem ? accordionItem.isOpen : false;
|
|
14
14
|
},
|
|
15
15
|
},
|
|
16
16
|
actions: {
|
|
17
17
|
toggle: () => {
|
|
18
18
|
const context = getContext();
|
|
19
|
-
const { id, autoclose,
|
|
20
|
-
const
|
|
19
|
+
const { id, autoclose, accordionItems } = context;
|
|
20
|
+
const accordionItem = accordionItems.find(
|
|
21
21
|
( item ) => item.id === id
|
|
22
22
|
);
|
|
23
23
|
|
|
24
24
|
if ( autoclose ) {
|
|
25
|
-
|
|
25
|
+
accordionItems.forEach( ( item ) => {
|
|
26
26
|
item.isOpen =
|
|
27
|
-
item.id === id ? !
|
|
27
|
+
item.id === id ? ! accordionItem.isOpen : false;
|
|
28
28
|
} );
|
|
29
29
|
} else {
|
|
30
|
-
|
|
30
|
+
accordionItem.isOpen = ! accordionItem.isOpen;
|
|
31
31
|
}
|
|
32
32
|
},
|
|
33
33
|
handleKeyDown: withSyncEvent( ( event ) => {
|
|
@@ -42,8 +42,8 @@ store( 'core/accordion', {
|
|
|
42
42
|
|
|
43
43
|
event.preventDefault();
|
|
44
44
|
const context = getContext();
|
|
45
|
-
const { id,
|
|
46
|
-
const currentIndex =
|
|
45
|
+
const { id, accordionItems } = context;
|
|
46
|
+
const currentIndex = accordionItems.findIndex(
|
|
47
47
|
( item ) => item.id === id
|
|
48
48
|
);
|
|
49
49
|
|
|
@@ -56,18 +56,18 @@ store( 'core/accordion', {
|
|
|
56
56
|
case 'ArrowDown':
|
|
57
57
|
nextIndex = Math.min(
|
|
58
58
|
currentIndex + 1,
|
|
59
|
-
|
|
59
|
+
accordionItems.length - 1
|
|
60
60
|
);
|
|
61
61
|
break;
|
|
62
62
|
case 'Home':
|
|
63
63
|
nextIndex = 0;
|
|
64
64
|
break;
|
|
65
65
|
case 'End':
|
|
66
|
-
nextIndex =
|
|
66
|
+
nextIndex = accordionItems.length - 1;
|
|
67
67
|
break;
|
|
68
68
|
}
|
|
69
69
|
|
|
70
|
-
const nextId =
|
|
70
|
+
const nextId = accordionItems[ nextIndex ].id;
|
|
71
71
|
const nextButton = document.getElementById( nextId );
|
|
72
72
|
if ( nextButton ) {
|
|
73
73
|
nextButton.focus();
|
|
@@ -75,10 +75,10 @@ store( 'core/accordion', {
|
|
|
75
75
|
} ),
|
|
76
76
|
},
|
|
77
77
|
callbacks: {
|
|
78
|
-
|
|
78
|
+
initAccordionItems: () => {
|
|
79
79
|
const context = getContext();
|
|
80
80
|
const { id, openByDefault } = context;
|
|
81
|
-
context.
|
|
81
|
+
context.accordionItems.push( {
|
|
82
82
|
id,
|
|
83
83
|
isOpen: openByDefault,
|
|
84
84
|
} );
|
|
@@ -1,15 +1,16 @@
|
|
|
1
1
|
{
|
|
2
2
|
"$schema": "https://schemas.wp.org/trunk/block.json",
|
|
3
3
|
"apiVersion": 3,
|
|
4
|
-
"name": "core/accordion-
|
|
5
|
-
"title": "Accordion
|
|
4
|
+
"name": "core/accordion-heading",
|
|
5
|
+
"title": "Accordion Heading",
|
|
6
6
|
"category": "design",
|
|
7
|
-
"description": "Displays an accordion
|
|
7
|
+
"description": "Displays an accordion heading.",
|
|
8
8
|
"__experimental": true,
|
|
9
|
-
"parent": [ "core/accordion-
|
|
9
|
+
"parent": [ "core/accordion-item" ],
|
|
10
10
|
"usesContext": [
|
|
11
11
|
"core/accordion-icon-position",
|
|
12
|
-
"core/accordion-show-icon"
|
|
12
|
+
"core/accordion-show-icon",
|
|
13
|
+
"core/accordion-heading-level"
|
|
13
14
|
],
|
|
14
15
|
"supports": {
|
|
15
16
|
"anchor": true,
|
|
@@ -39,7 +40,6 @@
|
|
|
39
40
|
}
|
|
40
41
|
},
|
|
41
42
|
"typography": {
|
|
42
|
-
"textAlign": true,
|
|
43
43
|
"fontSize": true,
|
|
44
44
|
"__experimentalFontFamily": true,
|
|
45
45
|
"__experimentalFontWeight": true,
|
|
@@ -52,7 +52,8 @@
|
|
|
52
52
|
"fontFamily": true
|
|
53
53
|
}
|
|
54
54
|
},
|
|
55
|
-
"shadow": true
|
|
55
|
+
"shadow": true,
|
|
56
|
+
"blockVisibility": false
|
|
56
57
|
},
|
|
57
58
|
"attributes": {
|
|
58
59
|
"openByDefault": {
|
|
@@ -62,19 +63,11 @@
|
|
|
62
63
|
"title": {
|
|
63
64
|
"type": "rich-text",
|
|
64
65
|
"source": "rich-text",
|
|
65
|
-
"selector": ".accordion-
|
|
66
|
+
"selector": ".wp-block-accordion-heading__toggle-title",
|
|
66
67
|
"role": "content"
|
|
67
68
|
},
|
|
68
69
|
"level": {
|
|
69
|
-
"type": "number"
|
|
70
|
-
"default": 3
|
|
71
|
-
},
|
|
72
|
-
"levelOptions": {
|
|
73
|
-
"type": "array"
|
|
74
|
-
},
|
|
75
|
-
"textAlignment": {
|
|
76
|
-
"type": "string",
|
|
77
|
-
"default": "left"
|
|
70
|
+
"type": "number"
|
|
78
71
|
},
|
|
79
72
|
"iconPosition": {
|
|
80
73
|
"type": "string",
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* WordPress dependencies
|
|
3
|
+
*/
|
|
4
|
+
import { __ } from '@wordpress/i18n';
|
|
5
|
+
import { useEffect } from '@wordpress/element';
|
|
6
|
+
import {
|
|
7
|
+
useBlockProps,
|
|
8
|
+
__experimentalGetSpacingClassesAndStyles as useSpacingProps,
|
|
9
|
+
RichText,
|
|
10
|
+
} from '@wordpress/block-editor';
|
|
11
|
+
|
|
12
|
+
export default function Edit( { attributes, setAttributes, context } ) {
|
|
13
|
+
const { title } = attributes;
|
|
14
|
+
const {
|
|
15
|
+
'core/accordion-icon-position': iconPosition,
|
|
16
|
+
'core/accordion-show-icon': showIcon,
|
|
17
|
+
'core/accordion-heading-level': headingLevel,
|
|
18
|
+
} = context;
|
|
19
|
+
const TagName = 'h' + headingLevel;
|
|
20
|
+
|
|
21
|
+
// Set icon attributes.
|
|
22
|
+
useEffect( () => {
|
|
23
|
+
if ( iconPosition !== undefined && showIcon !== undefined ) {
|
|
24
|
+
setAttributes( {
|
|
25
|
+
iconPosition,
|
|
26
|
+
showIcon,
|
|
27
|
+
} );
|
|
28
|
+
}
|
|
29
|
+
}, [ iconPosition, showIcon, setAttributes ] );
|
|
30
|
+
|
|
31
|
+
const blockProps = useBlockProps();
|
|
32
|
+
const spacingProps = useSpacingProps( attributes );
|
|
33
|
+
|
|
34
|
+
return (
|
|
35
|
+
<TagName { ...blockProps }>
|
|
36
|
+
<button
|
|
37
|
+
className="wp-block-accordion-heading__toggle"
|
|
38
|
+
style={ spacingProps.style }
|
|
39
|
+
>
|
|
40
|
+
{ showIcon && iconPosition === 'left' && (
|
|
41
|
+
<span
|
|
42
|
+
className="wp-block-accordion-heading__toggle-icon"
|
|
43
|
+
aria-hidden="true"
|
|
44
|
+
>
|
|
45
|
+
+
|
|
46
|
+
</span>
|
|
47
|
+
) }
|
|
48
|
+
<RichText
|
|
49
|
+
withoutInteractiveFormatting
|
|
50
|
+
disableLineBreaks
|
|
51
|
+
tagName="span"
|
|
52
|
+
value={ title }
|
|
53
|
+
onChange={ ( newTitle ) =>
|
|
54
|
+
setAttributes( { title: newTitle } )
|
|
55
|
+
}
|
|
56
|
+
placeholder={ __( 'Accordion title' ) }
|
|
57
|
+
className="wp-block-accordion-heading__toggle-title"
|
|
58
|
+
/>
|
|
59
|
+
{ showIcon && iconPosition === 'right' && (
|
|
60
|
+
<span
|
|
61
|
+
className="wp-block-accordion-heading__toggle-icon"
|
|
62
|
+
aria-hidden="true"
|
|
63
|
+
>
|
|
64
|
+
+
|
|
65
|
+
</span>
|
|
66
|
+
) }
|
|
67
|
+
</button>
|
|
68
|
+
</TagName>
|
|
69
|
+
);
|
|
70
|
+
}
|
|
@@ -1,7 +1,3 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* External dependencies
|
|
3
|
-
*/
|
|
4
|
-
import clsx from 'clsx';
|
|
5
1
|
/**
|
|
6
2
|
* WordPress dependencies
|
|
7
3
|
*/
|
|
@@ -12,40 +8,34 @@ import {
|
|
|
12
8
|
} from '@wordpress/block-editor';
|
|
13
9
|
|
|
14
10
|
export default function save( { attributes } ) {
|
|
15
|
-
const { level, title, iconPosition,
|
|
16
|
-
const TagName = 'h' + level;
|
|
11
|
+
const { level, title, iconPosition, showIcon } = attributes;
|
|
12
|
+
const TagName = 'h' + ( level || 3 );
|
|
17
13
|
|
|
18
|
-
const blockProps = useBlockProps.save(
|
|
19
|
-
className: clsx( 'accordion-content__heading', {
|
|
20
|
-
[ `has-text-align-${ textAlign }` ]: textAlign,
|
|
21
|
-
} ),
|
|
22
|
-
} );
|
|
14
|
+
const blockProps = useBlockProps.save();
|
|
23
15
|
const spacingProps = getSpacingClassesAndStyles( attributes );
|
|
24
16
|
|
|
25
17
|
return (
|
|
26
18
|
<TagName { ...blockProps }>
|
|
27
19
|
<button
|
|
28
|
-
className=
|
|
29
|
-
style={
|
|
30
|
-
...spacingProps.style,
|
|
31
|
-
} }
|
|
20
|
+
className="wp-block-accordion-heading__toggle"
|
|
21
|
+
style={ spacingProps.style }
|
|
32
22
|
>
|
|
33
23
|
{ showIcon && iconPosition === 'left' && (
|
|
34
24
|
<span
|
|
35
|
-
className="accordion-
|
|
25
|
+
className="wp-block-accordion-heading__toggle-icon"
|
|
36
26
|
aria-hidden="true"
|
|
37
27
|
>
|
|
38
28
|
+
|
|
39
29
|
</span>
|
|
40
30
|
) }
|
|
41
31
|
<RichText.Content
|
|
42
|
-
className="accordion-
|
|
32
|
+
className="wp-block-accordion-heading__toggle-title"
|
|
43
33
|
tagName="span"
|
|
44
34
|
value={ title }
|
|
45
35
|
/>
|
|
46
36
|
{ showIcon && iconPosition === 'right' && (
|
|
47
37
|
<span
|
|
48
|
-
className="accordion-
|
|
38
|
+
className="wp-block-accordion-heading__toggle-icon"
|
|
49
39
|
aria-hidden="true"
|
|
50
40
|
>
|
|
51
41
|
+
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
.wp-block-accordion-heading__toggle {
|
|
2
|
+
font-family: inherit;
|
|
3
|
+
font-size: inherit;
|
|
4
|
+
font-weight: inherit;
|
|
5
|
+
line-height: inherit;
|
|
6
|
+
letter-spacing: inherit;
|
|
7
|
+
text-transform: inherit;
|
|
8
|
+
text-decoration: inherit;
|
|
9
|
+
word-spacing: inherit;
|
|
10
|
+
background: none;
|
|
11
|
+
border: none;
|
|
12
|
+
color: inherit;
|
|
13
|
+
padding: var(--wp--preset--spacing--20, 1em) 0;
|
|
14
|
+
cursor: pointer;
|
|
15
|
+
overflow: hidden;
|
|
16
|
+
display: flex;
|
|
17
|
+
align-items: center;
|
|
18
|
+
text-align: inherit;
|
|
19
|
+
position: relative;
|
|
20
|
+
width: 100%;
|
|
21
|
+
|
|
22
|
+
&:not(:focus-visible) {
|
|
23
|
+
outline: none;
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
&:hover {
|
|
27
|
+
.wp-block-accordion-heading__toggle-title {
|
|
28
|
+
text-decoration: underline;
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
.wp-block-accordion-heading__toggle-title {
|
|
34
|
+
flex: 1;
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
.wp-block-accordion-heading__toggle-icon {
|
|
38
|
+
width: 1.2em;
|
|
39
|
+
height: 1.2em;
|
|
40
|
+
display: flex;
|
|
41
|
+
align-items: center;
|
|
42
|
+
justify-content: center;
|
|
43
|
+
}
|
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
{
|
|
2
2
|
"$schema": "https://schemas.wp.org/trunk/block.json",
|
|
3
3
|
"apiVersion": 3,
|
|
4
|
-
"name": "core/accordion-
|
|
5
|
-
"title": "Accordion
|
|
4
|
+
"name": "core/accordion-item",
|
|
5
|
+
"title": "Accordion Item",
|
|
6
6
|
"category": "design",
|
|
7
|
-
"description": "Displays a section of content in an accordion, including a
|
|
7
|
+
"description": "Displays a section of content in an accordion, including a heading and expandable content.",
|
|
8
8
|
"__experimental": true,
|
|
9
9
|
"parent": [ "core/accordion" ],
|
|
10
|
-
"allowedBlocks": [ "core/accordion-
|
|
10
|
+
"allowedBlocks": [ "core/accordion-heading", "core/accordion-panel" ],
|
|
11
11
|
"supports": {
|
|
12
12
|
"color": {
|
|
13
13
|
"background": true,
|
|
@@ -52,5 +52,6 @@
|
|
|
52
52
|
"default": false
|
|
53
53
|
}
|
|
54
54
|
},
|
|
55
|
-
"textdomain": "default"
|
|
55
|
+
"textdomain": "default",
|
|
56
|
+
"style": "wp-block-accordion-item"
|
|
56
57
|
}
|
|
@@ -25,7 +25,12 @@ import clsx from 'clsx';
|
|
|
25
25
|
*/
|
|
26
26
|
import { useToolsPanelDropdownMenuProps } from '../utils/hooks';
|
|
27
27
|
|
|
28
|
-
export default function Edit( {
|
|
28
|
+
export default function Edit( {
|
|
29
|
+
attributes,
|
|
30
|
+
clientId,
|
|
31
|
+
setAttributes,
|
|
32
|
+
context,
|
|
33
|
+
} ) {
|
|
29
34
|
const { openByDefault } = attributes;
|
|
30
35
|
const dropdownMenuProps = useToolsPanelDropdownMenuProps();
|
|
31
36
|
|
|
@@ -70,9 +75,14 @@ export default function Edit( { attributes, clientId, setAttributes } ) {
|
|
|
70
75
|
} ),
|
|
71
76
|
} );
|
|
72
77
|
|
|
78
|
+
// Get heading level from context.
|
|
79
|
+
const headingLevel = context && context[ 'core/accordion-heading-level' ];
|
|
73
80
|
const innerBlocksProps = useInnerBlocksProps( blockProps, {
|
|
74
81
|
template: [
|
|
75
|
-
[
|
|
82
|
+
[
|
|
83
|
+
'core/accordion-heading',
|
|
84
|
+
headingLevel ? { level: headingLevel } : {},
|
|
85
|
+
],
|
|
76
86
|
[
|
|
77
87
|
'core/accordion-panel',
|
|
78
88
|
{
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
<?php
|
|
2
2
|
|
|
3
3
|
/**
|
|
4
|
-
* Server-side rendering of the `core/accordion-
|
|
4
|
+
* Server-side rendering of the `core/accordion-item` block.
|
|
5
5
|
*
|
|
6
6
|
* @package WordPress
|
|
7
7
|
* @since 6.6.0
|
|
@@ -11,13 +11,13 @@
|
|
|
11
11
|
*
|
|
12
12
|
* @return string Returns the updated markup.
|
|
13
13
|
*/
|
|
14
|
-
function
|
|
14
|
+
function block_core_accordion_item_render( $attributes, $content ) {
|
|
15
15
|
if ( ! $content ) {
|
|
16
16
|
return $content;
|
|
17
17
|
}
|
|
18
18
|
|
|
19
19
|
$p = new WP_HTML_Tag_Processor( $content );
|
|
20
|
-
$unique_id = wp_unique_id( 'accordion-
|
|
20
|
+
$unique_id = wp_unique_id( 'accordion-item-' );
|
|
21
21
|
|
|
22
22
|
// Initialize the state of the item on the server using a closure,
|
|
23
23
|
// since we need to get derived state based on the current context.
|
|
@@ -31,13 +31,13 @@ function block_core_accordion_content_render( $attributes, $content ) {
|
|
|
31
31
|
)
|
|
32
32
|
);
|
|
33
33
|
|
|
34
|
-
if ( $p->next_tag( array( 'class_name' => 'wp-block-accordion-
|
|
34
|
+
if ( $p->next_tag( array( 'class_name' => 'wp-block-accordion-item' ) ) ) {
|
|
35
35
|
$open_by_default = $attributes['openByDefault'] ? 'true' : 'false';
|
|
36
36
|
$p->set_attribute( 'data-wp-context', '{ "id": "' . $unique_id . '", "openByDefault": ' . $open_by_default . ' }' );
|
|
37
37
|
$p->set_attribute( 'data-wp-class--is-open', 'state.isOpen' );
|
|
38
|
-
$p->set_attribute( 'data-wp-init', 'callbacks.
|
|
38
|
+
$p->set_attribute( 'data-wp-init', 'callbacks.initAccordionItems' );
|
|
39
39
|
|
|
40
|
-
if ( $p->next_tag( array( 'class_name' => 'accordion-
|
|
40
|
+
if ( $p->next_tag( array( 'class_name' => 'wp-block-accordion-heading__toggle' ) ) ) {
|
|
41
41
|
$p->set_attribute( 'data-wp-on--click', 'actions.toggle' );
|
|
42
42
|
$p->set_attribute( 'data-wp-on--keydown', 'actions.handleKeyDown' );
|
|
43
43
|
$p->set_attribute( 'id', $unique_id );
|
|
@@ -59,16 +59,16 @@ function block_core_accordion_content_render( $attributes, $content ) {
|
|
|
59
59
|
}
|
|
60
60
|
|
|
61
61
|
/**
|
|
62
|
-
* Registers the `core/accordion-
|
|
62
|
+
* Registers the `core/accordion-item` block on server.
|
|
63
63
|
*
|
|
64
64
|
* @since 6.6.0
|
|
65
65
|
*/
|
|
66
|
-
function
|
|
66
|
+
function register_block_core_accordion_item() {
|
|
67
67
|
register_block_type_from_metadata(
|
|
68
|
-
__DIR__ . '/accordion-
|
|
68
|
+
__DIR__ . '/accordion-item',
|
|
69
69
|
array(
|
|
70
|
-
'render_callback' => '
|
|
70
|
+
'render_callback' => 'block_core_accordion_item_render',
|
|
71
71
|
)
|
|
72
72
|
);
|
|
73
73
|
}
|
|
74
|
-
add_action( 'init', '
|
|
74
|
+
add_action( 'init', 'register_block_core_accordion_item' );
|
|
@@ -9,17 +9,11 @@ import clsx from 'clsx';
|
|
|
9
9
|
|
|
10
10
|
export default function save( { attributes } ) {
|
|
11
11
|
const { openByDefault } = attributes;
|
|
12
|
-
const blockProps = useBlockProps.save(
|
|
13
|
-
|
|
14
|
-
{
|
|
12
|
+
const blockProps = useBlockProps.save( {
|
|
13
|
+
className: clsx( {
|
|
15
14
|
'is-open': openByDefault,
|
|
16
|
-
},
|
|
17
|
-
blockProps.className
|
|
18
|
-
);
|
|
19
|
-
const innerBlocksProps = useInnerBlocksProps.save( {
|
|
20
|
-
...blockProps,
|
|
21
|
-
className,
|
|
15
|
+
} ),
|
|
22
16
|
} );
|
|
23
|
-
|
|
17
|
+
const innerBlocksProps = useInnerBlocksProps.save( blockProps );
|
|
24
18
|
return <div { ...innerBlocksProps } />;
|
|
25
19
|
}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
.wp-block-accordion-item {
|
|
2
|
+
display: grid;
|
|
3
|
+
grid-template-rows: max-content 0fr;
|
|
4
|
+
|
|
5
|
+
&.is-open {
|
|
6
|
+
grid-template-rows: max-content 1fr;
|
|
7
|
+
|
|
8
|
+
> .wp-block-accordion-heading .wp-block-accordion-heading__toggle-icon {
|
|
9
|
+
transform: rotate(45deg);
|
|
10
|
+
}
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
/* Add transitions only for users who do not prefer reduced motion */
|
|
14
|
+
@media (prefers-reduced-motion: no-preference) {
|
|
15
|
+
transition: grid-template-rows 0.3s ease-out;
|
|
16
|
+
|
|
17
|
+
> .wp-block-accordion-heading .wp-block-accordion-heading__toggle-icon {
|
|
18
|
+
transition: transform 0.2s ease-in-out;
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
}
|
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
"category": "design",
|
|
7
7
|
"description": "Displays an accordion panel.",
|
|
8
8
|
"__experimental": true,
|
|
9
|
-
"parent": [ "core/accordion-
|
|
9
|
+
"parent": [ "core/accordion-item" ],
|
|
10
10
|
"supports": {
|
|
11
11
|
"color": {
|
|
12
12
|
"background": true,
|
|
@@ -47,7 +47,8 @@
|
|
|
47
47
|
}
|
|
48
48
|
},
|
|
49
49
|
"shadow": true,
|
|
50
|
-
"layout": true
|
|
50
|
+
"layout": true,
|
|
51
|
+
"blockVisibility": false
|
|
51
52
|
},
|
|
52
53
|
"attributes": {
|
|
53
54
|
"allowedBlocks": {
|
|
@@ -67,5 +68,6 @@
|
|
|
67
68
|
"default": false
|
|
68
69
|
}
|
|
69
70
|
},
|
|
70
|
-
"textdomain": "default"
|
|
71
|
+
"textdomain": "default",
|
|
72
|
+
"style": "wp-block-accordion-panel"
|
|
71
73
|
}
|