@wordpress/block-editor 14.3.2 → 14.3.4

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 (128) hide show
  1. package/README.md +42 -0
  2. package/build/components/block-heading-level-dropdown/index.js +3 -1
  3. package/build/components/block-heading-level-dropdown/index.js.map +1 -1
  4. package/build/components/block-list/block.js +27 -4
  5. package/build/components/block-list/block.js.map +1 -1
  6. package/build/components/block-list/use-block-props/use-focus-first-element.js +0 -1
  7. package/build/components/block-list/use-block-props/use-focus-first-element.js.map +1 -1
  8. package/build/components/block-list/zoom-out-separator.js +18 -1
  9. package/build/components/block-list/zoom-out-separator.js.map +1 -1
  10. package/build/components/block-switcher/utils.js +1 -1
  11. package/build/components/block-switcher/utils.js.map +1 -1
  12. package/build/components/block-variation-transforms/index.js +6 -3
  13. package/build/components/block-variation-transforms/index.js.map +1 -1
  14. package/build/components/media-placeholder/index.js +17 -19
  15. package/build/components/media-placeholder/index.js.map +1 -1
  16. package/build/components/rich-text/event-listeners/paste-handler.js +2 -13
  17. package/build/components/rich-text/event-listeners/paste-handler.js.map +1 -1
  18. package/build/components/rich-text/index.js +35 -25
  19. package/build/components/rich-text/index.js.map +1 -1
  20. package/build/components/writing-flow/index.js +1 -2
  21. package/build/components/writing-flow/index.js.map +1 -1
  22. package/build/components/writing-flow/use-arrow-nav.js +1 -4
  23. package/build/components/writing-flow/use-arrow-nav.js.map +1 -1
  24. package/build/components/writing-flow/use-input.js +1 -31
  25. package/build/components/writing-flow/use-input.js.map +1 -1
  26. package/build/components/writing-flow/use-select-all.js +1 -14
  27. package/build/components/writing-flow/use-select-all.js.map +1 -1
  28. package/build/components/writing-flow/use-selection-observer.js +2 -6
  29. package/build/components/writing-flow/use-selection-observer.js.map +1 -1
  30. package/build/components/writing-flow/utils.js +0 -27
  31. package/build/components/writing-flow/utils.js.map +1 -1
  32. package/build/hooks/block-bindings.js +6 -13
  33. package/build/hooks/block-bindings.js.map +1 -1
  34. package/build/hooks/layout.js +12 -8
  35. package/build/hooks/layout.js.map +1 -1
  36. package/build/hooks/use-bindings-attributes.js +24 -29
  37. package/build/hooks/use-bindings-attributes.js.map +1 -1
  38. package/build/private-apis.js +0 -2
  39. package/build/private-apis.js.map +1 -1
  40. package/build/store/selectors.js +6 -3
  41. package/build/store/selectors.js.map +1 -1
  42. package/build/utils/block-bindings.js +48 -0
  43. package/build/utils/block-bindings.js.map +1 -1
  44. package/build/utils/index.js +7 -0
  45. package/build/utils/index.js.map +1 -1
  46. package/build-module/components/block-heading-level-dropdown/index.js +3 -1
  47. package/build-module/components/block-heading-level-dropdown/index.js.map +1 -1
  48. package/build-module/components/block-list/block.js +28 -7
  49. package/build-module/components/block-list/block.js.map +1 -1
  50. package/build-module/components/block-list/use-block-props/use-focus-first-element.js +0 -1
  51. package/build-module/components/block-list/use-block-props/use-focus-first-element.js.map +1 -1
  52. package/build-module/components/block-list/zoom-out-separator.js +18 -1
  53. package/build-module/components/block-list/zoom-out-separator.js.map +1 -1
  54. package/build-module/components/block-switcher/utils.js +1 -1
  55. package/build-module/components/block-switcher/utils.js.map +1 -1
  56. package/build-module/components/block-variation-transforms/index.js +6 -3
  57. package/build-module/components/block-variation-transforms/index.js.map +1 -1
  58. package/build-module/components/media-placeholder/index.js +18 -20
  59. package/build-module/components/media-placeholder/index.js.map +1 -1
  60. package/build-module/components/rich-text/event-listeners/paste-handler.js +2 -13
  61. package/build-module/components/rich-text/event-listeners/paste-handler.js.map +1 -1
  62. package/build-module/components/rich-text/index.js +35 -25
  63. package/build-module/components/rich-text/index.js.map +1 -1
  64. package/build-module/components/writing-flow/index.js +1 -2
  65. package/build-module/components/writing-flow/index.js.map +1 -1
  66. package/build-module/components/writing-flow/use-arrow-nav.js +1 -4
  67. package/build-module/components/writing-flow/use-arrow-nav.js.map +1 -1
  68. package/build-module/components/writing-flow/use-input.js +1 -31
  69. package/build-module/components/writing-flow/use-input.js.map +1 -1
  70. package/build-module/components/writing-flow/use-select-all.js +1 -14
  71. package/build-module/components/writing-flow/use-select-all.js.map +1 -1
  72. package/build-module/components/writing-flow/use-selection-observer.js +2 -6
  73. package/build-module/components/writing-flow/use-selection-observer.js.map +1 -1
  74. package/build-module/components/writing-flow/utils.js +0 -26
  75. package/build-module/components/writing-flow/utils.js.map +1 -1
  76. package/build-module/hooks/block-bindings.js +6 -13
  77. package/build-module/hooks/block-bindings.js.map +1 -1
  78. package/build-module/hooks/layout.js +13 -9
  79. package/build-module/hooks/layout.js.map +1 -1
  80. package/build-module/hooks/use-bindings-attributes.js +24 -29
  81. package/build-module/hooks/use-bindings-attributes.js.map +1 -1
  82. package/build-module/private-apis.js +0 -2
  83. package/build-module/private-apis.js.map +1 -1
  84. package/build-module/store/selectors.js +6 -3
  85. package/build-module/store/selectors.js.map +1 -1
  86. package/build-module/utils/block-bindings.js +48 -0
  87. package/build-module/utils/block-bindings.js.map +1 -1
  88. package/build-module/utils/index.js +1 -0
  89. package/build-module/utils/index.js.map +1 -1
  90. package/build-style/content-rtl.css +12 -14
  91. package/build-style/content.css +12 -14
  92. package/build-style/style-rtl.css +4 -0
  93. package/build-style/style.css +4 -0
  94. package/package.json +20 -20
  95. package/src/components/block-heading-level-dropdown/index.js +7 -1
  96. package/src/components/block-list/block.js +47 -11
  97. package/src/components/block-list/content.scss +12 -0
  98. package/src/components/block-list/use-block-props/use-focus-first-element.js +0 -1
  99. package/src/components/block-list/zoom-out-separator.js +14 -1
  100. package/src/components/block-switcher/test/use-transformed.patterns.js +3 -3
  101. package/src/components/block-switcher/test/utils.js +3 -3
  102. package/src/components/block-switcher/utils.js +1 -1
  103. package/src/components/block-toolbar/style.scss +7 -0
  104. package/src/components/block-variation-transforms/index.js +6 -7
  105. package/src/components/media-placeholder/content.scss +3 -19
  106. package/src/components/media-placeholder/index.js +17 -17
  107. package/src/components/rich-text/event-listeners/paste-handler.js +2 -7
  108. package/src/components/rich-text/index.js +37 -33
  109. package/src/components/writing-flow/index.js +0 -2
  110. package/src/components/writing-flow/use-arrow-nav.js +2 -9
  111. package/src/components/writing-flow/use-input.js +1 -36
  112. package/src/components/writing-flow/use-select-all.js +1 -18
  113. package/src/components/writing-flow/use-selection-observer.js +3 -14
  114. package/src/components/writing-flow/utils.js +0 -30
  115. package/src/hooks/block-bindings.js +9 -10
  116. package/src/hooks/layout.js +17 -12
  117. package/src/hooks/use-bindings-attributes.js +74 -76
  118. package/src/private-apis.js +0 -2
  119. package/src/store/selectors.js +6 -6
  120. package/src/store/test/private-selectors.js +2 -2
  121. package/src/store/test/selectors.js +10 -6
  122. package/src/utils/block-bindings.js +47 -0
  123. package/src/utils/index.js +1 -0
  124. package/build/components/writing-flow/use-event-redirect.js +0 -66
  125. package/build/components/writing-flow/use-event-redirect.js.map +0 -1
  126. package/build-module/components/writing-flow/use-event-redirect.js +0 -60
  127. package/build-module/components/writing-flow/use-event-redirect.js.map +0 -1
  128. package/src/components/writing-flow/use-event-redirect.js +0 -72
@@ -1 +1 @@
1
- {"version":3,"names":["useSelect","useDispatch","useRefEffect","create","isSelectionForward","store","blockEditorStore","getBlockClientId","extractSelectionStartNode","selection","anchorNode","anchorOffset","nodeType","TEXT_NODE","childNodes","extractSelectionEndNode","focusNode","focusOffset","length","_focusNode$previousSi","previousSibling","parentElement","findDepth","a","b","depth","setContentEditableWrapper","node","value","contentEditable","String","focus","getRichTextElement","element","ELEMENT_NODE","closest","useSelectionObserver","multiSelect","selectBlock","selectionChange","getBlockParents","getBlockSelectionStart","isMultiSelecting","getSelectedBlockClientId","ownerDocument","defaultView","onSelectionChange","event","getSelection","rangeCount","startNode","endNode","contains","isClickShift","shiftKey","type","isCollapsed","startClientId","endClientId","selectedClientId","clickedClientId","target","focusNodeIsNonSelectable","undefined","isSingularSelection","startPath","endPath","richTextElementStart","richTextElementEnd","_richTextDataStart$st","_richTextDataEnd$star","range","getRangeAt","richTextDataStart","__unstableIsEditableTree","richTextDataEnd","startOffset","start","end","endOffset","clientId","attributeKey","dataset","wpBlockAttributeKey","offset","addEventListener","removeEventListener"],"sources":["@wordpress/block-editor/src/components/writing-flow/use-selection-observer.js"],"sourcesContent":["/**\n * WordPress dependencies\n */\nimport { useSelect, useDispatch } from '@wordpress/data';\nimport { useRefEffect } from '@wordpress/compose';\nimport { create } from '@wordpress/rich-text';\nimport { isSelectionForward } from '@wordpress/dom';\n\n/**\n * Internal dependencies\n */\nimport { store as blockEditorStore } from '../../store';\nimport { getBlockClientId } from '../../utils/dom';\n\n/**\n * Extract the selection start node from the selection. When the anchor node is\n * not a text node, the selection offset is the index of a child node.\n *\n * @param {Selection} selection The selection.\n *\n * @return {Element} The selection start node.\n */\nfunction extractSelectionStartNode( selection ) {\n\tconst { anchorNode, anchorOffset } = selection;\n\n\tif ( anchorNode.nodeType === anchorNode.TEXT_NODE ) {\n\t\treturn anchorNode;\n\t}\n\n\tif ( anchorOffset === 0 ) {\n\t\treturn anchorNode;\n\t}\n\n\treturn anchorNode.childNodes[ anchorOffset - 1 ];\n}\n\n/**\n * Extract the selection end node from the selection. When the focus node is not\n * a text node, the selection offset is the index of a child node. The selection\n * reaches up to but excluding that child node.\n *\n * @param {Selection} selection The selection.\n *\n * @return {Element} The selection start node.\n */\nfunction extractSelectionEndNode( selection ) {\n\tconst { focusNode, focusOffset } = selection;\n\n\tif ( focusNode.nodeType === focusNode.TEXT_NODE ) {\n\t\treturn focusNode;\n\t}\n\n\tif ( focusOffset === focusNode.childNodes.length ) {\n\t\treturn focusNode;\n\t}\n\n\t// When the selection is forward (the selection ends with the focus node),\n\t// the selection may extend into the next element with an offset of 0. This\n\t// may trigger multi selection even though the selection does not visually\n\t// end in the next block.\n\tif ( focusOffset === 0 && isSelectionForward( selection ) ) {\n\t\treturn focusNode.previousSibling ?? focusNode.parentElement;\n\t}\n\n\treturn focusNode.childNodes[ focusOffset ];\n}\n\nfunction findDepth( a, b ) {\n\tlet depth = 0;\n\n\twhile ( a[ depth ] === b[ depth ] ) {\n\t\tdepth++;\n\t}\n\n\treturn depth;\n}\n\n/**\n * Sets the `contenteditable` wrapper element to `value`.\n *\n * @param {HTMLElement} node Block element.\n * @param {boolean} value `contentEditable` value (true or false)\n */\nfunction setContentEditableWrapper( node, value ) {\n\t// Since we are calling this on every selection change, check if the value\n\t// needs to be updated first because it trigger the browser to recalculate\n\t// style.\n\tif ( node.contentEditable !== String( value ) ) {\n\t\tnode.contentEditable = value;\n\n\t\t// Firefox doesn't automatically move focus.\n\t\tif ( value ) {\n\t\t\tnode.focus();\n\t\t}\n\t}\n}\n\nfunction getRichTextElement( node ) {\n\tconst element =\n\t\tnode.nodeType === node.ELEMENT_NODE ? node : node.parentElement;\n\treturn element?.closest( '[data-wp-block-attribute-key]' );\n}\n\n/**\n * Sets a multi-selection based on the native selection across blocks.\n */\nexport default function useSelectionObserver() {\n\tconst { multiSelect, selectBlock, selectionChange } =\n\t\tuseDispatch( blockEditorStore );\n\tconst {\n\t\tgetBlockParents,\n\t\tgetBlockSelectionStart,\n\t\tisMultiSelecting,\n\t\tgetSelectedBlockClientId,\n\t} = useSelect( blockEditorStore );\n\treturn useRefEffect(\n\t\t( node ) => {\n\t\t\tconst { ownerDocument } = node;\n\t\t\tconst { defaultView } = ownerDocument;\n\n\t\t\tfunction onSelectionChange( event ) {\n\t\t\t\tconst selection = defaultView.getSelection();\n\n\t\t\t\tif ( ! selection.rangeCount ) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tconst startNode = extractSelectionStartNode( selection );\n\t\t\t\tconst endNode = extractSelectionEndNode( selection );\n\n\t\t\t\tif (\n\t\t\t\t\t! node.contains( startNode ) ||\n\t\t\t\t\t! node.contains( endNode )\n\t\t\t\t) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\t// If selection is collapsed and we haven't used `shift+click`,\n\t\t\t\t// end multi selection and disable the contentEditable wrapper.\n\t\t\t\t// We have to check about `shift+click` case because elements\n\t\t\t\t// that don't support text selection might be involved, and we might\n\t\t\t\t// update the clientIds to multi-select blocks.\n\t\t\t\t// For now we check if the event is a `mouse` event.\n\t\t\t\tconst isClickShift = event.shiftKey && event.type === 'mouseup';\n\t\t\t\tif ( selection.isCollapsed && ! isClickShift ) {\n\t\t\t\t\tif (\n\t\t\t\t\t\tnode.contentEditable === 'true' &&\n\t\t\t\t\t\t! isMultiSelecting()\n\t\t\t\t\t) {\n\t\t\t\t\t\tsetContentEditableWrapper( node, false );\n\t\t\t\t\t\tlet element =\n\t\t\t\t\t\t\tstartNode.nodeType === startNode.ELEMENT_NODE\n\t\t\t\t\t\t\t\t? startNode\n\t\t\t\t\t\t\t\t: startNode.parentElement;\n\t\t\t\t\t\telement = element?.closest( '[contenteditable]' );\n\t\t\t\t\t\telement?.focus();\n\t\t\t\t\t}\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tlet startClientId = getBlockClientId( startNode );\n\t\t\t\tlet endClientId = getBlockClientId( endNode );\n\n\t\t\t\t// If the selection has changed and we had pressed `shift+click`,\n\t\t\t\t// we need to check if in an element that doesn't support\n\t\t\t\t// text selection has been clicked.\n\t\t\t\tif ( isClickShift ) {\n\t\t\t\t\tconst selectedClientId = getBlockSelectionStart();\n\t\t\t\t\tconst clickedClientId = getBlockClientId( event.target );\n\t\t\t\t\t// `endClientId` is not defined if we end the selection by clicking a non-selectable block.\n\t\t\t\t\t// We need to check if there was already a selection with a non-selectable focusNode.\n\t\t\t\t\tconst focusNodeIsNonSelectable =\n\t\t\t\t\t\tclickedClientId !== endClientId;\n\t\t\t\t\tif (\n\t\t\t\t\t\t( startClientId === endClientId &&\n\t\t\t\t\t\t\tselection.isCollapsed ) ||\n\t\t\t\t\t\t! endClientId ||\n\t\t\t\t\t\tfocusNodeIsNonSelectable\n\t\t\t\t\t) {\n\t\t\t\t\t\tendClientId = clickedClientId;\n\t\t\t\t\t}\n\t\t\t\t\t// Handle the case when we have a non-selectable block\n\t\t\t\t\t// selected and click another one.\n\t\t\t\t\tif ( startClientId !== selectedClientId ) {\n\t\t\t\t\t\tstartClientId = selectedClientId;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// If the selection did not involve a block, return.\n\t\t\t\tif (\n\t\t\t\t\tstartClientId === undefined &&\n\t\t\t\t\tendClientId === undefined\n\t\t\t\t) {\n\t\t\t\t\tsetContentEditableWrapper( node, false );\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tsetContentEditableWrapper(\n\t\t\t\t\tnode,\n\t\t\t\t\t!! ( startClientId && endClientId )\n\t\t\t\t);\n\n\t\t\t\tconst isSingularSelection = startClientId === endClientId;\n\t\t\t\tif ( isSingularSelection ) {\n\t\t\t\t\tif ( ! isMultiSelecting() ) {\n\t\t\t\t\t\tif ( getSelectedBlockClientId() !== startClientId ) {\n\t\t\t\t\t\t\tselectBlock( startClientId );\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\tmultiSelect( startClientId, startClientId );\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tconst startPath = [\n\t\t\t\t\t\t...getBlockParents( startClientId ),\n\t\t\t\t\t\tstartClientId,\n\t\t\t\t\t];\n\t\t\t\t\tconst endPath = [\n\t\t\t\t\t\t...getBlockParents( endClientId ),\n\t\t\t\t\t\tendClientId,\n\t\t\t\t\t];\n\t\t\t\t\tconst depth = findDepth( startPath, endPath );\n\n\t\t\t\t\tif (\n\t\t\t\t\t\tstartPath[ depth ] !== startClientId ||\n\t\t\t\t\t\tendPath[ depth ] !== endClientId\n\t\t\t\t\t) {\n\t\t\t\t\t\tmultiSelect( startPath[ depth ], endPath[ depth ] );\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\n\t\t\t\t\tconst richTextElementStart =\n\t\t\t\t\t\tgetRichTextElement( startNode );\n\t\t\t\t\tconst richTextElementEnd = getRichTextElement( endNode );\n\n\t\t\t\t\tif ( richTextElementStart && richTextElementEnd ) {\n\t\t\t\t\t\tconst range = selection.getRangeAt( 0 );\n\t\t\t\t\t\tconst richTextDataStart = create( {\n\t\t\t\t\t\t\telement: richTextElementStart,\n\t\t\t\t\t\t\trange,\n\t\t\t\t\t\t\t__unstableIsEditableTree: true,\n\t\t\t\t\t\t} );\n\t\t\t\t\t\tconst richTextDataEnd = create( {\n\t\t\t\t\t\t\telement: richTextElementEnd,\n\t\t\t\t\t\t\trange,\n\t\t\t\t\t\t\t__unstableIsEditableTree: true,\n\t\t\t\t\t\t} );\n\n\t\t\t\t\t\tconst startOffset =\n\t\t\t\t\t\t\trichTextDataStart.start ?? richTextDataStart.end;\n\t\t\t\t\t\tconst endOffset =\n\t\t\t\t\t\t\trichTextDataEnd.start ?? richTextDataEnd.end;\n\t\t\t\t\t\tselectionChange( {\n\t\t\t\t\t\t\tstart: {\n\t\t\t\t\t\t\t\tclientId: startClientId,\n\t\t\t\t\t\t\t\tattributeKey:\n\t\t\t\t\t\t\t\t\trichTextElementStart.dataset\n\t\t\t\t\t\t\t\t\t\t.wpBlockAttributeKey,\n\t\t\t\t\t\t\t\toffset: startOffset,\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tend: {\n\t\t\t\t\t\t\t\tclientId: endClientId,\n\t\t\t\t\t\t\t\tattributeKey:\n\t\t\t\t\t\t\t\t\trichTextElementEnd.dataset\n\t\t\t\t\t\t\t\t\t\t.wpBlockAttributeKey,\n\t\t\t\t\t\t\t\toffset: endOffset,\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t} );\n\t\t\t\t\t} else {\n\t\t\t\t\t\tmultiSelect( startClientId, endClientId );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\townerDocument.addEventListener(\n\t\t\t\t'selectionchange',\n\t\t\t\tonSelectionChange\n\t\t\t);\n\t\t\tdefaultView.addEventListener( 'mouseup', onSelectionChange );\n\t\t\treturn () => {\n\t\t\t\townerDocument.removeEventListener(\n\t\t\t\t\t'selectionchange',\n\t\t\t\t\tonSelectionChange\n\t\t\t\t);\n\t\t\t\tdefaultView.removeEventListener( 'mouseup', onSelectionChange );\n\t\t\t};\n\t\t},\n\t\t[ multiSelect, selectBlock, selectionChange, getBlockParents ]\n\t);\n}\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["useSelect","useDispatch","useRefEffect","create","isSelectionForward","store","blockEditorStore","getBlockClientId","extractSelectionStartNode","selection","anchorNode","anchorOffset","nodeType","TEXT_NODE","childNodes","extractSelectionEndNode","focusNode","focusOffset","length","_focusNode$previousSi","previousSibling","parentElement","findDepth","a","b","depth","setContentEditableWrapper","node","value","contentEditable","String","focus","getRichTextElement","element","ELEMENT_NODE","closest","useSelectionObserver","multiSelect","selectBlock","selectionChange","getBlockParents","getBlockSelectionStart","isMultiSelecting","ownerDocument","defaultView","onSelectionChange","event","getSelection","rangeCount","startNode","endNode","contains","isClickShift","shiftKey","type","isCollapsed","startClientId","endClientId","selectedClientId","clickedClientId","target","focusNodeIsNonSelectable","undefined","isSingularSelection","startPath","endPath","richTextElementStart","richTextElementEnd","_richTextDataStart$st","_richTextDataEnd$star","range","getRangeAt","richTextDataStart","__unstableIsEditableTree","richTextDataEnd","startOffset","start","end","endOffset","clientId","attributeKey","dataset","wpBlockAttributeKey","offset","addEventListener","removeEventListener"],"sources":["@wordpress/block-editor/src/components/writing-flow/use-selection-observer.js"],"sourcesContent":["/**\n * WordPress dependencies\n */\nimport { useSelect, useDispatch } from '@wordpress/data';\nimport { useRefEffect } from '@wordpress/compose';\nimport { create } from '@wordpress/rich-text';\nimport { isSelectionForward } from '@wordpress/dom';\n\n/**\n * Internal dependencies\n */\nimport { store as blockEditorStore } from '../../store';\nimport { getBlockClientId } from '../../utils/dom';\n\n/**\n * Extract the selection start node from the selection. When the anchor node is\n * not a text node, the selection offset is the index of a child node.\n *\n * @param {Selection} selection The selection.\n *\n * @return {Element} The selection start node.\n */\nfunction extractSelectionStartNode( selection ) {\n\tconst { anchorNode, anchorOffset } = selection;\n\n\tif ( anchorNode.nodeType === anchorNode.TEXT_NODE ) {\n\t\treturn anchorNode;\n\t}\n\n\tif ( anchorOffset === 0 ) {\n\t\treturn anchorNode;\n\t}\n\n\treturn anchorNode.childNodes[ anchorOffset - 1 ];\n}\n\n/**\n * Extract the selection end node from the selection. When the focus node is not\n * a text node, the selection offset is the index of a child node. The selection\n * reaches up to but excluding that child node.\n *\n * @param {Selection} selection The selection.\n *\n * @return {Element} The selection start node.\n */\nfunction extractSelectionEndNode( selection ) {\n\tconst { focusNode, focusOffset } = selection;\n\n\tif ( focusNode.nodeType === focusNode.TEXT_NODE ) {\n\t\treturn focusNode;\n\t}\n\n\tif ( focusOffset === focusNode.childNodes.length ) {\n\t\treturn focusNode;\n\t}\n\n\t// When the selection is forward (the selection ends with the focus node),\n\t// the selection may extend into the next element with an offset of 0. This\n\t// may trigger multi selection even though the selection does not visually\n\t// end in the next block.\n\tif ( focusOffset === 0 && isSelectionForward( selection ) ) {\n\t\treturn focusNode.previousSibling ?? focusNode.parentElement;\n\t}\n\n\treturn focusNode.childNodes[ focusOffset ];\n}\n\nfunction findDepth( a, b ) {\n\tlet depth = 0;\n\n\twhile ( a[ depth ] === b[ depth ] ) {\n\t\tdepth++;\n\t}\n\n\treturn depth;\n}\n\n/**\n * Sets the `contenteditable` wrapper element to `value`.\n *\n * @param {HTMLElement} node Block element.\n * @param {boolean} value `contentEditable` value (true or false)\n */\nfunction setContentEditableWrapper( node, value ) {\n\t// Since we are calling this on every selection change, check if the value\n\t// needs to be updated first because it trigger the browser to recalculate\n\t// style.\n\tif ( node.contentEditable !== String( value ) ) {\n\t\tnode.contentEditable = value;\n\n\t\t// Firefox doesn't automatically move focus.\n\t\tif ( value ) {\n\t\t\tnode.focus();\n\t\t}\n\t}\n}\n\nfunction getRichTextElement( node ) {\n\tconst element =\n\t\tnode.nodeType === node.ELEMENT_NODE ? node : node.parentElement;\n\treturn element?.closest( '[data-wp-block-attribute-key]' );\n}\n\n/**\n * Sets a multi-selection based on the native selection across blocks.\n */\nexport default function useSelectionObserver() {\n\tconst { multiSelect, selectBlock, selectionChange } =\n\t\tuseDispatch( blockEditorStore );\n\tconst { getBlockParents, getBlockSelectionStart, isMultiSelecting } =\n\t\tuseSelect( blockEditorStore );\n\treturn useRefEffect(\n\t\t( node ) => {\n\t\t\tconst { ownerDocument } = node;\n\t\t\tconst { defaultView } = ownerDocument;\n\n\t\t\tfunction onSelectionChange( event ) {\n\t\t\t\tconst selection = defaultView.getSelection();\n\n\t\t\t\tif ( ! selection.rangeCount ) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tconst startNode = extractSelectionStartNode( selection );\n\t\t\t\tconst endNode = extractSelectionEndNode( selection );\n\n\t\t\t\tif (\n\t\t\t\t\t! node.contains( startNode ) ||\n\t\t\t\t\t! node.contains( endNode )\n\t\t\t\t) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\t// If selection is collapsed and we haven't used `shift+click`,\n\t\t\t\t// end multi selection and disable the contentEditable wrapper.\n\t\t\t\t// We have to check about `shift+click` case because elements\n\t\t\t\t// that don't support text selection might be involved, and we might\n\t\t\t\t// update the clientIds to multi-select blocks.\n\t\t\t\t// For now we check if the event is a `mouse` event.\n\t\t\t\tconst isClickShift = event.shiftKey && event.type === 'mouseup';\n\t\t\t\tif ( selection.isCollapsed && ! isClickShift ) {\n\t\t\t\t\tif (\n\t\t\t\t\t\tnode.contentEditable === 'true' &&\n\t\t\t\t\t\t! isMultiSelecting()\n\t\t\t\t\t) {\n\t\t\t\t\t\tsetContentEditableWrapper( node, false );\n\t\t\t\t\t\tlet element =\n\t\t\t\t\t\t\tstartNode.nodeType === startNode.ELEMENT_NODE\n\t\t\t\t\t\t\t\t? startNode\n\t\t\t\t\t\t\t\t: startNode.parentElement;\n\t\t\t\t\t\telement = element?.closest( '[contenteditable]' );\n\t\t\t\t\t\telement?.focus();\n\t\t\t\t\t}\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tlet startClientId = getBlockClientId( startNode );\n\t\t\t\tlet endClientId = getBlockClientId( endNode );\n\n\t\t\t\t// If the selection has changed and we had pressed `shift+click`,\n\t\t\t\t// we need to check if in an element that doesn't support\n\t\t\t\t// text selection has been clicked.\n\t\t\t\tif ( isClickShift ) {\n\t\t\t\t\tconst selectedClientId = getBlockSelectionStart();\n\t\t\t\t\tconst clickedClientId = getBlockClientId( event.target );\n\t\t\t\t\t// `endClientId` is not defined if we end the selection by clicking a non-selectable block.\n\t\t\t\t\t// We need to check if there was already a selection with a non-selectable focusNode.\n\t\t\t\t\tconst focusNodeIsNonSelectable =\n\t\t\t\t\t\tclickedClientId !== endClientId;\n\t\t\t\t\tif (\n\t\t\t\t\t\t( startClientId === endClientId &&\n\t\t\t\t\t\t\tselection.isCollapsed ) ||\n\t\t\t\t\t\t! endClientId ||\n\t\t\t\t\t\tfocusNodeIsNonSelectable\n\t\t\t\t\t) {\n\t\t\t\t\t\tendClientId = clickedClientId;\n\t\t\t\t\t}\n\t\t\t\t\t// Handle the case when we have a non-selectable block\n\t\t\t\t\t// selected and click another one.\n\t\t\t\t\tif ( startClientId !== selectedClientId ) {\n\t\t\t\t\t\tstartClientId = selectedClientId;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// If the selection did not involve a block, return.\n\t\t\t\tif (\n\t\t\t\t\tstartClientId === undefined &&\n\t\t\t\t\tendClientId === undefined\n\t\t\t\t) {\n\t\t\t\t\tsetContentEditableWrapper( node, false );\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tconst isSingularSelection = startClientId === endClientId;\n\t\t\t\tif ( isSingularSelection ) {\n\t\t\t\t\tif ( ! isMultiSelecting() ) {\n\t\t\t\t\t\tselectBlock( startClientId );\n\t\t\t\t\t} else {\n\t\t\t\t\t\tmultiSelect( startClientId, startClientId );\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tconst startPath = [\n\t\t\t\t\t\t...getBlockParents( startClientId ),\n\t\t\t\t\t\tstartClientId,\n\t\t\t\t\t];\n\t\t\t\t\tconst endPath = [\n\t\t\t\t\t\t...getBlockParents( endClientId ),\n\t\t\t\t\t\tendClientId,\n\t\t\t\t\t];\n\t\t\t\t\tconst depth = findDepth( startPath, endPath );\n\n\t\t\t\t\tif (\n\t\t\t\t\t\tstartPath[ depth ] !== startClientId ||\n\t\t\t\t\t\tendPath[ depth ] !== endClientId\n\t\t\t\t\t) {\n\t\t\t\t\t\tmultiSelect( startPath[ depth ], endPath[ depth ] );\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\n\t\t\t\t\tconst richTextElementStart =\n\t\t\t\t\t\tgetRichTextElement( startNode );\n\t\t\t\t\tconst richTextElementEnd = getRichTextElement( endNode );\n\n\t\t\t\t\tif ( richTextElementStart && richTextElementEnd ) {\n\t\t\t\t\t\tconst range = selection.getRangeAt( 0 );\n\t\t\t\t\t\tconst richTextDataStart = create( {\n\t\t\t\t\t\t\telement: richTextElementStart,\n\t\t\t\t\t\t\trange,\n\t\t\t\t\t\t\t__unstableIsEditableTree: true,\n\t\t\t\t\t\t} );\n\t\t\t\t\t\tconst richTextDataEnd = create( {\n\t\t\t\t\t\t\telement: richTextElementEnd,\n\t\t\t\t\t\t\trange,\n\t\t\t\t\t\t\t__unstableIsEditableTree: true,\n\t\t\t\t\t\t} );\n\n\t\t\t\t\t\tconst startOffset =\n\t\t\t\t\t\t\trichTextDataStart.start ?? richTextDataStart.end;\n\t\t\t\t\t\tconst endOffset =\n\t\t\t\t\t\t\trichTextDataEnd.start ?? richTextDataEnd.end;\n\t\t\t\t\t\tselectionChange( {\n\t\t\t\t\t\t\tstart: {\n\t\t\t\t\t\t\t\tclientId: startClientId,\n\t\t\t\t\t\t\t\tattributeKey:\n\t\t\t\t\t\t\t\t\trichTextElementStart.dataset\n\t\t\t\t\t\t\t\t\t\t.wpBlockAttributeKey,\n\t\t\t\t\t\t\t\toffset: startOffset,\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tend: {\n\t\t\t\t\t\t\t\tclientId: endClientId,\n\t\t\t\t\t\t\t\tattributeKey:\n\t\t\t\t\t\t\t\t\trichTextElementEnd.dataset\n\t\t\t\t\t\t\t\t\t\t.wpBlockAttributeKey,\n\t\t\t\t\t\t\t\toffset: endOffset,\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t} );\n\t\t\t\t\t} else {\n\t\t\t\t\t\tmultiSelect( startClientId, endClientId );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\townerDocument.addEventListener(\n\t\t\t\t'selectionchange',\n\t\t\t\tonSelectionChange\n\t\t\t);\n\t\t\tdefaultView.addEventListener( 'mouseup', onSelectionChange );\n\t\t\treturn () => {\n\t\t\t\townerDocument.removeEventListener(\n\t\t\t\t\t'selectionchange',\n\t\t\t\t\tonSelectionChange\n\t\t\t\t);\n\t\t\t\tdefaultView.removeEventListener( 'mouseup', onSelectionChange );\n\t\t\t};\n\t\t},\n\t\t[ multiSelect, selectBlock, selectionChange, getBlockParents ]\n\t);\n}\n"],"mappings":"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","ignoreList":[]}
@@ -91,30 +91,4 @@ function toPlainText(html) {
91
91
  // Merge any consecutive line breaks
92
92
  return plainText.replace(/\n\n+/g, '\n\n');
93
93
  }
94
-
95
- /**
96
- * Gets the current content editable root element based on the selection.
97
- * @param {Document} ownerDocument
98
- * @return {Element|undefined} The content editable root element.
99
- */
100
- export function getSelectionRoot(ownerDocument) {
101
- const {
102
- defaultView
103
- } = ownerDocument;
104
- const {
105
- anchorNode,
106
- focusNode
107
- } = defaultView.getSelection();
108
- if (!anchorNode || !focusNode) {
109
- return;
110
- }
111
- const anchorElement = (anchorNode.nodeType === anchorNode.ELEMENT_NODE ? anchorNode : anchorNode.parentElement).closest('[contenteditable]');
112
- if (!anchorElement) {
113
- return;
114
- }
115
- if (!anchorElement.contains(focusNode)) {
116
- return;
117
- }
118
- return anchorElement;
119
- }
120
94
  //# sourceMappingURL=utils.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["__unstableStripHTML","stripHTML","serialize","createBlock","pasteHandler","findTransform","getBlockTransforms","store","blocksStore","getPasteEventData","blockEditorStore","requiresWrapperOnCopy","Symbol","setClipboardBlocks","event","blocks","registry","_blocks","firstBlock","firstBlockType","select","getBlockType","name","getBlockRootClientId","getBlockName","getBlockAttributes","wrapperBlockClientId","clientId","wrapperBlockName","serialized","clipboardData","setData","toPlainText","getPasteBlocks","canUserUseUnfilteredHTML","plainText","html","files","length","fromTransforms","reduce","accumulator","file","transformation","transform","type","isMatch","push","flat","HTML","mode","replace","trim","getSelectionRoot","ownerDocument","defaultView","anchorNode","focusNode","getSelection","anchorElement","nodeType","ELEMENT_NODE","parentElement","closest","contains"],"sources":["@wordpress/block-editor/src/components/writing-flow/utils.js"],"sourcesContent":["/**\n * WordPress dependencies\n */\nimport { __unstableStripHTML as stripHTML } from '@wordpress/dom';\nimport {\n\tserialize,\n\tcreateBlock,\n\tpasteHandler,\n\tfindTransform,\n\tgetBlockTransforms,\n\tstore as blocksStore,\n} from '@wordpress/blocks';\n\n/**\n * Internal dependencies\n */\nimport { getPasteEventData } from '../../utils/pasting';\nimport { store as blockEditorStore } from '../../store';\n\nexport const requiresWrapperOnCopy = Symbol( 'requiresWrapperOnCopy' );\n\n/**\n * Sets the clipboard data for the provided blocks, with both HTML and plain\n * text representations.\n *\n * @param {ClipboardEvent} event Clipboard event.\n * @param {WPBlock[]} blocks Blocks to set as clipboard data.\n * @param {Object} registry The registry to select from.\n */\nexport function setClipboardBlocks( event, blocks, registry ) {\n\tlet _blocks = blocks;\n\n\tconst [ firstBlock ] = blocks;\n\n\tif ( firstBlock ) {\n\t\tconst firstBlockType = registry\n\t\t\t.select( blocksStore )\n\t\t\t.getBlockType( firstBlock.name );\n\n\t\tif ( firstBlockType[ requiresWrapperOnCopy ] ) {\n\t\t\tconst { getBlockRootClientId, getBlockName, getBlockAttributes } =\n\t\t\t\tregistry.select( blockEditorStore );\n\t\t\tconst wrapperBlockClientId = getBlockRootClientId(\n\t\t\t\tfirstBlock.clientId\n\t\t\t);\n\t\t\tconst wrapperBlockName = getBlockName( wrapperBlockClientId );\n\n\t\t\tif ( wrapperBlockName ) {\n\t\t\t\t_blocks = createBlock(\n\t\t\t\t\twrapperBlockName,\n\t\t\t\t\tgetBlockAttributes( wrapperBlockClientId ),\n\t\t\t\t\t_blocks\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\t}\n\n\tconst serialized = serialize( _blocks );\n\n\tevent.clipboardData.setData( 'text/plain', toPlainText( serialized ) );\n\tevent.clipboardData.setData( 'text/html', serialized );\n}\n\n/**\n * Returns the blocks to be pasted from the clipboard event.\n *\n * @param {ClipboardEvent} event The clipboard event.\n * @param {boolean} canUserUseUnfilteredHTML Whether the user can or can't post unfiltered HTML.\n * @return {Array|string} A list of blocks or a string, depending on `handlerMode`.\n */\nexport function getPasteBlocks( event, canUserUseUnfilteredHTML ) {\n\tconst { plainText, html, files } = getPasteEventData( event );\n\tlet blocks = [];\n\n\tif ( files.length ) {\n\t\tconst fromTransforms = getBlockTransforms( 'from' );\n\t\tblocks = files\n\t\t\t.reduce( ( accumulator, file ) => {\n\t\t\t\tconst transformation = findTransform(\n\t\t\t\t\tfromTransforms,\n\t\t\t\t\t( transform ) =>\n\t\t\t\t\t\ttransform.type === 'files' &&\n\t\t\t\t\t\ttransform.isMatch( [ file ] )\n\t\t\t\t);\n\t\t\t\tif ( transformation ) {\n\t\t\t\t\taccumulator.push( transformation.transform( [ file ] ) );\n\t\t\t\t}\n\t\t\t\treturn accumulator;\n\t\t\t}, [] )\n\t\t\t.flat();\n\t} else {\n\t\tblocks = pasteHandler( {\n\t\t\tHTML: html,\n\t\t\tplainText,\n\t\t\tmode: 'BLOCKS',\n\t\t\tcanUserUseUnfilteredHTML,\n\t\t} );\n\t}\n\n\treturn blocks;\n}\n\n/**\n * Given a string of HTML representing serialized blocks, returns the plain\n * text extracted after stripping the HTML of any tags and fixing line breaks.\n *\n * @param {string} html Serialized blocks.\n * @return {string} The plain-text content with any html removed.\n */\nfunction toPlainText( html ) {\n\t// Manually handle BR tags as line breaks prior to `stripHTML` call\n\thtml = html.replace( /<br>/g, '\\n' );\n\n\tconst plainText = stripHTML( html ).trim();\n\n\t// Merge any consecutive line breaks\n\treturn plainText.replace( /\\n\\n+/g, '\\n\\n' );\n}\n\n/**\n * Gets the current content editable root element based on the selection.\n * @param {Document} ownerDocument\n * @return {Element|undefined} The content editable root element.\n */\nexport function getSelectionRoot( ownerDocument ) {\n\tconst { defaultView } = ownerDocument;\n\tconst { anchorNode, focusNode } = defaultView.getSelection();\n\n\tif ( ! anchorNode || ! focusNode ) {\n\t\treturn;\n\t}\n\n\tconst anchorElement = (\n\t\tanchorNode.nodeType === anchorNode.ELEMENT_NODE\n\t\t\t? anchorNode\n\t\t\t: anchorNode.parentElement\n\t).closest( '[contenteditable]' );\n\n\tif ( ! anchorElement ) {\n\t\treturn;\n\t}\n\n\tif ( ! anchorElement.contains( focusNode ) ) {\n\t\treturn;\n\t}\n\n\treturn anchorElement;\n}\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["__unstableStripHTML","stripHTML","serialize","createBlock","pasteHandler","findTransform","getBlockTransforms","store","blocksStore","getPasteEventData","blockEditorStore","requiresWrapperOnCopy","Symbol","setClipboardBlocks","event","blocks","registry","_blocks","firstBlock","firstBlockType","select","getBlockType","name","getBlockRootClientId","getBlockName","getBlockAttributes","wrapperBlockClientId","clientId","wrapperBlockName","serialized","clipboardData","setData","toPlainText","getPasteBlocks","canUserUseUnfilteredHTML","plainText","html","files","length","fromTransforms","reduce","accumulator","file","transformation","transform","type","isMatch","push","flat","HTML","mode","replace","trim"],"sources":["@wordpress/block-editor/src/components/writing-flow/utils.js"],"sourcesContent":["/**\n * WordPress dependencies\n */\nimport { __unstableStripHTML as stripHTML } from '@wordpress/dom';\nimport {\n\tserialize,\n\tcreateBlock,\n\tpasteHandler,\n\tfindTransform,\n\tgetBlockTransforms,\n\tstore as blocksStore,\n} from '@wordpress/blocks';\n\n/**\n * Internal dependencies\n */\nimport { getPasteEventData } from '../../utils/pasting';\nimport { store as blockEditorStore } from '../../store';\n\nexport const requiresWrapperOnCopy = Symbol( 'requiresWrapperOnCopy' );\n\n/**\n * Sets the clipboard data for the provided blocks, with both HTML and plain\n * text representations.\n *\n * @param {ClipboardEvent} event Clipboard event.\n * @param {WPBlock[]} blocks Blocks to set as clipboard data.\n * @param {Object} registry The registry to select from.\n */\nexport function setClipboardBlocks( event, blocks, registry ) {\n\tlet _blocks = blocks;\n\n\tconst [ firstBlock ] = blocks;\n\n\tif ( firstBlock ) {\n\t\tconst firstBlockType = registry\n\t\t\t.select( blocksStore )\n\t\t\t.getBlockType( firstBlock.name );\n\n\t\tif ( firstBlockType[ requiresWrapperOnCopy ] ) {\n\t\t\tconst { getBlockRootClientId, getBlockName, getBlockAttributes } =\n\t\t\t\tregistry.select( blockEditorStore );\n\t\t\tconst wrapperBlockClientId = getBlockRootClientId(\n\t\t\t\tfirstBlock.clientId\n\t\t\t);\n\t\t\tconst wrapperBlockName = getBlockName( wrapperBlockClientId );\n\n\t\t\tif ( wrapperBlockName ) {\n\t\t\t\t_blocks = createBlock(\n\t\t\t\t\twrapperBlockName,\n\t\t\t\t\tgetBlockAttributes( wrapperBlockClientId ),\n\t\t\t\t\t_blocks\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\t}\n\n\tconst serialized = serialize( _blocks );\n\n\tevent.clipboardData.setData( 'text/plain', toPlainText( serialized ) );\n\tevent.clipboardData.setData( 'text/html', serialized );\n}\n\n/**\n * Returns the blocks to be pasted from the clipboard event.\n *\n * @param {ClipboardEvent} event The clipboard event.\n * @param {boolean} canUserUseUnfilteredHTML Whether the user can or can't post unfiltered HTML.\n * @return {Array|string} A list of blocks or a string, depending on `handlerMode`.\n */\nexport function getPasteBlocks( event, canUserUseUnfilteredHTML ) {\n\tconst { plainText, html, files } = getPasteEventData( event );\n\tlet blocks = [];\n\n\tif ( files.length ) {\n\t\tconst fromTransforms = getBlockTransforms( 'from' );\n\t\tblocks = files\n\t\t\t.reduce( ( accumulator, file ) => {\n\t\t\t\tconst transformation = findTransform(\n\t\t\t\t\tfromTransforms,\n\t\t\t\t\t( transform ) =>\n\t\t\t\t\t\ttransform.type === 'files' &&\n\t\t\t\t\t\ttransform.isMatch( [ file ] )\n\t\t\t\t);\n\t\t\t\tif ( transformation ) {\n\t\t\t\t\taccumulator.push( transformation.transform( [ file ] ) );\n\t\t\t\t}\n\t\t\t\treturn accumulator;\n\t\t\t}, [] )\n\t\t\t.flat();\n\t} else {\n\t\tblocks = pasteHandler( {\n\t\t\tHTML: html,\n\t\t\tplainText,\n\t\t\tmode: 'BLOCKS',\n\t\t\tcanUserUseUnfilteredHTML,\n\t\t} );\n\t}\n\n\treturn blocks;\n}\n\n/**\n * Given a string of HTML representing serialized blocks, returns the plain\n * text extracted after stripping the HTML of any tags and fixing line breaks.\n *\n * @param {string} html Serialized blocks.\n * @return {string} The plain-text content with any html removed.\n */\nfunction toPlainText( html ) {\n\t// Manually handle BR tags as line breaks prior to `stripHTML` call\n\thtml = html.replace( /<br>/g, '\\n' );\n\n\tconst plainText = stripHTML( html ).trim();\n\n\t// Merge any consecutive line breaks\n\treturn plainText.replace( /\\n\\n+/g, '\\n\\n' );\n}\n"],"mappings":"AAAA;AACA;AACA;AACA,SAASA,mBAAmB,IAAIC,SAAS,QAAQ,gBAAgB;AACjE,SACCC,SAAS,EACTC,WAAW,EACXC,YAAY,EACZC,aAAa,EACbC,kBAAkB,EAClBC,KAAK,IAAIC,WAAW,QACd,mBAAmB;;AAE1B;AACA;AACA;AACA,SAASC,iBAAiB,QAAQ,qBAAqB;AACvD,SAASF,KAAK,IAAIG,gBAAgB,QAAQ,aAAa;AAEvD,OAAO,MAAMC,qBAAqB,GAAGC,MAAM,CAAE,uBAAwB,CAAC;;AAEtE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,SAASC,kBAAkBA,CAAEC,KAAK,EAAEC,MAAM,EAAEC,QAAQ,EAAG;EAC7D,IAAIC,OAAO,GAAGF,MAAM;EAEpB,MAAM,CAAEG,UAAU,CAAE,GAAGH,MAAM;EAE7B,IAAKG,UAAU,EAAG;IACjB,MAAMC,cAAc,GAAGH,QAAQ,CAC7BI,MAAM,CAAEZ,WAAY,CAAC,CACrBa,YAAY,CAAEH,UAAU,CAACI,IAAK,CAAC;IAEjC,IAAKH,cAAc,CAAER,qBAAqB,CAAE,EAAG;MAC9C,MAAM;QAAEY,oBAAoB;QAAEC,YAAY;QAAEC;MAAmB,CAAC,GAC/DT,QAAQ,CAACI,MAAM,CAAEV,gBAAiB,CAAC;MACpC,MAAMgB,oBAAoB,GAAGH,oBAAoB,CAChDL,UAAU,CAACS,QACZ,CAAC;MACD,MAAMC,gBAAgB,GAAGJ,YAAY,CAAEE,oBAAqB,CAAC;MAE7D,IAAKE,gBAAgB,EAAG;QACvBX,OAAO,GAAGd,WAAW,CACpByB,gBAAgB,EAChBH,kBAAkB,CAAEC,oBAAqB,CAAC,EAC1CT,OACD,CAAC;MACF;IACD;EACD;EAEA,MAAMY,UAAU,GAAG3B,SAAS,CAAEe,OAAQ,CAAC;EAEvCH,KAAK,CAACgB,aAAa,CAACC,OAAO,CAAE,YAAY,EAAEC,WAAW,CAAEH,UAAW,CAAE,CAAC;EACtEf,KAAK,CAACgB,aAAa,CAACC,OAAO,CAAE,WAAW,EAAEF,UAAW,CAAC;AACvD;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,SAASI,cAAcA,CAAEnB,KAAK,EAAEoB,wBAAwB,EAAG;EACjE,MAAM;IAAEC,SAAS;IAAEC,IAAI;IAAEC;EAAM,CAAC,GAAG5B,iBAAiB,CAAEK,KAAM,CAAC;EAC7D,IAAIC,MAAM,GAAG,EAAE;EAEf,IAAKsB,KAAK,CAACC,MAAM,EAAG;IACnB,MAAMC,cAAc,GAAGjC,kBAAkB,CAAE,MAAO,CAAC;IACnDS,MAAM,GAAGsB,KAAK,CACZG,MAAM,CAAE,CAAEC,WAAW,EAAEC,IAAI,KAAM;MACjC,MAAMC,cAAc,GAAGtC,aAAa,CACnCkC,cAAc,EACZK,SAAS,IACVA,SAAS,CAACC,IAAI,KAAK,OAAO,IAC1BD,SAAS,CAACE,OAAO,CAAE,CAAEJ,IAAI,CAAG,CAC9B,CAAC;MACD,IAAKC,cAAc,EAAG;QACrBF,WAAW,CAACM,IAAI,CAAEJ,cAAc,CAACC,SAAS,CAAE,CAAEF,IAAI,CAAG,CAAE,CAAC;MACzD;MACA,OAAOD,WAAW;IACnB,CAAC,EAAE,EAAG,CAAC,CACNO,IAAI,CAAC,CAAC;EACT,CAAC,MAAM;IACNjC,MAAM,GAAGX,YAAY,CAAE;MACtB6C,IAAI,EAAEb,IAAI;MACVD,SAAS;MACTe,IAAI,EAAE,QAAQ;MACdhB;IACD,CAAE,CAAC;EACJ;EAEA,OAAOnB,MAAM;AACd;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAASiB,WAAWA,CAAEI,IAAI,EAAG;EAC5B;EACAA,IAAI,GAAGA,IAAI,CAACe,OAAO,CAAE,OAAO,EAAE,IAAK,CAAC;EAEpC,MAAMhB,SAAS,GAAGlC,SAAS,CAAEmC,IAAK,CAAC,CAACgB,IAAI,CAAC,CAAC;;EAE1C;EACA,OAAOjB,SAAS,CAACgB,OAAO,CAAE,QAAQ,EAAE,MAAO,CAAC;AAC7C","ignoreList":[]}
@@ -2,9 +2,9 @@
2
2
  * WordPress dependencies
3
3
  */
4
4
  import { __ } from '@wordpress/i18n';
5
- import { privateApis as blocksPrivateApis } from '@wordpress/blocks';
5
+ import { getBlockBindingsSource, getBlockBindingsSources } from '@wordpress/blocks';
6
6
  import { __experimentalItemGroup as ItemGroup, __experimentalItem as Item, __experimentalText as Text, __experimentalToolsPanel as ToolsPanel, __experimentalToolsPanelItem as ToolsPanelItem, __experimentalVStack as VStack, privateApis as componentsPrivateApis } from '@wordpress/components';
7
- import { useRegistry, useSelect } from '@wordpress/data';
7
+ import { useSelect } from '@wordpress/data';
8
8
  import { useContext, Fragment } from '@wordpress/element';
9
9
  import { useViewportMatch } from '@wordpress/compose';
10
10
 
@@ -39,9 +39,6 @@ function BlockBindingsPanelDropdown({
39
39
  attribute,
40
40
  binding
41
41
  }) {
42
- const {
43
- getBlockBindingsSources
44
- } = unlock(blocksPrivateApis);
45
42
  const registeredSources = getBlockBindingsSources();
46
43
  const {
47
44
  updateBlockBindings
@@ -83,7 +80,7 @@ function BlockBindingsAttribute({
83
80
  source: sourceName,
84
81
  args
85
82
  } = binding || {};
86
- const sourceProps = unlock(blocksPrivateApis).getBlockBindingsSource(sourceName);
83
+ const sourceProps = getBlockBindingsSource(sourceName);
87
84
  const isSourceInvalid = !sourceProps;
88
85
  return /*#__PURE__*/_jsxs(VStack, {
89
86
  className: "block-editor-bindings__item",
@@ -157,7 +154,6 @@ export const BlockBindingsPanel = ({
157
154
  name: blockName,
158
155
  metadata
159
156
  }) => {
160
- const registry = useRegistry();
161
157
  const blockContext = useContext(BlockContext);
162
158
  const {
163
159
  removeAllBlockBindings
@@ -167,7 +163,7 @@ export const BlockBindingsPanel = ({
167
163
 
168
164
  // `useSelect` is used purposely here to ensure `getFieldsList`
169
165
  // is updated whenever there are updates in block context.
170
- // `source.getFieldsList` may also call a selector via `registry.select`.
166
+ // `source.getFieldsList` may also call a selector via `select`.
171
167
  const _fieldsList = {};
172
168
  const {
173
169
  fieldsList,
@@ -176,9 +172,6 @@ export const BlockBindingsPanel = ({
176
172
  if (!bindableAttributes || bindableAttributes.length === 0) {
177
173
  return EMPTY_OBJECT;
178
174
  }
179
- const {
180
- getBlockBindingsSources
181
- } = unlock(blocksPrivateApis);
182
175
  const registeredSources = getBlockBindingsSources();
183
176
  Object.entries(registeredSources).forEach(([sourceName, {
184
177
  getFieldsList,
@@ -193,7 +186,7 @@ export const BlockBindingsPanel = ({
193
186
  }
194
187
  }
195
188
  const sourceList = getFieldsList({
196
- registry,
189
+ select,
197
190
  context
198
191
  });
199
192
  // Only add source if the list is not empty.
@@ -208,7 +201,7 @@ export const BlockBindingsPanel = ({
208
201
  fieldsList: Object.values(_fieldsList).length > 0 ? _fieldsList : EMPTY_OBJECT,
209
202
  canUpdateBlockBindings: select(blockEditorStore).getSettings().canUpdateBlockBindings
210
203
  };
211
- }, [blockContext, bindableAttributes, registry]);
204
+ }, [blockContext, bindableAttributes]);
212
205
  // Return early if there are no bindable attributes.
213
206
  if (!bindableAttributes || bindableAttributes.length === 0) {
214
207
  return null;
@@ -1 +1 @@
1
- {"version":3,"names":["__","privateApis","blocksPrivateApis","__experimentalItemGroup","ItemGroup","__experimentalItem","Item","__experimentalText","Text","__experimentalToolsPanel","ToolsPanel","__experimentalToolsPanelItem","ToolsPanelItem","__experimentalVStack","VStack","componentsPrivateApis","useRegistry","useSelect","useContext","Fragment","useViewportMatch","canBindAttribute","getBindableAttributes","unlock","InspectorControls","BlockContext","useBlockBindingsUtils","store","blockEditorStore","jsx","_jsx","jsxs","_jsxs","_Fragment","DropdownMenuV2","EMPTY_OBJECT","useToolsPanelDropdownMenuProps","isMobile","popoverProps","placement","offset","BlockBindingsPanelDropdown","fieldsList","attribute","binding","getBlockBindingsSources","registeredSources","updateBlockBindings","currentKey","args","key","children","Object","entries","map","name","fields","i","Group","keys","length","GroupLabel","label","RadioItem","onChange","source","value","checked","ItemLabel","ItemHelpText","Separator","BlockBindingsAttribute","sourceName","sourceProps","getBlockBindingsSource","isSourceInvalid","className","spacing","truncate","variant","isDestructive","ReadOnlyBlockBindingsPanelItems","bindings","EditableBlockBindingsPanelItems","attributes","hasValue","onDeselect","undefined","gutter","trigger","BlockBindingsPanel","blockName","metadata","registry","blockContext","removeAllBlockBindings","bindableAttributes","dropdownMenuProps","_fieldsList","canUpdateBlockBindings","select","forEach","getFieldsList","usesContext","context","sourceList","values","getSettings","filteredBindings","readOnly","group","resetAll","isBordered","isSeparated","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":[]}
1
+ {"version":3,"names":["__","getBlockBindingsSource","getBlockBindingsSources","__experimentalItemGroup","ItemGroup","__experimentalItem","Item","__experimentalText","Text","__experimentalToolsPanel","ToolsPanel","__experimentalToolsPanelItem","ToolsPanelItem","__experimentalVStack","VStack","privateApis","componentsPrivateApis","useSelect","useContext","Fragment","useViewportMatch","canBindAttribute","getBindableAttributes","unlock","InspectorControls","BlockContext","useBlockBindingsUtils","store","blockEditorStore","jsx","_jsx","jsxs","_jsxs","_Fragment","DropdownMenuV2","EMPTY_OBJECT","useToolsPanelDropdownMenuProps","isMobile","popoverProps","placement","offset","BlockBindingsPanelDropdown","fieldsList","attribute","binding","registeredSources","updateBlockBindings","currentKey","args","key","children","Object","entries","map","name","fields","i","Group","keys","length","GroupLabel","label","RadioItem","onChange","source","value","checked","ItemLabel","ItemHelpText","Separator","BlockBindingsAttribute","sourceName","sourceProps","isSourceInvalid","className","spacing","truncate","variant","isDestructive","ReadOnlyBlockBindingsPanelItems","bindings","EditableBlockBindingsPanelItems","attributes","hasValue","onDeselect","undefined","gutter","trigger","BlockBindingsPanel","blockName","metadata","blockContext","removeAllBlockBindings","bindableAttributes","dropdownMenuProps","_fieldsList","canUpdateBlockBindings","select","forEach","getFieldsList","usesContext","context","sourceList","values","getSettings","filteredBindings","readOnly","group","resetAll","isBordered","isSeparated","edit","attributeKeys","hasSupport"],"sources":["@wordpress/block-editor/src/hooks/block-bindings.js"],"sourcesContent":["/**\n * WordPress dependencies\n */\nimport { __ } from '@wordpress/i18n';\nimport {\n\tgetBlockBindingsSource,\n\tgetBlockBindingsSources,\n} 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 { 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 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 = 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 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 `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 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\tselect,\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 ]\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":[]}
@@ -10,7 +10,7 @@ import { createHigherOrderComponent, useInstanceId } from '@wordpress/compose';
10
10
  import { addFilter } from '@wordpress/hooks';
11
11
  import { getBlockSupport, hasBlockSupport } from '@wordpress/blocks';
12
12
  import { useSelect } from '@wordpress/data';
13
- import { Button, ButtonGroup, ToggleControl, PanelBody, privateApis as componentsPrivateApis } from '@wordpress/components';
13
+ import { __experimentalToggleGroupControl as ToggleGroupControl, __experimentalToggleGroupControlOption as ToggleGroupControlOption, ToggleControl, PanelBody, privateApis as componentsPrivateApis } from '@wordpress/components';
14
14
  import { __ } from '@wordpress/i18n';
15
15
 
16
16
  /**
@@ -250,18 +250,22 @@ function LayoutTypeSwitcher({
250
250
  type,
251
251
  onChange
252
252
  }) {
253
- return /*#__PURE__*/_jsx(ButtonGroup, {
253
+ return /*#__PURE__*/_jsx(ToggleGroupControl, {
254
+ __next40pxDefaultSize: true,
255
+ isBlock: true,
256
+ label: __('Layout type'),
257
+ __nextHasNoMarginBottom: true,
258
+ hideLabelFromVision: true,
259
+ isAdaptiveWidth: true,
260
+ value: type,
261
+ onChange: onChange,
254
262
  children: getLayoutTypes().map(({
255
263
  name,
256
264
  label
257
265
  }) => {
258
- return /*#__PURE__*/_jsx(Button
259
- // TODO: Switch to `true` (40px size) if possible
260
- , {
261
- __next40pxDefaultSize: false,
262
- isPressed: type === name,
263
- onClick: () => onChange(name),
264
- children: label
266
+ return /*#__PURE__*/_jsx(ToggleGroupControlOption, {
267
+ value: name,
268
+ label: label
265
269
  }, name);
266
270
  })
267
271
  });
@@ -1 +1 @@
1
- {"version":3,"names":["clsx","createHigherOrderComponent","useInstanceId","addFilter","getBlockSupport","hasBlockSupport","useSelect","Button","ButtonGroup","ToggleControl","PanelBody","privateApis","componentsPrivateApis","__","store","blockEditorStore","InspectorControls","useSettings","getLayoutType","getLayoutTypes","useBlockEditingMode","LAYOUT_DEFINITIONS","useBlockSettings","useStyleOverride","unlock","jsx","_jsx","Fragment","_Fragment","jsxs","_jsxs","layoutBlockSupportKey","kebabCase","hasLayoutBlockSupport","blockName","useLayoutClasses","blockAttributes","layout","default","defaultBlockLayout","usedLayout","inherit","contentSize","wideSize","type","layoutClassnames","className","baseClassName","splitBlockName","split","fullBlockName","pop","join","compoundClassName","push","hasGlobalPadding","select","getSettings","__experimentalFeatures","useRootPaddingAwareAlignments","orientation","justifyContent","flexWrap","useLayoutStyles","selector","style","fullLayoutType","blockGapSupport","hasBlockGapSupport","getLayoutStyle","LayoutPanelPure","setAttributes","name","clientId","settings","layoutSettings","themeSupportsLayout","supportsLayout","blockEditingMode","layoutBlockSupport","blockSupportAndThemeSettings","allowSwitching","allowEditing","allowInheriting","blockSupportAndLayout","defaultType","blockLayoutType","showInheritToggle","layoutType","constrainedType","displayControlsForLegacyLayouts","hasContentSizeOrLegacySettings","onChangeType","newType","onChangeLayout","newLayout","children","title","__nextHasNoMarginBottom","label","checked","onChange","help","LayoutTypeSwitcher","inspectorControls","toolBarControls","shareWithChildBlocks","edit","attributeKeys","hasSupport","map","__next40pxDefaultSize","isPressed","onClick","addAttribute","_settings$attributes$","attributes","BlockWithLayoutStyles","block","BlockListBlock","props","layoutClasses","id","selectorPrefix","css","layoutClassNames","__unstableLayoutClassNames","withLayoutStyles","blockSupportsLayout","extraProps","getBlockSettings","disableLayoutStyles","undefined"],"sources":["@wordpress/block-editor/src/hooks/layout.js"],"sourcesContent":["/**\n * External dependencies\n */\nimport clsx from 'clsx';\n\n/**\n * WordPress dependencies\n */\nimport { createHigherOrderComponent, useInstanceId } from '@wordpress/compose';\nimport { addFilter } from '@wordpress/hooks';\nimport { getBlockSupport, hasBlockSupport } from '@wordpress/blocks';\nimport { useSelect } from '@wordpress/data';\nimport {\n\tButton,\n\tButtonGroup,\n\tToggleControl,\n\tPanelBody,\n\tprivateApis as componentsPrivateApis,\n} from '@wordpress/components';\nimport { __ } from '@wordpress/i18n';\n\n/**\n * Internal dependencies\n */\nimport { store as blockEditorStore } from '../store';\nimport { InspectorControls } from '../components';\nimport { useSettings } from '../components/use-settings';\nimport { getLayoutType, getLayoutTypes } from '../layouts';\nimport { useBlockEditingMode } from '../components/block-editing-mode';\nimport { LAYOUT_DEFINITIONS } from '../layouts/definitions';\nimport { useBlockSettings, useStyleOverride } from './utils';\nimport { unlock } from '../lock-unlock';\n\nconst layoutBlockSupportKey = 'layout';\nconst { kebabCase } = unlock( componentsPrivateApis );\n\nfunction hasLayoutBlockSupport( blockName ) {\n\treturn (\n\t\thasBlockSupport( blockName, 'layout' ) ||\n\t\thasBlockSupport( blockName, '__experimentalLayout' )\n\t);\n}\n\n/**\n * Generates the utility classnames for the given block's layout attributes.\n *\n * @param { Object } blockAttributes Block attributes.\n * @param { string } blockName Block name.\n *\n * @return { Array } Array of CSS classname strings.\n */\nexport function useLayoutClasses( blockAttributes = {}, blockName = '' ) {\n\tconst { layout } = blockAttributes;\n\tconst { default: defaultBlockLayout } =\n\t\tgetBlockSupport( blockName, layoutBlockSupportKey ) || {};\n\tconst usedLayout =\n\t\tlayout?.inherit || layout?.contentSize || layout?.wideSize\n\t\t\t? { ...layout, type: 'constrained' }\n\t\t\t: layout || defaultBlockLayout || {};\n\n\tconst layoutClassnames = [];\n\n\tif ( LAYOUT_DEFINITIONS[ usedLayout?.type || 'default' ]?.className ) {\n\t\tconst baseClassName =\n\t\t\tLAYOUT_DEFINITIONS[ usedLayout?.type || 'default' ]?.className;\n\t\tconst splitBlockName = blockName.split( '/' );\n\t\tconst fullBlockName =\n\t\t\tsplitBlockName[ 0 ] === 'core'\n\t\t\t\t? splitBlockName.pop()\n\t\t\t\t: splitBlockName.join( '-' );\n\t\tconst compoundClassName = `wp-block-${ fullBlockName }-${ baseClassName }`;\n\t\tlayoutClassnames.push( baseClassName, compoundClassName );\n\t}\n\n\tconst hasGlobalPadding = useSelect(\n\t\t( select ) => {\n\t\t\treturn (\n\t\t\t\t( usedLayout?.inherit ||\n\t\t\t\t\tusedLayout?.contentSize ||\n\t\t\t\t\tusedLayout?.type === 'constrained' ) &&\n\t\t\t\tselect( blockEditorStore ).getSettings().__experimentalFeatures\n\t\t\t\t\t?.useRootPaddingAwareAlignments\n\t\t\t);\n\t\t},\n\t\t[ usedLayout?.contentSize, usedLayout?.inherit, usedLayout?.type ]\n\t);\n\n\tif ( hasGlobalPadding ) {\n\t\tlayoutClassnames.push( 'has-global-padding' );\n\t}\n\n\tif ( usedLayout?.orientation ) {\n\t\tlayoutClassnames.push( `is-${ kebabCase( usedLayout.orientation ) }` );\n\t}\n\n\tif ( usedLayout?.justifyContent ) {\n\t\tlayoutClassnames.push(\n\t\t\t`is-content-justification-${ kebabCase(\n\t\t\t\tusedLayout.justifyContent\n\t\t\t) }`\n\t\t);\n\t}\n\n\tif ( usedLayout?.flexWrap && usedLayout.flexWrap === 'nowrap' ) {\n\t\tlayoutClassnames.push( 'is-nowrap' );\n\t}\n\n\treturn layoutClassnames;\n}\n\n/**\n * Generates a CSS rule with the given block's layout styles.\n *\n * @param { Object } blockAttributes Block attributes.\n * @param { string } blockName Block name.\n * @param { string } selector A selector to use in generating the CSS rule.\n *\n * @return { string } CSS rule.\n */\nexport function useLayoutStyles( blockAttributes = {}, blockName, selector ) {\n\tconst { layout = {}, style = {} } = blockAttributes;\n\t// Update type for blocks using legacy layouts.\n\tconst usedLayout =\n\t\tlayout?.inherit || layout?.contentSize || layout?.wideSize\n\t\t\t? { ...layout, type: 'constrained' }\n\t\t\t: layout || {};\n\tconst fullLayoutType = getLayoutType( usedLayout?.type || 'default' );\n\tconst [ blockGapSupport ] = useSettings( 'spacing.blockGap' );\n\tconst hasBlockGapSupport = blockGapSupport !== null;\n\treturn fullLayoutType?.getLayoutStyle?.( {\n\t\tblockName,\n\t\tselector,\n\t\tlayout,\n\t\tstyle,\n\t\thasBlockGapSupport,\n\t} );\n}\n\nfunction LayoutPanelPure( {\n\tlayout,\n\tsetAttributes,\n\tname: blockName,\n\tclientId,\n} ) {\n\tconst settings = useBlockSettings( blockName );\n\t// Block settings come from theme.json under settings.[blockName].\n\tconst { layout: layoutSettings } = settings;\n\tconst { themeSupportsLayout } = useSelect( ( select ) => {\n\t\tconst { getSettings } = select( blockEditorStore );\n\t\treturn {\n\t\t\tthemeSupportsLayout: getSettings().supportsLayout,\n\t\t};\n\t}, [] );\n\tconst blockEditingMode = useBlockEditingMode();\n\n\tif ( blockEditingMode !== 'default' ) {\n\t\treturn null;\n\t}\n\n\t// Layout block support comes from the block's block.json.\n\tconst layoutBlockSupport = getBlockSupport(\n\t\tblockName,\n\t\tlayoutBlockSupportKey,\n\t\t{}\n\t);\n\tconst blockSupportAndThemeSettings = {\n\t\t...layoutSettings,\n\t\t...layoutBlockSupport,\n\t};\n\tconst {\n\t\tallowSwitching,\n\t\tallowEditing = true,\n\t\tallowInheriting = true,\n\t\tdefault: defaultBlockLayout,\n\t} = blockSupportAndThemeSettings;\n\n\tif ( ! allowEditing ) {\n\t\treturn null;\n\t}\n\n\t/*\n\t * Try to find the layout type from either the\n\t * block's layout settings or any saved layout config.\n\t */\n\tconst blockSupportAndLayout = {\n\t\t...layoutBlockSupport,\n\t\t...layout,\n\t};\n\tconst { type, default: { type: defaultType = 'default' } = {} } =\n\t\tblockSupportAndLayout;\n\tconst blockLayoutType = type || defaultType;\n\n\t// Only show the inherit toggle if it's supported,\n\t// and either the default / flow or the constrained layout type is in use, as the toggle switches from one to the other.\n\tconst showInheritToggle = !! (\n\t\tallowInheriting &&\n\t\t( ! blockLayoutType ||\n\t\t\tblockLayoutType === 'default' ||\n\t\t\tblockLayoutType === 'constrained' ||\n\t\t\tblockSupportAndLayout.inherit )\n\t);\n\n\tconst usedLayout = layout || defaultBlockLayout || {};\n\tconst { inherit = false, contentSize = null } = usedLayout;\n\t/**\n\t * `themeSupportsLayout` is only relevant to the `default/flow` or\n\t * `constrained` layouts and it should not be taken into account when other\n\t * `layout` types are used.\n\t */\n\tif (\n\t\t( blockLayoutType === 'default' ||\n\t\t\tblockLayoutType === 'constrained' ) &&\n\t\t! themeSupportsLayout\n\t) {\n\t\treturn null;\n\t}\n\tconst layoutType = getLayoutType( blockLayoutType );\n\tconst constrainedType = getLayoutType( 'constrained' );\n\tconst displayControlsForLegacyLayouts =\n\t\t! usedLayout.type && ( contentSize || inherit );\n\tconst hasContentSizeOrLegacySettings = !! inherit || !! contentSize;\n\n\tconst onChangeType = ( newType ) =>\n\t\tsetAttributes( { layout: { type: newType } } );\n\tconst onChangeLayout = ( newLayout ) =>\n\t\tsetAttributes( { layout: newLayout } );\n\n\treturn (\n\t\t<>\n\t\t\t<InspectorControls>\n\t\t\t\t<PanelBody title={ __( 'Layout' ) }>\n\t\t\t\t\t{ showInheritToggle && (\n\t\t\t\t\t\t<>\n\t\t\t\t\t\t\t<ToggleControl\n\t\t\t\t\t\t\t\t__nextHasNoMarginBottom\n\t\t\t\t\t\t\t\tlabel={ __( 'Inner blocks use content width' ) }\n\t\t\t\t\t\t\t\tchecked={\n\t\t\t\t\t\t\t\t\tlayoutType?.name === 'constrained' ||\n\t\t\t\t\t\t\t\t\thasContentSizeOrLegacySettings\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tonChange={ () =>\n\t\t\t\t\t\t\t\t\tsetAttributes( {\n\t\t\t\t\t\t\t\t\t\tlayout: {\n\t\t\t\t\t\t\t\t\t\t\ttype:\n\t\t\t\t\t\t\t\t\t\t\t\tlayoutType?.name ===\n\t\t\t\t\t\t\t\t\t\t\t\t\t'constrained' ||\n\t\t\t\t\t\t\t\t\t\t\t\thasContentSizeOrLegacySettings\n\t\t\t\t\t\t\t\t\t\t\t\t\t? 'default'\n\t\t\t\t\t\t\t\t\t\t\t\t\t: 'constrained',\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\thelp={\n\t\t\t\t\t\t\t\t\tlayoutType?.name === 'constrained' ||\n\t\t\t\t\t\t\t\t\thasContentSizeOrLegacySettings\n\t\t\t\t\t\t\t\t\t\t? __(\n\t\t\t\t\t\t\t\t\t\t\t\t'Nested blocks use content width with options for full and wide widths.'\n\t\t\t\t\t\t\t\t\t\t )\n\t\t\t\t\t\t\t\t\t\t: __(\n\t\t\t\t\t\t\t\t\t\t\t\t'Nested blocks will fill the width of this container. Toggle to constrain.'\n\t\t\t\t\t\t\t\t\t\t )\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t</>\n\t\t\t\t\t) }\n\n\t\t\t\t\t{ ! inherit && allowSwitching && (\n\t\t\t\t\t\t<LayoutTypeSwitcher\n\t\t\t\t\t\t\ttype={ blockLayoutType }\n\t\t\t\t\t\t\tonChange={ onChangeType }\n\t\t\t\t\t\t/>\n\t\t\t\t\t) }\n\n\t\t\t\t\t{ layoutType && layoutType.name !== 'default' && (\n\t\t\t\t\t\t<layoutType.inspectorControls\n\t\t\t\t\t\t\tlayout={ usedLayout }\n\t\t\t\t\t\t\tonChange={ onChangeLayout }\n\t\t\t\t\t\t\tlayoutBlockSupport={ blockSupportAndThemeSettings }\n\t\t\t\t\t\t\tname={ blockName }\n\t\t\t\t\t\t\tclientId={ clientId }\n\t\t\t\t\t\t/>\n\t\t\t\t\t) }\n\t\t\t\t\t{ constrainedType && displayControlsForLegacyLayouts && (\n\t\t\t\t\t\t<constrainedType.inspectorControls\n\t\t\t\t\t\t\tlayout={ usedLayout }\n\t\t\t\t\t\t\tonChange={ onChangeLayout }\n\t\t\t\t\t\t\tlayoutBlockSupport={ blockSupportAndThemeSettings }\n\t\t\t\t\t\t\tname={ blockName }\n\t\t\t\t\t\t\tclientId={ clientId }\n\t\t\t\t\t\t/>\n\t\t\t\t\t) }\n\t\t\t\t</PanelBody>\n\t\t\t</InspectorControls>\n\t\t\t{ ! inherit && layoutType && (\n\t\t\t\t<layoutType.toolBarControls\n\t\t\t\t\tlayout={ usedLayout }\n\t\t\t\t\tonChange={ onChangeLayout }\n\t\t\t\t\tlayoutBlockSupport={ layoutBlockSupport }\n\t\t\t\t\tname={ blockName }\n\t\t\t\t\tclientId={ clientId }\n\t\t\t\t/>\n\t\t\t) }\n\t\t</>\n\t);\n}\n\nexport default {\n\tshareWithChildBlocks: true,\n\tedit: LayoutPanelPure,\n\tattributeKeys: [ 'layout' ],\n\thasSupport( name ) {\n\t\treturn hasLayoutBlockSupport( name );\n\t},\n};\n\nfunction LayoutTypeSwitcher( { type, onChange } ) {\n\treturn (\n\t\t<ButtonGroup>\n\t\t\t{ getLayoutTypes().map( ( { name, label } ) => {\n\t\t\t\treturn (\n\t\t\t\t\t<Button\n\t\t\t\t\t\t// TODO: Switch to `true` (40px size) if possible\n\t\t\t\t\t\t__next40pxDefaultSize={ false }\n\t\t\t\t\t\tkey={ name }\n\t\t\t\t\t\tisPressed={ type === name }\n\t\t\t\t\t\tonClick={ () => onChange( name ) }\n\t\t\t\t\t>\n\t\t\t\t\t\t{ label }\n\t\t\t\t\t</Button>\n\t\t\t\t);\n\t\t\t} ) }\n\t\t</ButtonGroup>\n\t);\n}\n\n/**\n * Filters registered block settings, extending attributes to include `layout`.\n *\n * @param {Object} settings Original block settings.\n *\n * @return {Object} Filtered block settings.\n */\nexport function addAttribute( settings ) {\n\tif ( 'type' in ( settings.attributes?.layout ?? {} ) ) {\n\t\treturn settings;\n\t}\n\tif ( hasLayoutBlockSupport( settings ) ) {\n\t\tsettings.attributes = {\n\t\t\t...settings.attributes,\n\t\t\tlayout: {\n\t\t\t\ttype: 'object',\n\t\t\t},\n\t\t};\n\t}\n\n\treturn settings;\n}\n\nfunction BlockWithLayoutStyles( {\n\tblock: BlockListBlock,\n\tprops,\n\tblockGapSupport,\n\tlayoutClasses,\n} ) {\n\tconst { name, attributes } = props;\n\tconst id = useInstanceId( BlockListBlock );\n\tconst { layout } = attributes;\n\tconst { default: defaultBlockLayout } =\n\t\tgetBlockSupport( name, layoutBlockSupportKey ) || {};\n\tconst usedLayout =\n\t\tlayout?.inherit || layout?.contentSize || layout?.wideSize\n\t\t\t? { ...layout, type: 'constrained' }\n\t\t\t: layout || defaultBlockLayout || {};\n\n\tconst selectorPrefix = `wp-container-${ kebabCase( name ) }-is-layout-`;\n\t// Higher specificity to override defaults from theme.json.\n\tconst selector = `.${ selectorPrefix }${ id }`;\n\tconst hasBlockGapSupport = blockGapSupport !== null;\n\n\t// Get CSS string for the current layout type.\n\t// The CSS and `style` element is only output if it is not empty.\n\tconst fullLayoutType = getLayoutType( usedLayout?.type || 'default' );\n\tconst css = fullLayoutType?.getLayoutStyle?.( {\n\t\tblockName: name,\n\t\tselector,\n\t\tlayout: usedLayout,\n\t\tstyle: attributes?.style,\n\t\thasBlockGapSupport,\n\t} );\n\n\t// Attach a `wp-container-` id-based class name as well as a layout class name such as `is-layout-flex`.\n\tconst layoutClassNames = clsx(\n\t\t{\n\t\t\t[ `${ selectorPrefix }${ id }` ]: !! css, // Only attach a container class if there is generated CSS to be attached.\n\t\t},\n\t\tlayoutClasses\n\t);\n\n\tuseStyleOverride( { css } );\n\n\treturn (\n\t\t<BlockListBlock\n\t\t\t{ ...props }\n\t\t\t__unstableLayoutClassNames={ layoutClassNames }\n\t\t/>\n\t);\n}\n\n/**\n * Override the default block element to add the layout styles.\n *\n * @param {Function} BlockListBlock Original component.\n *\n * @return {Function} Wrapped component.\n */\nexport const withLayoutStyles = createHigherOrderComponent(\n\t( BlockListBlock ) => ( props ) => {\n\t\tconst { clientId, name, attributes } = props;\n\t\tconst blockSupportsLayout = hasLayoutBlockSupport( name );\n\t\tconst layoutClasses = useLayoutClasses( attributes, name );\n\t\tconst extraProps = useSelect(\n\t\t\t( select ) => {\n\t\t\t\t// The callback returns early to avoid block editor subscription.\n\t\t\t\tif ( ! blockSupportsLayout ) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tconst { getSettings, getBlockSettings } = unlock(\n\t\t\t\t\tselect( blockEditorStore )\n\t\t\t\t);\n\t\t\t\tconst { disableLayoutStyles } = getSettings();\n\n\t\t\t\tif ( disableLayoutStyles ) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tconst [ blockGapSupport ] = getBlockSettings(\n\t\t\t\t\tclientId,\n\t\t\t\t\t'spacing.blockGap'\n\t\t\t\t);\n\n\t\t\t\treturn { blockGapSupport };\n\t\t\t},\n\t\t\t[ blockSupportsLayout, clientId ]\n\t\t);\n\n\t\tif ( ! extraProps ) {\n\t\t\treturn (\n\t\t\t\t<BlockListBlock\n\t\t\t\t\t{ ...props }\n\t\t\t\t\t__unstableLayoutClassNames={\n\t\t\t\t\t\tblockSupportsLayout ? layoutClasses : undefined\n\t\t\t\t\t}\n\t\t\t\t/>\n\t\t\t);\n\t\t}\n\n\t\treturn (\n\t\t\t<BlockWithLayoutStyles\n\t\t\t\tblock={ BlockListBlock }\n\t\t\t\tprops={ props }\n\t\t\t\tlayoutClasses={ layoutClasses }\n\t\t\t\t{ ...extraProps }\n\t\t\t/>\n\t\t);\n\t},\n\t'withLayoutStyles'\n);\n\naddFilter(\n\t'blocks.registerBlockType',\n\t'core/layout/addAttribute',\n\taddAttribute\n);\naddFilter(\n\t'editor.BlockListBlock',\n\t'core/editor/layout/with-layout-styles',\n\twithLayoutStyles\n);\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["clsx","createHigherOrderComponent","useInstanceId","addFilter","getBlockSupport","hasBlockSupport","useSelect","__experimentalToggleGroupControl","ToggleGroupControl","__experimentalToggleGroupControlOption","ToggleGroupControlOption","ToggleControl","PanelBody","privateApis","componentsPrivateApis","__","store","blockEditorStore","InspectorControls","useSettings","getLayoutType","getLayoutTypes","useBlockEditingMode","LAYOUT_DEFINITIONS","useBlockSettings","useStyleOverride","unlock","jsx","_jsx","Fragment","_Fragment","jsxs","_jsxs","layoutBlockSupportKey","kebabCase","hasLayoutBlockSupport","blockName","useLayoutClasses","blockAttributes","layout","default","defaultBlockLayout","usedLayout","inherit","contentSize","wideSize","type","layoutClassnames","className","baseClassName","splitBlockName","split","fullBlockName","pop","join","compoundClassName","push","hasGlobalPadding","select","getSettings","__experimentalFeatures","useRootPaddingAwareAlignments","orientation","justifyContent","flexWrap","useLayoutStyles","selector","style","fullLayoutType","blockGapSupport","hasBlockGapSupport","getLayoutStyle","LayoutPanelPure","setAttributes","name","clientId","settings","layoutSettings","themeSupportsLayout","supportsLayout","blockEditingMode","layoutBlockSupport","blockSupportAndThemeSettings","allowSwitching","allowEditing","allowInheriting","blockSupportAndLayout","defaultType","blockLayoutType","showInheritToggle","layoutType","constrainedType","displayControlsForLegacyLayouts","hasContentSizeOrLegacySettings","onChangeType","newType","onChangeLayout","newLayout","children","title","__nextHasNoMarginBottom","label","checked","onChange","help","LayoutTypeSwitcher","inspectorControls","toolBarControls","shareWithChildBlocks","edit","attributeKeys","hasSupport","__next40pxDefaultSize","isBlock","hideLabelFromVision","isAdaptiveWidth","value","map","addAttribute","_settings$attributes$","attributes","BlockWithLayoutStyles","block","BlockListBlock","props","layoutClasses","id","selectorPrefix","css","layoutClassNames","__unstableLayoutClassNames","withLayoutStyles","blockSupportsLayout","extraProps","getBlockSettings","disableLayoutStyles","undefined"],"sources":["@wordpress/block-editor/src/hooks/layout.js"],"sourcesContent":["/**\n * External dependencies\n */\nimport clsx from 'clsx';\n\n/**\n * WordPress dependencies\n */\nimport { createHigherOrderComponent, useInstanceId } from '@wordpress/compose';\nimport { addFilter } from '@wordpress/hooks';\nimport { getBlockSupport, hasBlockSupport } from '@wordpress/blocks';\nimport { useSelect } from '@wordpress/data';\nimport {\n\t__experimentalToggleGroupControl as ToggleGroupControl,\n\t__experimentalToggleGroupControlOption as ToggleGroupControlOption,\n\tToggleControl,\n\tPanelBody,\n\tprivateApis as componentsPrivateApis,\n} from '@wordpress/components';\nimport { __ } from '@wordpress/i18n';\n\n/**\n * Internal dependencies\n */\nimport { store as blockEditorStore } from '../store';\nimport { InspectorControls } from '../components';\nimport { useSettings } from '../components/use-settings';\nimport { getLayoutType, getLayoutTypes } from '../layouts';\nimport { useBlockEditingMode } from '../components/block-editing-mode';\nimport { LAYOUT_DEFINITIONS } from '../layouts/definitions';\nimport { useBlockSettings, useStyleOverride } from './utils';\nimport { unlock } from '../lock-unlock';\n\nconst layoutBlockSupportKey = 'layout';\nconst { kebabCase } = unlock( componentsPrivateApis );\n\nfunction hasLayoutBlockSupport( blockName ) {\n\treturn (\n\t\thasBlockSupport( blockName, 'layout' ) ||\n\t\thasBlockSupport( blockName, '__experimentalLayout' )\n\t);\n}\n\n/**\n * Generates the utility classnames for the given block's layout attributes.\n *\n * @param { Object } blockAttributes Block attributes.\n * @param { string } blockName Block name.\n *\n * @return { Array } Array of CSS classname strings.\n */\nexport function useLayoutClasses( blockAttributes = {}, blockName = '' ) {\n\tconst { layout } = blockAttributes;\n\tconst { default: defaultBlockLayout } =\n\t\tgetBlockSupport( blockName, layoutBlockSupportKey ) || {};\n\tconst usedLayout =\n\t\tlayout?.inherit || layout?.contentSize || layout?.wideSize\n\t\t\t? { ...layout, type: 'constrained' }\n\t\t\t: layout || defaultBlockLayout || {};\n\n\tconst layoutClassnames = [];\n\n\tif ( LAYOUT_DEFINITIONS[ usedLayout?.type || 'default' ]?.className ) {\n\t\tconst baseClassName =\n\t\t\tLAYOUT_DEFINITIONS[ usedLayout?.type || 'default' ]?.className;\n\t\tconst splitBlockName = blockName.split( '/' );\n\t\tconst fullBlockName =\n\t\t\tsplitBlockName[ 0 ] === 'core'\n\t\t\t\t? splitBlockName.pop()\n\t\t\t\t: splitBlockName.join( '-' );\n\t\tconst compoundClassName = `wp-block-${ fullBlockName }-${ baseClassName }`;\n\t\tlayoutClassnames.push( baseClassName, compoundClassName );\n\t}\n\n\tconst hasGlobalPadding = useSelect(\n\t\t( select ) => {\n\t\t\treturn (\n\t\t\t\t( usedLayout?.inherit ||\n\t\t\t\t\tusedLayout?.contentSize ||\n\t\t\t\t\tusedLayout?.type === 'constrained' ) &&\n\t\t\t\tselect( blockEditorStore ).getSettings().__experimentalFeatures\n\t\t\t\t\t?.useRootPaddingAwareAlignments\n\t\t\t);\n\t\t},\n\t\t[ usedLayout?.contentSize, usedLayout?.inherit, usedLayout?.type ]\n\t);\n\n\tif ( hasGlobalPadding ) {\n\t\tlayoutClassnames.push( 'has-global-padding' );\n\t}\n\n\tif ( usedLayout?.orientation ) {\n\t\tlayoutClassnames.push( `is-${ kebabCase( usedLayout.orientation ) }` );\n\t}\n\n\tif ( usedLayout?.justifyContent ) {\n\t\tlayoutClassnames.push(\n\t\t\t`is-content-justification-${ kebabCase(\n\t\t\t\tusedLayout.justifyContent\n\t\t\t) }`\n\t\t);\n\t}\n\n\tif ( usedLayout?.flexWrap && usedLayout.flexWrap === 'nowrap' ) {\n\t\tlayoutClassnames.push( 'is-nowrap' );\n\t}\n\n\treturn layoutClassnames;\n}\n\n/**\n * Generates a CSS rule with the given block's layout styles.\n *\n * @param { Object } blockAttributes Block attributes.\n * @param { string } blockName Block name.\n * @param { string } selector A selector to use in generating the CSS rule.\n *\n * @return { string } CSS rule.\n */\nexport function useLayoutStyles( blockAttributes = {}, blockName, selector ) {\n\tconst { layout = {}, style = {} } = blockAttributes;\n\t// Update type for blocks using legacy layouts.\n\tconst usedLayout =\n\t\tlayout?.inherit || layout?.contentSize || layout?.wideSize\n\t\t\t? { ...layout, type: 'constrained' }\n\t\t\t: layout || {};\n\tconst fullLayoutType = getLayoutType( usedLayout?.type || 'default' );\n\tconst [ blockGapSupport ] = useSettings( 'spacing.blockGap' );\n\tconst hasBlockGapSupport = blockGapSupport !== null;\n\treturn fullLayoutType?.getLayoutStyle?.( {\n\t\tblockName,\n\t\tselector,\n\t\tlayout,\n\t\tstyle,\n\t\thasBlockGapSupport,\n\t} );\n}\n\nfunction LayoutPanelPure( {\n\tlayout,\n\tsetAttributes,\n\tname: blockName,\n\tclientId,\n} ) {\n\tconst settings = useBlockSettings( blockName );\n\t// Block settings come from theme.json under settings.[blockName].\n\tconst { layout: layoutSettings } = settings;\n\tconst { themeSupportsLayout } = useSelect( ( select ) => {\n\t\tconst { getSettings } = select( blockEditorStore );\n\t\treturn {\n\t\t\tthemeSupportsLayout: getSettings().supportsLayout,\n\t\t};\n\t}, [] );\n\tconst blockEditingMode = useBlockEditingMode();\n\n\tif ( blockEditingMode !== 'default' ) {\n\t\treturn null;\n\t}\n\n\t// Layout block support comes from the block's block.json.\n\tconst layoutBlockSupport = getBlockSupport(\n\t\tblockName,\n\t\tlayoutBlockSupportKey,\n\t\t{}\n\t);\n\tconst blockSupportAndThemeSettings = {\n\t\t...layoutSettings,\n\t\t...layoutBlockSupport,\n\t};\n\tconst {\n\t\tallowSwitching,\n\t\tallowEditing = true,\n\t\tallowInheriting = true,\n\t\tdefault: defaultBlockLayout,\n\t} = blockSupportAndThemeSettings;\n\n\tif ( ! allowEditing ) {\n\t\treturn null;\n\t}\n\n\t/*\n\t * Try to find the layout type from either the\n\t * block's layout settings or any saved layout config.\n\t */\n\tconst blockSupportAndLayout = {\n\t\t...layoutBlockSupport,\n\t\t...layout,\n\t};\n\tconst { type, default: { type: defaultType = 'default' } = {} } =\n\t\tblockSupportAndLayout;\n\tconst blockLayoutType = type || defaultType;\n\n\t// Only show the inherit toggle if it's supported,\n\t// and either the default / flow or the constrained layout type is in use, as the toggle switches from one to the other.\n\tconst showInheritToggle = !! (\n\t\tallowInheriting &&\n\t\t( ! blockLayoutType ||\n\t\t\tblockLayoutType === 'default' ||\n\t\t\tblockLayoutType === 'constrained' ||\n\t\t\tblockSupportAndLayout.inherit )\n\t);\n\n\tconst usedLayout = layout || defaultBlockLayout || {};\n\tconst { inherit = false, contentSize = null } = usedLayout;\n\t/**\n\t * `themeSupportsLayout` is only relevant to the `default/flow` or\n\t * `constrained` layouts and it should not be taken into account when other\n\t * `layout` types are used.\n\t */\n\tif (\n\t\t( blockLayoutType === 'default' ||\n\t\t\tblockLayoutType === 'constrained' ) &&\n\t\t! themeSupportsLayout\n\t) {\n\t\treturn null;\n\t}\n\tconst layoutType = getLayoutType( blockLayoutType );\n\tconst constrainedType = getLayoutType( 'constrained' );\n\tconst displayControlsForLegacyLayouts =\n\t\t! usedLayout.type && ( contentSize || inherit );\n\tconst hasContentSizeOrLegacySettings = !! inherit || !! contentSize;\n\n\tconst onChangeType = ( newType ) =>\n\t\tsetAttributes( { layout: { type: newType } } );\n\tconst onChangeLayout = ( newLayout ) =>\n\t\tsetAttributes( { layout: newLayout } );\n\n\treturn (\n\t\t<>\n\t\t\t<InspectorControls>\n\t\t\t\t<PanelBody title={ __( 'Layout' ) }>\n\t\t\t\t\t{ showInheritToggle && (\n\t\t\t\t\t\t<>\n\t\t\t\t\t\t\t<ToggleControl\n\t\t\t\t\t\t\t\t__nextHasNoMarginBottom\n\t\t\t\t\t\t\t\tlabel={ __( 'Inner blocks use content width' ) }\n\t\t\t\t\t\t\t\tchecked={\n\t\t\t\t\t\t\t\t\tlayoutType?.name === 'constrained' ||\n\t\t\t\t\t\t\t\t\thasContentSizeOrLegacySettings\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tonChange={ () =>\n\t\t\t\t\t\t\t\t\tsetAttributes( {\n\t\t\t\t\t\t\t\t\t\tlayout: {\n\t\t\t\t\t\t\t\t\t\t\ttype:\n\t\t\t\t\t\t\t\t\t\t\t\tlayoutType?.name ===\n\t\t\t\t\t\t\t\t\t\t\t\t\t'constrained' ||\n\t\t\t\t\t\t\t\t\t\t\t\thasContentSizeOrLegacySettings\n\t\t\t\t\t\t\t\t\t\t\t\t\t? 'default'\n\t\t\t\t\t\t\t\t\t\t\t\t\t: 'constrained',\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\thelp={\n\t\t\t\t\t\t\t\t\tlayoutType?.name === 'constrained' ||\n\t\t\t\t\t\t\t\t\thasContentSizeOrLegacySettings\n\t\t\t\t\t\t\t\t\t\t? __(\n\t\t\t\t\t\t\t\t\t\t\t\t'Nested blocks use content width with options for full and wide widths.'\n\t\t\t\t\t\t\t\t\t\t )\n\t\t\t\t\t\t\t\t\t\t: __(\n\t\t\t\t\t\t\t\t\t\t\t\t'Nested blocks will fill the width of this container. Toggle to constrain.'\n\t\t\t\t\t\t\t\t\t\t )\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t</>\n\t\t\t\t\t) }\n\n\t\t\t\t\t{ ! inherit && allowSwitching && (\n\t\t\t\t\t\t<LayoutTypeSwitcher\n\t\t\t\t\t\t\ttype={ blockLayoutType }\n\t\t\t\t\t\t\tonChange={ onChangeType }\n\t\t\t\t\t\t/>\n\t\t\t\t\t) }\n\n\t\t\t\t\t{ layoutType && layoutType.name !== 'default' && (\n\t\t\t\t\t\t<layoutType.inspectorControls\n\t\t\t\t\t\t\tlayout={ usedLayout }\n\t\t\t\t\t\t\tonChange={ onChangeLayout }\n\t\t\t\t\t\t\tlayoutBlockSupport={ blockSupportAndThemeSettings }\n\t\t\t\t\t\t\tname={ blockName }\n\t\t\t\t\t\t\tclientId={ clientId }\n\t\t\t\t\t\t/>\n\t\t\t\t\t) }\n\t\t\t\t\t{ constrainedType && displayControlsForLegacyLayouts && (\n\t\t\t\t\t\t<constrainedType.inspectorControls\n\t\t\t\t\t\t\tlayout={ usedLayout }\n\t\t\t\t\t\t\tonChange={ onChangeLayout }\n\t\t\t\t\t\t\tlayoutBlockSupport={ blockSupportAndThemeSettings }\n\t\t\t\t\t\t\tname={ blockName }\n\t\t\t\t\t\t\tclientId={ clientId }\n\t\t\t\t\t\t/>\n\t\t\t\t\t) }\n\t\t\t\t</PanelBody>\n\t\t\t</InspectorControls>\n\t\t\t{ ! inherit && layoutType && (\n\t\t\t\t<layoutType.toolBarControls\n\t\t\t\t\tlayout={ usedLayout }\n\t\t\t\t\tonChange={ onChangeLayout }\n\t\t\t\t\tlayoutBlockSupport={ layoutBlockSupport }\n\t\t\t\t\tname={ blockName }\n\t\t\t\t\tclientId={ clientId }\n\t\t\t\t/>\n\t\t\t) }\n\t\t</>\n\t);\n}\n\nexport default {\n\tshareWithChildBlocks: true,\n\tedit: LayoutPanelPure,\n\tattributeKeys: [ 'layout' ],\n\thasSupport( name ) {\n\t\treturn hasLayoutBlockSupport( name );\n\t},\n};\n\nfunction LayoutTypeSwitcher( { type, onChange } ) {\n\treturn (\n\t\t<ToggleGroupControl\n\t\t\t__next40pxDefaultSize\n\t\t\tisBlock\n\t\t\tlabel={ __( 'Layout type' ) }\n\t\t\t__nextHasNoMarginBottom\n\t\t\thideLabelFromVision\n\t\t\tisAdaptiveWidth\n\t\t\tvalue={ type }\n\t\t\tonChange={ onChange }\n\t\t>\n\t\t\t{ getLayoutTypes().map( ( { name, label } ) => {\n\t\t\t\treturn (\n\t\t\t\t\t<ToggleGroupControlOption\n\t\t\t\t\t\tkey={ name }\n\t\t\t\t\t\tvalue={ name }\n\t\t\t\t\t\tlabel={ label }\n\t\t\t\t\t/>\n\t\t\t\t);\n\t\t\t} ) }\n\t\t</ToggleGroupControl>\n\t);\n}\n\n/**\n * Filters registered block settings, extending attributes to include `layout`.\n *\n * @param {Object} settings Original block settings.\n *\n * @return {Object} Filtered block settings.\n */\nexport function addAttribute( settings ) {\n\tif ( 'type' in ( settings.attributes?.layout ?? {} ) ) {\n\t\treturn settings;\n\t}\n\tif ( hasLayoutBlockSupport( settings ) ) {\n\t\tsettings.attributes = {\n\t\t\t...settings.attributes,\n\t\t\tlayout: {\n\t\t\t\ttype: 'object',\n\t\t\t},\n\t\t};\n\t}\n\n\treturn settings;\n}\n\nfunction BlockWithLayoutStyles( {\n\tblock: BlockListBlock,\n\tprops,\n\tblockGapSupport,\n\tlayoutClasses,\n} ) {\n\tconst { name, attributes } = props;\n\tconst id = useInstanceId( BlockListBlock );\n\tconst { layout } = attributes;\n\tconst { default: defaultBlockLayout } =\n\t\tgetBlockSupport( name, layoutBlockSupportKey ) || {};\n\tconst usedLayout =\n\t\tlayout?.inherit || layout?.contentSize || layout?.wideSize\n\t\t\t? { ...layout, type: 'constrained' }\n\t\t\t: layout || defaultBlockLayout || {};\n\n\tconst selectorPrefix = `wp-container-${ kebabCase( name ) }-is-layout-`;\n\t// Higher specificity to override defaults from theme.json.\n\tconst selector = `.${ selectorPrefix }${ id }`;\n\tconst hasBlockGapSupport = blockGapSupport !== null;\n\n\t// Get CSS string for the current layout type.\n\t// The CSS and `style` element is only output if it is not empty.\n\tconst fullLayoutType = getLayoutType( usedLayout?.type || 'default' );\n\tconst css = fullLayoutType?.getLayoutStyle?.( {\n\t\tblockName: name,\n\t\tselector,\n\t\tlayout: usedLayout,\n\t\tstyle: attributes?.style,\n\t\thasBlockGapSupport,\n\t} );\n\n\t// Attach a `wp-container-` id-based class name as well as a layout class name such as `is-layout-flex`.\n\tconst layoutClassNames = clsx(\n\t\t{\n\t\t\t[ `${ selectorPrefix }${ id }` ]: !! css, // Only attach a container class if there is generated CSS to be attached.\n\t\t},\n\t\tlayoutClasses\n\t);\n\n\tuseStyleOverride( { css } );\n\n\treturn (\n\t\t<BlockListBlock\n\t\t\t{ ...props }\n\t\t\t__unstableLayoutClassNames={ layoutClassNames }\n\t\t/>\n\t);\n}\n\n/**\n * Override the default block element to add the layout styles.\n *\n * @param {Function} BlockListBlock Original component.\n *\n * @return {Function} Wrapped component.\n */\nexport const withLayoutStyles = createHigherOrderComponent(\n\t( BlockListBlock ) => ( props ) => {\n\t\tconst { clientId, name, attributes } = props;\n\t\tconst blockSupportsLayout = hasLayoutBlockSupport( name );\n\t\tconst layoutClasses = useLayoutClasses( attributes, name );\n\t\tconst extraProps = useSelect(\n\t\t\t( select ) => {\n\t\t\t\t// The callback returns early to avoid block editor subscription.\n\t\t\t\tif ( ! blockSupportsLayout ) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tconst { getSettings, getBlockSettings } = unlock(\n\t\t\t\t\tselect( blockEditorStore )\n\t\t\t\t);\n\t\t\t\tconst { disableLayoutStyles } = getSettings();\n\n\t\t\t\tif ( disableLayoutStyles ) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tconst [ blockGapSupport ] = getBlockSettings(\n\t\t\t\t\tclientId,\n\t\t\t\t\t'spacing.blockGap'\n\t\t\t\t);\n\n\t\t\t\treturn { blockGapSupport };\n\t\t\t},\n\t\t\t[ blockSupportsLayout, clientId ]\n\t\t);\n\n\t\tif ( ! extraProps ) {\n\t\t\treturn (\n\t\t\t\t<BlockListBlock\n\t\t\t\t\t{ ...props }\n\t\t\t\t\t__unstableLayoutClassNames={\n\t\t\t\t\t\tblockSupportsLayout ? layoutClasses : undefined\n\t\t\t\t\t}\n\t\t\t\t/>\n\t\t\t);\n\t\t}\n\n\t\treturn (\n\t\t\t<BlockWithLayoutStyles\n\t\t\t\tblock={ BlockListBlock }\n\t\t\t\tprops={ props }\n\t\t\t\tlayoutClasses={ layoutClasses }\n\t\t\t\t{ ...extraProps }\n\t\t\t/>\n\t\t);\n\t},\n\t'withLayoutStyles'\n);\n\naddFilter(\n\t'blocks.registerBlockType',\n\t'core/layout/addAttribute',\n\taddAttribute\n);\naddFilter(\n\t'editor.BlockListBlock',\n\t'core/editor/layout/with-layout-styles',\n\twithLayoutStyles\n);\n"],"mappings":"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","ignoreList":[]}
@@ -93,17 +93,18 @@ export const withBlockBindingSupport = createHigherOrderComponent(BlockEdit => p
93
93
  const sources = useSelect(select => unlock(select(blocksStore)).getAllBlockBindingsSources());
94
94
  const {
95
95
  name,
96
- clientId
96
+ clientId,
97
+ context,
98
+ setAttributes
97
99
  } = props;
98
- const hasParentPattern = !!props.context['pattern/overrides'];
99
- const hasPatternOverridesDefaultBinding = props.attributes.metadata?.bindings?.[DEFAULT_ATTRIBUTE]?.source === 'core/pattern-overrides';
100
100
  const blockBindings = useMemo(() => replacePatternOverrideDefaultBindings(name, props.attributes.metadata?.bindings), [props.attributes.metadata?.bindings, name]);
101
101
 
102
102
  // While this hook doesn't directly call any selectors, `useSelect` is
103
103
  // used purposely here to ensure `boundAttributes` is updated whenever
104
104
  // there are attribute updates.
105
105
  // `source.getValues` may also call a selector via `registry.select`.
106
- const boundAttributes = useSelect(() => {
106
+ const updatedContext = {};
107
+ const boundAttributes = useSelect(select => {
107
108
  if (!blockBindings) {
108
109
  return;
109
110
  }
@@ -118,6 +119,11 @@ export const withBlockBindingSupport = createHigherOrderComponent(BlockEdit => p
118
119
  if (!source || !canBindAttribute(name, attributeName)) {
119
120
  continue;
120
121
  }
122
+
123
+ // Populate context.
124
+ for (const key of source.usesContext || []) {
125
+ updatedContext[key] = blockContext[key];
126
+ }
121
127
  blockBindingsBySource.set(source, {
122
128
  ...blockBindingsBySource.get(source),
123
129
  [attributeName]: {
@@ -127,14 +133,6 @@ export const withBlockBindingSupport = createHigherOrderComponent(BlockEdit => p
127
133
  }
128
134
  if (blockBindingsBySource.size) {
129
135
  for (const [source, bindings] of blockBindingsBySource) {
130
- // Populate context.
131
- const context = {};
132
- if (source.usesContext?.length) {
133
- for (const key of source.usesContext) {
134
- context[key] = blockContext[key];
135
- }
136
- }
137
-
138
136
  // Get values in batch if the source supports it.
139
137
  let values = {};
140
138
  if (!source.getValues) {
@@ -144,8 +142,8 @@ export const withBlockBindingSupport = createHigherOrderComponent(BlockEdit => p
144
142
  });
145
143
  } else {
146
144
  values = source.getValues({
147
- registry,
148
- context,
145
+ select,
146
+ context: updatedContext,
149
147
  clientId,
150
148
  bindings
151
149
  });
@@ -161,10 +159,9 @@ export const withBlockBindingSupport = createHigherOrderComponent(BlockEdit => p
161
159
  }
162
160
  }
163
161
  return attributes;
164
- }, [blockBindings, name, clientId, blockContext, registry, sources]);
165
- const {
166
- setAttributes
167
- } = props;
162
+ }, [blockBindings, name, clientId, updatedContext, sources]);
163
+ const hasParentPattern = !!updatedContext['pattern/overrides'];
164
+ const hasPatternOverridesDefaultBinding = props.attributes.metadata?.bindings?.[DEFAULT_ATTRIBUTE]?.source === 'core/pattern-overrides';
168
165
  const _setAttributes = useCallback(nextAttributes => {
169
166
  registry.batch(() => {
170
167
  if (!blockBindings) {
@@ -197,16 +194,10 @@ export const withBlockBindingSupport = createHigherOrderComponent(BlockEdit => p
197
194
  }
198
195
  if (blockBindingsBySource.size) {
199
196
  for (const [source, bindings] of blockBindingsBySource) {
200
- // Populate context.
201
- const context = {};
202
- if (source.usesContext?.length) {
203
- for (const key of source.usesContext) {
204
- context[key] = blockContext[key];
205
- }
206
- }
207
197
  source.setValues({
208
- registry,
209
- context,
198
+ select: registry.select,
199
+ dispatch: registry.dispatch,
200
+ context: updatedContext,
210
201
  clientId,
211
202
  bindings
212
203
  });
@@ -224,7 +215,7 @@ export const withBlockBindingSupport = createHigherOrderComponent(BlockEdit => p
224
215
  setAttributes(keptAttributes);
225
216
  }
226
217
  });
227
- }, [registry, blockBindings, name, clientId, blockContext, setAttributes, sources, hasPatternOverridesDefaultBinding, hasParentPattern]);
218
+ }, [registry, blockBindings, name, clientId, updatedContext, setAttributes, sources, hasPatternOverridesDefaultBinding, hasParentPattern]);
228
219
  return /*#__PURE__*/_jsx(_Fragment, {
229
220
  children: /*#__PURE__*/_jsx(BlockEdit, {
230
221
  ...props,
@@ -232,7 +223,11 @@ export const withBlockBindingSupport = createHigherOrderComponent(BlockEdit => p
232
223
  ...props.attributes,
233
224
  ...boundAttributes
234
225
  },
235
- setAttributes: _setAttributes
226
+ setAttributes: _setAttributes,
227
+ context: {
228
+ ...context,
229
+ ...updatedContext
230
+ }
236
231
  })
237
232
  });
238
233
  }, 'withBlockBindingSupport');