@wordpress/block-library 8.31.0 → 8.32.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 (157) hide show
  1. package/CHANGELOG.md +2 -0
  2. package/build/block/edit.js +5 -8
  3. package/build/block/edit.js.map +1 -1
  4. package/build/button/edit.native.js +1 -1
  5. package/build/button/edit.native.js.map +1 -1
  6. package/build/image/edit.js +10 -39
  7. package/build/image/edit.js.map +1 -1
  8. package/build/image/image.js +27 -6
  9. package/build/image/image.js.map +1 -1
  10. package/build/navigation/view.js +12 -2
  11. package/build/navigation/view.js.map +1 -1
  12. package/build/navigation-link/edit.js +41 -18
  13. package/build/navigation-link/edit.js.map +1 -1
  14. package/build/navigation-submenu/edit.js +27 -9
  15. package/build/navigation-submenu/edit.js.map +1 -1
  16. package/build/pattern/edit.js +3 -1
  17. package/build/pattern/edit.js.map +1 -1
  18. package/build/post-featured-image/edit.js +12 -3
  19. package/build/post-featured-image/edit.js.map +1 -1
  20. package/build/post-featured-image/index.js +8 -3
  21. package/build/post-featured-image/index.js.map +1 -1
  22. package/build/post-featured-image/overlay-controls.js +82 -0
  23. package/build/post-featured-image/overlay-controls.js.map +1 -0
  24. package/build/post-featured-image/overlay.js +5 -54
  25. package/build/post-featured-image/overlay.js.map +1 -1
  26. package/build/quote/edit.js +18 -23
  27. package/build/quote/edit.js.map +1 -1
  28. package/build/site-tagline/edit.js +13 -4
  29. package/build/site-tagline/edit.js.map +1 -1
  30. package/build/site-tagline/index.js +4 -0
  31. package/build/site-tagline/index.js.map +1 -1
  32. package/build/template-part/edit/index.js +55 -47
  33. package/build/template-part/edit/index.js.map +1 -1
  34. package/build/template-part/edit/inner-blocks.js +106 -10
  35. package/build/template-part/edit/inner-blocks.js.map +1 -1
  36. package/build/template-part/edit/selection-modal.js +1 -9
  37. package/build/template-part/edit/selection-modal.js.map +1 -1
  38. package/build/utils/caption.js +19 -13
  39. package/build/utils/caption.js.map +1 -1
  40. package/build/utils/hooks.js +1 -0
  41. package/build/utils/hooks.js.map +1 -1
  42. package/build-module/block/edit.js +5 -8
  43. package/build-module/block/edit.js.map +1 -1
  44. package/build-module/button/edit.native.js +1 -1
  45. package/build-module/button/edit.native.js.map +1 -1
  46. package/build-module/image/edit.js +11 -40
  47. package/build-module/image/edit.js.map +1 -1
  48. package/build-module/image/image.js +27 -6
  49. package/build-module/image/image.js.map +1 -1
  50. package/build-module/navigation/view.js +12 -2
  51. package/build-module/navigation/view.js.map +1 -1
  52. package/build-module/navigation-link/edit.js +43 -20
  53. package/build-module/navigation-link/edit.js.map +1 -1
  54. package/build-module/navigation-submenu/edit.js +27 -9
  55. package/build-module/navigation-submenu/edit.js.map +1 -1
  56. package/build-module/pattern/edit.js +3 -1
  57. package/build-module/pattern/edit.js.map +1 -1
  58. package/build-module/post-featured-image/edit.js +12 -3
  59. package/build-module/post-featured-image/edit.js.map +1 -1
  60. package/build-module/post-featured-image/index.js +8 -3
  61. package/build-module/post-featured-image/index.js.map +1 -1
  62. package/build-module/post-featured-image/overlay-controls.js +75 -0
  63. package/build-module/post-featured-image/overlay-controls.js.map +1 -0
  64. package/build-module/post-featured-image/overlay.js +7 -56
  65. package/build-module/post-featured-image/overlay.js.map +1 -1
  66. package/build-module/quote/edit.js +20 -25
  67. package/build-module/quote/edit.js.map +1 -1
  68. package/build-module/site-tagline/edit.js +14 -5
  69. package/build-module/site-tagline/edit.js.map +1 -1
  70. package/build-module/site-tagline/index.js +4 -0
  71. package/build-module/site-tagline/index.js.map +1 -1
  72. package/build-module/template-part/edit/index.js +58 -50
  73. package/build-module/template-part/edit/index.js.map +1 -1
  74. package/build-module/template-part/edit/inner-blocks.js +108 -12
  75. package/build-module/template-part/edit/inner-blocks.js.map +1 -1
  76. package/build-module/template-part/edit/selection-modal.js +2 -10
  77. package/build-module/template-part/edit/selection-modal.js.map +1 -1
  78. package/build-module/utils/caption.js +19 -13
  79. package/build-module/utils/caption.js.map +1 -1
  80. package/build-module/utils/hooks.js +1 -0
  81. package/build-module/utils/hooks.js.map +1 -1
  82. package/build-style/audio/theme-rtl.css +1 -1
  83. package/build-style/audio/theme.css +1 -1
  84. package/build-style/cover/style-rtl.css +5 -2
  85. package/build-style/cover/style.css +5 -2
  86. package/build-style/editor-rtl.css +12 -8
  87. package/build-style/editor.css +12 -8
  88. package/build-style/embed/theme-rtl.css +1 -1
  89. package/build-style/embed/theme.css +1 -1
  90. package/build-style/image/theme-rtl.css +1 -1
  91. package/build-style/image/theme.css +1 -1
  92. package/build-style/pullquote/theme-rtl.css +2 -1
  93. package/build-style/pullquote/theme.css +2 -1
  94. package/build-style/quote/theme-rtl.css +6 -6
  95. package/build-style/quote/theme.css +6 -6
  96. package/build-style/search/style-rtl.css +10 -0
  97. package/build-style/search/style.css +10 -0
  98. package/build-style/social-links/editor-rtl.css +0 -4
  99. package/build-style/social-links/editor.css +0 -4
  100. package/build-style/style-rtl.css +15 -2
  101. package/build-style/style.css +15 -2
  102. package/build-style/table/theme-rtl.css +4 -3
  103. package/build-style/table/theme.css +4 -3
  104. package/build-style/template-part/editor-rtl.css +12 -4
  105. package/build-style/template-part/editor.css +12 -4
  106. package/build-style/template-part/theme-rtl.css +1 -1
  107. package/build-style/template-part/theme.css +1 -1
  108. package/build-style/theme-rtl.css +17 -15
  109. package/build-style/theme.css +17 -15
  110. package/build-style/video/theme-rtl.css +1 -1
  111. package/build-style/video/theme.css +1 -1
  112. package/package.json +34 -34
  113. package/src/audio/theme.scss +1 -1
  114. package/src/block/edit.js +5 -17
  115. package/src/button/edit.native.js +1 -1
  116. package/src/cover/style.scss +6 -2
  117. package/src/embed/theme.scss +1 -1
  118. package/src/gallery/editor.scss +1 -1
  119. package/src/gallery/index.php +1 -1
  120. package/src/image/edit.js +11 -40
  121. package/src/image/editor.scss +2 -2
  122. package/src/image/image.js +25 -7
  123. package/src/image/theme.scss +1 -1
  124. package/src/navigation/index.php +8 -0
  125. package/src/navigation/view.js +11 -2
  126. package/src/navigation-link/edit.js +53 -27
  127. package/src/navigation-submenu/edit.js +30 -10
  128. package/src/pattern/edit.js +4 -0
  129. package/src/post-featured-image/block.json +8 -3
  130. package/src/post-featured-image/edit.js +12 -1
  131. package/src/post-featured-image/editor.scss +1 -1
  132. package/src/post-featured-image/overlay-controls.js +88 -0
  133. package/src/post-featured-image/overlay.js +17 -84
  134. package/src/pullquote/theme.scss +3 -1
  135. package/src/query-no-results/index.php +2 -0
  136. package/src/query-pagination-next/index.php +2 -0
  137. package/src/query-pagination-numbers/index.php +2 -0
  138. package/src/quote/edit.js +27 -43
  139. package/src/quote/test/edit.native.js +4 -6
  140. package/src/quote/theme.scss +1 -2
  141. package/src/search/style.scss +11 -0
  142. package/src/site-logo/editor.scss +2 -2
  143. package/src/site-tagline/block.json +4 -0
  144. package/src/site-tagline/edit.js +16 -3
  145. package/src/site-tagline/index.php +9 -1
  146. package/src/social-links/editor.scss +1 -9
  147. package/src/table/theme.scss +4 -2
  148. package/src/template-part/edit/index.js +87 -79
  149. package/src/template-part/edit/inner-blocks.js +126 -13
  150. package/src/template-part/edit/selection-modal.js +1 -22
  151. package/src/template-part/editor.scss +11 -3
  152. package/src/template-part/index.php +2 -0
  153. package/src/template-part/theme.scss +1 -1
  154. package/src/utils/caption.js +19 -16
  155. package/src/utils/hooks.js +1 -0
  156. package/src/video/editor.scss +2 -2
  157. package/src/video/theme.scss +1 -1
@@ -15,11 +15,11 @@ import { __ } from '@wordpress/i18n';
15
15
  import { BlockControls, InspectorControls, RichText, useBlockProps, store as blockEditorStore, getColorClassName, useInnerBlocksProps } from '@wordpress/block-editor';
16
16
  import { isURL, prependHTTP, safeDecodeURI } from '@wordpress/url';
17
17
  import { useState, useEffect, useRef } from '@wordpress/element';
18
- import { placeCaretAtHorizontalEdge, __unstableStripHTML as stripHTML } from '@wordpress/dom';
18
+ import { __unstableStripHTML as stripHTML } from '@wordpress/dom';
19
19
  import { decodeEntities } from '@wordpress/html-entities';
20
20
  import { link as linkIcon, addSubmenu } from '@wordpress/icons';
21
21
  import { store as coreStore } from '@wordpress/core-data';
22
- import { useMergeRefs } from '@wordpress/compose';
22
+ import { useMergeRefs, usePrevious } from '@wordpress/compose';
23
23
 
24
24
  /**
25
25
  * Internal dependencies
@@ -75,7 +75,7 @@ const useIsDraggingWithin = elementRef => {
75
75
  ownerDocument.removeEventListener('dragend', handleDragEnd);
76
76
  ownerDocument.removeEventListener('dragenter', handleDragEnter);
77
77
  };
78
- }, []);
78
+ }, [elementRef]);
79
79
  return isDraggingWithin;
80
80
  };
81
81
  const useIsInvalidLink = (kind, type, id) => {
@@ -154,9 +154,12 @@ export default function NavigationLinkEdit({
154
154
  } = context;
155
155
  const {
156
156
  replaceBlock,
157
- __unstableMarkNextChangeAsNotPersistent
157
+ __unstableMarkNextChangeAsNotPersistent,
158
+ selectPreviousBlock
158
159
  } = useDispatch(blockEditorStore);
159
160
  const [isLinkOpen, setIsLinkOpen] = useState(false);
161
+ // Store what element opened the popover, so we know where to return focus to (toolbar button vs navigation link text)
162
+ const [openedBy, setOpenedBy] = useState(null);
160
163
  // Use internal state instead of a ref to make sure that the component
161
164
  // re-renders when the popover's anchor updates.
162
165
  const [popoverAnchor, setPopoverAnchor] = useState(null);
@@ -164,6 +167,7 @@ export default function NavigationLinkEdit({
164
167
  const isDraggingWithin = useIsDraggingWithin(listItemRef);
165
168
  const itemLabelPlaceholder = __('Add label…');
166
169
  const ref = useRef();
170
+ const prevUrl = usePrevious(url);
167
171
 
168
172
  // Change the label using inspector causes rich text to change focus on firefox.
169
173
  // This is a workaround to keep the focus on the label field when label filed is focused we don't render the rich text.
@@ -195,10 +199,10 @@ export default function NavigationLinkEdit({
195
199
  /**
196
200
  * Transform to submenu block.
197
201
  */
198
- function transformToSubmenu() {
202
+ const transformToSubmenu = () => {
199
203
  const newSubmenu = createBlock('core/navigation-submenu', attributes, innerBlocks.length > 0 ? innerBlocks : [createBlock('core/navigation-link')]);
200
204
  replaceBlock(clientId, newSubmenu);
201
- }
205
+ };
202
206
  useEffect(() => {
203
207
  // Show the LinkControl on mount if the URL is empty
204
208
  // ( When adding a new menu item)
@@ -230,17 +234,12 @@ export default function NavigationLinkEdit({
230
234
 
231
235
  // If the LinkControl popover is open and the URL has changed, close the LinkControl and focus the label text.
232
236
  useEffect(() => {
233
- if (isLinkOpen && url) {
234
- // Does this look like a URL and have something TLD-ish?
235
- if (isURL(prependHTTP(label)) && /^.+\.[a-z]+/.test(label)) {
236
- // Focus and select the label text.
237
- selectLabelText();
238
- } else {
239
- // Focus it (but do not select).
240
- placeCaretAtHorizontalEdge(ref.current, true);
241
- }
237
+ // We only want to do this when the URL has gone from nothing to a new URL AND the label looks like a URL
238
+ if (!prevUrl && url && isLinkOpen && isURL(prependHTTP(label)) && /^.+\.[a-z]+/.test(label)) {
239
+ // Focus and select the label text.
240
+ selectLabelText();
242
241
  }
243
- }, [url, isLinkOpen, label]);
242
+ }, [prevUrl, url, isLinkOpen, label]);
244
243
 
245
244
  /**
246
245
  * Focus the Link label text and select it.
@@ -294,7 +293,10 @@ export default function NavigationLinkEdit({
294
293
  // as it shares the CMD+K shortcut.
295
294
  // See https://github.com/WordPress/gutenberg/pull/59845.
296
295
  event.preventDefault();
296
+ // If this link is a child of a parent submenu item, the parent submenu item event will also open, closing this popover
297
+ event.stopPropagation();
297
298
  setIsLinkOpen(true);
299
+ setOpenedBy(ref.current);
298
300
  }
299
301
  }
300
302
  const blockProps = useBlockProps({
@@ -326,6 +328,7 @@ export default function NavigationLinkEdit({
326
328
  if (!url || isInvalid || isDraft) {
327
329
  blockProps.onClick = () => {
328
330
  setIsLinkOpen(true);
331
+ setOpenedBy(ref.current);
329
332
  };
330
333
  }
331
334
  const classes = classnames('wp-block-navigation-item__content', {
@@ -340,7 +343,10 @@ export default function NavigationLinkEdit({
340
343
  icon: linkIcon,
341
344
  title: __('Link'),
342
345
  shortcut: displayShortcut.primary('k'),
343
- onClick: () => setIsLinkOpen(true)
346
+ onClick: event => {
347
+ setIsLinkOpen(true);
348
+ setOpenedBy(event.currentTarget);
349
+ }
344
350
  }), !isAtMaxNesting && createElement(ToolbarButton, {
345
351
  name: "submenu",
346
352
  icon: addSubmenu,
@@ -350,25 +356,27 @@ export default function NavigationLinkEdit({
350
356
  title: __('Settings')
351
357
  }, createElement(TextControl, {
352
358
  __nextHasNoMarginBottom: true,
359
+ __next40pxDefaultSize: true,
353
360
  value: label ? stripHTML(label) : '',
354
361
  onChange: labelValue => {
355
362
  setAttributes({
356
363
  label: labelValue
357
364
  });
358
365
  },
359
- label: __('Label'),
366
+ label: __('Text'),
360
367
  autoComplete: "off",
361
368
  onFocus: () => setIsLabelFieldFocused(true),
362
369
  onBlur: () => setIsLabelFieldFocused(false)
363
370
  }), createElement(TextControl, {
364
371
  __nextHasNoMarginBottom: true,
372
+ __next40pxDefaultSize: true,
365
373
  value: url ? safeDecodeURI(url) : '',
366
374
  onChange: urlValue => {
367
375
  updateAttributes({
368
376
  url: urlValue
369
377
  }, setAttributes, attributes);
370
378
  },
371
- label: __('URL'),
379
+ label: __('Link'),
372
380
  autoComplete: "off"
373
381
  }), createElement(TextareaControl, {
374
382
  __nextHasNoMarginBottom: true,
@@ -382,6 +390,7 @@ export default function NavigationLinkEdit({
382
390
  help: __('The description will be displayed in the menu if the current theme supports it.')
383
391
  }), createElement(TextControl, {
384
392
  __nextHasNoMarginBottom: true,
393
+ __next40pxDefaultSize: true,
385
394
  value: title || '',
386
395
  onChange: titleValue => {
387
396
  setAttributes({
@@ -393,6 +402,7 @@ export default function NavigationLinkEdit({
393
402
  help: __('Additional information to help clarify the purpose of the link.')
394
403
  }), createElement(TextControl, {
395
404
  __nextHasNoMarginBottom: true,
405
+ __next40pxDefaultSize: true,
396
406
  value: rel || '',
397
407
  onChange: relValue => {
398
408
  setAttributes({
@@ -446,10 +456,23 @@ export default function NavigationLinkEdit({
446
456
  // If there is no link then remove the auto-inserted block.
447
457
  // This avoids empty blocks which can provided a poor UX.
448
458
  if (!url) {
449
- // Need to handle refocusing the Nav block or the inserter?
459
+ // Select the previous block to keep focus nearby
460
+ selectPreviousBlock(clientId, true);
461
+ // Remove the link.
450
462
  onReplace([]);
463
+ return;
451
464
  }
452
465
  setIsLinkOpen(false);
466
+ if (openedBy) {
467
+ openedBy.focus();
468
+ setOpenedBy(null);
469
+ } else if (ref.current) {
470
+ // select the ref when adding a new link
471
+ ref.current.focus();
472
+ } else {
473
+ // Fallback
474
+ selectPreviousBlock(clientId, true);
475
+ }
453
476
  },
454
477
  anchor: popoverAnchor,
455
478
  onRemove: removeLink,
@@ -1 +1 @@
1
- {"version":3,"names":["classnames","createBlock","useSelect","useDispatch","PanelBody","TextControl","TextareaControl","ToolbarButton","Tooltip","ToolbarGroup","displayShortcut","isKeyboardEvent","__","BlockControls","InspectorControls","RichText","useBlockProps","store","blockEditorStore","getColorClassName","useInnerBlocksProps","isURL","prependHTTP","safeDecodeURI","useState","useEffect","useRef","placeCaretAtHorizontalEdge","__unstableStripHTML","stripHTML","decodeEntities","link","linkIcon","addSubmenu","coreStore","useMergeRefs","LinkUI","updateAttributes","getColors","DEFAULT_BLOCK","name","useIsDraggingWithin","elementRef","isDraggingWithin","setIsDraggingWithin","ownerDocument","current","handleDragStart","event","handleDragEnter","handleDragEnd","contains","target","addEventListener","removeEventListener","useIsInvalidLink","kind","type","id","isPostType","hasId","Number","isInteger","postStatus","select","getEntityRecord","status","isInvalid","isDraft","getMissingText","missingText","NavigationLinkEdit","attributes","isSelected","setAttributes","insertBlocksAfter","mergeBlocks","onReplace","context","clientId","label","url","description","rel","title","maxNestingLevel","replaceBlock","__unstableMarkNextChangeAsNotPersistent","isLinkOpen","setIsLinkOpen","popoverAnchor","setPopoverAnchor","listItemRef","itemLabelPlaceholder","ref","isLabelFieldFocused","setIsLabelFieldFocused","innerBlocks","isAtMaxNesting","isTopLevelLink","isParentOfSelectedBlock","hasChildren","getBlocks","getBlockCount","getBlockName","getBlockRootClientId","hasSelectedInnerBlock","getBlockParentsByBlockName","length","transformToSubmenu","newSubmenu","test","selectLabelText","focus","defaultView","selection","getSelection","range","createRange","selectNodeContents","removeAllRanges","addRange","removeLink","undefined","opensInNewTab","textColor","customTextColor","backgroundColor","customBackgroundColor","onKeyDown","primary","preventDefault","blockProps","className","style","color","innerBlocksProps","defaultBlock","directInsert","renderAppender","onClick","classes","placeholderText","tooltipText","createElement","Fragment","icon","shortcut","__nextHasNoMarginBottom","value","onChange","labelValue","autoComplete","onFocus","onBlur","urlValue","descriptionValue","help","titleValue","relValue","text","identifier","onMerge","__unstableOnSplitAtEnd","placeholder","withoutInteractiveFormatting","allowedFormats","trim","onClose","anchor","onRemove","updatedValue"],"sources":["@wordpress/block-library/src/navigation-link/edit.js"],"sourcesContent":["/**\n * External dependencies\n */\nimport classnames from 'classnames';\n\n/**\n * WordPress dependencies\n */\nimport { createBlock } from '@wordpress/blocks';\nimport { useSelect, useDispatch } from '@wordpress/data';\nimport {\n\tPanelBody,\n\tTextControl,\n\tTextareaControl,\n\tToolbarButton,\n\tTooltip,\n\tToolbarGroup,\n} from '@wordpress/components';\nimport { displayShortcut, isKeyboardEvent } from '@wordpress/keycodes';\nimport { __ } from '@wordpress/i18n';\nimport {\n\tBlockControls,\n\tInspectorControls,\n\tRichText,\n\tuseBlockProps,\n\tstore as blockEditorStore,\n\tgetColorClassName,\n\tuseInnerBlocksProps,\n} from '@wordpress/block-editor';\nimport { isURL, prependHTTP, safeDecodeURI } from '@wordpress/url';\nimport { useState, useEffect, useRef } from '@wordpress/element';\nimport {\n\tplaceCaretAtHorizontalEdge,\n\t__unstableStripHTML as stripHTML,\n} from '@wordpress/dom';\nimport { decodeEntities } from '@wordpress/html-entities';\nimport { link as linkIcon, addSubmenu } from '@wordpress/icons';\nimport { store as coreStore } from '@wordpress/core-data';\nimport { useMergeRefs } from '@wordpress/compose';\n\n/**\n * Internal dependencies\n */\nimport { LinkUI } from './link-ui';\nimport { updateAttributes } from './update-attributes';\nimport { getColors } from '../navigation/edit/utils';\n\nconst DEFAULT_BLOCK = { name: 'core/navigation-link' };\n\n/**\n * A React hook to determine if it's dragging within the target element.\n *\n * @typedef {import('@wordpress/element').RefObject} RefObject\n *\n * @param {RefObject<HTMLElement>} elementRef The target elementRef object.\n *\n * @return {boolean} Is dragging within the target element.\n */\nconst useIsDraggingWithin = ( elementRef ) => {\n\tconst [ isDraggingWithin, setIsDraggingWithin ] = useState( false );\n\n\tuseEffect( () => {\n\t\tconst { ownerDocument } = elementRef.current;\n\n\t\tfunction handleDragStart( event ) {\n\t\t\t// Check the first time when the dragging starts.\n\t\t\thandleDragEnter( event );\n\t\t}\n\n\t\t// Set to false whenever the user cancel the drag event by either releasing the mouse or press Escape.\n\t\tfunction handleDragEnd() {\n\t\t\tsetIsDraggingWithin( false );\n\t\t}\n\n\t\tfunction handleDragEnter( event ) {\n\t\t\t// Check if the current target is inside the item element.\n\t\t\tif ( elementRef.current.contains( event.target ) ) {\n\t\t\t\tsetIsDraggingWithin( true );\n\t\t\t} else {\n\t\t\t\tsetIsDraggingWithin( false );\n\t\t\t}\n\t\t}\n\n\t\t// Bind these events to the document to catch all drag events.\n\t\t// Ideally, we can also use `event.relatedTarget`, but sadly that\n\t\t// doesn't work in Safari.\n\t\townerDocument.addEventListener( 'dragstart', handleDragStart );\n\t\townerDocument.addEventListener( 'dragend', handleDragEnd );\n\t\townerDocument.addEventListener( 'dragenter', handleDragEnter );\n\n\t\treturn () => {\n\t\t\townerDocument.removeEventListener( 'dragstart', handleDragStart );\n\t\t\townerDocument.removeEventListener( 'dragend', handleDragEnd );\n\t\t\townerDocument.removeEventListener( 'dragenter', handleDragEnter );\n\t\t};\n\t}, [] );\n\n\treturn isDraggingWithin;\n};\n\nconst useIsInvalidLink = ( kind, type, id ) => {\n\tconst isPostType =\n\t\tkind === 'post-type' || type === 'post' || type === 'page';\n\tconst hasId = Number.isInteger( id );\n\tconst postStatus = useSelect(\n\t\t( select ) => {\n\t\t\tif ( ! isPostType ) {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\tconst { getEntityRecord } = select( coreStore );\n\t\t\treturn getEntityRecord( 'postType', type, id )?.status;\n\t\t},\n\t\t[ isPostType, type, id ]\n\t);\n\n\t// Check Navigation Link validity if:\n\t// 1. Link is 'post-type'.\n\t// 2. It has an id.\n\t// 3. It's neither null, nor undefined, as valid items might be either of those while loading.\n\t// If those conditions are met, check if\n\t// 1. The post status is published.\n\t// 2. The Navigation Link item has no label.\n\t// If either of those is true, invalidate.\n\tconst isInvalid =\n\t\tisPostType && hasId && postStatus && 'trash' === postStatus;\n\tconst isDraft = 'draft' === postStatus;\n\n\treturn [ isInvalid, isDraft ];\n};\n\nfunction getMissingText( type ) {\n\tlet missingText = '';\n\n\tswitch ( type ) {\n\t\tcase 'post':\n\t\t\t/* translators: label for missing post in navigation link block */\n\t\t\tmissingText = __( 'Select post' );\n\t\t\tbreak;\n\t\tcase 'page':\n\t\t\t/* translators: label for missing page in navigation link block */\n\t\t\tmissingText = __( 'Select page' );\n\t\t\tbreak;\n\t\tcase 'category':\n\t\t\t/* translators: label for missing category in navigation link block */\n\t\t\tmissingText = __( 'Select category' );\n\t\t\tbreak;\n\t\tcase 'tag':\n\t\t\t/* translators: label for missing tag in navigation link block */\n\t\t\tmissingText = __( 'Select tag' );\n\t\t\tbreak;\n\t\tdefault:\n\t\t\t/* translators: label for missing values in navigation link block */\n\t\t\tmissingText = __( 'Add link' );\n\t}\n\n\treturn missingText;\n}\n\nexport default function NavigationLinkEdit( {\n\tattributes,\n\tisSelected,\n\tsetAttributes,\n\tinsertBlocksAfter,\n\tmergeBlocks,\n\tonReplace,\n\tcontext,\n\tclientId,\n} ) {\n\tconst { id, label, type, url, description, rel, title, kind } = attributes;\n\n\tconst [ isInvalid, isDraft ] = useIsInvalidLink( kind, type, id );\n\tconst { maxNestingLevel } = context;\n\n\tconst { replaceBlock, __unstableMarkNextChangeAsNotPersistent } =\n\t\tuseDispatch( blockEditorStore );\n\tconst [ isLinkOpen, setIsLinkOpen ] = useState( false );\n\t// Use internal state instead of a ref to make sure that the component\n\t// re-renders when the popover's anchor updates.\n\tconst [ popoverAnchor, setPopoverAnchor ] = useState( null );\n\tconst listItemRef = useRef( null );\n\tconst isDraggingWithin = useIsDraggingWithin( listItemRef );\n\tconst itemLabelPlaceholder = __( 'Add label…' );\n\tconst ref = useRef();\n\n\t// Change the label using inspector causes rich text to change focus on firefox.\n\t// This is a workaround to keep the focus on the label field when label filed is focused we don't render the rich text.\n\tconst [ isLabelFieldFocused, setIsLabelFieldFocused ] = useState( false );\n\n\tconst {\n\t\tinnerBlocks,\n\t\tisAtMaxNesting,\n\t\tisTopLevelLink,\n\t\tisParentOfSelectedBlock,\n\t\thasChildren,\n\t} = useSelect(\n\t\t( select ) => {\n\t\t\tconst {\n\t\t\t\tgetBlocks,\n\t\t\t\tgetBlockCount,\n\t\t\t\tgetBlockName,\n\t\t\t\tgetBlockRootClientId,\n\t\t\t\thasSelectedInnerBlock,\n\t\t\t\tgetBlockParentsByBlockName,\n\t\t\t} = select( blockEditorStore );\n\n\t\t\treturn {\n\t\t\t\tinnerBlocks: getBlocks( clientId ),\n\t\t\t\tisAtMaxNesting:\n\t\t\t\t\tgetBlockParentsByBlockName( clientId, [\n\t\t\t\t\t\t'core/navigation-link',\n\t\t\t\t\t\t'core/navigation-submenu',\n\t\t\t\t\t] ).length >= maxNestingLevel,\n\t\t\t\tisTopLevelLink:\n\t\t\t\t\tgetBlockName( getBlockRootClientId( clientId ) ) ===\n\t\t\t\t\t'core/navigation',\n\t\t\t\tisParentOfSelectedBlock: hasSelectedInnerBlock(\n\t\t\t\t\tclientId,\n\t\t\t\t\ttrue\n\t\t\t\t),\n\t\t\t\thasChildren: !! getBlockCount( clientId ),\n\t\t\t};\n\t\t},\n\t\t[ clientId, maxNestingLevel ]\n\t);\n\n\t/**\n\t * Transform to submenu block.\n\t */\n\tfunction transformToSubmenu() {\n\t\tconst newSubmenu = createBlock(\n\t\t\t'core/navigation-submenu',\n\t\t\tattributes,\n\t\t\tinnerBlocks.length > 0\n\t\t\t\t? innerBlocks\n\t\t\t\t: [ createBlock( 'core/navigation-link' ) ]\n\t\t);\n\t\treplaceBlock( clientId, newSubmenu );\n\t}\n\n\tuseEffect( () => {\n\t\t// Show the LinkControl on mount if the URL is empty\n\t\t// ( When adding a new menu item)\n\t\t// This can't be done in the useState call because it conflicts\n\t\t// with the autofocus behavior of the BlockListBlock component.\n\t\tif ( ! url ) {\n\t\t\tsetIsLinkOpen( true );\n\t\t}\n\t}, [ url ] );\n\n\tuseEffect( () => {\n\t\t// If block has inner blocks, transform to Submenu.\n\t\tif ( hasChildren ) {\n\t\t\t// This side-effect should not create an undo level as those should\n\t\t\t// only be created via user interactions.\n\t\t\t__unstableMarkNextChangeAsNotPersistent();\n\t\t\ttransformToSubmenu();\n\t\t}\n\t}, [ hasChildren ] );\n\n\t/**\n\t * The hook shouldn't be necessary but due to a focus loss happening\n\t * when selecting a suggestion in the link popover, we force close on block unselection.\n\t */\n\tuseEffect( () => {\n\t\tif ( ! isSelected ) {\n\t\t\tsetIsLinkOpen( false );\n\t\t}\n\t}, [ isSelected ] );\n\n\t// If the LinkControl popover is open and the URL has changed, close the LinkControl and focus the label text.\n\tuseEffect( () => {\n\t\tif ( isLinkOpen && url ) {\n\t\t\t// Does this look like a URL and have something TLD-ish?\n\t\t\tif (\n\t\t\t\tisURL( prependHTTP( label ) ) &&\n\t\t\t\t/^.+\\.[a-z]+/.test( label )\n\t\t\t) {\n\t\t\t\t// Focus and select the label text.\n\t\t\t\tselectLabelText();\n\t\t\t} else {\n\t\t\t\t// Focus it (but do not select).\n\t\t\t\tplaceCaretAtHorizontalEdge( ref.current, true );\n\t\t\t}\n\t\t}\n\t}, [ url, isLinkOpen, label ] );\n\n\t/**\n\t * Focus the Link label text and select it.\n\t */\n\tfunction selectLabelText() {\n\t\tref.current.focus();\n\t\tconst { ownerDocument } = ref.current;\n\t\tconst { defaultView } = ownerDocument;\n\t\tconst selection = defaultView.getSelection();\n\t\tconst range = ownerDocument.createRange();\n\t\t// Get the range of the current ref contents so we can add this range to the selection.\n\t\trange.selectNodeContents( ref.current );\n\t\tselection.removeAllRanges();\n\t\tselection.addRange( range );\n\t}\n\n\t/**\n\t * Removes the current link if set.\n\t */\n\tfunction removeLink() {\n\t\t// Reset all attributes that comprise the link.\n\t\t// It is critical that all attributes are reset\n\t\t// to their default values otherwise this may\n\t\t// in advertently trigger side effects because\n\t\t// the values will have \"changed\".\n\t\tsetAttributes( {\n\t\t\turl: undefined,\n\t\t\tlabel: undefined,\n\t\t\tid: undefined,\n\t\t\tkind: undefined,\n\t\t\ttype: undefined,\n\t\t\topensInNewTab: false,\n\t\t} );\n\n\t\t// Close the link editing UI.\n\t\tsetIsLinkOpen( false );\n\t}\n\n\tconst {\n\t\ttextColor,\n\t\tcustomTextColor,\n\t\tbackgroundColor,\n\t\tcustomBackgroundColor,\n\t} = getColors( context, ! isTopLevelLink );\n\n\tfunction onKeyDown( event ) {\n\t\tif ( isKeyboardEvent.primary( event, 'k' ) ) {\n\t\t\t// Required to prevent the command center from opening,\n\t\t\t// as it shares the CMD+K shortcut.\n\t\t\t// See https://github.com/WordPress/gutenberg/pull/59845.\n\t\t\tevent.preventDefault();\n\t\t\tsetIsLinkOpen( true );\n\t\t}\n\t}\n\n\tconst blockProps = useBlockProps( {\n\t\tref: useMergeRefs( [ setPopoverAnchor, listItemRef ] ),\n\t\tclassName: classnames( 'wp-block-navigation-item', {\n\t\t\t'is-editing': isSelected || isParentOfSelectedBlock,\n\t\t\t'is-dragging-within': isDraggingWithin,\n\t\t\t'has-link': !! url,\n\t\t\t'has-child': hasChildren,\n\t\t\t'has-text-color': !! textColor || !! customTextColor,\n\t\t\t[ getColorClassName( 'color', textColor ) ]: !! textColor,\n\t\t\t'has-background': !! backgroundColor || customBackgroundColor,\n\t\t\t[ getColorClassName( 'background-color', backgroundColor ) ]:\n\t\t\t\t!! backgroundColor,\n\t\t} ),\n\t\tstyle: {\n\t\t\tcolor: ! textColor && customTextColor,\n\t\t\tbackgroundColor: ! backgroundColor && customBackgroundColor,\n\t\t},\n\t\tonKeyDown,\n\t} );\n\n\tconst innerBlocksProps = useInnerBlocksProps(\n\t\t{\n\t\t\t...blockProps,\n\t\t\tclassName: 'remove-outline', // Remove the outline from the inner blocks container.\n\t\t},\n\t\t{\n\t\t\tdefaultBlock: DEFAULT_BLOCK,\n\t\t\tdirectInsert: true,\n\t\t\trenderAppender: false,\n\t\t}\n\t);\n\n\tif ( ! url || isInvalid || isDraft ) {\n\t\tblockProps.onClick = () => {\n\t\t\tsetIsLinkOpen( true );\n\t\t};\n\t}\n\n\tconst classes = classnames( 'wp-block-navigation-item__content', {\n\t\t'wp-block-navigation-link__placeholder': ! url || isInvalid || isDraft,\n\t} );\n\n\tconst missingText = getMissingText( type );\n\t/* translators: Whether the navigation link is Invalid or a Draft. */\n\tconst placeholderText = `(${\n\t\tisInvalid ? __( 'Invalid' ) : __( 'Draft' )\n\t})`;\n\tconst tooltipText =\n\t\tisInvalid || isDraft\n\t\t\t? __( 'This item has been deleted, or is a draft' )\n\t\t\t: __( 'This item is missing a link' );\n\n\treturn (\n\t\t<>\n\t\t\t<BlockControls>\n\t\t\t\t<ToolbarGroup>\n\t\t\t\t\t<ToolbarButton\n\t\t\t\t\t\tname=\"link\"\n\t\t\t\t\t\ticon={ linkIcon }\n\t\t\t\t\t\ttitle={ __( 'Link' ) }\n\t\t\t\t\t\tshortcut={ displayShortcut.primary( 'k' ) }\n\t\t\t\t\t\tonClick={ () => setIsLinkOpen( true ) }\n\t\t\t\t\t/>\n\t\t\t\t\t{ ! isAtMaxNesting && (\n\t\t\t\t\t\t<ToolbarButton\n\t\t\t\t\t\t\tname=\"submenu\"\n\t\t\t\t\t\t\ticon={ addSubmenu }\n\t\t\t\t\t\t\ttitle={ __( 'Add submenu' ) }\n\t\t\t\t\t\t\tonClick={ transformToSubmenu }\n\t\t\t\t\t\t/>\n\t\t\t\t\t) }\n\t\t\t\t</ToolbarGroup>\n\t\t\t</BlockControls>\n\t\t\t{ /* Warning, this duplicated in packages/block-library/src/navigation-submenu/edit.js */ }\n\t\t\t<InspectorControls>\n\t\t\t\t<PanelBody title={ __( 'Settings' ) }>\n\t\t\t\t\t<TextControl\n\t\t\t\t\t\t__nextHasNoMarginBottom\n\t\t\t\t\t\tvalue={ label ? stripHTML( label ) : '' }\n\t\t\t\t\t\tonChange={ ( labelValue ) => {\n\t\t\t\t\t\t\tsetAttributes( { label: labelValue } );\n\t\t\t\t\t\t} }\n\t\t\t\t\t\tlabel={ __( 'Label' ) }\n\t\t\t\t\t\tautoComplete=\"off\"\n\t\t\t\t\t\tonFocus={ () => setIsLabelFieldFocused( true ) }\n\t\t\t\t\t\tonBlur={ () => setIsLabelFieldFocused( false ) }\n\t\t\t\t\t/>\n\t\t\t\t\t<TextControl\n\t\t\t\t\t\t__nextHasNoMarginBottom\n\t\t\t\t\t\tvalue={ url ? safeDecodeURI( url ) : '' }\n\t\t\t\t\t\tonChange={ ( urlValue ) => {\n\t\t\t\t\t\t\tupdateAttributes(\n\t\t\t\t\t\t\t\t{ url: urlValue },\n\t\t\t\t\t\t\t\tsetAttributes,\n\t\t\t\t\t\t\t\tattributes\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t} }\n\t\t\t\t\t\tlabel={ __( 'URL' ) }\n\t\t\t\t\t\tautoComplete=\"off\"\n\t\t\t\t\t/>\n\t\t\t\t\t<TextareaControl\n\t\t\t\t\t\t__nextHasNoMarginBottom\n\t\t\t\t\t\tvalue={ description || '' }\n\t\t\t\t\t\tonChange={ ( descriptionValue ) => {\n\t\t\t\t\t\t\tsetAttributes( { description: descriptionValue } );\n\t\t\t\t\t\t} }\n\t\t\t\t\t\tlabel={ __( 'Description' ) }\n\t\t\t\t\t\thelp={ __(\n\t\t\t\t\t\t\t'The description will be displayed in the menu if the current theme supports it.'\n\t\t\t\t\t\t) }\n\t\t\t\t\t/>\n\t\t\t\t\t<TextControl\n\t\t\t\t\t\t__nextHasNoMarginBottom\n\t\t\t\t\t\tvalue={ title || '' }\n\t\t\t\t\t\tonChange={ ( titleValue ) => {\n\t\t\t\t\t\t\tsetAttributes( { title: titleValue } );\n\t\t\t\t\t\t} }\n\t\t\t\t\t\tlabel={ __( 'Title attribute' ) }\n\t\t\t\t\t\tautoComplete=\"off\"\n\t\t\t\t\t\thelp={ __(\n\t\t\t\t\t\t\t'Additional information to help clarify the purpose of the link.'\n\t\t\t\t\t\t) }\n\t\t\t\t\t/>\n\t\t\t\t\t<TextControl\n\t\t\t\t\t\t__nextHasNoMarginBottom\n\t\t\t\t\t\tvalue={ rel || '' }\n\t\t\t\t\t\tonChange={ ( relValue ) => {\n\t\t\t\t\t\t\tsetAttributes( { rel: relValue } );\n\t\t\t\t\t\t} }\n\t\t\t\t\t\tlabel={ __( 'Rel attribute' ) }\n\t\t\t\t\t\tautoComplete=\"off\"\n\t\t\t\t\t\thelp={ __(\n\t\t\t\t\t\t\t'The relationship of the linked URL as space-separated link types.'\n\t\t\t\t\t\t) }\n\t\t\t\t\t/>\n\t\t\t\t</PanelBody>\n\t\t\t</InspectorControls>\n\t\t\t<div { ...blockProps }>\n\t\t\t\t{ /* eslint-disable jsx-a11y/anchor-is-valid */ }\n\t\t\t\t<a className={ classes }>\n\t\t\t\t\t{ /* eslint-enable */ }\n\t\t\t\t\t{ ! url ? (\n\t\t\t\t\t\t<div className=\"wp-block-navigation-link__placeholder-text\">\n\t\t\t\t\t\t\t<Tooltip text={ tooltipText }>\n\t\t\t\t\t\t\t\t<span>{ missingText }</span>\n\t\t\t\t\t\t\t</Tooltip>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t) : (\n\t\t\t\t\t\t<>\n\t\t\t\t\t\t\t{ ! isInvalid &&\n\t\t\t\t\t\t\t\t! isDraft &&\n\t\t\t\t\t\t\t\t! isLabelFieldFocused && (\n\t\t\t\t\t\t\t\t\t<>\n\t\t\t\t\t\t\t\t\t\t<RichText\n\t\t\t\t\t\t\t\t\t\t\tref={ ref }\n\t\t\t\t\t\t\t\t\t\t\tidentifier=\"label\"\n\t\t\t\t\t\t\t\t\t\t\tclassName=\"wp-block-navigation-item__label\"\n\t\t\t\t\t\t\t\t\t\t\tvalue={ label }\n\t\t\t\t\t\t\t\t\t\t\tonChange={ ( labelValue ) =>\n\t\t\t\t\t\t\t\t\t\t\t\tsetAttributes( {\n\t\t\t\t\t\t\t\t\t\t\t\t\tlabel: labelValue,\n\t\t\t\t\t\t\t\t\t\t\t\t} )\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\tonMerge={ mergeBlocks }\n\t\t\t\t\t\t\t\t\t\t\tonReplace={ onReplace }\n\t\t\t\t\t\t\t\t\t\t\t__unstableOnSplitAtEnd={ () =>\n\t\t\t\t\t\t\t\t\t\t\t\tinsertBlocksAfter(\n\t\t\t\t\t\t\t\t\t\t\t\t\tcreateBlock(\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t'core/navigation-link'\n\t\t\t\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\taria-label={ __(\n\t\t\t\t\t\t\t\t\t\t\t\t'Navigation link text'\n\t\t\t\t\t\t\t\t\t\t\t) }\n\t\t\t\t\t\t\t\t\t\t\tplaceholder={ itemLabelPlaceholder }\n\t\t\t\t\t\t\t\t\t\t\twithoutInteractiveFormatting\n\t\t\t\t\t\t\t\t\t\t\tallowedFormats={ [\n\t\t\t\t\t\t\t\t\t\t\t\t'core/bold',\n\t\t\t\t\t\t\t\t\t\t\t\t'core/italic',\n\t\t\t\t\t\t\t\t\t\t\t\t'core/image',\n\t\t\t\t\t\t\t\t\t\t\t\t'core/strikethrough',\n\t\t\t\t\t\t\t\t\t\t\t] }\n\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t\t{ description && (\n\t\t\t\t\t\t\t\t\t\t\t<span className=\"wp-block-navigation-item__description\">\n\t\t\t\t\t\t\t\t\t\t\t\t{ description }\n\t\t\t\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t\t\t\t) }\n\t\t\t\t\t\t\t\t\t</>\n\t\t\t\t\t\t\t\t) }\n\t\t\t\t\t\t\t{ ( isInvalid ||\n\t\t\t\t\t\t\t\tisDraft ||\n\t\t\t\t\t\t\t\tisLabelFieldFocused ) && (\n\t\t\t\t\t\t\t\t<div className=\"wp-block-navigation-link__placeholder-text wp-block-navigation-link__label\">\n\t\t\t\t\t\t\t\t\t<Tooltip text={ tooltipText }>\n\t\t\t\t\t\t\t\t\t\t<span\n\t\t\t\t\t\t\t\t\t\t\taria-label={ __(\n\t\t\t\t\t\t\t\t\t\t\t\t'Navigation link text'\n\t\t\t\t\t\t\t\t\t\t\t) }\n\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t// Some attributes are stored in an escaped form. It's a legacy issue.\n\t\t\t\t\t\t\t\t\t\t\t\t// Ideally they would be stored in a raw, unescaped form.\n\t\t\t\t\t\t\t\t\t\t\t\t// Unescape is used here to \"recover\" the escaped characters\n\t\t\t\t\t\t\t\t\t\t\t\t// so they display without encoding.\n\t\t\t\t\t\t\t\t\t\t\t\t// See `updateAttributes` for more details.\n\t\t\t\t\t\t\t\t\t\t\t\t`${ decodeEntities( label ) } ${\n\t\t\t\t\t\t\t\t\t\t\t\t\tisInvalid || isDraft\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t? placeholderText\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t: ''\n\t\t\t\t\t\t\t\t\t\t\t\t}`.trim()\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t\t\t</Tooltip>\n\t\t\t\t\t\t\t\t</div>\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\t{ isLinkOpen && (\n\t\t\t\t\t\t<LinkUI\n\t\t\t\t\t\t\tclientId={ clientId }\n\t\t\t\t\t\t\tlink={ attributes }\n\t\t\t\t\t\t\tonClose={ () => {\n\t\t\t\t\t\t\t\t// If there is no link then remove the auto-inserted block.\n\t\t\t\t\t\t\t\t// This avoids empty blocks which can provided a poor UX.\n\t\t\t\t\t\t\t\tif ( ! url ) {\n\t\t\t\t\t\t\t\t\t// Need to handle refocusing the Nav block or the inserter?\n\t\t\t\t\t\t\t\t\tonReplace( [] );\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tsetIsLinkOpen( false );\n\t\t\t\t\t\t\t} }\n\t\t\t\t\t\t\tanchor={ popoverAnchor }\n\t\t\t\t\t\t\tonRemove={ removeLink }\n\t\t\t\t\t\t\tonChange={ ( updatedValue ) => {\n\t\t\t\t\t\t\t\tupdateAttributes(\n\t\t\t\t\t\t\t\t\tupdatedValue,\n\t\t\t\t\t\t\t\t\tsetAttributes,\n\t\t\t\t\t\t\t\t\tattributes\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t} }\n\t\t\t\t\t\t/>\n\t\t\t\t\t) }\n\t\t\t\t</a>\n\t\t\t\t<div { ...innerBlocksProps } />\n\t\t\t</div>\n\t\t</>\n\t);\n}\n"],"mappings":"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"}
1
+ {"version":3,"names":["classnames","createBlock","useSelect","useDispatch","PanelBody","TextControl","TextareaControl","ToolbarButton","Tooltip","ToolbarGroup","displayShortcut","isKeyboardEvent","__","BlockControls","InspectorControls","RichText","useBlockProps","store","blockEditorStore","getColorClassName","useInnerBlocksProps","isURL","prependHTTP","safeDecodeURI","useState","useEffect","useRef","__unstableStripHTML","stripHTML","decodeEntities","link","linkIcon","addSubmenu","coreStore","useMergeRefs","usePrevious","LinkUI","updateAttributes","getColors","DEFAULT_BLOCK","name","useIsDraggingWithin","elementRef","isDraggingWithin","setIsDraggingWithin","ownerDocument","current","handleDragStart","event","handleDragEnter","handleDragEnd","contains","target","addEventListener","removeEventListener","useIsInvalidLink","kind","type","id","isPostType","hasId","Number","isInteger","postStatus","select","getEntityRecord","status","isInvalid","isDraft","getMissingText","missingText","NavigationLinkEdit","attributes","isSelected","setAttributes","insertBlocksAfter","mergeBlocks","onReplace","context","clientId","label","url","description","rel","title","maxNestingLevel","replaceBlock","__unstableMarkNextChangeAsNotPersistent","selectPreviousBlock","isLinkOpen","setIsLinkOpen","openedBy","setOpenedBy","popoverAnchor","setPopoverAnchor","listItemRef","itemLabelPlaceholder","ref","prevUrl","isLabelFieldFocused","setIsLabelFieldFocused","innerBlocks","isAtMaxNesting","isTopLevelLink","isParentOfSelectedBlock","hasChildren","getBlocks","getBlockCount","getBlockName","getBlockRootClientId","hasSelectedInnerBlock","getBlockParentsByBlockName","length","transformToSubmenu","newSubmenu","test","selectLabelText","focus","defaultView","selection","getSelection","range","createRange","selectNodeContents","removeAllRanges","addRange","removeLink","undefined","opensInNewTab","textColor","customTextColor","backgroundColor","customBackgroundColor","onKeyDown","primary","preventDefault","stopPropagation","blockProps","className","style","color","innerBlocksProps","defaultBlock","directInsert","renderAppender","onClick","classes","placeholderText","tooltipText","createElement","Fragment","icon","shortcut","currentTarget","__nextHasNoMarginBottom","__next40pxDefaultSize","value","onChange","labelValue","autoComplete","onFocus","onBlur","urlValue","descriptionValue","help","titleValue","relValue","text","identifier","onMerge","__unstableOnSplitAtEnd","placeholder","withoutInteractiveFormatting","allowedFormats","trim","onClose","anchor","onRemove","updatedValue"],"sources":["@wordpress/block-library/src/navigation-link/edit.js"],"sourcesContent":["/**\n * External dependencies\n */\nimport classnames from 'classnames';\n\n/**\n * WordPress dependencies\n */\nimport { createBlock } from '@wordpress/blocks';\nimport { useSelect, useDispatch } from '@wordpress/data';\nimport {\n\tPanelBody,\n\tTextControl,\n\tTextareaControl,\n\tToolbarButton,\n\tTooltip,\n\tToolbarGroup,\n} from '@wordpress/components';\nimport { displayShortcut, isKeyboardEvent } from '@wordpress/keycodes';\nimport { __ } from '@wordpress/i18n';\nimport {\n\tBlockControls,\n\tInspectorControls,\n\tRichText,\n\tuseBlockProps,\n\tstore as blockEditorStore,\n\tgetColorClassName,\n\tuseInnerBlocksProps,\n} from '@wordpress/block-editor';\nimport { isURL, prependHTTP, safeDecodeURI } from '@wordpress/url';\nimport { useState, useEffect, useRef } from '@wordpress/element';\nimport { __unstableStripHTML as stripHTML } from '@wordpress/dom';\nimport { decodeEntities } from '@wordpress/html-entities';\nimport { link as linkIcon, addSubmenu } from '@wordpress/icons';\nimport { store as coreStore } from '@wordpress/core-data';\nimport { useMergeRefs, usePrevious } from '@wordpress/compose';\n\n/**\n * Internal dependencies\n */\nimport { LinkUI } from './link-ui';\nimport { updateAttributes } from './update-attributes';\nimport { getColors } from '../navigation/edit/utils';\n\nconst DEFAULT_BLOCK = { name: 'core/navigation-link' };\n\n/**\n * A React hook to determine if it's dragging within the target element.\n *\n * @typedef {import('@wordpress/element').RefObject} RefObject\n *\n * @param {RefObject<HTMLElement>} elementRef The target elementRef object.\n *\n * @return {boolean} Is dragging within the target element.\n */\nconst useIsDraggingWithin = ( elementRef ) => {\n\tconst [ isDraggingWithin, setIsDraggingWithin ] = useState( false );\n\n\tuseEffect( () => {\n\t\tconst { ownerDocument } = elementRef.current;\n\n\t\tfunction handleDragStart( event ) {\n\t\t\t// Check the first time when the dragging starts.\n\t\t\thandleDragEnter( event );\n\t\t}\n\n\t\t// Set to false whenever the user cancel the drag event by either releasing the mouse or press Escape.\n\t\tfunction handleDragEnd() {\n\t\t\tsetIsDraggingWithin( false );\n\t\t}\n\n\t\tfunction handleDragEnter( event ) {\n\t\t\t// Check if the current target is inside the item element.\n\t\t\tif ( elementRef.current.contains( event.target ) ) {\n\t\t\t\tsetIsDraggingWithin( true );\n\t\t\t} else {\n\t\t\t\tsetIsDraggingWithin( false );\n\t\t\t}\n\t\t}\n\n\t\t// Bind these events to the document to catch all drag events.\n\t\t// Ideally, we can also use `event.relatedTarget`, but sadly that\n\t\t// doesn't work in Safari.\n\t\townerDocument.addEventListener( 'dragstart', handleDragStart );\n\t\townerDocument.addEventListener( 'dragend', handleDragEnd );\n\t\townerDocument.addEventListener( 'dragenter', handleDragEnter );\n\n\t\treturn () => {\n\t\t\townerDocument.removeEventListener( 'dragstart', handleDragStart );\n\t\t\townerDocument.removeEventListener( 'dragend', handleDragEnd );\n\t\t\townerDocument.removeEventListener( 'dragenter', handleDragEnter );\n\t\t};\n\t}, [ elementRef ] );\n\n\treturn isDraggingWithin;\n};\n\nconst useIsInvalidLink = ( kind, type, id ) => {\n\tconst isPostType =\n\t\tkind === 'post-type' || type === 'post' || type === 'page';\n\tconst hasId = Number.isInteger( id );\n\tconst postStatus = useSelect(\n\t\t( select ) => {\n\t\t\tif ( ! isPostType ) {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\tconst { getEntityRecord } = select( coreStore );\n\t\t\treturn getEntityRecord( 'postType', type, id )?.status;\n\t\t},\n\t\t[ isPostType, type, id ]\n\t);\n\n\t// Check Navigation Link validity if:\n\t// 1. Link is 'post-type'.\n\t// 2. It has an id.\n\t// 3. It's neither null, nor undefined, as valid items might be either of those while loading.\n\t// If those conditions are met, check if\n\t// 1. The post status is published.\n\t// 2. The Navigation Link item has no label.\n\t// If either of those is true, invalidate.\n\tconst isInvalid =\n\t\tisPostType && hasId && postStatus && 'trash' === postStatus;\n\tconst isDraft = 'draft' === postStatus;\n\n\treturn [ isInvalid, isDraft ];\n};\n\nfunction getMissingText( type ) {\n\tlet missingText = '';\n\n\tswitch ( type ) {\n\t\tcase 'post':\n\t\t\t/* translators: label for missing post in navigation link block */\n\t\t\tmissingText = __( 'Select post' );\n\t\t\tbreak;\n\t\tcase 'page':\n\t\t\t/* translators: label for missing page in navigation link block */\n\t\t\tmissingText = __( 'Select page' );\n\t\t\tbreak;\n\t\tcase 'category':\n\t\t\t/* translators: label for missing category in navigation link block */\n\t\t\tmissingText = __( 'Select category' );\n\t\t\tbreak;\n\t\tcase 'tag':\n\t\t\t/* translators: label for missing tag in navigation link block */\n\t\t\tmissingText = __( 'Select tag' );\n\t\t\tbreak;\n\t\tdefault:\n\t\t\t/* translators: label for missing values in navigation link block */\n\t\t\tmissingText = __( 'Add link' );\n\t}\n\n\treturn missingText;\n}\n\nexport default function NavigationLinkEdit( {\n\tattributes,\n\tisSelected,\n\tsetAttributes,\n\tinsertBlocksAfter,\n\tmergeBlocks,\n\tonReplace,\n\tcontext,\n\tclientId,\n} ) {\n\tconst { id, label, type, url, description, rel, title, kind } = attributes;\n\n\tconst [ isInvalid, isDraft ] = useIsInvalidLink( kind, type, id );\n\tconst { maxNestingLevel } = context;\n\n\tconst {\n\t\treplaceBlock,\n\t\t__unstableMarkNextChangeAsNotPersistent,\n\t\tselectPreviousBlock,\n\t} = useDispatch( blockEditorStore );\n\tconst [ isLinkOpen, setIsLinkOpen ] = useState( false );\n\t// Store what element opened the popover, so we know where to return focus to (toolbar button vs navigation link text)\n\tconst [ openedBy, setOpenedBy ] = useState( null );\n\t// Use internal state instead of a ref to make sure that the component\n\t// re-renders when the popover's anchor updates.\n\tconst [ popoverAnchor, setPopoverAnchor ] = useState( null );\n\tconst listItemRef = useRef( null );\n\tconst isDraggingWithin = useIsDraggingWithin( listItemRef );\n\tconst itemLabelPlaceholder = __( 'Add label…' );\n\tconst ref = useRef();\n\tconst prevUrl = usePrevious( url );\n\n\t// Change the label using inspector causes rich text to change focus on firefox.\n\t// This is a workaround to keep the focus on the label field when label filed is focused we don't render the rich text.\n\tconst [ isLabelFieldFocused, setIsLabelFieldFocused ] = useState( false );\n\n\tconst {\n\t\tinnerBlocks,\n\t\tisAtMaxNesting,\n\t\tisTopLevelLink,\n\t\tisParentOfSelectedBlock,\n\t\thasChildren,\n\t} = useSelect(\n\t\t( select ) => {\n\t\t\tconst {\n\t\t\t\tgetBlocks,\n\t\t\t\tgetBlockCount,\n\t\t\t\tgetBlockName,\n\t\t\t\tgetBlockRootClientId,\n\t\t\t\thasSelectedInnerBlock,\n\t\t\t\tgetBlockParentsByBlockName,\n\t\t\t} = select( blockEditorStore );\n\n\t\t\treturn {\n\t\t\t\tinnerBlocks: getBlocks( clientId ),\n\t\t\t\tisAtMaxNesting:\n\t\t\t\t\tgetBlockParentsByBlockName( clientId, [\n\t\t\t\t\t\t'core/navigation-link',\n\t\t\t\t\t\t'core/navigation-submenu',\n\t\t\t\t\t] ).length >= maxNestingLevel,\n\t\t\t\tisTopLevelLink:\n\t\t\t\t\tgetBlockName( getBlockRootClientId( clientId ) ) ===\n\t\t\t\t\t'core/navigation',\n\t\t\t\tisParentOfSelectedBlock: hasSelectedInnerBlock(\n\t\t\t\t\tclientId,\n\t\t\t\t\ttrue\n\t\t\t\t),\n\t\t\t\thasChildren: !! getBlockCount( clientId ),\n\t\t\t};\n\t\t},\n\t\t[ clientId, maxNestingLevel ]\n\t);\n\n\t/**\n\t * Transform to submenu block.\n\t */\n\tconst transformToSubmenu = () => {\n\t\tconst newSubmenu = createBlock(\n\t\t\t'core/navigation-submenu',\n\t\t\tattributes,\n\t\t\tinnerBlocks.length > 0\n\t\t\t\t? innerBlocks\n\t\t\t\t: [ createBlock( 'core/navigation-link' ) ]\n\t\t);\n\t\treplaceBlock( clientId, newSubmenu );\n\t};\n\n\tuseEffect( () => {\n\t\t// Show the LinkControl on mount if the URL is empty\n\t\t// ( When adding a new menu item)\n\t\t// This can't be done in the useState call because it conflicts\n\t\t// with the autofocus behavior of the BlockListBlock component.\n\t\tif ( ! url ) {\n\t\t\tsetIsLinkOpen( true );\n\t\t}\n\t}, [ url ] );\n\n\tuseEffect( () => {\n\t\t// If block has inner blocks, transform to Submenu.\n\t\tif ( hasChildren ) {\n\t\t\t// This side-effect should not create an undo level as those should\n\t\t\t// only be created via user interactions.\n\t\t\t__unstableMarkNextChangeAsNotPersistent();\n\t\t\ttransformToSubmenu();\n\t\t}\n\t}, [ hasChildren ] );\n\n\t/**\n\t * The hook shouldn't be necessary but due to a focus loss happening\n\t * when selecting a suggestion in the link popover, we force close on block unselection.\n\t */\n\tuseEffect( () => {\n\t\tif ( ! isSelected ) {\n\t\t\tsetIsLinkOpen( false );\n\t\t}\n\t}, [ isSelected ] );\n\n\t// If the LinkControl popover is open and the URL has changed, close the LinkControl and focus the label text.\n\tuseEffect( () => {\n\t\t// We only want to do this when the URL has gone from nothing to a new URL AND the label looks like a URL\n\t\tif (\n\t\t\t! prevUrl &&\n\t\t\turl &&\n\t\t\tisLinkOpen &&\n\t\t\tisURL( prependHTTP( label ) ) &&\n\t\t\t/^.+\\.[a-z]+/.test( label )\n\t\t) {\n\t\t\t// Focus and select the label text.\n\t\t\tselectLabelText();\n\t\t}\n\t}, [ prevUrl, url, isLinkOpen, label ] );\n\n\t/**\n\t * Focus the Link label text and select it.\n\t */\n\tfunction selectLabelText() {\n\t\tref.current.focus();\n\t\tconst { ownerDocument } = ref.current;\n\t\tconst { defaultView } = ownerDocument;\n\t\tconst selection = defaultView.getSelection();\n\t\tconst range = ownerDocument.createRange();\n\t\t// Get the range of the current ref contents so we can add this range to the selection.\n\t\trange.selectNodeContents( ref.current );\n\t\tselection.removeAllRanges();\n\t\tselection.addRange( range );\n\t}\n\n\t/**\n\t * Removes the current link if set.\n\t */\n\tfunction removeLink() {\n\t\t// Reset all attributes that comprise the link.\n\t\t// It is critical that all attributes are reset\n\t\t// to their default values otherwise this may\n\t\t// in advertently trigger side effects because\n\t\t// the values will have \"changed\".\n\t\tsetAttributes( {\n\t\t\turl: undefined,\n\t\t\tlabel: undefined,\n\t\t\tid: undefined,\n\t\t\tkind: undefined,\n\t\t\ttype: undefined,\n\t\t\topensInNewTab: false,\n\t\t} );\n\n\t\t// Close the link editing UI.\n\t\tsetIsLinkOpen( false );\n\t}\n\n\tconst {\n\t\ttextColor,\n\t\tcustomTextColor,\n\t\tbackgroundColor,\n\t\tcustomBackgroundColor,\n\t} = getColors( context, ! isTopLevelLink );\n\n\tfunction onKeyDown( event ) {\n\t\tif ( isKeyboardEvent.primary( event, 'k' ) ) {\n\t\t\t// Required to prevent the command center from opening,\n\t\t\t// as it shares the CMD+K shortcut.\n\t\t\t// See https://github.com/WordPress/gutenberg/pull/59845.\n\t\t\tevent.preventDefault();\n\t\t\t// If this link is a child of a parent submenu item, the parent submenu item event will also open, closing this popover\n\t\t\tevent.stopPropagation();\n\t\t\tsetIsLinkOpen( true );\n\t\t\tsetOpenedBy( ref.current );\n\t\t}\n\t}\n\n\tconst blockProps = useBlockProps( {\n\t\tref: useMergeRefs( [ setPopoverAnchor, listItemRef ] ),\n\t\tclassName: classnames( 'wp-block-navigation-item', {\n\t\t\t'is-editing': isSelected || isParentOfSelectedBlock,\n\t\t\t'is-dragging-within': isDraggingWithin,\n\t\t\t'has-link': !! url,\n\t\t\t'has-child': hasChildren,\n\t\t\t'has-text-color': !! textColor || !! customTextColor,\n\t\t\t[ getColorClassName( 'color', textColor ) ]: !! textColor,\n\t\t\t'has-background': !! backgroundColor || customBackgroundColor,\n\t\t\t[ getColorClassName( 'background-color', backgroundColor ) ]:\n\t\t\t\t!! backgroundColor,\n\t\t} ),\n\t\tstyle: {\n\t\t\tcolor: ! textColor && customTextColor,\n\t\t\tbackgroundColor: ! backgroundColor && customBackgroundColor,\n\t\t},\n\t\tonKeyDown,\n\t} );\n\n\tconst innerBlocksProps = useInnerBlocksProps(\n\t\t{\n\t\t\t...blockProps,\n\t\t\tclassName: 'remove-outline', // Remove the outline from the inner blocks container.\n\t\t},\n\t\t{\n\t\t\tdefaultBlock: DEFAULT_BLOCK,\n\t\t\tdirectInsert: true,\n\t\t\trenderAppender: false,\n\t\t}\n\t);\n\n\tif ( ! url || isInvalid || isDraft ) {\n\t\tblockProps.onClick = () => {\n\t\t\tsetIsLinkOpen( true );\n\t\t\tsetOpenedBy( ref.current );\n\t\t};\n\t}\n\n\tconst classes = classnames( 'wp-block-navigation-item__content', {\n\t\t'wp-block-navigation-link__placeholder': ! url || isInvalid || isDraft,\n\t} );\n\n\tconst missingText = getMissingText( type );\n\t/* translators: Whether the navigation link is Invalid or a Draft. */\n\tconst placeholderText = `(${\n\t\tisInvalid ? __( 'Invalid' ) : __( 'Draft' )\n\t})`;\n\tconst tooltipText =\n\t\tisInvalid || isDraft\n\t\t\t? __( 'This item has been deleted, or is a draft' )\n\t\t\t: __( 'This item is missing a link' );\n\n\treturn (\n\t\t<>\n\t\t\t<BlockControls>\n\t\t\t\t<ToolbarGroup>\n\t\t\t\t\t<ToolbarButton\n\t\t\t\t\t\tname=\"link\"\n\t\t\t\t\t\ticon={ linkIcon }\n\t\t\t\t\t\ttitle={ __( 'Link' ) }\n\t\t\t\t\t\tshortcut={ displayShortcut.primary( 'k' ) }\n\t\t\t\t\t\tonClick={ ( event ) => {\n\t\t\t\t\t\t\tsetIsLinkOpen( true );\n\t\t\t\t\t\t\tsetOpenedBy( event.currentTarget );\n\t\t\t\t\t\t} }\n\t\t\t\t\t/>\n\t\t\t\t\t{ ! isAtMaxNesting && (\n\t\t\t\t\t\t<ToolbarButton\n\t\t\t\t\t\t\tname=\"submenu\"\n\t\t\t\t\t\t\ticon={ addSubmenu }\n\t\t\t\t\t\t\ttitle={ __( 'Add submenu' ) }\n\t\t\t\t\t\t\tonClick={ transformToSubmenu }\n\t\t\t\t\t\t/>\n\t\t\t\t\t) }\n\t\t\t\t</ToolbarGroup>\n\t\t\t</BlockControls>\n\t\t\t{ /* Warning, this duplicated in packages/block-library/src/navigation-submenu/edit.js */ }\n\t\t\t<InspectorControls>\n\t\t\t\t<PanelBody title={ __( 'Settings' ) }>\n\t\t\t\t\t<TextControl\n\t\t\t\t\t\t__nextHasNoMarginBottom\n\t\t\t\t\t\t__next40pxDefaultSize\n\t\t\t\t\t\tvalue={ label ? stripHTML( label ) : '' }\n\t\t\t\t\t\tonChange={ ( labelValue ) => {\n\t\t\t\t\t\t\tsetAttributes( { label: labelValue } );\n\t\t\t\t\t\t} }\n\t\t\t\t\t\tlabel={ __( 'Text' ) }\n\t\t\t\t\t\tautoComplete=\"off\"\n\t\t\t\t\t\tonFocus={ () => setIsLabelFieldFocused( true ) }\n\t\t\t\t\t\tonBlur={ () => setIsLabelFieldFocused( false ) }\n\t\t\t\t\t/>\n\t\t\t\t\t<TextControl\n\t\t\t\t\t\t__nextHasNoMarginBottom\n\t\t\t\t\t\t__next40pxDefaultSize\n\t\t\t\t\t\tvalue={ url ? safeDecodeURI( url ) : '' }\n\t\t\t\t\t\tonChange={ ( urlValue ) => {\n\t\t\t\t\t\t\tupdateAttributes(\n\t\t\t\t\t\t\t\t{ url: urlValue },\n\t\t\t\t\t\t\t\tsetAttributes,\n\t\t\t\t\t\t\t\tattributes\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t} }\n\t\t\t\t\t\tlabel={ __( 'Link' ) }\n\t\t\t\t\t\tautoComplete=\"off\"\n\t\t\t\t\t/>\n\t\t\t\t\t<TextareaControl\n\t\t\t\t\t\t__nextHasNoMarginBottom\n\t\t\t\t\t\tvalue={ description || '' }\n\t\t\t\t\t\tonChange={ ( descriptionValue ) => {\n\t\t\t\t\t\t\tsetAttributes( { description: descriptionValue } );\n\t\t\t\t\t\t} }\n\t\t\t\t\t\tlabel={ __( 'Description' ) }\n\t\t\t\t\t\thelp={ __(\n\t\t\t\t\t\t\t'The description will be displayed in the menu if the current theme supports it.'\n\t\t\t\t\t\t) }\n\t\t\t\t\t/>\n\t\t\t\t\t<TextControl\n\t\t\t\t\t\t__nextHasNoMarginBottom\n\t\t\t\t\t\t__next40pxDefaultSize\n\t\t\t\t\t\tvalue={ title || '' }\n\t\t\t\t\t\tonChange={ ( titleValue ) => {\n\t\t\t\t\t\t\tsetAttributes( { title: titleValue } );\n\t\t\t\t\t\t} }\n\t\t\t\t\t\tlabel={ __( 'Title attribute' ) }\n\t\t\t\t\t\tautoComplete=\"off\"\n\t\t\t\t\t\thelp={ __(\n\t\t\t\t\t\t\t'Additional information to help clarify the purpose of the link.'\n\t\t\t\t\t\t) }\n\t\t\t\t\t/>\n\t\t\t\t\t<TextControl\n\t\t\t\t\t\t__nextHasNoMarginBottom\n\t\t\t\t\t\t__next40pxDefaultSize\n\t\t\t\t\t\tvalue={ rel || '' }\n\t\t\t\t\t\tonChange={ ( relValue ) => {\n\t\t\t\t\t\t\tsetAttributes( { rel: relValue } );\n\t\t\t\t\t\t} }\n\t\t\t\t\t\tlabel={ __( 'Rel attribute' ) }\n\t\t\t\t\t\tautoComplete=\"off\"\n\t\t\t\t\t\thelp={ __(\n\t\t\t\t\t\t\t'The relationship of the linked URL as space-separated link types.'\n\t\t\t\t\t\t) }\n\t\t\t\t\t/>\n\t\t\t\t</PanelBody>\n\t\t\t</InspectorControls>\n\t\t\t<div { ...blockProps }>\n\t\t\t\t{ /* eslint-disable jsx-a11y/anchor-is-valid */ }\n\t\t\t\t<a className={ classes }>\n\t\t\t\t\t{ /* eslint-enable */ }\n\t\t\t\t\t{ ! url ? (\n\t\t\t\t\t\t<div className=\"wp-block-navigation-link__placeholder-text\">\n\t\t\t\t\t\t\t<Tooltip text={ tooltipText }>\n\t\t\t\t\t\t\t\t<span>{ missingText }</span>\n\t\t\t\t\t\t\t</Tooltip>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t) : (\n\t\t\t\t\t\t<>\n\t\t\t\t\t\t\t{ ! isInvalid &&\n\t\t\t\t\t\t\t\t! isDraft &&\n\t\t\t\t\t\t\t\t! isLabelFieldFocused && (\n\t\t\t\t\t\t\t\t\t<>\n\t\t\t\t\t\t\t\t\t\t<RichText\n\t\t\t\t\t\t\t\t\t\t\tref={ ref }\n\t\t\t\t\t\t\t\t\t\t\tidentifier=\"label\"\n\t\t\t\t\t\t\t\t\t\t\tclassName=\"wp-block-navigation-item__label\"\n\t\t\t\t\t\t\t\t\t\t\tvalue={ label }\n\t\t\t\t\t\t\t\t\t\t\tonChange={ ( labelValue ) =>\n\t\t\t\t\t\t\t\t\t\t\t\tsetAttributes( {\n\t\t\t\t\t\t\t\t\t\t\t\t\tlabel: labelValue,\n\t\t\t\t\t\t\t\t\t\t\t\t} )\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\tonMerge={ mergeBlocks }\n\t\t\t\t\t\t\t\t\t\t\tonReplace={ onReplace }\n\t\t\t\t\t\t\t\t\t\t\t__unstableOnSplitAtEnd={ () =>\n\t\t\t\t\t\t\t\t\t\t\t\tinsertBlocksAfter(\n\t\t\t\t\t\t\t\t\t\t\t\t\tcreateBlock(\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t'core/navigation-link'\n\t\t\t\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\taria-label={ __(\n\t\t\t\t\t\t\t\t\t\t\t\t'Navigation link text'\n\t\t\t\t\t\t\t\t\t\t\t) }\n\t\t\t\t\t\t\t\t\t\t\tplaceholder={ itemLabelPlaceholder }\n\t\t\t\t\t\t\t\t\t\t\twithoutInteractiveFormatting\n\t\t\t\t\t\t\t\t\t\t\tallowedFormats={ [\n\t\t\t\t\t\t\t\t\t\t\t\t'core/bold',\n\t\t\t\t\t\t\t\t\t\t\t\t'core/italic',\n\t\t\t\t\t\t\t\t\t\t\t\t'core/image',\n\t\t\t\t\t\t\t\t\t\t\t\t'core/strikethrough',\n\t\t\t\t\t\t\t\t\t\t\t] }\n\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t\t{ description && (\n\t\t\t\t\t\t\t\t\t\t\t<span className=\"wp-block-navigation-item__description\">\n\t\t\t\t\t\t\t\t\t\t\t\t{ description }\n\t\t\t\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t\t\t\t) }\n\t\t\t\t\t\t\t\t\t</>\n\t\t\t\t\t\t\t\t) }\n\t\t\t\t\t\t\t{ ( isInvalid ||\n\t\t\t\t\t\t\t\tisDraft ||\n\t\t\t\t\t\t\t\tisLabelFieldFocused ) && (\n\t\t\t\t\t\t\t\t<div className=\"wp-block-navigation-link__placeholder-text wp-block-navigation-link__label\">\n\t\t\t\t\t\t\t\t\t<Tooltip text={ tooltipText }>\n\t\t\t\t\t\t\t\t\t\t<span\n\t\t\t\t\t\t\t\t\t\t\taria-label={ __(\n\t\t\t\t\t\t\t\t\t\t\t\t'Navigation link text'\n\t\t\t\t\t\t\t\t\t\t\t) }\n\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t// Some attributes are stored in an escaped form. It's a legacy issue.\n\t\t\t\t\t\t\t\t\t\t\t\t// Ideally they would be stored in a raw, unescaped form.\n\t\t\t\t\t\t\t\t\t\t\t\t// Unescape is used here to \"recover\" the escaped characters\n\t\t\t\t\t\t\t\t\t\t\t\t// so they display without encoding.\n\t\t\t\t\t\t\t\t\t\t\t\t// See `updateAttributes` for more details.\n\t\t\t\t\t\t\t\t\t\t\t\t`${ decodeEntities( label ) } ${\n\t\t\t\t\t\t\t\t\t\t\t\t\tisInvalid || isDraft\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t? placeholderText\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t: ''\n\t\t\t\t\t\t\t\t\t\t\t\t}`.trim()\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t\t\t</Tooltip>\n\t\t\t\t\t\t\t\t</div>\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\t{ isLinkOpen && (\n\t\t\t\t\t\t<LinkUI\n\t\t\t\t\t\t\tclientId={ clientId }\n\t\t\t\t\t\t\tlink={ attributes }\n\t\t\t\t\t\t\tonClose={ () => {\n\t\t\t\t\t\t\t\t// If there is no link then remove the auto-inserted block.\n\t\t\t\t\t\t\t\t// This avoids empty blocks which can provided a poor UX.\n\t\t\t\t\t\t\t\tif ( ! url ) {\n\t\t\t\t\t\t\t\t\t// Select the previous block to keep focus nearby\n\t\t\t\t\t\t\t\t\tselectPreviousBlock( clientId, true );\n\t\t\t\t\t\t\t\t\t// Remove the link.\n\t\t\t\t\t\t\t\t\tonReplace( [] );\n\t\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\tsetIsLinkOpen( false );\n\t\t\t\t\t\t\t\tif ( openedBy ) {\n\t\t\t\t\t\t\t\t\topenedBy.focus();\n\t\t\t\t\t\t\t\t\tsetOpenedBy( null );\n\t\t\t\t\t\t\t\t} else if ( ref.current ) {\n\t\t\t\t\t\t\t\t\t// select the ref when adding a new link\n\t\t\t\t\t\t\t\t\tref.current.focus();\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t// Fallback\n\t\t\t\t\t\t\t\t\tselectPreviousBlock( clientId, true );\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} }\n\t\t\t\t\t\t\tanchor={ popoverAnchor }\n\t\t\t\t\t\t\tonRemove={ removeLink }\n\t\t\t\t\t\t\tonChange={ ( updatedValue ) => {\n\t\t\t\t\t\t\t\tupdateAttributes(\n\t\t\t\t\t\t\t\t\tupdatedValue,\n\t\t\t\t\t\t\t\t\tsetAttributes,\n\t\t\t\t\t\t\t\t\tattributes\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t} }\n\t\t\t\t\t\t/>\n\t\t\t\t\t) }\n\t\t\t\t</a>\n\t\t\t\t<div { ...innerBlocksProps } />\n\t\t\t</div>\n\t\t</>\n\t);\n}\n"],"mappings":";AAAA;AACA;AACA;AACA,OAAOA,UAAU,MAAM,YAAY;;AAEnC;AACA;AACA;AACA,SAASC,WAAW,QAAQ,mBAAmB;AAC/C,SAASC,SAAS,EAAEC,WAAW,QAAQ,iBAAiB;AACxD,SACCC,SAAS,EACTC,WAAW,EACXC,eAAe,EACfC,aAAa,EACbC,OAAO,EACPC,YAAY,QACN,uBAAuB;AAC9B,SAASC,eAAe,EAAEC,eAAe,QAAQ,qBAAqB;AACtE,SAASC,EAAE,QAAQ,iBAAiB;AACpC,SACCC,aAAa,EACbC,iBAAiB,EACjBC,QAAQ,EACRC,aAAa,EACbC,KAAK,IAAIC,gBAAgB,EACzBC,iBAAiB,EACjBC,mBAAmB,QACb,yBAAyB;AAChC,SAASC,KAAK,EAAEC,WAAW,EAAEC,aAAa,QAAQ,gBAAgB;AAClE,SAASC,QAAQ,EAAEC,SAAS,EAAEC,MAAM,QAAQ,oBAAoB;AAChE,SAASC,mBAAmB,IAAIC,SAAS,QAAQ,gBAAgB;AACjE,SAASC,cAAc,QAAQ,0BAA0B;AACzD,SAASC,IAAI,IAAIC,QAAQ,EAAEC,UAAU,QAAQ,kBAAkB;AAC/D,SAASf,KAAK,IAAIgB,SAAS,QAAQ,sBAAsB;AACzD,SAASC,YAAY,EAAEC,WAAW,QAAQ,oBAAoB;;AAE9D;AACA;AACA;AACA,SAASC,MAAM,QAAQ,WAAW;AAClC,SAASC,gBAAgB,QAAQ,qBAAqB;AACtD,SAASC,SAAS,QAAQ,0BAA0B;AAEpD,MAAMC,aAAa,GAAG;EAAEC,IAAI,EAAE;AAAuB,CAAC;;AAEtD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAMC,mBAAmB,GAAKC,UAAU,IAAM;EAC7C,MAAM,CAAEC,gBAAgB,EAAEC,mBAAmB,CAAE,GAAGpB,QAAQ,CAAE,KAAM,CAAC;EAEnEC,SAAS,CAAE,MAAM;IAChB,MAAM;MAAEoB;IAAc,CAAC,GAAGH,UAAU,CAACI,OAAO;IAE5C,SAASC,eAAeA,CAAEC,KAAK,EAAG;MACjC;MACAC,eAAe,CAAED,KAAM,CAAC;IACzB;;IAEA;IACA,SAASE,aAAaA,CAAA,EAAG;MACxBN,mBAAmB,CAAE,KAAM,CAAC;IAC7B;IAEA,SAASK,eAAeA,CAAED,KAAK,EAAG;MACjC;MACA,IAAKN,UAAU,CAACI,OAAO,CAACK,QAAQ,CAAEH,KAAK,CAACI,MAAO,CAAC,EAAG;QAClDR,mBAAmB,CAAE,IAAK,CAAC;MAC5B,CAAC,MAAM;QACNA,mBAAmB,CAAE,KAAM,CAAC;MAC7B;IACD;;IAEA;IACA;IACA;IACAC,aAAa,CAACQ,gBAAgB,CAAE,WAAW,EAAEN,eAAgB,CAAC;IAC9DF,aAAa,CAACQ,gBAAgB,CAAE,SAAS,EAAEH,aAAc,CAAC;IAC1DL,aAAa,CAACQ,gBAAgB,CAAE,WAAW,EAAEJ,eAAgB,CAAC;IAE9D,OAAO,MAAM;MACZJ,aAAa,CAACS,mBAAmB,CAAE,WAAW,EAAEP,eAAgB,CAAC;MACjEF,aAAa,CAACS,mBAAmB,CAAE,SAAS,EAAEJ,aAAc,CAAC;MAC7DL,aAAa,CAACS,mBAAmB,CAAE,WAAW,EAAEL,eAAgB,CAAC;IAClE,CAAC;EACF,CAAC,EAAE,CAAEP,UAAU,CAAG,CAAC;EAEnB,OAAOC,gBAAgB;AACxB,CAAC;AAED,MAAMY,gBAAgB,GAAGA,CAAEC,IAAI,EAAEC,IAAI,EAAEC,EAAE,KAAM;EAC9C,MAAMC,UAAU,GACfH,IAAI,KAAK,WAAW,IAAIC,IAAI,KAAK,MAAM,IAAIA,IAAI,KAAK,MAAM;EAC3D,MAAMG,KAAK,GAAGC,MAAM,CAACC,SAAS,CAAEJ,EAAG,CAAC;EACpC,MAAMK,UAAU,GAAG7D,SAAS,CACzB8D,MAAM,IAAM;IACb,IAAK,CAAEL,UAAU,EAAG;MACnB,OAAO,IAAI;IACZ;IACA,MAAM;MAAEM;IAAgB,CAAC,GAAGD,MAAM,CAAE/B,SAAU,CAAC;IAC/C,OAAOgC,eAAe,CAAE,UAAU,EAAER,IAAI,EAAEC,EAAG,CAAC,EAAEQ,MAAM;EACvD,CAAC,EACD,CAAEP,UAAU,EAAEF,IAAI,EAAEC,EAAE,CACvB,CAAC;;EAED;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA,MAAMS,SAAS,GACdR,UAAU,IAAIC,KAAK,IAAIG,UAAU,IAAI,OAAO,KAAKA,UAAU;EAC5D,MAAMK,OAAO,GAAG,OAAO,KAAKL,UAAU;EAEtC,OAAO,CAAEI,SAAS,EAAEC,OAAO,CAAE;AAC9B,CAAC;AAED,SAASC,cAAcA,CAAEZ,IAAI,EAAG;EAC/B,IAAIa,WAAW,GAAG,EAAE;EAEpB,QAASb,IAAI;IACZ,KAAK,MAAM;MACV;MACAa,WAAW,GAAG1D,EAAE,CAAE,aAAc,CAAC;MACjC;IACD,KAAK,MAAM;MACV;MACA0D,WAAW,GAAG1D,EAAE,CAAE,aAAc,CAAC;MACjC;IACD,KAAK,UAAU;MACd;MACA0D,WAAW,GAAG1D,EAAE,CAAE,iBAAkB,CAAC;MACrC;IACD,KAAK,KAAK;MACT;MACA0D,WAAW,GAAG1D,EAAE,CAAE,YAAa,CAAC;MAChC;IACD;MACC;MACA0D,WAAW,GAAG1D,EAAE,CAAE,UAAW,CAAC;EAChC;EAEA,OAAO0D,WAAW;AACnB;AAEA,eAAe,SAASC,kBAAkBA,CAAE;EAC3CC,UAAU;EACVC,UAAU;EACVC,aAAa;EACbC,iBAAiB;EACjBC,WAAW;EACXC,SAAS;EACTC,OAAO;EACPC;AACD,CAAC,EAAG;EACH,MAAM;IAAErB,EAAE;IAAEsB,KAAK;IAAEvB,IAAI;IAAEwB,GAAG;IAAEC,WAAW;IAAEC,GAAG;IAAEC,KAAK;IAAE5B;EAAK,CAAC,GAAGgB,UAAU;EAE1E,MAAM,CAAEL,SAAS,EAAEC,OAAO,CAAE,GAAGb,gBAAgB,CAAEC,IAAI,EAAEC,IAAI,EAAEC,EAAG,CAAC;EACjE,MAAM;IAAE2B;EAAgB,CAAC,GAAGP,OAAO;EAEnC,MAAM;IACLQ,YAAY;IACZC,uCAAuC;IACvCC;EACD,CAAC,GAAGrF,WAAW,CAAEe,gBAAiB,CAAC;EACnC,MAAM,CAAEuE,UAAU,EAAEC,aAAa,CAAE,GAAGlE,QAAQ,CAAE,KAAM,CAAC;EACvD;EACA,MAAM,CAAEmE,QAAQ,EAAEC,WAAW,CAAE,GAAGpE,QAAQ,CAAE,IAAK,CAAC;EAClD;EACA;EACA,MAAM,CAAEqE,aAAa,EAAEC,gBAAgB,CAAE,GAAGtE,QAAQ,CAAE,IAAK,CAAC;EAC5D,MAAMuE,WAAW,GAAGrE,MAAM,CAAE,IAAK,CAAC;EAClC,MAAMiB,gBAAgB,GAAGF,mBAAmB,CAAEsD,WAAY,CAAC;EAC3D,MAAMC,oBAAoB,GAAGpF,EAAE,CAAE,YAAa,CAAC;EAC/C,MAAMqF,GAAG,GAAGvE,MAAM,CAAC,CAAC;EACpB,MAAMwE,OAAO,GAAG/D,WAAW,CAAE8C,GAAI,CAAC;;EAElC;EACA;EACA,MAAM,CAAEkB,mBAAmB,EAAEC,sBAAsB,CAAE,GAAG5E,QAAQ,CAAE,KAAM,CAAC;EAEzE,MAAM;IACL6E,WAAW;IACXC,cAAc;IACdC,cAAc;IACdC,uBAAuB;IACvBC;EACD,CAAC,GAAGvG,SAAS,CACV8D,MAAM,IAAM;IACb,MAAM;MACL0C,SAAS;MACTC,aAAa;MACbC,YAAY;MACZC,oBAAoB;MACpBC,qBAAqB;MACrBC;IACD,CAAC,GAAG/C,MAAM,CAAE9C,gBAAiB,CAAC;IAE9B,OAAO;MACNmF,WAAW,EAAEK,SAAS,CAAE3B,QAAS,CAAC;MAClCuB,cAAc,EACbS,0BAA0B,CAAEhC,QAAQ,EAAE,CACrC,sBAAsB,EACtB,yBAAyB,CACxB,CAAC,CAACiC,MAAM,IAAI3B,eAAe;MAC9BkB,cAAc,EACbK,YAAY,CAAEC,oBAAoB,CAAE9B,QAAS,CAAE,CAAC,KAChD,iBAAiB;MAClByB,uBAAuB,EAAEM,qBAAqB,CAC7C/B,QAAQ,EACR,IACD,CAAC;MACD0B,WAAW,EAAE,CAAC,CAAEE,aAAa,CAAE5B,QAAS;IACzC,CAAC;EACF,CAAC,EACD,CAAEA,QAAQ,EAAEM,eAAe,CAC5B,CAAC;;EAED;AACD;AACA;EACC,MAAM4B,kBAAkB,GAAGA,CAAA,KAAM;IAChC,MAAMC,UAAU,GAAGjH,WAAW,CAC7B,yBAAyB,EACzBuE,UAAU,EACV6B,WAAW,CAACW,MAAM,GAAG,CAAC,GACnBX,WAAW,GACX,CAAEpG,WAAW,CAAE,sBAAuB,CAAC,CAC3C,CAAC;IACDqF,YAAY,CAAEP,QAAQ,EAAEmC,UAAW,CAAC;EACrC,CAAC;EAEDzF,SAAS,CAAE,MAAM;IAChB;IACA;IACA;IACA;IACA,IAAK,CAAEwD,GAAG,EAAG;MACZS,aAAa,CAAE,IAAK,CAAC;IACtB;EACD,CAAC,EAAE,CAAET,GAAG,CAAG,CAAC;EAEZxD,SAAS,CAAE,MAAM;IAChB;IACA,IAAKgF,WAAW,EAAG;MAClB;MACA;MACAlB,uCAAuC,CAAC,CAAC;MACzC0B,kBAAkB,CAAC,CAAC;IACrB;EACD,CAAC,EAAE,CAAER,WAAW,CAAG,CAAC;;EAEpB;AACD;AACA;AACA;EACChF,SAAS,CAAE,MAAM;IAChB,IAAK,CAAEgD,UAAU,EAAG;MACnBiB,aAAa,CAAE,KAAM,CAAC;IACvB;EACD,CAAC,EAAE,CAAEjB,UAAU,CAAG,CAAC;;EAEnB;EACAhD,SAAS,CAAE,MAAM;IAChB;IACA,IACC,CAAEyE,OAAO,IACTjB,GAAG,IACHQ,UAAU,IACVpE,KAAK,CAAEC,WAAW,CAAE0D,KAAM,CAAE,CAAC,IAC7B,aAAa,CAACmC,IAAI,CAAEnC,KAAM,CAAC,EAC1B;MACD;MACAoC,eAAe,CAAC,CAAC;IAClB;EACD,CAAC,EAAE,CAAElB,OAAO,EAAEjB,GAAG,EAAEQ,UAAU,EAAET,KAAK,CAAG,CAAC;;EAExC;AACD;AACA;EACC,SAASoC,eAAeA,CAAA,EAAG;IAC1BnB,GAAG,CAACnD,OAAO,CAACuE,KAAK,CAAC,CAAC;IACnB,MAAM;MAAExE;IAAc,CAAC,GAAGoD,GAAG,CAACnD,OAAO;IACrC,MAAM;MAAEwE;IAAY,CAAC,GAAGzE,aAAa;IACrC,MAAM0E,SAAS,GAAGD,WAAW,CAACE,YAAY,CAAC,CAAC;IAC5C,MAAMC,KAAK,GAAG5E,aAAa,CAAC6E,WAAW,CAAC,CAAC;IACzC;IACAD,KAAK,CAACE,kBAAkB,CAAE1B,GAAG,CAACnD,OAAQ,CAAC;IACvCyE,SAAS,CAACK,eAAe,CAAC,CAAC;IAC3BL,SAAS,CAACM,QAAQ,CAAEJ,KAAM,CAAC;EAC5B;;EAEA;AACD;AACA;EACC,SAASK,UAAUA,CAAA,EAAG;IACrB;IACA;IACA;IACA;IACA;IACApD,aAAa,CAAE;MACdO,GAAG,EAAE8C,SAAS;MACd/C,KAAK,EAAE+C,SAAS;MAChBrE,EAAE,EAAEqE,SAAS;MACbvE,IAAI,EAAEuE,SAAS;MACftE,IAAI,EAAEsE,SAAS;MACfC,aAAa,EAAE;IAChB,CAAE,CAAC;;IAEH;IACAtC,aAAa,CAAE,KAAM,CAAC;EACvB;EAEA,MAAM;IACLuC,SAAS;IACTC,eAAe;IACfC,eAAe;IACfC;EACD,CAAC,GAAG9F,SAAS,CAAEwC,OAAO,EAAE,CAAEyB,cAAe,CAAC;EAE1C,SAAS8B,SAASA,CAAErF,KAAK,EAAG;IAC3B,IAAKrC,eAAe,CAAC2H,OAAO,CAAEtF,KAAK,EAAE,GAAI,CAAC,EAAG;MAC5C;MACA;MACA;MACAA,KAAK,CAACuF,cAAc,CAAC,CAAC;MACtB;MACAvF,KAAK,CAACwF,eAAe,CAAC,CAAC;MACvB9C,aAAa,CAAE,IAAK,CAAC;MACrBE,WAAW,CAAEK,GAAG,CAACnD,OAAQ,CAAC;IAC3B;EACD;EAEA,MAAM2F,UAAU,GAAGzH,aAAa,CAAE;IACjCiF,GAAG,EAAE/D,YAAY,CAAE,CAAE4D,gBAAgB,EAAEC,WAAW,CAAG,CAAC;IACtD2C,SAAS,EAAE1I,UAAU,CAAE,0BAA0B,EAAE;MAClD,YAAY,EAAEyE,UAAU,IAAI+B,uBAAuB;MACnD,oBAAoB,EAAE7D,gBAAgB;MACtC,UAAU,EAAE,CAAC,CAAEsC,GAAG;MAClB,WAAW,EAAEwB,WAAW;MACxB,gBAAgB,EAAE,CAAC,CAAEwB,SAAS,IAAI,CAAC,CAAEC,eAAe;MACpD,CAAE/G,iBAAiB,CAAE,OAAO,EAAE8G,SAAU,CAAC,GAAI,CAAC,CAAEA,SAAS;MACzD,gBAAgB,EAAE,CAAC,CAAEE,eAAe,IAAIC,qBAAqB;MAC7D,CAAEjH,iBAAiB,CAAE,kBAAkB,EAAEgH,eAAgB,CAAC,GACzD,CAAC,CAAEA;IACL,CAAE,CAAC;IACHQ,KAAK,EAAE;MACNC,KAAK,EAAE,CAAEX,SAAS,IAAIC,eAAe;MACrCC,eAAe,EAAE,CAAEA,eAAe,IAAIC;IACvC,CAAC;IACDC;EACD,CAAE,CAAC;EAEH,MAAMQ,gBAAgB,GAAGzH,mBAAmB,CAC3C;IACC,GAAGqH,UAAU;IACbC,SAAS,EAAE,gBAAgB,CAAE;EAC9B,CAAC,EACD;IACCI,YAAY,EAAEvG,aAAa;IAC3BwG,YAAY,EAAE,IAAI;IAClBC,cAAc,EAAE;EACjB,CACD,CAAC;EAED,IAAK,CAAE/D,GAAG,IAAId,SAAS,IAAIC,OAAO,EAAG;IACpCqE,UAAU,CAACQ,OAAO,GAAG,MAAM;MAC1BvD,aAAa,CAAE,IAAK,CAAC;MACrBE,WAAW,CAAEK,GAAG,CAACnD,OAAQ,CAAC;IAC3B,CAAC;EACF;EAEA,MAAMoG,OAAO,GAAGlJ,UAAU,CAAE,mCAAmC,EAAE;IAChE,uCAAuC,EAAE,CAAEiF,GAAG,IAAId,SAAS,IAAIC;EAChE,CAAE,CAAC;EAEH,MAAME,WAAW,GAAGD,cAAc,CAAEZ,IAAK,CAAC;EAC1C;EACA,MAAM0F,eAAe,GAAI,IACxBhF,SAAS,GAAGvD,EAAE,CAAE,SAAU,CAAC,GAAGA,EAAE,CAAE,OAAQ,CAC1C,GAAE;EACH,MAAMwI,WAAW,GAChBjF,SAAS,IAAIC,OAAO,GACjBxD,EAAE,CAAE,2CAA4C,CAAC,GACjDA,EAAE,CAAE,6BAA8B,CAAC;EAEvC,OACCyI,aAAA,CAAAC,QAAA,QACCD,aAAA,CAACxI,aAAa,QACbwI,aAAA,CAAC5I,YAAY,QACZ4I,aAAA,CAAC9I,aAAa;IACbiC,IAAI,EAAC,MAAM;IACX+G,IAAI,EAAGxH,QAAU;IACjBqD,KAAK,EAAGxE,EAAE,CAAE,MAAO,CAAG;IACtB4I,QAAQ,EAAG9I,eAAe,CAAC4H,OAAO,CAAE,GAAI,CAAG;IAC3CW,OAAO,EAAKjG,KAAK,IAAM;MACtB0C,aAAa,CAAE,IAAK,CAAC;MACrBE,WAAW,CAAE5C,KAAK,CAACyG,aAAc,CAAC;IACnC;EAAG,CACH,CAAC,EACA,CAAEnD,cAAc,IACjB+C,aAAA,CAAC9I,aAAa;IACbiC,IAAI,EAAC,SAAS;IACd+G,IAAI,EAAGvH,UAAY;IACnBoD,KAAK,EAAGxE,EAAE,CAAE,aAAc,CAAG;IAC7BqI,OAAO,EAAGhC;EAAoB,CAC9B,CAEW,CACA,CAAC,EAEhBoC,aAAA,CAACvI,iBAAiB,QACjBuI,aAAA,CAACjJ,SAAS;IAACgF,KAAK,EAAGxE,EAAE,CAAE,UAAW;EAAG,GACpCyI,aAAA,CAAChJ,WAAW;IACXqJ,uBAAuB;IACvBC,qBAAqB;IACrBC,KAAK,EAAG5E,KAAK,GAAGpD,SAAS,CAAEoD,KAAM,CAAC,GAAG,EAAI;IACzC6E,QAAQ,EAAKC,UAAU,IAAM;MAC5BpF,aAAa,CAAE;QAAEM,KAAK,EAAE8E;MAAW,CAAE,CAAC;IACvC,CAAG;IACH9E,KAAK,EAAGpE,EAAE,CAAE,MAAO,CAAG;IACtBmJ,YAAY,EAAC,KAAK;IAClBC,OAAO,EAAGA,CAAA,KAAM5D,sBAAsB,CAAE,IAAK,CAAG;IAChD6D,MAAM,EAAGA,CAAA,KAAM7D,sBAAsB,CAAE,KAAM;EAAG,CAChD,CAAC,EACFiD,aAAA,CAAChJ,WAAW;IACXqJ,uBAAuB;IACvBC,qBAAqB;IACrBC,KAAK,EAAG3E,GAAG,GAAG1D,aAAa,CAAE0D,GAAI,CAAC,GAAG,EAAI;IACzC4E,QAAQ,EAAKK,QAAQ,IAAM;MAC1B7H,gBAAgB,CACf;QAAE4C,GAAG,EAAEiF;MAAS,CAAC,EACjBxF,aAAa,EACbF,UACD,CAAC;IACF,CAAG;IACHQ,KAAK,EAAGpE,EAAE,CAAE,MAAO,CAAG;IACtBmJ,YAAY,EAAC;EAAK,CAClB,CAAC,EACFV,aAAA,CAAC/I,eAAe;IACfoJ,uBAAuB;IACvBE,KAAK,EAAG1E,WAAW,IAAI,EAAI;IAC3B2E,QAAQ,EAAKM,gBAAgB,IAAM;MAClCzF,aAAa,CAAE;QAAEQ,WAAW,EAAEiF;MAAiB,CAAE,CAAC;IACnD,CAAG;IACHnF,KAAK,EAAGpE,EAAE,CAAE,aAAc,CAAG;IAC7BwJ,IAAI,EAAGxJ,EAAE,CACR,iFACD;EAAG,CACH,CAAC,EACFyI,aAAA,CAAChJ,WAAW;IACXqJ,uBAAuB;IACvBC,qBAAqB;IACrBC,KAAK,EAAGxE,KAAK,IAAI,EAAI;IACrByE,QAAQ,EAAKQ,UAAU,IAAM;MAC5B3F,aAAa,CAAE;QAAEU,KAAK,EAAEiF;MAAW,CAAE,CAAC;IACvC,CAAG;IACHrF,KAAK,EAAGpE,EAAE,CAAE,iBAAkB,CAAG;IACjCmJ,YAAY,EAAC,KAAK;IAClBK,IAAI,EAAGxJ,EAAE,CACR,iEACD;EAAG,CACH,CAAC,EACFyI,aAAA,CAAChJ,WAAW;IACXqJ,uBAAuB;IACvBC,qBAAqB;IACrBC,KAAK,EAAGzE,GAAG,IAAI,EAAI;IACnB0E,QAAQ,EAAKS,QAAQ,IAAM;MAC1B5F,aAAa,CAAE;QAAES,GAAG,EAAEmF;MAAS,CAAE,CAAC;IACnC,CAAG;IACHtF,KAAK,EAAGpE,EAAE,CAAE,eAAgB,CAAG;IAC/BmJ,YAAY,EAAC,KAAK;IAClBK,IAAI,EAAGxJ,EAAE,CACR,mEACD;EAAG,CACH,CACS,CACO,CAAC,EACpByI,aAAA;IAAA,GAAUZ;EAAU,GAEnBY,aAAA;IAAGX,SAAS,EAAGQ;EAAS,GAErB,CAAEjE,GAAG,GACNoE,aAAA;IAAKX,SAAS,EAAC;EAA4C,GAC1DW,aAAA,CAAC7I,OAAO;IAAC+J,IAAI,EAAGnB;EAAa,GAC5BC,aAAA,eAAQ/E,WAAmB,CACnB,CACL,CAAC,GAEN+E,aAAA,CAAAC,QAAA,QACG,CAAEnF,SAAS,IACZ,CAAEC,OAAO,IACT,CAAE+B,mBAAmB,IACpBkD,aAAA,CAAAC,QAAA,QACCD,aAAA,CAACtI,QAAQ;IACRkF,GAAG,EAAGA,GAAK;IACXuE,UAAU,EAAC,OAAO;IAClB9B,SAAS,EAAC,iCAAiC;IAC3CkB,KAAK,EAAG5E,KAAO;IACf6E,QAAQ,EAAKC,UAAU,IACtBpF,aAAa,CAAE;MACdM,KAAK,EAAE8E;IACR,CAAE,CACF;IACDW,OAAO,EAAG7F,WAAa;IACvBC,SAAS,EAAGA,SAAW;IACvB6F,sBAAsB,EAAGA,CAAA,KACxB/F,iBAAiB,CAChB1E,WAAW,CACV,sBACD,CACD,CACA;IACD,cAAaW,EAAE,CACd,sBACD,CAAG;IACH+J,WAAW,EAAG3E,oBAAsB;IACpC4E,4BAA4B;IAC5BC,cAAc,EAAG,CAChB,WAAW,EACX,aAAa,EACb,YAAY,EACZ,oBAAoB;EAClB,CACH,CAAC,EACA3F,WAAW,IACZmE,aAAA;IAAMX,SAAS,EAAC;EAAuC,GACpDxD,WACG,CAEN,CACF,EACA,CAAEf,SAAS,IACZC,OAAO,IACP+B,mBAAmB,KACnBkD,aAAA;IAAKX,SAAS,EAAC;EAA4E,GAC1FW,aAAA,CAAC7I,OAAO;IAAC+J,IAAI,EAAGnB;EAAa,GAC5BC,aAAA;IACC,cAAazI,EAAE,CACd,sBACD;EAAG;EAGF;EACA;EACA;EACA;EACA;EACC,GAAGiB,cAAc,CAAEmD,KAAM,CAAG,IAC5Bb,SAAS,IAAIC,OAAO,GACjB+E,eAAe,GACf,EACH,EAAC,CAAC2B,IAAI,CAAC,CAEJ,CACE,CACL,CAEL,CACF,EACCrF,UAAU,IACX4D,aAAA,CAACjH,MAAM;IACN2C,QAAQ,EAAGA,QAAU;IACrBjD,IAAI,EAAG0C,UAAY;IACnBuG,OAAO,EAAGA,CAAA,KAAM;MACf;MACA;MACA,IAAK,CAAE9F,GAAG,EAAG;QACZ;QACAO,mBAAmB,CAAET,QAAQ,EAAE,IAAK,CAAC;QACrC;QACAF,SAAS,CAAE,EAAG,CAAC;QACf;MACD;MAEAa,aAAa,CAAE,KAAM,CAAC;MACtB,IAAKC,QAAQ,EAAG;QACfA,QAAQ,CAAC0B,KAAK,CAAC,CAAC;QAChBzB,WAAW,CAAE,IAAK,CAAC;MACpB,CAAC,MAAM,IAAKK,GAAG,CAACnD,OAAO,EAAG;QACzB;QACAmD,GAAG,CAACnD,OAAO,CAACuE,KAAK,CAAC,CAAC;MACpB,CAAC,MAAM;QACN;QACA7B,mBAAmB,CAAET,QAAQ,EAAE,IAAK,CAAC;MACtC;IACD,CAAG;IACHiG,MAAM,EAAGnF,aAAe;IACxBoF,QAAQ,EAAGnD,UAAY;IACvB+B,QAAQ,EAAKqB,YAAY,IAAM;MAC9B7I,gBAAgB,CACf6I,YAAY,EACZxG,aAAa,EACbF,UACD,CAAC;IACF;EAAG,CACH,CAEA,CAAC,EACJ6E,aAAA;IAAA,GAAUR;EAAgB,CAAI,CAC1B,CACJ,CAAC;AAEL"}
@@ -14,7 +14,6 @@ import { __ } from '@wordpress/i18n';
14
14
  import { BlockControls, InnerBlocks, useInnerBlocksProps, InspectorControls, RichText, useBlockProps, store as blockEditorStore, getColorClassName } from '@wordpress/block-editor';
15
15
  import { isURL, prependHTTP } from '@wordpress/url';
16
16
  import { useState, useEffect, useRef } from '@wordpress/element';
17
- import { placeCaretAtHorizontalEdge } from '@wordpress/dom';
18
17
  import { link as linkIcon, removeSubmenu } from '@wordpress/icons';
19
18
  import { useResourcePermissions } from '@wordpress/core-data';
20
19
  import { speak } from '@wordpress/a11y';
@@ -124,9 +123,12 @@ export default function NavigationSubmenuEdit({
124
123
  } = context;
125
124
  const {
126
125
  __unstableMarkNextChangeAsNotPersistent,
127
- replaceBlock
126
+ replaceBlock,
127
+ selectBlock
128
128
  } = useDispatch(blockEditorStore);
129
129
  const [isLinkOpen, setIsLinkOpen] = useState(false);
130
+ // Store what element opened the popover, so we know where to return focus to (toolbar button vs navigation link text)
131
+ const [openedBy, setOpenedBy] = useState(null);
130
132
  // Use internal state instead of a ref to make sure that the component
131
133
  // re-renders when the popover's anchor updates.
132
134
  const [popoverAnchor, setPopoverAnchor] = useState(null);
@@ -201,9 +203,6 @@ export default function NavigationSubmenuEdit({
201
203
  if (isURL(prependHTTP(label)) && /^.+\.[a-z]+/.test(label)) {
202
204
  // Focus and select the label text.
203
205
  selectLabelText();
204
- } else {
205
- // Focus it (but do not select).
206
- placeCaretAtHorizontalEdge(ref.current, true);
207
206
  }
208
207
  }
209
208
  }, [url]);
@@ -244,7 +243,10 @@ export default function NavigationSubmenuEdit({
244
243
  // as it shares the CMD+K shortcut.
245
244
  // See https://github.com/WordPress/gutenberg/pull/59845.
246
245
  event.preventDefault();
246
+ // If we don't stop propogation, this event bubbles up to the parent submenu item
247
+ event.stopPropagation();
247
248
  setIsLinkOpen(true);
249
+ setOpenedBy(ref.current);
248
250
  }
249
251
  }
250
252
  const blockProps = useBlockProps({
@@ -303,7 +305,10 @@ export default function NavigationSubmenuEdit({
303
305
  icon: linkIcon,
304
306
  title: __('Link'),
305
307
  shortcut: displayShortcut.primary('k'),
306
- onClick: () => setIsLinkOpen(true)
308
+ onClick: event => {
309
+ setIsLinkOpen(true);
310
+ setOpenedBy(event.currentTarget);
311
+ }
307
312
  }), createElement(ToolbarButton, {
308
313
  name: "revert",
309
314
  icon: removeSubmenu,
@@ -315,23 +320,25 @@ export default function NavigationSubmenuEdit({
315
320
  title: __('Settings')
316
321
  }, createElement(TextControl, {
317
322
  __nextHasNoMarginBottom: true,
323
+ __next40pxDefaultSize: true,
318
324
  value: label || '',
319
325
  onChange: labelValue => {
320
326
  setAttributes({
321
327
  label: labelValue
322
328
  });
323
329
  },
324
- label: __('Label'),
330
+ label: __('Text'),
325
331
  autoComplete: "off"
326
332
  }), createElement(TextControl, {
327
333
  __nextHasNoMarginBottom: true,
334
+ __next40pxDefaultSize: true,
328
335
  value: url || '',
329
336
  onChange: urlValue => {
330
337
  setAttributes({
331
338
  url: urlValue
332
339
  });
333
340
  },
334
- label: __('URL'),
341
+ label: __('Link'),
335
342
  autoComplete: "off"
336
343
  }), createElement(TextareaControl, {
337
344
  __nextHasNoMarginBottom: true,
@@ -345,6 +352,7 @@ export default function NavigationSubmenuEdit({
345
352
  help: __('The description will be displayed in the menu if the current theme supports it.')
346
353
  }), createElement(TextControl, {
347
354
  __nextHasNoMarginBottom: true,
355
+ __next40pxDefaultSize: true,
348
356
  value: title || '',
349
357
  onChange: titleValue => {
350
358
  setAttributes({
@@ -356,6 +364,7 @@ export default function NavigationSubmenuEdit({
356
364
  help: __('Additional information to help clarify the purpose of the link.')
357
365
  }), createElement(TextControl, {
358
366
  __nextHasNoMarginBottom: true,
367
+ __next40pxDefaultSize: true,
359
368
  value: rel || '',
360
369
  onChange: relValue => {
361
370
  setAttributes({
@@ -386,12 +395,21 @@ export default function NavigationSubmenuEdit({
386
395
  onClick: () => {
387
396
  if (!openSubmenusOnClick && !url) {
388
397
  setIsLinkOpen(true);
398
+ setOpenedBy(ref.current);
389
399
  }
390
400
  }
391
401
  }), !openSubmenusOnClick && isLinkOpen && createElement(LinkUI, {
392
402
  clientId: clientId,
393
403
  link: attributes,
394
- onClose: () => setIsLinkOpen(false),
404
+ onClose: () => {
405
+ setIsLinkOpen(false);
406
+ if (openedBy) {
407
+ openedBy.focus();
408
+ setOpenedBy(null);
409
+ } else {
410
+ selectBlock(clientId);
411
+ }
412
+ },
395
413
  anchor: popoverAnchor,
396
414
  hasCreateSuggestion: userCanCreate,
397
415
  onRemove: () => {