@wordpress/block-library 9.30.1-next.a730c9c8c.0 → 9.31.1-next.233ccab9b.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.
Files changed (232) hide show
  1. package/CHANGELOG.md +2 -0
  2. package/build/accordion/edit.js +6 -5
  3. package/build/accordion/edit.js.map +1 -1
  4. package/build/accordion/index.js +39 -4
  5. package/build/accordion/index.js.map +1 -1
  6. package/build/accordion/save.js +2 -19
  7. package/build/accordion/save.js.map +1 -1
  8. package/build/accordion/view.js +50 -16
  9. package/build/accordion/view.js.map +1 -1
  10. package/build/accordion-content/index.js +17 -3
  11. package/build/accordion-content/index.js.map +1 -1
  12. package/build/accordion-content/save.js +5 -7
  13. package/build/accordion-content/save.js.map +1 -1
  14. package/build/accordion-header/edit.js +13 -47
  15. package/build/accordion-header/edit.js.map +1 -1
  16. package/build/accordion-header/index.js +6 -11
  17. package/build/accordion-header/index.js.map +1 -1
  18. package/build/accordion-header/save.js +11 -44
  19. package/build/accordion-header/save.js.map +1 -1
  20. package/build/accordion-panel/edit.js +2 -1
  21. package/build/accordion-panel/edit.js.map +1 -1
  22. package/build/accordion-panel/index.js +3 -3
  23. package/build/accordion-panel/index.js.map +1 -1
  24. package/build/accordion-panel/save.js +3 -1
  25. package/build/accordion-panel/save.js.map +1 -1
  26. package/build/avatar/hooks.js +7 -17
  27. package/build/avatar/hooks.js.map +1 -1
  28. package/build/group/variations.js +3 -4
  29. package/build/group/variations.js.map +1 -1
  30. package/build/navigation/edit/leaf-more-menu.js +6 -1
  31. package/build/navigation/edit/leaf-more-menu.js.map +1 -1
  32. package/build/navigation/index.js +2 -1
  33. package/build/navigation/index.js.map +1 -1
  34. package/build/navigation-link/index.js +2 -1
  35. package/build/navigation-link/index.js.map +1 -1
  36. package/build/navigation-submenu/edit.js +2 -4
  37. package/build/navigation-submenu/edit.js.map +1 -1
  38. package/build/navigation-submenu/index.js +2 -1
  39. package/build/navigation-submenu/index.js.map +1 -1
  40. package/build/page-list/index.js +2 -1
  41. package/build/page-list/index.js.map +1 -1
  42. package/build/post-author/edit.js +7 -6
  43. package/build/post-author/edit.js.map +1 -1
  44. package/build/post-date/edit.js +16 -3
  45. package/build/post-date/edit.js.map +1 -1
  46. package/build/post-time-to-read/edit.js +111 -11
  47. package/build/post-time-to-read/edit.js.map +1 -1
  48. package/build/post-time-to-read/index.js +17 -1
  49. package/build/post-time-to-read/index.js.map +1 -1
  50. package/build/table-of-contents/index.js +1 -0
  51. package/build/table-of-contents/index.js.map +1 -1
  52. package/build/term-description/edit.js +18 -2
  53. package/build/term-description/edit.js.map +1 -1
  54. package/build/term-description/index.js +1 -0
  55. package/build/term-description/index.js.map +1 -1
  56. package/build/term-description/use-term-description.js +85 -0
  57. package/build/term-description/use-term-description.js.map +1 -0
  58. package/build/term-template/edit.js +11 -7
  59. package/build/term-template/edit.js.map +1 -1
  60. package/build/term-template/index.js +1 -1
  61. package/build/terms-query/index.js +8 -2
  62. package/build/terms-query/index.js.map +1 -1
  63. package/build/terms-query/inspector-controls/advanced-controls.js +51 -0
  64. package/build/terms-query/inspector-controls/advanced-controls.js.map +1 -0
  65. package/build/terms-query/inspector-controls/display-options.js +87 -0
  66. package/build/terms-query/inspector-controls/display-options.js.map +1 -0
  67. package/build/terms-query/inspector-controls/empty-terms-control.js +38 -0
  68. package/build/terms-query/inspector-controls/empty-terms-control.js.map +1 -0
  69. package/build/terms-query/inspector-controls/hierarchy-control.js +40 -0
  70. package/build/terms-query/inspector-controls/hierarchy-control.js.map +1 -0
  71. package/build/terms-query/inspector-controls/index.js +127 -0
  72. package/build/terms-query/inspector-controls/index.js.map +1 -0
  73. package/build/terms-query/inspector-controls/max-terms-control.js +50 -0
  74. package/build/terms-query/inspector-controls/max-terms-control.js.map +1 -0
  75. package/build/terms-query/inspector-controls/ordering-controls.js +57 -0
  76. package/build/terms-query/inspector-controls/ordering-controls.js.map +1 -0
  77. package/build/terms-query/inspector-controls/taxonomy-control.js +52 -0
  78. package/build/terms-query/inspector-controls/taxonomy-control.js.map +1 -0
  79. package/build/utils/hooks.js +15 -0
  80. package/build/utils/hooks.js.map +1 -1
  81. package/build-module/accordion/edit.js +6 -5
  82. package/build-module/accordion/edit.js.map +1 -1
  83. package/build-module/accordion/index.js +40 -4
  84. package/build-module/accordion/index.js.map +1 -1
  85. package/build-module/accordion/save.js +2 -17
  86. package/build-module/accordion/save.js.map +1 -1
  87. package/build-module/accordion/view.js +51 -17
  88. package/build-module/accordion/view.js.map +1 -1
  89. package/build-module/accordion-content/index.js +17 -3
  90. package/build-module/accordion-content/index.js.map +1 -1
  91. package/build-module/accordion-content/save.js +5 -7
  92. package/build-module/accordion-content/save.js.map +1 -1
  93. package/build-module/accordion-header/edit.js +14 -45
  94. package/build-module/accordion-header/edit.js.map +1 -1
  95. package/build-module/accordion-header/index.js +6 -11
  96. package/build-module/accordion-header/index.js.map +1 -1
  97. package/build-module/accordion-header/save.js +12 -42
  98. package/build-module/accordion-header/save.js.map +1 -1
  99. package/build-module/accordion-panel/edit.js +2 -1
  100. package/build-module/accordion-panel/edit.js.map +1 -1
  101. package/build-module/accordion-panel/index.js +3 -3
  102. package/build-module/accordion-panel/index.js.map +1 -1
  103. package/build-module/accordion-panel/save.js +3 -1
  104. package/build-module/accordion-panel/save.js.map +1 -1
  105. package/build-module/avatar/hooks.js +5 -15
  106. package/build-module/avatar/hooks.js.map +1 -1
  107. package/build-module/group/variations.js +3 -4
  108. package/build-module/group/variations.js.map +1 -1
  109. package/build-module/navigation/edit/leaf-more-menu.js +6 -1
  110. package/build-module/navigation/edit/leaf-more-menu.js.map +1 -1
  111. package/build-module/navigation/index.js +2 -1
  112. package/build-module/navigation/index.js.map +1 -1
  113. package/build-module/navigation-link/index.js +2 -1
  114. package/build-module/navigation-link/index.js.map +1 -1
  115. package/build-module/navigation-submenu/edit.js +1 -3
  116. package/build-module/navigation-submenu/edit.js.map +1 -1
  117. package/build-module/navigation-submenu/index.js +2 -1
  118. package/build-module/navigation-submenu/index.js.map +1 -1
  119. package/build-module/page-list/index.js +2 -1
  120. package/build-module/page-list/index.js.map +1 -1
  121. package/build-module/post-author/edit.js +8 -7
  122. package/build-module/post-author/edit.js.map +1 -1
  123. package/build-module/post-date/edit.js +17 -4
  124. package/build-module/post-date/edit.js.map +1 -1
  125. package/build-module/post-time-to-read/edit.js +112 -14
  126. package/build-module/post-time-to-read/edit.js.map +1 -1
  127. package/build-module/post-time-to-read/index.js +17 -1
  128. package/build-module/post-time-to-read/index.js.map +1 -1
  129. package/build-module/table-of-contents/index.js +1 -0
  130. package/build-module/table-of-contents/index.js.map +1 -1
  131. package/build-module/term-description/edit.js +18 -2
  132. package/build-module/term-description/edit.js.map +1 -1
  133. package/build-module/term-description/index.js +1 -0
  134. package/build-module/term-description/index.js.map +1 -1
  135. package/build-module/term-description/use-term-description.js +79 -0
  136. package/build-module/term-description/use-term-description.js.map +1 -0
  137. package/build-module/term-template/edit.js +11 -7
  138. package/build-module/term-template/edit.js.map +1 -1
  139. package/build-module/term-template/index.js +1 -1
  140. package/build-module/terms-query/index.js +8 -2
  141. package/build-module/terms-query/index.js.map +1 -1
  142. package/build-module/terms-query/inspector-controls/advanced-controls.js +44 -0
  143. package/build-module/terms-query/inspector-controls/advanced-controls.js.map +1 -0
  144. package/build-module/terms-query/inspector-controls/display-options.js +80 -0
  145. package/build-module/terms-query/inspector-controls/display-options.js.map +1 -0
  146. package/build-module/terms-query/inspector-controls/empty-terms-control.js +31 -0
  147. package/build-module/terms-query/inspector-controls/empty-terms-control.js.map +1 -0
  148. package/build-module/terms-query/inspector-controls/hierarchy-control.js +33 -0
  149. package/build-module/terms-query/inspector-controls/hierarchy-control.js.map +1 -0
  150. package/build-module/terms-query/inspector-controls/index.js +119 -0
  151. package/build-module/terms-query/inspector-controls/index.js.map +1 -0
  152. package/build-module/terms-query/inspector-controls/max-terms-control.js +43 -0
  153. package/build-module/terms-query/inspector-controls/max-terms-control.js.map +1 -0
  154. package/build-module/terms-query/inspector-controls/ordering-controls.js +50 -0
  155. package/build-module/terms-query/inspector-controls/ordering-controls.js.map +1 -0
  156. package/build-module/terms-query/inspector-controls/taxonomy-control.js +45 -0
  157. package/build-module/terms-query/inspector-controls/taxonomy-control.js.map +1 -0
  158. package/build-module/utils/hooks.js +14 -0
  159. package/build-module/utils/hooks.js.map +1 -1
  160. package/build-style/accordion-content/style-rtl.css +155 -0
  161. package/build-style/accordion-content/style.css +155 -0
  162. package/build-style/{accordion → accordion-header}/style-rtl.css +12 -51
  163. package/build-style/{accordion → accordion-header}/style.css +12 -51
  164. package/build-style/accordion-panel/style-rtl.css +140 -0
  165. package/build-style/accordion-panel/style.css +140 -0
  166. package/build-style/style-rtl.css +25 -38
  167. package/build-style/style.css +25 -38
  168. package/package.json +35 -35
  169. package/src/accordion/block.json +16 -3
  170. package/src/accordion/edit.js +39 -34
  171. package/src/accordion/index.js +35 -1
  172. package/src/accordion/index.php +3 -19
  173. package/src/accordion/save.js +2 -16
  174. package/src/accordion/view.js +64 -15
  175. package/src/accordion-content/block.json +17 -3
  176. package/src/accordion-content/index.php +3 -2
  177. package/src/accordion-content/save.js +4 -10
  178. package/src/accordion-content/style.scss +21 -0
  179. package/src/accordion-header/block.json +6 -11
  180. package/src/accordion-header/edit.js +17 -61
  181. package/src/accordion-header/save.js +24 -54
  182. package/src/accordion-header/style.scss +39 -0
  183. package/src/accordion-panel/block.json +3 -3
  184. package/src/accordion-panel/edit.js +1 -0
  185. package/src/accordion-panel/save.js +3 -1
  186. package/src/accordion-panel/style.scss +8 -0
  187. package/src/avatar/hooks.js +5 -10
  188. package/src/comments/index.php +2 -2
  189. package/src/group/variations.js +3 -14
  190. package/src/navigation/block.json +2 -1
  191. package/src/navigation/edit/leaf-more-menu.js +9 -1
  192. package/src/navigation/index.php +2 -2
  193. package/src/navigation-link/block.json +2 -1
  194. package/src/navigation-submenu/block.json +2 -1
  195. package/src/navigation-submenu/edit.js +1 -4
  196. package/src/page-list/block.json +2 -1
  197. package/src/post-author/edit.js +16 -7
  198. package/src/post-date/edit.js +16 -16
  199. package/src/post-time-to-read/block.json +17 -1
  200. package/src/post-time-to-read/edit.js +167 -20
  201. package/src/post-time-to-read/index.php +47 -15
  202. package/src/social-link/index.php +2 -2
  203. package/src/style.scss +3 -1
  204. package/src/table-of-contents/block.json +1 -0
  205. package/src/table-of-contents/index.php +44 -0
  206. package/src/term-description/block.json +1 -0
  207. package/src/term-description/edit.js +18 -3
  208. package/src/term-description/use-term-description.js +109 -0
  209. package/src/term-template/block.json +1 -1
  210. package/src/term-template/edit.js +11 -6
  211. package/src/term-template/index.php +13 -7
  212. package/src/terms-query/block.json +8 -2
  213. package/src/terms-query/inspector-controls/advanced-controls.js +37 -0
  214. package/src/terms-query/inspector-controls/display-options.js +87 -0
  215. package/src/terms-query/inspector-controls/empty-terms-control.js +30 -0
  216. package/src/terms-query/inspector-controls/hierarchy-control.js +30 -0
  217. package/src/terms-query/inspector-controls/index.js +137 -0
  218. package/src/terms-query/inspector-controls/max-terms-control.js +44 -0
  219. package/src/terms-query/inspector-controls/ordering-controls.js +55 -0
  220. package/src/terms-query/inspector-controls/taxonomy-control.js +41 -0
  221. package/src/utils/hooks.js +9 -0
  222. package/build/accordion-content/icons.js +0 -30
  223. package/build/accordion-content/icons.js.map +0 -1
  224. package/build/terms-query/inspector-controls.js +0 -231
  225. package/build/terms-query/inspector-controls.js.map +0 -1
  226. package/build-module/accordion-content/icons.js +0 -22
  227. package/build-module/accordion-content/icons.js.map +0 -1
  228. package/build-module/terms-query/inspector-controls.js +0 -224
  229. package/build-module/terms-query/inspector-controls.js.map +0 -1
  230. package/src/accordion/style.scss +0 -82
  231. package/src/accordion-content/icons.js +0 -23
  232. package/src/terms-query/inspector-controls.js +0 -239
@@ -1,3 +1,8 @@
1
+ /**
2
+ * WordPress dependencies
3
+ */
4
+ import { __ } from '@wordpress/i18n';
5
+
1
6
  /**
2
7
  * Internal dependencies
3
8
  */
@@ -13,7 +18,36 @@ export { metadata, name };
13
18
 
14
19
  export const settings = {
15
20
  icon,
16
- example: {},
21
+ example: {
22
+ innerBlocks: [
23
+ {
24
+ name: 'core/accordion-content',
25
+ innerBlocks: [
26
+ {
27
+ name: 'core/accordion-header',
28
+ attributes: {
29
+ title: __(
30
+ 'Lorem ipsum dolor sit amet, consectetur.'
31
+ ),
32
+ },
33
+ },
34
+ ],
35
+ },
36
+ {
37
+ name: 'core/accordion-content',
38
+ innerBlocks: [
39
+ {
40
+ name: 'core/accordion-header',
41
+ attributes: {
42
+ title: __(
43
+ 'Suspendisse commodo lacus, interdum et.'
44
+ ),
45
+ },
46
+ },
47
+ ],
48
+ },
49
+ ],
50
+ },
17
51
  edit,
18
52
  save,
19
53
  };
@@ -15,28 +15,12 @@ function render_block_core_accordion( $attributes, $content ) {
15
15
  return $content;
16
16
  }
17
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/accordion/view.min.js' );
21
- }
22
-
23
- wp_register_script_module(
24
- '@wordpress/block-library/accordion',
25
- isset( $module_url ) ? $module_url : includes_url( "blocks/accordion/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/accordion' );
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';
18
+ $p = new WP_HTML_Tag_Processor( $content );
19
+ $autoclose = $attributes['autoclose'] ? 'true' : 'false';
36
20
 
37
21
  if ( $p->next_tag( array( 'class_name' => 'wp-block-accordion' ) ) ) {
38
22
  $p->set_attribute( 'data-wp-interactive', 'core/accordion' );
39
- $p->set_attribute( 'data-wp-context', '{ "autoclose": ' . $autoclose . ', "isOpen": [], "icon": "' . $icon . '", "iconPosition": "' . $icon_position . '" }' );
23
+ $p->set_attribute( 'data-wp-context', '{ "autoclose": ' . $autoclose . ', "accordionContents": [] }' );
40
24
 
41
25
  // Only modify content if directives have been set.
42
26
  $content = $p->get_updated_html();
@@ -1,23 +1,9 @@
1
- /**
2
- * External dependencies
3
- */
4
- import clsx from 'clsx';
5
1
  /**
6
2
  * WordPress dependencies
7
3
  */
8
4
  import { useBlockProps, useInnerBlocksProps } from '@wordpress/block-editor';
9
5
 
10
- export default function save( { attributes } ) {
11
- const { iconPosition } = attributes;
6
+ export default function save() {
12
7
  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
- );
8
+ return <div { ...useInnerBlocksProps.save( blockProps ) } />;
23
9
  }
@@ -1,38 +1,87 @@
1
1
  /**
2
2
  * WordPress dependencies
3
3
  */
4
- import { store, getContext } from '@wordpress/interactivity';
4
+ import { store, getContext, withSyncEvent } from '@wordpress/interactivity';
5
5
 
6
- const { state } = store( 'core/accordion', {
6
+ store( 'core/accordion', {
7
7
  state: {
8
8
  get isOpen() {
9
- const { isOpen, id } = getContext();
10
- return isOpen.includes( id );
9
+ const { id, accordionContents } = getContext();
10
+ const accordionContent = accordionContents.find(
11
+ ( item ) => item.id === id
12
+ );
13
+ return accordionContent ? accordionContent.isOpen : false;
11
14
  },
12
15
  },
13
16
  actions: {
14
17
  toggle: () => {
15
18
  const context = getContext();
16
- const { id, autoclose } = context;
19
+ const { id, autoclose, accordionContents } = context;
20
+ const accordionContent = accordionContents.find(
21
+ ( item ) => item.id === id
22
+ );
17
23
 
18
24
  if ( autoclose ) {
19
- context.isOpen = state.isOpen ? [] : [ id ];
20
- } else if ( state.isOpen ) {
21
- context.isOpen = context.isOpen.filter(
22
- ( item ) => item !== id
23
- );
25
+ accordionContents.forEach( ( item ) => {
26
+ item.isOpen =
27
+ item.id === id ? ! accordionContent.isOpen : false;
28
+ } );
24
29
  } else {
25
- context.isOpen.push( id );
30
+ accordionContent.isOpen = ! accordionContent.isOpen;
26
31
  }
27
32
  },
33
+ handleKeyDown: withSyncEvent( ( event ) => {
34
+ if (
35
+ event.key !== 'ArrowUp' &&
36
+ event.key !== 'ArrowDown' &&
37
+ event.key !== 'Home' &&
38
+ event.key !== 'End'
39
+ ) {
40
+ return;
41
+ }
42
+
43
+ event.preventDefault();
44
+ const context = getContext();
45
+ const { id, accordionContents } = context;
46
+ const currentIndex = accordionContents.findIndex(
47
+ ( item ) => item.id === id
48
+ );
49
+
50
+ let nextIndex;
51
+
52
+ switch ( event.key ) {
53
+ case 'ArrowUp':
54
+ nextIndex = Math.max( 0, currentIndex - 1 );
55
+ break;
56
+ case 'ArrowDown':
57
+ nextIndex = Math.min(
58
+ currentIndex + 1,
59
+ accordionContents.length - 1
60
+ );
61
+ break;
62
+ case 'Home':
63
+ nextIndex = 0;
64
+ break;
65
+ case 'End':
66
+ nextIndex = accordionContents.length - 1;
67
+ break;
68
+ }
69
+
70
+ const nextId = accordionContents[ nextIndex ].id;
71
+ const nextButton = document.getElementById( nextId );
72
+ if ( nextButton ) {
73
+ nextButton.focus();
74
+ }
75
+ } ),
28
76
  },
29
77
  callbacks: {
30
- initIsOpen: () => {
78
+ initAccordionContents: () => {
31
79
  const context = getContext();
32
80
  const { id, openByDefault } = context;
33
- if ( openByDefault ) {
34
- context.isOpen.push( id );
35
- }
81
+ context.accordionContents.push( {
82
+ id,
83
+ isOpen: openByDefault,
84
+ } );
36
85
  },
37
86
  },
38
87
  } );
@@ -11,7 +11,7 @@
11
11
  "supports": {
12
12
  "color": {
13
13
  "background": true,
14
- "gradient": true
14
+ "gradients": true
15
15
  },
16
16
  "interactivity": true,
17
17
  "spacing": {
@@ -31,7 +31,20 @@
31
31
  }
32
32
  },
33
33
  "shadow": true,
34
- "layout": true
34
+ "layout": true,
35
+ "typography": {
36
+ "fontSize": true,
37
+ "lineHeight": true,
38
+ "__experimentalFontFamily": true,
39
+ "__experimentalFontWeight": true,
40
+ "__experimentalFontStyle": true,
41
+ "__experimentalTextTransform": true,
42
+ "__experimentalTextDecoration": true,
43
+ "__experimentalLetterSpacing": true,
44
+ "__experimentalDefaultControls": {
45
+ "fontSize": true
46
+ }
47
+ }
35
48
  },
36
49
  "attributes": {
37
50
  "openByDefault": {
@@ -39,5 +52,6 @@
39
52
  "default": false
40
53
  }
41
54
  },
42
- "textdomain": "default"
55
+ "textdomain": "default",
56
+ "style": "wp-block-accordion-content"
43
57
  }
@@ -35,10 +35,11 @@ function block_core_accordion_content_render( $attributes, $content ) {
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.initIsOpen' );
38
+ $p->set_attribute( 'data-wp-init', 'callbacks.initAccordionContents' );
39
39
 
40
- if ( $p->next_tag( array( 'class_name' => 'accordion-content__toggle' ) ) ) {
40
+ if ( $p->next_tag( array( 'class_name' => 'wp-block-accordion-header__toggle' ) ) ) {
41
41
  $p->set_attribute( 'data-wp-on--click', 'actions.toggle' );
42
+ $p->set_attribute( 'data-wp-on--keydown', 'actions.handleKeyDown' );
42
43
  $p->set_attribute( 'id', $unique_id );
43
44
  $p->set_attribute( 'aria-controls', $unique_id . '-panel' );
44
45
  $p->set_attribute( 'data-wp-bind--aria-expanded', 'state.isOpen' );
@@ -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
- const className = clsx(
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-content {
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-header .wp-block-accordion-header__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-header .wp-block-accordion-header__toggle-icon {
18
+ transition: transform 0.2s ease-in-out;
19
+ }
20
+ }
21
+ }
@@ -15,17 +15,16 @@
15
15
  "anchor": true,
16
16
  "color": {
17
17
  "background": true,
18
- "gradient": true
18
+ "gradients": true
19
19
  },
20
20
  "align": false,
21
21
  "interactivity": true,
22
22
  "spacing": {
23
23
  "padding": true,
24
- "margin": [ "top", "bottom" ],
25
24
  "__experimentalDefaultControls": {
26
- "padding": true,
27
- "margin": true
28
- }
25
+ "padding": true
26
+ },
27
+ "__experimentalSkipSerialization": true
29
28
  },
30
29
  "__experimentalBorder": {
31
30
  "color": true,
@@ -40,7 +39,6 @@
40
39
  }
41
40
  },
42
41
  "typography": {
43
- "textAlign": true,
44
42
  "fontSize": true,
45
43
  "__experimentalFontFamily": true,
46
44
  "__experimentalFontWeight": true,
@@ -63,7 +61,8 @@
63
61
  "title": {
64
62
  "type": "rich-text",
65
63
  "source": "rich-text",
66
- "selector": "span"
64
+ "selector": ".wp-block-accordion-header__toggle-title",
65
+ "role": "content"
67
66
  },
68
67
  "level": {
69
68
  "type": "number",
@@ -72,10 +71,6 @@
72
71
  "levelOptions": {
73
72
  "type": "array"
74
73
  },
75
- "textAlignment": {
76
- "type": "string",
77
- "default": "left"
78
- },
79
74
  "iconPosition": {
80
75
  "type": "string",
81
76
  "enum": [ "left", "right" ],
@@ -1,7 +1,3 @@
1
- /**
2
- * External dependencies
3
- */
4
- import clsx from 'clsx';
5
1
  /**
6
2
  * WordPress dependencies
7
3
  */
@@ -9,26 +5,15 @@ import { __ } from '@wordpress/i18n';
9
5
  import { useEffect } from '@wordpress/element';
10
6
  import {
11
7
  useBlockProps,
12
- __experimentalUseBorderProps as useBorderProps,
13
- __experimentalUseColorProps as useColorProps,
14
8
  __experimentalGetSpacingClassesAndStyles as useSpacingProps,
15
- __experimentalGetShadowClassesAndStyles as useShadowProps,
16
9
  BlockControls,
17
10
  HeadingLevelDropdown,
18
11
  RichText,
19
12
  } from '@wordpress/block-editor';
20
13
  import { ToolbarGroup } from '@wordpress/components';
21
- /**
22
- * Internal dependencies
23
- */
24
- import { plus } from '../accordion-content/icons';
25
-
26
- const ICONS = {
27
- plus,
28
- };
29
14
 
30
15
  export default function Edit( { attributes, setAttributes, context } ) {
31
- const { level, title, textAlign, levelOptions } = attributes;
16
+ const { level, title, levelOptions } = attributes;
32
17
  const {
33
18
  'core/accordion-icon-position': iconPosition,
34
19
  'core/accordion-show-icon': showIcon,
@@ -46,13 +31,7 @@ export default function Edit( { attributes, setAttributes, context } ) {
46
31
  }, [ iconPosition, showIcon, setAttributes ] );
47
32
 
48
33
  const blockProps = useBlockProps();
49
- const borderProps = useBorderProps( attributes );
50
- const colorProps = useColorProps( attributes );
51
34
  const spacingProps = useSpacingProps( attributes );
52
- const shadowProps = useShadowProps( attributes );
53
-
54
- const Icon = ICONS.plus;
55
- const shouldShowIcon = showIcon && Icon;
56
35
 
57
36
  return (
58
37
  <>
@@ -67,38 +46,23 @@ export default function Edit( { attributes, setAttributes, context } ) {
67
46
  />
68
47
  </ToolbarGroup>
69
48
  </BlockControls>
70
- <TagName
71
- { ...blockProps }
72
- className={ clsx(
73
- blockProps.className,
74
- colorProps.className,
75
- borderProps.className,
76
- 'accordion-content__heading',
77
- {
78
- [ `has-custom-font-size` ]: blockProps.style.fontSize,
79
- [ `icon-position-left` ]: iconPosition === 'left',
80
- [ `has-text-align-${ textAlign }` ]: textAlign,
81
- }
82
- ) }
83
- style={ {
84
- ...borderProps.style,
85
- ...colorProps.style,
86
- ...shadowProps.style,
87
- } }
88
- >
49
+ <TagName { ...blockProps }>
89
50
  <button
90
- className={ clsx( 'accordion-content__toggle' ) }
51
+ className="wp-block-accordion-header__toggle"
91
52
  style={ {
92
53
  ...spacingProps.style,
93
54
  } }
94
55
  >
56
+ { showIcon && iconPosition === 'left' && (
57
+ <span
58
+ className="wp-block-accordion-header__toggle-icon"
59
+ aria-hidden="true"
60
+ >
61
+ +
62
+ </span>
63
+ ) }
95
64
  <RichText
96
- allowedFormats={ [
97
- 'core/bold',
98
- 'core/italic',
99
- 'core/image',
100
- 'core/strikethrough',
101
- ] }
65
+ withoutInteractiveFormatting
102
66
  disableLineBreaks
103
67
  tagName="span"
104
68
  value={ title }
@@ -106,22 +70,14 @@ export default function Edit( { attributes, setAttributes, context } ) {
106
70
  setAttributes( { title: newTitle } )
107
71
  }
108
72
  placeholder={ __( 'Accordion title' ) }
73
+ className="wp-block-accordion-header__toggle-title"
109
74
  />
110
- { shouldShowIcon && (
75
+ { showIcon && iconPosition === 'right' && (
111
76
  <span
112
- className={ clsx(
113
- `accordion-content__toggle-icon`,
114
- {
115
- 'has-icon-plus': true,
116
- }
117
- ) }
118
- style={ {
119
- // TO-DO: make this configurable
120
- width: `1.2em`,
121
- height: `1.2em`,
122
- } }
77
+ className="wp-block-accordion-header__toggle-icon"
78
+ aria-hidden="true"
123
79
  >
124
- { Icon && <Icon width="1.2em" height="1.2em" /> }
80
+ +
125
81
  </span>
126
82
  ) }
127
83
  </button>
@@ -1,78 +1,48 @@
1
- /**
2
- * External dependencies
3
- */
4
- import clsx from 'clsx';
5
1
  /**
6
2
  * WordPress dependencies
7
3
  */
8
4
  import {
9
5
  useBlockProps,
10
- __experimentalGetBorderClassesAndStyles as getBorderClassesAndStyles,
11
- __experimentalGetColorClassesAndStyles as getColorClassesAndStyles,
12
6
  __experimentalGetSpacingClassesAndStyles as getSpacingClassesAndStyles,
13
- __experimentalGetShadowClassesAndStyles as getShadowClassesAndStyles,
14
7
  RichText,
15
8
  } from '@wordpress/block-editor';
16
- /**
17
- * Internal dependencies
18
- */
19
- import { plus } from '../accordion-content/icons';
20
-
21
- const ICONS = {
22
- plus,
23
- };
24
9
 
25
10
  export default function save( { attributes } ) {
26
- const { level, title, iconPosition, textAlign, showIcon } = attributes;
11
+ const { level, title, iconPosition, showIcon } = attributes;
27
12
  const TagName = 'h' + level;
28
13
 
29
14
  const blockProps = useBlockProps.save();
30
- const borderProps = getBorderClassesAndStyles( attributes );
31
- const colorProps = getColorClassesAndStyles( attributes );
32
15
  const spacingProps = getSpacingClassesAndStyles( attributes );
33
- const shadowProps = getShadowClassesAndStyles( attributes );
34
-
35
- const Icon = ICONS.plus;
36
16
 
37
17
  return (
38
- <TagName
39
- { ...blockProps }
40
- className={ clsx(
41
- blockProps.className,
42
- colorProps.className,
43
- borderProps.className,
44
- 'accordion-content__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
- >
18
+ <TagName { ...blockProps }>
57
19
  <button
58
- className={ clsx( 'accordion-content__toggle' ) }
20
+ className="wp-block-accordion-header__toggle"
59
21
  style={ {
60
22
  ...spacingProps.style,
61
23
  } }
62
24
  >
63
- <RichText.Content tagName="span" value={ title } />
64
- <span
65
- className={ clsx( `accordion-content__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>
25
+ { showIcon && iconPosition === 'left' && (
26
+ <span
27
+ className="wp-block-accordion-header__toggle-icon"
28
+ aria-hidden="true"
29
+ >
30
+ +
31
+ </span>
32
+ ) }
33
+ <RichText.Content
34
+ className="wp-block-accordion-header__toggle-title"
35
+ tagName="span"
36
+ value={ title }
37
+ />
38
+ { showIcon && iconPosition === 'right' && (
39
+ <span
40
+ className="wp-block-accordion-header__toggle-icon"
41
+ aria-hidden="true"
42
+ >
43
+ +
44
+ </span>
45
+ ) }
76
46
  </button>
77
47
  </TagName>
78
48
  );
@@ -0,0 +1,39 @@
1
+ .wp-block-accordion-header__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
+ outline: none;
16
+ overflow: hidden;
17
+ display: flex;
18
+ align-items: center;
19
+ text-align: inherit;
20
+ position: relative;
21
+ width: 100%;
22
+
23
+ &:focus-visible {
24
+ outline: 2px solid -webkit-focus-ring-color;
25
+ outline-offset: 2px;
26
+ }
27
+ }
28
+
29
+ .wp-block-accordion-header__toggle-title {
30
+ flex: 1;
31
+ }
32
+
33
+ .wp-block-accordion-header__toggle-icon {
34
+ width: 1.2em;
35
+ height: 1.2em;
36
+ display: flex;
37
+ align-items: center;
38
+ justify-content: center;
39
+ }
@@ -10,12 +10,11 @@
10
10
  "supports": {
11
11
  "color": {
12
12
  "background": true,
13
- "gradient": true
13
+ "gradients": true
14
14
  },
15
15
  "interactivity": true,
16
16
  "spacing": {
17
17
  "padding": true,
18
- "margin": [ "top", "bottom" ],
19
18
  "blockGap": true,
20
19
  "__experimentalDefaultControls": {
21
20
  "padding": true,
@@ -68,5 +67,6 @@
68
67
  "default": false
69
68
  }
70
69
  },
71
- "textdomain": "default"
70
+ "textdomain": "default",
71
+ "style": "wp-block-accordion-panel"
72
72
  }
@@ -9,6 +9,7 @@ export default function Edit( { attributes } ) {
9
9
 
10
10
  const blockProps = useBlockProps( {
11
11
  'aria-hidden': ! isSelected && ! openByDefault,
12
+ role: 'region',
12
13
  } );
13
14
 
14
15
  const innerBlocksProps = useInnerBlocksProps( blockProps, {
@@ -4,7 +4,9 @@
4
4
  import { useBlockProps, useInnerBlocksProps } from '@wordpress/block-editor';
5
5
 
6
6
  export default function save() {
7
- const blockProps = useBlockProps.save();
7
+ const blockProps = useBlockProps.save( {
8
+ role: 'region',
9
+ } );
8
10
  const innerBlocksProps = useInnerBlocksProps.save( blockProps );
9
11
  return <div { ...innerBlocksProps } />;
10
12
  }
@@ -0,0 +1,8 @@
1
+ .wp-block-accordion-panel {
2
+ // Prevent blockGap from Accordion Content block from adding extra margin between accordions.
3
+ &[inert],
4
+ &[aria-hidden="true"] {
5
+ display: none;
6
+ margin-block-start: 0;
7
+ }
8
+ }