@wordpress/block-library 9.30.1-next.a730c9c8c.0 → 9.31.1-next.f56bd8138.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 (180) 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 +40 -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 +15 -2
  11. package/build/accordion-content/index.js.map +1 -1
  12. package/build/accordion-header/edit.js +15 -39
  13. package/build/accordion-header/edit.js.map +1 -1
  14. package/build/accordion-header/index.js +6 -6
  15. package/build/accordion-header/index.js.map +1 -1
  16. package/build/accordion-header/save.js +15 -37
  17. package/build/accordion-header/save.js.map +1 -1
  18. package/build/accordion-panel/index.js +1 -2
  19. package/build/accordion-panel/index.js.map +1 -1
  20. package/build/avatar/hooks.js +7 -17
  21. package/build/avatar/hooks.js.map +1 -1
  22. package/build/navigation/index.js +2 -1
  23. package/build/navigation/index.js.map +1 -1
  24. package/build/navigation-link/index.js +2 -1
  25. package/build/navigation-link/index.js.map +1 -1
  26. package/build/navigation-submenu/index.js +2 -1
  27. package/build/navigation-submenu/index.js.map +1 -1
  28. package/build/page-list/index.js +2 -1
  29. package/build/page-list/index.js.map +1 -1
  30. package/build/post-author/edit.js +7 -6
  31. package/build/post-author/edit.js.map +1 -1
  32. package/build/post-time-to-read/edit.js +50 -7
  33. package/build/post-time-to-read/edit.js.map +1 -1
  34. package/build/post-time-to-read/index.js +8 -0
  35. package/build/post-time-to-read/index.js.map +1 -1
  36. package/build/term-description/edit.js +18 -2
  37. package/build/term-description/edit.js.map +1 -1
  38. package/build/term-description/index.js +1 -0
  39. package/build/term-description/index.js.map +1 -1
  40. package/build/term-description/use-term-description.js +85 -0
  41. package/build/term-description/use-term-description.js.map +1 -0
  42. package/build/term-template/edit.js +11 -7
  43. package/build/term-template/edit.js.map +1 -1
  44. package/build/term-template/index.js +1 -1
  45. package/build/terms-query/index.js +8 -2
  46. package/build/terms-query/index.js.map +1 -1
  47. package/build/terms-query/inspector-controls/advanced-controls.js +51 -0
  48. package/build/terms-query/inspector-controls/advanced-controls.js.map +1 -0
  49. package/build/terms-query/inspector-controls/display-options.js +87 -0
  50. package/build/terms-query/inspector-controls/display-options.js.map +1 -0
  51. package/build/terms-query/inspector-controls/empty-terms-control.js +38 -0
  52. package/build/terms-query/inspector-controls/empty-terms-control.js.map +1 -0
  53. package/build/terms-query/inspector-controls/hierarchy-control.js +40 -0
  54. package/build/terms-query/inspector-controls/hierarchy-control.js.map +1 -0
  55. package/build/terms-query/inspector-controls/index.js +127 -0
  56. package/build/terms-query/inspector-controls/index.js.map +1 -0
  57. package/build/terms-query/inspector-controls/max-terms-control.js +50 -0
  58. package/build/terms-query/inspector-controls/max-terms-control.js.map +1 -0
  59. package/build/terms-query/inspector-controls/ordering-controls.js +57 -0
  60. package/build/terms-query/inspector-controls/ordering-controls.js.map +1 -0
  61. package/build/terms-query/inspector-controls/taxonomy-control.js +52 -0
  62. package/build/terms-query/inspector-controls/taxonomy-control.js.map +1 -0
  63. package/build/utils/hooks.js +15 -0
  64. package/build/utils/hooks.js.map +1 -1
  65. package/build-module/accordion/edit.js +6 -5
  66. package/build-module/accordion/edit.js.map +1 -1
  67. package/build-module/accordion/index.js +41 -4
  68. package/build-module/accordion/index.js.map +1 -1
  69. package/build-module/accordion/save.js +2 -17
  70. package/build-module/accordion/save.js.map +1 -1
  71. package/build-module/accordion/view.js +51 -17
  72. package/build-module/accordion/view.js.map +1 -1
  73. package/build-module/accordion-content/index.js +15 -2
  74. package/build-module/accordion-content/index.js.map +1 -1
  75. package/build-module/accordion-header/edit.js +16 -39
  76. package/build-module/accordion-header/edit.js.map +1 -1
  77. package/build-module/accordion-header/index.js +6 -6
  78. package/build-module/accordion-header/index.js.map +1 -1
  79. package/build-module/accordion-header/save.js +16 -37
  80. package/build-module/accordion-header/save.js.map +1 -1
  81. package/build-module/accordion-panel/index.js +1 -2
  82. package/build-module/accordion-panel/index.js.map +1 -1
  83. package/build-module/avatar/hooks.js +5 -15
  84. package/build-module/avatar/hooks.js.map +1 -1
  85. package/build-module/navigation/index.js +2 -1
  86. package/build-module/navigation/index.js.map +1 -1
  87. package/build-module/navigation-link/index.js +2 -1
  88. package/build-module/navigation-link/index.js.map +1 -1
  89. package/build-module/navigation-submenu/index.js +2 -1
  90. package/build-module/navigation-submenu/index.js.map +1 -1
  91. package/build-module/page-list/index.js +2 -1
  92. package/build-module/page-list/index.js.map +1 -1
  93. package/build-module/post-author/edit.js +8 -7
  94. package/build-module/post-author/edit.js.map +1 -1
  95. package/build-module/post-time-to-read/edit.js +50 -9
  96. package/build-module/post-time-to-read/edit.js.map +1 -1
  97. package/build-module/post-time-to-read/index.js +8 -0
  98. package/build-module/post-time-to-read/index.js.map +1 -1
  99. package/build-module/term-description/edit.js +18 -2
  100. package/build-module/term-description/edit.js.map +1 -1
  101. package/build-module/term-description/index.js +1 -0
  102. package/build-module/term-description/index.js.map +1 -1
  103. package/build-module/term-description/use-term-description.js +79 -0
  104. package/build-module/term-description/use-term-description.js.map +1 -0
  105. package/build-module/term-template/edit.js +11 -7
  106. package/build-module/term-template/edit.js.map +1 -1
  107. package/build-module/term-template/index.js +1 -1
  108. package/build-module/terms-query/index.js +8 -2
  109. package/build-module/terms-query/index.js.map +1 -1
  110. package/build-module/terms-query/inspector-controls/advanced-controls.js +44 -0
  111. package/build-module/terms-query/inspector-controls/advanced-controls.js.map +1 -0
  112. package/build-module/terms-query/inspector-controls/display-options.js +80 -0
  113. package/build-module/terms-query/inspector-controls/display-options.js.map +1 -0
  114. package/build-module/terms-query/inspector-controls/empty-terms-control.js +31 -0
  115. package/build-module/terms-query/inspector-controls/empty-terms-control.js.map +1 -0
  116. package/build-module/terms-query/inspector-controls/hierarchy-control.js +33 -0
  117. package/build-module/terms-query/inspector-controls/hierarchy-control.js.map +1 -0
  118. package/build-module/terms-query/inspector-controls/index.js +119 -0
  119. package/build-module/terms-query/inspector-controls/index.js.map +1 -0
  120. package/build-module/terms-query/inspector-controls/max-terms-control.js +43 -0
  121. package/build-module/terms-query/inspector-controls/max-terms-control.js.map +1 -0
  122. package/build-module/terms-query/inspector-controls/ordering-controls.js +50 -0
  123. package/build-module/terms-query/inspector-controls/ordering-controls.js.map +1 -0
  124. package/build-module/terms-query/inspector-controls/taxonomy-control.js +45 -0
  125. package/build-module/terms-query/inspector-controls/taxonomy-control.js.map +1 -0
  126. package/build-module/utils/hooks.js +14 -0
  127. package/build-module/utils/hooks.js.map +1 -1
  128. package/build-style/accordion/style-rtl.css +15 -8
  129. package/build-style/accordion/style.css +15 -8
  130. package/build-style/style-rtl.css +15 -8
  131. package/build-style/style.css +15 -8
  132. package/package.json +35 -35
  133. package/src/accordion/block.json +17 -3
  134. package/src/accordion/edit.js +39 -34
  135. package/src/accordion/index.js +35 -1
  136. package/src/accordion/index.php +3 -19
  137. package/src/accordion/save.js +2 -16
  138. package/src/accordion/style.scss +16 -8
  139. package/src/accordion/view.js +64 -15
  140. package/src/accordion-content/block.json +15 -2
  141. package/src/accordion-content/index.php +2 -1
  142. package/src/accordion-header/block.json +6 -6
  143. package/src/accordion-header/edit.js +19 -56
  144. package/src/accordion-header/save.js +27 -49
  145. package/src/accordion-panel/block.json +1 -2
  146. package/src/avatar/hooks.js +5 -10
  147. package/src/navigation/block.json +2 -1
  148. package/src/navigation-link/block.json +2 -1
  149. package/src/navigation-submenu/block.json +2 -1
  150. package/src/page-list/block.json +2 -1
  151. package/src/post-author/edit.js +16 -7
  152. package/src/post-time-to-read/block.json +8 -0
  153. package/src/post-time-to-read/edit.js +71 -10
  154. package/src/post-time-to-read/index.php +29 -17
  155. package/src/term-description/block.json +1 -0
  156. package/src/term-description/edit.js +18 -3
  157. package/src/term-description/use-term-description.js +109 -0
  158. package/src/term-template/block.json +1 -1
  159. package/src/term-template/edit.js +11 -6
  160. package/src/term-template/index.php +13 -7
  161. package/src/terms-query/block.json +8 -2
  162. package/src/terms-query/inspector-controls/advanced-controls.js +37 -0
  163. package/src/terms-query/inspector-controls/display-options.js +87 -0
  164. package/src/terms-query/inspector-controls/empty-terms-control.js +30 -0
  165. package/src/terms-query/inspector-controls/hierarchy-control.js +30 -0
  166. package/src/terms-query/inspector-controls/index.js +137 -0
  167. package/src/terms-query/inspector-controls/max-terms-control.js +44 -0
  168. package/src/terms-query/inspector-controls/ordering-controls.js +55 -0
  169. package/src/terms-query/inspector-controls/taxonomy-control.js +41 -0
  170. package/src/utils/hooks.js +9 -0
  171. package/build/accordion-content/icons.js +0 -30
  172. package/build/accordion-content/icons.js.map +0 -1
  173. package/build/terms-query/inspector-controls.js +0 -231
  174. package/build/terms-query/inspector-controls.js.map +0 -1
  175. package/build-module/accordion-content/icons.js +0 -22
  176. package/build-module/accordion-content/icons.js.map +0 -1
  177. package/build-module/terms-query/inspector-controls.js +0 -224
  178. package/build-module/terms-query/inspector-controls.js.map +0 -1
  179. package/src/accordion-content/icons.js +0 -23
  180. package/src/terms-query/inspector-controls.js +0 -239
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@wordpress/block-library",
3
- "version": "9.30.1-next.a730c9c8c.0",
3
+ "version": "9.31.1-next.f56bd8138.0",
4
4
  "description": "Block library for the WordPress editor.",
5
5
  "author": "The WordPress Contributors",
6
6
  "license": "GPL-2.0-or-later",
@@ -42,39 +42,39 @@
42
42
  ],
43
43
  "dependencies": {
44
44
  "@babel/runtime": "7.25.7",
45
- "@wordpress/a11y": "^4.30.1-next.a730c9c8c.0",
46
- "@wordpress/api-fetch": "^7.30.1-next.a730c9c8c.0",
47
- "@wordpress/autop": "^4.30.1-next.a730c9c8c.0",
48
- "@wordpress/blob": "^4.30.1-next.a730c9c8c.0",
49
- "@wordpress/block-editor": "^15.3.1-next.a730c9c8c.0",
50
- "@wordpress/blocks": "^15.3.1-next.a730c9c8c.0",
51
- "@wordpress/components": "^30.3.2-next.a730c9c8c.0",
52
- "@wordpress/compose": "^7.30.1-next.a730c9c8c.0",
53
- "@wordpress/core-data": "^7.30.1-next.a730c9c8c.0",
54
- "@wordpress/data": "^10.30.1-next.a730c9c8c.0",
55
- "@wordpress/date": "^5.30.1-next.a730c9c8c.0",
56
- "@wordpress/deprecated": "^4.30.1-next.a730c9c8c.0",
57
- "@wordpress/dom": "^4.30.1-next.a730c9c8c.0",
58
- "@wordpress/element": "^6.30.1-next.a730c9c8c.0",
59
- "@wordpress/escape-html": "^3.30.1-next.a730c9c8c.0",
60
- "@wordpress/hooks": "^4.30.1-next.a730c9c8c.0",
61
- "@wordpress/html-entities": "^4.30.1-next.a730c9c8c.0",
62
- "@wordpress/i18n": "^6.3.1-next.a730c9c8c.0",
63
- "@wordpress/icons": "^10.30.1-next.a730c9c8c.0",
64
- "@wordpress/interactivity": "^6.30.1-next.a730c9c8c.0",
65
- "@wordpress/interactivity-router": "^2.30.1-next.a730c9c8c.0",
66
- "@wordpress/keyboard-shortcuts": "^5.30.1-next.a730c9c8c.0",
67
- "@wordpress/keycodes": "^4.30.1-next.a730c9c8c.0",
68
- "@wordpress/notices": "^5.30.1-next.a730c9c8c.0",
69
- "@wordpress/patterns": "^2.30.1-next.a730c9c8c.0",
70
- "@wordpress/primitives": "^4.30.1-next.a730c9c8c.0",
71
- "@wordpress/private-apis": "^1.30.1-next.a730c9c8c.0",
72
- "@wordpress/reusable-blocks": "^5.30.1-next.a730c9c8c.0",
73
- "@wordpress/rich-text": "^7.30.1-next.a730c9c8c.0",
74
- "@wordpress/server-side-render": "^6.6.1-next.a730c9c8c.0",
75
- "@wordpress/url": "^4.30.1-next.a730c9c8c.0",
76
- "@wordpress/viewport": "^6.30.1-next.a730c9c8c.0",
77
- "@wordpress/wordcount": "^4.30.1-next.a730c9c8c.0",
45
+ "@wordpress/a11y": "^4.31.1-next.f56bd8138.0",
46
+ "@wordpress/api-fetch": "^7.31.1-next.f56bd8138.0",
47
+ "@wordpress/autop": "^4.31.1-next.f56bd8138.0",
48
+ "@wordpress/blob": "^4.31.1-next.f56bd8138.0",
49
+ "@wordpress/block-editor": "^15.4.1-next.f56bd8138.0",
50
+ "@wordpress/blocks": "^15.4.1-next.f56bd8138.0",
51
+ "@wordpress/components": "^30.5.1-next.f56bd8138.0",
52
+ "@wordpress/compose": "^7.31.1-next.f56bd8138.0",
53
+ "@wordpress/core-data": "^7.31.1-next.f56bd8138.0",
54
+ "@wordpress/data": "^10.31.1-next.f56bd8138.0",
55
+ "@wordpress/date": "^5.31.1-next.f56bd8138.0",
56
+ "@wordpress/deprecated": "^4.31.1-next.f56bd8138.0",
57
+ "@wordpress/dom": "^4.31.1-next.f56bd8138.0",
58
+ "@wordpress/element": "^6.31.1-next.f56bd8138.0",
59
+ "@wordpress/escape-html": "^3.31.1-next.f56bd8138.0",
60
+ "@wordpress/hooks": "^4.31.1-next.f56bd8138.0",
61
+ "@wordpress/html-entities": "^4.31.1-next.f56bd8138.0",
62
+ "@wordpress/i18n": "^6.4.1-next.f56bd8138.0",
63
+ "@wordpress/icons": "^10.31.1-next.f56bd8138.0",
64
+ "@wordpress/interactivity": "^6.31.1-next.f56bd8138.0",
65
+ "@wordpress/interactivity-router": "^2.31.1-next.f56bd8138.0",
66
+ "@wordpress/keyboard-shortcuts": "^5.31.1-next.f56bd8138.0",
67
+ "@wordpress/keycodes": "^4.31.1-next.f56bd8138.0",
68
+ "@wordpress/notices": "^5.31.1-next.f56bd8138.0",
69
+ "@wordpress/patterns": "^2.31.1-next.f56bd8138.0",
70
+ "@wordpress/primitives": "^4.31.1-next.f56bd8138.0",
71
+ "@wordpress/private-apis": "^1.31.1-next.f56bd8138.0",
72
+ "@wordpress/reusable-blocks": "^5.31.1-next.f56bd8138.0",
73
+ "@wordpress/rich-text": "^7.31.1-next.f56bd8138.0",
74
+ "@wordpress/server-side-render": "^6.7.1-next.f56bd8138.0",
75
+ "@wordpress/url": "^4.31.1-next.f56bd8138.0",
76
+ "@wordpress/viewport": "^6.31.1-next.f56bd8138.0",
77
+ "@wordpress/wordcount": "^4.31.1-next.f56bd8138.0",
78
78
  "change-case": "^4.1.2",
79
79
  "clsx": "^2.1.1",
80
80
  "colord": "^2.7.0",
@@ -92,5 +92,5 @@
92
92
  "publishConfig": {
93
93
  "access": "public"
94
94
  },
95
- "gitHead": "85a580bd2c55f811c8969b42dbb10209d19d514e"
95
+ "gitHead": "ea4a281fd857f48338877590de8c8eb9b9a8cef4"
96
96
  }
@@ -19,7 +19,7 @@
19
19
  },
20
20
  "color": {
21
21
  "background": true,
22
- "gradient": true
22
+ "gradients": true
23
23
  },
24
24
  "__experimentalBorder": {
25
25
  "color": true,
@@ -40,7 +40,20 @@
40
40
  },
41
41
  "shadow": true,
42
42
  "layout": true,
43
- "interactivity": true
43
+ "interactivity": true,
44
+ "typography": {
45
+ "fontSize": true,
46
+ "lineHeight": true,
47
+ "__experimentalFontFamily": true,
48
+ "__experimentalFontWeight": true,
49
+ "__experimentalFontStyle": true,
50
+ "__experimentalTextTransform": true,
51
+ "__experimentalTextDecoration": true,
52
+ "__experimentalLetterSpacing": true,
53
+ "__experimentalDefaultControls": {
54
+ "fontSize": true
55
+ }
56
+ }
44
57
  },
45
58
  "attributes": {
46
59
  "iconPosition": {
@@ -62,5 +75,6 @@
62
75
  },
63
76
  "allowedBlocks": [ "core/accordion-content" ],
64
77
  "textdomain": "default",
65
- "style": "wp-block-accordion"
78
+ "style": "wp-block-accordion",
79
+ "viewScriptModule": "@wordpress/block-library/accordion/view"
66
80
  }
@@ -34,6 +34,7 @@ export default function Edit( {
34
34
  attributes: { autoclose, iconPosition, showIcon },
35
35
  clientId,
36
36
  setAttributes,
37
+ isSelected: isSingleSelected,
37
38
  } ) {
38
39
  const blockProps = useBlockProps();
39
40
  const dropdownMenuProps = useToolsPanelDropdownMenuProps();
@@ -53,14 +54,13 @@ export default function Edit( {
53
54
 
54
55
  return (
55
56
  <>
56
- <BlockControls group="other">
57
- <ToolbarButton
58
- label={ __( 'Add accordion content block' ) }
59
- onClick={ addAccordionContentBlock }
60
- >
61
- { __( 'Add' ) }
62
- </ToolbarButton>
63
- </BlockControls>
57
+ { isSingleSelected && (
58
+ <BlockControls group="other">
59
+ <ToolbarButton onClick={ addAccordionContentBlock }>
60
+ { __( 'Add' ) }
61
+ </ToolbarButton>
62
+ </BlockControls>
63
+ ) }
64
64
  <InspectorControls key="setting">
65
65
  <ToolsPanel
66
66
  label={ __( 'Settings' ) }
@@ -109,6 +109,9 @@ export default function Edit( {
109
109
  onChange={ ( value ) => {
110
110
  setAttributes( {
111
111
  showIcon: value,
112
+ iconPosition: value
113
+ ? iconPosition
114
+ : 'right',
112
115
  } );
113
116
  } }
114
117
  checked={ showIcon }
@@ -117,34 +120,36 @@ export default function Edit( {
117
120
  ) }
118
121
  />
119
122
  </ToolsPanelItem>
120
- <ToolsPanelItem
121
- label={ __( 'Icon Position' ) }
122
- isShownByDefault
123
- hasValue={ () => iconPosition !== 'right' }
124
- onDeselect={ () =>
125
- setAttributes( { iconPosition: 'right' } )
126
- }
127
- >
128
- <ToggleGroupControl
129
- __nextHasNoMarginBottom
130
- __next40pxDefaultSize
131
- isBlock
123
+ { showIcon && (
124
+ <ToolsPanelItem
132
125
  label={ __( 'Icon Position' ) }
133
- value={ iconPosition }
134
- onChange={ ( value ) => {
135
- setAttributes( { iconPosition: value } );
136
- } }
126
+ isShownByDefault
127
+ hasValue={ () => iconPosition !== 'right' }
128
+ onDeselect={ () =>
129
+ setAttributes( { iconPosition: 'right' } )
130
+ }
137
131
  >
138
- <ToggleGroupControlOption
139
- label={ __( 'Left' ) }
140
- value="left"
141
- />
142
- <ToggleGroupControlOption
143
- label={ __( 'Right' ) }
144
- value="right"
145
- />
146
- </ToggleGroupControl>
147
- </ToolsPanelItem>
132
+ <ToggleGroupControl
133
+ __nextHasNoMarginBottom
134
+ __next40pxDefaultSize
135
+ isBlock
136
+ label={ __( 'Icon Position' ) }
137
+ value={ iconPosition }
138
+ onChange={ ( value ) => {
139
+ setAttributes( { iconPosition: value } );
140
+ } }
141
+ >
142
+ <ToggleGroupControlOption
143
+ label={ __( 'Left' ) }
144
+ value="left"
145
+ />
146
+ <ToggleGroupControlOption
147
+ label={ __( 'Right' ) }
148
+ value="right"
149
+ />
150
+ </ToggleGroupControl>
151
+ </ToolsPanelItem>
152
+ ) }
148
153
  </ToolsPanel>
149
154
  </InspectorControls>
150
155
  <div { ...innerBlocksProps } />
@@ -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,3 +1,8 @@
1
+ .wp-block-accordion {
2
+ // This block allows custom padding, margin, and border, as it affects how the block’s width and height are calculated.
3
+ box-sizing: border-box;
4
+ }
5
+
1
6
  .wp-block-accordion-content {
2
7
  display: grid;
3
8
  grid-template-rows: max-content 0fr;
@@ -7,7 +12,7 @@
7
12
  grid-template-rows: max-content 1fr;
8
13
 
9
14
  > .wp-block-accordion-header {
10
- .accordion-content__toggle-icon.has-icon-plus {
15
+ .accordion-content__toggle-icon {
11
16
  transform: rotate(45deg);
12
17
  }
13
18
  }
@@ -36,8 +41,16 @@
36
41
  width: 100%;
37
42
  }
38
43
 
39
- .accordion-content__toggle > span {
40
- width: 100%;
44
+ .accordion-content__toggle-title {
45
+ flex: 1;
46
+ }
47
+
48
+ .accordion-content__toggle-icon {
49
+ width: 1.2em;
50
+ height: 1.2em;
51
+ display: flex;
52
+ align-items: center;
53
+ justify-content: center;
41
54
  }
42
55
 
43
56
  .is-layout-flow > .wp-block-accordion-panel,
@@ -60,11 +73,6 @@
60
73
  background-color: unset;
61
74
  }
62
75
 
63
- .wp-block-accordion-header.icon-position-left .accordion-content__toggle {
64
- /* stylelint-disable-next-line declaration-property-value-allowed-list -- This should be refactored to not use the row-reverse value. */
65
- flex-direction: row-reverse;
66
- }
67
-
68
76
  .accordion-content__toggle:focus-visible {
69
77
  outline: 2px solid -webkit-focus-ring-color;
70
78
  outline-offset: 2px;
@@ -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": {
@@ -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
40
  if ( $p->next_tag( array( 'class_name' => 'accordion-content__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' );
@@ -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,
@@ -63,7 +62,8 @@
63
62
  "title": {
64
63
  "type": "rich-text",
65
64
  "source": "rich-text",
66
- "selector": "span"
65
+ "selector": ".accordion-content__toggle-title",
66
+ "role": "content"
67
67
  },
68
68
  "level": {
69
69
  "type": "number",