@wordpress/block-library 9.28.0 → 9.29.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 (196) hide show
  1. package/CHANGELOG.md +2 -0
  2. package/build/accordion/edit.js +123 -0
  3. package/build/accordion/edit.js.map +1 -0
  4. package/build/accordion/icon.js +33 -0
  5. package/build/accordion/icon.js.map +1 -0
  6. package/build/accordion/index.js +100 -0
  7. package/build/accordion/index.js.map +1 -0
  8. package/build/accordion/init.js +12 -0
  9. package/build/accordion/init.js.map +1 -0
  10. package/build/accordion/save.js +36 -0
  11. package/build/accordion/save.js.map +1 -0
  12. package/build/accordion/view.js +49 -0
  13. package/build/accordion/view.js.map +1 -0
  14. package/build/accordion-content/edit.js +129 -0
  15. package/build/accordion-content/edit.js.map +1 -0
  16. package/build/accordion-content/icon.js +35 -0
  17. package/build/accordion-content/icon.js.map +1 -0
  18. package/build/accordion-content/icons.js +30 -0
  19. package/build/accordion-content/icons.js.map +1 -0
  20. package/build/accordion-content/index.js +76 -0
  21. package/build/accordion-content/index.js.map +1 -0
  22. package/build/accordion-content/init.js +12 -0
  23. package/build/accordion-content/init.js.map +1 -0
  24. package/build/accordion-content/save.js +37 -0
  25. package/build/accordion-content/save.js.map +1 -0
  26. package/build/accordion-header/edit.js +118 -0
  27. package/build/accordion-header/edit.js.map +1 -0
  28. package/build/accordion-header/icon.js +25 -0
  29. package/build/accordion-header/icon.js.map +1 -0
  30. package/build/accordion-header/index.js +121 -0
  31. package/build/accordion-header/index.js.map +1 -0
  32. package/build/accordion-header/init.js +12 -0
  33. package/build/accordion-header/init.js.map +1 -0
  34. package/build/accordion-header/save.js +81 -0
  35. package/build/accordion-header/save.js.map +1 -0
  36. package/build/accordion-panel/edit.js +59 -0
  37. package/build/accordion-panel/edit.js.map +1 -0
  38. package/build/accordion-panel/icon.js +22 -0
  39. package/build/accordion-panel/icon.js.map +1 -0
  40. package/build/accordion-panel/index.js +105 -0
  41. package/build/accordion-panel/index.js.map +1 -0
  42. package/build/accordion-panel/init.js +12 -0
  43. package/build/accordion-panel/init.js.map +1 -0
  44. package/build/accordion-panel/save.js +46 -0
  45. package/build/accordion-panel/save.js.map +1 -0
  46. package/build/cover/index.js +2 -1
  47. package/build/cover/index.js.map +1 -1
  48. package/build/freeform/edit.js +6 -0
  49. package/build/freeform/edit.js.map +1 -1
  50. package/build/index.js +10 -0
  51. package/build/index.js.map +1 -1
  52. package/build/media-text/media-container.js +2 -1
  53. package/build/media-text/media-container.js.map +1 -1
  54. package/build/media-text/transforms.js +7 -3
  55. package/build/media-text/transforms.js.map +1 -1
  56. package/build/post-comments-link/edit.js +6 -1
  57. package/build/post-comments-link/edit.js.map +1 -1
  58. package/build/query-title/edit.js +52 -2
  59. package/build/query-title/edit.js.map +1 -1
  60. package/build/query-title/index.js +1 -0
  61. package/build/query-title/index.js.map +1 -1
  62. package/build/query-title/use-post-type-label.js +42 -0
  63. package/build/query-title/use-post-type-label.js.map +1 -0
  64. package/build/query-title/variations.js +10 -0
  65. package/build/query-title/variations.js.map +1 -1
  66. package/build/site-logo/edit.js +56 -41
  67. package/build/site-logo/edit.js.map +1 -1
  68. package/build/site-title/edit.js +9 -3
  69. package/build/site-title/edit.js.map +1 -1
  70. package/build/video/edit-common-settings.js +6 -3
  71. package/build/video/edit-common-settings.js.map +1 -1
  72. package/build-module/accordion/edit.js +116 -0
  73. package/build-module/accordion/edit.js.map +1 -0
  74. package/build-module/accordion/icon.js +27 -0
  75. package/build-module/accordion/icon.js.map +1 -0
  76. package/build-module/accordion/index.js +92 -0
  77. package/build-module/accordion/index.js.map +1 -0
  78. package/build-module/accordion/init.js +6 -0
  79. package/build-module/accordion/init.js.map +1 -0
  80. package/build-module/accordion/save.js +27 -0
  81. package/build-module/accordion/save.js.map +1 -0
  82. package/build-module/accordion/view.js +46 -0
  83. package/build-module/accordion/view.js.map +1 -0
  84. package/build-module/accordion-content/edit.js +120 -0
  85. package/build-module/accordion-content/edit.js.map +1 -0
  86. package/build-module/accordion-content/icon.js +29 -0
  87. package/build-module/accordion-content/icon.js.map +1 -0
  88. package/build-module/accordion-content/icons.js +22 -0
  89. package/build-module/accordion-content/icons.js.map +1 -0
  90. package/build-module/accordion-content/index.js +68 -0
  91. package/build-module/accordion-content/index.js.map +1 -0
  92. package/build-module/accordion-content/init.js +6 -0
  93. package/build-module/accordion-content/init.js.map +1 -0
  94. package/build-module/accordion-content/save.js +28 -0
  95. package/build-module/accordion-content/save.js.map +1 -0
  96. package/build-module/accordion-header/edit.js +108 -0
  97. package/build-module/accordion-header/edit.js.map +1 -0
  98. package/build-module/accordion-header/icon.js +19 -0
  99. package/build-module/accordion-header/icon.js.map +1 -0
  100. package/build-module/accordion-header/index.js +113 -0
  101. package/build-module/accordion-header/index.js.map +1 -0
  102. package/build-module/accordion-header/init.js +6 -0
  103. package/build-module/accordion-header/init.js.map +1 -0
  104. package/build-module/accordion-header/save.js +71 -0
  105. package/build-module/accordion-header/save.js.map +1 -0
  106. package/build-module/accordion-panel/edit.js +50 -0
  107. package/build-module/accordion-panel/edit.js.map +1 -0
  108. package/build-module/accordion-panel/icon.js +16 -0
  109. package/build-module/accordion-panel/icon.js.map +1 -0
  110. package/build-module/accordion-panel/index.js +97 -0
  111. package/build-module/accordion-panel/index.js.map +1 -0
  112. package/build-module/accordion-panel/init.js +6 -0
  113. package/build-module/accordion-panel/init.js.map +1 -0
  114. package/build-module/accordion-panel/save.js +37 -0
  115. package/build-module/accordion-panel/save.js.map +1 -0
  116. package/build-module/cover/index.js +2 -1
  117. package/build-module/cover/index.js.map +1 -1
  118. package/build-module/freeform/edit.js +6 -0
  119. package/build-module/freeform/edit.js.map +1 -1
  120. package/build-module/index.js +10 -0
  121. package/build-module/index.js.map +1 -1
  122. package/build-module/media-text/media-container.js +2 -1
  123. package/build-module/media-text/media-container.js.map +1 -1
  124. package/build-module/media-text/transforms.js +7 -3
  125. package/build-module/media-text/transforms.js.map +1 -1
  126. package/build-module/post-comments-link/edit.js +6 -1
  127. package/build-module/post-comments-link/edit.js.map +1 -1
  128. package/build-module/query-title/edit.js +52 -2
  129. package/build-module/query-title/edit.js.map +1 -1
  130. package/build-module/query-title/index.js +1 -0
  131. package/build-module/query-title/index.js.map +1 -1
  132. package/build-module/query-title/use-post-type-label.js +36 -0
  133. package/build-module/query-title/use-post-type-label.js.map +1 -0
  134. package/build-module/query-title/variations.js +10 -0
  135. package/build-module/query-title/variations.js.map +1 -1
  136. package/build-module/site-logo/edit.js +57 -42
  137. package/build-module/site-logo/edit.js.map +1 -1
  138. package/build-module/site-title/edit.js +10 -4
  139. package/build-module/site-title/edit.js.map +1 -1
  140. package/build-module/video/edit-common-settings.js +6 -3
  141. package/build-module/video/edit-common-settings.js.map +1 -1
  142. package/build-style/accordion/style-rtl.css +223 -0
  143. package/build-style/accordion/style.css +223 -0
  144. package/build-style/style-rtl.css +88 -0
  145. package/build-style/style.css +88 -0
  146. package/package.json +36 -35
  147. package/src/accordion/block.json +69 -0
  148. package/src/accordion/edit.js +133 -0
  149. package/src/accordion/icon.js +23 -0
  150. package/src/accordion/index.js +21 -0
  151. package/src/accordion/index.php +61 -0
  152. package/src/accordion/init.js +6 -0
  153. package/src/accordion/save.js +23 -0
  154. package/src/accordion/style.scss +91 -0
  155. package/src/accordion/view.js +38 -0
  156. package/src/accordion-content/block.json +45 -0
  157. package/src/accordion-content/edit.js +149 -0
  158. package/src/accordion-content/icon.js +28 -0
  159. package/src/accordion-content/icons.js +23 -0
  160. package/src/accordion-content/index.js +21 -0
  161. package/src/accordion-content/index.php +73 -0
  162. package/src/accordion-content/init.js +6 -0
  163. package/src/accordion-content/save.js +25 -0
  164. package/src/accordion-header/block.json +93 -0
  165. package/src/accordion-header/edit.js +131 -0
  166. package/src/accordion-header/icon.js +16 -0
  167. package/src/accordion-header/index.js +21 -0
  168. package/src/accordion-header/init.js +6 -0
  169. package/src/accordion-header/save.js +79 -0
  170. package/src/accordion-panel/block.json +74 -0
  171. package/src/accordion-panel/edit.js +61 -0
  172. package/src/accordion-panel/icon.js +15 -0
  173. package/src/accordion-panel/index.js +21 -0
  174. package/src/accordion-panel/init.js +6 -0
  175. package/src/accordion-panel/save.js +51 -0
  176. package/src/block/index.php +16 -14
  177. package/src/cover/block.json +2 -1
  178. package/src/file/index.php +28 -22
  179. package/src/freeform/edit.js +7 -0
  180. package/src/index.js +12 -0
  181. package/src/media-text/media-container.js +1 -0
  182. package/src/media-text/transforms.js +5 -1
  183. package/src/navigation/edit/test/navigation-menu-selector.js +2 -2
  184. package/src/post-comments-link/edit.js +7 -1
  185. package/src/post-excerpt/index.php +16 -12
  186. package/src/query-title/block.json +1 -0
  187. package/src/query-title/edit.js +58 -1
  188. package/src/query-title/index.php +30 -5
  189. package/src/query-title/use-post-type-label.js +34 -0
  190. package/src/query-title/variations.js +13 -0
  191. package/src/site-logo/edit.js +33 -12
  192. package/src/site-title/edit.js +24 -16
  193. package/src/social-link/README.md +4 -1
  194. package/src/social-link/index.php +1 -1
  195. package/src/style.scss +1 -0
  196. package/src/video/edit-common-settings.js +14 -5
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@wordpress/block-library",
3
- "version": "9.28.0",
3
+ "version": "9.29.0",
4
4
  "description": "Block library for the WordPress editor.",
5
5
  "author": "The WordPress Contributors",
6
6
  "license": "GPL-2.0-or-later",
@@ -27,6 +27,7 @@
27
27
  "react-native": "src/index",
28
28
  "wpScript": true,
29
29
  "wpScriptModuleExports": {
30
+ "./accordion/view": "./build-module/accordion/view.js",
30
31
  "./file/view": "./build-module/file/view.js",
31
32
  "./form/view": "./build-module/form/view.js",
32
33
  "./image/view": "./build-module/image/view.js",
@@ -41,39 +42,39 @@
41
42
  ],
42
43
  "dependencies": {
43
44
  "@babel/runtime": "7.25.7",
44
- "@wordpress/a11y": "^4.28.0",
45
- "@wordpress/api-fetch": "^7.28.0",
46
- "@wordpress/autop": "^4.28.0",
47
- "@wordpress/blob": "^4.28.0",
48
- "@wordpress/block-editor": "^15.1.0",
49
- "@wordpress/blocks": "^15.1.0",
50
- "@wordpress/components": "^30.1.0",
51
- "@wordpress/compose": "^7.28.0",
52
- "@wordpress/core-data": "^7.28.0",
53
- "@wordpress/data": "^10.28.0",
54
- "@wordpress/date": "^5.28.0",
55
- "@wordpress/deprecated": "^4.28.0",
56
- "@wordpress/dom": "^4.28.0",
57
- "@wordpress/element": "^6.28.0",
58
- "@wordpress/escape-html": "^3.28.0",
59
- "@wordpress/hooks": "^4.28.0",
60
- "@wordpress/html-entities": "^4.28.0",
61
- "@wordpress/i18n": "^6.1.0",
62
- "@wordpress/icons": "^10.28.0",
63
- "@wordpress/interactivity": "^6.28.0",
64
- "@wordpress/interactivity-router": "^2.28.0",
65
- "@wordpress/keyboard-shortcuts": "^5.28.0",
66
- "@wordpress/keycodes": "^4.28.0",
67
- "@wordpress/notices": "^5.28.0",
68
- "@wordpress/patterns": "^2.28.0",
69
- "@wordpress/primitives": "^4.28.0",
70
- "@wordpress/private-apis": "^1.28.0",
71
- "@wordpress/reusable-blocks": "^5.28.0",
72
- "@wordpress/rich-text": "^7.28.0",
73
- "@wordpress/server-side-render": "^6.4.0",
74
- "@wordpress/url": "^4.28.0",
75
- "@wordpress/viewport": "^6.28.0",
76
- "@wordpress/wordcount": "^4.28.0",
45
+ "@wordpress/a11y": "^4.29.0",
46
+ "@wordpress/api-fetch": "^7.29.0",
47
+ "@wordpress/autop": "^4.29.0",
48
+ "@wordpress/blob": "^4.29.0",
49
+ "@wordpress/block-editor": "^15.2.0",
50
+ "@wordpress/blocks": "^15.2.0",
51
+ "@wordpress/components": "^30.2.0",
52
+ "@wordpress/compose": "^7.29.0",
53
+ "@wordpress/core-data": "^7.29.0",
54
+ "@wordpress/data": "^10.29.0",
55
+ "@wordpress/date": "^5.29.0",
56
+ "@wordpress/deprecated": "^4.29.0",
57
+ "@wordpress/dom": "^4.29.0",
58
+ "@wordpress/element": "^6.29.0",
59
+ "@wordpress/escape-html": "^3.29.0",
60
+ "@wordpress/hooks": "^4.29.0",
61
+ "@wordpress/html-entities": "^4.29.0",
62
+ "@wordpress/i18n": "^6.2.0",
63
+ "@wordpress/icons": "^10.29.0",
64
+ "@wordpress/interactivity": "^6.29.0",
65
+ "@wordpress/interactivity-router": "^2.29.0",
66
+ "@wordpress/keyboard-shortcuts": "^5.29.0",
67
+ "@wordpress/keycodes": "^4.29.0",
68
+ "@wordpress/notices": "^5.29.0",
69
+ "@wordpress/patterns": "^2.29.0",
70
+ "@wordpress/primitives": "^4.29.0",
71
+ "@wordpress/private-apis": "^1.29.0",
72
+ "@wordpress/reusable-blocks": "^5.29.0",
73
+ "@wordpress/rich-text": "^7.29.0",
74
+ "@wordpress/server-side-render": "^6.5.0",
75
+ "@wordpress/url": "^4.29.0",
76
+ "@wordpress/viewport": "^6.29.0",
77
+ "@wordpress/wordcount": "^4.29.0",
77
78
  "change-case": "^4.1.2",
78
79
  "clsx": "^2.1.1",
79
80
  "colord": "^2.7.0",
@@ -91,5 +92,5 @@
91
92
  "publishConfig": {
92
93
  "access": "public"
93
94
  },
94
- "gitHead": "28cc2098f5ee28f89096b638533796538f495f72"
95
+ "gitHead": "445ede01e8abc8e49a1101b21a3651adbe852120"
95
96
  }
@@ -0,0 +1,69 @@
1
+ {
2
+ "$schema": "https://schemas.wp.org/trunk/block.json",
3
+ "apiVersion": 3,
4
+ "name": "core/accordion",
5
+ "title": "Accordion",
6
+ "category": "design",
7
+ "description": "Displays a group of accordion headers and associated expandable content.",
8
+ "example": {},
9
+ "__experimental": true,
10
+ "supports": {
11
+ "html": false,
12
+ "align": [ "wide", "full" ],
13
+ "background": {
14
+ "backgroundImage": true,
15
+ "backgroundSize": true,
16
+ "__experimentalDefaultControls": {
17
+ "backgroundImage": true
18
+ }
19
+ },
20
+ "color": {
21
+ "background": true,
22
+ "gradient": true
23
+ },
24
+ "__experimentalBorder": {
25
+ "color": true,
26
+ "radius": true,
27
+ "style": true,
28
+ "width": true,
29
+ "__experimentalDefaultControls": {
30
+ "color": true,
31
+ "radius": true,
32
+ "style": true,
33
+ "width": true
34
+ }
35
+ },
36
+ "spacing": {
37
+ "padding": true,
38
+ "margin": [ "top", "bottom" ],
39
+ "blockGap": true
40
+ },
41
+ "shadow": true,
42
+ "layout": true,
43
+ "interactivity": true
44
+ },
45
+ "attributes": {
46
+ "iconPosition": {
47
+ "type": "string",
48
+ "default": "right"
49
+ },
50
+ "showIcon": {
51
+ "type": "boolean",
52
+ "default": true
53
+ },
54
+ "autoclose": {
55
+ "type": "boolean",
56
+ "default": false
57
+ },
58
+ "allowedBlocks": {
59
+ "type": "array"
60
+ }
61
+ },
62
+ "providesContext": {
63
+ "core/accordion-icon-position": "iconPosition",
64
+ "core/accordion-show-icon": "showIcon"
65
+ },
66
+ "allowedBlocks": [ "core/accordion-content" ],
67
+ "textdomain": "default",
68
+ "style": "wp-block-accordion"
69
+ }
@@ -0,0 +1,133 @@
1
+ /**
2
+ * WordPress dependencies
3
+ */
4
+ import {
5
+ useBlockProps,
6
+ useInnerBlocksProps,
7
+ InspectorControls,
8
+ } from '@wordpress/block-editor';
9
+ import { __ } from '@wordpress/i18n';
10
+ import {
11
+ ToggleControl,
12
+ __experimentalToggleGroupControl as ToggleGroupControl,
13
+ __experimentalToggleGroupControlOption as ToggleGroupControlOption,
14
+ __experimentalToolsPanel as ToolsPanel,
15
+ __experimentalToolsPanelItem as ToolsPanelItem,
16
+ } from '@wordpress/components';
17
+
18
+ /**
19
+ * Internal dependencies
20
+ */
21
+ import { useToolsPanelDropdownMenuProps } from '../utils/hooks';
22
+
23
+ const ACCORDION_BLOCK_NAME = 'core/accordion-content';
24
+ const ACCORDION_BLOCK = {
25
+ name: ACCORDION_BLOCK_NAME,
26
+ };
27
+
28
+ export default function Edit( {
29
+ attributes: { autoclose, iconPosition, showIcon },
30
+ setAttributes,
31
+ } ) {
32
+ const blockProps = useBlockProps();
33
+ const dropdownMenuProps = useToolsPanelDropdownMenuProps();
34
+
35
+ const innerBlocksProps = useInnerBlocksProps( blockProps, {
36
+ template: [ [ ACCORDION_BLOCK_NAME ], [ ACCORDION_BLOCK_NAME ] ],
37
+ defaultBlock: ACCORDION_BLOCK,
38
+ directInsert: true,
39
+ templateInsertUpdatesSelection: true,
40
+ } );
41
+
42
+ return (
43
+ <>
44
+ <InspectorControls key="setting">
45
+ <ToolsPanel
46
+ label={ __( 'Settings' ) }
47
+ resetAll={ () => {
48
+ setAttributes( {
49
+ autoclose: false,
50
+ showIcon: true,
51
+ iconPosition: 'right',
52
+ } );
53
+ } }
54
+ dropdownMenuProps={ dropdownMenuProps }
55
+ >
56
+ <ToolsPanelItem
57
+ label={ __( 'Auto-close' ) }
58
+ isShownByDefault
59
+ hasValue={ () => !! autoclose }
60
+ onDeselect={ () =>
61
+ setAttributes( { autoclose: false } )
62
+ }
63
+ >
64
+ <ToggleControl
65
+ isBlock
66
+ __nextHasNoMarginBottom
67
+ label={ __( 'Auto-close' ) }
68
+ onChange={ ( value ) => {
69
+ setAttributes( {
70
+ autoclose: value,
71
+ } );
72
+ } }
73
+ checked={ autoclose }
74
+ help={ __(
75
+ 'Automatically close accordions when a new one is opened.'
76
+ ) }
77
+ />
78
+ </ToolsPanelItem>
79
+ <ToolsPanelItem
80
+ label={ __( 'Show icon' ) }
81
+ isShownByDefault
82
+ hasValue={ () => ! showIcon }
83
+ onDeselect={ () => setAttributes( { showIcon: true } ) }
84
+ >
85
+ <ToggleControl
86
+ isBlock
87
+ __nextHasNoMarginBottom
88
+ label={ __( 'Show icon' ) }
89
+ onChange={ ( value ) => {
90
+ setAttributes( {
91
+ showIcon: value,
92
+ } );
93
+ } }
94
+ checked={ showIcon }
95
+ help={ __(
96
+ 'Display a plus icon next to the accordion header.'
97
+ ) }
98
+ />
99
+ </ToolsPanelItem>
100
+ <ToolsPanelItem
101
+ label={ __( 'Icon Position' ) }
102
+ isShownByDefault
103
+ hasValue={ () => iconPosition !== 'right' }
104
+ onDeselect={ () =>
105
+ setAttributes( { iconPosition: 'right' } )
106
+ }
107
+ >
108
+ <ToggleGroupControl
109
+ __nextHasNoMarginBottom
110
+ __next40pxDefaultSize
111
+ isBlock
112
+ label={ __( 'Icon Position' ) }
113
+ value={ iconPosition }
114
+ onChange={ ( value ) => {
115
+ setAttributes( { iconPosition: value } );
116
+ } }
117
+ >
118
+ <ToggleGroupControlOption
119
+ label={ __( 'Left' ) }
120
+ value="left"
121
+ />
122
+ <ToggleGroupControlOption
123
+ label={ __( 'Right' ) }
124
+ value="right"
125
+ />
126
+ </ToggleGroupControl>
127
+ </ToolsPanelItem>
128
+ </ToolsPanel>
129
+ </InspectorControls>
130
+ <div { ...innerBlocksProps } />
131
+ </>
132
+ );
133
+ }
@@ -0,0 +1,23 @@
1
+ /**
2
+ * WordPress dependencies
3
+ */
4
+ import { SVG, Path } from '@wordpress/primitives';
5
+
6
+ export default (
7
+ <SVG xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">
8
+ <Path
9
+ fillRule="evenodd"
10
+ clipRule="evenodd"
11
+ d="M19.5 9.25L9.5 9.25L9.5 7.75L19.5 7.75L19.5 9.25Z"
12
+ fill="currentColor"
13
+ />
14
+ <Path d="M4.5 6L8.5 8.5L4.5 11L4.5 6Z" fill="currentColor" />
15
+ <Path
16
+ fillRule="evenodd"
17
+ clipRule="evenodd"
18
+ d="M19.5 16.25L9.5 16.25L9.5 14.75L19.5 14.75L19.5 16.25Z"
19
+ fill="currentColor"
20
+ />
21
+ <Path d="M4.5 13L8.5 15.5L4.5 18L4.5 13Z" fill="currentColor" />
22
+ </SVG>
23
+ );
@@ -0,0 +1,21 @@
1
+ /**
2
+ * Internal dependencies
3
+ */
4
+ import edit from './edit';
5
+ import save from './save';
6
+ import metadata from './block.json';
7
+ import initBlock from '../utils/init-block';
8
+ import icon from './icon';
9
+
10
+ const { name } = metadata;
11
+
12
+ export { metadata, name };
13
+
14
+ export const settings = {
15
+ icon,
16
+ example: {},
17
+ edit,
18
+ save,
19
+ };
20
+
21
+ export const init = () => initBlock( { name, metadata, settings } );
@@ -0,0 +1,61 @@
1
+ <?php
2
+ /**
3
+ * Server-side rendering of the `core/accordion` block.
4
+ *
5
+ * @package WordPress
6
+ * @since 6.6.0
7
+ *
8
+ * @param array $attributes The block attributes.
9
+ * @param string $content The block content.
10
+ *
11
+ * @return string Returns the updated markup.
12
+ */
13
+ function render_block_core_accordion( $attributes, $content ) {
14
+ if ( ! $content ) {
15
+ return $content;
16
+ }
17
+
18
+ $suffix = wp_scripts_get_suffix();
19
+ if ( defined( 'IS_GUTENBERG_PLUGIN' ) && IS_GUTENBERG_PLUGIN ) {
20
+ $module_url = gutenberg_url( '/build-module/block-library/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';
36
+
37
+ if ( $p->next_tag( array( 'class_name' => 'wp-block-accordion' ) ) ) {
38
+ $p->set_attribute( 'data-wp-interactive', 'core/accordion' );
39
+ $p->set_attribute( 'data-wp-context', '{ "autoclose": ' . $autoclose . ', "isOpen": [], "icon": "' . $icon . '", "iconPosition": "' . $icon_position . '" }' );
40
+
41
+ // Only modify content if directives have been set.
42
+ $content = $p->get_updated_html();
43
+ }
44
+
45
+ return $content;
46
+ }
47
+
48
+ /**
49
+ * Registers the `core/accordion` block on server.
50
+ *
51
+ * @since 6.6.0
52
+ */
53
+ function register_block_core_accordion() {
54
+ register_block_type_from_metadata(
55
+ __DIR__ . '/accordion',
56
+ array(
57
+ 'render_callback' => 'render_block_core_accordion',
58
+ )
59
+ );
60
+ }
61
+ add_action( 'init', 'register_block_core_accordion' );
@@ -0,0 +1,6 @@
1
+ /**
2
+ * Internal dependencies
3
+ */
4
+ import { init } from './';
5
+
6
+ export default init();
@@ -0,0 +1,23 @@
1
+ /**
2
+ * External dependencies
3
+ */
4
+ import clsx from 'clsx';
5
+ /**
6
+ * WordPress dependencies
7
+ */
8
+ import { useBlockProps, useInnerBlocksProps } from '@wordpress/block-editor';
9
+
10
+ export default function save( { attributes } ) {
11
+ const { iconPosition } = attributes;
12
+ const blockProps = useBlockProps.save();
13
+ const className = clsx(
14
+ {
15
+ 'icon-position-left': iconPosition === 'left',
16
+ },
17
+ blockProps.className
18
+ );
19
+
20
+ return (
21
+ <div { ...useInnerBlocksProps.save( { ...blockProps, className } ) } />
22
+ );
23
+ }
@@ -0,0 +1,91 @@
1
+ .wp-block-accordion-content {
2
+ display: grid;
3
+ grid-template-rows: max-content 0fr;
4
+ }
5
+
6
+ .wp-block-accordion-content.is-open {
7
+ grid-template-rows: max-content 1fr;
8
+ }
9
+
10
+ .accordion-content__heading {
11
+ margin-block-start: 0;
12
+ margin-block-end: 0;
13
+ }
14
+
15
+ .accordion-content__toggle {
16
+ font-family: inherit;
17
+ font-size: inherit;
18
+ font-weight: inherit;
19
+ line-height: inherit;
20
+ letter-spacing: inherit;
21
+ text-transform: inherit;
22
+ text-decoration: inherit;
23
+ word-spacing: inherit;
24
+ background: none;
25
+ border: none;
26
+ color: inherit;
27
+ padding: var(--wp--preset--spacing--20, 1em) 0;
28
+ cursor: pointer;
29
+ outline: none;
30
+ display: flex;
31
+ align-items: center;
32
+ text-align: inherit;
33
+ position: relative;
34
+ width: 100%;
35
+ }
36
+
37
+ .accordion-content__toggle > span {
38
+ width: 100%;
39
+ }
40
+
41
+ .is-layout-flow > .wp-block-accordion-panel,
42
+ .wp-block-accordion-panel {
43
+ overflow: hidden;
44
+ margin: 0;
45
+ }
46
+
47
+ .accordion-panel__wrapper {
48
+ padding-bottom: var(--wp--preset--spacing--20, 1em);
49
+ }
50
+
51
+ /* No icon block style */
52
+ .is-style-no-icon .accordion-content__toggle-icon {
53
+ background-color: unset;
54
+ }
55
+
56
+ .wp-block-accordion-header.icon-position-left .accordion-content__toggle {
57
+ /* stylelint-disable-next-line declaration-property-value-allowed-list -- This should be refactored to not use the row-reverse value. */
58
+ flex-direction: row-reverse;
59
+ }
60
+
61
+ /* RTL language support */
62
+ [dir="rtl"] .wp-block-accordion-header:not(.icon-position-left) .accordion-content__toggle {
63
+ /* stylelint-disable-next-line declaration-property-value-allowed-list -- Automatically adjust icon position for RTL languages. */
64
+ flex-direction: row-reverse;
65
+ }
66
+
67
+ [dir="rtl"] .wp-block-accordion-header.icon-position-left .accordion-content__toggle {
68
+ flex-direction: row;
69
+ }
70
+
71
+ .accordion-content__toggle:focus-visible {
72
+ outline: 2px solid -webkit-focus-ring-color;
73
+ outline-offset: 2px;
74
+ }
75
+
76
+ /* Add transitions only for users who do not prefer reduced motion */
77
+ @media (prefers-reduced-motion: no-preference) {
78
+ .wp-block-accordion-content .accordion-content__toggle-icon {
79
+ transition: transform 0.2s ease-in-out;
80
+ }
81
+
82
+ .wp-block-accordion-content {
83
+ transition: grid-template-rows 0.3s ease-out;
84
+ }
85
+ }
86
+
87
+ .is-open {
88
+ .accordion-content__toggle-icon.has-icon-plus {
89
+ transform: rotate(45deg);
90
+ }
91
+ }
@@ -0,0 +1,38 @@
1
+ /**
2
+ * WordPress dependencies
3
+ */
4
+ import { store, getContext } from '@wordpress/interactivity';
5
+
6
+ const { state } = store( 'core/accordion', {
7
+ state: {
8
+ get isOpen() {
9
+ const { isOpen, id } = getContext();
10
+ return isOpen.includes( id );
11
+ },
12
+ },
13
+ actions: {
14
+ toggle: () => {
15
+ const context = getContext();
16
+ const { id, autoclose } = context;
17
+
18
+ if ( autoclose ) {
19
+ context.isOpen = state.isOpen ? [] : [ id ];
20
+ } else if ( state.isOpen ) {
21
+ context.isOpen = context.isOpen.filter(
22
+ ( item ) => item !== id
23
+ );
24
+ } else {
25
+ context.isOpen.push( id );
26
+ }
27
+ },
28
+ },
29
+ callbacks: {
30
+ initIsOpen: () => {
31
+ const context = getContext();
32
+ const { id, openByDefault } = context;
33
+ if ( openByDefault ) {
34
+ context.isOpen.push( id );
35
+ }
36
+ },
37
+ },
38
+ } );
@@ -0,0 +1,45 @@
1
+ {
2
+ "$schema": "https://schemas.wp.org/trunk/block.json",
3
+ "apiVersion": 3,
4
+ "name": "core/accordion-content",
5
+ "version": "0.1.0",
6
+ "title": "Accordion Content",
7
+ "category": "design",
8
+ "description": "Displays a section of content in an accordion, including a header and expandable content.",
9
+ "example": {},
10
+ "__experimental": true,
11
+ "parent": [ "core/accordion" ],
12
+ "allowedBlocks": [ "core/accordion-header", "core/accordion-panel" ],
13
+ "supports": {
14
+ "align": [ "wide", "full" ],
15
+ "color": {
16
+ "background": true,
17
+ "gradient": true
18
+ },
19
+ "interactivity": true,
20
+ "spacing": {
21
+ "margin": [ "top", "bottom" ],
22
+ "blockGap": true
23
+ },
24
+ "__experimentalBorder": {
25
+ "color": true,
26
+ "radius": true,
27
+ "style": true,
28
+ "width": true,
29
+ "__experimentalDefaultControls": {
30
+ "color": true,
31
+ "radius": true,
32
+ "style": true,
33
+ "width": true
34
+ }
35
+ },
36
+ "shadow": true
37
+ },
38
+ "attributes": {
39
+ "openByDefault": {
40
+ "type": "boolean",
41
+ "default": false
42
+ }
43
+ },
44
+ "textdomain": "default"
45
+ }