@wordpress/block-editor 12.14.0 → 12.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 (240) hide show
  1. package/CHANGELOG.md +2 -0
  2. package/README.md +1 -1
  3. package/build/components/block-list/block.native.js +2 -0
  4. package/build/components/block-list/block.native.js.map +1 -1
  5. package/build/components/block-parent-selector/index.js +1 -1
  6. package/build/components/block-parent-selector/index.js.map +1 -1
  7. package/build/components/block-pattern-setup/index.js +25 -16
  8. package/build/components/block-pattern-setup/index.js.map +1 -1
  9. package/build/components/block-pattern-setup/setup-toolbar.js +4 -2
  10. package/build/components/block-pattern-setup/setup-toolbar.js.map +1 -1
  11. package/build/components/block-patterns-list/index.js +36 -19
  12. package/build/components/block-patterns-list/index.js.map +1 -1
  13. package/build/components/block-rename/index.js +28 -0
  14. package/build/components/block-rename/index.js.map +1 -0
  15. package/build/components/block-rename/is-empty-string.js +10 -0
  16. package/build/components/block-rename/is-empty-string.js.map +1 -0
  17. package/build/components/block-rename/modal.js +87 -0
  18. package/build/components/block-rename/modal.js.map +1 -0
  19. package/build/components/block-rename/rename-control.js +74 -0
  20. package/build/components/block-rename/rename-control.js.map +1 -0
  21. package/build/components/block-rename/use-block-rename.js +17 -0
  22. package/build/components/block-rename/use-block-rename.js.map +1 -0
  23. package/build/components/block-settings-menu/block-settings-dropdown.js +33 -20
  24. package/build/components/block-settings-menu/block-settings-dropdown.js.map +1 -1
  25. package/build/components/block-settings-menu-controls/index.js +7 -0
  26. package/build/components/block-settings-menu-controls/index.js.map +1 -1
  27. package/build/components/block-toolbar/block-toolbar-menu.native.js +1 -1
  28. package/build/components/block-toolbar/block-toolbar-menu.native.js.map +1 -1
  29. package/build/components/block-types-list/index.js +6 -2
  30. package/build/components/block-types-list/index.js.map +1 -1
  31. package/build/components/date-format-picker/index.js +8 -1
  32. package/build/components/date-format-picker/index.js.map +1 -1
  33. package/build/components/global-styles/advanced-panel.js +1 -1
  34. package/build/components/global-styles/advanced-panel.js.map +1 -1
  35. package/build/components/image-size-control/index.js +0 -5
  36. package/build/components/image-size-control/index.js.map +1 -1
  37. package/build/components/inner-blocks/index.js +3 -1
  38. package/build/components/inner-blocks/index.js.map +1 -1
  39. package/build/components/inner-blocks/warning-max-depth-exceeded.native.js +29 -31
  40. package/build/components/inner-blocks/warning-max-depth-exceeded.native.js.map +1 -1
  41. package/build/components/inserter/block-patterns-explorer/pattern-list.js +1 -1
  42. package/build/components/inserter/block-patterns-explorer/pattern-list.js.map +1 -1
  43. package/build/components/inserter/block-patterns-tab/pattern-category-previews.js +1 -1
  44. package/build/components/inserter/block-patterns-tab/pattern-category-previews.js.map +1 -1
  45. package/build/components/inserter/block-patterns-tab/use-pattern-categories.js +1 -1
  46. package/build/components/inserter/block-patterns-tab/use-pattern-categories.js.map +1 -1
  47. package/build/components/inserter/block-patterns-tab/utils.js +3 -4
  48. package/build/components/inserter/block-patterns-tab/utils.js.map +1 -1
  49. package/build/components/inserter/hooks/use-patterns-state.js +2 -1
  50. package/build/components/inserter/hooks/use-patterns-state.js.map +1 -1
  51. package/build/components/inserter-listbox/index.js +11 -6
  52. package/build/components/inserter-listbox/index.js.map +1 -1
  53. package/build/components/inserter-listbox/item.js +24 -23
  54. package/build/components/inserter-listbox/item.js.map +1 -1
  55. package/build/components/inserter-listbox/row.js +5 -5
  56. package/build/components/inserter-listbox/row.js.map +1 -1
  57. package/build/components/list-view/use-list-view-expand-selected-item.js +2 -3
  58. package/build/components/list-view/use-list-view-expand-selected-item.js.map +1 -1
  59. package/build/components/preview-options/index.js +4 -2
  60. package/build/components/preview-options/index.js.map +1 -1
  61. package/build/components/rich-text/index.native.js +1 -1
  62. package/build/components/rich-text/index.native.js.map +1 -1
  63. package/build/components/rich-text/native/index.native.js +34 -3
  64. package/build/components/rich-text/native/index.native.js.map +1 -1
  65. package/build/components/rich-text/use-input-rules.js +30 -1
  66. package/build/components/rich-text/use-input-rules.js.map +1 -1
  67. package/build/components/spacing-sizes-control/input-controls/spacing-input-control.js +1 -1
  68. package/build/components/spacing-sizes-control/input-controls/spacing-input-control.js.map +1 -1
  69. package/build/components/use-block-drop-zone/index.js +4 -1
  70. package/build/components/use-block-drop-zone/index.js.map +1 -1
  71. package/build/components/use-moving-animation/index.js +2 -1
  72. package/build/components/use-moving-animation/index.js.map +1 -1
  73. package/build/components/use-settings/index.js +2 -2
  74. package/build/components/use-settings/index.js.map +1 -1
  75. package/build/hooks/block-renaming.js +42 -0
  76. package/build/hooks/block-renaming.js.map +1 -1
  77. package/build/hooks/custom-fields.js +53 -48
  78. package/build/hooks/custom-fields.js.map +1 -1
  79. package/build/hooks/index.js +0 -1
  80. package/build/hooks/index.js.map +1 -1
  81. package/build/hooks/layout.js +13 -7
  82. package/build/hooks/layout.js.map +1 -1
  83. package/build/layouts/constrained.js +4 -3
  84. package/build/layouts/constrained.js.map +1 -1
  85. package/build/store/selectors.js +2 -0
  86. package/build/store/selectors.js.map +1 -1
  87. package/build/utils/transform-styles/index.js +26 -6
  88. package/build/utils/transform-styles/index.js.map +1 -1
  89. package/build-module/components/block-list/block.native.js +2 -0
  90. package/build-module/components/block-list/block.native.js.map +1 -1
  91. package/build-module/components/block-parent-selector/index.js +1 -1
  92. package/build-module/components/block-parent-selector/index.js.map +1 -1
  93. package/build-module/components/block-pattern-setup/index.js +24 -15
  94. package/build-module/components/block-pattern-setup/index.js.map +1 -1
  95. package/build-module/components/block-pattern-setup/setup-toolbar.js +4 -2
  96. package/build-module/components/block-pattern-setup/setup-toolbar.js.map +1 -1
  97. package/build-module/components/block-patterns-list/index.js +36 -19
  98. package/build-module/components/block-patterns-list/index.js.map +1 -1
  99. package/build-module/components/block-rename/index.js +4 -0
  100. package/build-module/components/block-rename/index.js.map +1 -0
  101. package/build-module/components/block-rename/is-empty-string.js +4 -0
  102. package/build-module/components/block-rename/is-empty-string.js.map +1 -0
  103. package/build-module/components/block-rename/modal.js +79 -0
  104. package/build-module/components/block-rename/modal.js.map +1 -0
  105. package/build-module/components/block-rename/rename-control.js +66 -0
  106. package/build-module/components/block-rename/rename-control.js.map +1 -0
  107. package/build-module/components/block-rename/use-block-rename.js +10 -0
  108. package/build-module/components/block-rename/use-block-rename.js.map +1 -0
  109. package/build-module/components/block-settings-menu/block-settings-dropdown.js +34 -21
  110. package/build-module/components/block-settings-menu/block-settings-dropdown.js.map +1 -1
  111. package/build-module/components/block-settings-menu-controls/index.js +7 -0
  112. package/build-module/components/block-settings-menu-controls/index.js.map +1 -1
  113. package/build-module/components/block-toolbar/block-toolbar-menu.native.js +1 -1
  114. package/build-module/components/block-toolbar/block-toolbar-menu.native.js.map +1 -1
  115. package/build-module/components/block-types-list/index.js +6 -2
  116. package/build-module/components/block-types-list/index.js.map +1 -1
  117. package/build-module/components/date-format-picker/index.js +8 -1
  118. package/build-module/components/date-format-picker/index.js.map +1 -1
  119. package/build-module/components/global-styles/advanced-panel.js +1 -1
  120. package/build-module/components/global-styles/advanced-panel.js.map +1 -1
  121. package/build-module/components/image-size-control/index.js +0 -5
  122. package/build-module/components/image-size-control/index.js.map +1 -1
  123. package/build-module/components/inner-blocks/index.js +3 -1
  124. package/build-module/components/inner-blocks/index.js.map +1 -1
  125. package/build-module/components/inner-blocks/warning-max-depth-exceeded.native.js +30 -32
  126. package/build-module/components/inner-blocks/warning-max-depth-exceeded.native.js.map +1 -1
  127. package/build-module/components/inserter/block-patterns-explorer/pattern-list.js +2 -2
  128. package/build-module/components/inserter/block-patterns-explorer/pattern-list.js.map +1 -1
  129. package/build-module/components/inserter/block-patterns-tab/pattern-category-previews.js +4 -4
  130. package/build-module/components/inserter/block-patterns-tab/pattern-category-previews.js.map +1 -1
  131. package/build-module/components/inserter/block-patterns-tab/use-pattern-categories.js +2 -2
  132. package/build-module/components/inserter/block-patterns-tab/use-pattern-categories.js.map +1 -1
  133. package/build-module/components/inserter/block-patterns-tab/utils.js +3 -4
  134. package/build-module/components/inserter/block-patterns-tab/utils.js.map +1 -1
  135. package/build-module/components/inserter/hooks/use-patterns-state.js +2 -1
  136. package/build-module/components/inserter/hooks/use-patterns-state.js.map +1 -1
  137. package/build-module/components/inserter-listbox/index.js +13 -8
  138. package/build-module/components/inserter-listbox/index.js.map +1 -1
  139. package/build-module/components/inserter-listbox/item.js +25 -23
  140. package/build-module/components/inserter-listbox/item.js.map +1 -1
  141. package/build-module/components/inserter-listbox/row.js +6 -5
  142. package/build-module/components/inserter-listbox/row.js.map +1 -1
  143. package/build-module/components/list-view/use-list-view-expand-selected-item.js +2 -3
  144. package/build-module/components/list-view/use-list-view-expand-selected-item.js.map +1 -1
  145. package/build-module/components/preview-options/index.js +4 -2
  146. package/build-module/components/preview-options/index.js.map +1 -1
  147. package/build-module/components/rich-text/index.native.js +1 -1
  148. package/build-module/components/rich-text/index.native.js.map +1 -1
  149. package/build-module/components/rich-text/native/index.native.js +34 -3
  150. package/build-module/components/rich-text/native/index.native.js.map +1 -1
  151. package/build-module/components/rich-text/use-input-rules.js +31 -2
  152. package/build-module/components/rich-text/use-input-rules.js.map +1 -1
  153. package/build-module/components/spacing-sizes-control/input-controls/spacing-input-control.js +1 -1
  154. package/build-module/components/spacing-sizes-control/input-controls/spacing-input-control.js.map +1 -1
  155. package/build-module/components/use-block-drop-zone/index.js +4 -1
  156. package/build-module/components/use-block-drop-zone/index.js.map +1 -1
  157. package/build-module/components/use-moving-animation/index.js +2 -1
  158. package/build-module/components/use-moving-animation/index.js.map +1 -1
  159. package/build-module/components/use-settings/index.js +2 -2
  160. package/build-module/components/use-settings/index.js.map +1 -1
  161. package/build-module/hooks/block-renaming.js +40 -0
  162. package/build-module/hooks/block-renaming.js.map +1 -1
  163. package/build-module/hooks/custom-fields.js +53 -48
  164. package/build-module/hooks/custom-fields.js.map +1 -1
  165. package/build-module/hooks/index.js +0 -1
  166. package/build-module/hooks/index.js.map +1 -1
  167. package/build-module/hooks/layout.js +13 -7
  168. package/build-module/hooks/layout.js.map +1 -1
  169. package/build-module/layouts/constrained.js +4 -3
  170. package/build-module/layouts/constrained.js.map +1 -1
  171. package/build-module/store/selectors.js +2 -0
  172. package/build-module/store/selectors.js.map +1 -1
  173. package/build-module/utils/transform-styles/index.js +24 -7
  174. package/build-module/utils/transform-styles/index.js.map +1 -1
  175. package/build-style/content-rtl.css +6 -6
  176. package/build-style/content.css +6 -6
  177. package/build-style/style-rtl.css +10 -5
  178. package/build-style/style.css +10 -5
  179. package/package.json +31 -31
  180. package/src/components/block-list/block.native.js +2 -0
  181. package/src/components/block-parent-selector/index.js +1 -1
  182. package/src/components/block-pattern-setup/index.js +38 -22
  183. package/src/components/block-pattern-setup/setup-toolbar.js +2 -0
  184. package/src/components/block-pattern-setup/style.scss +4 -1
  185. package/src/components/block-patterns-list/README.md +4 -4
  186. package/src/components/block-patterns-list/index.js +60 -34
  187. package/src/components/block-patterns-list/style.scss +7 -0
  188. package/src/components/block-rename/index.js +3 -0
  189. package/src/components/block-rename/is-empty-string.js +3 -0
  190. package/src/components/block-rename/modal.js +115 -0
  191. package/src/components/block-rename/rename-control.js +80 -0
  192. package/src/components/block-rename/use-block-rename.js +10 -0
  193. package/src/components/block-settings-menu/block-settings-dropdown.js +38 -34
  194. package/src/components/block-settings-menu-controls/index.js +9 -0
  195. package/src/components/block-toolbar/block-toolbar-menu.native.js +1 -4
  196. package/src/components/block-types-list/index.js +5 -4
  197. package/src/components/button-block-appender/content.scss +2 -2
  198. package/src/components/date-format-picker/index.js +7 -0
  199. package/src/components/editable-text/README.md +0 -36
  200. package/src/components/global-styles/advanced-panel.js +1 -1
  201. package/src/components/image-size-control/index.js +0 -6
  202. package/src/components/inner-blocks/index.js +6 -2
  203. package/src/components/inner-blocks/warning-max-depth-exceeded.native.js +57 -33
  204. package/src/components/inserter/block-patterns-explorer/pattern-list.js +5 -1
  205. package/src/components/inserter/block-patterns-tab/pattern-category-previews.js +7 -3
  206. package/src/components/inserter/block-patterns-tab/use-pattern-categories.js +6 -1
  207. package/src/components/inserter/block-patterns-tab/utils.js +6 -4
  208. package/src/components/inserter/hooks/use-patterns-state.js +3 -1
  209. package/src/components/inserter-listbox/index.js +11 -7
  210. package/src/components/inserter-listbox/item.js +11 -12
  211. package/src/components/inserter-listbox/row.js +6 -12
  212. package/src/components/list-view/use-list-view-expand-selected-item.js +7 -8
  213. package/src/components/plain-text/README.md +0 -28
  214. package/src/components/preview-options/index.js +2 -0
  215. package/src/components/rich-text/README.md +0 -58
  216. package/src/components/rich-text/index.native.js +1 -1
  217. package/src/components/rich-text/native/index.native.js +45 -2
  218. package/src/components/rich-text/use-input-rules.js +30 -2
  219. package/src/components/spacing-sizes-control/input-controls/spacing-input-control.js +1 -1
  220. package/src/components/url-input/README.md +1 -74
  221. package/src/components/use-block-drop-zone/index.js +4 -1
  222. package/src/components/use-moving-animation/index.js +1 -1
  223. package/src/components/use-settings/index.js +2 -2
  224. package/src/components/use-settings/test/index.js +1 -1
  225. package/src/hooks/block-renaming.js +47 -0
  226. package/src/hooks/custom-fields.js +68 -65
  227. package/src/hooks/index.js +0 -1
  228. package/src/hooks/layout.js +12 -8
  229. package/src/hooks/test/__snapshots__/align.native.js.snap +5 -5
  230. package/src/layouts/constrained.js +57 -50
  231. package/src/store/selectors.js +2 -0
  232. package/src/style.scss +1 -1
  233. package/src/utils/test/transform-styles.js +49 -0
  234. package/src/utils/transform-styles/index.js +39 -13
  235. package/build/hooks/block-rename-ui.js +0 -167
  236. package/build/hooks/block-rename-ui.js.map +0 -1
  237. package/build-module/hooks/block-rename-ui.js +0 -159
  238. package/build-module/hooks/block-rename-ui.js.map +0 -1
  239. package/src/hooks/block-rename-ui.js +0 -228
  240. /package/src/{hooks/block-rename-ui.scss → components/block-rename/style.scss} +0 -0
@@ -27,6 +27,7 @@ import { createRegistrySelector } from '@wordpress/data';
27
27
  * Internal dependencies
28
28
  */
29
29
  import { orderBy } from '../utils/sorting';
30
+ import { PATTERN_TYPES } from '../components/inserter/block-patterns-tab/utils';
30
31
 
31
32
  /**
32
33
  * A block selection object.
@@ -2287,6 +2288,7 @@ function getUserPatterns( state ) {
2287
2288
  return {
2288
2289
  name: `core/block/${ userPattern.id }`,
2289
2290
  id: userPattern.id,
2291
+ type: PATTERN_TYPES.user,
2290
2292
  title: userPattern.title.raw,
2291
2293
  categories: userPattern.wp_pattern_category.map( ( catId ) =>
2292
2294
  categories && categories.get( catId )
package/src/style.scss CHANGED
@@ -15,6 +15,7 @@
15
15
  @import "./components/block-patterns-paging/style.scss";
16
16
  @import "./components/block-popover/style.scss";
17
17
  @import "./components/block-preview/style.scss";
18
+ @import "./components/block-rename/style.scss";
18
19
  @import "./components/block-settings-menu/style.scss";
19
20
  @import "./components/block-styles/style.scss";
20
21
  @import "./components/block-switcher/style.scss";
@@ -56,7 +57,6 @@
56
57
  @import "./hooks/padding.scss";
57
58
  @import "./hooks/position.scss";
58
59
  @import "./hooks/typography.scss";
59
- @import "./hooks/block-rename-ui.scss";
60
60
 
61
61
  @import "./components/block-toolbar/style.scss";
62
62
  @import "./components/inserter/style.scss";
@@ -4,6 +4,55 @@
4
4
  import transformStyles from '../transform-styles';
5
5
 
6
6
  describe( 'transformStyles', () => {
7
+ describe( 'error handling', () => {
8
+ beforeEach( () => {
9
+ // Intentionally suppress the expected console errors and warnings to reduce
10
+ // noise in the test output.
11
+ jest.spyOn( console, 'warn' ).mockImplementation( jest.fn() );
12
+ } );
13
+
14
+ it( 'should not throw error in case of invalid css', () => {
15
+ const run = () =>
16
+ transformStyles(
17
+ [
18
+ {
19
+ css: 'h1 { color: red;', // invalid CSS
20
+ },
21
+ ],
22
+ '.my-namespace'
23
+ );
24
+
25
+ expect( run ).not.toThrow();
26
+ expect( console ).toHaveWarned();
27
+ } );
28
+
29
+ it( 'should warn invalid css in the console', () => {
30
+ const run = () =>
31
+ transformStyles(
32
+ [
33
+ {
34
+ css: 'h1 { color: red; }', // valid CSS
35
+ },
36
+ {
37
+ css: 'h1 { color: red;', // invalid CSS
38
+ },
39
+ ],
40
+ '.my-namespace'
41
+ );
42
+
43
+ const [ validCSS, invalidCSS ] = run();
44
+
45
+ expect( validCSS ).toBe( '.my-namespace h1 { color: red; }' );
46
+ expect( invalidCSS ).toBe( null );
47
+
48
+ expect( console ).toHaveWarnedWith(
49
+ 'wp.blockEditor.transformStyles Failed to transform CSS.',
50
+ '<css input>:1:1: Unclosed block\n> 1 | h1 { color: red;\n | ^'
51
+ // ^^^^ In PostCSS, a tab is equal four spaces
52
+ );
53
+ } );
54
+ } );
55
+
7
56
  describe( 'selector wrap', () => {
8
57
  it( 'should wrap regular selectors', () => {
9
58
  const input = `h1 { color: red; }`;
@@ -1,7 +1,7 @@
1
1
  /**
2
2
  * External dependencies
3
3
  */
4
- import postcss from 'postcss';
4
+ import postcss, { CssSyntaxError } from 'postcss';
5
5
  import wrap from 'postcss-prefixwrap';
6
6
  import rebaseUrl from 'postcss-urlrebase';
7
7
 
@@ -19,18 +19,44 @@ import rebaseUrl from 'postcss-urlrebase';
19
19
  */
20
20
  const transformStyles = ( styles, wrapperSelector = '' ) => {
21
21
  return styles.map( ( { css, ignoredSelectors = [], baseURL } ) => {
22
- return postcss(
23
- [
24
- wrapperSelector &&
25
- wrap( wrapperSelector, {
26
- ignoredSelectors: [
27
- ...ignoredSelectors,
28
- wrapperSelector,
29
- ],
30
- } ),
31
- baseURL && rebaseUrl( { rootUrl: baseURL } ),
32
- ].filter( Boolean )
33
- ).process( css, {} ).css; // use sync PostCSS API
22
+ // When there is no wrapper selector or base URL, there is no need
23
+ // to transform the CSS. This is most cases because in the default
24
+ // iframed editor, no wrapping is needed, and not many styles
25
+ // provide a base URL.
26
+ if ( ! wrapperSelector && ! baseURL ) {
27
+ return css;
28
+ }
29
+
30
+ try {
31
+ return postcss(
32
+ [
33
+ wrapperSelector &&
34
+ wrap( wrapperSelector, {
35
+ ignoredSelectors: [
36
+ ...ignoredSelectors,
37
+ wrapperSelector,
38
+ ],
39
+ } ),
40
+ baseURL && rebaseUrl( { rootUrl: baseURL } ),
41
+ ].filter( Boolean )
42
+ ).process( css, {} ).css; // use sync PostCSS API
43
+ } catch ( error ) {
44
+ if ( error instanceof CssSyntaxError ) {
45
+ // eslint-disable-next-line no-console
46
+ console.warn(
47
+ 'wp.blockEditor.transformStyles Failed to transform CSS.',
48
+ error.message + '\n' + error.showSourceCode( false )
49
+ );
50
+ } else {
51
+ // eslint-disable-next-line no-console
52
+ console.warn(
53
+ 'wp.blockEditor.transformStyles Failed to transform CSS.',
54
+ error
55
+ );
56
+ }
57
+
58
+ return null;
59
+ }
34
60
  } );
35
61
  };
36
62
 
@@ -1,167 +0,0 @@
1
- "use strict";
2
-
3
- Object.defineProperty(exports, "__esModule", {
4
- value: true
5
- });
6
- exports.withBlockRenameControls = void 0;
7
- var _react = require("react");
8
- var _compose = require("@wordpress/compose");
9
- var _hooks = require("@wordpress/hooks");
10
- var _i18n = require("@wordpress/i18n");
11
- var _blocks = require("@wordpress/blocks");
12
- var _components = require("@wordpress/components");
13
- var _element = require("@wordpress/element");
14
- var _a11y = require("@wordpress/a11y");
15
- var _components2 = require("../components");
16
- /**
17
- * WordPress dependencies
18
- */
19
-
20
- /**
21
- * Internal dependencies
22
- */
23
-
24
- const emptyString = testString => testString?.trim()?.length === 0;
25
- function RenameModal({
26
- blockName,
27
- originalBlockName,
28
- onClose,
29
- onSave
30
- }) {
31
- const [editedBlockName, setEditedBlockName] = (0, _element.useState)(blockName);
32
- const nameHasChanged = editedBlockName !== blockName;
33
- const nameIsOriginal = editedBlockName === originalBlockName;
34
- const nameIsEmpty = emptyString(editedBlockName);
35
- const isNameValid = nameHasChanged || nameIsOriginal;
36
- const autoSelectInputText = event => event.target.select();
37
- const dialogDescription = (0, _compose.useInstanceId)(RenameModal, `block-editor-rename-modal__description`);
38
- const handleSubmit = () => {
39
- const message = nameIsOriginal || nameIsEmpty ? (0, _i18n.sprintf)( /* translators: %s: new name/label for the block */
40
- (0, _i18n.__)('Block name reset to: "%s".'), editedBlockName) : (0, _i18n.sprintf)( /* translators: %s: new name/label for the block */
41
- (0, _i18n.__)('Block name changed to: "%s".'), editedBlockName);
42
-
43
- // Must be assertive to immediately announce change.
44
- (0, _a11y.speak)(message, 'assertive');
45
- onSave(editedBlockName);
46
-
47
- // Immediate close avoids ability to hit save multiple times.
48
- onClose();
49
- };
50
- return (0, _react.createElement)(_components.Modal, {
51
- title: (0, _i18n.__)('Rename'),
52
- onRequestClose: onClose,
53
- overlayClassName: "block-editor-block-rename-modal",
54
- aria: {
55
- describedby: dialogDescription
56
- },
57
- focusOnMount: "firstContentElement"
58
- }, (0, _react.createElement)("p", {
59
- id: dialogDescription
60
- }, (0, _i18n.__)('Enter a custom name for this block.')), (0, _react.createElement)("form", {
61
- onSubmit: e => {
62
- e.preventDefault();
63
- if (!isNameValid) {
64
- return;
65
- }
66
- handleSubmit();
67
- }
68
- }, (0, _react.createElement)(_components.__experimentalVStack, {
69
- spacing: "3"
70
- }, (0, _react.createElement)(_components.TextControl, {
71
- __nextHasNoMarginBottom: true,
72
- __next40pxDefaultSize: true,
73
- value: editedBlockName,
74
- label: (0, _i18n.__)('Block name'),
75
- hideLabelFromVision: true,
76
- placeholder: originalBlockName,
77
- onChange: setEditedBlockName,
78
- onFocus: autoSelectInputText
79
- }), (0, _react.createElement)(_components.__experimentalHStack, {
80
- justify: "right"
81
- }, (0, _react.createElement)(_components.Button, {
82
- variant: "tertiary",
83
- onClick: onClose
84
- }, (0, _i18n.__)('Cancel')), (0, _react.createElement)(_components.Button, {
85
- "aria-disabled": !isNameValid,
86
- variant: "primary",
87
- type: "submit"
88
- }, (0, _i18n.__)('Save'))))));
89
- }
90
- function BlockRenameControl(props) {
91
- const [renamingBlock, setRenamingBlock] = (0, _element.useState)(false);
92
- const {
93
- clientId,
94
- customName,
95
- onChange
96
- } = props;
97
- const blockInformation = (0, _components2.useBlockDisplayInformation)(clientId);
98
- return (0, _react.createElement)(_react.Fragment, null, (0, _react.createElement)(_components2.InspectorControls, {
99
- group: "advanced"
100
- }, (0, _react.createElement)(_components.TextControl, {
101
- __nextHasNoMarginBottom: true,
102
- __next40pxDefaultSize: true,
103
- label: (0, _i18n.__)('Block name'),
104
- value: customName || '',
105
- onChange: onChange
106
- })), (0, _react.createElement)(_components2.BlockSettingsMenuControls, null, ({
107
- selectedClientIds
108
- }) => {
109
- // Only enabled for single selections.
110
- const canRename = selectedClientIds.length === 1 && clientId === selectedClientIds[0];
111
-
112
- // This check ensures the `BlockSettingsMenuControls` fill
113
- // doesn't render multiple times and also that it renders for
114
- // the block from which the menu was triggered.
115
- if (!canRename) {
116
- return null;
117
- }
118
- return (0, _react.createElement)(_components.MenuItem, {
119
- onClick: () => {
120
- setRenamingBlock(true);
121
- },
122
- "aria-expanded": renamingBlock,
123
- "aria-haspopup": "dialog"
124
- }, (0, _i18n.__)('Rename'));
125
- }), renamingBlock && (0, _react.createElement)(RenameModal, {
126
- blockName: customName || '',
127
- originalBlockName: blockInformation?.title,
128
- onClose: () => setRenamingBlock(false),
129
- onSave: newName => {
130
- // If the new value is the block's original name (e.g. `Group`)
131
- // or it is an empty string then assume the intent is to reset
132
- // the value. Therefore reset the metadata.
133
- if (newName === blockInformation?.title || emptyString(newName)) {
134
- newName = undefined;
135
- }
136
- onChange(newName);
137
- }
138
- }));
139
- }
140
- const withBlockRenameControls = (0, _compose.createHigherOrderComponent)(BlockEdit => props => {
141
- const {
142
- clientId,
143
- name,
144
- attributes,
145
- setAttributes,
146
- isSelected
147
- } = props;
148
- const supportsBlockNaming = (0, _blocks.hasBlockSupport)(name, 'renaming', true);
149
- return (0, _react.createElement)(_react.Fragment, null, isSelected && supportsBlockNaming && (0, _react.createElement)(_react.Fragment, null, (0, _react.createElement)(BlockRenameControl, {
150
- clientId: clientId,
151
- customName: attributes?.metadata?.name,
152
- onChange: newName => {
153
- setAttributes({
154
- metadata: {
155
- ...attributes?.metadata,
156
- name: newName
157
- }
158
- });
159
- }
160
- })), (0, _react.createElement)(BlockEdit, {
161
- key: "edit",
162
- ...props
163
- }));
164
- }, 'withBlockRenameControls');
165
- exports.withBlockRenameControls = withBlockRenameControls;
166
- (0, _hooks.addFilter)('editor.BlockEdit', 'core/block-rename-ui/with-block-rename-controls', withBlockRenameControls);
167
- //# sourceMappingURL=block-rename-ui.js.map
@@ -1 +0,0 @@
1
- {"version":3,"names":["_compose","require","_hooks","_i18n","_blocks","_components","_element","_a11y","_components2","emptyString","testString","trim","length","RenameModal","blockName","originalBlockName","onClose","onSave","editedBlockName","setEditedBlockName","useState","nameHasChanged","nameIsOriginal","nameIsEmpty","isNameValid","autoSelectInputText","event","target","select","dialogDescription","useInstanceId","handleSubmit","message","sprintf","__","speak","_react","createElement","Modal","title","onRequestClose","overlayClassName","aria","describedby","focusOnMount","id","onSubmit","e","preventDefault","__experimentalVStack","spacing","TextControl","__nextHasNoMarginBottom","__next40pxDefaultSize","value","label","hideLabelFromVision","placeholder","onChange","onFocus","__experimentalHStack","justify","Button","variant","onClick","type","BlockRenameControl","props","renamingBlock","setRenamingBlock","clientId","customName","blockInformation","useBlockDisplayInformation","Fragment","InspectorControls","group","BlockSettingsMenuControls","selectedClientIds","canRename","MenuItem","newName","undefined","withBlockRenameControls","createHigherOrderComponent","BlockEdit","name","attributes","setAttributes","isSelected","supportsBlockNaming","hasBlockSupport","metadata","key","exports","addFilter"],"sources":["@wordpress/block-editor/src/hooks/block-rename-ui.js"],"sourcesContent":["/**\n * WordPress dependencies\n */\nimport { createHigherOrderComponent, useInstanceId } from '@wordpress/compose';\nimport { addFilter } from '@wordpress/hooks';\nimport { __, sprintf } from '@wordpress/i18n';\nimport { hasBlockSupport } from '@wordpress/blocks';\nimport {\n\tMenuItem,\n\t__experimentalHStack as HStack,\n\t__experimentalVStack as VStack,\n\tButton,\n\tTextControl,\n\tModal,\n} from '@wordpress/components';\nimport { useState } from '@wordpress/element';\nimport { speak } from '@wordpress/a11y';\n\n/**\n * Internal dependencies\n */\nimport {\n\tBlockSettingsMenuControls,\n\tuseBlockDisplayInformation,\n\tInspectorControls,\n} from '../components';\n\nconst emptyString = ( testString ) => testString?.trim()?.length === 0;\n\nfunction RenameModal( { blockName, originalBlockName, onClose, onSave } ) {\n\tconst [ editedBlockName, setEditedBlockName ] = useState( blockName );\n\n\tconst nameHasChanged = editedBlockName !== blockName;\n\tconst nameIsOriginal = editedBlockName === originalBlockName;\n\tconst nameIsEmpty = emptyString( editedBlockName );\n\n\tconst isNameValid = nameHasChanged || nameIsOriginal;\n\n\tconst autoSelectInputText = ( event ) => event.target.select();\n\n\tconst dialogDescription = useInstanceId(\n\t\tRenameModal,\n\t\t`block-editor-rename-modal__description`\n\t);\n\n\tconst handleSubmit = () => {\n\t\tconst message =\n\t\t\tnameIsOriginal || nameIsEmpty\n\t\t\t\t? sprintf(\n\t\t\t\t\t\t/* translators: %s: new name/label for the block */\n\t\t\t\t\t\t__( 'Block name reset to: \"%s\".' ),\n\t\t\t\t\t\teditedBlockName\n\t\t\t\t )\n\t\t\t\t: sprintf(\n\t\t\t\t\t\t/* translators: %s: new name/label for the block */\n\t\t\t\t\t\t__( 'Block name changed to: \"%s\".' ),\n\t\t\t\t\t\teditedBlockName\n\t\t\t\t );\n\n\t\t// Must be assertive to immediately announce change.\n\t\tspeak( message, 'assertive' );\n\t\tonSave( editedBlockName );\n\n\t\t// Immediate close avoids ability to hit save multiple times.\n\t\tonClose();\n\t};\n\n\treturn (\n\t\t<Modal\n\t\t\ttitle={ __( 'Rename' ) }\n\t\t\tonRequestClose={ onClose }\n\t\t\toverlayClassName=\"block-editor-block-rename-modal\"\n\t\t\taria={ {\n\t\t\t\tdescribedby: dialogDescription,\n\t\t\t} }\n\t\t\tfocusOnMount=\"firstContentElement\"\n\t\t>\n\t\t\t<p id={ dialogDescription }>\n\t\t\t\t{ __( 'Enter a custom name for this block.' ) }\n\t\t\t</p>\n\t\t\t<form\n\t\t\t\tonSubmit={ ( e ) => {\n\t\t\t\t\te.preventDefault();\n\n\t\t\t\t\tif ( ! isNameValid ) {\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\n\t\t\t\t\thandleSubmit();\n\t\t\t\t} }\n\t\t\t>\n\t\t\t\t<VStack spacing=\"3\">\n\t\t\t\t\t<TextControl\n\t\t\t\t\t\t__nextHasNoMarginBottom\n\t\t\t\t\t\t__next40pxDefaultSize\n\t\t\t\t\t\tvalue={ editedBlockName }\n\t\t\t\t\t\tlabel={ __( 'Block name' ) }\n\t\t\t\t\t\thideLabelFromVision={ true }\n\t\t\t\t\t\tplaceholder={ originalBlockName }\n\t\t\t\t\t\tonChange={ setEditedBlockName }\n\t\t\t\t\t\tonFocus={ autoSelectInputText }\n\t\t\t\t\t/>\n\t\t\t\t\t<HStack justify=\"right\">\n\t\t\t\t\t\t<Button variant=\"tertiary\" onClick={ onClose }>\n\t\t\t\t\t\t\t{ __( 'Cancel' ) }\n\t\t\t\t\t\t</Button>\n\n\t\t\t\t\t\t<Button\n\t\t\t\t\t\t\taria-disabled={ ! isNameValid }\n\t\t\t\t\t\t\tvariant=\"primary\"\n\t\t\t\t\t\t\ttype=\"submit\"\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{ __( 'Save' ) }\n\t\t\t\t\t\t</Button>\n\t\t\t\t\t</HStack>\n\t\t\t\t</VStack>\n\t\t\t</form>\n\t\t</Modal>\n\t);\n}\n\nfunction BlockRenameControl( props ) {\n\tconst [ renamingBlock, setRenamingBlock ] = useState( false );\n\n\tconst { clientId, customName, onChange } = props;\n\n\tconst blockInformation = useBlockDisplayInformation( clientId );\n\n\treturn (\n\t\t<>\n\t\t\t<InspectorControls group=\"advanced\">\n\t\t\t\t<TextControl\n\t\t\t\t\t__nextHasNoMarginBottom\n\t\t\t\t\t__next40pxDefaultSize\n\t\t\t\t\tlabel={ __( 'Block name' ) }\n\t\t\t\t\tvalue={ customName || '' }\n\t\t\t\t\tonChange={ onChange }\n\t\t\t\t/>\n\t\t\t</InspectorControls>\n\t\t\t<BlockSettingsMenuControls>\n\t\t\t\t{ ( { selectedClientIds } ) => {\n\t\t\t\t\t// Only enabled for single selections.\n\t\t\t\t\tconst canRename =\n\t\t\t\t\t\tselectedClientIds.length === 1 &&\n\t\t\t\t\t\tclientId === selectedClientIds[ 0 ];\n\n\t\t\t\t\t// This check ensures the `BlockSettingsMenuControls` fill\n\t\t\t\t\t// doesn't render multiple times and also that it renders for\n\t\t\t\t\t// the block from which the menu was triggered.\n\t\t\t\t\tif ( ! canRename ) {\n\t\t\t\t\t\treturn null;\n\t\t\t\t\t}\n\n\t\t\t\t\treturn (\n\t\t\t\t\t\t<MenuItem\n\t\t\t\t\t\t\tonClick={ () => {\n\t\t\t\t\t\t\t\tsetRenamingBlock( true );\n\t\t\t\t\t\t\t} }\n\t\t\t\t\t\t\taria-expanded={ renamingBlock }\n\t\t\t\t\t\t\taria-haspopup=\"dialog\"\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{ __( 'Rename' ) }\n\t\t\t\t\t\t</MenuItem>\n\t\t\t\t\t);\n\t\t\t\t} }\n\t\t\t</BlockSettingsMenuControls>\n\n\t\t\t{ renamingBlock && (\n\t\t\t\t<RenameModal\n\t\t\t\t\tblockName={ customName || '' }\n\t\t\t\t\toriginalBlockName={ blockInformation?.title }\n\t\t\t\t\tonClose={ () => setRenamingBlock( false ) }\n\t\t\t\t\tonSave={ ( newName ) => {\n\t\t\t\t\t\t// If the new value is the block's original name (e.g. `Group`)\n\t\t\t\t\t\t// or it is an empty string then assume the intent is to reset\n\t\t\t\t\t\t// the value. Therefore reset the metadata.\n\t\t\t\t\t\tif (\n\t\t\t\t\t\t\tnewName === blockInformation?.title ||\n\t\t\t\t\t\t\temptyString( newName )\n\t\t\t\t\t\t) {\n\t\t\t\t\t\t\tnewName = undefined;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tonChange( newName );\n\t\t\t\t\t} }\n\t\t\t\t/>\n\t\t\t) }\n\t\t</>\n\t);\n}\n\nexport const withBlockRenameControls = createHigherOrderComponent(\n\t( BlockEdit ) => ( props ) => {\n\t\tconst { clientId, name, attributes, setAttributes, isSelected } = props;\n\n\t\tconst supportsBlockNaming = hasBlockSupport( name, 'renaming', true );\n\n\t\treturn (\n\t\t\t<>\n\t\t\t\t{ isSelected && supportsBlockNaming && (\n\t\t\t\t\t<>\n\t\t\t\t\t\t<BlockRenameControl\n\t\t\t\t\t\t\tclientId={ clientId }\n\t\t\t\t\t\t\tcustomName={ attributes?.metadata?.name }\n\t\t\t\t\t\t\tonChange={ ( newName ) => {\n\t\t\t\t\t\t\t\tsetAttributes( {\n\t\t\t\t\t\t\t\t\tmetadata: {\n\t\t\t\t\t\t\t\t\t\t...attributes?.metadata,\n\t\t\t\t\t\t\t\t\t\tname: newName,\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t} );\n\t\t\t\t\t\t\t} }\n\t\t\t\t\t\t/>\n\t\t\t\t\t</>\n\t\t\t\t) }\n\n\t\t\t\t<BlockEdit key=\"edit\" { ...props } />\n\t\t\t</>\n\t\t);\n\t},\n\t'withBlockRenameControls'\n);\n\naddFilter(\n\t'editor.BlockEdit',\n\t'core/block-rename-ui/with-block-rename-controls',\n\twithBlockRenameControls\n);\n"],"mappings":"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"}
@@ -1,159 +0,0 @@
1
- import { createElement, Fragment } from "react";
2
- /**
3
- * WordPress dependencies
4
- */
5
- import { createHigherOrderComponent, useInstanceId } from '@wordpress/compose';
6
- import { addFilter } from '@wordpress/hooks';
7
- import { __, sprintf } from '@wordpress/i18n';
8
- import { hasBlockSupport } from '@wordpress/blocks';
9
- import { MenuItem, __experimentalHStack as HStack, __experimentalVStack as VStack, Button, TextControl, Modal } from '@wordpress/components';
10
- import { useState } from '@wordpress/element';
11
- import { speak } from '@wordpress/a11y';
12
-
13
- /**
14
- * Internal dependencies
15
- */
16
- import { BlockSettingsMenuControls, useBlockDisplayInformation, InspectorControls } from '../components';
17
- const emptyString = testString => testString?.trim()?.length === 0;
18
- function RenameModal({
19
- blockName,
20
- originalBlockName,
21
- onClose,
22
- onSave
23
- }) {
24
- const [editedBlockName, setEditedBlockName] = useState(blockName);
25
- const nameHasChanged = editedBlockName !== blockName;
26
- const nameIsOriginal = editedBlockName === originalBlockName;
27
- const nameIsEmpty = emptyString(editedBlockName);
28
- const isNameValid = nameHasChanged || nameIsOriginal;
29
- const autoSelectInputText = event => event.target.select();
30
- const dialogDescription = useInstanceId(RenameModal, `block-editor-rename-modal__description`);
31
- const handleSubmit = () => {
32
- const message = nameIsOriginal || nameIsEmpty ? sprintf( /* translators: %s: new name/label for the block */
33
- __('Block name reset to: "%s".'), editedBlockName) : sprintf( /* translators: %s: new name/label for the block */
34
- __('Block name changed to: "%s".'), editedBlockName);
35
-
36
- // Must be assertive to immediately announce change.
37
- speak(message, 'assertive');
38
- onSave(editedBlockName);
39
-
40
- // Immediate close avoids ability to hit save multiple times.
41
- onClose();
42
- };
43
- return createElement(Modal, {
44
- title: __('Rename'),
45
- onRequestClose: onClose,
46
- overlayClassName: "block-editor-block-rename-modal",
47
- aria: {
48
- describedby: dialogDescription
49
- },
50
- focusOnMount: "firstContentElement"
51
- }, createElement("p", {
52
- id: dialogDescription
53
- }, __('Enter a custom name for this block.')), createElement("form", {
54
- onSubmit: e => {
55
- e.preventDefault();
56
- if (!isNameValid) {
57
- return;
58
- }
59
- handleSubmit();
60
- }
61
- }, createElement(VStack, {
62
- spacing: "3"
63
- }, createElement(TextControl, {
64
- __nextHasNoMarginBottom: true,
65
- __next40pxDefaultSize: true,
66
- value: editedBlockName,
67
- label: __('Block name'),
68
- hideLabelFromVision: true,
69
- placeholder: originalBlockName,
70
- onChange: setEditedBlockName,
71
- onFocus: autoSelectInputText
72
- }), createElement(HStack, {
73
- justify: "right"
74
- }, createElement(Button, {
75
- variant: "tertiary",
76
- onClick: onClose
77
- }, __('Cancel')), createElement(Button, {
78
- "aria-disabled": !isNameValid,
79
- variant: "primary",
80
- type: "submit"
81
- }, __('Save'))))));
82
- }
83
- function BlockRenameControl(props) {
84
- const [renamingBlock, setRenamingBlock] = useState(false);
85
- const {
86
- clientId,
87
- customName,
88
- onChange
89
- } = props;
90
- const blockInformation = useBlockDisplayInformation(clientId);
91
- return createElement(Fragment, null, createElement(InspectorControls, {
92
- group: "advanced"
93
- }, createElement(TextControl, {
94
- __nextHasNoMarginBottom: true,
95
- __next40pxDefaultSize: true,
96
- label: __('Block name'),
97
- value: customName || '',
98
- onChange: onChange
99
- })), createElement(BlockSettingsMenuControls, null, ({
100
- selectedClientIds
101
- }) => {
102
- // Only enabled for single selections.
103
- const canRename = selectedClientIds.length === 1 && clientId === selectedClientIds[0];
104
-
105
- // This check ensures the `BlockSettingsMenuControls` fill
106
- // doesn't render multiple times and also that it renders for
107
- // the block from which the menu was triggered.
108
- if (!canRename) {
109
- return null;
110
- }
111
- return createElement(MenuItem, {
112
- onClick: () => {
113
- setRenamingBlock(true);
114
- },
115
- "aria-expanded": renamingBlock,
116
- "aria-haspopup": "dialog"
117
- }, __('Rename'));
118
- }), renamingBlock && createElement(RenameModal, {
119
- blockName: customName || '',
120
- originalBlockName: blockInformation?.title,
121
- onClose: () => setRenamingBlock(false),
122
- onSave: newName => {
123
- // If the new value is the block's original name (e.g. `Group`)
124
- // or it is an empty string then assume the intent is to reset
125
- // the value. Therefore reset the metadata.
126
- if (newName === blockInformation?.title || emptyString(newName)) {
127
- newName = undefined;
128
- }
129
- onChange(newName);
130
- }
131
- }));
132
- }
133
- export const withBlockRenameControls = createHigherOrderComponent(BlockEdit => props => {
134
- const {
135
- clientId,
136
- name,
137
- attributes,
138
- setAttributes,
139
- isSelected
140
- } = props;
141
- const supportsBlockNaming = hasBlockSupport(name, 'renaming', true);
142
- return createElement(Fragment, null, isSelected && supportsBlockNaming && createElement(Fragment, null, createElement(BlockRenameControl, {
143
- clientId: clientId,
144
- customName: attributes?.metadata?.name,
145
- onChange: newName => {
146
- setAttributes({
147
- metadata: {
148
- ...attributes?.metadata,
149
- name: newName
150
- }
151
- });
152
- }
153
- })), createElement(BlockEdit, {
154
- key: "edit",
155
- ...props
156
- }));
157
- }, 'withBlockRenameControls');
158
- addFilter('editor.BlockEdit', 'core/block-rename-ui/with-block-rename-controls', withBlockRenameControls);
159
- //# sourceMappingURL=block-rename-ui.js.map
@@ -1 +0,0 @@
1
- {"version":3,"names":["createHigherOrderComponent","useInstanceId","addFilter","__","sprintf","hasBlockSupport","MenuItem","__experimentalHStack","HStack","__experimentalVStack","VStack","Button","TextControl","Modal","useState","speak","BlockSettingsMenuControls","useBlockDisplayInformation","InspectorControls","emptyString","testString","trim","length","RenameModal","blockName","originalBlockName","onClose","onSave","editedBlockName","setEditedBlockName","nameHasChanged","nameIsOriginal","nameIsEmpty","isNameValid","autoSelectInputText","event","target","select","dialogDescription","handleSubmit","message","createElement","title","onRequestClose","overlayClassName","aria","describedby","focusOnMount","id","onSubmit","e","preventDefault","spacing","__nextHasNoMarginBottom","__next40pxDefaultSize","value","label","hideLabelFromVision","placeholder","onChange","onFocus","justify","variant","onClick","type","BlockRenameControl","props","renamingBlock","setRenamingBlock","clientId","customName","blockInformation","Fragment","group","selectedClientIds","canRename","newName","undefined","withBlockRenameControls","BlockEdit","name","attributes","setAttributes","isSelected","supportsBlockNaming","metadata","key"],"sources":["@wordpress/block-editor/src/hooks/block-rename-ui.js"],"sourcesContent":["/**\n * WordPress dependencies\n */\nimport { createHigherOrderComponent, useInstanceId } from '@wordpress/compose';\nimport { addFilter } from '@wordpress/hooks';\nimport { __, sprintf } from '@wordpress/i18n';\nimport { hasBlockSupport } from '@wordpress/blocks';\nimport {\n\tMenuItem,\n\t__experimentalHStack as HStack,\n\t__experimentalVStack as VStack,\n\tButton,\n\tTextControl,\n\tModal,\n} from '@wordpress/components';\nimport { useState } from '@wordpress/element';\nimport { speak } from '@wordpress/a11y';\n\n/**\n * Internal dependencies\n */\nimport {\n\tBlockSettingsMenuControls,\n\tuseBlockDisplayInformation,\n\tInspectorControls,\n} from '../components';\n\nconst emptyString = ( testString ) => testString?.trim()?.length === 0;\n\nfunction RenameModal( { blockName, originalBlockName, onClose, onSave } ) {\n\tconst [ editedBlockName, setEditedBlockName ] = useState( blockName );\n\n\tconst nameHasChanged = editedBlockName !== blockName;\n\tconst nameIsOriginal = editedBlockName === originalBlockName;\n\tconst nameIsEmpty = emptyString( editedBlockName );\n\n\tconst isNameValid = nameHasChanged || nameIsOriginal;\n\n\tconst autoSelectInputText = ( event ) => event.target.select();\n\n\tconst dialogDescription = useInstanceId(\n\t\tRenameModal,\n\t\t`block-editor-rename-modal__description`\n\t);\n\n\tconst handleSubmit = () => {\n\t\tconst message =\n\t\t\tnameIsOriginal || nameIsEmpty\n\t\t\t\t? sprintf(\n\t\t\t\t\t\t/* translators: %s: new name/label for the block */\n\t\t\t\t\t\t__( 'Block name reset to: \"%s\".' ),\n\t\t\t\t\t\teditedBlockName\n\t\t\t\t )\n\t\t\t\t: sprintf(\n\t\t\t\t\t\t/* translators: %s: new name/label for the block */\n\t\t\t\t\t\t__( 'Block name changed to: \"%s\".' ),\n\t\t\t\t\t\teditedBlockName\n\t\t\t\t );\n\n\t\t// Must be assertive to immediately announce change.\n\t\tspeak( message, 'assertive' );\n\t\tonSave( editedBlockName );\n\n\t\t// Immediate close avoids ability to hit save multiple times.\n\t\tonClose();\n\t};\n\n\treturn (\n\t\t<Modal\n\t\t\ttitle={ __( 'Rename' ) }\n\t\t\tonRequestClose={ onClose }\n\t\t\toverlayClassName=\"block-editor-block-rename-modal\"\n\t\t\taria={ {\n\t\t\t\tdescribedby: dialogDescription,\n\t\t\t} }\n\t\t\tfocusOnMount=\"firstContentElement\"\n\t\t>\n\t\t\t<p id={ dialogDescription }>\n\t\t\t\t{ __( 'Enter a custom name for this block.' ) }\n\t\t\t</p>\n\t\t\t<form\n\t\t\t\tonSubmit={ ( e ) => {\n\t\t\t\t\te.preventDefault();\n\n\t\t\t\t\tif ( ! isNameValid ) {\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\n\t\t\t\t\thandleSubmit();\n\t\t\t\t} }\n\t\t\t>\n\t\t\t\t<VStack spacing=\"3\">\n\t\t\t\t\t<TextControl\n\t\t\t\t\t\t__nextHasNoMarginBottom\n\t\t\t\t\t\t__next40pxDefaultSize\n\t\t\t\t\t\tvalue={ editedBlockName }\n\t\t\t\t\t\tlabel={ __( 'Block name' ) }\n\t\t\t\t\t\thideLabelFromVision={ true }\n\t\t\t\t\t\tplaceholder={ originalBlockName }\n\t\t\t\t\t\tonChange={ setEditedBlockName }\n\t\t\t\t\t\tonFocus={ autoSelectInputText }\n\t\t\t\t\t/>\n\t\t\t\t\t<HStack justify=\"right\">\n\t\t\t\t\t\t<Button variant=\"tertiary\" onClick={ onClose }>\n\t\t\t\t\t\t\t{ __( 'Cancel' ) }\n\t\t\t\t\t\t</Button>\n\n\t\t\t\t\t\t<Button\n\t\t\t\t\t\t\taria-disabled={ ! isNameValid }\n\t\t\t\t\t\t\tvariant=\"primary\"\n\t\t\t\t\t\t\ttype=\"submit\"\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{ __( 'Save' ) }\n\t\t\t\t\t\t</Button>\n\t\t\t\t\t</HStack>\n\t\t\t\t</VStack>\n\t\t\t</form>\n\t\t</Modal>\n\t);\n}\n\nfunction BlockRenameControl( props ) {\n\tconst [ renamingBlock, setRenamingBlock ] = useState( false );\n\n\tconst { clientId, customName, onChange } = props;\n\n\tconst blockInformation = useBlockDisplayInformation( clientId );\n\n\treturn (\n\t\t<>\n\t\t\t<InspectorControls group=\"advanced\">\n\t\t\t\t<TextControl\n\t\t\t\t\t__nextHasNoMarginBottom\n\t\t\t\t\t__next40pxDefaultSize\n\t\t\t\t\tlabel={ __( 'Block name' ) }\n\t\t\t\t\tvalue={ customName || '' }\n\t\t\t\t\tonChange={ onChange }\n\t\t\t\t/>\n\t\t\t</InspectorControls>\n\t\t\t<BlockSettingsMenuControls>\n\t\t\t\t{ ( { selectedClientIds } ) => {\n\t\t\t\t\t// Only enabled for single selections.\n\t\t\t\t\tconst canRename =\n\t\t\t\t\t\tselectedClientIds.length === 1 &&\n\t\t\t\t\t\tclientId === selectedClientIds[ 0 ];\n\n\t\t\t\t\t// This check ensures the `BlockSettingsMenuControls` fill\n\t\t\t\t\t// doesn't render multiple times and also that it renders for\n\t\t\t\t\t// the block from which the menu was triggered.\n\t\t\t\t\tif ( ! canRename ) {\n\t\t\t\t\t\treturn null;\n\t\t\t\t\t}\n\n\t\t\t\t\treturn (\n\t\t\t\t\t\t<MenuItem\n\t\t\t\t\t\t\tonClick={ () => {\n\t\t\t\t\t\t\t\tsetRenamingBlock( true );\n\t\t\t\t\t\t\t} }\n\t\t\t\t\t\t\taria-expanded={ renamingBlock }\n\t\t\t\t\t\t\taria-haspopup=\"dialog\"\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{ __( 'Rename' ) }\n\t\t\t\t\t\t</MenuItem>\n\t\t\t\t\t);\n\t\t\t\t} }\n\t\t\t</BlockSettingsMenuControls>\n\n\t\t\t{ renamingBlock && (\n\t\t\t\t<RenameModal\n\t\t\t\t\tblockName={ customName || '' }\n\t\t\t\t\toriginalBlockName={ blockInformation?.title }\n\t\t\t\t\tonClose={ () => setRenamingBlock( false ) }\n\t\t\t\t\tonSave={ ( newName ) => {\n\t\t\t\t\t\t// If the new value is the block's original name (e.g. `Group`)\n\t\t\t\t\t\t// or it is an empty string then assume the intent is to reset\n\t\t\t\t\t\t// the value. Therefore reset the metadata.\n\t\t\t\t\t\tif (\n\t\t\t\t\t\t\tnewName === blockInformation?.title ||\n\t\t\t\t\t\t\temptyString( newName )\n\t\t\t\t\t\t) {\n\t\t\t\t\t\t\tnewName = undefined;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tonChange( newName );\n\t\t\t\t\t} }\n\t\t\t\t/>\n\t\t\t) }\n\t\t</>\n\t);\n}\n\nexport const withBlockRenameControls = createHigherOrderComponent(\n\t( BlockEdit ) => ( props ) => {\n\t\tconst { clientId, name, attributes, setAttributes, isSelected } = props;\n\n\t\tconst supportsBlockNaming = hasBlockSupport( name, 'renaming', true );\n\n\t\treturn (\n\t\t\t<>\n\t\t\t\t{ isSelected && supportsBlockNaming && (\n\t\t\t\t\t<>\n\t\t\t\t\t\t<BlockRenameControl\n\t\t\t\t\t\t\tclientId={ clientId }\n\t\t\t\t\t\t\tcustomName={ attributes?.metadata?.name }\n\t\t\t\t\t\t\tonChange={ ( newName ) => {\n\t\t\t\t\t\t\t\tsetAttributes( {\n\t\t\t\t\t\t\t\t\tmetadata: {\n\t\t\t\t\t\t\t\t\t\t...attributes?.metadata,\n\t\t\t\t\t\t\t\t\t\tname: newName,\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t} );\n\t\t\t\t\t\t\t} }\n\t\t\t\t\t\t/>\n\t\t\t\t\t</>\n\t\t\t\t) }\n\n\t\t\t\t<BlockEdit key=\"edit\" { ...props } />\n\t\t\t</>\n\t\t);\n\t},\n\t'withBlockRenameControls'\n);\n\naddFilter(\n\t'editor.BlockEdit',\n\t'core/block-rename-ui/with-block-rename-controls',\n\twithBlockRenameControls\n);\n"],"mappings":"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"}