@wordpress/block-library 7.14.1 → 7.15.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 (193) hide show
  1. package/CHANGELOG.md +2 -0
  2. package/build/avatar/index.js +1 -1
  3. package/build/block/edit.native.js +1 -1
  4. package/build/block/edit.native.js.map +1 -1
  5. package/build/buttons/edit.native.js +1 -3
  6. package/build/buttons/edit.native.js.map +1 -1
  7. package/build/calendar/index.js +9 -0
  8. package/build/calendar/index.js.map +1 -1
  9. package/build/code/index.js +1 -1
  10. package/build/code/index.js.map +1 -1
  11. package/build/comments/edit/comments-legacy.js +1 -1
  12. package/build/comments/edit/comments-legacy.js.map +1 -1
  13. package/build/comments-pagination-next/index.js +1 -1
  14. package/build/comments-pagination-numbers/index.js +1 -1
  15. package/build/comments-pagination-previous/index.js +1 -1
  16. package/build/comments-title/edit.js +1 -1
  17. package/build/comments-title/edit.js.map +1 -1
  18. package/build/cover/edit/use-cover-is-dark.js +10 -7
  19. package/build/cover/edit/use-cover-is-dark.js.map +1 -1
  20. package/build/cover/index.js +9 -2
  21. package/build/cover/index.js.map +1 -1
  22. package/build/embed/deprecated.js +12 -6
  23. package/build/embed/deprecated.js.map +1 -1
  24. package/build/embed/index.js +12 -6
  25. package/build/embed/index.js.map +1 -1
  26. package/build/embed/transforms.js +12 -6
  27. package/build/embed/transforms.js.map +1 -1
  28. package/build/embed/util.js +12 -6
  29. package/build/embed/util.js.map +1 -1
  30. package/build/embed/variations.js +1 -1
  31. package/build/embed/variations.js.map +1 -1
  32. package/build/freeform/edit.js +5 -8
  33. package/build/freeform/edit.js.map +1 -1
  34. package/build/gallery/deprecated.js +4 -4
  35. package/build/gallery/deprecated.js.map +1 -1
  36. package/build/list-item/edit.js +2 -1
  37. package/build/list-item/edit.js.map +1 -1
  38. package/build/missing/edit.js +9 -2
  39. package/build/missing/edit.js.map +1 -1
  40. package/build/more/edit.js +1 -1
  41. package/build/more/edit.js.map +1 -1
  42. package/build/navigation/menu-items-to-blocks.js +16 -6
  43. package/build/navigation/menu-items-to-blocks.js.map +1 -1
  44. package/build/post-excerpt/edit.js +1 -1
  45. package/build/post-excerpt/edit.js.map +1 -1
  46. package/build/post-navigation-link/edit.js +35 -4
  47. package/build/post-navigation-link/edit.js.map +1 -1
  48. package/build/post-navigation-link/index.js +6 -1
  49. package/build/post-navigation-link/index.js.map +1 -1
  50. package/build/post-template/edit.js +13 -28
  51. package/build/post-template/edit.js.map +1 -1
  52. package/build/query/edit/inspector-controls/index.js +4 -8
  53. package/build/query/edit/inspector-controls/index.js.map +1 -1
  54. package/build/query/edit/inspector-controls/sticky-control.js +1 -1
  55. package/build/query/edit/inspector-controls/sticky-control.js.map +1 -1
  56. package/build/query/edit/query-placeholder.js +2 -2
  57. package/build/query/edit/query-placeholder.js.map +1 -1
  58. package/build/query-title/edit.js +1 -1
  59. package/build/query-title/edit.js.map +1 -1
  60. package/build/quote/transforms.js +2 -2
  61. package/build/quote/transforms.js.map +1 -1
  62. package/build/read-more/edit.js +1 -1
  63. package/build/read-more/edit.js.map +1 -1
  64. package/build/site-tagline/index.js +1 -1
  65. package/build/social-links/edit.native.js +1 -0
  66. package/build/social-links/edit.native.js.map +1 -1
  67. package/build/template-part/edit/index.js +2 -2
  68. package/build/template-part/edit/index.js.map +1 -1
  69. package/build-module/avatar/index.js +1 -1
  70. package/build-module/block/edit.native.js +1 -1
  71. package/build-module/block/edit.native.js.map +1 -1
  72. package/build-module/buttons/edit.native.js +1 -2
  73. package/build-module/buttons/edit.native.js.map +1 -1
  74. package/build-module/calendar/index.js +9 -0
  75. package/build-module/calendar/index.js.map +1 -1
  76. package/build-module/code/index.js +1 -1
  77. package/build-module/code/index.js.map +1 -1
  78. package/build-module/comments/edit/comments-legacy.js +1 -1
  79. package/build-module/comments/edit/comments-legacy.js.map +1 -1
  80. package/build-module/comments-pagination-next/index.js +1 -1
  81. package/build-module/comments-pagination-numbers/index.js +1 -1
  82. package/build-module/comments-pagination-previous/index.js +1 -1
  83. package/build-module/comments-title/edit.js +1 -1
  84. package/build-module/comments-title/edit.js.map +1 -1
  85. package/build-module/cover/edit/use-cover-is-dark.js +9 -4
  86. package/build-module/cover/edit/use-cover-is-dark.js.map +1 -1
  87. package/build-module/cover/index.js +9 -2
  88. package/build-module/cover/index.js.map +1 -1
  89. package/build-module/embed/deprecated.js +12 -6
  90. package/build-module/embed/deprecated.js.map +1 -1
  91. package/build-module/embed/index.js +12 -6
  92. package/build-module/embed/index.js.map +1 -1
  93. package/build-module/embed/transforms.js +12 -6
  94. package/build-module/embed/transforms.js.map +1 -1
  95. package/build-module/embed/util.js +12 -6
  96. package/build-module/embed/util.js.map +1 -1
  97. package/build-module/embed/variations.js +1 -1
  98. package/build-module/embed/variations.js.map +1 -1
  99. package/build-module/freeform/edit.js +3 -6
  100. package/build-module/freeform/edit.js.map +1 -1
  101. package/build-module/gallery/deprecated.js +4 -4
  102. package/build-module/gallery/deprecated.js.map +1 -1
  103. package/build-module/list-item/edit.js +2 -1
  104. package/build-module/list-item/edit.js.map +1 -1
  105. package/build-module/missing/edit.js +11 -4
  106. package/build-module/missing/edit.js.map +1 -1
  107. package/build-module/more/edit.js +1 -1
  108. package/build-module/more/edit.js.map +1 -1
  109. package/build-module/navigation/menu-items-to-blocks.js +16 -6
  110. package/build-module/navigation/menu-items-to-blocks.js.map +1 -1
  111. package/build-module/post-excerpt/edit.js +1 -1
  112. package/build-module/post-excerpt/edit.js.map +1 -1
  113. package/build-module/post-navigation-link/edit.js +37 -6
  114. package/build-module/post-navigation-link/edit.js.map +1 -1
  115. package/build-module/post-navigation-link/index.js +6 -1
  116. package/build-module/post-navigation-link/index.js.map +1 -1
  117. package/build-module/post-template/edit.js +14 -29
  118. package/build-module/post-template/edit.js.map +1 -1
  119. package/build-module/query/edit/inspector-controls/index.js +2 -6
  120. package/build-module/query/edit/inspector-controls/index.js.map +1 -1
  121. package/build-module/query/edit/inspector-controls/sticky-control.js +1 -1
  122. package/build-module/query/edit/inspector-controls/sticky-control.js.map +1 -1
  123. package/build-module/query/edit/query-placeholder.js +2 -2
  124. package/build-module/query/edit/query-placeholder.js.map +1 -1
  125. package/build-module/query-title/edit.js +1 -1
  126. package/build-module/query-title/edit.js.map +1 -1
  127. package/build-module/quote/transforms.js +2 -2
  128. package/build-module/quote/transforms.js.map +1 -1
  129. package/build-module/read-more/edit.js +1 -1
  130. package/build-module/read-more/edit.js.map +1 -1
  131. package/build-module/site-tagline/index.js +1 -1
  132. package/build-module/social-links/edit.native.js +1 -0
  133. package/build-module/social-links/edit.native.js.map +1 -1
  134. package/build-module/template-part/edit/index.js +3 -3
  135. package/build-module/template-part/edit/index.js.map +1 -1
  136. package/build-style/calendar/style-rtl.css +21 -12
  137. package/build-style/calendar/style.css +21 -12
  138. package/build-style/post-navigation-link/style-rtl.css +90 -0
  139. package/build-style/post-navigation-link/style.css +90 -0
  140. package/build-style/style-rtl.css +36 -12
  141. package/build-style/style.css +36 -12
  142. package/package.json +29 -29
  143. package/src/avatar/block.json +1 -1
  144. package/src/block/edit.native.js +1 -1
  145. package/src/buttons/edit.native.js +1 -2
  146. package/src/buttons/test/__snapshots__/edit.native.js.snap +28 -0
  147. package/src/buttons/test/edit.native.js +170 -0
  148. package/src/calendar/block.json +9 -0
  149. package/src/calendar/index.php +22 -1
  150. package/src/calendar/style.scss +28 -15
  151. package/src/code/index.js +1 -1
  152. package/src/columns/test/__snapshots__/edit.native.js.snap +219 -0
  153. package/src/columns/test/edit.native.js +432 -0
  154. package/src/comments/edit/comments-legacy.js +1 -1
  155. package/src/comments-pagination-next/block.json +1 -1
  156. package/src/comments-pagination-numbers/block.json +1 -1
  157. package/src/comments-pagination-previous/block.json +1 -1
  158. package/src/comments-title/edit.js +1 -1
  159. package/src/cover/edit/use-cover-is-dark.js +11 -7
  160. package/src/cover/index.js +8 -1
  161. package/src/cover/test/__snapshots__/edit.native.js.snap +64 -0
  162. package/src/cover/test/edit.native.js +136 -4
  163. package/src/embed/block.json +12 -6
  164. package/src/embed/test/index.native.js +1 -2
  165. package/src/embed/variations.js +1 -1
  166. package/src/freeform/edit.js +12 -10
  167. package/src/gallery/deprecated.js +4 -4
  168. package/src/group/test/__snapshots__/edit.native.js.snap +19 -0
  169. package/src/group/test/edit.native.js +102 -0
  170. package/src/list-item/edit.js +1 -0
  171. package/src/missing/edit.js +15 -4
  172. package/src/more/edit.js +1 -1
  173. package/src/navigation/menu-items-to-blocks.js +39 -22
  174. package/src/navigation/test/menu-items-to-blocks.js +6 -0
  175. package/src/post-excerpt/edit.js +1 -1
  176. package/src/post-featured-image/index.php +11 -18
  177. package/src/post-navigation-link/block.json +6 -1
  178. package/src/post-navigation-link/edit.js +64 -3
  179. package/src/post-navigation-link/index.php +23 -0
  180. package/src/post-navigation-link/style.scss +23 -0
  181. package/src/post-template/edit.js +14 -23
  182. package/src/query/edit/inspector-controls/index.js +2 -6
  183. package/src/query/edit/inspector-controls/sticky-control.js +1 -1
  184. package/src/query/edit/query-placeholder.js +4 -1
  185. package/src/query-title/edit.js +1 -1
  186. package/src/quote/transforms.js +1 -1
  187. package/src/read-more/edit.js +1 -1
  188. package/src/site-tagline/block.json +1 -1
  189. package/src/social-links/edit.native.js +7 -1
  190. package/src/social-links/test/__snapshots__/edit.native.js.snap +57 -0
  191. package/src/social-links/test/edit.native.js +199 -0
  192. package/src/style.scss +1 -0
  193. package/src/template-part/edit/index.js +60 -58
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@wordpress/block-library",
3
- "version": "7.14.1",
3
+ "version": "7.15.0",
4
4
  "description": "Block library for the WordPress editor.",
5
5
  "author": "The WordPress Contributors",
6
6
  "license": "GPL-2.0-or-later",
@@ -31,36 +31,36 @@
31
31
  ],
32
32
  "dependencies": {
33
33
  "@babel/runtime": "^7.16.0",
34
- "@wordpress/a11y": "^3.17.0",
35
- "@wordpress/api-fetch": "^6.14.0",
36
- "@wordpress/autop": "^3.17.0",
37
- "@wordpress/blob": "^3.17.0",
38
- "@wordpress/block-editor": "^10.0.1",
39
- "@wordpress/blocks": "^11.16.1",
40
- "@wordpress/components": "^21.0.1",
41
- "@wordpress/compose": "^5.15.1",
42
- "@wordpress/core-data": "^5.0.1",
43
- "@wordpress/data": "^7.1.1",
44
- "@wordpress/date": "^4.17.0",
45
- "@wordpress/deprecated": "^3.17.0",
46
- "@wordpress/dom": "^3.17.1",
47
- "@wordpress/element": "^4.15.0",
48
- "@wordpress/hooks": "^3.17.0",
49
- "@wordpress/html-entities": "^3.17.0",
50
- "@wordpress/i18n": "^4.17.0",
51
- "@wordpress/icons": "^9.8.0",
52
- "@wordpress/keycodes": "^3.17.0",
53
- "@wordpress/notices": "^3.17.1",
54
- "@wordpress/primitives": "^3.15.0",
55
- "@wordpress/reusable-blocks": "^3.15.1",
56
- "@wordpress/rich-text": "^5.15.1",
57
- "@wordpress/server-side-render": "^3.15.1",
58
- "@wordpress/url": "^3.18.0",
59
- "@wordpress/viewport": "^4.15.1",
34
+ "@wordpress/a11y": "^3.18.0",
35
+ "@wordpress/api-fetch": "^6.15.0",
36
+ "@wordpress/autop": "^3.18.0",
37
+ "@wordpress/blob": "^3.18.0",
38
+ "@wordpress/block-editor": "^10.1.0",
39
+ "@wordpress/blocks": "^11.17.0",
40
+ "@wordpress/components": "^21.1.0",
41
+ "@wordpress/compose": "^5.16.0",
42
+ "@wordpress/core-data": "^5.1.0",
43
+ "@wordpress/data": "^7.2.0",
44
+ "@wordpress/date": "^4.18.0",
45
+ "@wordpress/deprecated": "^3.18.0",
46
+ "@wordpress/dom": "^3.18.0",
47
+ "@wordpress/element": "^4.16.0",
48
+ "@wordpress/hooks": "^3.18.0",
49
+ "@wordpress/html-entities": "^3.18.0",
50
+ "@wordpress/i18n": "^4.18.0",
51
+ "@wordpress/icons": "^9.9.0",
52
+ "@wordpress/keycodes": "^3.18.0",
53
+ "@wordpress/notices": "^3.18.0",
54
+ "@wordpress/primitives": "^3.16.0",
55
+ "@wordpress/reusable-blocks": "^3.16.0",
56
+ "@wordpress/rich-text": "^5.16.0",
57
+ "@wordpress/server-side-render": "^3.16.0",
58
+ "@wordpress/url": "^3.19.0",
59
+ "@wordpress/viewport": "^4.16.0",
60
60
  "change-case": "^4.1.2",
61
61
  "classnames": "^2.3.1",
62
62
  "colord": "^2.7.0",
63
- "fast-average-color": "^4.3.0",
63
+ "fast-average-color": "^9.1.1",
64
64
  "lodash": "^4.17.21",
65
65
  "memize": "^1.1.0",
66
66
  "micromodal": "^0.4.10",
@@ -73,5 +73,5 @@
73
73
  "publishConfig": {
74
74
  "access": "public"
75
75
  },
76
- "gitHead": "56ef3f5a754e44155ee79e827c7a1d0efc1ee5aa"
76
+ "gitHead": "23e136283fa1d3b8d9d8b33869f871ad5eb77726"
77
77
  }
@@ -4,7 +4,7 @@
4
4
  "name": "core/avatar",
5
5
  "title": "Avatar",
6
6
  "category": "theme",
7
- "description": "Add a user's avatar.",
7
+ "description": "Add a users avatar.",
8
8
  "textdomain": "default",
9
9
  "attributes": {
10
10
  "userId": {
@@ -163,7 +163,7 @@ export default function ReusableBlockEdit( {
163
163
  </Text>
164
164
  <Text style={ [ infoTextStyle, infoDescriptionStyle ] }>
165
165
  { __(
166
- 'Alternatively, you can detach and edit these blocks separately by tapping "Convert to regular blocks".'
166
+ 'Alternatively, you can detach and edit these blocks separately by tapping Convert to regular blocks”.'
167
167
  ) }
168
168
  </Text>
169
169
  <TextControl
@@ -1,7 +1,6 @@
1
1
  /**
2
2
  * External dependencies
3
3
  */
4
- import { debounce } from 'lodash';
5
4
  import { View } from 'react-native';
6
5
 
7
6
  /**
@@ -14,7 +13,7 @@ import {
14
13
  store as blockEditorStore,
15
14
  } from '@wordpress/block-editor';
16
15
  import { createBlock, getBlockSupport } from '@wordpress/blocks';
17
- import { useResizeObserver } from '@wordpress/compose';
16
+ import { debounce, useResizeObserver } from '@wordpress/compose';
18
17
  import { useDispatch, useSelect } from '@wordpress/data';
19
18
  import { useState, useEffect, useRef, useCallback } from '@wordpress/element';
20
19
  import { alignmentHelpers } from '@wordpress/components';
@@ -18,6 +18,28 @@ exports[`Buttons block justify content sets Justify items right option 1`] = `
18
18
  <!-- /wp:buttons -->"
19
19
  `;
20
20
 
21
+ exports[`Buttons block when a button is shown adds another button using the inline appender 1`] = `
22
+ "<!-- wp:buttons -->
23
+ <div class=\\"wp-block-buttons\\"><!-- wp:button /-->
24
+
25
+ <!-- wp:button /--></div>
26
+ <!-- /wp:buttons -->
27
+
28
+ <!-- wp:paragraph -->
29
+ <p></p>
30
+ <!-- /wp:paragraph -->"
31
+ `;
32
+
33
+ exports[`Buttons block when a button is shown adds another button using the inserter 1`] = `
34
+ "<!-- wp:buttons -->
35
+ <div class=\\"wp-block-buttons\\"><!-- wp:button /-->
36
+
37
+ <!-- wp:button -->
38
+ <div class=\\"wp-block-button\\"><a class=\\"wp-block-button__link wp-element-button\\">Hello!</a></div>
39
+ <!-- /wp:button --></div>
40
+ <!-- /wp:buttons -->"
41
+ `;
42
+
21
43
  exports[`Buttons block when a button is shown adjusts the border radius 1`] = `
22
44
  "<!-- wp:buttons -->
23
45
  <div class=\\"wp-block-buttons\\"><!-- wp:button {\\"style\\":{\\"border\\":{\\"radius\\":\\"6px\\"}}} -->
@@ -25,3 +47,9 @@ exports[`Buttons block when a button is shown adjusts the border radius 1`] = `
25
47
  <!-- /wp:button --></div>
26
48
  <!-- /wp:buttons -->"
27
49
  `;
50
+
51
+ exports[`Buttons block when a button is shown removing button along with buttons block removes the button and buttons block when deleting the block using the block delete action 1`] = `
52
+ "<!-- wp:paragraph -->
53
+ <p></p>
54
+ <!-- /wp:paragraph -->"
55
+ `;
@@ -6,7 +6,9 @@ import {
6
6
  waitFor,
7
7
  getEditorHtml,
8
8
  within,
9
+ getBlock,
9
10
  initializeEditor,
11
+ changeTextOfRichText,
10
12
  } from 'test/helpers';
11
13
 
12
14
  /**
@@ -15,6 +17,19 @@ import {
15
17
  import { getBlockTypes, unregisterBlockType } from '@wordpress/blocks';
16
18
  import { registerCoreBlocks } from '@wordpress/block-library';
17
19
 
20
+ // Mock debounce to prevent potentially belated state updates.
21
+ jest.mock( 'lodash', () => ( {
22
+ ...jest.requireActual( 'lodash' ),
23
+ debounce: ( fn ) => {
24
+ fn.cancel = jest.fn();
25
+ return fn;
26
+ },
27
+ } ) );
28
+
29
+ const BUTTONS_HTML = `<!-- wp:buttons -->
30
+ <div class="wp-block-buttons"><!-- wp:button /--></div>
31
+ <!-- /wp:buttons -->`;
32
+
18
33
  beforeAll( () => {
19
34
  // Register all core blocks.
20
35
  registerCoreBlocks();
@@ -78,6 +93,161 @@ describe( 'Buttons block', () => {
78
93
 
79
94
  expect( getEditorHtml() ).toMatchSnapshot();
80
95
  } );
96
+
97
+ it( 'adds another button using the inline appender', async () => {
98
+ const screen = await initializeEditor( {
99
+ initialHtml: BUTTONS_HTML,
100
+ } );
101
+ const { getByA11yLabel } = screen;
102
+
103
+ // Get block
104
+ const buttonsBlock = await getBlock( screen, 'Buttons' );
105
+
106
+ // Trigger inner blocks layout
107
+ const innerBlockListWrapper = await waitFor( () =>
108
+ within( buttonsBlock ).getByTestId( 'block-list-wrapper' )
109
+ );
110
+ fireEvent( innerBlockListWrapper, 'layout', {
111
+ nativeEvent: {
112
+ layout: {
113
+ width: 300,
114
+ },
115
+ },
116
+ } );
117
+
118
+ // Get inner button block
119
+ const buttonBlock = await getBlock( screen, 'Button' );
120
+ fireEvent.press( buttonBlock );
121
+
122
+ // Add another Button using the inline appender
123
+ const appenderButton =
124
+ within( buttonsBlock ).getByTestId( 'appender-button' );
125
+ fireEvent.press( appenderButton );
126
+
127
+ // Check for new button
128
+ const secondButtonBlock = await waitFor( () =>
129
+ within( buttonsBlock ).getByA11yLabel( /Button Block\. Row 2/ )
130
+ );
131
+ expect( secondButtonBlock ).toBeVisible();
132
+
133
+ // Add a Paragraph block using the empty placeholder at the bottom
134
+ const paragraphPlaceholder = await waitFor( () =>
135
+ getByA11yLabel( 'Add paragraph block' )
136
+ );
137
+ fireEvent.press( paragraphPlaceholder );
138
+
139
+ // Check for inline appenders
140
+ const appenderButtons =
141
+ within( buttonsBlock ).queryAllByTestId( 'appender-button' );
142
+ expect( appenderButtons.length ).toBe( 0 );
143
+
144
+ expect( getEditorHtml() ).toMatchSnapshot();
145
+ } );
146
+
147
+ it( 'adds another button using the inserter', async () => {
148
+ const screen = await initializeEditor( {
149
+ initialHtml: BUTTONS_HTML,
150
+ } );
151
+ const {
152
+ getByA11yLabel,
153
+ getByTestId,
154
+ queryAllByA11yLabel,
155
+ getByText,
156
+ } = screen;
157
+
158
+ // Get block
159
+ const buttonsBlock = await getBlock( screen, 'Buttons' );
160
+ fireEvent.press( buttonsBlock );
161
+
162
+ // Trigger inner blocks layout
163
+ const innerBlockListWrapper = await waitFor( () =>
164
+ within( buttonsBlock ).getByTestId( 'block-list-wrapper' )
165
+ );
166
+ fireEvent( innerBlockListWrapper, 'layout', {
167
+ nativeEvent: {
168
+ layout: {
169
+ width: 300,
170
+ },
171
+ },
172
+ } );
173
+
174
+ // Get inner button block
175
+ const buttonBlock = await getBlock( screen, 'Button' );
176
+ fireEvent.press( buttonBlock );
177
+
178
+ // Open the block inserter
179
+ fireEvent.press( getByA11yLabel( 'Add block' ) );
180
+
181
+ const blockList = getByTestId( 'InserterUI-Blocks' );
182
+ // onScroll event used to force the FlatList to render all items
183
+ fireEvent.scroll( blockList, {
184
+ nativeEvent: {
185
+ contentOffset: { y: 0, x: 0 },
186
+ contentSize: { width: 100, height: 100 },
187
+ layoutMeasurement: { width: 100, height: 100 },
188
+ },
189
+ } );
190
+
191
+ // Check the Add block here placeholder is not visible
192
+ const addBlockHerePlaceholders =
193
+ queryAllByA11yLabel( 'ADD BLOCK HERE' );
194
+ expect( addBlockHerePlaceholders.length ).toBe( 0 );
195
+
196
+ // Add a new Button block
197
+ fireEvent.press( await waitFor( () => getByText( 'Button' ) ) );
198
+
199
+ // Get new button
200
+ const secondButtonBlock = await getBlock( screen, 'Button', {
201
+ rowIndex: 2,
202
+ } );
203
+ const secondButtonInput =
204
+ within( secondButtonBlock ).getByA11yLabel(
205
+ 'Text input. Empty'
206
+ );
207
+ changeTextOfRichText( secondButtonInput, 'Hello!' );
208
+
209
+ expect( getEditorHtml() ).toMatchSnapshot();
210
+ } );
211
+
212
+ describe( 'removing button along with buttons block', () => {
213
+ it( 'removes the button and buttons block when deleting the block using the block delete action', async () => {
214
+ const screen = await initializeEditor( {
215
+ initialHtml: BUTTONS_HTML,
216
+ } );
217
+ const { getByA11yLabel } = screen;
218
+
219
+ // Get block
220
+ const buttonsBlock = await getBlock( screen, 'Buttons' );
221
+
222
+ // Trigger inner blocks layout
223
+ const innerBlockListWrapper = await waitFor( () =>
224
+ within( buttonsBlock ).getByTestId( 'block-list-wrapper' )
225
+ );
226
+ fireEvent( innerBlockListWrapper, 'layout', {
227
+ nativeEvent: {
228
+ layout: {
229
+ width: 300,
230
+ },
231
+ },
232
+ } );
233
+
234
+ // Get inner button block
235
+ const buttonBlock = await getBlock( screen, 'Button' );
236
+ fireEvent.press( buttonBlock );
237
+
238
+ // Open block actions menu
239
+ const blockActionsButton = getByA11yLabel(
240
+ /Open Block Actions Menu/
241
+ );
242
+ fireEvent.press( blockActionsButton );
243
+
244
+ // Delete block
245
+ const deleteButton = getByA11yLabel( /Remove block/ );
246
+ fireEvent.press( deleteButton );
247
+
248
+ expect( getEditorHtml() ).toMatchSnapshot();
249
+ } );
250
+ } );
81
251
  } );
82
252
 
83
253
  describe( 'justify content', () => {
@@ -17,6 +17,15 @@
17
17
  },
18
18
  "supports": {
19
19
  "align": true,
20
+ "color": {
21
+ "link": true,
22
+ "__experimentalSkipSerialization": [ "text", "background" ],
23
+ "__experimentalDefaultControls": {
24
+ "background": true,
25
+ "text": true
26
+ },
27
+ "__experimentalSelector": "table, th"
28
+ },
20
29
  "typography": {
21
30
  "fontSize": true,
22
31
  "lineHeight": true,
@@ -40,11 +40,32 @@ function render_block_core_calendar( $attributes ) {
40
40
  }
41
41
  }
42
42
 
43
+ $color_block_styles = array();
44
+
45
+ // Text color.
46
+ $preset_text_color = array_key_exists( 'textColor', $attributes ) ? "var:preset|color|{$attributes['textColor']}" : null;
47
+ $custom_text_color = _wp_array_get( $attributes, array( 'style', 'color', 'text' ), null );
48
+ $color_block_styles['text'] = $preset_text_color ? $preset_text_color : $custom_text_color;
49
+
50
+ // Background Color.
51
+ $preset_background_color = array_key_exists( 'backgroundColor', $attributes ) ? "var:preset|color|{$attributes['backgroundColor']}" : null;
52
+ $custom_background_color = _wp_array_get( $attributes, array( 'style', 'color', 'background' ), null );
53
+ $color_block_styles['background'] = $preset_background_color ? $preset_background_color : $custom_background_color;
54
+
55
+ // Generate color styles and classes.
56
+ $styles = gutenberg_style_engine_get_styles( array( 'color' => $color_block_styles ), array( 'convert_vars_to_classnames' => true ) );
57
+ $inline_styles = empty( $styles['css'] ) ? '' : sprintf( ' style="%s"', esc_attr( $styles['css'] ) );
58
+ $classnames = empty( $styles['classnames'] ) ? '' : ' ' . esc_attr( $styles['classnames'] );
59
+
60
+ // Apply color classes and styles to the calendar.
61
+ $calendar = str_replace( '<table', '<table' . $inline_styles, get_calendar( true, false ) );
62
+ $calendar = str_replace( 'class="wp-calendar-table', 'class="wp-calendar-table' . $classnames, $calendar );
63
+
43
64
  $wrapper_attributes = get_block_wrapper_attributes();
44
65
  $output = sprintf(
45
66
  '<div %1$s>%2$s</div>',
46
67
  $wrapper_attributes,
47
- get_calendar( true, false )
68
+ $calendar
48
69
  );
49
70
 
50
71
  // phpcs:ignore WordPress.WP.GlobalVariablesOverride.OverrideProhibited
@@ -2,31 +2,44 @@
2
2
  text-align: center;
3
3
 
4
4
  th,
5
- tbody td {
5
+ td {
6
6
  padding: 0.25em;
7
- border: 1px solid $gray-300;
7
+ border: 1px solid;
8
8
  }
9
9
 
10
- tfoot td {
11
- border: none;
10
+ th {
11
+ font-weight: 400;
12
+ }
13
+
14
+ caption {
15
+ background-color: inherit;
12
16
  }
13
17
 
14
18
  table {
15
19
  width: 100%;
16
20
  border-collapse: collapse;
17
- }
18
21
 
19
- table th {
20
- font-weight: 400;
21
- background: $gray-300;
22
- }
22
+ &:where(:not(.has-text-color)) {
23
+ color: #40464d;
23
24
 
24
- a {
25
- text-decoration: underline;
26
- }
25
+ // Keep the hard-coded border color for backward compatibility.
26
+ th,
27
+ td {
28
+ border-color: $gray-300;
29
+ }
30
+ }
31
+
32
+ &.has-background th {
33
+ background-color: inherit;
34
+ }
27
35
 
28
- table tbody,
29
- table caption {
30
- color: #40464d;
36
+ &.has-text-color th {
37
+ color: inherit;
38
+ }
31
39
  }
32
40
  }
41
+
42
+ // Keep the hard-coded header background color for backward compatibility.
43
+ :where(.wp-block-calendar table:not(.has-background) th) {
44
+ background: $gray-300;
45
+ }
package/src/code/index.js CHANGED
@@ -24,7 +24,7 @@ export const settings = {
24
24
  /* eslint-disable @wordpress/i18n-no-collapsible-whitespace */
25
25
  // translators: Preserve \n markers for line breaks
26
26
  content: __(
27
- '// A "block" is the abstract term used\n// to describe units of markup that\n// when composed together, form the\n// content or layout of a page.\nregisterBlockType( name, settings );'
27
+ '// A block is the abstract term used\n// to describe units of markup that\n// when composed together, form the\n// content or layout of a page.\nregisterBlockType( name, settings );'
28
28
  ),
29
29
  /* eslint-enable @wordpress/i18n-no-collapsible-whitespace */
30
30
  },