@wordpress/block-library 9.27.1-next.46f643fa0.0 → 9.28.1-next.0f6f9d12c.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (271) hide show
  1. package/CHANGELOG.md +2 -0
  2. package/build/accordion-header/edit.js +118 -0
  3. package/build/accordion-header/edit.js.map +1 -0
  4. package/build/accordion-header/index.js +124 -0
  5. package/build/accordion-header/index.js.map +1 -0
  6. package/build/accordion-header/init.js +12 -0
  7. package/build/accordion-header/init.js.map +1 -0
  8. package/build/accordion-header/save.js +81 -0
  9. package/build/accordion-header/save.js.map +1 -0
  10. package/build/accordion-item/edit.js +129 -0
  11. package/build/accordion-item/edit.js.map +1 -0
  12. package/build/accordion-item/icons.js +30 -0
  13. package/build/accordion-item/icons.js.map +1 -0
  14. package/build/accordion-item/index.js +79 -0
  15. package/build/accordion-item/index.js.map +1 -0
  16. package/build/accordion-item/init.js +12 -0
  17. package/build/accordion-item/init.js.map +1 -0
  18. package/build/accordion-item/save.js +37 -0
  19. package/build/accordion-item/save.js.map +1 -0
  20. package/build/accordion-panel/edit.js +59 -0
  21. package/build/accordion-panel/edit.js.map +1 -0
  22. package/build/accordion-panel/index.js +108 -0
  23. package/build/accordion-panel/index.js.map +1 -0
  24. package/build/accordion-panel/init.js +12 -0
  25. package/build/accordion-panel/init.js.map +1 -0
  26. package/build/accordion-panel/save.js +46 -0
  27. package/build/accordion-panel/save.js.map +1 -0
  28. package/build/accordions/edit.js +123 -0
  29. package/build/accordions/edit.js.map +1 -0
  30. package/build/accordions/index.js +103 -0
  31. package/build/accordions/index.js.map +1 -0
  32. package/build/accordions/init.js +12 -0
  33. package/build/accordions/init.js.map +1 -0
  34. package/build/accordions/save.js +36 -0
  35. package/build/accordions/save.js.map +1 -0
  36. package/build/accordions/view.js +49 -0
  37. package/build/accordions/view.js.map +1 -0
  38. package/build/cover/edit/index.js +1 -1
  39. package/build/cover/edit/index.js.map +1 -1
  40. package/build/cover/edit/inspector-controls.js +1 -1
  41. package/build/cover/edit/inspector-controls.js.map +1 -1
  42. package/build/cover/index.js +2 -1
  43. package/build/cover/index.js.map +1 -1
  44. package/build/file/edit.js +4 -2
  45. package/build/file/edit.js.map +1 -1
  46. package/build/file/edit.native.js +1 -1
  47. package/build/file/edit.native.js.map +1 -1
  48. package/build/file/transforms.js +6 -6
  49. package/build/file/transforms.js.map +1 -1
  50. package/build/file/utils/index.js +5 -0
  51. package/build/file/utils/index.js.map +1 -1
  52. package/build/freeform/edit.js +6 -0
  53. package/build/freeform/edit.js.map +1 -1
  54. package/build/gallery/use-get-media.js +3 -3
  55. package/build/gallery/use-get-media.js.map +1 -1
  56. package/build/gallery/use-get-media.native.js +3 -3
  57. package/build/gallery/use-get-media.native.js.map +1 -1
  58. package/build/image/edit.native.js +2 -2
  59. package/build/image/edit.native.js.map +1 -1
  60. package/build/image/image.js +1 -1
  61. package/build/image/image.js.map +1 -1
  62. package/build/index.js +10 -0
  63. package/build/index.js.map +1 -1
  64. package/build/list-item/edit.js +3 -0
  65. package/build/list-item/edit.js.map +1 -1
  66. package/build/media-text/edit.js +2 -2
  67. package/build/media-text/edit.js.map +1 -1
  68. package/build/media-text/media-container.js +2 -1
  69. package/build/media-text/media-container.js.map +1 -1
  70. package/build/media-text/transforms.js +7 -3
  71. package/build/media-text/transforms.js.map +1 -1
  72. package/build/more/edit.js +13 -28
  73. package/build/more/edit.js.map +1 -1
  74. package/build/post-comments-count/index.js +3 -0
  75. package/build/post-comments-count/index.js.map +1 -1
  76. package/build/post-comments-link/index.js +3 -0
  77. package/build/post-comments-link/index.js.map +1 -1
  78. package/build/post-featured-image/edit.js +2 -2
  79. package/build/post-featured-image/edit.js.map +1 -1
  80. package/build/query-title/edit.js +52 -2
  81. package/build/query-title/edit.js.map +1 -1
  82. package/build/query-title/index.js +1 -0
  83. package/build/query-title/index.js.map +1 -1
  84. package/build/query-title/use-post-type-label.js +42 -0
  85. package/build/query-title/use-post-type-label.js.map +1 -0
  86. package/build/query-title/variations.js +10 -0
  87. package/build/query-title/variations.js.map +1 -1
  88. package/build/site-logo/edit.js +58 -43
  89. package/build/site-logo/edit.js.map +1 -1
  90. package/build/site-title/edit.js +9 -3
  91. package/build/site-title/edit.js.map +1 -1
  92. package/build/social-link/icons/tiktok.js +2 -2
  93. package/build/social-link/icons/tiktok.js.map +1 -1
  94. package/build/utils/poster-image.js +54 -6
  95. package/build/utils/poster-image.js.map +1 -1
  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/index.js +116 -0
  99. package/build-module/accordion-header/index.js.map +1 -0
  100. package/build-module/accordion-header/init.js +6 -0
  101. package/build-module/accordion-header/init.js.map +1 -0
  102. package/build-module/accordion-header/save.js +71 -0
  103. package/build-module/accordion-header/save.js.map +1 -0
  104. package/build-module/accordion-item/edit.js +120 -0
  105. package/build-module/accordion-item/edit.js.map +1 -0
  106. package/build-module/accordion-item/icons.js +22 -0
  107. package/build-module/accordion-item/icons.js.map +1 -0
  108. package/build-module/accordion-item/index.js +71 -0
  109. package/build-module/accordion-item/index.js.map +1 -0
  110. package/build-module/accordion-item/init.js +6 -0
  111. package/build-module/accordion-item/init.js.map +1 -0
  112. package/build-module/accordion-item/save.js +28 -0
  113. package/build-module/accordion-item/save.js.map +1 -0
  114. package/build-module/accordion-panel/edit.js +50 -0
  115. package/build-module/accordion-panel/edit.js.map +1 -0
  116. package/build-module/accordion-panel/index.js +100 -0
  117. package/build-module/accordion-panel/index.js.map +1 -0
  118. package/build-module/accordion-panel/init.js +6 -0
  119. package/build-module/accordion-panel/init.js.map +1 -0
  120. package/build-module/accordion-panel/save.js +37 -0
  121. package/build-module/accordion-panel/save.js.map +1 -0
  122. package/build-module/accordions/edit.js +116 -0
  123. package/build-module/accordions/edit.js.map +1 -0
  124. package/build-module/accordions/index.js +95 -0
  125. package/build-module/accordions/index.js.map +1 -0
  126. package/build-module/accordions/init.js +6 -0
  127. package/build-module/accordions/init.js.map +1 -0
  128. package/build-module/accordions/save.js +27 -0
  129. package/build-module/accordions/save.js.map +1 -0
  130. package/build-module/accordions/view.js +46 -0
  131. package/build-module/accordions/view.js.map +1 -0
  132. package/build-module/cover/edit/index.js +1 -1
  133. package/build-module/cover/edit/index.js.map +1 -1
  134. package/build-module/cover/edit/inspector-controls.js +1 -1
  135. package/build-module/cover/edit/inspector-controls.js.map +1 -1
  136. package/build-module/cover/index.js +2 -1
  137. package/build-module/cover/index.js.map +1 -1
  138. package/build-module/file/edit.js +4 -2
  139. package/build-module/file/edit.js.map +1 -1
  140. package/build-module/file/edit.native.js +1 -1
  141. package/build-module/file/edit.native.js.map +1 -1
  142. package/build-module/file/transforms.js +6 -6
  143. package/build-module/file/transforms.js.map +1 -1
  144. package/build-module/file/utils/index.js +5 -0
  145. package/build-module/file/utils/index.js.map +1 -1
  146. package/build-module/freeform/edit.js +6 -0
  147. package/build-module/freeform/edit.js.map +1 -1
  148. package/build-module/gallery/use-get-media.js +3 -3
  149. package/build-module/gallery/use-get-media.js.map +1 -1
  150. package/build-module/gallery/use-get-media.native.js +3 -3
  151. package/build-module/gallery/use-get-media.native.js.map +1 -1
  152. package/build-module/image/edit.native.js +2 -2
  153. package/build-module/image/edit.native.js.map +1 -1
  154. package/build-module/image/image.js +1 -1
  155. package/build-module/image/image.js.map +1 -1
  156. package/build-module/index.js +10 -0
  157. package/build-module/index.js.map +1 -1
  158. package/build-module/list-item/edit.js +3 -0
  159. package/build-module/list-item/edit.js.map +1 -1
  160. package/build-module/media-text/edit.js +2 -2
  161. package/build-module/media-text/edit.js.map +1 -1
  162. package/build-module/media-text/media-container.js +2 -1
  163. package/build-module/media-text/media-container.js.map +1 -1
  164. package/build-module/media-text/transforms.js +7 -3
  165. package/build-module/media-text/transforms.js.map +1 -1
  166. package/build-module/more/edit.js +15 -29
  167. package/build-module/more/edit.js.map +1 -1
  168. package/build-module/post-comments-count/index.js +3 -0
  169. package/build-module/post-comments-count/index.js.map +1 -1
  170. package/build-module/post-comments-link/index.js +3 -0
  171. package/build-module/post-comments-link/index.js.map +1 -1
  172. package/build-module/post-featured-image/edit.js +2 -2
  173. package/build-module/post-featured-image/edit.js.map +1 -1
  174. package/build-module/query-title/edit.js +52 -2
  175. package/build-module/query-title/edit.js.map +1 -1
  176. package/build-module/query-title/index.js +1 -0
  177. package/build-module/query-title/index.js.map +1 -1
  178. package/build-module/query-title/use-post-type-label.js +36 -0
  179. package/build-module/query-title/use-post-type-label.js.map +1 -0
  180. package/build-module/query-title/variations.js +10 -0
  181. package/build-module/query-title/variations.js.map +1 -1
  182. package/build-module/site-logo/edit.js +59 -44
  183. package/build-module/site-logo/edit.js.map +1 -1
  184. package/build-module/site-title/edit.js +10 -4
  185. package/build-module/site-title/edit.js.map +1 -1
  186. package/build-module/social-link/icons/tiktok.js +2 -2
  187. package/build-module/social-link/icons/tiktok.js.map +1 -1
  188. package/build-module/utils/poster-image.js +57 -9
  189. package/build-module/utils/poster-image.js.map +1 -1
  190. package/build-style/accordions/style-rtl.css +223 -0
  191. package/build-style/accordions/style.css +223 -0
  192. package/build-style/editor-rtl.css +23 -26
  193. package/build-style/editor.css +23 -26
  194. package/build-style/gallery/style-rtl.css +1 -2
  195. package/build-style/gallery/style.css +1 -2
  196. package/build-style/image/style-rtl.css +1 -2
  197. package/build-style/image/style.css +1 -2
  198. package/build-style/more/editor-rtl.css +3 -11
  199. package/build-style/more/editor.css +3 -11
  200. package/build-style/post-featured-image/editor-rtl.css +1 -2
  201. package/build-style/post-featured-image/editor.css +1 -2
  202. package/build-style/style-rtl.css +90 -4
  203. package/build-style/style.css +90 -4
  204. package/package.json +36 -35
  205. package/src/accordion-header/block.json +93 -0
  206. package/src/accordion-header/edit.js +128 -0
  207. package/src/accordion-header/index.js +24 -0
  208. package/src/accordion-header/init.js +6 -0
  209. package/src/accordion-header/save.js +79 -0
  210. package/src/accordion-item/block.json +45 -0
  211. package/src/accordion-item/edit.js +149 -0
  212. package/src/accordion-item/icons.js +23 -0
  213. package/src/accordion-item/index.js +24 -0
  214. package/src/accordion-item/index.php +73 -0
  215. package/src/accordion-item/init.js +6 -0
  216. package/src/accordion-item/save.js +25 -0
  217. package/src/accordion-panel/block.json +74 -0
  218. package/src/accordion-panel/edit.js +61 -0
  219. package/src/accordion-panel/index.js +24 -0
  220. package/src/accordion-panel/init.js +6 -0
  221. package/src/accordion-panel/save.js +51 -0
  222. package/src/accordions/block.json +69 -0
  223. package/src/accordions/edit.js +133 -0
  224. package/src/accordions/index.js +24 -0
  225. package/src/accordions/index.php +61 -0
  226. package/src/accordions/init.js +6 -0
  227. package/src/accordions/save.js +23 -0
  228. package/src/accordions/style.scss +91 -0
  229. package/src/accordions/view.js +38 -0
  230. package/src/block/index.php +35 -20
  231. package/src/cover/block.json +2 -1
  232. package/src/cover/edit/index.js +8 -3
  233. package/src/cover/edit/inspector-controls.js +6 -1
  234. package/src/file/edit.js +9 -4
  235. package/src/file/edit.native.js +5 -1
  236. package/src/file/index.php +28 -22
  237. package/src/file/transforms.js +6 -6
  238. package/src/file/utils/index.js +5 -0
  239. package/src/form-input/index.php +4 -2
  240. package/src/freeform/edit.js +7 -0
  241. package/src/gallery/use-get-media.js +9 -5
  242. package/src/gallery/use-get-media.native.js +10 -6
  243. package/src/image/edit.native.js +4 -2
  244. package/src/image/image.js +6 -1
  245. package/src/image/index.php +1 -1
  246. package/src/image/test/edit.native.js +16 -10
  247. package/src/index.js +12 -0
  248. package/src/list-item/edit.js +3 -0
  249. package/src/loginout/index.php +4 -2
  250. package/src/media-text/edit.js +16 -6
  251. package/src/media-text/media-container.js +1 -0
  252. package/src/media-text/transforms.js +5 -1
  253. package/src/more/edit.js +27 -33
  254. package/src/more/editor.scss +3 -12
  255. package/src/post-comments-count/block.json +3 -0
  256. package/src/post-comments-link/block.json +3 -0
  257. package/src/post-date/index.php +28 -32
  258. package/src/post-excerpt/index.php +16 -12
  259. package/src/post-featured-image/edit.js +2 -2
  260. package/src/query-title/block.json +1 -0
  261. package/src/query-title/edit.js +58 -1
  262. package/src/query-title/index.php +30 -5
  263. package/src/query-title/use-post-type-label.js +34 -0
  264. package/src/query-title/variations.js +13 -0
  265. package/src/site-logo/edit.js +44 -16
  266. package/src/site-title/edit.js +24 -16
  267. package/src/social-link/icons/tiktok.js +2 -2
  268. package/src/social-link/index.php +1 -1
  269. package/src/style.scss +1 -0
  270. package/src/utils/poster-image.js +62 -17
  271. package/src/utils/poster-image.scss +23 -16
@@ -0,0 +1,79 @@
1
+ /**
2
+ * External dependencies
3
+ */
4
+ import clsx from 'clsx';
5
+ /**
6
+ * WordPress dependencies
7
+ */
8
+ import {
9
+ useBlockProps,
10
+ __experimentalGetBorderClassesAndStyles as getBorderClassesAndStyles,
11
+ __experimentalGetColorClassesAndStyles as getColorClassesAndStyles,
12
+ __experimentalGetSpacingClassesAndStyles as getSpacingClassesAndStyles,
13
+ __experimentalGetShadowClassesAndStyles as getShadowClassesAndStyles,
14
+ RichText,
15
+ } from '@wordpress/block-editor';
16
+ /**
17
+ * Internal dependencies
18
+ */
19
+ import { plus } from '../accordion-item/icons';
20
+
21
+ const ICONS = {
22
+ plus,
23
+ };
24
+
25
+ export default function save( { attributes } ) {
26
+ const { level, title, iconPosition, textAlign, showIcon } = attributes;
27
+ const TagName = 'h' + level;
28
+
29
+ const blockProps = useBlockProps.save();
30
+ const borderProps = getBorderClassesAndStyles( attributes );
31
+ const colorProps = getColorClassesAndStyles( attributes );
32
+ const spacingProps = getSpacingClassesAndStyles( attributes );
33
+ const shadowProps = getShadowClassesAndStyles( attributes );
34
+
35
+ const Icon = ICONS.plus;
36
+
37
+ return (
38
+ <TagName
39
+ { ...blockProps }
40
+ className={ clsx(
41
+ blockProps.className,
42
+ colorProps.className,
43
+ borderProps.className,
44
+ 'accordion-item__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
+ >
57
+ <button
58
+ className={ clsx( 'accordion-item__toggle' ) }
59
+ style={ {
60
+ ...spacingProps.style,
61
+ } }
62
+ >
63
+ <RichText.Content tagName="span" value={ title } />
64
+ <span
65
+ className={ clsx( `accordion-item__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>
76
+ </button>
77
+ </TagName>
78
+ );
79
+ }
@@ -0,0 +1,45 @@
1
+ {
2
+ "$schema": "https://schemas.wp.org/trunk/block.json",
3
+ "apiVersion": 3,
4
+ "name": "core/accordion-item",
5
+ "version": "0.1.0",
6
+ "title": "Accordion",
7
+ "category": "design",
8
+ "description": "A single accordion that displays a header and expandable content.",
9
+ "example": {},
10
+ "__experimental": true,
11
+ "parent": [ "core/accordions" ],
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
+ }
@@ -0,0 +1,149 @@
1
+ /**
2
+ * WordPress dependencies
3
+ */
4
+ import { __ } from '@wordpress/i18n';
5
+ import {
6
+ useBlockProps,
7
+ useInnerBlocksProps,
8
+ InspectorControls,
9
+ store as blockEditorStore,
10
+ } from '@wordpress/block-editor';
11
+ import { useDispatch, useSelect } from '@wordpress/data';
12
+ import { useEffect } from '@wordpress/element';
13
+ import {
14
+ ToggleControl,
15
+ __experimentalToolsPanel as ToolsPanel,
16
+ __experimentalToolsPanelItem as ToolsPanelItem,
17
+ } from '@wordpress/components';
18
+ /**
19
+ * External dependencies
20
+ */
21
+ import clsx from 'clsx';
22
+
23
+ /**
24
+ * Internal dependencies
25
+ */
26
+ import { useToolsPanelDropdownMenuProps } from '../utils/hooks';
27
+
28
+ export default function Edit( {
29
+ attributes: { openByDefault },
30
+ clientId,
31
+ setAttributes,
32
+ } ) {
33
+ const dropdownMenuProps = useToolsPanelDropdownMenuProps();
34
+
35
+ const { isSelected, getBlockOrder } = useSelect(
36
+ ( select ) => {
37
+ const {
38
+ isBlockSelected,
39
+ hasSelectedInnerBlock,
40
+ getBlockOrder: getBlockOrderSelector,
41
+ } = select( blockEditorStore );
42
+ return {
43
+ isSelected:
44
+ isBlockSelected( clientId ) ||
45
+ hasSelectedInnerBlock( clientId, true ),
46
+ getBlockOrder: getBlockOrderSelector,
47
+ };
48
+ },
49
+ [ clientId ]
50
+ );
51
+
52
+ const contentBlockClientId = getBlockOrder( clientId )[ 1 ];
53
+ const { updateBlockAttributes, __unstableMarkNextChangeAsNotPersistent } =
54
+ useDispatch( blockEditorStore );
55
+
56
+ useEffect( () => {
57
+ if ( contentBlockClientId ) {
58
+ __unstableMarkNextChangeAsNotPersistent();
59
+ updateBlockAttributes( contentBlockClientId, {
60
+ isSelected,
61
+ } );
62
+ }
63
+ }, [
64
+ isSelected,
65
+ contentBlockClientId,
66
+ __unstableMarkNextChangeAsNotPersistent,
67
+ updateBlockAttributes,
68
+ ] );
69
+
70
+ const blockProps = useBlockProps();
71
+ const innerBlocksProps = useInnerBlocksProps(
72
+ {
73
+ ...blockProps,
74
+ className: clsx( blockProps.className, {
75
+ 'is-open': openByDefault || isSelected,
76
+ } ),
77
+ },
78
+ {
79
+ template: [
80
+ [ 'core/accordion-header', {} ],
81
+ [
82
+ 'core/accordion-panel',
83
+ {
84
+ openByDefault,
85
+ },
86
+ ],
87
+ ],
88
+ templateLock: 'all',
89
+ directInsert: true,
90
+ templateInsertUpdatesSelection: true,
91
+ }
92
+ );
93
+
94
+ return (
95
+ <>
96
+ <InspectorControls key="setting">
97
+ <ToolsPanel
98
+ label={ __( 'Settings' ) }
99
+ resetAll={ () => {
100
+ setAttributes( { openByDefault: false } );
101
+ if ( contentBlockClientId ) {
102
+ updateBlockAttributes( contentBlockClientId, {
103
+ openByDefault: false,
104
+ } );
105
+ }
106
+ } }
107
+ dropdownMenuProps={ dropdownMenuProps }
108
+ >
109
+ <ToolsPanelItem
110
+ label={ __( 'Open by default' ) }
111
+ isShownByDefault
112
+ hasValue={ () => !! openByDefault }
113
+ onDeselect={ () => {
114
+ setAttributes( { openByDefault: false } );
115
+ if ( contentBlockClientId ) {
116
+ updateBlockAttributes( contentBlockClientId, {
117
+ openByDefault: false,
118
+ } );
119
+ }
120
+ } }
121
+ >
122
+ <ToggleControl
123
+ label={ __( 'Open by default' ) }
124
+ __nextHasNoMarginBottom
125
+ onChange={ ( value ) => {
126
+ setAttributes( {
127
+ openByDefault: value,
128
+ } );
129
+ if ( contentBlockClientId ) {
130
+ updateBlockAttributes(
131
+ contentBlockClientId,
132
+ {
133
+ openByDefault: value,
134
+ }
135
+ );
136
+ }
137
+ } }
138
+ checked={ openByDefault }
139
+ help={ __(
140
+ 'Accordion content will be displayed by default.'
141
+ ) }
142
+ />
143
+ </ToolsPanelItem>
144
+ </ToolsPanel>
145
+ </InspectorControls>
146
+ <div { ...innerBlocksProps } />
147
+ </>
148
+ );
149
+ }
@@ -0,0 +1,23 @@
1
+ /**
2
+ * WordPress dependencies
3
+ */
4
+ import { createElement } from '@wordpress/element';
5
+
6
+ export const plus = ( { width, height } ) => {
7
+ return createElement(
8
+ 'span',
9
+ {
10
+ style: {
11
+ display: 'inline-block',
12
+ width: width || 24,
13
+ height: height || 24,
14
+ lineHeight: `${ height || 24 }px`,
15
+ textAlign: 'center',
16
+ fontSize: `${ ( height || 24 ) * 0.6 }px`,
17
+ fontWeight: 'bold',
18
+ color: 'currentColor',
19
+ },
20
+ },
21
+ '+'
22
+ );
23
+ };
@@ -0,0 +1,24 @@
1
+ /**
2
+ * WordPress dependencies
3
+ */
4
+ import { accordionItem } from '@wordpress/icons';
5
+ /**
6
+ * Internal dependencies
7
+ */
8
+ import edit from './edit';
9
+ import save from './save';
10
+ import metadata from './block.json';
11
+ import initBlock from '../utils/init-block';
12
+
13
+ const { name } = metadata;
14
+
15
+ export { metadata, name };
16
+
17
+ export const settings = {
18
+ icon: accordionItem,
19
+ example: {},
20
+ edit,
21
+ save,
22
+ };
23
+
24
+ export const init = () => initBlock( { name, metadata, settings } );
@@ -0,0 +1,73 @@
1
+ <?php
2
+
3
+ /**
4
+ * Server-side rendering of the `core/accordion-item` block.
5
+ *
6
+ * @package WordPress
7
+ * @since 6.6.0
8
+ *
9
+ * @param array $attributes The block attributes.
10
+ * @param string $content The block content.
11
+ *
12
+ * @return string Returns the updated markup.
13
+ */
14
+ function block_core_accordion_item_render( $attributes, $content ) {
15
+ if ( ! $content ) {
16
+ return $content;
17
+ }
18
+
19
+ $p = new WP_HTML_Tag_Processor( $content );
20
+ $unique_id = wp_unique_id( 'accordion-item-' );
21
+
22
+ // Initialize the state of the item on the server using a closure,
23
+ // since we need to get derived state based on the current context.
24
+ wp_interactivity_state(
25
+ 'core/accordion',
26
+ array(
27
+ 'isOpen' => function () {
28
+ $context = wp_interactivity_get_context();
29
+ return $context['openByDefault'];
30
+ },
31
+ )
32
+ );
33
+
34
+ if ( $p->next_tag( array( 'class_name' => 'wp-block-accordion-item' ) ) ) {
35
+ $open_by_default = $attributes['openByDefault'] ? 'true' : 'false';
36
+ $p->set_attribute( 'data-wp-context', '{ "id": "' . $unique_id . '", "openByDefault": ' . $open_by_default . ' }' );
37
+ $p->set_attribute( 'data-wp-class--is-open', 'state.isOpen' );
38
+ $p->set_attribute( 'data-wp-init', 'callbacks.initIsOpen' );
39
+
40
+ if ( $p->next_tag( array( 'class_name' => 'accordion-item__toggle' ) ) ) {
41
+ $p->set_attribute( 'data-wp-on--click', 'actions.toggle' );
42
+ $p->set_attribute( 'id', $unique_id );
43
+ $p->set_attribute( 'aria-controls', $unique_id . '-panel' );
44
+ $p->set_attribute( 'data-wp-bind--aria-expanded', 'state.isOpen' );
45
+
46
+ if ( $p->next_tag( array( 'class_name' => 'wp-block-accordion-panel' ) ) ) {
47
+ $p->set_attribute( 'id', $unique_id . '-panel' );
48
+ $p->set_attribute( 'aria-labelledby', $unique_id );
49
+ $p->set_attribute( 'data-wp-bind--inert', '!state.isOpen' );
50
+
51
+ // Only modify content if all directives have been set.
52
+ $content = $p->get_updated_html();
53
+ }
54
+ }
55
+ }
56
+
57
+ return $content;
58
+ }
59
+
60
+ /**
61
+ * Registers the `core/accordion-item` block on server.
62
+ *
63
+ * @since 6.6.0
64
+ */
65
+ function register_block_core_accordion_item() {
66
+ register_block_type_from_metadata(
67
+ __DIR__ . '/accordion-item',
68
+ array(
69
+ 'render_callback' => 'block_core_accordion_item_render',
70
+ )
71
+ );
72
+ }
73
+ add_action( 'init', 'register_block_core_accordion_item' );
@@ -0,0 +1,6 @@
1
+ /**
2
+ * Internal dependencies
3
+ */
4
+ import { init } from './';
5
+
6
+ export default init();
@@ -0,0 +1,25 @@
1
+ /**
2
+ * WordPress dependencies
3
+ */
4
+ import { useBlockProps, useInnerBlocksProps } from '@wordpress/block-editor';
5
+ /**
6
+ * External dependencies
7
+ */
8
+ import clsx from 'clsx';
9
+
10
+ export default function save( { attributes } ) {
11
+ const { openByDefault } = attributes;
12
+ const blockProps = useBlockProps.save();
13
+ const className = clsx(
14
+ {
15
+ 'is-open': openByDefault,
16
+ },
17
+ blockProps.className
18
+ );
19
+ const innerBlocksProps = useInnerBlocksProps.save( {
20
+ ...blockProps,
21
+ className,
22
+ } );
23
+
24
+ return <div { ...innerBlocksProps } />;
25
+ }
@@ -0,0 +1,74 @@
1
+ {
2
+ "$schema": "https://schemas.wp.org/trunk/block.json",
3
+ "apiVersion": 3,
4
+ "name": "core/accordion-panel",
5
+ "version": "0.1.0",
6
+ "title": "Accordion Panel",
7
+ "category": "design",
8
+ "description": "Accordion Panel",
9
+ "example": {},
10
+ "__experimental": true,
11
+ "parent": [ "core/accordion-item" ],
12
+ "supports": {
13
+ "color": {
14
+ "background": true,
15
+ "gradient": true
16
+ },
17
+ "border": true,
18
+ "interactivity": true,
19
+ "spacing": {
20
+ "padding": true,
21
+ "margin": [ "top", "bottom" ],
22
+ "blockGap": true,
23
+ "__experimentalDefaultControls": {
24
+ "padding": true,
25
+ "blockGap": true
26
+ }
27
+ },
28
+ "__experimentalBorder": {
29
+ "color": true,
30
+ "radius": true,
31
+ "style": true,
32
+ "width": true,
33
+ "__experimentalDefaultControls": {
34
+ "color": true,
35
+ "radius": true,
36
+ "style": true,
37
+ "width": true
38
+ }
39
+ },
40
+ "typography": {
41
+ "fontSize": true,
42
+ "lineHeight": true,
43
+ "__experimentalFontFamily": true,
44
+ "__experimentalFontWeight": true,
45
+ "__experimentalFontStyle": true,
46
+ "__experimentalTextTransform": true,
47
+ "__experimentalTextDecoration": true,
48
+ "__experimentalLetterSpacing": true,
49
+ "__experimentalDefaultControls": {
50
+ "fontSize": true
51
+ }
52
+ },
53
+ "shadow": true
54
+ },
55
+ "attributes": {
56
+ "allowedBlocks": {
57
+ "type": "array"
58
+ },
59
+ "templateLock": {
60
+ "type": [ "string", "boolean" ],
61
+ "enum": [ "all", "insert", "contentOnly", false ],
62
+ "default": false
63
+ },
64
+ "openByDefault": {
65
+ "type": "boolean",
66
+ "default": false
67
+ },
68
+ "isSelected": {
69
+ "type": "boolean",
70
+ "default": false
71
+ }
72
+ },
73
+ "textdomain": "default"
74
+ }
@@ -0,0 +1,61 @@
1
+ /**
2
+ * WordPress dependencies
3
+ */
4
+ import {
5
+ useBlockProps,
6
+ useInnerBlocksProps,
7
+ __experimentalUseBorderProps as useBorderProps,
8
+ __experimentalUseColorProps as useColorProps,
9
+ __experimentalGetSpacingClassesAndStyles as useSpacingProps,
10
+ __experimentalGetShadowClassesAndStyles as useShadowProps,
11
+ } from '@wordpress/block-editor';
12
+ /**
13
+ * External dependencies
14
+ */
15
+ import clsx from 'clsx';
16
+
17
+ export default function Edit( { attributes } ) {
18
+ const { allowedBlocks, templateLock, openByDefault, isSelected } =
19
+ attributes;
20
+ const borderProps = useBorderProps( attributes );
21
+ const colorProps = useColorProps( attributes );
22
+ const spacingProps = useSpacingProps( attributes );
23
+ const shadowProps = useShadowProps( attributes );
24
+
25
+ const blockProps = useBlockProps();
26
+ const innerBlocksProps = useInnerBlocksProps(
27
+ {
28
+ className: 'accordion-content__wrapper',
29
+ style: {
30
+ ...spacingProps.style,
31
+ },
32
+ },
33
+ {
34
+ allowedBlocks,
35
+ template: [ [ 'core/paragraph', {} ] ],
36
+ templateLock,
37
+ }
38
+ );
39
+
40
+ return (
41
+ <div
42
+ { ...blockProps }
43
+ className={ clsx(
44
+ blockProps.className,
45
+ colorProps.className,
46
+ borderProps.className,
47
+ {
48
+ [ `has-custom-font-size` ]: blockProps?.style?.fontSize,
49
+ }
50
+ ) }
51
+ style={ {
52
+ ...borderProps.style,
53
+ ...colorProps.style,
54
+ ...shadowProps.style,
55
+ } }
56
+ aria-hidden={ ! isSelected && ! openByDefault }
57
+ >
58
+ <div { ...innerBlocksProps } />
59
+ </div>
60
+ );
61
+ }
@@ -0,0 +1,24 @@
1
+ /**
2
+ * WordPress dependencies
3
+ */
4
+ import { accordionPanel } from '@wordpress/icons';
5
+ /**
6
+ * Internal dependencies
7
+ */
8
+ import edit from './edit';
9
+ import save from './save';
10
+ import metadata from './block.json';
11
+ import initBlock from '../utils/init-block';
12
+
13
+ const { name } = metadata;
14
+
15
+ export { metadata, name };
16
+
17
+ export const settings = {
18
+ icon: accordionPanel,
19
+ example: {},
20
+ edit,
21
+ save,
22
+ };
23
+
24
+ export const init = () => initBlock( { name, metadata, settings } );
@@ -0,0 +1,6 @@
1
+ /**
2
+ * Internal dependencies
3
+ */
4
+ import { init } from './';
5
+
6
+ export default init();
@@ -0,0 +1,51 @@
1
+ /**
2
+ * WordPress dependencies
3
+ */
4
+ import {
5
+ InnerBlocks,
6
+ useBlockProps,
7
+ __experimentalGetBorderClassesAndStyles as getBorderClassesAndStyles,
8
+ __experimentalGetColorClassesAndStyles as getColorClassesAndStyles,
9
+ __experimentalGetSpacingClassesAndStyles as getSpacingClassesAndStyles,
10
+ __experimentalGetShadowClassesAndStyles as getShadowClassesAndStyles,
11
+ } from '@wordpress/block-editor';
12
+ /**
13
+ * External dependencies
14
+ */
15
+ import clsx from 'clsx';
16
+
17
+ export default function save( { attributes } ) {
18
+ const blockProps = useBlockProps.save();
19
+ const borderProps = getBorderClassesAndStyles( attributes );
20
+ const colorProps = getColorClassesAndStyles( attributes );
21
+ const spacingProps = getSpacingClassesAndStyles( attributes );
22
+ const shadowProps = getShadowClassesAndStyles( attributes );
23
+
24
+ return (
25
+ <div
26
+ { ...blockProps }
27
+ className={ clsx(
28
+ blockProps.className,
29
+ colorProps.className,
30
+ borderProps.className,
31
+ {
32
+ [ `has-custom-font-size` ]: blockProps?.style?.fontSize,
33
+ }
34
+ ) }
35
+ style={ {
36
+ ...borderProps.style,
37
+ ...colorProps.style,
38
+ ...shadowProps.style,
39
+ } }
40
+ >
41
+ <div
42
+ className="accordion-content__wrapper"
43
+ style={ {
44
+ ...spacingProps.style,
45
+ } }
46
+ >
47
+ <InnerBlocks.Content />
48
+ </div>
49
+ </div>
50
+ );
51
+ }