@wordpress/block-library 9.28.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 (163) hide show
  1. package/build/accordion-header/edit.js +118 -0
  2. package/build/accordion-header/edit.js.map +1 -0
  3. package/build/accordion-header/index.js +124 -0
  4. package/build/accordion-header/index.js.map +1 -0
  5. package/build/accordion-header/init.js +12 -0
  6. package/build/accordion-header/init.js.map +1 -0
  7. package/build/accordion-header/save.js +81 -0
  8. package/build/accordion-header/save.js.map +1 -0
  9. package/build/accordion-item/edit.js +129 -0
  10. package/build/accordion-item/edit.js.map +1 -0
  11. package/build/accordion-item/icons.js +30 -0
  12. package/build/accordion-item/icons.js.map +1 -0
  13. package/build/accordion-item/index.js +79 -0
  14. package/build/accordion-item/index.js.map +1 -0
  15. package/build/accordion-item/init.js +12 -0
  16. package/build/accordion-item/init.js.map +1 -0
  17. package/build/accordion-item/save.js +37 -0
  18. package/build/accordion-item/save.js.map +1 -0
  19. package/build/accordion-panel/edit.js +59 -0
  20. package/build/accordion-panel/edit.js.map +1 -0
  21. package/build/accordion-panel/index.js +108 -0
  22. package/build/accordion-panel/index.js.map +1 -0
  23. package/build/accordion-panel/init.js +12 -0
  24. package/build/accordion-panel/init.js.map +1 -0
  25. package/build/accordion-panel/save.js +46 -0
  26. package/build/accordion-panel/save.js.map +1 -0
  27. package/build/accordions/edit.js +123 -0
  28. package/build/accordions/edit.js.map +1 -0
  29. package/build/accordions/index.js +103 -0
  30. package/build/accordions/index.js.map +1 -0
  31. package/build/accordions/init.js +12 -0
  32. package/build/accordions/init.js.map +1 -0
  33. package/build/accordions/save.js +36 -0
  34. package/build/accordions/save.js.map +1 -0
  35. package/build/accordions/view.js +49 -0
  36. package/build/accordions/view.js.map +1 -0
  37. package/build/cover/index.js +2 -1
  38. package/build/cover/index.js.map +1 -1
  39. package/build/freeform/edit.js +6 -0
  40. package/build/freeform/edit.js.map +1 -1
  41. package/build/index.js +10 -0
  42. package/build/index.js.map +1 -1
  43. package/build/media-text/media-container.js +2 -1
  44. package/build/media-text/media-container.js.map +1 -1
  45. package/build/media-text/transforms.js +7 -3
  46. package/build/media-text/transforms.js.map +1 -1
  47. package/build/query-title/edit.js +52 -2
  48. package/build/query-title/edit.js.map +1 -1
  49. package/build/query-title/index.js +1 -0
  50. package/build/query-title/index.js.map +1 -1
  51. package/build/query-title/use-post-type-label.js +42 -0
  52. package/build/query-title/use-post-type-label.js.map +1 -0
  53. package/build/query-title/variations.js +10 -0
  54. package/build/query-title/variations.js.map +1 -1
  55. package/build/site-logo/edit.js +56 -41
  56. package/build/site-logo/edit.js.map +1 -1
  57. package/build/site-title/edit.js +9 -3
  58. package/build/site-title/edit.js.map +1 -1
  59. package/build-module/accordion-header/edit.js +108 -0
  60. package/build-module/accordion-header/edit.js.map +1 -0
  61. package/build-module/accordion-header/index.js +116 -0
  62. package/build-module/accordion-header/index.js.map +1 -0
  63. package/build-module/accordion-header/init.js +6 -0
  64. package/build-module/accordion-header/init.js.map +1 -0
  65. package/build-module/accordion-header/save.js +71 -0
  66. package/build-module/accordion-header/save.js.map +1 -0
  67. package/build-module/accordion-item/edit.js +120 -0
  68. package/build-module/accordion-item/edit.js.map +1 -0
  69. package/build-module/accordion-item/icons.js +22 -0
  70. package/build-module/accordion-item/icons.js.map +1 -0
  71. package/build-module/accordion-item/index.js +71 -0
  72. package/build-module/accordion-item/index.js.map +1 -0
  73. package/build-module/accordion-item/init.js +6 -0
  74. package/build-module/accordion-item/init.js.map +1 -0
  75. package/build-module/accordion-item/save.js +28 -0
  76. package/build-module/accordion-item/save.js.map +1 -0
  77. package/build-module/accordion-panel/edit.js +50 -0
  78. package/build-module/accordion-panel/edit.js.map +1 -0
  79. package/build-module/accordion-panel/index.js +100 -0
  80. package/build-module/accordion-panel/index.js.map +1 -0
  81. package/build-module/accordion-panel/init.js +6 -0
  82. package/build-module/accordion-panel/init.js.map +1 -0
  83. package/build-module/accordion-panel/save.js +37 -0
  84. package/build-module/accordion-panel/save.js.map +1 -0
  85. package/build-module/accordions/edit.js +116 -0
  86. package/build-module/accordions/edit.js.map +1 -0
  87. package/build-module/accordions/index.js +95 -0
  88. package/build-module/accordions/index.js.map +1 -0
  89. package/build-module/accordions/init.js +6 -0
  90. package/build-module/accordions/init.js.map +1 -0
  91. package/build-module/accordions/save.js +27 -0
  92. package/build-module/accordions/save.js.map +1 -0
  93. package/build-module/accordions/view.js +46 -0
  94. package/build-module/accordions/view.js.map +1 -0
  95. package/build-module/cover/index.js +2 -1
  96. package/build-module/cover/index.js.map +1 -1
  97. package/build-module/freeform/edit.js +6 -0
  98. package/build-module/freeform/edit.js.map +1 -1
  99. package/build-module/index.js +10 -0
  100. package/build-module/index.js.map +1 -1
  101. package/build-module/media-text/media-container.js +2 -1
  102. package/build-module/media-text/media-container.js.map +1 -1
  103. package/build-module/media-text/transforms.js +7 -3
  104. package/build-module/media-text/transforms.js.map +1 -1
  105. package/build-module/query-title/edit.js +52 -2
  106. package/build-module/query-title/edit.js.map +1 -1
  107. package/build-module/query-title/index.js +1 -0
  108. package/build-module/query-title/index.js.map +1 -1
  109. package/build-module/query-title/use-post-type-label.js +36 -0
  110. package/build-module/query-title/use-post-type-label.js.map +1 -0
  111. package/build-module/query-title/variations.js +10 -0
  112. package/build-module/query-title/variations.js.map +1 -1
  113. package/build-module/site-logo/edit.js +57 -42
  114. package/build-module/site-logo/edit.js.map +1 -1
  115. package/build-module/site-title/edit.js +10 -4
  116. package/build-module/site-title/edit.js.map +1 -1
  117. package/build-style/accordions/style-rtl.css +223 -0
  118. package/build-style/accordions/style.css +223 -0
  119. package/build-style/style-rtl.css +88 -0
  120. package/build-style/style.css +88 -0
  121. package/package.json +36 -35
  122. package/src/accordion-header/block.json +93 -0
  123. package/src/accordion-header/edit.js +128 -0
  124. package/src/accordion-header/index.js +24 -0
  125. package/src/accordion-header/init.js +6 -0
  126. package/src/accordion-header/save.js +79 -0
  127. package/src/accordion-item/block.json +45 -0
  128. package/src/accordion-item/edit.js +149 -0
  129. package/src/accordion-item/icons.js +23 -0
  130. package/src/accordion-item/index.js +24 -0
  131. package/src/accordion-item/index.php +73 -0
  132. package/src/accordion-item/init.js +6 -0
  133. package/src/accordion-item/save.js +25 -0
  134. package/src/accordion-panel/block.json +74 -0
  135. package/src/accordion-panel/edit.js +61 -0
  136. package/src/accordion-panel/index.js +24 -0
  137. package/src/accordion-panel/init.js +6 -0
  138. package/src/accordion-panel/save.js +51 -0
  139. package/src/accordions/block.json +69 -0
  140. package/src/accordions/edit.js +133 -0
  141. package/src/accordions/index.js +24 -0
  142. package/src/accordions/index.php +61 -0
  143. package/src/accordions/init.js +6 -0
  144. package/src/accordions/save.js +23 -0
  145. package/src/accordions/style.scss +91 -0
  146. package/src/accordions/view.js +38 -0
  147. package/src/block/index.php +16 -14
  148. package/src/cover/block.json +2 -1
  149. package/src/file/index.php +28 -22
  150. package/src/freeform/edit.js +7 -0
  151. package/src/index.js +12 -0
  152. package/src/media-text/media-container.js +1 -0
  153. package/src/media-text/transforms.js +5 -1
  154. package/src/post-excerpt/index.php +16 -12
  155. package/src/query-title/block.json +1 -0
  156. package/src/query-title/edit.js +58 -1
  157. package/src/query-title/index.php +30 -5
  158. package/src/query-title/use-post-type-label.js +34 -0
  159. package/src/query-title/variations.js +13 -0
  160. package/src/site-logo/edit.js +33 -12
  161. package/src/site-title/edit.js +24 -16
  162. package/src/social-link/index.php +1 -1
  163. package/src/style.scss +1 -0
@@ -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
+ }
@@ -0,0 +1,69 @@
1
+ {
2
+ "$schema": "https://schemas.wp.org/trunk/block.json",
3
+ "apiVersion": 3,
4
+ "name": "core/accordions",
5
+ "title": "Accordions",
6
+ "category": "design",
7
+ "description": "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-item" ],
67
+ "textdomain": "default",
68
+ "style": "wp-block-accordions"
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-item';
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,24 @@
1
+ /**
2
+ * WordPress dependencies
3
+ */
4
+ import { accordion } 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: accordion,
19
+ example: {},
20
+ edit,
21
+ save,
22
+ };
23
+
24
+ export const init = () => initBlock( { name, metadata, settings } );
@@ -0,0 +1,61 @@
1
+ <?php
2
+ /**
3
+ * Server-side rendering of the `core/accordions` 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_accordions( $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/accordions/view.min.js' );
21
+ }
22
+
23
+ wp_register_script_module(
24
+ '@wordpress/block-library/accordions',
25
+ isset( $module_url ) ? $module_url : includes_url( "blocks/accordions/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/accordions' );
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-accordions' ) ) ) {
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/accordions` block on server.
50
+ *
51
+ * @since 6.6.0
52
+ */
53
+ function register_block_core_accordions() {
54
+ register_block_type_from_metadata(
55
+ __DIR__ . '/accordions',
56
+ array(
57
+ 'render_callback' => 'render_block_core_accordions',
58
+ )
59
+ );
60
+ }
61
+ add_action( 'init', 'register_block_core_accordions' );
@@ -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
+ }