@wordpress/block-editor 14.2.1-next.1f6eadc42.0 → 14.3.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 (124) hide show
  1. package/CHANGELOG.md +2 -0
  2. package/build/components/background-image-control/index.js +566 -0
  3. package/build/components/background-image-control/index.js.map +1 -0
  4. package/build/components/block-card/index.js +5 -2
  5. package/build/components/block-card/index.js.map +1 -1
  6. package/build/components/block-list/use-block-props/use-zoom-out-mode-exit.js +4 -2
  7. package/build/components/block-list/use-block-props/use-zoom-out-mode-exit.js.map +1 -1
  8. package/build/components/global-styles/background-panel.js +20 -545
  9. package/build/components/global-styles/background-panel.js.map +1 -1
  10. package/build/components/global-styles/dimensions-panel.js +3 -0
  11. package/build/components/global-styles/dimensions-panel.js.map +1 -1
  12. package/build/components/iframe/index.js +1 -0
  13. package/build/components/iframe/index.js.map +1 -1
  14. package/build/components/image-editor/use-save-image.js +6 -0
  15. package/build/components/image-editor/use-save-image.js.map +1 -1
  16. package/build/components/image-editor/use-transform-image.js +1 -0
  17. package/build/components/image-editor/use-transform-image.js.map +1 -1
  18. package/build/components/inserter/block-patterns-explorer/pattern-explorer-sidebar.js +2 -4
  19. package/build/components/inserter/block-patterns-explorer/pattern-explorer-sidebar.js.map +1 -1
  20. package/build/components/inserter/block-patterns-tab/index.js +2 -4
  21. package/build/components/inserter/block-patterns-tab/index.js.map +1 -1
  22. package/build/components/inserter/media-tab/media-preview.js +4 -8
  23. package/build/components/inserter/media-tab/media-preview.js.map +1 -1
  24. package/build/components/inserter/media-tab/media-tab.js +2 -4
  25. package/build/components/inserter/media-tab/media-tab.js.map +1 -1
  26. package/build/components/inserter/quick-inserter.js +2 -4
  27. package/build/components/inserter/quick-inserter.js.map +1 -1
  28. package/build/components/inserter-listbox/item.js +2 -4
  29. package/build/components/inserter-listbox/item.js.map +1 -1
  30. package/build/components/link-control/index.js +14 -14
  31. package/build/components/link-control/index.js.map +1 -1
  32. package/build/components/link-control/search-input.js +4 -2
  33. package/build/components/link-control/search-input.js.map +1 -1
  34. package/build/components/rich-text/index.js +10 -4
  35. package/build/components/rich-text/index.js.map +1 -1
  36. package/build/components/spacing-sizes-control/utils.js +16 -4
  37. package/build/components/spacing-sizes-control/utils.js.map +1 -1
  38. package/build/components/url-input/index.js +7 -6
  39. package/build/components/url-input/index.js.map +1 -1
  40. package/build/hooks/block-bindings.js +64 -53
  41. package/build/hooks/block-bindings.js.map +1 -1
  42. package/build/hooks/block-hooks.js +1 -8
  43. package/build/hooks/block-hooks.js.map +1 -1
  44. package/build/store/private-selectors.js +10 -0
  45. package/build/store/private-selectors.js.map +1 -1
  46. package/build-module/components/background-image-control/index.js +556 -0
  47. package/build-module/components/background-image-control/index.js.map +1 -0
  48. package/build-module/components/block-card/index.js +6 -3
  49. package/build-module/components/block-card/index.js.map +1 -1
  50. package/build-module/components/block-list/use-block-props/use-zoom-out-mode-exit.js +4 -2
  51. package/build-module/components/block-list/use-block-props/use-zoom-out-mode-exit.js.map +1 -1
  52. package/build-module/components/global-styles/background-panel.js +22 -546
  53. package/build-module/components/global-styles/background-panel.js.map +1 -1
  54. package/build-module/components/global-styles/dimensions-panel.js +3 -0
  55. package/build-module/components/global-styles/dimensions-panel.js.map +1 -1
  56. package/build-module/components/iframe/index.js +1 -0
  57. package/build-module/components/iframe/index.js.map +1 -1
  58. package/build-module/components/image-editor/use-save-image.js +6 -0
  59. package/build-module/components/image-editor/use-save-image.js.map +1 -1
  60. package/build-module/components/image-editor/use-transform-image.js +1 -0
  61. package/build-module/components/image-editor/use-transform-image.js.map +1 -1
  62. package/build-module/components/inserter/block-patterns-explorer/pattern-explorer-sidebar.js +2 -4
  63. package/build-module/components/inserter/block-patterns-explorer/pattern-explorer-sidebar.js.map +1 -1
  64. package/build-module/components/inserter/block-patterns-tab/index.js +2 -4
  65. package/build-module/components/inserter/block-patterns-tab/index.js.map +1 -1
  66. package/build-module/components/inserter/media-tab/media-preview.js +4 -8
  67. package/build-module/components/inserter/media-tab/media-preview.js.map +1 -1
  68. package/build-module/components/inserter/media-tab/media-tab.js +2 -4
  69. package/build-module/components/inserter/media-tab/media-tab.js.map +1 -1
  70. package/build-module/components/inserter/quick-inserter.js +2 -4
  71. package/build-module/components/inserter/quick-inserter.js.map +1 -1
  72. package/build-module/components/inserter-listbox/item.js +2 -4
  73. package/build-module/components/inserter-listbox/item.js.map +1 -1
  74. package/build-module/components/link-control/index.js +15 -15
  75. package/build-module/components/link-control/index.js.map +1 -1
  76. package/build-module/components/link-control/search-input.js +4 -2
  77. package/build-module/components/link-control/search-input.js.map +1 -1
  78. package/build-module/components/rich-text/index.js +10 -4
  79. package/build-module/components/rich-text/index.js.map +1 -1
  80. package/build-module/components/spacing-sizes-control/utils.js +16 -4
  81. package/build-module/components/spacing-sizes-control/utils.js.map +1 -1
  82. package/build-module/components/url-input/index.js +8 -7
  83. package/build-module/components/url-input/index.js.map +1 -1
  84. package/build-module/hooks/block-bindings.js +64 -53
  85. package/build-module/hooks/block-bindings.js.map +1 -1
  86. package/build-module/hooks/block-hooks.js +3 -10
  87. package/build-module/hooks/block-hooks.js.map +1 -1
  88. package/build-module/store/private-selectors.js +10 -0
  89. package/build-module/store/private-selectors.js.map +1 -1
  90. package/build-style/style-rtl.css +152 -276
  91. package/build-style/style.css +152 -276
  92. package/package.json +32 -32
  93. package/src/components/background-image-control/index.js +741 -0
  94. package/src/components/background-image-control/style.scss +170 -0
  95. package/src/components/background-image-control/test/index.js +47 -0
  96. package/src/components/block-card/index.js +12 -3
  97. package/src/components/block-list/use-block-props/use-zoom-out-mode-exit.js +2 -5
  98. package/src/components/global-styles/background-panel.js +19 -730
  99. package/src/components/global-styles/dimensions-panel.js +3 -0
  100. package/src/components/global-styles/style.scss +0 -168
  101. package/src/components/global-styles/test/background-panel.js +1 -47
  102. package/src/components/image-editor/use-save-image.js +7 -0
  103. package/src/components/inserter/block-patterns-explorer/pattern-explorer-sidebar.js +1 -2
  104. package/src/components/inserter/block-patterns-tab/index.js +1 -2
  105. package/src/components/inserter/media-tab/media-preview.js +2 -4
  106. package/src/components/inserter/media-tab/media-tab.js +1 -2
  107. package/src/components/inserter/quick-inserter.js +1 -2
  108. package/src/components/inserter/style.scss +0 -1
  109. package/src/components/inserter-listbox/item.js +1 -5
  110. package/src/components/link-control/index.js +19 -14
  111. package/src/components/link-control/search-input.js +2 -0
  112. package/src/components/link-control/style.scss +0 -22
  113. package/src/components/list-view/style.scss +1 -1
  114. package/src/components/rich-text/index.js +20 -5
  115. package/src/components/spacing-sizes-control/test/utils.js +18 -25
  116. package/src/components/spacing-sizes-control/utils.js +22 -5
  117. package/src/components/url-input/index.js +5 -4
  118. package/src/components/url-input/style.scss +3 -26
  119. package/src/hooks/block-bindings.js +63 -49
  120. package/src/hooks/block-hooks.js +3 -14
  121. package/src/hooks/block-hooks.scss +0 -9
  122. package/src/store/private-selectors.js +9 -0
  123. package/src/style.scss +1 -0
  124. package/src/utils/test/transform-styles.js +1 -1
@@ -189,8 +189,8 @@ class URLInput extends _element.Component {
189
189
  // as a Promise always resolves on the next tick of the event loop.
190
190
  this.suggestionsRequest = request;
191
191
  }
192
- onChange(event) {
193
- this.props.onChange(event.target.value);
192
+ onChange(newValue) {
193
+ this.props.onChange(newValue);
194
194
  }
195
195
  onFocus() {
196
196
  const {
@@ -379,7 +379,6 @@ class URLInput extends _element.Component {
379
379
  id: inputId,
380
380
  value,
381
381
  required: true,
382
- className: 'block-editor-url-input__input',
383
382
  type: 'text',
384
383
  onChange: this.onChange,
385
384
  onFocus: this.onFocus,
@@ -392,7 +391,8 @@ class URLInput extends _element.Component {
392
391
  'aria-autocomplete': 'list',
393
392
  'aria-owns': suggestionsListboxId,
394
393
  'aria-activedescendant': selectedSuggestion !== null ? `${suggestionOptionIdPrefix}-${selectedSuggestion}` : undefined,
395
- ref: this.inputRef
394
+ ref: this.inputRef,
395
+ suffix: this.props.suffix
396
396
  };
397
397
  if (renderControl) {
398
398
  return renderControl(controlProps, inputProps, loading);
@@ -400,8 +400,9 @@ class URLInput extends _element.Component {
400
400
  return /*#__PURE__*/(0, _jsxRuntime.jsxs)(_components.BaseControl, {
401
401
  __nextHasNoMarginBottom: true,
402
402
  ...controlProps,
403
- children: [/*#__PURE__*/(0, _jsxRuntime.jsx)("input", {
404
- ...inputProps
403
+ children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_components.__experimentalInputControl, {
404
+ ...inputProps,
405
+ __next40pxDefaultSize: true
405
406
  }), loading && /*#__PURE__*/(0, _jsxRuntime.jsx)(_components.Spinner, {})]
406
407
  });
407
408
  }
@@ -1 +1 @@
1
- {"version":3,"names":["_clsx","_interopRequireDefault","require","_i18n","_element","_keycodes","_components","_compose","_data","_url","_store","_jsxRuntime","_react","isFunction","maybeFunc","URLInput","Component","constructor","props","onChange","bind","onFocus","onKeyDown","selectLink","handleOnClick","bindSuggestionNode","autocompleteRef","createRef","inputRef","updateSuggestions","debounce","suggestionNodes","suggestionsRequest","state","suggestions","showSuggestions","suggestionsValue","selectedSuggestion","suggestionsListboxId","suggestionOptionIdPrefix","componentDidUpdate","prevProps","value","__experimentalShowInitialSuggestions","scrollIntoView","behavior","block","inline","disableSuggestions","length","componentDidMount","shouldShowInitialSuggestions","componentWillUnmount","cancel","index","ref","__experimentalFetchLinkSuggestions","fetchLinkSuggestions","__experimentalHandleURLSuggestions","handleURLSuggestions","isInitialSuggestions","trim","isURL","setState","loading","request","then","debouncedSpeak","sprintf","_n","__","catch","finally","event","target","keyCode","UP","selectionStart","preventDefault","setSelectionRange","DOWN","ENTER","onSubmit","suggestion","previousIndex","nextIndex","TAB","speak","url","current","focus","getDerivedStateFromProps","instanceId","shouldShowSuggestions","hasValue","render","jsxs","Fragment","children","renderControl","renderSuggestions","label","className","isFullWidth","placeholder","__experimentalRenderControl","hideLabelFromVision","inputId","controlProps","id","clsx","inputProps","required","type","role","undefined","BaseControl","__nextHasNoMarginBottom","jsx","Spinner","__experimentalRenderSuggestions","suggestionsListProps","buildSuggestionItemProps","tabIndex","isLoading","handleSuggestionClick","currentInputValue","Popover","placement","focusOnMount","map","createElement","Button","__next40pxDefaultSize","key","onClick","title","_default","exports","default","compose","withSafeTimeout","withSpokenMessages","withInstanceId","withSelect","select","getSettings","blockEditorStore"],"sources":["@wordpress/block-editor/src/components/url-input/index.js"],"sourcesContent":["/**\n * External dependencies\n */\nimport clsx from 'clsx';\n\n/**\n * WordPress dependencies\n */\nimport { __, sprintf, _n } from '@wordpress/i18n';\nimport { Component, createRef } from '@wordpress/element';\nimport { UP, DOWN, ENTER, TAB } from '@wordpress/keycodes';\nimport {\n\tBaseControl,\n\tButton,\n\tSpinner,\n\twithSpokenMessages,\n\tPopover,\n} from '@wordpress/components';\nimport {\n\tcompose,\n\tdebounce,\n\twithInstanceId,\n\twithSafeTimeout,\n} from '@wordpress/compose';\nimport { withSelect } from '@wordpress/data';\nimport { isURL } from '@wordpress/url';\n\n/**\n * Internal dependencies\n */\nimport { store as blockEditorStore } from '../../store';\n\n/**\n * Whether the argument is a function.\n *\n * @param {*} maybeFunc The argument to check.\n * @return {boolean} True if the argument is a function, false otherwise.\n */\nfunction isFunction( maybeFunc ) {\n\treturn typeof maybeFunc === 'function';\n}\n\nclass URLInput extends Component {\n\tconstructor( props ) {\n\t\tsuper( props );\n\n\t\tthis.onChange = this.onChange.bind( this );\n\t\tthis.onFocus = this.onFocus.bind( this );\n\t\tthis.onKeyDown = this.onKeyDown.bind( this );\n\t\tthis.selectLink = this.selectLink.bind( this );\n\t\tthis.handleOnClick = this.handleOnClick.bind( this );\n\t\tthis.bindSuggestionNode = this.bindSuggestionNode.bind( this );\n\t\tthis.autocompleteRef = props.autocompleteRef || createRef();\n\t\tthis.inputRef = createRef();\n\t\tthis.updateSuggestions = debounce(\n\t\t\tthis.updateSuggestions.bind( this ),\n\t\t\t200\n\t\t);\n\n\t\tthis.suggestionNodes = [];\n\n\t\tthis.suggestionsRequest = null;\n\n\t\tthis.state = {\n\t\t\tsuggestions: [],\n\t\t\tshowSuggestions: false,\n\t\t\tsuggestionsValue: null,\n\t\t\tselectedSuggestion: null,\n\t\t\tsuggestionsListboxId: '',\n\t\t\tsuggestionOptionIdPrefix: '',\n\t\t};\n\t}\n\n\tcomponentDidUpdate( prevProps ) {\n\t\tconst { showSuggestions, selectedSuggestion } = this.state;\n\t\tconst { value, __experimentalShowInitialSuggestions = false } =\n\t\t\tthis.props;\n\n\t\t// Only have to worry about scrolling selected suggestion into view\n\t\t// when already expanded.\n\t\tif (\n\t\t\tshowSuggestions &&\n\t\t\tselectedSuggestion !== null &&\n\t\t\tthis.suggestionNodes[ selectedSuggestion ]\n\t\t) {\n\t\t\tthis.suggestionNodes[ selectedSuggestion ].scrollIntoView( {\n\t\t\t\tbehavior: 'instant',\n\t\t\t\tblock: 'nearest',\n\t\t\t\tinline: 'nearest',\n\t\t\t} );\n\t\t}\n\n\t\t// Update suggestions when the value changes.\n\t\tif ( prevProps.value !== value && ! this.props.disableSuggestions ) {\n\t\t\tif ( value?.length ) {\n\t\t\t\t// If the new value is not empty we need to update with suggestions for it.\n\t\t\t\tthis.updateSuggestions( value );\n\t\t\t} else if ( __experimentalShowInitialSuggestions ) {\n\t\t\t\t// If the new value is empty and we can show initial suggestions, then show initial suggestions.\n\t\t\t\tthis.updateSuggestions();\n\t\t\t}\n\t\t}\n\t}\n\n\tcomponentDidMount() {\n\t\tif ( this.shouldShowInitialSuggestions() ) {\n\t\t\tthis.updateSuggestions();\n\t\t}\n\t}\n\n\tcomponentWillUnmount() {\n\t\tthis.suggestionsRequest?.cancel?.();\n\t\tthis.suggestionsRequest = null;\n\t}\n\n\tbindSuggestionNode( index ) {\n\t\treturn ( ref ) => {\n\t\t\tthis.suggestionNodes[ index ] = ref;\n\t\t};\n\t}\n\n\tshouldShowInitialSuggestions() {\n\t\tconst { __experimentalShowInitialSuggestions = false, value } =\n\t\t\tthis.props;\n\t\treturn (\n\t\t\t__experimentalShowInitialSuggestions && ! ( value && value.length )\n\t\t);\n\t}\n\n\tupdateSuggestions( value = '' ) {\n\t\tconst {\n\t\t\t__experimentalFetchLinkSuggestions: fetchLinkSuggestions,\n\t\t\t__experimentalHandleURLSuggestions: handleURLSuggestions,\n\t\t} = this.props;\n\n\t\tif ( ! fetchLinkSuggestions ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Initial suggestions may only show if there is no value\n\t\t// (note: this includes whitespace).\n\t\tconst isInitialSuggestions = ! value?.length;\n\n\t\t// Trim only now we've determined whether or not it originally had a \"length\"\n\t\t// (even if that value was all whitespace).\n\t\tvalue = value.trim();\n\n\t\t// Allow a suggestions request if:\n\t\t// - there are at least 2 characters in the search input (except manual searches where\n\t\t// search input length is not required to trigger a fetch)\n\t\t// - this is a direct entry (eg: a URL)\n\t\tif (\n\t\t\t! isInitialSuggestions &&\n\t\t\t( value.length < 2 || ( ! handleURLSuggestions && isURL( value ) ) )\n\t\t) {\n\t\t\tthis.suggestionsRequest?.cancel?.();\n\t\t\tthis.suggestionsRequest = null;\n\n\t\t\tthis.setState( {\n\t\t\t\tsuggestions: [],\n\t\t\t\tshowSuggestions: false,\n\t\t\t\tsuggestionsValue: value,\n\t\t\t\tselectedSuggestion: null,\n\t\t\t\tloading: false,\n\t\t\t} );\n\n\t\t\treturn;\n\t\t}\n\n\t\tthis.setState( {\n\t\t\tselectedSuggestion: null,\n\t\t\tloading: true,\n\t\t} );\n\n\t\tconst request = fetchLinkSuggestions( value, {\n\t\t\tisInitialSuggestions,\n\t\t} );\n\n\t\trequest\n\t\t\t.then( ( suggestions ) => {\n\t\t\t\t// A fetch Promise doesn't have an abort option. It's mimicked by\n\t\t\t\t// comparing the request reference in on the instance, which is\n\t\t\t\t// reset or deleted on subsequent requests or unmounting.\n\t\t\t\tif ( this.suggestionsRequest !== request ) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tthis.setState( {\n\t\t\t\t\tsuggestions,\n\t\t\t\t\tsuggestionsValue: value,\n\t\t\t\t\tloading: false,\n\t\t\t\t\tshowSuggestions: !! suggestions.length,\n\t\t\t\t} );\n\n\t\t\t\tif ( !! suggestions.length ) {\n\t\t\t\t\tthis.props.debouncedSpeak(\n\t\t\t\t\t\tsprintf(\n\t\t\t\t\t\t\t/* translators: %s: number of results. */\n\t\t\t\t\t\t\t_n(\n\t\t\t\t\t\t\t\t'%d result found, use up and down arrow keys to navigate.',\n\t\t\t\t\t\t\t\t'%d results found, use up and down arrow keys to navigate.',\n\t\t\t\t\t\t\t\tsuggestions.length\n\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\tsuggestions.length\n\t\t\t\t\t\t),\n\t\t\t\t\t\t'assertive'\n\t\t\t\t\t);\n\t\t\t\t} else {\n\t\t\t\t\tthis.props.debouncedSpeak(\n\t\t\t\t\t\t__( 'No results.' ),\n\t\t\t\t\t\t'assertive'\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t} )\n\t\t\t.catch( () => {\n\t\t\t\tif ( this.suggestionsRequest !== request ) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tthis.setState( {\n\t\t\t\t\tloading: false,\n\t\t\t\t} );\n\t\t\t} )\n\t\t\t.finally( () => {\n\t\t\t\t// If this is the current promise then reset the reference\n\t\t\t\t// to allow for checking if a new request is made.\n\t\t\t\tif ( this.suggestionsRequest === request ) {\n\t\t\t\t\tthis.suggestionsRequest = null;\n\t\t\t\t}\n\t\t\t} );\n\n\t\t// Note that this assignment is handled *before* the async search request\n\t\t// as a Promise always resolves on the next tick of the event loop.\n\t\tthis.suggestionsRequest = request;\n\t}\n\n\tonChange( event ) {\n\t\tthis.props.onChange( event.target.value );\n\t}\n\n\tonFocus() {\n\t\tconst { suggestions } = this.state;\n\t\tconst { disableSuggestions, value } = this.props;\n\n\t\t// When opening the link editor, if there's a value present, we want to load the suggestions pane with the results for this input search value\n\t\t// Don't re-run the suggestions on focus if there are already suggestions present (prevents searching again when tabbing between the input and buttons)\n\t\t// or there is already a request in progress.\n\t\tif (\n\t\t\tvalue &&\n\t\t\t! disableSuggestions &&\n\t\t\t! ( suggestions && suggestions.length ) &&\n\t\t\tthis.suggestionsRequest === null\n\t\t) {\n\t\t\t// Ensure the suggestions are updated with the current input value.\n\t\t\tthis.updateSuggestions( value );\n\t\t}\n\t}\n\n\tonKeyDown( event ) {\n\t\tthis.props.onKeyDown?.( event );\n\t\tconst { showSuggestions, selectedSuggestion, suggestions, loading } =\n\t\t\tthis.state;\n\n\t\t// If the suggestions are not shown or loading, we shouldn't handle the arrow keys\n\t\t// We shouldn't preventDefault to allow block arrow keys navigation.\n\t\tif ( ! showSuggestions || ! suggestions.length || loading ) {\n\t\t\t// In the Windows version of Firefox the up and down arrows don't move the caret\n\t\t\t// within an input field like they do for Mac Firefox/Chrome/Safari. This causes\n\t\t\t// a form of focus trapping that is disruptive to the user experience. This disruption\n\t\t\t// only happens if the caret is not in the first or last position in the text input.\n\t\t\t// See: https://github.com/WordPress/gutenberg/issues/5693#issuecomment-436684747\n\t\t\tswitch ( event.keyCode ) {\n\t\t\t\t// When UP is pressed, if the caret is at the start of the text, move it to the 0\n\t\t\t\t// position.\n\t\t\t\tcase UP: {\n\t\t\t\t\tif ( 0 !== event.target.selectionStart ) {\n\t\t\t\t\t\tevent.preventDefault();\n\n\t\t\t\t\t\t// Set the input caret to position 0.\n\t\t\t\t\t\tevent.target.setSelectionRange( 0, 0 );\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\t// When DOWN is pressed, if the caret is not at the end of the text, move it to the\n\t\t\t\t// last position.\n\t\t\t\tcase DOWN: {\n\t\t\t\t\tif (\n\t\t\t\t\t\tthis.props.value.length !== event.target.selectionStart\n\t\t\t\t\t) {\n\t\t\t\t\t\tevent.preventDefault();\n\n\t\t\t\t\t\t// Set the input caret to the last position.\n\t\t\t\t\t\tevent.target.setSelectionRange(\n\t\t\t\t\t\t\tthis.props.value.length,\n\t\t\t\t\t\t\tthis.props.value.length\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\n\t\t\t\t// Submitting while loading should trigger onSubmit.\n\t\t\t\tcase ENTER: {\n\t\t\t\t\tif ( this.props.onSubmit ) {\n\t\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\t\tthis.props.onSubmit( null, event );\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn;\n\t\t}\n\n\t\tconst suggestion =\n\t\t\tthis.state.suggestions[ this.state.selectedSuggestion ];\n\n\t\tswitch ( event.keyCode ) {\n\t\t\tcase UP: {\n\t\t\t\tevent.preventDefault();\n\t\t\t\tconst previousIndex = ! selectedSuggestion\n\t\t\t\t\t? suggestions.length - 1\n\t\t\t\t\t: selectedSuggestion - 1;\n\t\t\t\tthis.setState( {\n\t\t\t\t\tselectedSuggestion: previousIndex,\n\t\t\t\t} );\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase DOWN: {\n\t\t\t\tevent.preventDefault();\n\t\t\t\tconst nextIndex =\n\t\t\t\t\tselectedSuggestion === null ||\n\t\t\t\t\tselectedSuggestion === suggestions.length - 1\n\t\t\t\t\t\t? 0\n\t\t\t\t\t\t: selectedSuggestion + 1;\n\t\t\t\tthis.setState( {\n\t\t\t\t\tselectedSuggestion: nextIndex,\n\t\t\t\t} );\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase TAB: {\n\t\t\t\tif ( this.state.selectedSuggestion !== null ) {\n\t\t\t\t\tthis.selectLink( suggestion );\n\t\t\t\t\t// Announce a link has been selected when tabbing away from the input field.\n\t\t\t\t\tthis.props.speak( __( 'Link selected.' ) );\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase ENTER: {\n\t\t\t\tevent.preventDefault();\n\t\t\t\tif ( this.state.selectedSuggestion !== null ) {\n\t\t\t\t\tthis.selectLink( suggestion );\n\n\t\t\t\t\tif ( this.props.onSubmit ) {\n\t\t\t\t\t\tthis.props.onSubmit( suggestion, event );\n\t\t\t\t\t}\n\t\t\t\t} else if ( this.props.onSubmit ) {\n\t\t\t\t\tthis.props.onSubmit( null, event );\n\t\t\t\t}\n\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t}\n\n\tselectLink( suggestion ) {\n\t\tthis.props.onChange( suggestion.url, suggestion );\n\t\tthis.setState( {\n\t\t\tselectedSuggestion: null,\n\t\t\tshowSuggestions: false,\n\t\t} );\n\t}\n\n\thandleOnClick( suggestion ) {\n\t\tthis.selectLink( suggestion );\n\t\t// Move focus to the input field when a link suggestion is clicked.\n\t\tthis.inputRef.current.focus();\n\t}\n\n\tstatic getDerivedStateFromProps(\n\t\t{\n\t\t\tvalue,\n\t\t\tinstanceId,\n\t\t\tdisableSuggestions,\n\t\t\t__experimentalShowInitialSuggestions = false,\n\t\t},\n\t\t{ showSuggestions }\n\t) {\n\t\tlet shouldShowSuggestions = showSuggestions;\n\n\t\tconst hasValue = value && value.length;\n\n\t\tif ( ! __experimentalShowInitialSuggestions && ! hasValue ) {\n\t\t\tshouldShowSuggestions = false;\n\t\t}\n\n\t\tif ( disableSuggestions === true ) {\n\t\t\tshouldShowSuggestions = false;\n\t\t}\n\n\t\treturn {\n\t\t\tshowSuggestions: shouldShowSuggestions,\n\t\t\tsuggestionsListboxId: `block-editor-url-input-suggestions-${ instanceId }`,\n\t\t\tsuggestionOptionIdPrefix: `block-editor-url-input-suggestion-${ instanceId }`,\n\t\t};\n\t}\n\n\trender() {\n\t\treturn (\n\t\t\t<>\n\t\t\t\t{ this.renderControl() }\n\t\t\t\t{ this.renderSuggestions() }\n\t\t\t</>\n\t\t);\n\t}\n\n\trenderControl() {\n\t\tconst {\n\t\t\tlabel = null,\n\t\t\tclassName,\n\t\t\tisFullWidth,\n\t\t\tinstanceId,\n\t\t\tplaceholder = __( 'Paste URL or type to search' ),\n\t\t\t__experimentalRenderControl: renderControl,\n\t\t\tvalue = '',\n\t\t\thideLabelFromVision = false,\n\t\t} = this.props;\n\n\t\tconst {\n\t\t\tloading,\n\t\t\tshowSuggestions,\n\t\t\tselectedSuggestion,\n\t\t\tsuggestionsListboxId,\n\t\t\tsuggestionOptionIdPrefix,\n\t\t} = this.state;\n\n\t\tconst inputId = `url-input-control-${ instanceId }`;\n\n\t\tconst controlProps = {\n\t\t\tid: inputId, // Passes attribute to label for the for attribute\n\t\t\tlabel,\n\t\t\tclassName: clsx( 'block-editor-url-input', className, {\n\t\t\t\t'is-full-width': isFullWidth,\n\t\t\t} ),\n\t\t\thideLabelFromVision,\n\t\t};\n\n\t\tconst inputProps = {\n\t\t\tid: inputId,\n\t\t\tvalue,\n\t\t\trequired: true,\n\t\t\tclassName: 'block-editor-url-input__input',\n\t\t\ttype: 'text',\n\t\t\tonChange: this.onChange,\n\t\t\tonFocus: this.onFocus,\n\t\t\tplaceholder,\n\t\t\tonKeyDown: this.onKeyDown,\n\t\t\trole: 'combobox',\n\t\t\t'aria-label': label ? undefined : __( 'URL' ), // Ensure input always has an accessible label\n\t\t\t'aria-expanded': showSuggestions,\n\t\t\t'aria-autocomplete': 'list',\n\t\t\t'aria-owns': suggestionsListboxId,\n\t\t\t'aria-activedescendant':\n\t\t\t\tselectedSuggestion !== null\n\t\t\t\t\t? `${ suggestionOptionIdPrefix }-${ selectedSuggestion }`\n\t\t\t\t\t: undefined,\n\t\t\tref: this.inputRef,\n\t\t};\n\n\t\tif ( renderControl ) {\n\t\t\treturn renderControl( controlProps, inputProps, loading );\n\t\t}\n\n\t\treturn (\n\t\t\t<BaseControl __nextHasNoMarginBottom { ...controlProps }>\n\t\t\t\t<input { ...inputProps } />\n\t\t\t\t{ loading && <Spinner /> }\n\t\t\t</BaseControl>\n\t\t);\n\t}\n\n\trenderSuggestions() {\n\t\tconst {\n\t\t\tclassName,\n\t\t\t__experimentalRenderSuggestions: renderSuggestions,\n\t\t} = this.props;\n\n\t\tconst {\n\t\t\tshowSuggestions,\n\t\t\tsuggestions,\n\t\t\tsuggestionsValue,\n\t\t\tselectedSuggestion,\n\t\t\tsuggestionsListboxId,\n\t\t\tsuggestionOptionIdPrefix,\n\t\t\tloading,\n\t\t} = this.state;\n\n\t\tif ( ! showSuggestions || suggestions.length === 0 ) {\n\t\t\treturn null;\n\t\t}\n\n\t\tconst suggestionsListProps = {\n\t\t\tid: suggestionsListboxId,\n\t\t\tref: this.autocompleteRef,\n\t\t\trole: 'listbox',\n\t\t};\n\n\t\tconst buildSuggestionItemProps = ( suggestion, index ) => {\n\t\t\treturn {\n\t\t\t\trole: 'option',\n\t\t\t\ttabIndex: '-1',\n\t\t\t\tid: `${ suggestionOptionIdPrefix }-${ index }`,\n\t\t\t\tref: this.bindSuggestionNode( index ),\n\t\t\t\t'aria-selected':\n\t\t\t\t\tindex === selectedSuggestion ? true : undefined,\n\t\t\t};\n\t\t};\n\n\t\tif ( isFunction( renderSuggestions ) ) {\n\t\t\treturn renderSuggestions( {\n\t\t\t\tsuggestions,\n\t\t\t\tselectedSuggestion,\n\t\t\t\tsuggestionsListProps,\n\t\t\t\tbuildSuggestionItemProps,\n\t\t\t\tisLoading: loading,\n\t\t\t\thandleSuggestionClick: this.handleOnClick,\n\t\t\t\tisInitialSuggestions: ! suggestionsValue?.length,\n\t\t\t\tcurrentInputValue: suggestionsValue,\n\t\t\t} );\n\t\t}\n\n\t\treturn (\n\t\t\t<Popover placement=\"bottom\" focusOnMount={ false }>\n\t\t\t\t<div\n\t\t\t\t\t{ ...suggestionsListProps }\n\t\t\t\t\tclassName={ clsx(\n\t\t\t\t\t\t'block-editor-url-input__suggestions',\n\t\t\t\t\t\t`${ className }__suggestions`\n\t\t\t\t\t) }\n\t\t\t\t>\n\t\t\t\t\t{ suggestions.map( ( suggestion, index ) => (\n\t\t\t\t\t\t<Button\n\t\t\t\t\t\t\t// TODO: Switch to `true` (40px size) if possible\n\t\t\t\t\t\t\t__next40pxDefaultSize={ false }\n\t\t\t\t\t\t\t{ ...buildSuggestionItemProps( suggestion, index ) }\n\t\t\t\t\t\t\tkey={ suggestion.id }\n\t\t\t\t\t\t\tclassName={ clsx(\n\t\t\t\t\t\t\t\t'block-editor-url-input__suggestion',\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t'is-selected': index === selectedSuggestion,\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t) }\n\t\t\t\t\t\t\tonClick={ () => this.handleOnClick( suggestion ) }\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{ suggestion.title }\n\t\t\t\t\t\t</Button>\n\t\t\t\t\t) ) }\n\t\t\t\t</div>\n\t\t\t</Popover>\n\t\t);\n\t}\n}\n\n/**\n * @see https://github.com/WordPress/gutenberg/blob/HEAD/packages/block-editor/src/components/url-input/README.md\n */\nexport default compose(\n\twithSafeTimeout,\n\twithSpokenMessages,\n\twithInstanceId,\n\twithSelect( ( select, props ) => {\n\t\t// If a link suggestions handler is already provided then\n\t\t// bail.\n\t\tif ( isFunction( props.__experimentalFetchLinkSuggestions ) ) {\n\t\t\treturn;\n\t\t}\n\t\tconst { getSettings } = select( blockEditorStore );\n\t\treturn {\n\t\t\t__experimentalFetchLinkSuggestions:\n\t\t\t\tgetSettings().__experimentalFetchLinkSuggestions,\n\t\t};\n\t} )\n)( URLInput );\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["_clsx","_interopRequireDefault","require","_i18n","_element","_keycodes","_components","_compose","_data","_url","_store","_jsxRuntime","_react","isFunction","maybeFunc","URLInput","Component","constructor","props","onChange","bind","onFocus","onKeyDown","selectLink","handleOnClick","bindSuggestionNode","autocompleteRef","createRef","inputRef","updateSuggestions","debounce","suggestionNodes","suggestionsRequest","state","suggestions","showSuggestions","suggestionsValue","selectedSuggestion","suggestionsListboxId","suggestionOptionIdPrefix","componentDidUpdate","prevProps","value","__experimentalShowInitialSuggestions","scrollIntoView","behavior","block","inline","disableSuggestions","length","componentDidMount","shouldShowInitialSuggestions","componentWillUnmount","cancel","index","ref","__experimentalFetchLinkSuggestions","fetchLinkSuggestions","__experimentalHandleURLSuggestions","handleURLSuggestions","isInitialSuggestions","trim","isURL","setState","loading","request","then","debouncedSpeak","sprintf","_n","__","catch","finally","newValue","event","keyCode","UP","target","selectionStart","preventDefault","setSelectionRange","DOWN","ENTER","onSubmit","suggestion","previousIndex","nextIndex","TAB","speak","url","current","focus","getDerivedStateFromProps","instanceId","shouldShowSuggestions","hasValue","render","jsxs","Fragment","children","renderControl","renderSuggestions","label","className","isFullWidth","placeholder","__experimentalRenderControl","hideLabelFromVision","inputId","controlProps","id","clsx","inputProps","required","type","role","undefined","suffix","BaseControl","__nextHasNoMarginBottom","jsx","__experimentalInputControl","__next40pxDefaultSize","Spinner","__experimentalRenderSuggestions","suggestionsListProps","buildSuggestionItemProps","tabIndex","isLoading","handleSuggestionClick","currentInputValue","Popover","placement","focusOnMount","map","createElement","Button","key","onClick","title","_default","exports","default","compose","withSafeTimeout","withSpokenMessages","withInstanceId","withSelect","select","getSettings","blockEditorStore"],"sources":["@wordpress/block-editor/src/components/url-input/index.js"],"sourcesContent":["/**\n * External dependencies\n */\nimport clsx from 'clsx';\n\n/**\n * WordPress dependencies\n */\nimport { __, sprintf, _n } from '@wordpress/i18n';\nimport { Component, createRef } from '@wordpress/element';\nimport { UP, DOWN, ENTER, TAB } from '@wordpress/keycodes';\nimport {\n\tBaseControl,\n\tButton,\n\t__experimentalInputControl as InputControl,\n\tSpinner,\n\twithSpokenMessages,\n\tPopover,\n} from '@wordpress/components';\nimport {\n\tcompose,\n\tdebounce,\n\twithInstanceId,\n\twithSafeTimeout,\n} from '@wordpress/compose';\nimport { withSelect } from '@wordpress/data';\nimport { isURL } from '@wordpress/url';\n\n/**\n * Internal dependencies\n */\nimport { store as blockEditorStore } from '../../store';\n\n/**\n * Whether the argument is a function.\n *\n * @param {*} maybeFunc The argument to check.\n * @return {boolean} True if the argument is a function, false otherwise.\n */\nfunction isFunction( maybeFunc ) {\n\treturn typeof maybeFunc === 'function';\n}\n\nclass URLInput extends Component {\n\tconstructor( props ) {\n\t\tsuper( props );\n\n\t\tthis.onChange = this.onChange.bind( this );\n\t\tthis.onFocus = this.onFocus.bind( this );\n\t\tthis.onKeyDown = this.onKeyDown.bind( this );\n\t\tthis.selectLink = this.selectLink.bind( this );\n\t\tthis.handleOnClick = this.handleOnClick.bind( this );\n\t\tthis.bindSuggestionNode = this.bindSuggestionNode.bind( this );\n\t\tthis.autocompleteRef = props.autocompleteRef || createRef();\n\t\tthis.inputRef = createRef();\n\t\tthis.updateSuggestions = debounce(\n\t\t\tthis.updateSuggestions.bind( this ),\n\t\t\t200\n\t\t);\n\n\t\tthis.suggestionNodes = [];\n\n\t\tthis.suggestionsRequest = null;\n\n\t\tthis.state = {\n\t\t\tsuggestions: [],\n\t\t\tshowSuggestions: false,\n\t\t\tsuggestionsValue: null,\n\t\t\tselectedSuggestion: null,\n\t\t\tsuggestionsListboxId: '',\n\t\t\tsuggestionOptionIdPrefix: '',\n\t\t};\n\t}\n\n\tcomponentDidUpdate( prevProps ) {\n\t\tconst { showSuggestions, selectedSuggestion } = this.state;\n\t\tconst { value, __experimentalShowInitialSuggestions = false } =\n\t\t\tthis.props;\n\n\t\t// Only have to worry about scrolling selected suggestion into view\n\t\t// when already expanded.\n\t\tif (\n\t\t\tshowSuggestions &&\n\t\t\tselectedSuggestion !== null &&\n\t\t\tthis.suggestionNodes[ selectedSuggestion ]\n\t\t) {\n\t\t\tthis.suggestionNodes[ selectedSuggestion ].scrollIntoView( {\n\t\t\t\tbehavior: 'instant',\n\t\t\t\tblock: 'nearest',\n\t\t\t\tinline: 'nearest',\n\t\t\t} );\n\t\t}\n\n\t\t// Update suggestions when the value changes.\n\t\tif ( prevProps.value !== value && ! this.props.disableSuggestions ) {\n\t\t\tif ( value?.length ) {\n\t\t\t\t// If the new value is not empty we need to update with suggestions for it.\n\t\t\t\tthis.updateSuggestions( value );\n\t\t\t} else if ( __experimentalShowInitialSuggestions ) {\n\t\t\t\t// If the new value is empty and we can show initial suggestions, then show initial suggestions.\n\t\t\t\tthis.updateSuggestions();\n\t\t\t}\n\t\t}\n\t}\n\n\tcomponentDidMount() {\n\t\tif ( this.shouldShowInitialSuggestions() ) {\n\t\t\tthis.updateSuggestions();\n\t\t}\n\t}\n\n\tcomponentWillUnmount() {\n\t\tthis.suggestionsRequest?.cancel?.();\n\t\tthis.suggestionsRequest = null;\n\t}\n\n\tbindSuggestionNode( index ) {\n\t\treturn ( ref ) => {\n\t\t\tthis.suggestionNodes[ index ] = ref;\n\t\t};\n\t}\n\n\tshouldShowInitialSuggestions() {\n\t\tconst { __experimentalShowInitialSuggestions = false, value } =\n\t\t\tthis.props;\n\t\treturn (\n\t\t\t__experimentalShowInitialSuggestions && ! ( value && value.length )\n\t\t);\n\t}\n\n\tupdateSuggestions( value = '' ) {\n\t\tconst {\n\t\t\t__experimentalFetchLinkSuggestions: fetchLinkSuggestions,\n\t\t\t__experimentalHandleURLSuggestions: handleURLSuggestions,\n\t\t} = this.props;\n\n\t\tif ( ! fetchLinkSuggestions ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Initial suggestions may only show if there is no value\n\t\t// (note: this includes whitespace).\n\t\tconst isInitialSuggestions = ! value?.length;\n\n\t\t// Trim only now we've determined whether or not it originally had a \"length\"\n\t\t// (even if that value was all whitespace).\n\t\tvalue = value.trim();\n\n\t\t// Allow a suggestions request if:\n\t\t// - there are at least 2 characters in the search input (except manual searches where\n\t\t// search input length is not required to trigger a fetch)\n\t\t// - this is a direct entry (eg: a URL)\n\t\tif (\n\t\t\t! isInitialSuggestions &&\n\t\t\t( value.length < 2 || ( ! handleURLSuggestions && isURL( value ) ) )\n\t\t) {\n\t\t\tthis.suggestionsRequest?.cancel?.();\n\t\t\tthis.suggestionsRequest = null;\n\n\t\t\tthis.setState( {\n\t\t\t\tsuggestions: [],\n\t\t\t\tshowSuggestions: false,\n\t\t\t\tsuggestionsValue: value,\n\t\t\t\tselectedSuggestion: null,\n\t\t\t\tloading: false,\n\t\t\t} );\n\n\t\t\treturn;\n\t\t}\n\n\t\tthis.setState( {\n\t\t\tselectedSuggestion: null,\n\t\t\tloading: true,\n\t\t} );\n\n\t\tconst request = fetchLinkSuggestions( value, {\n\t\t\tisInitialSuggestions,\n\t\t} );\n\n\t\trequest\n\t\t\t.then( ( suggestions ) => {\n\t\t\t\t// A fetch Promise doesn't have an abort option. It's mimicked by\n\t\t\t\t// comparing the request reference in on the instance, which is\n\t\t\t\t// reset or deleted on subsequent requests or unmounting.\n\t\t\t\tif ( this.suggestionsRequest !== request ) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tthis.setState( {\n\t\t\t\t\tsuggestions,\n\t\t\t\t\tsuggestionsValue: value,\n\t\t\t\t\tloading: false,\n\t\t\t\t\tshowSuggestions: !! suggestions.length,\n\t\t\t\t} );\n\n\t\t\t\tif ( !! suggestions.length ) {\n\t\t\t\t\tthis.props.debouncedSpeak(\n\t\t\t\t\t\tsprintf(\n\t\t\t\t\t\t\t/* translators: %s: number of results. */\n\t\t\t\t\t\t\t_n(\n\t\t\t\t\t\t\t\t'%d result found, use up and down arrow keys to navigate.',\n\t\t\t\t\t\t\t\t'%d results found, use up and down arrow keys to navigate.',\n\t\t\t\t\t\t\t\tsuggestions.length\n\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\tsuggestions.length\n\t\t\t\t\t\t),\n\t\t\t\t\t\t'assertive'\n\t\t\t\t\t);\n\t\t\t\t} else {\n\t\t\t\t\tthis.props.debouncedSpeak(\n\t\t\t\t\t\t__( 'No results.' ),\n\t\t\t\t\t\t'assertive'\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t} )\n\t\t\t.catch( () => {\n\t\t\t\tif ( this.suggestionsRequest !== request ) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tthis.setState( {\n\t\t\t\t\tloading: false,\n\t\t\t\t} );\n\t\t\t} )\n\t\t\t.finally( () => {\n\t\t\t\t// If this is the current promise then reset the reference\n\t\t\t\t// to allow for checking if a new request is made.\n\t\t\t\tif ( this.suggestionsRequest === request ) {\n\t\t\t\t\tthis.suggestionsRequest = null;\n\t\t\t\t}\n\t\t\t} );\n\n\t\t// Note that this assignment is handled *before* the async search request\n\t\t// as a Promise always resolves on the next tick of the event loop.\n\t\tthis.suggestionsRequest = request;\n\t}\n\n\tonChange( newValue ) {\n\t\tthis.props.onChange( newValue );\n\t}\n\n\tonFocus() {\n\t\tconst { suggestions } = this.state;\n\t\tconst { disableSuggestions, value } = this.props;\n\n\t\t// When opening the link editor, if there's a value present, we want to load the suggestions pane with the results for this input search value\n\t\t// Don't re-run the suggestions on focus if there are already suggestions present (prevents searching again when tabbing between the input and buttons)\n\t\t// or there is already a request in progress.\n\t\tif (\n\t\t\tvalue &&\n\t\t\t! disableSuggestions &&\n\t\t\t! ( suggestions && suggestions.length ) &&\n\t\t\tthis.suggestionsRequest === null\n\t\t) {\n\t\t\t// Ensure the suggestions are updated with the current input value.\n\t\t\tthis.updateSuggestions( value );\n\t\t}\n\t}\n\n\tonKeyDown( event ) {\n\t\tthis.props.onKeyDown?.( event );\n\t\tconst { showSuggestions, selectedSuggestion, suggestions, loading } =\n\t\t\tthis.state;\n\n\t\t// If the suggestions are not shown or loading, we shouldn't handle the arrow keys\n\t\t// We shouldn't preventDefault to allow block arrow keys navigation.\n\t\tif ( ! showSuggestions || ! suggestions.length || loading ) {\n\t\t\t// In the Windows version of Firefox the up and down arrows don't move the caret\n\t\t\t// within an input field like they do for Mac Firefox/Chrome/Safari. This causes\n\t\t\t// a form of focus trapping that is disruptive to the user experience. This disruption\n\t\t\t// only happens if the caret is not in the first or last position in the text input.\n\t\t\t// See: https://github.com/WordPress/gutenberg/issues/5693#issuecomment-436684747\n\t\t\tswitch ( event.keyCode ) {\n\t\t\t\t// When UP is pressed, if the caret is at the start of the text, move it to the 0\n\t\t\t\t// position.\n\t\t\t\tcase UP: {\n\t\t\t\t\tif ( 0 !== event.target.selectionStart ) {\n\t\t\t\t\t\tevent.preventDefault();\n\n\t\t\t\t\t\t// Set the input caret to position 0.\n\t\t\t\t\t\tevent.target.setSelectionRange( 0, 0 );\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\t// When DOWN is pressed, if the caret is not at the end of the text, move it to the\n\t\t\t\t// last position.\n\t\t\t\tcase DOWN: {\n\t\t\t\t\tif (\n\t\t\t\t\t\tthis.props.value.length !== event.target.selectionStart\n\t\t\t\t\t) {\n\t\t\t\t\t\tevent.preventDefault();\n\n\t\t\t\t\t\t// Set the input caret to the last position.\n\t\t\t\t\t\tevent.target.setSelectionRange(\n\t\t\t\t\t\t\tthis.props.value.length,\n\t\t\t\t\t\t\tthis.props.value.length\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\n\t\t\t\t// Submitting while loading should trigger onSubmit.\n\t\t\t\tcase ENTER: {\n\t\t\t\t\tif ( this.props.onSubmit ) {\n\t\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\t\tthis.props.onSubmit( null, event );\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn;\n\t\t}\n\n\t\tconst suggestion =\n\t\t\tthis.state.suggestions[ this.state.selectedSuggestion ];\n\n\t\tswitch ( event.keyCode ) {\n\t\t\tcase UP: {\n\t\t\t\tevent.preventDefault();\n\t\t\t\tconst previousIndex = ! selectedSuggestion\n\t\t\t\t\t? suggestions.length - 1\n\t\t\t\t\t: selectedSuggestion - 1;\n\t\t\t\tthis.setState( {\n\t\t\t\t\tselectedSuggestion: previousIndex,\n\t\t\t\t} );\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase DOWN: {\n\t\t\t\tevent.preventDefault();\n\t\t\t\tconst nextIndex =\n\t\t\t\t\tselectedSuggestion === null ||\n\t\t\t\t\tselectedSuggestion === suggestions.length - 1\n\t\t\t\t\t\t? 0\n\t\t\t\t\t\t: selectedSuggestion + 1;\n\t\t\t\tthis.setState( {\n\t\t\t\t\tselectedSuggestion: nextIndex,\n\t\t\t\t} );\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase TAB: {\n\t\t\t\tif ( this.state.selectedSuggestion !== null ) {\n\t\t\t\t\tthis.selectLink( suggestion );\n\t\t\t\t\t// Announce a link has been selected when tabbing away from the input field.\n\t\t\t\t\tthis.props.speak( __( 'Link selected.' ) );\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase ENTER: {\n\t\t\t\tevent.preventDefault();\n\t\t\t\tif ( this.state.selectedSuggestion !== null ) {\n\t\t\t\t\tthis.selectLink( suggestion );\n\n\t\t\t\t\tif ( this.props.onSubmit ) {\n\t\t\t\t\t\tthis.props.onSubmit( suggestion, event );\n\t\t\t\t\t}\n\t\t\t\t} else if ( this.props.onSubmit ) {\n\t\t\t\t\tthis.props.onSubmit( null, event );\n\t\t\t\t}\n\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t}\n\n\tselectLink( suggestion ) {\n\t\tthis.props.onChange( suggestion.url, suggestion );\n\t\tthis.setState( {\n\t\t\tselectedSuggestion: null,\n\t\t\tshowSuggestions: false,\n\t\t} );\n\t}\n\n\thandleOnClick( suggestion ) {\n\t\tthis.selectLink( suggestion );\n\t\t// Move focus to the input field when a link suggestion is clicked.\n\t\tthis.inputRef.current.focus();\n\t}\n\n\tstatic getDerivedStateFromProps(\n\t\t{\n\t\t\tvalue,\n\t\t\tinstanceId,\n\t\t\tdisableSuggestions,\n\t\t\t__experimentalShowInitialSuggestions = false,\n\t\t},\n\t\t{ showSuggestions }\n\t) {\n\t\tlet shouldShowSuggestions = showSuggestions;\n\n\t\tconst hasValue = value && value.length;\n\n\t\tif ( ! __experimentalShowInitialSuggestions && ! hasValue ) {\n\t\t\tshouldShowSuggestions = false;\n\t\t}\n\n\t\tif ( disableSuggestions === true ) {\n\t\t\tshouldShowSuggestions = false;\n\t\t}\n\n\t\treturn {\n\t\t\tshowSuggestions: shouldShowSuggestions,\n\t\t\tsuggestionsListboxId: `block-editor-url-input-suggestions-${ instanceId }`,\n\t\t\tsuggestionOptionIdPrefix: `block-editor-url-input-suggestion-${ instanceId }`,\n\t\t};\n\t}\n\n\trender() {\n\t\treturn (\n\t\t\t<>\n\t\t\t\t{ this.renderControl() }\n\t\t\t\t{ this.renderSuggestions() }\n\t\t\t</>\n\t\t);\n\t}\n\n\trenderControl() {\n\t\tconst {\n\t\t\tlabel = null,\n\t\t\tclassName,\n\t\t\tisFullWidth,\n\t\t\tinstanceId,\n\t\t\tplaceholder = __( 'Paste URL or type to search' ),\n\t\t\t__experimentalRenderControl: renderControl,\n\t\t\tvalue = '',\n\t\t\thideLabelFromVision = false,\n\t\t} = this.props;\n\n\t\tconst {\n\t\t\tloading,\n\t\t\tshowSuggestions,\n\t\t\tselectedSuggestion,\n\t\t\tsuggestionsListboxId,\n\t\t\tsuggestionOptionIdPrefix,\n\t\t} = this.state;\n\n\t\tconst inputId = `url-input-control-${ instanceId }`;\n\n\t\tconst controlProps = {\n\t\t\tid: inputId, // Passes attribute to label for the for attribute\n\t\t\tlabel,\n\t\t\tclassName: clsx( 'block-editor-url-input', className, {\n\t\t\t\t'is-full-width': isFullWidth,\n\t\t\t} ),\n\t\t\thideLabelFromVision,\n\t\t};\n\n\t\tconst inputProps = {\n\t\t\tid: inputId,\n\t\t\tvalue,\n\t\t\trequired: true,\n\t\t\ttype: 'text',\n\t\t\tonChange: this.onChange,\n\t\t\tonFocus: this.onFocus,\n\t\t\tplaceholder,\n\t\t\tonKeyDown: this.onKeyDown,\n\t\t\trole: 'combobox',\n\t\t\t'aria-label': label ? undefined : __( 'URL' ), // Ensure input always has an accessible label\n\t\t\t'aria-expanded': showSuggestions,\n\t\t\t'aria-autocomplete': 'list',\n\t\t\t'aria-owns': suggestionsListboxId,\n\t\t\t'aria-activedescendant':\n\t\t\t\tselectedSuggestion !== null\n\t\t\t\t\t? `${ suggestionOptionIdPrefix }-${ selectedSuggestion }`\n\t\t\t\t\t: undefined,\n\t\t\tref: this.inputRef,\n\t\t\tsuffix: this.props.suffix,\n\t\t};\n\n\t\tif ( renderControl ) {\n\t\t\treturn renderControl( controlProps, inputProps, loading );\n\t\t}\n\n\t\treturn (\n\t\t\t<BaseControl __nextHasNoMarginBottom { ...controlProps }>\n\t\t\t\t<InputControl { ...inputProps } __next40pxDefaultSize />\n\t\t\t\t{ loading && <Spinner /> }\n\t\t\t</BaseControl>\n\t\t);\n\t}\n\n\trenderSuggestions() {\n\t\tconst {\n\t\t\tclassName,\n\t\t\t__experimentalRenderSuggestions: renderSuggestions,\n\t\t} = this.props;\n\n\t\tconst {\n\t\t\tshowSuggestions,\n\t\t\tsuggestions,\n\t\t\tsuggestionsValue,\n\t\t\tselectedSuggestion,\n\t\t\tsuggestionsListboxId,\n\t\t\tsuggestionOptionIdPrefix,\n\t\t\tloading,\n\t\t} = this.state;\n\n\t\tif ( ! showSuggestions || suggestions.length === 0 ) {\n\t\t\treturn null;\n\t\t}\n\n\t\tconst suggestionsListProps = {\n\t\t\tid: suggestionsListboxId,\n\t\t\tref: this.autocompleteRef,\n\t\t\trole: 'listbox',\n\t\t};\n\n\t\tconst buildSuggestionItemProps = ( suggestion, index ) => {\n\t\t\treturn {\n\t\t\t\trole: 'option',\n\t\t\t\ttabIndex: '-1',\n\t\t\t\tid: `${ suggestionOptionIdPrefix }-${ index }`,\n\t\t\t\tref: this.bindSuggestionNode( index ),\n\t\t\t\t'aria-selected':\n\t\t\t\t\tindex === selectedSuggestion ? true : undefined,\n\t\t\t};\n\t\t};\n\n\t\tif ( isFunction( renderSuggestions ) ) {\n\t\t\treturn renderSuggestions( {\n\t\t\t\tsuggestions,\n\t\t\t\tselectedSuggestion,\n\t\t\t\tsuggestionsListProps,\n\t\t\t\tbuildSuggestionItemProps,\n\t\t\t\tisLoading: loading,\n\t\t\t\thandleSuggestionClick: this.handleOnClick,\n\t\t\t\tisInitialSuggestions: ! suggestionsValue?.length,\n\t\t\t\tcurrentInputValue: suggestionsValue,\n\t\t\t} );\n\t\t}\n\n\t\treturn (\n\t\t\t<Popover placement=\"bottom\" focusOnMount={ false }>\n\t\t\t\t<div\n\t\t\t\t\t{ ...suggestionsListProps }\n\t\t\t\t\tclassName={ clsx(\n\t\t\t\t\t\t'block-editor-url-input__suggestions',\n\t\t\t\t\t\t`${ className }__suggestions`\n\t\t\t\t\t) }\n\t\t\t\t>\n\t\t\t\t\t{ suggestions.map( ( suggestion, index ) => (\n\t\t\t\t\t\t<Button\n\t\t\t\t\t\t\t// TODO: Switch to `true` (40px size) if possible\n\t\t\t\t\t\t\t__next40pxDefaultSize={ false }\n\t\t\t\t\t\t\t{ ...buildSuggestionItemProps( suggestion, index ) }\n\t\t\t\t\t\t\tkey={ suggestion.id }\n\t\t\t\t\t\t\tclassName={ clsx(\n\t\t\t\t\t\t\t\t'block-editor-url-input__suggestion',\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t'is-selected': index === selectedSuggestion,\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t) }\n\t\t\t\t\t\t\tonClick={ () => this.handleOnClick( suggestion ) }\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{ suggestion.title }\n\t\t\t\t\t\t</Button>\n\t\t\t\t\t) ) }\n\t\t\t\t</div>\n\t\t\t</Popover>\n\t\t);\n\t}\n}\n\n/**\n * @see https://github.com/WordPress/gutenberg/blob/HEAD/packages/block-editor/src/components/url-input/README.md\n */\nexport default compose(\n\twithSafeTimeout,\n\twithSpokenMessages,\n\twithInstanceId,\n\twithSelect( ( select, props ) => {\n\t\t// If a link suggestions handler is already provided then\n\t\t// bail.\n\t\tif ( isFunction( props.__experimentalFetchLinkSuggestions ) ) {\n\t\t\treturn;\n\t\t}\n\t\tconst { getSettings } = select( blockEditorStore );\n\t\treturn {\n\t\t\t__experimentalFetchLinkSuggestions:\n\t\t\t\tgetSettings().__experimentalFetchLinkSuggestions,\n\t\t};\n\t} )\n)( URLInput );\n"],"mappings":"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","ignoreList":[]}
@@ -29,6 +29,7 @@ var _jsxRuntime = require("react/jsx-runtime");
29
29
  const {
30
30
  DropdownMenuV2
31
31
  } = (0, _lockUnlock.unlock)(_components.privateApis);
32
+ const EMPTY_OBJECT = {};
32
33
  const useToolsPanelDropdownMenuProps = () => {
33
34
  const isMobile = (0, _compose.useViewportMatch)('medium', '<');
34
35
  return !isMobile ? {
@@ -57,7 +58,7 @@ function BlockBindingsPanelDropdown({
57
58
  children: [/*#__PURE__*/(0, _jsxRuntime.jsxs)(DropdownMenuV2.Group, {
58
59
  children: [Object.keys(fieldsList).length > 1 && /*#__PURE__*/(0, _jsxRuntime.jsx)(DropdownMenuV2.GroupLabel, {
59
60
  children: registeredSources[name].label
60
- }), Object.entries(fields).map(([key, value]) => /*#__PURE__*/(0, _jsxRuntime.jsxs)(DropdownMenuV2.RadioItem, {
61
+ }), Object.entries(fields).map(([key, args]) => /*#__PURE__*/(0, _jsxRuntime.jsxs)(DropdownMenuV2.RadioItem, {
61
62
  onChange: () => updateBlockBindings({
62
63
  [attribute]: {
63
64
  source: name,
@@ -70,9 +71,9 @@ function BlockBindingsPanelDropdown({
70
71
  value: key,
71
72
  checked: key === currentKey,
72
73
  children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(DropdownMenuV2.ItemLabel, {
73
- children: key
74
+ children: args?.label
74
75
  }), /*#__PURE__*/(0, _jsxRuntime.jsx)(DropdownMenuV2.ItemHelpText, {
75
- children: value
76
+ children: args?.value
76
77
  })]
77
78
  }, key))]
78
79
  }), i !== Object.keys(fieldsList).length - 1 && /*#__PURE__*/(0, _jsxRuntime.jsx)(DropdownMenuV2.Separator, {})]
@@ -81,7 +82,8 @@ function BlockBindingsPanelDropdown({
81
82
  }
82
83
  function BlockBindingsAttribute({
83
84
  attribute,
84
- binding
85
+ binding,
86
+ fieldsList
85
87
  }) {
86
88
  const {
87
89
  source: sourceName,
@@ -99,18 +101,20 @@ function BlockBindingsAttribute({
99
101
  truncate: true,
100
102
  variant: !isSourceInvalid && 'muted',
101
103
  isDestructive: isSourceInvalid,
102
- children: isSourceInvalid ? (0, _i18n.__)('Invalid source') : args?.key || sourceProps?.label || sourceName
104
+ children: isSourceInvalid ? (0, _i18n.__)('Invalid source') : fieldsList?.[sourceName]?.[args?.key]?.label || sourceProps?.label || sourceName
103
105
  })]
104
106
  });
105
107
  }
106
108
  function ReadOnlyBlockBindingsPanelItems({
107
- bindings
109
+ bindings,
110
+ fieldsList
108
111
  }) {
109
112
  return /*#__PURE__*/(0, _jsxRuntime.jsx)(_jsxRuntime.Fragment, {
110
113
  children: Object.entries(bindings).map(([attribute, binding]) => /*#__PURE__*/(0, _jsxRuntime.jsx)(_components.__experimentalItem, {
111
114
  children: /*#__PURE__*/(0, _jsxRuntime.jsx)(BlockBindingsAttribute, {
112
115
  attribute: attribute,
113
- binding: binding
116
+ binding: binding,
117
+ fieldsList: fieldsList
114
118
  })
115
119
  }, attribute))
116
120
  });
@@ -141,7 +145,8 @@ function EditableBlockBindingsPanelItems({
141
145
  trigger: /*#__PURE__*/(0, _jsxRuntime.jsx)(_components.__experimentalItem, {
142
146
  children: /*#__PURE__*/(0, _jsxRuntime.jsx)(BlockBindingsAttribute, {
143
147
  attribute: attribute,
144
- binding: binding
148
+ binding: binding,
149
+ fieldsList: fieldsList
145
150
  })
146
151
  }),
147
152
  children: /*#__PURE__*/(0, _jsxRuntime.jsx)(BlockBindingsPanelDropdown, {
@@ -160,65 +165,70 @@ const BlockBindingsPanel = ({
160
165
  }) => {
161
166
  const registry = (0, _data.useRegistry)();
162
167
  const blockContext = (0, _element.useContext)(_blockContext.default);
163
- const {
164
- bindings
165
- } = metadata || {};
166
168
  const {
167
169
  removeAllBlockBindings
168
170
  } = (0, _blockBindings.useBlockBindingsUtils)();
169
171
  const bindableAttributes = (0, _useBindingsAttributes.getBindableAttributes)(blockName);
170
172
  const dropdownMenuProps = useToolsPanelDropdownMenuProps();
171
- const filteredBindings = {
172
- ...bindings
173
- };
174
- Object.keys(filteredBindings).forEach(key => {
175
- if (!(0, _useBindingsAttributes.canBindAttribute)(blockName, key) || filteredBindings[key].source === 'core/pattern-overrides') {
176
- delete filteredBindings[key];
177
- }
178
- });
173
+
174
+ // `useSelect` is used purposely here to ensure `getFieldsList`
175
+ // is updated whenever there are updates in block context.
176
+ // `source.getFieldsList` may also call a selector via `registry.select`.
177
+ const _fieldsList = {};
179
178
  const {
179
+ fieldsList,
180
180
  canUpdateBlockBindings
181
181
  } = (0, _data.useSelect)(select => {
182
+ if (!bindableAttributes || bindableAttributes.length === 0) {
183
+ return EMPTY_OBJECT;
184
+ }
185
+ const {
186
+ getBlockBindingsSources
187
+ } = (0, _lockUnlock.unlock)(_blocks.privateApis);
188
+ const registeredSources = getBlockBindingsSources();
189
+ Object.entries(registeredSources).forEach(([sourceName, {
190
+ getFieldsList,
191
+ usesContext
192
+ }]) => {
193
+ if (getFieldsList) {
194
+ // Populate context.
195
+ const context = {};
196
+ if (usesContext?.length) {
197
+ for (const key of usesContext) {
198
+ context[key] = blockContext[key];
199
+ }
200
+ }
201
+ const sourceList = getFieldsList({
202
+ registry,
203
+ context
204
+ });
205
+ // Only add source if the list is not empty.
206
+ if (Object.keys(sourceList || {}).length) {
207
+ _fieldsList[sourceName] = {
208
+ ...sourceList
209
+ };
210
+ }
211
+ }
212
+ });
182
213
  return {
214
+ fieldsList: Object.values(_fieldsList).length > 0 ? _fieldsList : EMPTY_OBJECT,
183
215
  canUpdateBlockBindings: select(_store.store).getSettings().canUpdateBlockBindings
184
216
  };
185
- }, []);
217
+ }, [blockContext, bindableAttributes, registry]);
218
+ // Return early if there are no bindable attributes.
186
219
  if (!bindableAttributes || bindableAttributes.length === 0) {
187
220
  return null;
188
221
  }
189
- const fieldsList = {};
222
+ // Filter bindings to only show bindable attributes and remove pattern overrides.
190
223
  const {
191
- getBlockBindingsSources
192
- } = (0, _lockUnlock.unlock)(_blocks.privateApis);
193
- const registeredSources = getBlockBindingsSources();
194
- Object.entries(registeredSources).forEach(([sourceName, {
195
- getFieldsList,
196
- usesContext
197
- }]) => {
198
- if (getFieldsList) {
199
- // Populate context.
200
- const context = {};
201
- if (usesContext?.length) {
202
- for (const key of usesContext) {
203
- context[key] = blockContext[key];
204
- }
205
- }
206
- const sourceList = getFieldsList({
207
- registry,
208
- context
209
- });
210
- // Only add source if the list is not empty.
211
- if (sourceList) {
212
- fieldsList[sourceName] = {
213
- ...sourceList
214
- };
215
- }
216
- }
217
- });
218
- // Remove empty sources.
219
- Object.entries(fieldsList).forEach(([key, value]) => {
220
- if (!Object.keys(value).length) {
221
- delete fieldsList[key];
224
+ bindings
225
+ } = metadata || {};
226
+ const filteredBindings = {
227
+ ...bindings
228
+ };
229
+ Object.keys(filteredBindings).forEach(key => {
230
+ if (!(0, _useBindingsAttributes.canBindAttribute)(blockName, key) || filteredBindings[key].source === 'core/pattern-overrides') {
231
+ delete filteredBindings[key];
222
232
  }
223
233
  });
224
234
 
@@ -240,7 +250,8 @@ const BlockBindingsPanel = ({
240
250
  isBordered: true,
241
251
  isSeparated: true,
242
252
  children: readOnly ? /*#__PURE__*/(0, _jsxRuntime.jsx)(ReadOnlyBlockBindingsPanelItems, {
243
- bindings: filteredBindings
253
+ bindings: filteredBindings,
254
+ fieldsList: fieldsList
244
255
  }) : /*#__PURE__*/(0, _jsxRuntime.jsx)(EditableBlockBindingsPanelItems, {
245
256
  attributes: bindableAttributes,
246
257
  bindings: filteredBindings,
@@ -1 +1 @@
1
- {"version":3,"names":["_i18n","require","_blocks","_components","_data","_element","_compose","_useBindingsAttributes","_lockUnlock","_inspectorControls","_interopRequireDefault","_blockContext","_blockBindings","_store","_jsxRuntime","DropdownMenuV2","unlock","componentsPrivateApis","useToolsPanelDropdownMenuProps","isMobile","useViewportMatch","popoverProps","placement","offset","BlockBindingsPanelDropdown","fieldsList","attribute","binding","getBlockBindingsSources","blocksPrivateApis","registeredSources","updateBlockBindings","useBlockBindingsUtils","currentKey","args","key","jsx","Fragment","children","Object","entries","map","name","fields","i","jsxs","Group","keys","length","GroupLabel","label","value","RadioItem","onChange","source","checked","ItemLabel","ItemHelpText","Separator","BlockBindingsAttribute","sourceName","sourceProps","getBlockBindingsSource","isSourceInvalid","__experimentalVStack","className","spacing","__experimentalText","truncate","variant","isDestructive","__","ReadOnlyBlockBindingsPanelItems","bindings","__experimentalItem","EditableBlockBindingsPanelItems","attributes","__experimentalToolsPanelItem","hasValue","onDeselect","undefined","gutter","trigger","BlockBindingsPanel","blockName","metadata","registry","useRegistry","blockContext","useContext","BlockContext","removeAllBlockBindings","bindableAttributes","getBindableAttributes","dropdownMenuProps","filteredBindings","forEach","canBindAttribute","canUpdateBlockBindings","useSelect","select","blockEditorStore","getSettings","getFieldsList","usesContext","context","sourceList","readOnly","default","group","__experimentalToolsPanel","resetAll","__experimentalItemGroup","isBordered","isSeparated","exports","_default","edit","attributeKeys","hasSupport"],"sources":["@wordpress/block-editor/src/hooks/block-bindings.js"],"sourcesContent":["/**\n * WordPress dependencies\n */\nimport { __ } from '@wordpress/i18n';\nimport { privateApis as blocksPrivateApis } from '@wordpress/blocks';\nimport {\n\t__experimentalItemGroup as ItemGroup,\n\t__experimentalItem as Item,\n\t__experimentalText as Text,\n\t__experimentalToolsPanel as ToolsPanel,\n\t__experimentalToolsPanelItem as ToolsPanelItem,\n\t__experimentalVStack as VStack,\n\tprivateApis as componentsPrivateApis,\n} from '@wordpress/components';\nimport { useRegistry, useSelect } from '@wordpress/data';\nimport { useContext, Fragment } from '@wordpress/element';\nimport { useViewportMatch } from '@wordpress/compose';\n\n/**\n * Internal dependencies\n */\nimport {\n\tcanBindAttribute,\n\tgetBindableAttributes,\n} from '../hooks/use-bindings-attributes';\nimport { unlock } from '../lock-unlock';\nimport InspectorControls from '../components/inspector-controls';\nimport BlockContext from '../components/block-context';\nimport { useBlockBindingsUtils } from '../utils/block-bindings';\nimport { store as blockEditorStore } from '../store';\n\nconst { DropdownMenuV2 } = unlock( componentsPrivateApis );\n\nconst useToolsPanelDropdownMenuProps = () => {\n\tconst isMobile = useViewportMatch( 'medium', '<' );\n\treturn ! isMobile\n\t\t? {\n\t\t\t\tpopoverProps: {\n\t\t\t\t\tplacement: 'left-start',\n\t\t\t\t\t// For non-mobile, inner sidebar width (248px) - button width (24px) - border (1px) + padding (16px) + spacing (20px)\n\t\t\t\t\toffset: 259,\n\t\t\t\t},\n\t\t }\n\t\t: {};\n};\n\nfunction BlockBindingsPanelDropdown( { fieldsList, attribute, binding } ) {\n\tconst { getBlockBindingsSources } = unlock( blocksPrivateApis );\n\tconst registeredSources = getBlockBindingsSources();\n\tconst { updateBlockBindings } = useBlockBindingsUtils();\n\tconst currentKey = binding?.args?.key;\n\treturn (\n\t\t<>\n\t\t\t{ Object.entries( fieldsList ).map( ( [ name, fields ], i ) => (\n\t\t\t\t<Fragment key={ name }>\n\t\t\t\t\t<DropdownMenuV2.Group>\n\t\t\t\t\t\t{ Object.keys( fieldsList ).length > 1 && (\n\t\t\t\t\t\t\t<DropdownMenuV2.GroupLabel>\n\t\t\t\t\t\t\t\t{ registeredSources[ name ].label }\n\t\t\t\t\t\t\t</DropdownMenuV2.GroupLabel>\n\t\t\t\t\t\t) }\n\t\t\t\t\t\t{ Object.entries( fields ).map( ( [ key, value ] ) => (\n\t\t\t\t\t\t\t<DropdownMenuV2.RadioItem\n\t\t\t\t\t\t\t\tkey={ key }\n\t\t\t\t\t\t\t\tonChange={ () =>\n\t\t\t\t\t\t\t\t\tupdateBlockBindings( {\n\t\t\t\t\t\t\t\t\t\t[ attribute ]: {\n\t\t\t\t\t\t\t\t\t\t\tsource: name,\n\t\t\t\t\t\t\t\t\t\t\targs: { key },\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\tname={ attribute + '-binding' }\n\t\t\t\t\t\t\t\tvalue={ key }\n\t\t\t\t\t\t\t\tchecked={ key === currentKey }\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t<DropdownMenuV2.ItemLabel>\n\t\t\t\t\t\t\t\t\t{ key }\n\t\t\t\t\t\t\t\t</DropdownMenuV2.ItemLabel>\n\t\t\t\t\t\t\t\t<DropdownMenuV2.ItemHelpText>\n\t\t\t\t\t\t\t\t\t{ value }\n\t\t\t\t\t\t\t\t</DropdownMenuV2.ItemHelpText>\n\t\t\t\t\t\t\t</DropdownMenuV2.RadioItem>\n\t\t\t\t\t\t) ) }\n\t\t\t\t\t</DropdownMenuV2.Group>\n\t\t\t\t\t{ i !== Object.keys( fieldsList ).length - 1 && (\n\t\t\t\t\t\t<DropdownMenuV2.Separator />\n\t\t\t\t\t) }\n\t\t\t\t</Fragment>\n\t\t\t) ) }\n\t\t</>\n\t);\n}\n\nfunction BlockBindingsAttribute( { attribute, binding } ) {\n\tconst { source: sourceName, args } = binding || {};\n\tconst sourceProps =\n\t\tunlock( blocksPrivateApis ).getBlockBindingsSource( sourceName );\n\tconst isSourceInvalid = ! sourceProps;\n\treturn (\n\t\t<VStack className=\"block-editor-bindings__item\" spacing={ 0 }>\n\t\t\t<Text truncate>{ attribute }</Text>\n\t\t\t{ !! binding && (\n\t\t\t\t<Text\n\t\t\t\t\ttruncate\n\t\t\t\t\tvariant={ ! isSourceInvalid && 'muted' }\n\t\t\t\t\tisDestructive={ isSourceInvalid }\n\t\t\t\t>\n\t\t\t\t\t{ isSourceInvalid\n\t\t\t\t\t\t? __( 'Invalid source' )\n\t\t\t\t\t\t: args?.key || sourceProps?.label || sourceName }\n\t\t\t\t</Text>\n\t\t\t) }\n\t\t</VStack>\n\t);\n}\n\nfunction ReadOnlyBlockBindingsPanelItems( { bindings } ) {\n\treturn (\n\t\t<>\n\t\t\t{ Object.entries( bindings ).map( ( [ attribute, binding ] ) => (\n\t\t\t\t<Item key={ attribute }>\n\t\t\t\t\t<BlockBindingsAttribute\n\t\t\t\t\t\tattribute={ attribute }\n\t\t\t\t\t\tbinding={ binding }\n\t\t\t\t\t/>\n\t\t\t\t</Item>\n\t\t\t) ) }\n\t\t</>\n\t);\n}\n\nfunction EditableBlockBindingsPanelItems( {\n\tattributes,\n\tbindings,\n\tfieldsList,\n} ) {\n\tconst { updateBlockBindings } = useBlockBindingsUtils();\n\tconst isMobile = useViewportMatch( 'medium', '<' );\n\treturn (\n\t\t<>\n\t\t\t{ attributes.map( ( attribute ) => {\n\t\t\t\tconst binding = bindings[ attribute ];\n\t\t\t\treturn (\n\t\t\t\t\t<ToolsPanelItem\n\t\t\t\t\t\tkey={ attribute }\n\t\t\t\t\t\thasValue={ () => !! binding }\n\t\t\t\t\t\tlabel={ attribute }\n\t\t\t\t\t\tonDeselect={ () => {\n\t\t\t\t\t\t\tupdateBlockBindings( {\n\t\t\t\t\t\t\t\t[ attribute ]: undefined,\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\t<DropdownMenuV2\n\t\t\t\t\t\t\tplacement={\n\t\t\t\t\t\t\t\tisMobile ? 'bottom-start' : 'left-start'\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tgutter={ isMobile ? 8 : 36 }\n\t\t\t\t\t\t\ttrigger={\n\t\t\t\t\t\t\t\t<Item>\n\t\t\t\t\t\t\t\t\t<BlockBindingsAttribute\n\t\t\t\t\t\t\t\t\t\tattribute={ attribute }\n\t\t\t\t\t\t\t\t\t\tbinding={ binding }\n\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t</Item>\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<BlockBindingsPanelDropdown\n\t\t\t\t\t\t\t\tfieldsList={ fieldsList }\n\t\t\t\t\t\t\t\tattribute={ attribute }\n\t\t\t\t\t\t\t\tbinding={ binding }\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t</DropdownMenuV2>\n\t\t\t\t\t</ToolsPanelItem>\n\t\t\t\t);\n\t\t\t} ) }\n\t\t</>\n\t);\n}\n\nexport const BlockBindingsPanel = ( { name: blockName, metadata } ) => {\n\tconst registry = useRegistry();\n\tconst blockContext = useContext( BlockContext );\n\tconst { bindings } = metadata || {};\n\tconst { removeAllBlockBindings } = useBlockBindingsUtils();\n\tconst bindableAttributes = getBindableAttributes( blockName );\n\tconst dropdownMenuProps = useToolsPanelDropdownMenuProps();\n\n\tconst filteredBindings = { ...bindings };\n\tObject.keys( filteredBindings ).forEach( ( key ) => {\n\t\tif (\n\t\t\t! canBindAttribute( blockName, key ) ||\n\t\t\tfilteredBindings[ key ].source === 'core/pattern-overrides'\n\t\t) {\n\t\t\tdelete filteredBindings[ key ];\n\t\t}\n\t} );\n\n\tconst { canUpdateBlockBindings } = useSelect( ( select ) => {\n\t\treturn {\n\t\t\tcanUpdateBlockBindings:\n\t\t\t\tselect( blockEditorStore ).getSettings().canUpdateBlockBindings,\n\t\t};\n\t}, [] );\n\n\tif ( ! bindableAttributes || bindableAttributes.length === 0 ) {\n\t\treturn null;\n\t}\n\n\tconst fieldsList = {};\n\tconst { getBlockBindingsSources } = unlock( blocksPrivateApis );\n\tconst registeredSources = getBlockBindingsSources();\n\tObject.entries( registeredSources ).forEach(\n\t\t( [ sourceName, { getFieldsList, usesContext } ] ) => {\n\t\t\tif ( getFieldsList ) {\n\t\t\t\t// Populate context.\n\t\t\t\tconst context = {};\n\t\t\t\tif ( usesContext?.length ) {\n\t\t\t\t\tfor ( const key of usesContext ) {\n\t\t\t\t\t\tcontext[ key ] = blockContext[ key ];\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tconst sourceList = getFieldsList( {\n\t\t\t\t\tregistry,\n\t\t\t\t\tcontext,\n\t\t\t\t} );\n\t\t\t\t// Only add source if the list is not empty.\n\t\t\t\tif ( sourceList ) {\n\t\t\t\t\tfieldsList[ sourceName ] = { ...sourceList };\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t);\n\t// Remove empty sources.\n\tObject.entries( fieldsList ).forEach( ( [ key, value ] ) => {\n\t\tif ( ! Object.keys( value ).length ) {\n\t\t\tdelete fieldsList[ key ];\n\t\t}\n\t} );\n\n\t// Lock the UI when the user can't update bindings or there are no fields to connect to.\n\tconst readOnly =\n\t\t! canUpdateBlockBindings || ! Object.keys( fieldsList ).length;\n\n\tif ( readOnly && Object.keys( filteredBindings ).length === 0 ) {\n\t\treturn null;\n\t}\n\n\treturn (\n\t\t<InspectorControls group=\"bindings\">\n\t\t\t<ToolsPanel\n\t\t\t\tlabel={ __( 'Attributes' ) }\n\t\t\t\tresetAll={ () => {\n\t\t\t\t\tremoveAllBlockBindings();\n\t\t\t\t} }\n\t\t\t\tdropdownMenuProps={ dropdownMenuProps }\n\t\t\t\tclassName=\"block-editor-bindings__panel\"\n\t\t\t>\n\t\t\t\t<ItemGroup isBordered isSeparated>\n\t\t\t\t\t{ readOnly ? (\n\t\t\t\t\t\t<ReadOnlyBlockBindingsPanelItems\n\t\t\t\t\t\t\tbindings={ filteredBindings }\n\t\t\t\t\t\t/>\n\t\t\t\t\t) : (\n\t\t\t\t\t\t<EditableBlockBindingsPanelItems\n\t\t\t\t\t\t\tattributes={ bindableAttributes }\n\t\t\t\t\t\t\tbindings={ filteredBindings }\n\t\t\t\t\t\t\tfieldsList={ fieldsList }\n\t\t\t\t\t\t/>\n\t\t\t\t\t) }\n\t\t\t\t</ItemGroup>\n\t\t\t\t<ItemGroup>\n\t\t\t\t\t<Text variant=\"muted\">\n\t\t\t\t\t\t{ __(\n\t\t\t\t\t\t\t'Attributes connected to custom fields or other dynamic data.'\n\t\t\t\t\t\t) }\n\t\t\t\t\t</Text>\n\t\t\t\t</ItemGroup>\n\t\t\t</ToolsPanel>\n\t\t</InspectorControls>\n\t);\n};\n\nexport default {\n\tedit: BlockBindingsPanel,\n\tattributeKeys: [ 'metadata' ],\n\thasSupport() {\n\t\treturn true;\n\t},\n};\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["_i18n","require","_blocks","_components","_data","_element","_compose","_useBindingsAttributes","_lockUnlock","_inspectorControls","_interopRequireDefault","_blockContext","_blockBindings","_store","_jsxRuntime","DropdownMenuV2","unlock","componentsPrivateApis","EMPTY_OBJECT","useToolsPanelDropdownMenuProps","isMobile","useViewportMatch","popoverProps","placement","offset","BlockBindingsPanelDropdown","fieldsList","attribute","binding","getBlockBindingsSources","blocksPrivateApis","registeredSources","updateBlockBindings","useBlockBindingsUtils","currentKey","args","key","jsx","Fragment","children","Object","entries","map","name","fields","i","jsxs","Group","keys","length","GroupLabel","label","RadioItem","onChange","source","value","checked","ItemLabel","ItemHelpText","Separator","BlockBindingsAttribute","sourceName","sourceProps","getBlockBindingsSource","isSourceInvalid","__experimentalVStack","className","spacing","__experimentalText","truncate","variant","isDestructive","__","ReadOnlyBlockBindingsPanelItems","bindings","__experimentalItem","EditableBlockBindingsPanelItems","attributes","__experimentalToolsPanelItem","hasValue","onDeselect","undefined","gutter","trigger","BlockBindingsPanel","blockName","metadata","registry","useRegistry","blockContext","useContext","BlockContext","removeAllBlockBindings","bindableAttributes","getBindableAttributes","dropdownMenuProps","_fieldsList","canUpdateBlockBindings","useSelect","select","forEach","getFieldsList","usesContext","context","sourceList","values","blockEditorStore","getSettings","filteredBindings","canBindAttribute","readOnly","default","group","__experimentalToolsPanel","resetAll","__experimentalItemGroup","isBordered","isSeparated","exports","_default","edit","attributeKeys","hasSupport"],"sources":["@wordpress/block-editor/src/hooks/block-bindings.js"],"sourcesContent":["/**\n * WordPress dependencies\n */\nimport { __ } from '@wordpress/i18n';\nimport { privateApis as blocksPrivateApis } from '@wordpress/blocks';\nimport {\n\t__experimentalItemGroup as ItemGroup,\n\t__experimentalItem as Item,\n\t__experimentalText as Text,\n\t__experimentalToolsPanel as ToolsPanel,\n\t__experimentalToolsPanelItem as ToolsPanelItem,\n\t__experimentalVStack as VStack,\n\tprivateApis as componentsPrivateApis,\n} from '@wordpress/components';\nimport { useRegistry, useSelect } from '@wordpress/data';\nimport { useContext, Fragment } from '@wordpress/element';\nimport { useViewportMatch } from '@wordpress/compose';\n\n/**\n * Internal dependencies\n */\nimport {\n\tcanBindAttribute,\n\tgetBindableAttributes,\n} from '../hooks/use-bindings-attributes';\nimport { unlock } from '../lock-unlock';\nimport InspectorControls from '../components/inspector-controls';\nimport BlockContext from '../components/block-context';\nimport { useBlockBindingsUtils } from '../utils/block-bindings';\nimport { store as blockEditorStore } from '../store';\n\nconst { DropdownMenuV2 } = unlock( componentsPrivateApis );\n\nconst EMPTY_OBJECT = {};\n\nconst useToolsPanelDropdownMenuProps = () => {\n\tconst isMobile = useViewportMatch( 'medium', '<' );\n\treturn ! isMobile\n\t\t? {\n\t\t\t\tpopoverProps: {\n\t\t\t\t\tplacement: 'left-start',\n\t\t\t\t\t// For non-mobile, inner sidebar width (248px) - button width (24px) - border (1px) + padding (16px) + spacing (20px)\n\t\t\t\t\toffset: 259,\n\t\t\t\t},\n\t\t }\n\t\t: {};\n};\n\nfunction BlockBindingsPanelDropdown( { fieldsList, attribute, binding } ) {\n\tconst { getBlockBindingsSources } = unlock( blocksPrivateApis );\n\tconst registeredSources = getBlockBindingsSources();\n\tconst { updateBlockBindings } = useBlockBindingsUtils();\n\tconst currentKey = binding?.args?.key;\n\treturn (\n\t\t<>\n\t\t\t{ Object.entries( fieldsList ).map( ( [ name, fields ], i ) => (\n\t\t\t\t<Fragment key={ name }>\n\t\t\t\t\t<DropdownMenuV2.Group>\n\t\t\t\t\t\t{ Object.keys( fieldsList ).length > 1 && (\n\t\t\t\t\t\t\t<DropdownMenuV2.GroupLabel>\n\t\t\t\t\t\t\t\t{ registeredSources[ name ].label }\n\t\t\t\t\t\t\t</DropdownMenuV2.GroupLabel>\n\t\t\t\t\t\t) }\n\t\t\t\t\t\t{ Object.entries( fields ).map( ( [ key, args ] ) => (\n\t\t\t\t\t\t\t<DropdownMenuV2.RadioItem\n\t\t\t\t\t\t\t\tkey={ key }\n\t\t\t\t\t\t\t\tonChange={ () =>\n\t\t\t\t\t\t\t\t\tupdateBlockBindings( {\n\t\t\t\t\t\t\t\t\t\t[ attribute ]: {\n\t\t\t\t\t\t\t\t\t\t\tsource: name,\n\t\t\t\t\t\t\t\t\t\t\targs: { key },\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\tname={ attribute + '-binding' }\n\t\t\t\t\t\t\t\tvalue={ key }\n\t\t\t\t\t\t\t\tchecked={ key === currentKey }\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t<DropdownMenuV2.ItemLabel>\n\t\t\t\t\t\t\t\t\t{ args?.label }\n\t\t\t\t\t\t\t\t</DropdownMenuV2.ItemLabel>\n\t\t\t\t\t\t\t\t<DropdownMenuV2.ItemHelpText>\n\t\t\t\t\t\t\t\t\t{ args?.value }\n\t\t\t\t\t\t\t\t</DropdownMenuV2.ItemHelpText>\n\t\t\t\t\t\t\t</DropdownMenuV2.RadioItem>\n\t\t\t\t\t\t) ) }\n\t\t\t\t\t</DropdownMenuV2.Group>\n\t\t\t\t\t{ i !== Object.keys( fieldsList ).length - 1 && (\n\t\t\t\t\t\t<DropdownMenuV2.Separator />\n\t\t\t\t\t) }\n\t\t\t\t</Fragment>\n\t\t\t) ) }\n\t\t</>\n\t);\n}\n\nfunction BlockBindingsAttribute( { attribute, binding, fieldsList } ) {\n\tconst { source: sourceName, args } = binding || {};\n\tconst sourceProps =\n\t\tunlock( blocksPrivateApis ).getBlockBindingsSource( sourceName );\n\tconst isSourceInvalid = ! sourceProps;\n\treturn (\n\t\t<VStack className=\"block-editor-bindings__item\" spacing={ 0 }>\n\t\t\t<Text truncate>{ attribute }</Text>\n\t\t\t{ !! binding && (\n\t\t\t\t<Text\n\t\t\t\t\ttruncate\n\t\t\t\t\tvariant={ ! isSourceInvalid && 'muted' }\n\t\t\t\t\tisDestructive={ isSourceInvalid }\n\t\t\t\t>\n\t\t\t\t\t{ isSourceInvalid\n\t\t\t\t\t\t? __( 'Invalid source' )\n\t\t\t\t\t\t: fieldsList?.[ sourceName ]?.[ args?.key ]?.label ||\n\t\t\t\t\t\t sourceProps?.label ||\n\t\t\t\t\t\t sourceName }\n\t\t\t\t</Text>\n\t\t\t) }\n\t\t</VStack>\n\t);\n}\n\nfunction ReadOnlyBlockBindingsPanelItems( { bindings, fieldsList } ) {\n\treturn (\n\t\t<>\n\t\t\t{ Object.entries( bindings ).map( ( [ attribute, binding ] ) => (\n\t\t\t\t<Item key={ attribute }>\n\t\t\t\t\t<BlockBindingsAttribute\n\t\t\t\t\t\tattribute={ attribute }\n\t\t\t\t\t\tbinding={ binding }\n\t\t\t\t\t\tfieldsList={ fieldsList }\n\t\t\t\t\t/>\n\t\t\t\t</Item>\n\t\t\t) ) }\n\t\t</>\n\t);\n}\n\nfunction EditableBlockBindingsPanelItems( {\n\tattributes,\n\tbindings,\n\tfieldsList,\n} ) {\n\tconst { updateBlockBindings } = useBlockBindingsUtils();\n\tconst isMobile = useViewportMatch( 'medium', '<' );\n\treturn (\n\t\t<>\n\t\t\t{ attributes.map( ( attribute ) => {\n\t\t\t\tconst binding = bindings[ attribute ];\n\t\t\t\treturn (\n\t\t\t\t\t<ToolsPanelItem\n\t\t\t\t\t\tkey={ attribute }\n\t\t\t\t\t\thasValue={ () => !! binding }\n\t\t\t\t\t\tlabel={ attribute }\n\t\t\t\t\t\tonDeselect={ () => {\n\t\t\t\t\t\t\tupdateBlockBindings( {\n\t\t\t\t\t\t\t\t[ attribute ]: undefined,\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\t<DropdownMenuV2\n\t\t\t\t\t\t\tplacement={\n\t\t\t\t\t\t\t\tisMobile ? 'bottom-start' : 'left-start'\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tgutter={ isMobile ? 8 : 36 }\n\t\t\t\t\t\t\ttrigger={\n\t\t\t\t\t\t\t\t<Item>\n\t\t\t\t\t\t\t\t\t<BlockBindingsAttribute\n\t\t\t\t\t\t\t\t\t\tattribute={ attribute }\n\t\t\t\t\t\t\t\t\t\tbinding={ binding }\n\t\t\t\t\t\t\t\t\t\tfieldsList={ fieldsList }\n\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t</Item>\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<BlockBindingsPanelDropdown\n\t\t\t\t\t\t\t\tfieldsList={ fieldsList }\n\t\t\t\t\t\t\t\tattribute={ attribute }\n\t\t\t\t\t\t\t\tbinding={ binding }\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t</DropdownMenuV2>\n\t\t\t\t\t</ToolsPanelItem>\n\t\t\t\t);\n\t\t\t} ) }\n\t\t</>\n\t);\n}\n\nexport const BlockBindingsPanel = ( { name: blockName, metadata } ) => {\n\tconst registry = useRegistry();\n\tconst blockContext = useContext( BlockContext );\n\tconst { removeAllBlockBindings } = useBlockBindingsUtils();\n\tconst bindableAttributes = getBindableAttributes( blockName );\n\tconst dropdownMenuProps = useToolsPanelDropdownMenuProps();\n\n\t// `useSelect` is used purposely here to ensure `getFieldsList`\n\t// is updated whenever there are updates in block context.\n\t// `source.getFieldsList` may also call a selector via `registry.select`.\n\tconst _fieldsList = {};\n\tconst { fieldsList, canUpdateBlockBindings } = useSelect(\n\t\t( select ) => {\n\t\t\tif ( ! bindableAttributes || bindableAttributes.length === 0 ) {\n\t\t\t\treturn EMPTY_OBJECT;\n\t\t\t}\n\t\t\tconst { getBlockBindingsSources } = unlock( blocksPrivateApis );\n\t\t\tconst registeredSources = getBlockBindingsSources();\n\t\t\tObject.entries( registeredSources ).forEach(\n\t\t\t\t( [ sourceName, { getFieldsList, usesContext } ] ) => {\n\t\t\t\t\tif ( getFieldsList ) {\n\t\t\t\t\t\t// Populate context.\n\t\t\t\t\t\tconst context = {};\n\t\t\t\t\t\tif ( usesContext?.length ) {\n\t\t\t\t\t\t\tfor ( const key of usesContext ) {\n\t\t\t\t\t\t\t\tcontext[ key ] = blockContext[ key ];\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tconst sourceList = getFieldsList( {\n\t\t\t\t\t\t\tregistry,\n\t\t\t\t\t\t\tcontext,\n\t\t\t\t\t\t} );\n\t\t\t\t\t\t// Only add source if the list is not empty.\n\t\t\t\t\t\tif ( Object.keys( sourceList || {} ).length ) {\n\t\t\t\t\t\t\t_fieldsList[ sourceName ] = { ...sourceList };\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\treturn {\n\t\t\t\tfieldsList:\n\t\t\t\t\tObject.values( _fieldsList ).length > 0\n\t\t\t\t\t\t? _fieldsList\n\t\t\t\t\t\t: EMPTY_OBJECT,\n\t\t\t\tcanUpdateBlockBindings:\n\t\t\t\t\tselect( blockEditorStore ).getSettings()\n\t\t\t\t\t\t.canUpdateBlockBindings,\n\t\t\t};\n\t\t},\n\t\t[ blockContext, bindableAttributes, registry ]\n\t);\n\t// Return early if there are no bindable attributes.\n\tif ( ! bindableAttributes || bindableAttributes.length === 0 ) {\n\t\treturn null;\n\t}\n\t// Filter bindings to only show bindable attributes and remove pattern overrides.\n\tconst { bindings } = metadata || {};\n\tconst filteredBindings = { ...bindings };\n\tObject.keys( filteredBindings ).forEach( ( key ) => {\n\t\tif (\n\t\t\t! canBindAttribute( blockName, key ) ||\n\t\t\tfilteredBindings[ key ].source === 'core/pattern-overrides'\n\t\t) {\n\t\t\tdelete filteredBindings[ key ];\n\t\t}\n\t} );\n\n\t// Lock the UI when the user can't update bindings or there are no fields to connect to.\n\tconst readOnly =\n\t\t! canUpdateBlockBindings || ! Object.keys( fieldsList ).length;\n\n\tif ( readOnly && Object.keys( filteredBindings ).length === 0 ) {\n\t\treturn null;\n\t}\n\n\treturn (\n\t\t<InspectorControls group=\"bindings\">\n\t\t\t<ToolsPanel\n\t\t\t\tlabel={ __( 'Attributes' ) }\n\t\t\t\tresetAll={ () => {\n\t\t\t\t\tremoveAllBlockBindings();\n\t\t\t\t} }\n\t\t\t\tdropdownMenuProps={ dropdownMenuProps }\n\t\t\t\tclassName=\"block-editor-bindings__panel\"\n\t\t\t>\n\t\t\t\t<ItemGroup isBordered isSeparated>\n\t\t\t\t\t{ readOnly ? (\n\t\t\t\t\t\t<ReadOnlyBlockBindingsPanelItems\n\t\t\t\t\t\t\tbindings={ filteredBindings }\n\t\t\t\t\t\t\tfieldsList={ fieldsList }\n\t\t\t\t\t\t/>\n\t\t\t\t\t) : (\n\t\t\t\t\t\t<EditableBlockBindingsPanelItems\n\t\t\t\t\t\t\tattributes={ bindableAttributes }\n\t\t\t\t\t\t\tbindings={ filteredBindings }\n\t\t\t\t\t\t\tfieldsList={ fieldsList }\n\t\t\t\t\t\t/>\n\t\t\t\t\t) }\n\t\t\t\t</ItemGroup>\n\t\t\t\t<ItemGroup>\n\t\t\t\t\t<Text variant=\"muted\">\n\t\t\t\t\t\t{ __(\n\t\t\t\t\t\t\t'Attributes connected to custom fields or other dynamic data.'\n\t\t\t\t\t\t) }\n\t\t\t\t\t</Text>\n\t\t\t\t</ItemGroup>\n\t\t\t</ToolsPanel>\n\t\t</InspectorControls>\n\t);\n};\n\nexport default {\n\tedit: BlockBindingsPanel,\n\tattributeKeys: [ 'metadata' ],\n\thasSupport() {\n\t\treturn true;\n\t},\n};\n"],"mappings":"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","ignoreList":[]}
@@ -163,14 +163,7 @@ function BlockHooksControlPure({
163
163
  return /*#__PURE__*/(0, _jsxRuntime.jsx)(_components.ToggleControl, {
164
164
  __nextHasNoMarginBottom: true,
165
165
  checked: checked,
166
- label: /*#__PURE__*/(0, _jsxRuntime.jsxs)(_components.__experimentalHStack, {
167
- justify: "flex-start",
168
- children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_components2.BlockIcon, {
169
- icon: block.icon
170
- }), /*#__PURE__*/(0, _jsxRuntime.jsx)("span", {
171
- children: block.title
172
- })]
173
- }),
166
+ label: block.title,
174
167
  onChange: () => {
175
168
  if (!checked) {
176
169
  // Create and insert block.
@@ -1 +1 @@
1
- {"version":3,"names":["_i18n","require","_element","_components","_blocks","_data","_components2","_store","_jsxRuntime","EMPTY_OBJECT","BlockHooksControlPure","name","clientId","metadata","ignoredHookedBlocks","blockTypes","useSelect","select","blocksStore","getBlockTypes","hookedBlocksForCurrentBlock","useMemo","filter","blockName","blockHooks","includes","hookedBlockClientIds","getBlocks","getBlockRootClientId","getGlobalBlockCount","blockEditorStore","rootClientId","_hookedBlockClientIds","reduce","clientIds","block","relativePosition","candidates","undefined","hookedBlock","find","candidate","Object","values","length","getBlockIndex","getBlockCount","insertBlock","removeBlock","useDispatch","groupedHookedBlocks","groups","namespace","split","push","insertBlockIntoDesignatedLocation","blockIndex","innerBlocksLength","jsx","InspectorControls","children","jsxs","PanelBody","className","title","__","initialOpen","keys","map","vendor","Fragment","checked","ToggleControl","__nextHasNoMarginBottom","label","__experimentalHStack","justify","BlockIcon","icon","onChange","createBlock","_default","exports","default","edit","attributeKeys","hasSupport"],"sources":["@wordpress/block-editor/src/hooks/block-hooks.js"],"sourcesContent":["/**\n * WordPress dependencies\n */\nimport { __ } from '@wordpress/i18n';\nimport { Fragment, useMemo } from '@wordpress/element';\nimport {\n\t__experimentalHStack as HStack,\n\tPanelBody,\n\tToggleControl,\n} from '@wordpress/components';\nimport { createBlock, store as blocksStore } from '@wordpress/blocks';\nimport { useDispatch, useSelect } from '@wordpress/data';\n\n/**\n * Internal dependencies\n */\nimport { BlockIcon, InspectorControls } from '../components';\nimport { store as blockEditorStore } from '../store';\n\nconst EMPTY_OBJECT = {};\n\nfunction BlockHooksControlPure( {\n\tname,\n\tclientId,\n\tmetadata: { ignoredHookedBlocks = [] } = {},\n} ) {\n\tconst blockTypes = useSelect(\n\t\t( select ) => select( blocksStore ).getBlockTypes(),\n\t\t[]\n\t);\n\n\t// A hooked block added via a filter will not be exposed through a block\n\t// type's `blockHooks` property; however, if the containing layout has been\n\t// modified, it will be present in the anchor block's `ignoredHookedBlocks`\n\t// metadata.\n\tconst hookedBlocksForCurrentBlock = useMemo(\n\t\t() =>\n\t\t\tblockTypes?.filter(\n\t\t\t\t( { name: blockName, blockHooks } ) =>\n\t\t\t\t\t( blockHooks && name in blockHooks ) ||\n\t\t\t\t\tignoredHookedBlocks.includes( blockName )\n\t\t\t),\n\t\t[ blockTypes, name, ignoredHookedBlocks ]\n\t);\n\n\tconst hookedBlockClientIds = useSelect(\n\t\t( select ) => {\n\t\t\tconst { getBlocks, getBlockRootClientId, getGlobalBlockCount } =\n\t\t\t\tselect( blockEditorStore );\n\n\t\t\tconst rootClientId = getBlockRootClientId( clientId );\n\t\t\tconst _hookedBlockClientIds = hookedBlocksForCurrentBlock.reduce(\n\t\t\t\t( clientIds, block ) => {\n\t\t\t\t\t// If the block doesn't exist anywhere in the block tree,\n\t\t\t\t\t// we know that we have to set the toggle to disabled.\n\t\t\t\t\tif ( getGlobalBlockCount( block.name ) === 0 ) {\n\t\t\t\t\t\treturn clientIds;\n\t\t\t\t\t}\n\n\t\t\t\t\tconst relativePosition = block?.blockHooks?.[ name ];\n\t\t\t\t\tlet candidates;\n\n\t\t\t\t\tswitch ( relativePosition ) {\n\t\t\t\t\t\tcase 'before':\n\t\t\t\t\t\tcase 'after':\n\t\t\t\t\t\t\t// Any of the current block's siblings (with the right block type) qualifies\n\t\t\t\t\t\t\t// as a hooked block (inserted `before` or `after` the current one), as the block\n\t\t\t\t\t\t\t// might've been automatically inserted and then moved around a bit by the user.\n\t\t\t\t\t\t\tcandidates = getBlocks( rootClientId );\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\tcase 'first_child':\n\t\t\t\t\t\tcase 'last_child':\n\t\t\t\t\t\t\t// Any of the current block's child blocks (with the right block type) qualifies\n\t\t\t\t\t\t\t// as a hooked first or last child block, as the block might've been automatically\n\t\t\t\t\t\t\t// inserted and then moved around a bit by the user.\n\t\t\t\t\t\t\tcandidates = getBlocks( clientId );\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\tcase undefined:\n\t\t\t\t\t\t\t// If we haven't found a blockHooks field with a relative position for the hooked\n\t\t\t\t\t\t\t// block, it means that it was added by a filter. In this case, we look for the block\n\t\t\t\t\t\t\t// both among the current block's siblings and its children.\n\t\t\t\t\t\t\tcandidates = [\n\t\t\t\t\t\t\t\t...getBlocks( rootClientId ),\n\t\t\t\t\t\t\t\t...getBlocks( clientId ),\n\t\t\t\t\t\t\t];\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\n\t\t\t\t\tconst hookedBlock = candidates?.find(\n\t\t\t\t\t\t( candidate ) => candidate.name === block.name\n\t\t\t\t\t);\n\n\t\t\t\t\t// If the block exists in the designated location, we consider it hooked\n\t\t\t\t\t// and show the toggle as enabled.\n\t\t\t\t\tif ( hookedBlock ) {\n\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t...clientIds,\n\t\t\t\t\t\t\t[ block.name ]: hookedBlock.clientId,\n\t\t\t\t\t\t};\n\t\t\t\t\t}\n\n\t\t\t\t\t// If no hooked block was found in any of its designated locations,\n\t\t\t\t\t// we set the toggle to disabled.\n\t\t\t\t\treturn clientIds;\n\t\t\t\t},\n\t\t\t\t{}\n\t\t\t);\n\n\t\t\tif ( Object.values( _hookedBlockClientIds ).length > 0 ) {\n\t\t\t\treturn _hookedBlockClientIds;\n\t\t\t}\n\n\t\t\treturn EMPTY_OBJECT;\n\t\t},\n\t\t[ hookedBlocksForCurrentBlock, name, clientId ]\n\t);\n\n\tconst { getBlockIndex, getBlockCount, getBlockRootClientId } =\n\t\tuseSelect( blockEditorStore );\n\tconst { insertBlock, removeBlock } = useDispatch( blockEditorStore );\n\n\tif ( ! hookedBlocksForCurrentBlock.length ) {\n\t\treturn null;\n\t}\n\n\t// Group by block namespace (i.e. prefix before the slash).\n\tconst groupedHookedBlocks = hookedBlocksForCurrentBlock.reduce(\n\t\t( groups, block ) => {\n\t\t\tconst [ namespace ] = block.name.split( '/' );\n\t\t\tif ( ! groups[ namespace ] ) {\n\t\t\t\tgroups[ namespace ] = [];\n\t\t\t}\n\t\t\tgroups[ namespace ].push( block );\n\t\t\treturn groups;\n\t\t},\n\t\t{}\n\t);\n\n\tconst insertBlockIntoDesignatedLocation = ( block, relativePosition ) => {\n\t\tconst blockIndex = getBlockIndex( clientId );\n\t\tconst innerBlocksLength = getBlockCount( clientId );\n\t\tconst rootClientId = getBlockRootClientId( clientId );\n\n\t\tswitch ( relativePosition ) {\n\t\t\tcase 'before':\n\t\t\tcase 'after':\n\t\t\t\tinsertBlock(\n\t\t\t\t\tblock,\n\t\t\t\t\trelativePosition === 'after' ? blockIndex + 1 : blockIndex,\n\t\t\t\t\trootClientId, // Insert as a child of the current block's parent\n\t\t\t\t\tfalse\n\t\t\t\t);\n\t\t\t\tbreak;\n\n\t\t\tcase 'first_child':\n\t\t\tcase 'last_child':\n\t\t\t\tinsertBlock(\n\t\t\t\t\tblock,\n\t\t\t\t\t// TODO: It'd be great if insertBlock() would accept negative indices for insertion.\n\t\t\t\t\trelativePosition === 'first_child' ? 0 : innerBlocksLength,\n\t\t\t\t\tclientId, // Insert as a child of the current block.\n\t\t\t\t\tfalse\n\t\t\t\t);\n\t\t\t\tbreak;\n\n\t\t\tcase undefined:\n\t\t\t\t// If we do not know the relative position, it is because the block was\n\t\t\t\t// added via a filter. In this case, we default to inserting it after the\n\t\t\t\t// current block.\n\t\t\t\tinsertBlock(\n\t\t\t\t\tblock,\n\t\t\t\t\tblockIndex + 1,\n\t\t\t\t\trootClientId, // Insert as a child of the current block's parent\n\t\t\t\t\tfalse\n\t\t\t\t);\n\t\t\t\tbreak;\n\t\t}\n\t};\n\n\treturn (\n\t\t<InspectorControls>\n\t\t\t<PanelBody\n\t\t\t\tclassName=\"block-editor-hooks__block-hooks\"\n\t\t\t\ttitle={ __( 'Plugins' ) }\n\t\t\t\tinitialOpen\n\t\t\t>\n\t\t\t\t<p className=\"block-editor-hooks__block-hooks-helptext\">\n\t\t\t\t\t{ __(\n\t\t\t\t\t\t'Manage the inclusion of blocks added automatically by plugins.'\n\t\t\t\t\t) }\n\t\t\t\t</p>\n\t\t\t\t{ Object.keys( groupedHookedBlocks ).map( ( vendor ) => {\n\t\t\t\t\treturn (\n\t\t\t\t\t\t<Fragment key={ vendor }>\n\t\t\t\t\t\t\t<h3>{ vendor }</h3>\n\t\t\t\t\t\t\t{ groupedHookedBlocks[ vendor ].map( ( block ) => {\n\t\t\t\t\t\t\t\tconst checked =\n\t\t\t\t\t\t\t\t\tblock.name in hookedBlockClientIds;\n\n\t\t\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t\t\t<ToggleControl\n\t\t\t\t\t\t\t\t\t\t__nextHasNoMarginBottom\n\t\t\t\t\t\t\t\t\t\tchecked={ checked }\n\t\t\t\t\t\t\t\t\t\tkey={ block.title }\n\t\t\t\t\t\t\t\t\t\tlabel={\n\t\t\t\t\t\t\t\t\t\t\t<HStack justify=\"flex-start\">\n\t\t\t\t\t\t\t\t\t\t\t\t<BlockIcon\n\t\t\t\t\t\t\t\t\t\t\t\t\ticon={ block.icon }\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\t<span>{ block.title }</span>\n\t\t\t\t\t\t\t\t\t\t\t</HStack>\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\tonChange={ () => {\n\t\t\t\t\t\t\t\t\t\t\tif ( ! checked ) {\n\t\t\t\t\t\t\t\t\t\t\t\t// Create and insert block.\n\t\t\t\t\t\t\t\t\t\t\t\tconst relativePosition =\n\t\t\t\t\t\t\t\t\t\t\t\t\tblock.blockHooks[ name ];\n\t\t\t\t\t\t\t\t\t\t\t\tinsertBlockIntoDesignatedLocation(\n\t\t\t\t\t\t\t\t\t\t\t\t\tcreateBlock( block.name ),\n\t\t\t\t\t\t\t\t\t\t\t\t\trelativePosition\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\treturn;\n\t\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\t\t// Remove block.\n\t\t\t\t\t\t\t\t\t\t\tremoveBlock(\n\t\t\t\t\t\t\t\t\t\t\t\thookedBlockClientIds[\n\t\t\t\t\t\t\t\t\t\t\t\t\tblock.name\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\tfalse\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/>\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t} ) }\n\t\t\t\t\t\t</Fragment>\n\t\t\t\t\t);\n\t\t\t\t} ) }\n\t\t\t</PanelBody>\n\t\t</InspectorControls>\n\t);\n}\n\nexport default {\n\tedit: BlockHooksControlPure,\n\tattributeKeys: [ 'metadata' ],\n\thasSupport() {\n\t\treturn true;\n\t},\n};\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["_i18n","require","_element","_components","_blocks","_data","_components2","_store","_jsxRuntime","EMPTY_OBJECT","BlockHooksControlPure","name","clientId","metadata","ignoredHookedBlocks","blockTypes","useSelect","select","blocksStore","getBlockTypes","hookedBlocksForCurrentBlock","useMemo","filter","blockName","blockHooks","includes","hookedBlockClientIds","getBlocks","getBlockRootClientId","getGlobalBlockCount","blockEditorStore","rootClientId","_hookedBlockClientIds","reduce","clientIds","block","relativePosition","candidates","undefined","hookedBlock","find","candidate","Object","values","length","getBlockIndex","getBlockCount","insertBlock","removeBlock","useDispatch","groupedHookedBlocks","groups","namespace","split","push","insertBlockIntoDesignatedLocation","blockIndex","innerBlocksLength","jsx","InspectorControls","children","jsxs","PanelBody","className","title","__","initialOpen","keys","map","vendor","Fragment","checked","ToggleControl","__nextHasNoMarginBottom","label","onChange","createBlock","_default","exports","default","edit","attributeKeys","hasSupport"],"sources":["@wordpress/block-editor/src/hooks/block-hooks.js"],"sourcesContent":["/**\n * WordPress dependencies\n */\nimport { __ } from '@wordpress/i18n';\nimport { Fragment, useMemo } from '@wordpress/element';\nimport { PanelBody, ToggleControl } from '@wordpress/components';\nimport { createBlock, store as blocksStore } from '@wordpress/blocks';\nimport { useDispatch, useSelect } from '@wordpress/data';\n\n/**\n * Internal dependencies\n */\nimport { InspectorControls } from '../components';\nimport { store as blockEditorStore } from '../store';\n\nconst EMPTY_OBJECT = {};\n\nfunction BlockHooksControlPure( {\n\tname,\n\tclientId,\n\tmetadata: { ignoredHookedBlocks = [] } = {},\n} ) {\n\tconst blockTypes = useSelect(\n\t\t( select ) => select( blocksStore ).getBlockTypes(),\n\t\t[]\n\t);\n\n\t// A hooked block added via a filter will not be exposed through a block\n\t// type's `blockHooks` property; however, if the containing layout has been\n\t// modified, it will be present in the anchor block's `ignoredHookedBlocks`\n\t// metadata.\n\tconst hookedBlocksForCurrentBlock = useMemo(\n\t\t() =>\n\t\t\tblockTypes?.filter(\n\t\t\t\t( { name: blockName, blockHooks } ) =>\n\t\t\t\t\t( blockHooks && name in blockHooks ) ||\n\t\t\t\t\tignoredHookedBlocks.includes( blockName )\n\t\t\t),\n\t\t[ blockTypes, name, ignoredHookedBlocks ]\n\t);\n\n\tconst hookedBlockClientIds = useSelect(\n\t\t( select ) => {\n\t\t\tconst { getBlocks, getBlockRootClientId, getGlobalBlockCount } =\n\t\t\t\tselect( blockEditorStore );\n\n\t\t\tconst rootClientId = getBlockRootClientId( clientId );\n\t\t\tconst _hookedBlockClientIds = hookedBlocksForCurrentBlock.reduce(\n\t\t\t\t( clientIds, block ) => {\n\t\t\t\t\t// If the block doesn't exist anywhere in the block tree,\n\t\t\t\t\t// we know that we have to set the toggle to disabled.\n\t\t\t\t\tif ( getGlobalBlockCount( block.name ) === 0 ) {\n\t\t\t\t\t\treturn clientIds;\n\t\t\t\t\t}\n\n\t\t\t\t\tconst relativePosition = block?.blockHooks?.[ name ];\n\t\t\t\t\tlet candidates;\n\n\t\t\t\t\tswitch ( relativePosition ) {\n\t\t\t\t\t\tcase 'before':\n\t\t\t\t\t\tcase 'after':\n\t\t\t\t\t\t\t// Any of the current block's siblings (with the right block type) qualifies\n\t\t\t\t\t\t\t// as a hooked block (inserted `before` or `after` the current one), as the block\n\t\t\t\t\t\t\t// might've been automatically inserted and then moved around a bit by the user.\n\t\t\t\t\t\t\tcandidates = getBlocks( rootClientId );\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\tcase 'first_child':\n\t\t\t\t\t\tcase 'last_child':\n\t\t\t\t\t\t\t// Any of the current block's child blocks (with the right block type) qualifies\n\t\t\t\t\t\t\t// as a hooked first or last child block, as the block might've been automatically\n\t\t\t\t\t\t\t// inserted and then moved around a bit by the user.\n\t\t\t\t\t\t\tcandidates = getBlocks( clientId );\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\tcase undefined:\n\t\t\t\t\t\t\t// If we haven't found a blockHooks field with a relative position for the hooked\n\t\t\t\t\t\t\t// block, it means that it was added by a filter. In this case, we look for the block\n\t\t\t\t\t\t\t// both among the current block's siblings and its children.\n\t\t\t\t\t\t\tcandidates = [\n\t\t\t\t\t\t\t\t...getBlocks( rootClientId ),\n\t\t\t\t\t\t\t\t...getBlocks( clientId ),\n\t\t\t\t\t\t\t];\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\n\t\t\t\t\tconst hookedBlock = candidates?.find(\n\t\t\t\t\t\t( candidate ) => candidate.name === block.name\n\t\t\t\t\t);\n\n\t\t\t\t\t// If the block exists in the designated location, we consider it hooked\n\t\t\t\t\t// and show the toggle as enabled.\n\t\t\t\t\tif ( hookedBlock ) {\n\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t...clientIds,\n\t\t\t\t\t\t\t[ block.name ]: hookedBlock.clientId,\n\t\t\t\t\t\t};\n\t\t\t\t\t}\n\n\t\t\t\t\t// If no hooked block was found in any of its designated locations,\n\t\t\t\t\t// we set the toggle to disabled.\n\t\t\t\t\treturn clientIds;\n\t\t\t\t},\n\t\t\t\t{}\n\t\t\t);\n\n\t\t\tif ( Object.values( _hookedBlockClientIds ).length > 0 ) {\n\t\t\t\treturn _hookedBlockClientIds;\n\t\t\t}\n\n\t\t\treturn EMPTY_OBJECT;\n\t\t},\n\t\t[ hookedBlocksForCurrentBlock, name, clientId ]\n\t);\n\n\tconst { getBlockIndex, getBlockCount, getBlockRootClientId } =\n\t\tuseSelect( blockEditorStore );\n\tconst { insertBlock, removeBlock } = useDispatch( blockEditorStore );\n\n\tif ( ! hookedBlocksForCurrentBlock.length ) {\n\t\treturn null;\n\t}\n\n\t// Group by block namespace (i.e. prefix before the slash).\n\tconst groupedHookedBlocks = hookedBlocksForCurrentBlock.reduce(\n\t\t( groups, block ) => {\n\t\t\tconst [ namespace ] = block.name.split( '/' );\n\t\t\tif ( ! groups[ namespace ] ) {\n\t\t\t\tgroups[ namespace ] = [];\n\t\t\t}\n\t\t\tgroups[ namespace ].push( block );\n\t\t\treturn groups;\n\t\t},\n\t\t{}\n\t);\n\n\tconst insertBlockIntoDesignatedLocation = ( block, relativePosition ) => {\n\t\tconst blockIndex = getBlockIndex( clientId );\n\t\tconst innerBlocksLength = getBlockCount( clientId );\n\t\tconst rootClientId = getBlockRootClientId( clientId );\n\n\t\tswitch ( relativePosition ) {\n\t\t\tcase 'before':\n\t\t\tcase 'after':\n\t\t\t\tinsertBlock(\n\t\t\t\t\tblock,\n\t\t\t\t\trelativePosition === 'after' ? blockIndex + 1 : blockIndex,\n\t\t\t\t\trootClientId, // Insert as a child of the current block's parent\n\t\t\t\t\tfalse\n\t\t\t\t);\n\t\t\t\tbreak;\n\n\t\t\tcase 'first_child':\n\t\t\tcase 'last_child':\n\t\t\t\tinsertBlock(\n\t\t\t\t\tblock,\n\t\t\t\t\t// TODO: It'd be great if insertBlock() would accept negative indices for insertion.\n\t\t\t\t\trelativePosition === 'first_child' ? 0 : innerBlocksLength,\n\t\t\t\t\tclientId, // Insert as a child of the current block.\n\t\t\t\t\tfalse\n\t\t\t\t);\n\t\t\t\tbreak;\n\n\t\t\tcase undefined:\n\t\t\t\t// If we do not know the relative position, it is because the block was\n\t\t\t\t// added via a filter. In this case, we default to inserting it after the\n\t\t\t\t// current block.\n\t\t\t\tinsertBlock(\n\t\t\t\t\tblock,\n\t\t\t\t\tblockIndex + 1,\n\t\t\t\t\trootClientId, // Insert as a child of the current block's parent\n\t\t\t\t\tfalse\n\t\t\t\t);\n\t\t\t\tbreak;\n\t\t}\n\t};\n\n\treturn (\n\t\t<InspectorControls>\n\t\t\t<PanelBody\n\t\t\t\tclassName=\"block-editor-hooks__block-hooks\"\n\t\t\t\ttitle={ __( 'Plugins' ) }\n\t\t\t\tinitialOpen\n\t\t\t>\n\t\t\t\t<p className=\"block-editor-hooks__block-hooks-helptext\">\n\t\t\t\t\t{ __(\n\t\t\t\t\t\t'Manage the inclusion of blocks added automatically by plugins.'\n\t\t\t\t\t) }\n\t\t\t\t</p>\n\t\t\t\t{ Object.keys( groupedHookedBlocks ).map( ( vendor ) => {\n\t\t\t\t\treturn (\n\t\t\t\t\t\t<Fragment key={ vendor }>\n\t\t\t\t\t\t\t<h3>{ vendor }</h3>\n\t\t\t\t\t\t\t{ groupedHookedBlocks[ vendor ].map( ( block ) => {\n\t\t\t\t\t\t\t\tconst checked =\n\t\t\t\t\t\t\t\t\tblock.name in hookedBlockClientIds;\n\n\t\t\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t\t\t<ToggleControl\n\t\t\t\t\t\t\t\t\t\t__nextHasNoMarginBottom\n\t\t\t\t\t\t\t\t\t\tchecked={ checked }\n\t\t\t\t\t\t\t\t\t\tkey={ block.title }\n\t\t\t\t\t\t\t\t\t\tlabel={ block.title }\n\t\t\t\t\t\t\t\t\t\tonChange={ () => {\n\t\t\t\t\t\t\t\t\t\t\tif ( ! checked ) {\n\t\t\t\t\t\t\t\t\t\t\t\t// Create and insert block.\n\t\t\t\t\t\t\t\t\t\t\t\tconst relativePosition =\n\t\t\t\t\t\t\t\t\t\t\t\t\tblock.blockHooks[ name ];\n\t\t\t\t\t\t\t\t\t\t\t\tinsertBlockIntoDesignatedLocation(\n\t\t\t\t\t\t\t\t\t\t\t\t\tcreateBlock( block.name ),\n\t\t\t\t\t\t\t\t\t\t\t\t\trelativePosition\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\treturn;\n\t\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\t\t// Remove block.\n\t\t\t\t\t\t\t\t\t\t\tremoveBlock(\n\t\t\t\t\t\t\t\t\t\t\t\thookedBlockClientIds[\n\t\t\t\t\t\t\t\t\t\t\t\t\tblock.name\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\tfalse\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/>\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t} ) }\n\t\t\t\t\t\t</Fragment>\n\t\t\t\t\t);\n\t\t\t\t} ) }\n\t\t\t</PanelBody>\n\t\t</InspectorControls>\n\t);\n}\n\nexport default {\n\tedit: BlockHooksControlPure,\n\tattributeKeys: [ 'metadata' ],\n\thasSupport() {\n\t\treturn true;\n\t},\n};\n"],"mappings":"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","ignoreList":[]}
@@ -436,6 +436,16 @@ const getBlockStyles = exports.getBlockStyles = (0, _data.createSelector)((state
436
436
  function isZoomOutMode(state) {
437
437
  return state.editorMode === 'zoom-out';
438
438
  }
439
+
440
+ /**
441
+ * Retrieves the client ID of the block which contains the blocks
442
+ * acting as "sections" in the editor. This is typically the "main content"
443
+ * of the template/post.
444
+ *
445
+ * @param {Object} state Editor state.
446
+ *
447
+ * @return {string|undefined} The section root client ID or undefined if not set.
448
+ */
439
449
  function getSectionRootClientId(state) {
440
450
  return state.settings?.[_privateKeys.sectionRootClientIdKey];
441
451
  }