@wordpress/block-library 8.12.6 → 8.14.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 (305) hide show
  1. package/CHANGELOG.md +4 -0
  2. package/build/archives/index.js +5 -1
  3. package/build/archives/index.js.map +1 -1
  4. package/build/audio/index.js +5 -1
  5. package/build/audio/index.js.map +1 -1
  6. package/build/block/edit.native.js +2 -2
  7. package/build/block/edit.native.js.map +1 -1
  8. package/build/categories/index.js +5 -1
  9. package/build/categories/index.js.map +1 -1
  10. package/build/code/index.js +5 -1
  11. package/build/code/index.js.map +1 -1
  12. package/build/column/index.js +1 -0
  13. package/build/column/index.js.map +1 -1
  14. package/build/comments/index.js +1 -0
  15. package/build/comments/index.js.map +1 -1
  16. package/build/cover/edit/inspector-controls.js +2 -1
  17. package/build/cover/edit/inspector-controls.js.map +1 -1
  18. package/build/cover/index.js +1 -0
  19. package/build/cover/index.js.map +1 -1
  20. package/build/details/index.js +5 -1
  21. package/build/details/index.js.map +1 -1
  22. package/build/embed/util.js +9 -8
  23. package/build/embed/util.js.map +1 -1
  24. package/build/file/index.js +2 -1
  25. package/build/file/index.js.map +1 -1
  26. package/build/file/view.js +15 -1
  27. package/build/file/view.js.map +1 -1
  28. package/build/gallery/index.js +3 -1
  29. package/build/gallery/index.js.map +1 -1
  30. package/build/group/index.js +1 -0
  31. package/build/group/index.js.map +1 -1
  32. package/build/heading/index.js +5 -1
  33. package/build/heading/index.js.map +1 -1
  34. package/build/heading/transforms.js +5 -1
  35. package/build/heading/transforms.js.map +1 -1
  36. package/build/image/deprecated.js +453 -175
  37. package/build/image/deprecated.js.map +1 -1
  38. package/build/image/image.js +1 -1
  39. package/build/image/image.js.map +1 -1
  40. package/build/image/save.js +3 -1
  41. package/build/image/save.js.map +1 -1
  42. package/build/image/{interactivity.js → view-interactivity.js} +86 -44
  43. package/build/image/view-interactivity.js.map +1 -0
  44. package/build/index.js +12 -3
  45. package/build/index.js.map +1 -1
  46. package/build/list/index.js +5 -1
  47. package/build/list/index.js.map +1 -1
  48. package/build/list-item/utils.js +6 -1
  49. package/build/list-item/utils.js.map +1 -1
  50. package/build/media-text/index.js +1 -0
  51. package/build/media-text/index.js.map +1 -1
  52. package/build/missing/edit.js +22 -8
  53. package/build/missing/edit.js.map +1 -1
  54. package/build/navigation/index.js +3 -2
  55. package/build/navigation/index.js.map +1 -1
  56. package/build/navigation/view.js +174 -50
  57. package/build/navigation/view.js.map +1 -1
  58. package/build/page-list/convert-to-links-modal.js +3 -3
  59. package/build/page-list/convert-to-links-modal.js.map +1 -1
  60. package/build/page-list/edit.js +34 -39
  61. package/build/page-list/edit.js.map +1 -1
  62. package/build/page-list/use-convert-to-navigation-links.js +2 -15
  63. package/build/page-list/use-convert-to-navigation-links.js.map +1 -1
  64. package/build/paragraph/index.js +1 -0
  65. package/build/paragraph/index.js.map +1 -1
  66. package/build/paragraph/transforms.js +1 -0
  67. package/build/paragraph/transforms.js.map +1 -1
  68. package/build/post-comments-form/index.js +1 -0
  69. package/build/post-comments-form/index.js.map +1 -1
  70. package/build/post-navigation-link/index.js +1 -0
  71. package/build/post-navigation-link/index.js.map +1 -1
  72. package/build/post-time-to-read/index.js +5 -1
  73. package/build/post-time-to-read/index.js.map +1 -1
  74. package/build/quote/index.js +1 -0
  75. package/build/quote/index.js.map +1 -1
  76. package/build/site-logo/index.js +5 -1
  77. package/build/site-logo/index.js.map +1 -1
  78. package/build/site-tagline/index.js +5 -1
  79. package/build/site-tagline/index.js.map +1 -1
  80. package/build/site-title/index.js +5 -1
  81. package/build/site-title/index.js.map +1 -1
  82. package/build/social-links/index.js +3 -1
  83. package/build/social-links/index.js.map +1 -1
  84. package/build/table/index.js +5 -1
  85. package/build/table/index.js.map +1 -1
  86. package/build/term-description/index.js +1 -0
  87. package/build/term-description/index.js.map +1 -1
  88. package/build/verse/index.js +5 -1
  89. package/build/verse/index.js.map +1 -1
  90. package/build/video/deprecated.js +5 -1
  91. package/build/video/deprecated.js.map +1 -1
  92. package/build/video/index.js +5 -1
  93. package/build/video/index.js.map +1 -1
  94. package/build-module/archives/index.js +5 -1
  95. package/build-module/archives/index.js.map +1 -1
  96. package/build-module/audio/index.js +5 -1
  97. package/build-module/audio/index.js.map +1 -1
  98. package/build-module/block/edit.native.js +2 -2
  99. package/build-module/block/edit.native.js.map +1 -1
  100. package/build-module/categories/index.js +5 -1
  101. package/build-module/categories/index.js.map +1 -1
  102. package/build-module/code/index.js +5 -1
  103. package/build-module/code/index.js.map +1 -1
  104. package/build-module/column/index.js +1 -0
  105. package/build-module/column/index.js.map +1 -1
  106. package/build-module/comments/index.js +1 -0
  107. package/build-module/comments/index.js.map +1 -1
  108. package/build-module/cover/edit/inspector-controls.js +2 -1
  109. package/build-module/cover/edit/inspector-controls.js.map +1 -1
  110. package/build-module/cover/index.js +1 -0
  111. package/build-module/cover/index.js.map +1 -1
  112. package/build-module/details/index.js +5 -1
  113. package/build-module/details/index.js.map +1 -1
  114. package/build-module/embed/util.js +6 -6
  115. package/build-module/embed/util.js.map +1 -1
  116. package/build-module/file/index.js +2 -1
  117. package/build-module/file/index.js.map +1 -1
  118. package/build-module/file/view.js +15 -2
  119. package/build-module/file/view.js.map +1 -1
  120. package/build-module/gallery/index.js +3 -1
  121. package/build-module/gallery/index.js.map +1 -1
  122. package/build-module/group/index.js +1 -0
  123. package/build-module/group/index.js.map +1 -1
  124. package/build-module/heading/index.js +5 -1
  125. package/build-module/heading/index.js.map +1 -1
  126. package/build-module/heading/transforms.js +5 -1
  127. package/build-module/heading/transforms.js.map +1 -1
  128. package/build-module/image/deprecated.js +454 -176
  129. package/build-module/image/deprecated.js.map +1 -1
  130. package/build-module/image/image.js +1 -1
  131. package/build-module/image/image.js.map +1 -1
  132. package/build-module/image/save.js +3 -1
  133. package/build-module/image/save.js.map +1 -1
  134. package/build-module/image/{interactivity.js → view-interactivity.js} +86 -44
  135. package/build-module/image/view-interactivity.js.map +1 -0
  136. package/build-module/index.js +12 -3
  137. package/build-module/index.js.map +1 -1
  138. package/build-module/list/index.js +5 -1
  139. package/build-module/list/index.js.map +1 -1
  140. package/build-module/list-item/utils.js +6 -1
  141. package/build-module/list-item/utils.js.map +1 -1
  142. package/build-module/media-text/index.js +1 -0
  143. package/build-module/media-text/index.js.map +1 -1
  144. package/build-module/missing/edit.js +22 -8
  145. package/build-module/missing/edit.js.map +1 -1
  146. package/build-module/navigation/index.js +3 -2
  147. package/build-module/navigation/index.js.map +1 -1
  148. package/build-module/navigation/view.js +173 -50
  149. package/build-module/navigation/view.js.map +1 -1
  150. package/build-module/page-list/convert-to-links-modal.js +3 -3
  151. package/build-module/page-list/convert-to-links-modal.js.map +1 -1
  152. package/build-module/page-list/edit.js +34 -39
  153. package/build-module/page-list/edit.js.map +1 -1
  154. package/build-module/page-list/use-convert-to-navigation-links.js +3 -16
  155. package/build-module/page-list/use-convert-to-navigation-links.js.map +1 -1
  156. package/build-module/paragraph/index.js +1 -0
  157. package/build-module/paragraph/index.js.map +1 -1
  158. package/build-module/paragraph/transforms.js +1 -0
  159. package/build-module/paragraph/transforms.js.map +1 -1
  160. package/build-module/post-comments-form/index.js +1 -0
  161. package/build-module/post-comments-form/index.js.map +1 -1
  162. package/build-module/post-navigation-link/index.js +1 -0
  163. package/build-module/post-navigation-link/index.js.map +1 -1
  164. package/build-module/post-time-to-read/index.js +5 -1
  165. package/build-module/post-time-to-read/index.js.map +1 -1
  166. package/build-module/quote/index.js +1 -0
  167. package/build-module/quote/index.js.map +1 -1
  168. package/build-module/site-logo/index.js +5 -1
  169. package/build-module/site-logo/index.js.map +1 -1
  170. package/build-module/site-tagline/index.js +5 -1
  171. package/build-module/site-tagline/index.js.map +1 -1
  172. package/build-module/site-title/index.js +5 -1
  173. package/build-module/site-title/index.js.map +1 -1
  174. package/build-module/social-links/index.js +3 -1
  175. package/build-module/social-links/index.js.map +1 -1
  176. package/build-module/table/index.js +5 -1
  177. package/build-module/table/index.js.map +1 -1
  178. package/build-module/term-description/index.js +1 -0
  179. package/build-module/term-description/index.js.map +1 -1
  180. package/build-module/verse/index.js +5 -1
  181. package/build-module/verse/index.js.map +1 -1
  182. package/build-module/video/deprecated.js +5 -1
  183. package/build-module/video/deprecated.js.map +1 -1
  184. package/build-module/video/index.js +5 -1
  185. package/build-module/video/index.js.map +1 -1
  186. package/build-style/image/style-rtl.css +16 -2
  187. package/build-style/image/style.css +16 -2
  188. package/build-style/style-rtl.css +16 -2
  189. package/build-style/style.css +16 -2
  190. package/package.json +33 -38
  191. package/src/archives/block.json +5 -1
  192. package/src/audio/block.json +5 -1
  193. package/src/block/edit.native.js +2 -2
  194. package/src/block/test/edit.native.js +4 -4
  195. package/src/categories/block.json +5 -1
  196. package/src/code/block.json +5 -1
  197. package/src/column/block.json +1 -0
  198. package/src/comments/block.json +1 -0
  199. package/src/cover/block.json +1 -0
  200. package/src/cover/edit/inspector-controls.js +1 -0
  201. package/src/details/block.json +5 -1
  202. package/src/embed/util.js +4 -6
  203. package/src/file/block.json +2 -1
  204. package/src/file/index.php +0 -17
  205. package/src/file/view.js +14 -5
  206. package/src/gallery/block.json +3 -1
  207. package/src/group/block.json +1 -0
  208. package/src/heading/block.json +5 -1
  209. package/src/heading/test/index.native.js +18 -0
  210. package/src/image/deprecated.js +597 -320
  211. package/src/image/image.js +2 -1
  212. package/src/image/save.js +2 -0
  213. package/src/image/style.scss +15 -2
  214. package/src/image/{interactivity.js → view-interactivity.js} +99 -50
  215. package/src/index.js +18 -1
  216. package/src/list/block.json +5 -1
  217. package/src/media-text/block.json +1 -0
  218. package/src/missing/edit.js +31 -11
  219. package/src/navigation/block.json +3 -2
  220. package/src/navigation/index.php +15 -20
  221. package/src/navigation/view.js +189 -67
  222. package/src/navigation-submenu/index.php +0 -10
  223. package/src/page-list/convert-to-links-modal.js +3 -3
  224. package/src/page-list/edit.js +65 -62
  225. package/src/page-list/use-convert-to-navigation-links.js +3 -20
  226. package/src/paragraph/block.json +1 -0
  227. package/src/post-comments-form/block.json +1 -0
  228. package/src/post-navigation-link/block.json +1 -0
  229. package/src/post-time-to-read/block.json +5 -1
  230. package/src/quote/block.json +1 -0
  231. package/src/site-logo/block.json +5 -1
  232. package/src/site-tagline/block.json +5 -1
  233. package/src/site-title/block.json +5 -1
  234. package/src/social-links/block.json +3 -1
  235. package/src/table/block.json +5 -1
  236. package/src/term-description/block.json +1 -0
  237. package/src/verse/block.json +5 -1
  238. package/src/video/block.json +5 -1
  239. package/build/file/interactivity.js +0 -19
  240. package/build/file/interactivity.js.map +0 -1
  241. package/build/heading/heading-level-icon.js +0 -61
  242. package/build/heading/heading-level-icon.js.map +0 -1
  243. package/build/image/interactivity.js.map +0 -1
  244. package/build/navigation/interactivity.js +0 -167
  245. package/build/navigation/interactivity.js.map +0 -1
  246. package/build/navigation/view-modal.js +0 -64
  247. package/build/navigation/view-modal.js.map +0 -1
  248. package/build/utils/interactivity/constants.js +0 -9
  249. package/build/utils/interactivity/constants.js.map +0 -1
  250. package/build/utils/interactivity/directives.js +0 -222
  251. package/build/utils/interactivity/directives.js.map +0 -1
  252. package/build/utils/interactivity/hooks.js +0 -159
  253. package/build/utils/interactivity/hooks.js.map +0 -1
  254. package/build/utils/interactivity/hydration.js +0 -34
  255. package/build/utils/interactivity/hydration.js.map +0 -1
  256. package/build/utils/interactivity/index.js +0 -32
  257. package/build/utils/interactivity/index.js.map +0 -1
  258. package/build/utils/interactivity/portals.js +0 -108
  259. package/build/utils/interactivity/portals.js.map +0 -1
  260. package/build/utils/interactivity/store.js +0 -66
  261. package/build/utils/interactivity/store.js.map +0 -1
  262. package/build/utils/interactivity/utils.js +0 -87
  263. package/build/utils/interactivity/utils.js.map +0 -1
  264. package/build/utils/interactivity/vdom.js +0 -119
  265. package/build/utils/interactivity/vdom.js.map +0 -1
  266. package/build-module/file/interactivity.js +0 -15
  267. package/build-module/file/interactivity.js.map +0 -1
  268. package/build-module/heading/heading-level-icon.js +0 -53
  269. package/build-module/heading/heading-level-icon.js.map +0 -1
  270. package/build-module/image/interactivity.js.map +0 -1
  271. package/build-module/navigation/interactivity.js +0 -164
  272. package/build-module/navigation/interactivity.js.map +0 -1
  273. package/build-module/navigation/view-modal.js +0 -58
  274. package/build-module/navigation/view-modal.js.map +0 -1
  275. package/build-module/utils/interactivity/constants.js +0 -2
  276. package/build-module/utils/interactivity/constants.js.map +0 -1
  277. package/build-module/utils/interactivity/directives.js +0 -209
  278. package/build-module/utils/interactivity/directives.js.map +0 -1
  279. package/build-module/utils/interactivity/hooks.js +0 -145
  280. package/build-module/utils/interactivity/hooks.js.map +0 -1
  281. package/build-module/utils/interactivity/hydration.js +0 -21
  282. package/build-module/utils/interactivity/hydration.js.map +0 -1
  283. package/build-module/utils/interactivity/index.js +0 -15
  284. package/build-module/utils/interactivity/index.js.map +0 -1
  285. package/build-module/utils/interactivity/portals.js +0 -100
  286. package/build-module/utils/interactivity/portals.js.map +0 -1
  287. package/build-module/utils/interactivity/store.js +0 -55
  288. package/build-module/utils/interactivity/store.js.map +0 -1
  289. package/build-module/utils/interactivity/utils.js +0 -75
  290. package/build-module/utils/interactivity/utils.js.map +0 -1
  291. package/build-module/utils/interactivity/vdom.js +0 -107
  292. package/build-module/utils/interactivity/vdom.js.map +0 -1
  293. package/src/file/interactivity.js +0 -15
  294. package/src/heading/heading-level-icon.js +0 -48
  295. package/src/navigation/interactivity.js +0 -169
  296. package/src/navigation/view-modal.js +0 -78
  297. package/src/utils/interactivity/constants.js +0 -1
  298. package/src/utils/interactivity/directives.js +0 -200
  299. package/src/utils/interactivity/hooks.js +0 -145
  300. package/src/utils/interactivity/hydration.js +0 -22
  301. package/src/utils/interactivity/index.js +0 -15
  302. package/src/utils/interactivity/portals.js +0 -98
  303. package/src/utils/interactivity/store.js +0 -45
  304. package/src/utils/interactivity/utils.js +0 -66
  305. package/src/utils/interactivity/vdom.js +0 -111
@@ -1,59 +1,182 @@
1
- // Open on click functionality.
2
- function closeSubmenus(element) {
3
- element.querySelectorAll('[aria-expanded="true"]').forEach(function (toggle) {
4
- toggle.setAttribute('aria-expanded', 'false');
5
- });
6
- }
7
-
8
- function toggleSubmenuOnClick(event) {
9
- const buttonToggle = event.target.closest('[aria-expanded]');
10
- const isSubmenuOpen = buttonToggle.getAttribute('aria-expanded');
11
-
12
- if (isSubmenuOpen === 'true') {
13
- closeSubmenus(buttonToggle.closest('.wp-block-navigation-item'));
14
- } else {
15
- // Close all sibling submenus.
16
- const parentElement = buttonToggle.closest('.wp-block-navigation-item');
17
- const navigationParent = buttonToggle.closest('.wp-block-navigation__submenu-container, .wp-block-navigation__container, .wp-block-page-list');
18
- navigationParent.querySelectorAll('.wp-block-navigation-item').forEach(function (child) {
19
- if (child !== parentElement) {
20
- closeSubmenus(child);
21
- }
22
- }); // Open submenu.
1
+ /**
2
+ * WordPress dependencies
3
+ */
4
+ import { store as wpStore } from '@wordpress/interactivity';
5
+ const focusableSelectors = ['a[href]', 'input:not([disabled]):not([type="hidden"]):not([aria-hidden])', 'select:not([disabled]):not([aria-hidden])', 'textarea:not([disabled]):not([aria-hidden])', 'button:not([disabled]):not([aria-hidden])', '[contenteditable]', '[tabindex]:not([tabindex^="-"])'];
6
+
7
+ const openMenu = (store, menuOpenedOn) => {
8
+ const {
9
+ context,
10
+ ref,
11
+ selectors
12
+ } = store;
13
+ selectors.core.navigation.menuOpenedBy(store)[menuOpenedOn] = true;
14
+ context.core.navigation.previousFocus = ref;
15
+
16
+ if (context.core.navigation.type === 'overlay') {
17
+ // Add a `has-modal-open` class to the <html> root.
18
+ document.documentElement.classList.add('has-modal-open');
19
+ }
20
+ };
21
+
22
+ const closeMenu = (store, menuClosedOn) => {
23
+ const {
24
+ context,
25
+ selectors
26
+ } = store;
27
+ selectors.core.navigation.menuOpenedBy(store)[menuClosedOn] = false; // Check if the menu is still open or not.
23
28
 
24
- buttonToggle.setAttribute('aria-expanded', 'true');
29
+ if (!selectors.core.navigation.isMenuOpen(store)) {
30
+ if (context.core.navigation.modal?.contains(window.document.activeElement)) {
31
+ context.core.navigation.previousFocus.focus();
32
+ }
33
+
34
+ context.core.navigation.modal = null;
35
+ context.core.navigation.previousFocus = null;
36
+
37
+ if (context.core.navigation.type === 'overlay') {
38
+ document.documentElement.classList.remove('has-modal-open');
39
+ }
25
40
  }
26
- } // Necessary for some themes such as TT1 Blocks, where
27
- // scripts could be loaded before the body.
41
+ };
28
42
 
43
+ wpStore({
44
+ effects: {
45
+ core: {
46
+ navigation: {
47
+ initMenu: store => {
48
+ const {
49
+ context,
50
+ selectors,
51
+ ref
52
+ } = store;
29
53
 
30
- window.addEventListener('load', () => {
31
- const submenuButtons = document.querySelectorAll('.wp-block-navigation-submenu__toggle');
32
- submenuButtons.forEach(function (button) {
33
- button.addEventListener('click', toggleSubmenuOnClick);
34
- }); // Close on click outside.
54
+ if (selectors.core.navigation.isMenuOpen(store)) {
55
+ const focusableElements = ref.querySelectorAll(focusableSelectors);
56
+ context.core.navigation.modal = ref;
57
+ context.core.navigation.firstFocusableElement = focusableElements[0];
58
+ context.core.navigation.lastFocusableElement = focusableElements[focusableElements.length - 1];
59
+ }
60
+ },
61
+ focusFirstElement: store => {
62
+ const {
63
+ selectors,
64
+ ref
65
+ } = store;
35
66
 
36
- document.addEventListener('click', function (event) {
37
- const navigationBlocks = document.querySelectorAll('.wp-block-navigation');
38
- navigationBlocks.forEach(function (block) {
39
- if (!block.contains(event.target)) {
40
- closeSubmenus(block);
67
+ if (selectors.core.navigation.isMenuOpen(store)) {
68
+ ref.querySelector('.wp-block-navigation-item > *:first-child').focus();
69
+ }
70
+ }
41
71
  }
42
- });
43
- }); // Close on focus outside or escape key.
44
-
45
- document.addEventListener('keyup', function (event) {
46
- const submenuBlocks = document.querySelectorAll('.wp-block-navigation-item.has-child');
47
- submenuBlocks.forEach(function (block) {
48
- if (!block.contains(event.target)) {
49
- closeSubmenus(block);
50
- } else if (event.key === 'Escape') {
51
- const toggle = block.querySelector('[aria-expanded="true"]');
52
- closeSubmenus(block); // Focus the submenu trigger so focus does not get trapped in the closed submenu.
53
-
54
- toggle?.focus();
72
+ }
73
+ },
74
+ selectors: {
75
+ core: {
76
+ navigation: {
77
+ roleAttribute: store => {
78
+ const {
79
+ context,
80
+ selectors
81
+ } = store;
82
+ return context.core.navigation.type === 'overlay' && selectors.core.navigation.isMenuOpen(store) ? 'dialog' : '';
83
+ },
84
+ isMenuOpen: ({
85
+ context
86
+ }) => // The menu is opened if either `click`, `hover` or `focus` is true.
87
+ Object.values(context.core.navigation[context.core.navigation.type === 'overlay' ? 'overlayOpenedBy' : 'submenuOpenedBy']).filter(Boolean).length > 0,
88
+ menuOpenedBy: ({
89
+ context
90
+ }) => context.core.navigation[context.core.navigation.type === 'overlay' ? 'overlayOpenedBy' : 'submenuOpenedBy']
55
91
  }
56
- });
57
- });
92
+ }
93
+ },
94
+ actions: {
95
+ core: {
96
+ navigation: {
97
+ openMenuOnHover(store) {
98
+ const {
99
+ navigation
100
+ } = store.context.core;
101
+ if (navigation.type === 'submenu' && // Only open on hover if the overlay is closed.
102
+ Object.values(navigation.overlayOpenedBy || {}).filter(Boolean).length === 0) openMenu(store, 'hover');
103
+ },
104
+
105
+ closeMenuOnHover(store) {
106
+ closeMenu(store, 'hover');
107
+ },
108
+
109
+ openMenuOnClick(store) {
110
+ openMenu(store, 'click');
111
+ },
112
+
113
+ closeMenuOnClick(store) {
114
+ closeMenu(store, 'click');
115
+ closeMenu(store, 'focus');
116
+ },
117
+
118
+ openMenuOnFocus(store) {
119
+ openMenu(store, 'focus');
120
+ },
121
+
122
+ toggleMenuOnClick: store => {
123
+ const {
124
+ selectors
125
+ } = store;
126
+ const menuOpenedBy = selectors.core.navigation.menuOpenedBy(store);
127
+
128
+ if (menuOpenedBy.click || menuOpenedBy.focus) {
129
+ closeMenu(store, 'click');
130
+ closeMenu(store, 'focus');
131
+ } else {
132
+ openMenu(store, 'click');
133
+ }
134
+ },
135
+ handleMenuKeydown: store => {
136
+ const {
137
+ context,
138
+ selectors,
139
+ event
140
+ } = store;
141
+
142
+ if (selectors.core.navigation.menuOpenedBy(store).click) {
143
+ // If Escape close the menu.
144
+ if (event?.key === 'Escape') {
145
+ closeMenu(store, 'click');
146
+ closeMenu(store, 'focus');
147
+ return;
148
+ } // Trap focus if it is an overlay (main menu).
149
+
150
+
151
+ if (context.core.navigation.type === 'overlay' && event.key === 'Tab') {
152
+ // If shift + tab it change the direction.
153
+ if (event.shiftKey && window.document.activeElement === context.core.navigation.firstFocusableElement) {
154
+ event.preventDefault();
155
+ context.core.navigation.lastFocusableElement.focus();
156
+ } else if (!event.shiftKey && window.document.activeElement === context.core.navigation.lastFocusableElement) {
157
+ event.preventDefault();
158
+ context.core.navigation.firstFocusableElement.focus();
159
+ }
160
+ }
161
+ }
162
+ },
163
+ handleMenuFocusout: store => {
164
+ const {
165
+ context,
166
+ event
167
+ } = store; // If focus is outside modal, and in the document, close menu
168
+ // event.target === The element losing focus
169
+ // event.relatedTarget === The element receiving focus (if any)
170
+ // When focusout is outsite the document,
171
+ // `window.document.activeElement` doesn't change.
172
+
173
+ if (!context.core.navigation.modal?.contains(event.relatedTarget) && event.target !== window.document.activeElement) {
174
+ closeMenu(store, 'click');
175
+ closeMenu(store, 'focus');
176
+ }
177
+ }
178
+ }
179
+ }
180
+ }
58
181
  });
59
182
  //# sourceMappingURL=view.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["@wordpress/block-library/src/navigation/view.js"],"names":["closeSubmenus","element","querySelectorAll","forEach","toggle","setAttribute","toggleSubmenuOnClick","event","buttonToggle","target","closest","isSubmenuOpen","getAttribute","parentElement","navigationParent","child","window","addEventListener","submenuButtons","document","button","navigationBlocks","block","contains","submenuBlocks","key","querySelector","focus"],"mappings":"AAAA;AACA,SAASA,aAAT,CAAwBC,OAAxB,EAAkC;AACjCA,EAAAA,OAAO,CACLC,gBADF,CACoB,wBADpB,EAEEC,OAFF,CAEW,UAAWC,MAAX,EAAoB;AAC7BA,IAAAA,MAAM,CAACC,YAAP,CAAqB,eAArB,EAAsC,OAAtC;AACA,GAJF;AAKA;;AAED,SAASC,oBAAT,CAA+BC,KAA/B,EAAuC;AACtC,QAAMC,YAAY,GAAGD,KAAK,CAACE,MAAN,CAAaC,OAAb,CAAsB,iBAAtB,CAArB;AACA,QAAMC,aAAa,GAAGH,YAAY,CAACI,YAAb,CAA2B,eAA3B,CAAtB;;AAEA,MAAKD,aAAa,KAAK,MAAvB,EAAgC;AAC/BX,IAAAA,aAAa,CAAEQ,YAAY,CAACE,OAAb,CAAsB,2BAAtB,CAAF,CAAb;AACA,GAFD,MAEO;AACN;AACA,UAAMG,aAAa,GAAGL,YAAY,CAACE,OAAb,CACrB,2BADqB,CAAtB;AAGA,UAAMI,gBAAgB,GAAGN,YAAY,CAACE,OAAb,CACxB,+FADwB,CAAzB;AAGAI,IAAAA,gBAAgB,CACdZ,gBADF,CACoB,2BADpB,EAEEC,OAFF,CAEW,UAAWY,KAAX,EAAmB;AAC5B,UAAKA,KAAK,KAAKF,aAAf,EAA+B;AAC9Bb,QAAAA,aAAa,CAAEe,KAAF,CAAb;AACA;AACD,KANF,EARM,CAeN;;AACAP,IAAAA,YAAY,CAACH,YAAb,CAA2B,eAA3B,EAA4C,MAA5C;AACA;AACD,C,CAED;AACA;;;AACAW,MAAM,CAACC,gBAAP,CAAyB,MAAzB,EAAiC,MAAM;AACtC,QAAMC,cAAc,GAAGC,QAAQ,CAACjB,gBAAT,CACtB,sCADsB,CAAvB;AAIAgB,EAAAA,cAAc,CAACf,OAAf,CAAwB,UAAWiB,MAAX,EAAoB;AAC3CA,IAAAA,MAAM,CAACH,gBAAP,CAAyB,OAAzB,EAAkCX,oBAAlC;AACA,GAFD,EALsC,CAStC;;AACAa,EAAAA,QAAQ,CAACF,gBAAT,CAA2B,OAA3B,EAAoC,UAAWV,KAAX,EAAmB;AACtD,UAAMc,gBAAgB,GAAGF,QAAQ,CAACjB,gBAAT,CACxB,sBADwB,CAAzB;AAGAmB,IAAAA,gBAAgB,CAAClB,OAAjB,CAA0B,UAAWmB,KAAX,EAAmB;AAC5C,UAAK,CAAEA,KAAK,CAACC,QAAN,CAAgBhB,KAAK,CAACE,MAAtB,CAAP,EAAwC;AACvCT,QAAAA,aAAa,CAAEsB,KAAF,CAAb;AACA;AACD,KAJD;AAKA,GATD,EAVsC,CAoBtC;;AACAH,EAAAA,QAAQ,CAACF,gBAAT,CAA2B,OAA3B,EAAoC,UAAWV,KAAX,EAAmB;AACtD,UAAMiB,aAAa,GAAGL,QAAQ,CAACjB,gBAAT,CACrB,qCADqB,CAAtB;AAGAsB,IAAAA,aAAa,CAACrB,OAAd,CAAuB,UAAWmB,KAAX,EAAmB;AACzC,UAAK,CAAEA,KAAK,CAACC,QAAN,CAAgBhB,KAAK,CAACE,MAAtB,CAAP,EAAwC;AACvCT,QAAAA,aAAa,CAAEsB,KAAF,CAAb;AACA,OAFD,MAEO,IAAKf,KAAK,CAACkB,GAAN,KAAc,QAAnB,EAA8B;AACpC,cAAMrB,MAAM,GAAGkB,KAAK,CAACI,aAAN,CAAqB,wBAArB,CAAf;AACA1B,QAAAA,aAAa,CAAEsB,KAAF,CAAb,CAFoC,CAGpC;;AACAlB,QAAAA,MAAM,EAAEuB,KAAR;AACA;AACD,KATD;AAUA,GAdD;AAeA,CApCD","sourcesContent":["// Open on click functionality.\nfunction closeSubmenus( element ) {\n\telement\n\t\t.querySelectorAll( '[aria-expanded=\"true\"]' )\n\t\t.forEach( function ( toggle ) {\n\t\t\ttoggle.setAttribute( 'aria-expanded', 'false' );\n\t\t} );\n}\n\nfunction toggleSubmenuOnClick( event ) {\n\tconst buttonToggle = event.target.closest( '[aria-expanded]' );\n\tconst isSubmenuOpen = buttonToggle.getAttribute( 'aria-expanded' );\n\n\tif ( isSubmenuOpen === 'true' ) {\n\t\tcloseSubmenus( buttonToggle.closest( '.wp-block-navigation-item' ) );\n\t} else {\n\t\t// Close all sibling submenus.\n\t\tconst parentElement = buttonToggle.closest(\n\t\t\t'.wp-block-navigation-item'\n\t\t);\n\t\tconst navigationParent = buttonToggle.closest(\n\t\t\t'.wp-block-navigation__submenu-container, .wp-block-navigation__container, .wp-block-page-list'\n\t\t);\n\t\tnavigationParent\n\t\t\t.querySelectorAll( '.wp-block-navigation-item' )\n\t\t\t.forEach( function ( child ) {\n\t\t\t\tif ( child !== parentElement ) {\n\t\t\t\t\tcloseSubmenus( child );\n\t\t\t\t}\n\t\t\t} );\n\t\t// Open submenu.\n\t\tbuttonToggle.setAttribute( 'aria-expanded', 'true' );\n\t}\n}\n\n// Necessary for some themes such as TT1 Blocks, where\n// scripts could be loaded before the body.\nwindow.addEventListener( 'load', () => {\n\tconst submenuButtons = document.querySelectorAll(\n\t\t'.wp-block-navigation-submenu__toggle'\n\t);\n\n\tsubmenuButtons.forEach( function ( button ) {\n\t\tbutton.addEventListener( 'click', toggleSubmenuOnClick );\n\t} );\n\n\t// Close on click outside.\n\tdocument.addEventListener( 'click', function ( event ) {\n\t\tconst navigationBlocks = document.querySelectorAll(\n\t\t\t'.wp-block-navigation'\n\t\t);\n\t\tnavigationBlocks.forEach( function ( block ) {\n\t\t\tif ( ! block.contains( event.target ) ) {\n\t\t\t\tcloseSubmenus( block );\n\t\t\t}\n\t\t} );\n\t} );\n\t// Close on focus outside or escape key.\n\tdocument.addEventListener( 'keyup', function ( event ) {\n\t\tconst submenuBlocks = document.querySelectorAll(\n\t\t\t'.wp-block-navigation-item.has-child'\n\t\t);\n\t\tsubmenuBlocks.forEach( function ( block ) {\n\t\t\tif ( ! block.contains( event.target ) ) {\n\t\t\t\tcloseSubmenus( block );\n\t\t\t} else if ( event.key === 'Escape' ) {\n\t\t\t\tconst toggle = block.querySelector( '[aria-expanded=\"true\"]' );\n\t\t\t\tcloseSubmenus( block );\n\t\t\t\t// Focus the submenu trigger so focus does not get trapped in the closed submenu.\n\t\t\t\ttoggle?.focus();\n\t\t\t}\n\t\t} );\n\t} );\n} );\n"]}
1
+ {"version":3,"sources":["@wordpress/block-library/src/navigation/view.js"],"names":["store","wpStore","focusableSelectors","openMenu","menuOpenedOn","context","ref","selectors","core","navigation","menuOpenedBy","previousFocus","type","document","documentElement","classList","add","closeMenu","menuClosedOn","isMenuOpen","modal","contains","window","activeElement","focus","remove","effects","initMenu","focusableElements","querySelectorAll","firstFocusableElement","lastFocusableElement","length","focusFirstElement","querySelector","roleAttribute","Object","values","filter","Boolean","actions","openMenuOnHover","overlayOpenedBy","closeMenuOnHover","openMenuOnClick","closeMenuOnClick","openMenuOnFocus","toggleMenuOnClick","click","handleMenuKeydown","event","key","shiftKey","preventDefault","handleMenuFocusout","relatedTarget","target"],"mappings":"AAAA;AACA;AACA;AACA,SAASA,KAAK,IAAIC,OAAlB,QAAiC,0BAAjC;AAEA,MAAMC,kBAAkB,GAAG,CAC1B,SAD0B,EAE1B,+DAF0B,EAG1B,2CAH0B,EAI1B,6CAJ0B,EAK1B,2CAL0B,EAM1B,mBAN0B,EAO1B,iCAP0B,CAA3B;;AAUA,MAAMC,QAAQ,GAAG,CAAEH,KAAF,EAASI,YAAT,KAA2B;AAC3C,QAAM;AAAEC,IAAAA,OAAF;AAAWC,IAAAA,GAAX;AAAgBC,IAAAA;AAAhB,MAA8BP,KAApC;AACAO,EAAAA,SAAS,CAACC,IAAV,CAAeC,UAAf,CAA0BC,YAA1B,CAAwCV,KAAxC,EAAiDI,YAAjD,IAAkE,IAAlE;AACAC,EAAAA,OAAO,CAACG,IAAR,CAAaC,UAAb,CAAwBE,aAAxB,GAAwCL,GAAxC;;AACA,MAAKD,OAAO,CAACG,IAAR,CAAaC,UAAb,CAAwBG,IAAxB,KAAiC,SAAtC,EAAkD;AACjD;AACAC,IAAAA,QAAQ,CAACC,eAAT,CAAyBC,SAAzB,CAAmCC,GAAnC,CAAwC,gBAAxC;AACA;AACD,CARD;;AAUA,MAAMC,SAAS,GAAG,CAAEjB,KAAF,EAASkB,YAAT,KAA2B;AAC5C,QAAM;AAAEb,IAAAA,OAAF;AAAWE,IAAAA;AAAX,MAAyBP,KAA/B;AACAO,EAAAA,SAAS,CAACC,IAAV,CAAeC,UAAf,CAA0BC,YAA1B,CAAwCV,KAAxC,EAAiDkB,YAAjD,IAAkE,KAAlE,CAF4C,CAG5C;;AACA,MAAK,CAAEX,SAAS,CAACC,IAAV,CAAeC,UAAf,CAA0BU,UAA1B,CAAsCnB,KAAtC,CAAP,EAAuD;AACtD,QACCK,OAAO,CAACG,IAAR,CAAaC,UAAb,CAAwBW,KAAxB,EAA+BC,QAA/B,CACCC,MAAM,CAACT,QAAP,CAAgBU,aADjB,CADD,EAIE;AACDlB,MAAAA,OAAO,CAACG,IAAR,CAAaC,UAAb,CAAwBE,aAAxB,CAAsCa,KAAtC;AACA;;AACDnB,IAAAA,OAAO,CAACG,IAAR,CAAaC,UAAb,CAAwBW,KAAxB,GAAgC,IAAhC;AACAf,IAAAA,OAAO,CAACG,IAAR,CAAaC,UAAb,CAAwBE,aAAxB,GAAwC,IAAxC;;AACA,QAAKN,OAAO,CAACG,IAAR,CAAaC,UAAb,CAAwBG,IAAxB,KAAiC,SAAtC,EAAkD;AACjDC,MAAAA,QAAQ,CAACC,eAAT,CAAyBC,SAAzB,CAAmCU,MAAnC,CAA2C,gBAA3C;AACA;AACD;AACD,CAlBD;;AAoBAxB,OAAO,CAAE;AACRyB,EAAAA,OAAO,EAAE;AACRlB,IAAAA,IAAI,EAAE;AACLC,MAAAA,UAAU,EAAE;AACXkB,QAAAA,QAAQ,EAAI3B,KAAF,IAAa;AACtB,gBAAM;AAAEK,YAAAA,OAAF;AAAWE,YAAAA,SAAX;AAAsBD,YAAAA;AAAtB,cAA8BN,KAApC;;AACA,cAAKO,SAAS,CAACC,IAAV,CAAeC,UAAf,CAA0BU,UAA1B,CAAsCnB,KAAtC,CAAL,EAAqD;AACpD,kBAAM4B,iBAAiB,GACtBtB,GAAG,CAACuB,gBAAJ,CAAsB3B,kBAAtB,CADD;AAEAG,YAAAA,OAAO,CAACG,IAAR,CAAaC,UAAb,CAAwBW,KAAxB,GAAgCd,GAAhC;AACAD,YAAAA,OAAO,CAACG,IAAR,CAAaC,UAAb,CAAwBqB,qBAAxB,GACCF,iBAAiB,CAAE,CAAF,CADlB;AAEAvB,YAAAA,OAAO,CAACG,IAAR,CAAaC,UAAb,CAAwBsB,oBAAxB,GACCH,iBAAiB,CAAEA,iBAAiB,CAACI,MAAlB,GAA2B,CAA7B,CADlB;AAEA;AACD,SAZU;AAaXC,QAAAA,iBAAiB,EAAIjC,KAAF,IAAa;AAC/B,gBAAM;AAAEO,YAAAA,SAAF;AAAaD,YAAAA;AAAb,cAAqBN,KAA3B;;AACA,cAAKO,SAAS,CAACC,IAAV,CAAeC,UAAf,CAA0BU,UAA1B,CAAsCnB,KAAtC,CAAL,EAAqD;AACpDM,YAAAA,GAAG,CAAC4B,aAAJ,CACC,2CADD,EAEEV,KAFF;AAGA;AACD;AApBU;AADP;AADE,GADD;AA2BRjB,EAAAA,SAAS,EAAE;AACVC,IAAAA,IAAI,EAAE;AACLC,MAAAA,UAAU,EAAE;AACX0B,QAAAA,aAAa,EAAInC,KAAF,IAAa;AAC3B,gBAAM;AAAEK,YAAAA,OAAF;AAAWE,YAAAA;AAAX,cAAyBP,KAA/B;AACA,iBAAOK,OAAO,CAACG,IAAR,CAAaC,UAAb,CAAwBG,IAAxB,KAAiC,SAAjC,IACNL,SAAS,CAACC,IAAV,CAAeC,UAAf,CAA0BU,UAA1B,CAAsCnB,KAAtC,CADM,GAEJ,QAFI,GAGJ,EAHH;AAIA,SAPU;AAQXmB,QAAAA,UAAU,EAAE,CAAE;AAAEd,UAAAA;AAAF,SAAF,KACX;AACA+B,QAAAA,MAAM,CAACC,MAAP,CACChC,OAAO,CAACG,IAAR,CAAaC,UAAb,CACCJ,OAAO,CAACG,IAAR,CAAaC,UAAb,CAAwBG,IAAxB,KAAiC,SAAjC,GACG,iBADH,GAEG,iBAHJ,CADD,EAME0B,MANF,CAMUC,OANV,EAMoBP,MANpB,GAM6B,CAhBnB;AAiBXtB,QAAAA,YAAY,EAAE,CAAE;AAAEL,UAAAA;AAAF,SAAF,KACbA,OAAO,CAACG,IAAR,CAAaC,UAAb,CACCJ,OAAO,CAACG,IAAR,CAAaC,UAAb,CAAwBG,IAAxB,KAAiC,SAAjC,GACG,iBADH,GAEG,iBAHJ;AAlBU;AADP;AADI,GA3BH;AAuDR4B,EAAAA,OAAO,EAAE;AACRhC,IAAAA,IAAI,EAAE;AACLC,MAAAA,UAAU,EAAE;AACXgC,QAAAA,eAAe,CAAEzC,KAAF,EAAU;AACxB,gBAAM;AAAES,YAAAA;AAAF,cAAiBT,KAAK,CAACK,OAAN,CAAcG,IAArC;AACA,cACCC,UAAU,CAACG,IAAX,KAAoB,SAApB,IACA;AACAwB,UAAAA,MAAM,CAACC,MAAP,CACC5B,UAAU,CAACiC,eAAX,IAA8B,EAD/B,EAEEJ,MAFF,CAEUC,OAFV,EAEoBP,MAFpB,KAE+B,CALhC,EAOC7B,QAAQ,CAAEH,KAAF,EAAS,OAAT,CAAR;AACD,SAXU;;AAYX2C,QAAAA,gBAAgB,CAAE3C,KAAF,EAAU;AACzBiB,UAAAA,SAAS,CAAEjB,KAAF,EAAS,OAAT,CAAT;AACA,SAdU;;AAeX4C,QAAAA,eAAe,CAAE5C,KAAF,EAAU;AACxBG,UAAAA,QAAQ,CAAEH,KAAF,EAAS,OAAT,CAAR;AACA,SAjBU;;AAkBX6C,QAAAA,gBAAgB,CAAE7C,KAAF,EAAU;AACzBiB,UAAAA,SAAS,CAAEjB,KAAF,EAAS,OAAT,CAAT;AACAiB,UAAAA,SAAS,CAAEjB,KAAF,EAAS,OAAT,CAAT;AACA,SArBU;;AAsBX8C,QAAAA,eAAe,CAAE9C,KAAF,EAAU;AACxBG,UAAAA,QAAQ,CAAEH,KAAF,EAAS,OAAT,CAAR;AACA,SAxBU;;AAyBX+C,QAAAA,iBAAiB,EAAI/C,KAAF,IAAa;AAC/B,gBAAM;AAAEO,YAAAA;AAAF,cAAgBP,KAAtB;AACA,gBAAMU,YAAY,GACjBH,SAAS,CAACC,IAAV,CAAeC,UAAf,CAA0BC,YAA1B,CAAwCV,KAAxC,CADD;;AAEA,cAAKU,YAAY,CAACsC,KAAb,IAAsBtC,YAAY,CAACc,KAAxC,EAAgD;AAC/CP,YAAAA,SAAS,CAAEjB,KAAF,EAAS,OAAT,CAAT;AACAiB,YAAAA,SAAS,CAAEjB,KAAF,EAAS,OAAT,CAAT;AACA,WAHD,MAGO;AACNG,YAAAA,QAAQ,CAAEH,KAAF,EAAS,OAAT,CAAR;AACA;AACD,SAnCU;AAoCXiD,QAAAA,iBAAiB,EAAIjD,KAAF,IAAa;AAC/B,gBAAM;AAAEK,YAAAA,OAAF;AAAWE,YAAAA,SAAX;AAAsB2C,YAAAA;AAAtB,cAAgClD,KAAtC;;AACA,cACCO,SAAS,CAACC,IAAV,CAAeC,UAAf,CAA0BC,YAA1B,CAAwCV,KAAxC,EAAgDgD,KADjD,EAEE;AACD;AACA,gBAAKE,KAAK,EAAEC,GAAP,KAAe,QAApB,EAA+B;AAC9BlC,cAAAA,SAAS,CAAEjB,KAAF,EAAS,OAAT,CAAT;AACAiB,cAAAA,SAAS,CAAEjB,KAAF,EAAS,OAAT,CAAT;AACA;AACA,aANA,CAQD;;;AACA,gBACCK,OAAO,CAACG,IAAR,CAAaC,UAAb,CAAwBG,IAAxB,KAAiC,SAAjC,IACAsC,KAAK,CAACC,GAAN,KAAc,KAFf,EAGE;AACD;AACA,kBACCD,KAAK,CAACE,QAAN,IACA9B,MAAM,CAACT,QAAP,CAAgBU,aAAhB,KACClB,OAAO,CAACG,IAAR,CAAaC,UAAb,CACEqB,qBAJJ,EAKE;AACDoB,gBAAAA,KAAK,CAACG,cAAN;AACAhD,gBAAAA,OAAO,CAACG,IAAR,CAAaC,UAAb,CAAwBsB,oBAAxB,CAA6CP,KAA7C;AACA,eARD,MAQO,IACN,CAAE0B,KAAK,CAACE,QAAR,IACA9B,MAAM,CAACT,QAAP,CAAgBU,aAAhB,KACClB,OAAO,CAACG,IAAR,CAAaC,UAAb,CAAwBsB,oBAHnB,EAIL;AACDmB,gBAAAA,KAAK,CAACG,cAAN;AACAhD,gBAAAA,OAAO,CAACG,IAAR,CAAaC,UAAb,CAAwBqB,qBAAxB,CAA8CN,KAA9C;AACA;AACD;AACD;AACD,SAxEU;AAyEX8B,QAAAA,kBAAkB,EAAItD,KAAF,IAAa;AAChC,gBAAM;AAAEK,YAAAA,OAAF;AAAW6C,YAAAA;AAAX,cAAqBlD,KAA3B,CADgC,CAEhC;AACA;AACA;AACA;AACA;;AACA,cACC,CAAEK,OAAO,CAACG,IAAR,CAAaC,UAAb,CAAwBW,KAAxB,EAA+BC,QAA/B,CACD6B,KAAK,CAACK,aADL,CAAF,IAGAL,KAAK,CAACM,MAAN,KAAiBlC,MAAM,CAACT,QAAP,CAAgBU,aAJlC,EAKE;AACDN,YAAAA,SAAS,CAAEjB,KAAF,EAAS,OAAT,CAAT;AACAiB,YAAAA,SAAS,CAAEjB,KAAF,EAAS,OAAT,CAAT;AACA;AACD;AAzFU;AADP;AADE;AAvDD,CAAF,CAAP","sourcesContent":["/**\n * WordPress dependencies\n */\nimport { store as wpStore } from '@wordpress/interactivity';\n\nconst focusableSelectors = [\n\t'a[href]',\n\t'input:not([disabled]):not([type=\"hidden\"]):not([aria-hidden])',\n\t'select:not([disabled]):not([aria-hidden])',\n\t'textarea:not([disabled]):not([aria-hidden])',\n\t'button:not([disabled]):not([aria-hidden])',\n\t'[contenteditable]',\n\t'[tabindex]:not([tabindex^=\"-\"])',\n];\n\nconst openMenu = ( store, menuOpenedOn ) => {\n\tconst { context, ref, selectors } = store;\n\tselectors.core.navigation.menuOpenedBy( store )[ menuOpenedOn ] = true;\n\tcontext.core.navigation.previousFocus = ref;\n\tif ( context.core.navigation.type === 'overlay' ) {\n\t\t// Add a `has-modal-open` class to the <html> root.\n\t\tdocument.documentElement.classList.add( 'has-modal-open' );\n\t}\n};\n\nconst closeMenu = ( store, menuClosedOn ) => {\n\tconst { context, selectors } = store;\n\tselectors.core.navigation.menuOpenedBy( store )[ menuClosedOn ] = false;\n\t// Check if the menu is still open or not.\n\tif ( ! selectors.core.navigation.isMenuOpen( store ) ) {\n\t\tif (\n\t\t\tcontext.core.navigation.modal?.contains(\n\t\t\t\twindow.document.activeElement\n\t\t\t)\n\t\t) {\n\t\t\tcontext.core.navigation.previousFocus.focus();\n\t\t}\n\t\tcontext.core.navigation.modal = null;\n\t\tcontext.core.navigation.previousFocus = null;\n\t\tif ( context.core.navigation.type === 'overlay' ) {\n\t\t\tdocument.documentElement.classList.remove( 'has-modal-open' );\n\t\t}\n\t}\n};\n\nwpStore( {\n\teffects: {\n\t\tcore: {\n\t\t\tnavigation: {\n\t\t\t\tinitMenu: ( store ) => {\n\t\t\t\t\tconst { context, selectors, ref } = store;\n\t\t\t\t\tif ( selectors.core.navigation.isMenuOpen( store ) ) {\n\t\t\t\t\t\tconst focusableElements =\n\t\t\t\t\t\t\tref.querySelectorAll( focusableSelectors );\n\t\t\t\t\t\tcontext.core.navigation.modal = ref;\n\t\t\t\t\t\tcontext.core.navigation.firstFocusableElement =\n\t\t\t\t\t\t\tfocusableElements[ 0 ];\n\t\t\t\t\t\tcontext.core.navigation.lastFocusableElement =\n\t\t\t\t\t\t\tfocusableElements[ focusableElements.length - 1 ];\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tfocusFirstElement: ( store ) => {\n\t\t\t\t\tconst { selectors, ref } = store;\n\t\t\t\t\tif ( selectors.core.navigation.isMenuOpen( store ) ) {\n\t\t\t\t\t\tref.querySelector(\n\t\t\t\t\t\t\t'.wp-block-navigation-item > *:first-child'\n\t\t\t\t\t\t).focus();\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t},\n\t\t},\n\t},\n\tselectors: {\n\t\tcore: {\n\t\t\tnavigation: {\n\t\t\t\troleAttribute: ( store ) => {\n\t\t\t\t\tconst { context, selectors } = store;\n\t\t\t\t\treturn context.core.navigation.type === 'overlay' &&\n\t\t\t\t\t\tselectors.core.navigation.isMenuOpen( store )\n\t\t\t\t\t\t? 'dialog'\n\t\t\t\t\t\t: '';\n\t\t\t\t},\n\t\t\t\tisMenuOpen: ( { context } ) =>\n\t\t\t\t\t// The menu is opened if either `click`, `hover` or `focus` is true.\n\t\t\t\t\tObject.values(\n\t\t\t\t\t\tcontext.core.navigation[\n\t\t\t\t\t\t\tcontext.core.navigation.type === 'overlay'\n\t\t\t\t\t\t\t\t? 'overlayOpenedBy'\n\t\t\t\t\t\t\t\t: 'submenuOpenedBy'\n\t\t\t\t\t\t]\n\t\t\t\t\t).filter( Boolean ).length > 0,\n\t\t\t\tmenuOpenedBy: ( { context } ) =>\n\t\t\t\t\tcontext.core.navigation[\n\t\t\t\t\t\tcontext.core.navigation.type === 'overlay'\n\t\t\t\t\t\t\t? 'overlayOpenedBy'\n\t\t\t\t\t\t\t: 'submenuOpenedBy'\n\t\t\t\t\t],\n\t\t\t},\n\t\t},\n\t},\n\tactions: {\n\t\tcore: {\n\t\t\tnavigation: {\n\t\t\t\topenMenuOnHover( store ) {\n\t\t\t\t\tconst { navigation } = store.context.core;\n\t\t\t\t\tif (\n\t\t\t\t\t\tnavigation.type === 'submenu' &&\n\t\t\t\t\t\t// Only open on hover if the overlay is closed.\n\t\t\t\t\t\tObject.values(\n\t\t\t\t\t\t\tnavigation.overlayOpenedBy || {}\n\t\t\t\t\t\t).filter( Boolean ).length === 0\n\t\t\t\t\t)\n\t\t\t\t\t\topenMenu( store, 'hover' );\n\t\t\t\t},\n\t\t\t\tcloseMenuOnHover( store ) {\n\t\t\t\t\tcloseMenu( store, 'hover' );\n\t\t\t\t},\n\t\t\t\topenMenuOnClick( store ) {\n\t\t\t\t\topenMenu( store, 'click' );\n\t\t\t\t},\n\t\t\t\tcloseMenuOnClick( store ) {\n\t\t\t\t\tcloseMenu( store, 'click' );\n\t\t\t\t\tcloseMenu( store, 'focus' );\n\t\t\t\t},\n\t\t\t\topenMenuOnFocus( store ) {\n\t\t\t\t\topenMenu( store, 'focus' );\n\t\t\t\t},\n\t\t\t\ttoggleMenuOnClick: ( store ) => {\n\t\t\t\t\tconst { selectors } = store;\n\t\t\t\t\tconst menuOpenedBy =\n\t\t\t\t\t\tselectors.core.navigation.menuOpenedBy( store );\n\t\t\t\t\tif ( menuOpenedBy.click || menuOpenedBy.focus ) {\n\t\t\t\t\t\tcloseMenu( store, 'click' );\n\t\t\t\t\t\tcloseMenu( store, 'focus' );\n\t\t\t\t\t} else {\n\t\t\t\t\t\topenMenu( store, 'click' );\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\thandleMenuKeydown: ( store ) => {\n\t\t\t\t\tconst { context, selectors, event } = store;\n\t\t\t\t\tif (\n\t\t\t\t\t\tselectors.core.navigation.menuOpenedBy( store ).click\n\t\t\t\t\t) {\n\t\t\t\t\t\t// If Escape close the menu.\n\t\t\t\t\t\tif ( event?.key === 'Escape' ) {\n\t\t\t\t\t\t\tcloseMenu( store, 'click' );\n\t\t\t\t\t\t\tcloseMenu( store, 'focus' );\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Trap focus if it is an overlay (main menu).\n\t\t\t\t\t\tif (\n\t\t\t\t\t\t\tcontext.core.navigation.type === 'overlay' &&\n\t\t\t\t\t\t\tevent.key === 'Tab'\n\t\t\t\t\t\t) {\n\t\t\t\t\t\t\t// If shift + tab it change the direction.\n\t\t\t\t\t\t\tif (\n\t\t\t\t\t\t\t\tevent.shiftKey &&\n\t\t\t\t\t\t\t\twindow.document.activeElement ===\n\t\t\t\t\t\t\t\t\tcontext.core.navigation\n\t\t\t\t\t\t\t\t\t\t.firstFocusableElement\n\t\t\t\t\t\t\t) {\n\t\t\t\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\t\t\t\tcontext.core.navigation.lastFocusableElement.focus();\n\t\t\t\t\t\t\t} else if (\n\t\t\t\t\t\t\t\t! event.shiftKey &&\n\t\t\t\t\t\t\t\twindow.document.activeElement ===\n\t\t\t\t\t\t\t\t\tcontext.core.navigation.lastFocusableElement\n\t\t\t\t\t\t\t) {\n\t\t\t\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\t\t\t\tcontext.core.navigation.firstFocusableElement.focus();\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\t\t\t\thandleMenuFocusout: ( store ) => {\n\t\t\t\t\tconst { context, event } = store;\n\t\t\t\t\t// If focus is outside modal, and in the document, close menu\n\t\t\t\t\t// event.target === The element losing focus\n\t\t\t\t\t// event.relatedTarget === The element receiving focus (if any)\n\t\t\t\t\t// When focusout is outsite the document,\n\t\t\t\t\t// `window.document.activeElement` doesn't change.\n\t\t\t\t\tif (\n\t\t\t\t\t\t! context.core.navigation.modal?.contains(\n\t\t\t\t\t\t\tevent.relatedTarget\n\t\t\t\t\t\t) &&\n\t\t\t\t\t\tevent.target !== window.document.activeElement\n\t\t\t\t\t) {\n\t\t\t\t\t\tcloseMenu( store, 'click' );\n\t\t\t\t\t\tcloseMenu( store, 'focus' );\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t},\n\t\t},\n\t},\n} );\n"]}
@@ -5,7 +5,7 @@ import { createElement } from "@wordpress/element";
5
5
  */
6
6
  import { Button, Modal } from '@wordpress/components';
7
7
  import { __ } from '@wordpress/i18n';
8
- export const convertDescription = __('This menu is automatically kept in sync with pages on your site. You can manage the menu yourself by clicking "Edit" below.');
8
+ export const convertDescription = __('This page list is synced with the published pages on your site. Detach the page list to add, delete, or reorder pages yourself.');
9
9
  export function ConvertToLinksModal({
10
10
  onClick,
11
11
  onClose,
@@ -13,7 +13,7 @@ export function ConvertToLinksModal({
13
13
  }) {
14
14
  return createElement(Modal, {
15
15
  onRequestClose: onClose,
16
- title: __('Edit this menu'),
16
+ title: __('Edit Page List'),
17
17
  className: 'wp-block-page-list-modal',
18
18
  aria: {
19
19
  describedby: 'wp-block-page-list-modal__description'
@@ -29,6 +29,6 @@ export function ConvertToLinksModal({
29
29
  variant: "primary",
30
30
  disabled: disabled,
31
31
  onClick: onClick
32
- }, __('Edit'))));
32
+ }, __('Detach'))));
33
33
  }
34
34
  //# sourceMappingURL=convert-to-links-modal.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["@wordpress/block-library/src/page-list/convert-to-links-modal.js"],"names":["Button","Modal","__","convertDescription","ConvertToLinksModal","onClick","onClose","disabled","describedby"],"mappings":";;AAAA;AACA;AACA;AACA,SAASA,MAAT,EAAiBC,KAAjB,QAA8B,uBAA9B;AACA,SAASC,EAAT,QAAmB,iBAAnB;AAEA,OAAO,MAAMC,kBAAkB,GAAGD,EAAE,CACnC,6HADmC,CAA7B;AAIP,OAAO,SAASE,mBAAT,CAA8B;AAAEC,EAAAA,OAAF;AAAWC,EAAAA,OAAX;AAAoBC,EAAAA;AAApB,CAA9B,EAA+D;AACrE,SACC,cAAC,KAAD;AACC,IAAA,cAAc,EAAGD,OADlB;AAEC,IAAA,KAAK,EAAGJ,EAAE,CAAE,gBAAF,CAFX;AAGC,IAAA,SAAS,EAAG,0BAHb;AAIC,IAAA,IAAI,EAAG;AACNM,MAAAA,WAAW,EAAE;AADP;AAJR,KAQC;AAAG,IAAA,EAAE,EAAG;AAAR,KACGL,kBADH,CARD,EAWC;AAAK,IAAA,SAAS,EAAC;AAAf,KACC,cAAC,MAAD;AAAQ,IAAA,OAAO,EAAC,UAAhB;AAA2B,IAAA,OAAO,EAAGG;AAArC,KACGJ,EAAE,CAAE,QAAF,CADL,CADD,EAIC,cAAC,MAAD;AACC,IAAA,OAAO,EAAC,SADT;AAEC,IAAA,QAAQ,EAAGK,QAFZ;AAGC,IAAA,OAAO,EAAGF;AAHX,KAKGH,EAAE,CAAE,MAAF,CALL,CAJD,CAXD,CADD;AA0BA","sourcesContent":["/**\n * WordPress dependencies\n */\nimport { Button, Modal } from '@wordpress/components';\nimport { __ } from '@wordpress/i18n';\n\nexport const convertDescription = __(\n\t'This menu is automatically kept in sync with pages on your site. You can manage the menu yourself by clicking \"Edit\" below.'\n);\n\nexport function ConvertToLinksModal( { onClick, onClose, disabled } ) {\n\treturn (\n\t\t<Modal\n\t\t\tonRequestClose={ onClose }\n\t\t\ttitle={ __( 'Edit this menu' ) }\n\t\t\tclassName={ 'wp-block-page-list-modal' }\n\t\t\taria={ {\n\t\t\t\tdescribedby: 'wp-block-page-list-modal__description',\n\t\t\t} }\n\t\t>\n\t\t\t<p id={ 'wp-block-page-list-modal__description' }>\n\t\t\t\t{ convertDescription }\n\t\t\t</p>\n\t\t\t<div className=\"wp-block-page-list-modal-buttons\">\n\t\t\t\t<Button variant=\"tertiary\" onClick={ onClose }>\n\t\t\t\t\t{ __( 'Cancel' ) }\n\t\t\t\t</Button>\n\t\t\t\t<Button\n\t\t\t\t\tvariant=\"primary\"\n\t\t\t\t\tdisabled={ disabled }\n\t\t\t\t\tonClick={ onClick }\n\t\t\t\t>\n\t\t\t\t\t{ __( 'Edit' ) }\n\t\t\t\t</Button>\n\t\t\t</div>\n\t\t</Modal>\n\t);\n}\n"]}
1
+ {"version":3,"sources":["@wordpress/block-library/src/page-list/convert-to-links-modal.js"],"names":["Button","Modal","__","convertDescription","ConvertToLinksModal","onClick","onClose","disabled","describedby"],"mappings":";;AAAA;AACA;AACA;AACA,SAASA,MAAT,EAAiBC,KAAjB,QAA8B,uBAA9B;AACA,SAASC,EAAT,QAAmB,iBAAnB;AAEA,OAAO,MAAMC,kBAAkB,GAAGD,EAAE,CACnC,iIADmC,CAA7B;AAIP,OAAO,SAASE,mBAAT,CAA8B;AAAEC,EAAAA,OAAF;AAAWC,EAAAA,OAAX;AAAoBC,EAAAA;AAApB,CAA9B,EAA+D;AACrE,SACC,cAAC,KAAD;AACC,IAAA,cAAc,EAAGD,OADlB;AAEC,IAAA,KAAK,EAAGJ,EAAE,CAAE,gBAAF,CAFX;AAGC,IAAA,SAAS,EAAG,0BAHb;AAIC,IAAA,IAAI,EAAG;AACNM,MAAAA,WAAW,EAAE;AADP;AAJR,KAQC;AAAG,IAAA,EAAE,EAAG;AAAR,KACGL,kBADH,CARD,EAWC;AAAK,IAAA,SAAS,EAAC;AAAf,KACC,cAAC,MAAD;AAAQ,IAAA,OAAO,EAAC,UAAhB;AAA2B,IAAA,OAAO,EAAGG;AAArC,KACGJ,EAAE,CAAE,QAAF,CADL,CADD,EAIC,cAAC,MAAD;AACC,IAAA,OAAO,EAAC,SADT;AAEC,IAAA,QAAQ,EAAGK,QAFZ;AAGC,IAAA,OAAO,EAAGF;AAHX,KAKGH,EAAE,CAAE,QAAF,CALL,CAJD,CAXD,CADD;AA0BA","sourcesContent":["/**\n * WordPress dependencies\n */\nimport { Button, Modal } from '@wordpress/components';\nimport { __ } from '@wordpress/i18n';\n\nexport const convertDescription = __(\n\t'This page list is synced with the published pages on your site. Detach the page list to add, delete, or reorder pages yourself.'\n);\n\nexport function ConvertToLinksModal( { onClick, onClose, disabled } ) {\n\treturn (\n\t\t<Modal\n\t\t\tonRequestClose={ onClose }\n\t\t\ttitle={ __( 'Edit Page List' ) }\n\t\t\tclassName={ 'wp-block-page-list-modal' }\n\t\t\taria={ {\n\t\t\t\tdescribedby: 'wp-block-page-list-modal__description',\n\t\t\t} }\n\t\t>\n\t\t\t<p id={ 'wp-block-page-list-modal__description' }>\n\t\t\t\t{ convertDescription }\n\t\t\t</p>\n\t\t\t<div className=\"wp-block-page-list-modal-buttons\">\n\t\t\t\t<Button variant=\"tertiary\" onClick={ onClose }>\n\t\t\t\t\t{ __( 'Cancel' ) }\n\t\t\t\t</Button>\n\t\t\t\t<Button\n\t\t\t\t\tvariant=\"primary\"\n\t\t\t\t\tdisabled={ disabled }\n\t\t\t\t\tonClick={ onClick }\n\t\t\t\t>\n\t\t\t\t\t{ __( 'Detach' ) }\n\t\t\t\t</Button>\n\t\t\t</div>\n\t\t</Modal>\n\t);\n}\n"]}
@@ -138,11 +138,6 @@ export default function PageListEdit({
138
138
  return accumulator;
139
139
  }, new Map());
140
140
  }, [pages]);
141
- const convertToNavigationLinks = useConvertToNavigationLinks({
142
- clientId,
143
- pages,
144
- parentPageID
145
- });
146
141
  const blockProps = useBlockProps({
147
142
  className: classnames('wp-block-page-list', {
148
143
  'has-text-color': !!context.textColor,
@@ -153,8 +148,30 @@ export default function PageListEdit({
153
148
  style: { ...context.style?.color
154
149
  }
155
150
  });
151
+ const pagesTree = useMemo(function makePagesTree(parentId = 0, level = 0) {
152
+ const childPages = pagesByParentId.get(parentId);
153
+
154
+ if (!childPages?.length) {
155
+ return [];
156
+ }
156
157
 
157
- const getBlockList = (parentId = parentPageID) => {
158
+ return childPages.reduce((tree, page) => {
159
+ const hasChildren = pagesByParentId.has(page.id);
160
+ const item = {
161
+ value: page.id,
162
+ label: '— '.repeat(level) + page.title.rendered,
163
+ rawName: page.title.rendered
164
+ };
165
+ tree.push(item);
166
+
167
+ if (hasChildren) {
168
+ tree.push(...makePagesTree(page.id, level + 1));
169
+ }
170
+
171
+ return tree;
172
+ }, []);
173
+ }, [pagesByParentId]);
174
+ const blockList = useMemo(function getBlockList(parentId = parentPageID) {
158
175
  const childPages = pagesByParentId.get(parentId);
159
176
 
160
177
  if (!childPages?.length) {
@@ -177,45 +194,17 @@ export default function PageListEdit({
177
194
  template.push(item);
178
195
  return template;
179
196
  }, []);
180
- };
181
-
182
- const makePagesTree = (parentId = 0, level = 0) => {
183
- const childPages = pagesByParentId.get(parentId);
184
-
185
- if (!childPages?.length) {
186
- return [];
187
- }
188
-
189
- return childPages.reduce((tree, page) => {
190
- const hasChildren = pagesByParentId.has(page.id);
191
- const item = {
192
- value: page.id,
193
- label: '— '.repeat(level) + page.title.rendered,
194
- rawName: page.title.rendered
195
- };
196
- tree.push(item);
197
-
198
- if (hasChildren) {
199
- tree.push(...makePagesTree(page.id, level + 1));
200
- }
201
-
202
- return tree;
203
- }, []);
204
- };
205
-
206
- const pagesTree = useMemo(makePagesTree, [pagesByParentId]);
207
- const blockList = useMemo(getBlockList, [pagesByParentId, parentPageID]);
197
+ }, [pagesByParentId, parentPageID]);
208
198
  const {
209
199
  isNested,
210
200
  hasSelectedChild,
211
- parentBlock,
201
+ parentClientId,
212
202
  hasDraggedChild,
213
203
  isChildOfNavigation
214
204
  } = useSelect(select => {
215
205
  const {
216
206
  getBlockParentsByBlockName,
217
207
  hasSelectedInnerBlock,
218
- getBlockRootClientId,
219
208
  hasDraggedInnerBlock
220
209
  } = select(blockEditorStore);
221
210
  const blockParents = getBlockParentsByBlockName(clientId, 'core/navigation-submenu', true);
@@ -225,9 +214,15 @@ export default function PageListEdit({
225
214
  isChildOfNavigation: navigationBlockParents.length > 0,
226
215
  hasSelectedChild: hasSelectedInnerBlock(clientId, true),
227
216
  hasDraggedChild: hasDraggedInnerBlock(clientId, true),
228
- parentBlock: getBlockRootClientId(clientId)
217
+ parentClientId: navigationBlockParents[0]
229
218
  };
230
219
  }, [clientId]);
220
+ const convertToNavigationLinks = useConvertToNavigationLinks({
221
+ clientId,
222
+ pages,
223
+ parentClientId,
224
+ parentPageID
225
+ });
231
226
  const innerBlocksProps = useInnerBlocksProps(blockProps, {
232
227
  allowedBlocks: ['core/page-list-item'],
233
228
  renderAppender: false,
@@ -243,9 +238,9 @@ export default function PageListEdit({
243
238
  useEffect(() => {
244
239
  if (hasSelectedChild || hasDraggedChild) {
245
240
  openModal();
246
- selectBlock(parentBlock);
241
+ selectBlock(parentClientId);
247
242
  }
248
- }, [hasSelectedChild, hasDraggedChild, parentBlock, selectBlock, openModal]);
243
+ }, [hasSelectedChild, hasDraggedChild, parentClientId, selectBlock, openModal]);
249
244
  useEffect(() => {
250
245
  setAttributes({
251
246
  isNested
@@ -1 +1 @@
1
- {"version":3,"sources":["@wordpress/block-library/src/page-list/edit.js"],"names":["classnames","createBlock","InspectorControls","BlockControls","useBlockProps","useInnerBlocksProps","getColorClassName","store","blockEditorStore","Warning","PanelBody","ToolbarButton","Spinner","Notice","ComboboxControl","Button","__","sprintf","useMemo","useState","useEffect","useCallback","useEntityRecords","useSelect","useDispatch","useConvertToNavigationLinks","convertDescription","ConvertToLinksModal","MAX_PAGE_COUNT","NOOP","BlockContent","blockProps","innerBlocksProps","hasResolvedPages","blockList","pages","parentPageID","length","parentPageDetails","find","page","id","title","rendered","PageListEdit","context","clientId","attributes","setAttributes","isOpen","setOpen","openModal","closeModal","records","hasResolved","per_page","_fields","orderby","order","allowConvertToLinks","pagesByParentId","Map","sortedPages","sort","a","b","menu_order","localeCompare","reduce","accumulator","parent","has","get","push","set","convertToNavigationLinks","className","textColor","backgroundColor","style","color","getBlockList","parentId","childPages","template","hasChildren","pageProps","label","trim","link","url","item","children","makePagesTree","level","tree","value","repeat","rawName","pagesTree","isNested","hasSelectedChild","parentBlock","hasDraggedChild","isChildOfNavigation","select","getBlockParentsByBlockName","hasSelectedInnerBlock","getBlockRootClientId","hasDraggedInnerBlock","blockParents","navigationBlockParents","allowedBlocks","renderAppender","__unstableDisableDropZone","templateLock","onInput","onChange","selectBlock"],"mappings":"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","sourcesContent":["/**\n * External dependencies\n */\nimport classnames from 'classnames';\n\n/**\n * WordPress dependencies\n */\nimport { createBlock } from '@wordpress/blocks';\nimport {\n\tInspectorControls,\n\tBlockControls,\n\tuseBlockProps,\n\tuseInnerBlocksProps,\n\tgetColorClassName,\n\tstore as blockEditorStore,\n\tWarning,\n} from '@wordpress/block-editor';\nimport {\n\tPanelBody,\n\tToolbarButton,\n\tSpinner,\n\tNotice,\n\tComboboxControl,\n\tButton,\n} from '@wordpress/components';\nimport { __, sprintf } from '@wordpress/i18n';\nimport { useMemo, useState, useEffect, useCallback } from '@wordpress/element';\nimport { useEntityRecords } from '@wordpress/core-data';\nimport { useSelect, useDispatch } from '@wordpress/data';\n\n/**\n * Internal dependencies\n */\nimport { useConvertToNavigationLinks } from './use-convert-to-navigation-links';\nimport {\n\tconvertDescription,\n\tConvertToLinksModal,\n} from './convert-to-links-modal';\n\n// We only show the edit option when page count is <= MAX_PAGE_COUNT\n// Performance of Navigation Links is not good past this value.\nconst MAX_PAGE_COUNT = 100;\nconst NOOP = () => {};\nfunction BlockContent( {\n\tblockProps,\n\tinnerBlocksProps,\n\thasResolvedPages,\n\tblockList,\n\tpages,\n\tparentPageID,\n} ) {\n\tif ( ! hasResolvedPages ) {\n\t\treturn (\n\t\t\t<div { ...blockProps }>\n\t\t\t\t<div className=\"wp-block-page-list__loading-indicator-container\">\n\t\t\t\t\t<Spinner className=\"wp-block-page-list__loading-indicator\" />\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t);\n\t}\n\n\tif ( pages === null ) {\n\t\treturn (\n\t\t\t<div { ...blockProps }>\n\t\t\t\t<Notice status={ 'warning' } isDismissible={ false }>\n\t\t\t\t\t{ __( 'Page List: Cannot retrieve Pages.' ) }\n\t\t\t\t</Notice>\n\t\t\t</div>\n\t\t);\n\t}\n\n\tif ( pages.length === 0 ) {\n\t\treturn (\n\t\t\t<div { ...blockProps }>\n\t\t\t\t<Notice status={ 'info' } isDismissible={ false }>\n\t\t\t\t\t{ __( 'Page List: Cannot retrieve Pages.' ) }\n\t\t\t\t</Notice>\n\t\t\t</div>\n\t\t);\n\t}\n\n\tif ( blockList.length === 0 ) {\n\t\tconst parentPageDetails = pages.find(\n\t\t\t( page ) => page.id === parentPageID\n\t\t);\n\n\t\tif ( parentPageDetails?.title?.rendered ) {\n\t\t\treturn (\n\t\t\t\t<div { ...blockProps }>\n\t\t\t\t\t<Warning>\n\t\t\t\t\t\t{ sprintf(\n\t\t\t\t\t\t\t// translators: %s: Page title.\n\t\t\t\t\t\t\t__( 'Page List: \"%s\" page has no children.' ),\n\t\t\t\t\t\t\tparentPageDetails.title.rendered\n\t\t\t\t\t\t) }\n\t\t\t\t\t</Warning>\n\t\t\t\t</div>\n\t\t\t);\n\t\t}\n\n\t\treturn (\n\t\t\t<div { ...blockProps }>\n\t\t\t\t<Notice status={ 'warning' } isDismissible={ false }>\n\t\t\t\t\t{ __( 'Page List: Cannot retrieve Pages.' ) }\n\t\t\t\t</Notice>\n\t\t\t</div>\n\t\t);\n\t}\n\n\tif ( pages.length > 0 ) {\n\t\treturn <ul { ...innerBlocksProps }></ul>;\n\t}\n}\n\nexport default function PageListEdit( {\n\tcontext,\n\tclientId,\n\tattributes,\n\tsetAttributes,\n} ) {\n\tconst { parentPageID } = attributes;\n\tconst [ isOpen, setOpen ] = useState( false );\n\tconst openModal = useCallback( () => setOpen( true ), [] );\n\tconst closeModal = () => setOpen( false );\n\n\tconst { records: pages, hasResolved: hasResolvedPages } = useEntityRecords(\n\t\t'postType',\n\t\t'page',\n\t\t{\n\t\t\tper_page: MAX_PAGE_COUNT,\n\t\t\t_fields: [ 'id', 'link', 'menu_order', 'parent', 'title', 'type' ],\n\t\t\t// TODO: When https://core.trac.wordpress.org/ticket/39037 REST API support for multiple orderby\n\t\t\t// values is resolved, update 'orderby' to [ 'menu_order', 'post_title' ] to provide a consistent\n\t\t\t// sort.\n\t\t\torderby: 'menu_order',\n\t\t\torder: 'asc',\n\t\t}\n\t);\n\n\tconst allowConvertToLinks =\n\t\t'showSubmenuIcon' in context &&\n\t\tpages?.length > 0 &&\n\t\tpages?.length <= MAX_PAGE_COUNT;\n\n\tconst pagesByParentId = useMemo( () => {\n\t\tif ( pages === null ) {\n\t\t\treturn new Map();\n\t\t}\n\n\t\t// TODO: Once the REST API supports passing multiple values to\n\t\t// 'orderby', this can be removed.\n\t\t// https://core.trac.wordpress.org/ticket/39037\n\t\tconst sortedPages = pages.sort( ( a, b ) => {\n\t\t\tif ( a.menu_order === b.menu_order ) {\n\t\t\t\treturn a.title.rendered.localeCompare( b.title.rendered );\n\t\t\t}\n\t\t\treturn a.menu_order - b.menu_order;\n\t\t} );\n\n\t\treturn sortedPages.reduce( ( accumulator, page ) => {\n\t\t\tconst { parent } = page;\n\t\t\tif ( accumulator.has( parent ) ) {\n\t\t\t\taccumulator.get( parent ).push( page );\n\t\t\t} else {\n\t\t\t\taccumulator.set( parent, [ page ] );\n\t\t\t}\n\t\t\treturn accumulator;\n\t\t}, new Map() );\n\t}, [ pages ] );\n\n\tconst convertToNavigationLinks = useConvertToNavigationLinks( {\n\t\tclientId,\n\t\tpages,\n\t\tparentPageID,\n\t} );\n\n\tconst blockProps = useBlockProps( {\n\t\tclassName: classnames( 'wp-block-page-list', {\n\t\t\t'has-text-color': !! context.textColor,\n\t\t\t[ getColorClassName( 'color', context.textColor ) ]:\n\t\t\t\t!! context.textColor,\n\t\t\t'has-background': !! context.backgroundColor,\n\t\t\t[ getColorClassName(\n\t\t\t\t'background-color',\n\t\t\t\tcontext.backgroundColor\n\t\t\t) ]: !! context.backgroundColor,\n\t\t} ),\n\t\tstyle: { ...context.style?.color },\n\t} );\n\n\tconst getBlockList = ( parentId = parentPageID ) => {\n\t\tconst childPages = pagesByParentId.get( parentId );\n\n\t\tif ( ! childPages?.length ) {\n\t\t\treturn [];\n\t\t}\n\n\t\treturn childPages.reduce( ( template, page ) => {\n\t\t\tconst hasChildren = pagesByParentId.has( page.id );\n\t\t\tconst pageProps = {\n\t\t\t\tid: page.id,\n\t\t\t\tlabel:\n\t\t\t\t\t// translators: displayed when a page has an empty title.\n\t\t\t\t\tpage.title?.rendered?.trim() !== ''\n\t\t\t\t\t\t? page.title?.rendered\n\t\t\t\t\t\t: __( '(no title)' ),\n\t\t\t\ttitle: page.title?.rendered,\n\t\t\t\tlink: page.url,\n\t\t\t\thasChildren,\n\t\t\t};\n\t\t\tlet item = null;\n\t\t\tconst children = getBlockList( page.id );\n\t\t\titem = createBlock( 'core/page-list-item', pageProps, children );\n\t\t\ttemplate.push( item );\n\n\t\t\treturn template;\n\t\t}, [] );\n\t};\n\n\tconst makePagesTree = ( parentId = 0, level = 0 ) => {\n\t\tconst childPages = pagesByParentId.get( parentId );\n\n\t\tif ( ! childPages?.length ) {\n\t\t\treturn [];\n\t\t}\n\n\t\treturn childPages.reduce( ( tree, page ) => {\n\t\t\tconst hasChildren = pagesByParentId.has( page.id );\n\t\t\tconst item = {\n\t\t\t\tvalue: page.id,\n\t\t\t\tlabel: '— '.repeat( level ) + page.title.rendered,\n\t\t\t\trawName: page.title.rendered,\n\t\t\t};\n\t\t\ttree.push( item );\n\t\t\tif ( hasChildren ) {\n\t\t\t\ttree.push( ...makePagesTree( page.id, level + 1 ) );\n\t\t\t}\n\t\t\treturn tree;\n\t\t}, [] );\n\t};\n\n\tconst pagesTree = useMemo( makePagesTree, [ pagesByParentId ] );\n\n\tconst blockList = useMemo( getBlockList, [\n\t\tpagesByParentId,\n\t\tparentPageID,\n\t] );\n\n\tconst {\n\t\tisNested,\n\t\thasSelectedChild,\n\t\tparentBlock,\n\t\thasDraggedChild,\n\t\tisChildOfNavigation,\n\t} = useSelect(\n\t\t( select ) => {\n\t\t\tconst {\n\t\t\t\tgetBlockParentsByBlockName,\n\t\t\t\thasSelectedInnerBlock,\n\t\t\t\tgetBlockRootClientId,\n\t\t\t\thasDraggedInnerBlock,\n\t\t\t} = select( blockEditorStore );\n\t\t\tconst blockParents = getBlockParentsByBlockName(\n\t\t\t\tclientId,\n\t\t\t\t'core/navigation-submenu',\n\t\t\t\ttrue\n\t\t\t);\n\t\t\tconst navigationBlockParents = getBlockParentsByBlockName(\n\t\t\t\tclientId,\n\t\t\t\t'core/navigation',\n\t\t\t\ttrue\n\t\t\t);\n\t\t\treturn {\n\t\t\t\tisNested: blockParents.length > 0,\n\t\t\t\tisChildOfNavigation: navigationBlockParents.length > 0,\n\t\t\t\thasSelectedChild: hasSelectedInnerBlock( clientId, true ),\n\t\t\t\thasDraggedChild: hasDraggedInnerBlock( clientId, true ),\n\t\t\t\tparentBlock: getBlockRootClientId( clientId ),\n\t\t\t};\n\t\t},\n\t\t[ clientId ]\n\t);\n\n\tconst innerBlocksProps = useInnerBlocksProps( blockProps, {\n\t\tallowedBlocks: [ 'core/page-list-item' ],\n\t\trenderAppender: false,\n\t\t__unstableDisableDropZone: true,\n\t\ttemplateLock: isChildOfNavigation ? false : 'all',\n\t\tonInput: NOOP,\n\t\tonChange: NOOP,\n\t\tvalue: blockList,\n\t} );\n\n\tconst { selectBlock } = useDispatch( blockEditorStore );\n\n\tuseEffect( () => {\n\t\tif ( hasSelectedChild || hasDraggedChild ) {\n\t\t\topenModal();\n\t\t\tselectBlock( parentBlock );\n\t\t}\n\t}, [\n\t\thasSelectedChild,\n\t\thasDraggedChild,\n\t\tparentBlock,\n\t\tselectBlock,\n\t\topenModal,\n\t] );\n\n\tuseEffect( () => {\n\t\tsetAttributes( { isNested } );\n\t}, [ isNested, setAttributes ] );\n\n\treturn (\n\t\t<>\n\t\t\t<InspectorControls>\n\t\t\t\t{ pagesTree.length > 0 && (\n\t\t\t\t\t<PanelBody>\n\t\t\t\t\t\t<ComboboxControl\n\t\t\t\t\t\t\tclassName=\"editor-page-attributes__parent\"\n\t\t\t\t\t\t\tlabel={ __( 'Parent page' ) }\n\t\t\t\t\t\t\tvalue={ parentPageID }\n\t\t\t\t\t\t\toptions={ pagesTree }\n\t\t\t\t\t\t\tonChange={ ( value ) =>\n\t\t\t\t\t\t\t\tsetAttributes( { parentPageID: value ?? 0 } )\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\thelp={ __(\n\t\t\t\t\t\t\t\t'Choose a page to show only its subpages.'\n\t\t\t\t\t\t\t) }\n\t\t\t\t\t\t/>\n\t\t\t\t\t</PanelBody>\n\t\t\t\t) }\n\t\t\t\t{ allowConvertToLinks && (\n\t\t\t\t\t<PanelBody title={ __( 'Edit this menu' ) }>\n\t\t\t\t\t\t<p>{ convertDescription }</p>\n\t\t\t\t\t\t<Button\n\t\t\t\t\t\t\tvariant=\"primary\"\n\t\t\t\t\t\t\tdisabled={ ! hasResolvedPages }\n\t\t\t\t\t\t\tonClick={ convertToNavigationLinks }\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{ __( 'Edit' ) }\n\t\t\t\t\t\t</Button>\n\t\t\t\t\t</PanelBody>\n\t\t\t\t) }\n\t\t\t</InspectorControls>\n\t\t\t{ allowConvertToLinks && (\n\t\t\t\t<>\n\t\t\t\t\t<BlockControls group=\"other\">\n\t\t\t\t\t\t<ToolbarButton\n\t\t\t\t\t\t\ttitle={ __( 'Edit' ) }\n\t\t\t\t\t\t\tonClick={ openModal }\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{ __( 'Edit' ) }\n\t\t\t\t\t\t</ToolbarButton>\n\t\t\t\t\t</BlockControls>\n\t\t\t\t\t{ isOpen && (\n\t\t\t\t\t\t<ConvertToLinksModal\n\t\t\t\t\t\t\tonClick={ convertToNavigationLinks }\n\t\t\t\t\t\t\tonClose={ closeModal }\n\t\t\t\t\t\t\tdisabled={ ! hasResolvedPages }\n\t\t\t\t\t\t/>\n\t\t\t\t\t) }\n\t\t\t\t</>\n\t\t\t) }\n\t\t\t<BlockContent\n\t\t\t\tblockProps={ blockProps }\n\t\t\t\tinnerBlocksProps={ innerBlocksProps }\n\t\t\t\thasResolvedPages={ hasResolvedPages }\n\t\t\t\tblockList={ blockList }\n\t\t\t\tpages={ pages }\n\t\t\t\tparentPageID={ parentPageID }\n\t\t\t/>\n\t\t</>\n\t);\n}\n"]}
1
+ {"version":3,"sources":["@wordpress/block-library/src/page-list/edit.js"],"names":["classnames","createBlock","InspectorControls","BlockControls","useBlockProps","useInnerBlocksProps","getColorClassName","store","blockEditorStore","Warning","PanelBody","ToolbarButton","Spinner","Notice","ComboboxControl","Button","__","sprintf","useMemo","useState","useEffect","useCallback","useEntityRecords","useSelect","useDispatch","useConvertToNavigationLinks","convertDescription","ConvertToLinksModal","MAX_PAGE_COUNT","NOOP","BlockContent","blockProps","innerBlocksProps","hasResolvedPages","blockList","pages","parentPageID","length","parentPageDetails","find","page","id","title","rendered","PageListEdit","context","clientId","attributes","setAttributes","isOpen","setOpen","openModal","closeModal","records","hasResolved","per_page","_fields","orderby","order","allowConvertToLinks","pagesByParentId","Map","sortedPages","sort","a","b","menu_order","localeCompare","reduce","accumulator","parent","has","get","push","set","className","textColor","backgroundColor","style","color","pagesTree","makePagesTree","parentId","level","childPages","tree","hasChildren","item","value","label","repeat","rawName","getBlockList","template","pageProps","trim","link","url","children","isNested","hasSelectedChild","parentClientId","hasDraggedChild","isChildOfNavigation","select","getBlockParentsByBlockName","hasSelectedInnerBlock","hasDraggedInnerBlock","blockParents","navigationBlockParents","convertToNavigationLinks","allowedBlocks","renderAppender","__unstableDisableDropZone","templateLock","onInput","onChange","selectBlock"],"mappings":";;AAAA;AACA;AACA;AACA,OAAOA,UAAP,MAAuB,YAAvB;AAEA;AACA;AACA;;AACA,SAASC,WAAT,QAA4B,mBAA5B;AACA,SACCC,iBADD,EAECC,aAFD,EAGCC,aAHD,EAICC,mBAJD,EAKCC,iBALD,EAMCC,KAAK,IAAIC,gBANV,EAOCC,OAPD,QAQO,yBARP;AASA,SACCC,SADD,EAECC,aAFD,EAGCC,OAHD,EAICC,MAJD,EAKCC,eALD,EAMCC,MAND,QAOO,uBAPP;AAQA,SAASC,EAAT,EAAaC,OAAb,QAA4B,iBAA5B;AACA,SAASC,OAAT,EAAkBC,QAAlB,EAA4BC,SAA5B,EAAuCC,WAAvC,QAA0D,oBAA1D;AACA,SAASC,gBAAT,QAAiC,sBAAjC;AACA,SAASC,SAAT,EAAoBC,WAApB,QAAuC,iBAAvC;AAEA;AACA;AACA;;AACA,SAASC,2BAAT,QAA4C,mCAA5C;AACA,SACCC,kBADD,EAECC,mBAFD,QAGO,0BAHP,C,CAKA;AACA;;AACA,MAAMC,cAAc,GAAG,GAAvB;;AACA,MAAMC,IAAI,GAAG,MAAM,CAAE,CAArB;;AACA,SAASC,YAAT,CAAuB;AACtBC,EAAAA,UADsB;AAEtBC,EAAAA,gBAFsB;AAGtBC,EAAAA,gBAHsB;AAItBC,EAAAA,SAJsB;AAKtBC,EAAAA,KALsB;AAMtBC,EAAAA;AANsB,CAAvB,EAOI;AACH,MAAK,CAAEH,gBAAP,EAA0B;AACzB,WACC,0BAAUF;AAAV,OACC;AAAK,MAAA,SAAS,EAAC;AAAf,OACC,cAAC,OAAD;AAAS,MAAA,SAAS,EAAC;AAAnB,MADD,CADD,CADD;AAOA;;AAED,MAAKI,KAAK,KAAK,IAAf,EAAsB;AACrB,WACC,0BAAUJ;AAAV,OACC,cAAC,MAAD;AAAQ,MAAA,MAAM,EAAG,SAAjB;AAA6B,MAAA,aAAa,EAAG;AAA7C,OACGf,EAAE,CAAE,mCAAF,CADL,CADD,CADD;AAOA;;AAED,MAAKmB,KAAK,CAACE,MAAN,KAAiB,CAAtB,EAA0B;AACzB,WACC,0BAAUN;AAAV,OACC,cAAC,MAAD;AAAQ,MAAA,MAAM,EAAG,MAAjB;AAA0B,MAAA,aAAa,EAAG;AAA1C,OACGf,EAAE,CAAE,mCAAF,CADL,CADD,CADD;AAOA;;AAED,MAAKkB,SAAS,CAACG,MAAV,KAAqB,CAA1B,EAA8B;AAC7B,UAAMC,iBAAiB,GAAGH,KAAK,CAACI,IAAN,CACvBC,IAAF,IAAYA,IAAI,CAACC,EAAL,KAAYL,YADC,CAA1B;;AAIA,QAAKE,iBAAiB,EAAEI,KAAnB,EAA0BC,QAA/B,EAA0C;AACzC,aACC,0BAAUZ;AAAV,SACC,cAAC,OAAD,QACGd,OAAO,EACR;AACAD,MAAAA,EAAE,CAAE,uCAAF,CAFM,EAGRsB,iBAAiB,CAACI,KAAlB,CAAwBC,QAHhB,CADV,CADD,CADD;AAWA;;AAED,WACC,0BAAUZ;AAAV,OACC,cAAC,MAAD;AAAQ,MAAA,MAAM,EAAG,SAAjB;AAA6B,MAAA,aAAa,EAAG;AAA7C,OACGf,EAAE,CAAE,mCAAF,CADL,CADD,CADD;AAOA;;AAED,MAAKmB,KAAK,CAACE,MAAN,GAAe,CAApB,EAAwB;AACvB,WAAO,yBAASL;AAAT,MAAP;AACA;AACD;;AAED,eAAe,SAASY,YAAT,CAAuB;AACrCC,EAAAA,OADqC;AAErCC,EAAAA,QAFqC;AAGrCC,EAAAA,UAHqC;AAIrCC,EAAAA;AAJqC,CAAvB,EAKX;AACH,QAAM;AAAEZ,IAAAA;AAAF,MAAmBW,UAAzB;AACA,QAAM,CAAEE,MAAF,EAAUC,OAAV,IAAsB/B,QAAQ,CAAE,KAAF,CAApC;AACA,QAAMgC,SAAS,GAAG9B,WAAW,CAAE,MAAM6B,OAAO,CAAE,IAAF,CAAf,EAAyB,EAAzB,CAA7B;;AACA,QAAME,UAAU,GAAG,MAAMF,OAAO,CAAE,KAAF,CAAhC;;AAEA,QAAM;AAAEG,IAAAA,OAAO,EAAElB,KAAX;AAAkBmB,IAAAA,WAAW,EAAErB;AAA/B,MAAoDX,gBAAgB,CACzE,UADyE,EAEzE,MAFyE,EAGzE;AACCiC,IAAAA,QAAQ,EAAE3B,cADX;AAEC4B,IAAAA,OAAO,EAAE,CAAE,IAAF,EAAQ,MAAR,EAAgB,YAAhB,EAA8B,QAA9B,EAAwC,OAAxC,EAAiD,MAAjD,CAFV;AAGC;AACA;AACA;AACAC,IAAAA,OAAO,EAAE,YANV;AAOCC,IAAAA,KAAK,EAAE;AAPR,GAHyE,CAA1E;AAcA,QAAMC,mBAAmB,GACxB,qBAAqBd,OAArB,IACAV,KAAK,EAAEE,MAAP,GAAgB,CADhB,IAEAF,KAAK,EAAEE,MAAP,IAAiBT,cAHlB;AAKA,QAAMgC,eAAe,GAAG1C,OAAO,CAAE,MAAM;AACtC,QAAKiB,KAAK,KAAK,IAAf,EAAsB;AACrB,aAAO,IAAI0B,GAAJ,EAAP;AACA,KAHqC,CAKtC;AACA;AACA;;;AACA,UAAMC,WAAW,GAAG3B,KAAK,CAAC4B,IAAN,CAAY,CAAEC,CAAF,EAAKC,CAAL,KAAY;AAC3C,UAAKD,CAAC,CAACE,UAAF,KAAiBD,CAAC,CAACC,UAAxB,EAAqC;AACpC,eAAOF,CAAC,CAACtB,KAAF,CAAQC,QAAR,CAAiBwB,aAAjB,CAAgCF,CAAC,CAACvB,KAAF,CAAQC,QAAxC,CAAP;AACA;;AACD,aAAOqB,CAAC,CAACE,UAAF,GAAeD,CAAC,CAACC,UAAxB;AACA,KALmB,CAApB;AAOA,WAAOJ,WAAW,CAACM,MAAZ,CAAoB,CAAEC,WAAF,EAAe7B,IAAf,KAAyB;AACnD,YAAM;AAAE8B,QAAAA;AAAF,UAAa9B,IAAnB;;AACA,UAAK6B,WAAW,CAACE,GAAZ,CAAiBD,MAAjB,CAAL,EAAiC;AAChCD,QAAAA,WAAW,CAACG,GAAZ,CAAiBF,MAAjB,EAA0BG,IAA1B,CAAgCjC,IAAhC;AACA,OAFD,MAEO;AACN6B,QAAAA,WAAW,CAACK,GAAZ,CAAiBJ,MAAjB,EAAyB,CAAE9B,IAAF,CAAzB;AACA;;AACD,aAAO6B,WAAP;AACA,KARM,EAQJ,IAAIR,GAAJ,EARI,CAAP;AASA,GAxB8B,EAwB5B,CAAE1B,KAAF,CAxB4B,CAA/B;AA0BA,QAAMJ,UAAU,GAAG3B,aAAa,CAAE;AACjCuE,IAAAA,SAAS,EAAE3E,UAAU,CAAE,oBAAF,EAAwB;AAC5C,wBAAkB,CAAC,CAAE6C,OAAO,CAAC+B,SADe;AAE5C,OAAEtE,iBAAiB,CAAE,OAAF,EAAWuC,OAAO,CAAC+B,SAAnB,CAAnB,GACC,CAAC,CAAE/B,OAAO,CAAC+B,SAHgC;AAI5C,wBAAkB,CAAC,CAAE/B,OAAO,CAACgC,eAJe;AAK5C,OAAEvE,iBAAiB,CAClB,kBADkB,EAElBuC,OAAO,CAACgC,eAFU,CAAnB,GAGK,CAAC,CAAEhC,OAAO,CAACgC;AAR4B,KAAxB,CADY;AAWjCC,IAAAA,KAAK,EAAE,EAAE,GAAGjC,OAAO,CAACiC,KAAR,EAAeC;AAApB;AAX0B,GAAF,CAAhC;AAcA,QAAMC,SAAS,GAAG9D,OAAO,CACxB,SAAS+D,aAAT,CAAwBC,QAAQ,GAAG,CAAnC,EAAsCC,KAAK,GAAG,CAA9C,EAAkD;AACjD,UAAMC,UAAU,GAAGxB,eAAe,CAACY,GAAhB,CAAqBU,QAArB,CAAnB;;AAEA,QAAK,CAAEE,UAAU,EAAE/C,MAAnB,EAA4B;AAC3B,aAAO,EAAP;AACA;;AAED,WAAO+C,UAAU,CAAChB,MAAX,CAAmB,CAAEiB,IAAF,EAAQ7C,IAAR,KAAkB;AAC3C,YAAM8C,WAAW,GAAG1B,eAAe,CAACW,GAAhB,CAAqB/B,IAAI,CAACC,EAA1B,CAApB;AACA,YAAM8C,IAAI,GAAG;AACZC,QAAAA,KAAK,EAAEhD,IAAI,CAACC,EADA;AAEZgD,QAAAA,KAAK,EAAE,KAAKC,MAAL,CAAaP,KAAb,IAAuB3C,IAAI,CAACE,KAAL,CAAWC,QAF7B;AAGZgD,QAAAA,OAAO,EAAEnD,IAAI,CAACE,KAAL,CAAWC;AAHR,OAAb;AAKA0C,MAAAA,IAAI,CAACZ,IAAL,CAAWc,IAAX;;AACA,UAAKD,WAAL,EAAmB;AAClBD,QAAAA,IAAI,CAACZ,IAAL,CAAW,GAAGQ,aAAa,CAAEzC,IAAI,CAACC,EAAP,EAAW0C,KAAK,GAAG,CAAnB,CAA3B;AACA;;AACD,aAAOE,IAAP;AACA,KAZM,EAYJ,EAZI,CAAP;AAaA,GArBuB,EAsBxB,CAAEzB,eAAF,CAtBwB,CAAzB;AAyBA,QAAM1B,SAAS,GAAGhB,OAAO,CACxB,SAAS0E,YAAT,CAAuBV,QAAQ,GAAG9C,YAAlC,EAAiD;AAChD,UAAMgD,UAAU,GAAGxB,eAAe,CAACY,GAAhB,CAAqBU,QAArB,CAAnB;;AAEA,QAAK,CAAEE,UAAU,EAAE/C,MAAnB,EAA4B;AAC3B,aAAO,EAAP;AACA;;AAED,WAAO+C,UAAU,CAAChB,MAAX,CAAmB,CAAEyB,QAAF,EAAYrD,IAAZ,KAAsB;AAC/C,YAAM8C,WAAW,GAAG1B,eAAe,CAACW,GAAhB,CAAqB/B,IAAI,CAACC,EAA1B,CAApB;AACA,YAAMqD,SAAS,GAAG;AACjBrD,QAAAA,EAAE,EAAED,IAAI,CAACC,EADQ;AAEjBgD,QAAAA,KAAK,EACJ;AACAjD,QAAAA,IAAI,CAACE,KAAL,EAAYC,QAAZ,EAAsBoD,IAAtB,OAAiC,EAAjC,GACGvD,IAAI,CAACE,KAAL,EAAYC,QADf,GAEG3B,EAAE,CAAE,YAAF,CANW;AAOjB0B,QAAAA,KAAK,EAAEF,IAAI,CAACE,KAAL,EAAYC,QAPF;AAQjBqD,QAAAA,IAAI,EAAExD,IAAI,CAACyD,GARM;AASjBX,QAAAA;AATiB,OAAlB;AAWA,UAAIC,IAAI,GAAG,IAAX;AACA,YAAMW,QAAQ,GAAGN,YAAY,CAAEpD,IAAI,CAACC,EAAP,CAA7B;AACA8C,MAAAA,IAAI,GAAGtF,WAAW,CACjB,qBADiB,EAEjB6F,SAFiB,EAGjBI,QAHiB,CAAlB;AAKAL,MAAAA,QAAQ,CAACpB,IAAT,CAAec,IAAf;AAEA,aAAOM,QAAP;AACA,KAvBM,EAuBJ,EAvBI,CAAP;AAwBA,GAhCuB,EAiCxB,CAAEjC,eAAF,EAAmBxB,YAAnB,CAjCwB,CAAzB;AAoCA,QAAM;AACL+D,IAAAA,QADK;AAELC,IAAAA,gBAFK;AAGLC,IAAAA,cAHK;AAILC,IAAAA,eAJK;AAKLC,IAAAA;AALK,MAMFhF,SAAS,CACViF,MAAF,IAAc;AACb,UAAM;AACLC,MAAAA,0BADK;AAELC,MAAAA,qBAFK;AAGLC,MAAAA;AAHK,QAIFH,MAAM,CAAEhG,gBAAF,CAJV;AAKA,UAAMoG,YAAY,GAAGH,0BAA0B,CAC9C3D,QAD8C,EAE9C,yBAF8C,EAG9C,IAH8C,CAA/C;AAKA,UAAM+D,sBAAsB,GAAGJ,0BAA0B,CACxD3D,QADwD,EAExD,iBAFwD,EAGxD,IAHwD,CAAzD;AAKA,WAAO;AACNqD,MAAAA,QAAQ,EAAES,YAAY,CAACvE,MAAb,GAAsB,CAD1B;AAENkE,MAAAA,mBAAmB,EAAEM,sBAAsB,CAACxE,MAAvB,GAAgC,CAF/C;AAGN+D,MAAAA,gBAAgB,EAAEM,qBAAqB,CAAE5D,QAAF,EAAY,IAAZ,CAHjC;AAINwD,MAAAA,eAAe,EAAEK,oBAAoB,CAAE7D,QAAF,EAAY,IAAZ,CAJ/B;AAKNuD,MAAAA,cAAc,EAAEQ,sBAAsB,CAAE,CAAF;AALhC,KAAP;AAOA,GAxBW,EAyBZ,CAAE/D,QAAF,CAzBY,CANb;AAkCA,QAAMgE,wBAAwB,GAAGrF,2BAA2B,CAAE;AAC7DqB,IAAAA,QAD6D;AAE7DX,IAAAA,KAF6D;AAG7DkE,IAAAA,cAH6D;AAI7DjE,IAAAA;AAJ6D,GAAF,CAA5D;AAOA,QAAMJ,gBAAgB,GAAG3B,mBAAmB,CAAE0B,UAAF,EAAc;AACzDgF,IAAAA,aAAa,EAAE,CAAE,qBAAF,CAD0C;AAEzDC,IAAAA,cAAc,EAAE,KAFyC;AAGzDC,IAAAA,yBAAyB,EAAE,IAH8B;AAIzDC,IAAAA,YAAY,EAAEX,mBAAmB,GAAG,KAAH,GAAW,KAJa;AAKzDY,IAAAA,OAAO,EAAEtF,IALgD;AAMzDuF,IAAAA,QAAQ,EAAEvF,IAN+C;AAOzD2D,IAAAA,KAAK,EAAEtD;AAPkD,GAAd,CAA5C;AAUA,QAAM;AAAEmF,IAAAA;AAAF,MAAkB7F,WAAW,CAAEhB,gBAAF,CAAnC;AAEAY,EAAAA,SAAS,CAAE,MAAM;AAChB,QAAKgF,gBAAgB,IAAIE,eAAzB,EAA2C;AAC1CnD,MAAAA,SAAS;AACTkE,MAAAA,WAAW,CAAEhB,cAAF,CAAX;AACA;AACD,GALQ,EAKN,CACFD,gBADE,EAEFE,eAFE,EAGFD,cAHE,EAIFgB,WAJE,EAKFlE,SALE,CALM,CAAT;AAaA/B,EAAAA,SAAS,CAAE,MAAM;AAChB4B,IAAAA,aAAa,CAAE;AAAEmD,MAAAA;AAAF,KAAF,CAAb;AACA,GAFQ,EAEN,CAAEA,QAAF,EAAYnD,aAAZ,CAFM,CAAT;AAIA,SACC,8BACC,cAAC,iBAAD,QACGgC,SAAS,CAAC3C,MAAV,GAAmB,CAAnB,IACD,cAAC,SAAD,QACC,cAAC,eAAD;AACC,IAAA,SAAS,EAAC,gCADX;AAEC,IAAA,KAAK,EAAGrB,EAAE,CAAE,aAAF,CAFX;AAGC,IAAA,KAAK,EAAGoB,YAHT;AAIC,IAAA,OAAO,EAAG4C,SAJX;AAKC,IAAA,QAAQ,EAAKQ,KAAF,IACVxC,aAAa,CAAE;AAAEZ,MAAAA,YAAY,EAAEoD,KAAF,aAAEA,KAAF,cAAEA,KAAF,GAAW;AAAzB,KAAF,CANf;AAQC,IAAA,IAAI,EAAGxE,EAAE,CACR,0CADQ;AARV,IADD,CAFF,EAiBG2C,mBAAmB,IACpB,cAAC,SAAD;AAAW,IAAA,KAAK,EAAG3C,EAAE,CAAE,gBAAF;AAArB,KACC,yBAAKU,kBAAL,CADD,EAEC,cAAC,MAAD;AACC,IAAA,OAAO,EAAC,SADT;AAEC,IAAA,QAAQ,EAAG,CAAEO,gBAFd;AAGC,IAAA,OAAO,EAAG6E;AAHX,KAKG9F,EAAE,CAAE,MAAF,CALL,CAFD,CAlBF,CADD,EA+BG2C,mBAAmB,IACpB,8BACC,cAAC,aAAD;AAAe,IAAA,KAAK,EAAC;AAArB,KACC,cAAC,aAAD;AACC,IAAA,KAAK,EAAG3C,EAAE,CAAE,MAAF,CADX;AAEC,IAAA,OAAO,EAAGmC;AAFX,KAIGnC,EAAE,CAAE,MAAF,CAJL,CADD,CADD,EASGiC,MAAM,IACP,cAAC,mBAAD;AACC,IAAA,OAAO,EAAG6D,wBADX;AAEC,IAAA,OAAO,EAAG1D,UAFX;AAGC,IAAA,QAAQ,EAAG,CAAEnB;AAHd,IAVF,CAhCF,EAkDC,cAAC,YAAD;AACC,IAAA,UAAU,EAAGF,UADd;AAEC,IAAA,gBAAgB,EAAGC,gBAFpB;AAGC,IAAA,gBAAgB,EAAGC,gBAHpB;AAIC,IAAA,SAAS,EAAGC,SAJb;AAKC,IAAA,KAAK,EAAGC,KALT;AAMC,IAAA,YAAY,EAAGC;AANhB,IAlDD,CADD;AA6DA","sourcesContent":["/**\n * External dependencies\n */\nimport classnames from 'classnames';\n\n/**\n * WordPress dependencies\n */\nimport { createBlock } from '@wordpress/blocks';\nimport {\n\tInspectorControls,\n\tBlockControls,\n\tuseBlockProps,\n\tuseInnerBlocksProps,\n\tgetColorClassName,\n\tstore as blockEditorStore,\n\tWarning,\n} from '@wordpress/block-editor';\nimport {\n\tPanelBody,\n\tToolbarButton,\n\tSpinner,\n\tNotice,\n\tComboboxControl,\n\tButton,\n} from '@wordpress/components';\nimport { __, sprintf } from '@wordpress/i18n';\nimport { useMemo, useState, useEffect, useCallback } from '@wordpress/element';\nimport { useEntityRecords } from '@wordpress/core-data';\nimport { useSelect, useDispatch } from '@wordpress/data';\n\n/**\n * Internal dependencies\n */\nimport { useConvertToNavigationLinks } from './use-convert-to-navigation-links';\nimport {\n\tconvertDescription,\n\tConvertToLinksModal,\n} from './convert-to-links-modal';\n\n// We only show the edit option when page count is <= MAX_PAGE_COUNT\n// Performance of Navigation Links is not good past this value.\nconst MAX_PAGE_COUNT = 100;\nconst NOOP = () => {};\nfunction BlockContent( {\n\tblockProps,\n\tinnerBlocksProps,\n\thasResolvedPages,\n\tblockList,\n\tpages,\n\tparentPageID,\n} ) {\n\tif ( ! hasResolvedPages ) {\n\t\treturn (\n\t\t\t<div { ...blockProps }>\n\t\t\t\t<div className=\"wp-block-page-list__loading-indicator-container\">\n\t\t\t\t\t<Spinner className=\"wp-block-page-list__loading-indicator\" />\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t);\n\t}\n\n\tif ( pages === null ) {\n\t\treturn (\n\t\t\t<div { ...blockProps }>\n\t\t\t\t<Notice status={ 'warning' } isDismissible={ false }>\n\t\t\t\t\t{ __( 'Page List: Cannot retrieve Pages.' ) }\n\t\t\t\t</Notice>\n\t\t\t</div>\n\t\t);\n\t}\n\n\tif ( pages.length === 0 ) {\n\t\treturn (\n\t\t\t<div { ...blockProps }>\n\t\t\t\t<Notice status={ 'info' } isDismissible={ false }>\n\t\t\t\t\t{ __( 'Page List: Cannot retrieve Pages.' ) }\n\t\t\t\t</Notice>\n\t\t\t</div>\n\t\t);\n\t}\n\n\tif ( blockList.length === 0 ) {\n\t\tconst parentPageDetails = pages.find(\n\t\t\t( page ) => page.id === parentPageID\n\t\t);\n\n\t\tif ( parentPageDetails?.title?.rendered ) {\n\t\t\treturn (\n\t\t\t\t<div { ...blockProps }>\n\t\t\t\t\t<Warning>\n\t\t\t\t\t\t{ sprintf(\n\t\t\t\t\t\t\t// translators: %s: Page title.\n\t\t\t\t\t\t\t__( 'Page List: \"%s\" page has no children.' ),\n\t\t\t\t\t\t\tparentPageDetails.title.rendered\n\t\t\t\t\t\t) }\n\t\t\t\t\t</Warning>\n\t\t\t\t</div>\n\t\t\t);\n\t\t}\n\n\t\treturn (\n\t\t\t<div { ...blockProps }>\n\t\t\t\t<Notice status={ 'warning' } isDismissible={ false }>\n\t\t\t\t\t{ __( 'Page List: Cannot retrieve Pages.' ) }\n\t\t\t\t</Notice>\n\t\t\t</div>\n\t\t);\n\t}\n\n\tif ( pages.length > 0 ) {\n\t\treturn <ul { ...innerBlocksProps }></ul>;\n\t}\n}\n\nexport default function PageListEdit( {\n\tcontext,\n\tclientId,\n\tattributes,\n\tsetAttributes,\n} ) {\n\tconst { parentPageID } = attributes;\n\tconst [ isOpen, setOpen ] = useState( false );\n\tconst openModal = useCallback( () => setOpen( true ), [] );\n\tconst closeModal = () => setOpen( false );\n\n\tconst { records: pages, hasResolved: hasResolvedPages } = useEntityRecords(\n\t\t'postType',\n\t\t'page',\n\t\t{\n\t\t\tper_page: MAX_PAGE_COUNT,\n\t\t\t_fields: [ 'id', 'link', 'menu_order', 'parent', 'title', 'type' ],\n\t\t\t// TODO: When https://core.trac.wordpress.org/ticket/39037 REST API support for multiple orderby\n\t\t\t// values is resolved, update 'orderby' to [ 'menu_order', 'post_title' ] to provide a consistent\n\t\t\t// sort.\n\t\t\torderby: 'menu_order',\n\t\t\torder: 'asc',\n\t\t}\n\t);\n\n\tconst allowConvertToLinks =\n\t\t'showSubmenuIcon' in context &&\n\t\tpages?.length > 0 &&\n\t\tpages?.length <= MAX_PAGE_COUNT;\n\n\tconst pagesByParentId = useMemo( () => {\n\t\tif ( pages === null ) {\n\t\t\treturn new Map();\n\t\t}\n\n\t\t// TODO: Once the REST API supports passing multiple values to\n\t\t// 'orderby', this can be removed.\n\t\t// https://core.trac.wordpress.org/ticket/39037\n\t\tconst sortedPages = pages.sort( ( a, b ) => {\n\t\t\tif ( a.menu_order === b.menu_order ) {\n\t\t\t\treturn a.title.rendered.localeCompare( b.title.rendered );\n\t\t\t}\n\t\t\treturn a.menu_order - b.menu_order;\n\t\t} );\n\n\t\treturn sortedPages.reduce( ( accumulator, page ) => {\n\t\t\tconst { parent } = page;\n\t\t\tif ( accumulator.has( parent ) ) {\n\t\t\t\taccumulator.get( parent ).push( page );\n\t\t\t} else {\n\t\t\t\taccumulator.set( parent, [ page ] );\n\t\t\t}\n\t\t\treturn accumulator;\n\t\t}, new Map() );\n\t}, [ pages ] );\n\n\tconst blockProps = useBlockProps( {\n\t\tclassName: classnames( 'wp-block-page-list', {\n\t\t\t'has-text-color': !! context.textColor,\n\t\t\t[ getColorClassName( 'color', context.textColor ) ]:\n\t\t\t\t!! context.textColor,\n\t\t\t'has-background': !! context.backgroundColor,\n\t\t\t[ getColorClassName(\n\t\t\t\t'background-color',\n\t\t\t\tcontext.backgroundColor\n\t\t\t) ]: !! context.backgroundColor,\n\t\t} ),\n\t\tstyle: { ...context.style?.color },\n\t} );\n\n\tconst pagesTree = useMemo(\n\t\tfunction makePagesTree( parentId = 0, level = 0 ) {\n\t\t\tconst childPages = pagesByParentId.get( parentId );\n\n\t\t\tif ( ! childPages?.length ) {\n\t\t\t\treturn [];\n\t\t\t}\n\n\t\t\treturn childPages.reduce( ( tree, page ) => {\n\t\t\t\tconst hasChildren = pagesByParentId.has( page.id );\n\t\t\t\tconst item = {\n\t\t\t\t\tvalue: page.id,\n\t\t\t\t\tlabel: '— '.repeat( level ) + page.title.rendered,\n\t\t\t\t\trawName: page.title.rendered,\n\t\t\t\t};\n\t\t\t\ttree.push( item );\n\t\t\t\tif ( hasChildren ) {\n\t\t\t\t\ttree.push( ...makePagesTree( page.id, level + 1 ) );\n\t\t\t\t}\n\t\t\t\treturn tree;\n\t\t\t}, [] );\n\t\t},\n\t\t[ pagesByParentId ]\n\t);\n\n\tconst blockList = useMemo(\n\t\tfunction getBlockList( parentId = parentPageID ) {\n\t\t\tconst childPages = pagesByParentId.get( parentId );\n\n\t\t\tif ( ! childPages?.length ) {\n\t\t\t\treturn [];\n\t\t\t}\n\n\t\t\treturn childPages.reduce( ( template, page ) => {\n\t\t\t\tconst hasChildren = pagesByParentId.has( page.id );\n\t\t\t\tconst pageProps = {\n\t\t\t\t\tid: page.id,\n\t\t\t\t\tlabel:\n\t\t\t\t\t\t// translators: displayed when a page has an empty title.\n\t\t\t\t\t\tpage.title?.rendered?.trim() !== ''\n\t\t\t\t\t\t\t? page.title?.rendered\n\t\t\t\t\t\t\t: __( '(no title)' ),\n\t\t\t\t\ttitle: page.title?.rendered,\n\t\t\t\t\tlink: page.url,\n\t\t\t\t\thasChildren,\n\t\t\t\t};\n\t\t\t\tlet item = null;\n\t\t\t\tconst children = getBlockList( page.id );\n\t\t\t\titem = createBlock(\n\t\t\t\t\t'core/page-list-item',\n\t\t\t\t\tpageProps,\n\t\t\t\t\tchildren\n\t\t\t\t);\n\t\t\t\ttemplate.push( item );\n\n\t\t\t\treturn template;\n\t\t\t}, [] );\n\t\t},\n\t\t[ pagesByParentId, parentPageID ]\n\t);\n\n\tconst {\n\t\tisNested,\n\t\thasSelectedChild,\n\t\tparentClientId,\n\t\thasDraggedChild,\n\t\tisChildOfNavigation,\n\t} = useSelect(\n\t\t( select ) => {\n\t\t\tconst {\n\t\t\t\tgetBlockParentsByBlockName,\n\t\t\t\thasSelectedInnerBlock,\n\t\t\t\thasDraggedInnerBlock,\n\t\t\t} = select( blockEditorStore );\n\t\t\tconst blockParents = getBlockParentsByBlockName(\n\t\t\t\tclientId,\n\t\t\t\t'core/navigation-submenu',\n\t\t\t\ttrue\n\t\t\t);\n\t\t\tconst navigationBlockParents = getBlockParentsByBlockName(\n\t\t\t\tclientId,\n\t\t\t\t'core/navigation',\n\t\t\t\ttrue\n\t\t\t);\n\t\t\treturn {\n\t\t\t\tisNested: blockParents.length > 0,\n\t\t\t\tisChildOfNavigation: navigationBlockParents.length > 0,\n\t\t\t\thasSelectedChild: hasSelectedInnerBlock( clientId, true ),\n\t\t\t\thasDraggedChild: hasDraggedInnerBlock( clientId, true ),\n\t\t\t\tparentClientId: navigationBlockParents[ 0 ],\n\t\t\t};\n\t\t},\n\t\t[ clientId ]\n\t);\n\n\tconst convertToNavigationLinks = useConvertToNavigationLinks( {\n\t\tclientId,\n\t\tpages,\n\t\tparentClientId,\n\t\tparentPageID,\n\t} );\n\n\tconst innerBlocksProps = useInnerBlocksProps( blockProps, {\n\t\tallowedBlocks: [ 'core/page-list-item' ],\n\t\trenderAppender: false,\n\t\t__unstableDisableDropZone: true,\n\t\ttemplateLock: isChildOfNavigation ? false : 'all',\n\t\tonInput: NOOP,\n\t\tonChange: NOOP,\n\t\tvalue: blockList,\n\t} );\n\n\tconst { selectBlock } = useDispatch( blockEditorStore );\n\n\tuseEffect( () => {\n\t\tif ( hasSelectedChild || hasDraggedChild ) {\n\t\t\topenModal();\n\t\t\tselectBlock( parentClientId );\n\t\t}\n\t}, [\n\t\thasSelectedChild,\n\t\thasDraggedChild,\n\t\tparentClientId,\n\t\tselectBlock,\n\t\topenModal,\n\t] );\n\n\tuseEffect( () => {\n\t\tsetAttributes( { isNested } );\n\t}, [ isNested, setAttributes ] );\n\n\treturn (\n\t\t<>\n\t\t\t<InspectorControls>\n\t\t\t\t{ pagesTree.length > 0 && (\n\t\t\t\t\t<PanelBody>\n\t\t\t\t\t\t<ComboboxControl\n\t\t\t\t\t\t\tclassName=\"editor-page-attributes__parent\"\n\t\t\t\t\t\t\tlabel={ __( 'Parent page' ) }\n\t\t\t\t\t\t\tvalue={ parentPageID }\n\t\t\t\t\t\t\toptions={ pagesTree }\n\t\t\t\t\t\t\tonChange={ ( value ) =>\n\t\t\t\t\t\t\t\tsetAttributes( { parentPageID: value ?? 0 } )\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\thelp={ __(\n\t\t\t\t\t\t\t\t'Choose a page to show only its subpages.'\n\t\t\t\t\t\t\t) }\n\t\t\t\t\t\t/>\n\t\t\t\t\t</PanelBody>\n\t\t\t\t) }\n\t\t\t\t{ allowConvertToLinks && (\n\t\t\t\t\t<PanelBody title={ __( 'Edit this menu' ) }>\n\t\t\t\t\t\t<p>{ convertDescription }</p>\n\t\t\t\t\t\t<Button\n\t\t\t\t\t\t\tvariant=\"primary\"\n\t\t\t\t\t\t\tdisabled={ ! hasResolvedPages }\n\t\t\t\t\t\t\tonClick={ convertToNavigationLinks }\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{ __( 'Edit' ) }\n\t\t\t\t\t\t</Button>\n\t\t\t\t\t</PanelBody>\n\t\t\t\t) }\n\t\t\t</InspectorControls>\n\t\t\t{ allowConvertToLinks && (\n\t\t\t\t<>\n\t\t\t\t\t<BlockControls group=\"other\">\n\t\t\t\t\t\t<ToolbarButton\n\t\t\t\t\t\t\ttitle={ __( 'Edit' ) }\n\t\t\t\t\t\t\tonClick={ openModal }\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{ __( 'Edit' ) }\n\t\t\t\t\t\t</ToolbarButton>\n\t\t\t\t\t</BlockControls>\n\t\t\t\t\t{ isOpen && (\n\t\t\t\t\t\t<ConvertToLinksModal\n\t\t\t\t\t\t\tonClick={ convertToNavigationLinks }\n\t\t\t\t\t\t\tonClose={ closeModal }\n\t\t\t\t\t\t\tdisabled={ ! hasResolvedPages }\n\t\t\t\t\t\t/>\n\t\t\t\t\t) }\n\t\t\t\t</>\n\t\t\t) }\n\t\t\t<BlockContent\n\t\t\t\tblockProps={ blockProps }\n\t\t\t\tinnerBlocksProps={ innerBlocksProps }\n\t\t\t\thasResolvedPages={ hasResolvedPages }\n\t\t\t\tblockList={ blockList }\n\t\t\t\tpages={ pages }\n\t\t\t\tparentPageID={ parentPageID }\n\t\t\t/>\n\t\t</>\n\t);\n}\n"]}
@@ -2,7 +2,7 @@
2
2
  * WordPress dependencies
3
3
  */
4
4
  import { createBlock } from '@wordpress/blocks';
5
- import { useSelect, useDispatch } from '@wordpress/data';
5
+ import { useDispatch } from '@wordpress/data';
6
6
  import { store as blockEditorStore } from '@wordpress/block-editor';
7
7
  /**
8
8
  * Converts an array of pages into a nested array of navigation link blocks.
@@ -116,32 +116,19 @@ export function convertToNavigationLinks(pages = [], parentPageID = null) {
116
116
  export function useConvertToNavigationLinks({
117
117
  clientId,
118
118
  pages,
119
+ parentClientId,
119
120
  parentPageID
120
121
  }) {
121
122
  const {
122
123
  replaceBlock,
123
124
  selectBlock
124
125
  } = useDispatch(blockEditorStore);
125
- const {
126
- parentNavBlockClientId
127
- } = useSelect(select => {
128
- const {
129
- getSelectedBlockClientId,
130
- getBlockParentsByBlockName
131
- } = select(blockEditorStore);
132
-
133
- const _selectedBlockClientId = getSelectedBlockClientId();
134
-
135
- return {
136
- parentNavBlockClientId: getBlockParentsByBlockName(_selectedBlockClientId, 'core/navigation', true)[0]
137
- };
138
- }, [clientId]);
139
126
  return () => {
140
127
  const navigationLinks = convertToNavigationLinks(pages, parentPageID); // Replace the Page List block with the Navigation Links.
141
128
 
142
129
  replaceBlock(clientId, navigationLinks); // Select the Navigation block to reveal the changes.
143
130
 
144
- selectBlock(parentNavBlockClientId);
131
+ selectBlock(parentClientId);
145
132
  };
146
133
  }
147
134
  //# sourceMappingURL=use-convert-to-navigation-links.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["@wordpress/block-library/src/page-list/use-convert-to-navigation-links.js"],"names":["createBlock","useSelect","useDispatch","store","blockEditorStore","createNavigationLinks","pages","linkMap","navigationLinks","forEach","id","title","link","url","type","parent","innerBlocks","label","rendered","kind","push","parentLinkInnerBlocks","findNavigationLinkById","navigationLink","attributes","length","foundNavigationLink","convertToNavigationLinks","parentPageID","parentPage","transformSubmenus","listOfLinks","block","index","listOfLinksArray","transformedBlock","useConvertToNavigationLinks","clientId","replaceBlock","selectBlock","parentNavBlockClientId","select","getSelectedBlockClientId","getBlockParentsByBlockName","_selectedBlockClientId"],"mappings":"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","sourcesContent":["/**\n * WordPress dependencies\n */\nimport { createBlock } from '@wordpress/blocks';\nimport { useSelect, useDispatch } from '@wordpress/data';\nimport { store as blockEditorStore } from '@wordpress/block-editor';\n\n/**\n * Converts an array of pages into a nested array of navigation link blocks.\n *\n * @param {Array} pages An array of pages.\n *\n * @return {Array} A nested array of navigation link blocks.\n */\nfunction createNavigationLinks( pages = [] ) {\n\tconst linkMap = {};\n\tconst navigationLinks = [];\n\tpages.forEach( ( { id, title, link: url, type, parent } ) => {\n\t\t// See if a placeholder exists. This is created if children appear before parents in list.\n\t\tconst innerBlocks = linkMap[ id ]?.innerBlocks ?? [];\n\t\tlinkMap[ id ] = createBlock(\n\t\t\t'core/navigation-link',\n\t\t\t{\n\t\t\t\tid,\n\t\t\t\tlabel: title.rendered,\n\t\t\t\turl,\n\t\t\t\ttype,\n\t\t\t\tkind: 'post-type',\n\t\t\t},\n\t\t\tinnerBlocks\n\t\t);\n\n\t\tif ( ! parent ) {\n\t\t\tnavigationLinks.push( linkMap[ id ] );\n\t\t} else {\n\t\t\tif ( ! linkMap[ parent ] ) {\n\t\t\t\t// Use a placeholder if the child appears before parent in list.\n\t\t\t\tlinkMap[ parent ] = { innerBlocks: [] };\n\t\t\t}\n\t\t\t// Although these variables are not referenced, they are needed to store the innerBlocks in memory.\n\t\t\tconst parentLinkInnerBlocks = linkMap[ parent ].innerBlocks;\n\t\t\tparentLinkInnerBlocks.push( linkMap[ id ] );\n\t\t}\n\t} );\n\n\treturn navigationLinks;\n}\n\n/**\n * Finds a navigation link block by id, recursively.\n * It might be possible to make this a more generic helper function.\n *\n * @param {Array} navigationLinks An array of navigation link blocks.\n * @param {number} id The id of the navigation link to find.\n *\n * @return {Object|null} The navigation link block with the given id.\n */\nfunction findNavigationLinkById( navigationLinks, id ) {\n\tfor ( const navigationLink of navigationLinks ) {\n\t\t// Is this the link we're looking for?\n\t\tif ( navigationLink.attributes.id === id ) {\n\t\t\treturn navigationLink;\n\t\t}\n\n\t\t// If not does it have innerBlocks?\n\t\tif ( navigationLink.innerBlocks && navigationLink.innerBlocks.length ) {\n\t\t\tconst foundNavigationLink = findNavigationLinkById(\n\t\t\t\tnavigationLink.innerBlocks,\n\t\t\t\tid\n\t\t\t);\n\n\t\t\tif ( foundNavigationLink ) {\n\t\t\t\treturn foundNavigationLink;\n\t\t\t}\n\t\t}\n\t}\n\n\treturn null;\n}\n\nexport function convertToNavigationLinks( pages = [], parentPageID = null ) {\n\tlet navigationLinks = createNavigationLinks( pages );\n\n\t// If a parent page ID is provided, only return the children of that page.\n\tif ( parentPageID ) {\n\t\tconst parentPage = findNavigationLinkById(\n\t\t\tnavigationLinks,\n\t\t\tparentPageID\n\t\t);\n\t\tif ( parentPage && parentPage.innerBlocks ) {\n\t\t\tnavigationLinks = parentPage.innerBlocks;\n\t\t}\n\t}\n\n\t// Transform all links with innerBlocks into Submenus. This can't be done\n\t// sooner because page objects have no information on their children.\n\tconst transformSubmenus = ( listOfLinks ) => {\n\t\tlistOfLinks.forEach( ( block, index, listOfLinksArray ) => {\n\t\t\tconst { attributes, innerBlocks } = block;\n\t\t\tif ( innerBlocks.length !== 0 ) {\n\t\t\t\ttransformSubmenus( innerBlocks );\n\t\t\t\tconst transformedBlock = createBlock(\n\t\t\t\t\t'core/navigation-submenu',\n\t\t\t\t\tattributes,\n\t\t\t\t\tinnerBlocks\n\t\t\t\t);\n\t\t\t\tlistOfLinksArray[ index ] = transformedBlock;\n\t\t\t}\n\t\t} );\n\t};\n\n\ttransformSubmenus( navigationLinks );\n\treturn navigationLinks;\n}\n\nexport function useConvertToNavigationLinks( {\n\tclientId,\n\tpages,\n\tparentPageID,\n} ) {\n\tconst { replaceBlock, selectBlock } = useDispatch( blockEditorStore );\n\n\tconst { parentNavBlockClientId } = useSelect(\n\t\t( select ) => {\n\t\t\tconst { getSelectedBlockClientId, getBlockParentsByBlockName } =\n\t\t\t\tselect( blockEditorStore );\n\n\t\t\tconst _selectedBlockClientId = getSelectedBlockClientId();\n\n\t\t\treturn {\n\t\t\t\tparentNavBlockClientId: getBlockParentsByBlockName(\n\t\t\t\t\t_selectedBlockClientId,\n\t\t\t\t\t'core/navigation',\n\t\t\t\t\ttrue\n\t\t\t\t)[ 0 ],\n\t\t\t};\n\t\t},\n\t\t[ clientId ]\n\t);\n\n\treturn () => {\n\t\tconst navigationLinks = convertToNavigationLinks( pages, parentPageID );\n\n\t\t// Replace the Page List block with the Navigation Links.\n\t\treplaceBlock( clientId, navigationLinks );\n\n\t\t// Select the Navigation block to reveal the changes.\n\t\tselectBlock( parentNavBlockClientId );\n\t};\n}\n"]}
1
+ {"version":3,"sources":["@wordpress/block-library/src/page-list/use-convert-to-navigation-links.js"],"names":["createBlock","useDispatch","store","blockEditorStore","createNavigationLinks","pages","linkMap","navigationLinks","forEach","id","title","link","url","type","parent","innerBlocks","label","rendered","kind","push","parentLinkInnerBlocks","findNavigationLinkById","navigationLink","attributes","length","foundNavigationLink","convertToNavigationLinks","parentPageID","parentPage","transformSubmenus","listOfLinks","block","index","listOfLinksArray","transformedBlock","useConvertToNavigationLinks","clientId","parentClientId","replaceBlock","selectBlock"],"mappings":"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","sourcesContent":["/**\n * WordPress dependencies\n */\nimport { createBlock } from '@wordpress/blocks';\nimport { useDispatch } from '@wordpress/data';\nimport { store as blockEditorStore } from '@wordpress/block-editor';\n\n/**\n * Converts an array of pages into a nested array of navigation link blocks.\n *\n * @param {Array} pages An array of pages.\n *\n * @return {Array} A nested array of navigation link blocks.\n */\nfunction createNavigationLinks( pages = [] ) {\n\tconst linkMap = {};\n\tconst navigationLinks = [];\n\tpages.forEach( ( { id, title, link: url, type, parent } ) => {\n\t\t// See if a placeholder exists. This is created if children appear before parents in list.\n\t\tconst innerBlocks = linkMap[ id ]?.innerBlocks ?? [];\n\t\tlinkMap[ id ] = createBlock(\n\t\t\t'core/navigation-link',\n\t\t\t{\n\t\t\t\tid,\n\t\t\t\tlabel: title.rendered,\n\t\t\t\turl,\n\t\t\t\ttype,\n\t\t\t\tkind: 'post-type',\n\t\t\t},\n\t\t\tinnerBlocks\n\t\t);\n\n\t\tif ( ! parent ) {\n\t\t\tnavigationLinks.push( linkMap[ id ] );\n\t\t} else {\n\t\t\tif ( ! linkMap[ parent ] ) {\n\t\t\t\t// Use a placeholder if the child appears before parent in list.\n\t\t\t\tlinkMap[ parent ] = { innerBlocks: [] };\n\t\t\t}\n\t\t\t// Although these variables are not referenced, they are needed to store the innerBlocks in memory.\n\t\t\tconst parentLinkInnerBlocks = linkMap[ parent ].innerBlocks;\n\t\t\tparentLinkInnerBlocks.push( linkMap[ id ] );\n\t\t}\n\t} );\n\n\treturn navigationLinks;\n}\n\n/**\n * Finds a navigation link block by id, recursively.\n * It might be possible to make this a more generic helper function.\n *\n * @param {Array} navigationLinks An array of navigation link blocks.\n * @param {number} id The id of the navigation link to find.\n *\n * @return {Object|null} The navigation link block with the given id.\n */\nfunction findNavigationLinkById( navigationLinks, id ) {\n\tfor ( const navigationLink of navigationLinks ) {\n\t\t// Is this the link we're looking for?\n\t\tif ( navigationLink.attributes.id === id ) {\n\t\t\treturn navigationLink;\n\t\t}\n\n\t\t// If not does it have innerBlocks?\n\t\tif ( navigationLink.innerBlocks && navigationLink.innerBlocks.length ) {\n\t\t\tconst foundNavigationLink = findNavigationLinkById(\n\t\t\t\tnavigationLink.innerBlocks,\n\t\t\t\tid\n\t\t\t);\n\n\t\t\tif ( foundNavigationLink ) {\n\t\t\t\treturn foundNavigationLink;\n\t\t\t}\n\t\t}\n\t}\n\n\treturn null;\n}\n\nexport function convertToNavigationLinks( pages = [], parentPageID = null ) {\n\tlet navigationLinks = createNavigationLinks( pages );\n\n\t// If a parent page ID is provided, only return the children of that page.\n\tif ( parentPageID ) {\n\t\tconst parentPage = findNavigationLinkById(\n\t\t\tnavigationLinks,\n\t\t\tparentPageID\n\t\t);\n\t\tif ( parentPage && parentPage.innerBlocks ) {\n\t\t\tnavigationLinks = parentPage.innerBlocks;\n\t\t}\n\t}\n\n\t// Transform all links with innerBlocks into Submenus. This can't be done\n\t// sooner because page objects have no information on their children.\n\tconst transformSubmenus = ( listOfLinks ) => {\n\t\tlistOfLinks.forEach( ( block, index, listOfLinksArray ) => {\n\t\t\tconst { attributes, innerBlocks } = block;\n\t\t\tif ( innerBlocks.length !== 0 ) {\n\t\t\t\ttransformSubmenus( innerBlocks );\n\t\t\t\tconst transformedBlock = createBlock(\n\t\t\t\t\t'core/navigation-submenu',\n\t\t\t\t\tattributes,\n\t\t\t\t\tinnerBlocks\n\t\t\t\t);\n\t\t\t\tlistOfLinksArray[ index ] = transformedBlock;\n\t\t\t}\n\t\t} );\n\t};\n\n\ttransformSubmenus( navigationLinks );\n\treturn navigationLinks;\n}\n\nexport function useConvertToNavigationLinks( {\n\tclientId,\n\tpages,\n\tparentClientId,\n\tparentPageID,\n} ) {\n\tconst { replaceBlock, selectBlock } = useDispatch( blockEditorStore );\n\n\treturn () => {\n\t\tconst navigationLinks = convertToNavigationLinks( pages, parentPageID );\n\n\t\t// Replace the Page List block with the Navigation Links.\n\t\treplaceBlock( clientId, navigationLinks );\n\n\t\t// Select the Navigation block to reveal the changes.\n\t\tselectBlock( parentClientId );\n\t};\n}\n"]}