@wordpress/block-editor 14.15.0 → 14.17.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (89) hide show
  1. package/CHANGELOG.md +4 -0
  2. package/build/components/background-image-control/index.js +18 -10
  3. package/build/components/background-image-control/index.js.map +1 -1
  4. package/build/components/block-breadcrumb/index.js +3 -1
  5. package/build/components/block-breadcrumb/index.js.map +1 -1
  6. package/build/components/block-list/block.js +4 -2
  7. package/build/components/block-list/block.js.map +1 -1
  8. package/build/components/block-list/use-block-props/use-firefox-draggable-compatibility.js +14 -11
  9. package/build/components/block-list/use-block-props/use-firefox-draggable-compatibility.js.map +1 -1
  10. package/build/components/block-switcher/preview-block-popover.js +1 -1
  11. package/build/components/block-switcher/preview-block-popover.js.map +1 -1
  12. package/build/components/block-tools/index.js +9 -0
  13. package/build/components/block-tools/index.js.map +1 -1
  14. package/build/components/block-tools/use-show-block-tools.js +3 -2
  15. package/build/components/block-tools/use-show-block-tools.js.map +1 -1
  16. package/build/components/global-styles/border-panel.js +4 -8
  17. package/build/components/global-styles/border-panel.js.map +1 -1
  18. package/build/components/inserter/block-patterns-explorer/pattern-list.js +3 -0
  19. package/build/components/inserter/block-patterns-explorer/pattern-list.js.map +1 -1
  20. package/build/components/inserter/media-tab/media-preview.js +1 -7
  21. package/build/components/inserter/media-tab/media-preview.js.map +1 -1
  22. package/build/components/keyboard-shortcuts/index.js +9 -0
  23. package/build/components/keyboard-shortcuts/index.js.map +1 -1
  24. package/build/components/link-control/index.js +2 -0
  25. package/build/components/link-control/index.js.map +1 -1
  26. package/build/components/link-control/search-input.js +2 -3
  27. package/build/components/link-control/search-input.js.map +1 -1
  28. package/build/components/list-view/block.js +9 -0
  29. package/build/components/list-view/block.js.map +1 -1
  30. package/build/components/writing-flow/use-tab-nav.js +21 -14
  31. package/build/components/writing-flow/use-tab-nav.js.map +1 -1
  32. package/build/hooks/spacing-visualizer.js +14 -8
  33. package/build/hooks/spacing-visualizer.js.map +1 -1
  34. package/build-module/components/background-image-control/index.js +19 -11
  35. package/build-module/components/background-image-control/index.js.map +1 -1
  36. package/build-module/components/block-breadcrumb/index.js +3 -1
  37. package/build-module/components/block-breadcrumb/index.js.map +1 -1
  38. package/build-module/components/block-list/block.js +4 -2
  39. package/build-module/components/block-list/block.js.map +1 -1
  40. package/build-module/components/block-list/use-block-props/use-firefox-draggable-compatibility.js +14 -11
  41. package/build-module/components/block-list/use-block-props/use-firefox-draggable-compatibility.js.map +1 -1
  42. package/build-module/components/block-switcher/preview-block-popover.js +1 -1
  43. package/build-module/components/block-switcher/preview-block-popover.js.map +1 -1
  44. package/build-module/components/block-tools/index.js +9 -0
  45. package/build-module/components/block-tools/index.js.map +1 -1
  46. package/build-module/components/block-tools/use-show-block-tools.js +3 -2
  47. package/build-module/components/block-tools/use-show-block-tools.js.map +1 -1
  48. package/build-module/components/global-styles/border-panel.js +5 -9
  49. package/build-module/components/global-styles/border-panel.js.map +1 -1
  50. package/build-module/components/inserter/block-patterns-explorer/pattern-list.js +4 -1
  51. package/build-module/components/inserter/block-patterns-explorer/pattern-list.js.map +1 -1
  52. package/build-module/components/inserter/media-tab/media-preview.js +1 -7
  53. package/build-module/components/inserter/media-tab/media-preview.js.map +1 -1
  54. package/build-module/components/keyboard-shortcuts/index.js +9 -0
  55. package/build-module/components/keyboard-shortcuts/index.js.map +1 -1
  56. package/build-module/components/link-control/index.js +4 -1
  57. package/build-module/components/link-control/index.js.map +1 -1
  58. package/build-module/components/link-control/search-input.js +2 -3
  59. package/build-module/components/link-control/search-input.js.map +1 -1
  60. package/build-module/components/list-view/block.js +9 -0
  61. package/build-module/components/list-view/block.js.map +1 -1
  62. package/build-module/components/writing-flow/use-tab-nav.js +21 -14
  63. package/build-module/components/writing-flow/use-tab-nav.js.map +1 -1
  64. package/build-module/hooks/spacing-visualizer.js +15 -9
  65. package/build-module/hooks/spacing-visualizer.js.map +1 -1
  66. package/build-style/style-rtl.css +3 -6
  67. package/build-style/style.css +3 -6
  68. package/package.json +34 -34
  69. package/src/components/background-image-control/index.js +22 -7
  70. package/src/components/block-breadcrumb/index.js +1 -1
  71. package/src/components/block-breadcrumb/test/__snapshots__/index.js.snap +3 -1
  72. package/src/components/block-list/block.js +6 -2
  73. package/src/components/block-list/use-block-props/use-firefox-draggable-compatibility.js +14 -11
  74. package/src/components/block-switcher/preview-block-popover.js +4 -1
  75. package/src/components/block-tools/index.js +9 -0
  76. package/src/components/block-tools/use-show-block-tools.js +2 -0
  77. package/src/components/global-styles/border-panel.js +5 -8
  78. package/src/components/global-styles/style.scss +2 -5
  79. package/src/components/inserter/block-patterns-explorer/pattern-list.js +7 -0
  80. package/src/components/inserter/media-tab/media-preview.js +1 -8
  81. package/src/components/inserter/style.scss +1 -1
  82. package/src/components/keyboard-shortcuts/index.js +12 -0
  83. package/src/components/link-control/index.js +6 -1
  84. package/src/components/link-control/search-input.js +2 -4
  85. package/src/components/link-control/test/index.js +46 -46
  86. package/src/components/list-view/block.js +10 -0
  87. package/src/components/media-replace-flow/test/index.js +1 -1
  88. package/src/components/writing-flow/use-tab-nav.js +22 -17
  89. package/src/hooks/spacing-visualizer.js +14 -17
@@ -1 +1 @@
1
- {"version":3,"names":["forwardRef","useState","__","URLInput","LinkControlSearchResults","CREATE_TYPE","useSearchHandler","deprecated","jsx","_jsx","jsxs","_jsxs","noopSearchHandler","Promise","resolve","noop","LinkControlSearchInput","value","children","currentLink","className","placeholder","withCreateSuggestion","onCreateSuggestion","onChange","onSelect","showSuggestions","renderSuggestions","props","fetchSuggestions","allowDirectEntry","showInitialSuggestions","suggestionsQuery","withURLSuggestion","createSuggestionButtonText","hideLabelFromVision","suffix","ref","genericSearchHandler","searchHandler","focusedSuggestion","setFocusedSuggestion","onInputChange","selection","suggestion","handleRenderSuggestions","handleSuggestionClick","onSuggestionSelected","selectedSuggestion","type","title","url","e","Object","keys","length","id","restLinkProps","inputLabel","disableSuggestions","label","__experimentalRenderSuggestions","__experimentalFetchLinkSuggestions","__experimentalHandleURLSuggestions","__experimentalShowInitialSuggestions","onSubmit","event","hasSuggestion","trim","preventDefault","__experimentalLinkControlSearchInput","since"],"sources":["@wordpress/block-editor/src/components/link-control/search-input.js"],"sourcesContent":["/**\n * WordPress dependencies\n */\nimport { forwardRef, useState } from '@wordpress/element';\nimport { __ } from '@wordpress/i18n';\n\n/**\n * Internal dependencies\n */\nimport { URLInput } from '../';\nimport LinkControlSearchResults from './search-results';\nimport { CREATE_TYPE } from './constants';\nimport useSearchHandler from './use-search-handler';\nimport deprecated from '@wordpress/deprecated';\n\n// Must be a function as otherwise URLInput will default\n// to the fetchLinkSuggestions passed in block editor settings\n// which will cause an unintended http request.\nconst noopSearchHandler = () => Promise.resolve( [] );\n\nconst noop = () => {};\n\nconst LinkControlSearchInput = forwardRef(\n\t(\n\t\t{\n\t\t\tvalue,\n\t\t\tchildren,\n\t\t\tcurrentLink = {},\n\t\t\tclassName = null,\n\t\t\tplaceholder = null,\n\t\t\twithCreateSuggestion = false,\n\t\t\tonCreateSuggestion = noop,\n\t\t\tonChange = noop,\n\t\t\tonSelect = noop,\n\t\t\tshowSuggestions = true,\n\t\t\trenderSuggestions = ( props ) => (\n\t\t\t\t<LinkControlSearchResults { ...props } />\n\t\t\t),\n\t\t\tfetchSuggestions = null,\n\t\t\tallowDirectEntry = true,\n\t\t\tshowInitialSuggestions = false,\n\t\t\tsuggestionsQuery = {},\n\t\t\twithURLSuggestion = true,\n\t\t\tcreateSuggestionButtonText,\n\t\t\thideLabelFromVision = false,\n\t\t\tsuffix,\n\t\t},\n\t\tref\n\t) => {\n\t\tconst genericSearchHandler = useSearchHandler(\n\t\t\tsuggestionsQuery,\n\t\t\tallowDirectEntry,\n\t\t\twithCreateSuggestion,\n\t\t\twithURLSuggestion\n\t\t);\n\n\t\tconst searchHandler = showSuggestions\n\t\t\t? fetchSuggestions || genericSearchHandler\n\t\t\t: noopSearchHandler;\n\n\t\tconst [ focusedSuggestion, setFocusedSuggestion ] = useState();\n\n\t\t/**\n\t\t * Handles the user moving between different suggestions. Does not handle\n\t\t * choosing an individual item.\n\t\t *\n\t\t * @param {string} selection the url of the selected suggestion.\n\t\t * @param {Object} suggestion the suggestion object.\n\t\t */\n\t\tconst onInputChange = ( selection, suggestion ) => {\n\t\t\tonChange( selection );\n\t\t\tsetFocusedSuggestion( suggestion );\n\t\t};\n\n\t\tconst handleRenderSuggestions = ( props ) =>\n\t\t\trenderSuggestions( {\n\t\t\t\t...props,\n\t\t\t\twithCreateSuggestion,\n\t\t\t\tcreateSuggestionButtonText,\n\t\t\t\tsuggestionsQuery,\n\t\t\t\thandleSuggestionClick: ( suggestion ) => {\n\t\t\t\t\tif ( props.handleSuggestionClick ) {\n\t\t\t\t\t\tprops.handleSuggestionClick( suggestion );\n\t\t\t\t\t}\n\t\t\t\t\tonSuggestionSelected( suggestion );\n\t\t\t\t},\n\t\t\t} );\n\n\t\tconst onSuggestionSelected = async ( selectedSuggestion ) => {\n\t\t\tlet suggestion = selectedSuggestion;\n\t\t\tif ( CREATE_TYPE === selectedSuggestion.type ) {\n\t\t\t\t// Create a new page and call onSelect with the output from the onCreateSuggestion callback.\n\t\t\t\ttry {\n\t\t\t\t\tsuggestion = await onCreateSuggestion(\n\t\t\t\t\t\tselectedSuggestion.title\n\t\t\t\t\t);\n\t\t\t\t\tif ( suggestion?.url ) {\n\t\t\t\t\t\tonSelect( suggestion );\n\t\t\t\t\t}\n\t\t\t\t} catch ( e ) {}\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (\n\t\t\t\tallowDirectEntry ||\n\t\t\t\t( suggestion && Object.keys( suggestion ).length >= 1 )\n\t\t\t) {\n\t\t\t\tconst { id, url, ...restLinkProps } = currentLink ?? {};\n\t\t\t\tonSelect(\n\t\t\t\t\t// Some direct entries don't have types or IDs, and we still need to clear the previous ones.\n\t\t\t\t\t{ ...restLinkProps, ...suggestion },\n\t\t\t\t\tsuggestion\n\t\t\t\t);\n\t\t\t}\n\t\t};\n\n\t\tconst inputLabel = placeholder ?? __( 'Search or type URL' );\n\n\t\treturn (\n\t\t\t<div className=\"block-editor-link-control__search-input-container\">\n\t\t\t\t<URLInput\n\t\t\t\t\tdisableSuggestions={ currentLink?.url === value }\n\t\t\t\t\tlabel={ inputLabel }\n\t\t\t\t\thideLabelFromVision={ hideLabelFromVision }\n\t\t\t\t\tclassName={ className }\n\t\t\t\t\tvalue={ value }\n\t\t\t\t\tonChange={ onInputChange }\n\t\t\t\t\tplaceholder={ inputLabel }\n\t\t\t\t\t__experimentalRenderSuggestions={\n\t\t\t\t\t\tshowSuggestions ? handleRenderSuggestions : null\n\t\t\t\t\t}\n\t\t\t\t\t__experimentalFetchLinkSuggestions={ searchHandler }\n\t\t\t\t\t__experimentalHandleURLSuggestions\n\t\t\t\t\t__experimentalShowInitialSuggestions={\n\t\t\t\t\t\tshowInitialSuggestions\n\t\t\t\t\t}\n\t\t\t\t\tonSubmit={ ( suggestion, event ) => {\n\t\t\t\t\t\tconst hasSuggestion = suggestion || focusedSuggestion;\n\n\t\t\t\t\t\t// If there is no suggestion and the value (ie: any manually entered URL) is empty\n\t\t\t\t\t\t// then don't allow submission otherwise we get empty links.\n\t\t\t\t\t\tif ( ! hasSuggestion && ! value?.trim()?.length ) {\n\t\t\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tonSuggestionSelected(\n\t\t\t\t\t\t\t\thasSuggestion || { url: value }\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\tref={ ref }\n\t\t\t\t\tsuffix={ suffix }\n\t\t\t\t/>\n\t\t\t\t{ children }\n\t\t\t</div>\n\t\t);\n\t}\n);\n\nexport default LinkControlSearchInput;\n\nexport const __experimentalLinkControlSearchInput = ( props ) => {\n\tdeprecated( 'wp.blockEditor.__experimentalLinkControlSearchInput', {\n\t\tsince: '6.8',\n\t} );\n\n\treturn <LinkControlSearchInput { ...props } />;\n};\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["forwardRef","useState","__","URLInput","LinkControlSearchResults","CREATE_TYPE","useSearchHandler","deprecated","jsx","_jsx","jsxs","_jsxs","noopSearchHandler","Promise","resolve","noop","LinkControlSearchInput","value","children","currentLink","className","placeholder","withCreateSuggestion","onCreateSuggestion","onChange","onSelect","showSuggestions","renderSuggestions","props","fetchSuggestions","allowDirectEntry","showInitialSuggestions","suggestionsQuery","withURLSuggestion","createSuggestionButtonText","hideLabelFromVision","suffix","ref","genericSearchHandler","searchHandler","focusedSuggestion","setFocusedSuggestion","onInputChange","selection","suggestion","handleRenderSuggestions","handleSuggestionClick","onSuggestionSelected","selectedSuggestion","type","title","url","e","Object","keys","length","id","restLinkProps","disableSuggestions","label","__experimentalRenderSuggestions","__experimentalFetchLinkSuggestions","__experimentalHandleURLSuggestions","__experimentalShowInitialSuggestions","onSubmit","event","hasSuggestion","trim","preventDefault","__experimentalLinkControlSearchInput","since"],"sources":["@wordpress/block-editor/src/components/link-control/search-input.js"],"sourcesContent":["/**\n * WordPress dependencies\n */\nimport { forwardRef, useState } from '@wordpress/element';\nimport { __ } from '@wordpress/i18n';\n\n/**\n * Internal dependencies\n */\nimport { URLInput } from '../';\nimport LinkControlSearchResults from './search-results';\nimport { CREATE_TYPE } from './constants';\nimport useSearchHandler from './use-search-handler';\nimport deprecated from '@wordpress/deprecated';\n\n// Must be a function as otherwise URLInput will default\n// to the fetchLinkSuggestions passed in block editor settings\n// which will cause an unintended http request.\nconst noopSearchHandler = () => Promise.resolve( [] );\n\nconst noop = () => {};\n\nconst LinkControlSearchInput = forwardRef(\n\t(\n\t\t{\n\t\t\tvalue,\n\t\t\tchildren,\n\t\t\tcurrentLink = {},\n\t\t\tclassName = null,\n\t\t\tplaceholder = null,\n\t\t\twithCreateSuggestion = false,\n\t\t\tonCreateSuggestion = noop,\n\t\t\tonChange = noop,\n\t\t\tonSelect = noop,\n\t\t\tshowSuggestions = true,\n\t\t\trenderSuggestions = ( props ) => (\n\t\t\t\t<LinkControlSearchResults { ...props } />\n\t\t\t),\n\t\t\tfetchSuggestions = null,\n\t\t\tallowDirectEntry = true,\n\t\t\tshowInitialSuggestions = false,\n\t\t\tsuggestionsQuery = {},\n\t\t\twithURLSuggestion = true,\n\t\t\tcreateSuggestionButtonText,\n\t\t\thideLabelFromVision = false,\n\t\t\tsuffix,\n\t\t},\n\t\tref\n\t) => {\n\t\tconst genericSearchHandler = useSearchHandler(\n\t\t\tsuggestionsQuery,\n\t\t\tallowDirectEntry,\n\t\t\twithCreateSuggestion,\n\t\t\twithURLSuggestion\n\t\t);\n\n\t\tconst searchHandler = showSuggestions\n\t\t\t? fetchSuggestions || genericSearchHandler\n\t\t\t: noopSearchHandler;\n\n\t\tconst [ focusedSuggestion, setFocusedSuggestion ] = useState();\n\n\t\t/**\n\t\t * Handles the user moving between different suggestions. Does not handle\n\t\t * choosing an individual item.\n\t\t *\n\t\t * @param {string} selection the url of the selected suggestion.\n\t\t * @param {Object} suggestion the suggestion object.\n\t\t */\n\t\tconst onInputChange = ( selection, suggestion ) => {\n\t\t\tonChange( selection );\n\t\t\tsetFocusedSuggestion( suggestion );\n\t\t};\n\n\t\tconst handleRenderSuggestions = ( props ) =>\n\t\t\trenderSuggestions( {\n\t\t\t\t...props,\n\t\t\t\twithCreateSuggestion,\n\t\t\t\tcreateSuggestionButtonText,\n\t\t\t\tsuggestionsQuery,\n\t\t\t\thandleSuggestionClick: ( suggestion ) => {\n\t\t\t\t\tif ( props.handleSuggestionClick ) {\n\t\t\t\t\t\tprops.handleSuggestionClick( suggestion );\n\t\t\t\t\t}\n\t\t\t\t\tonSuggestionSelected( suggestion );\n\t\t\t\t},\n\t\t\t} );\n\n\t\tconst onSuggestionSelected = async ( selectedSuggestion ) => {\n\t\t\tlet suggestion = selectedSuggestion;\n\t\t\tif ( CREATE_TYPE === selectedSuggestion.type ) {\n\t\t\t\t// Create a new page and call onSelect with the output from the onCreateSuggestion callback.\n\t\t\t\ttry {\n\t\t\t\t\tsuggestion = await onCreateSuggestion(\n\t\t\t\t\t\tselectedSuggestion.title\n\t\t\t\t\t);\n\t\t\t\t\tif ( suggestion?.url ) {\n\t\t\t\t\t\tonSelect( suggestion );\n\t\t\t\t\t}\n\t\t\t\t} catch ( e ) {}\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (\n\t\t\t\tallowDirectEntry ||\n\t\t\t\t( suggestion && Object.keys( suggestion ).length >= 1 )\n\t\t\t) {\n\t\t\t\tconst { id, url, ...restLinkProps } = currentLink ?? {};\n\t\t\t\tonSelect(\n\t\t\t\t\t// Some direct entries don't have types or IDs, and we still need to clear the previous ones.\n\t\t\t\t\t{ ...restLinkProps, ...suggestion },\n\t\t\t\t\tsuggestion\n\t\t\t\t);\n\t\t\t}\n\t\t};\n\n\t\treturn (\n\t\t\t<div className=\"block-editor-link-control__search-input-container\">\n\t\t\t\t<URLInput\n\t\t\t\t\tdisableSuggestions={ currentLink?.url === value }\n\t\t\t\t\tlabel={ __( 'Link' ) }\n\t\t\t\t\thideLabelFromVision={ hideLabelFromVision }\n\t\t\t\t\tclassName={ className }\n\t\t\t\t\tvalue={ value }\n\t\t\t\t\tonChange={ onInputChange }\n\t\t\t\t\tplaceholder={ placeholder ?? __( 'Search or type URL' ) }\n\t\t\t\t\t__experimentalRenderSuggestions={\n\t\t\t\t\t\tshowSuggestions ? handleRenderSuggestions : null\n\t\t\t\t\t}\n\t\t\t\t\t__experimentalFetchLinkSuggestions={ searchHandler }\n\t\t\t\t\t__experimentalHandleURLSuggestions\n\t\t\t\t\t__experimentalShowInitialSuggestions={\n\t\t\t\t\t\tshowInitialSuggestions\n\t\t\t\t\t}\n\t\t\t\t\tonSubmit={ ( suggestion, event ) => {\n\t\t\t\t\t\tconst hasSuggestion = suggestion || focusedSuggestion;\n\n\t\t\t\t\t\t// If there is no suggestion and the value (ie: any manually entered URL) is empty\n\t\t\t\t\t\t// then don't allow submission otherwise we get empty links.\n\t\t\t\t\t\tif ( ! hasSuggestion && ! value?.trim()?.length ) {\n\t\t\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tonSuggestionSelected(\n\t\t\t\t\t\t\t\thasSuggestion || { url: value }\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\tref={ ref }\n\t\t\t\t\tsuffix={ suffix }\n\t\t\t\t/>\n\t\t\t\t{ children }\n\t\t\t</div>\n\t\t);\n\t}\n);\n\nexport default LinkControlSearchInput;\n\nexport const __experimentalLinkControlSearchInput = ( props ) => {\n\tdeprecated( 'wp.blockEditor.__experimentalLinkControlSearchInput', {\n\t\tsince: '6.8',\n\t} );\n\n\treturn <LinkControlSearchInput { ...props } />;\n};\n"],"mappings":"AAAA;AACA;AACA;AACA,SAASA,UAAU,EAAEC,QAAQ,QAAQ,oBAAoB;AACzD,SAASC,EAAE,QAAQ,iBAAiB;;AAEpC;AACA;AACA;AACA,SAASC,QAAQ,QAAQ,KAAK;AAC9B,OAAOC,wBAAwB,MAAM,kBAAkB;AACvD,SAASC,WAAW,QAAQ,aAAa;AACzC,OAAOC,gBAAgB,MAAM,sBAAsB;AACnD,OAAOC,UAAU,MAAM,uBAAuB;;AAE9C;AACA;AACA;AAAA,SAAAC,GAAA,IAAAC,IAAA,EAAAC,IAAA,IAAAC,KAAA;AACA,MAAMC,iBAAiB,GAAGA,CAAA,KAAMC,OAAO,CAACC,OAAO,CAAE,EAAG,CAAC;AAErD,MAAMC,IAAI,GAAGA,CAAA,KAAM,CAAC,CAAC;AAErB,MAAMC,sBAAsB,GAAGhB,UAAU,CACxC,CACC;EACCiB,KAAK;EACLC,QAAQ;EACRC,WAAW,GAAG,CAAC,CAAC;EAChBC,SAAS,GAAG,IAAI;EAChBC,WAAW,GAAG,IAAI;EAClBC,oBAAoB,GAAG,KAAK;EAC5BC,kBAAkB,GAAGR,IAAI;EACzBS,QAAQ,GAAGT,IAAI;EACfU,QAAQ,GAAGV,IAAI;EACfW,eAAe,GAAG,IAAI;EACtBC,iBAAiB,GAAKC,KAAK,iBAC1BnB,IAAA,CAACL,wBAAwB;IAAA,GAAMwB;EAAK,CAAI,CACxC;EACDC,gBAAgB,GAAG,IAAI;EACvBC,gBAAgB,GAAG,IAAI;EACvBC,sBAAsB,GAAG,KAAK;EAC9BC,gBAAgB,GAAG,CAAC,CAAC;EACrBC,iBAAiB,GAAG,IAAI;EACxBC,0BAA0B;EAC1BC,mBAAmB,GAAG,KAAK;EAC3BC;AACD,CAAC,EACDC,GAAG,KACC;EACJ,MAAMC,oBAAoB,GAAGhC,gBAAgB,CAC5C0B,gBAAgB,EAChBF,gBAAgB,EAChBR,oBAAoB,EACpBW,iBACD,CAAC;EAED,MAAMM,aAAa,GAAGb,eAAe,GAClCG,gBAAgB,IAAIS,oBAAoB,GACxC1B,iBAAiB;EAEpB,MAAM,CAAE4B,iBAAiB,EAAEC,oBAAoB,CAAE,GAAGxC,QAAQ,CAAC,CAAC;;EAE9D;AACF;AACA;AACA;AACA;AACA;AACA;EACE,MAAMyC,aAAa,GAAGA,CAAEC,SAAS,EAAEC,UAAU,KAAM;IAClDpB,QAAQ,CAAEmB,SAAU,CAAC;IACrBF,oBAAoB,CAAEG,UAAW,CAAC;EACnC,CAAC;EAED,MAAMC,uBAAuB,GAAKjB,KAAK,IACtCD,iBAAiB,CAAE;IAClB,GAAGC,KAAK;IACRN,oBAAoB;IACpBY,0BAA0B;IAC1BF,gBAAgB;IAChBc,qBAAqB,EAAIF,UAAU,IAAM;MACxC,IAAKhB,KAAK,CAACkB,qBAAqB,EAAG;QAClClB,KAAK,CAACkB,qBAAqB,CAAEF,UAAW,CAAC;MAC1C;MACAG,oBAAoB,CAAEH,UAAW,CAAC;IACnC;EACD,CAAE,CAAC;EAEJ,MAAMG,oBAAoB,GAAG,MAAQC,kBAAkB,IAAM;IAC5D,IAAIJ,UAAU,GAAGI,kBAAkB;IACnC,IAAK3C,WAAW,KAAK2C,kBAAkB,CAACC,IAAI,EAAG;MAC9C;MACA,IAAI;QACHL,UAAU,GAAG,MAAMrB,kBAAkB,CACpCyB,kBAAkB,CAACE,KACpB,CAAC;QACD,IAAKN,UAAU,EAAEO,GAAG,EAAG;UACtB1B,QAAQ,CAAEmB,UAAW,CAAC;QACvB;MACD,CAAC,CAAC,OAAQQ,CAAC,EAAG,CAAC;MACf;IACD;IAEA,IACCtB,gBAAgB,IACdc,UAAU,IAAIS,MAAM,CAACC,IAAI,CAAEV,UAAW,CAAC,CAACW,MAAM,IAAI,CAAG,EACtD;MACD,MAAM;QAAEC,EAAE;QAAEL,GAAG;QAAE,GAAGM;MAAc,CAAC,GAAGtC,WAAW,aAAXA,WAAW,cAAXA,WAAW,GAAI,CAAC,CAAC;MACvDM,QAAQ;MACP;MACA;QAAE,GAAGgC,aAAa;QAAE,GAAGb;MAAW,CAAC,EACnCA,UACD,CAAC;IACF;EACD,CAAC;EAED,oBACCjC,KAAA;IAAKS,SAAS,EAAC,mDAAmD;IAAAF,QAAA,gBACjET,IAAA,CAACN,QAAQ;MACRuD,kBAAkB,EAAGvC,WAAW,EAAEgC,GAAG,KAAKlC,KAAO;MACjD0C,KAAK,EAAGzD,EAAE,CAAE,MAAO,CAAG;MACtBiC,mBAAmB,EAAGA,mBAAqB;MAC3Cf,SAAS,EAAGA,SAAW;MACvBH,KAAK,EAAGA,KAAO;MACfO,QAAQ,EAAGkB,aAAe;MAC1BrB,WAAW,EAAGA,WAAW,aAAXA,WAAW,cAAXA,WAAW,GAAInB,EAAE,CAAE,oBAAqB,CAAG;MACzD0D,+BAA+B,EAC9BlC,eAAe,GAAGmB,uBAAuB,GAAG,IAC5C;MACDgB,kCAAkC,EAAGtB,aAAe;MACpDuB,kCAAkC;MAClCC,oCAAoC,EACnChC,sBACA;MACDiC,QAAQ,EAAGA,CAAEpB,UAAU,EAAEqB,KAAK,KAAM;QACnC,MAAMC,aAAa,GAAGtB,UAAU,IAAIJ,iBAAiB;;QAErD;QACA;QACA,IAAK,CAAE0B,aAAa,IAAI,CAAEjD,KAAK,EAAEkD,IAAI,CAAC,CAAC,EAAEZ,MAAM,EAAG;UACjDU,KAAK,CAACG,cAAc,CAAC,CAAC;QACvB,CAAC,MAAM;UACNrB,oBAAoB,CACnBmB,aAAa,IAAI;YAAEf,GAAG,EAAElC;UAAM,CAC/B,CAAC;QACF;MACD,CAAG;MACHoB,GAAG,EAAGA,GAAK;MACXD,MAAM,EAAGA;IAAQ,CACjB,CAAC,EACAlB,QAAQ;EAAA,CACN,CAAC;AAER,CACD,CAAC;AAED,eAAeF,sBAAsB;AAErC,OAAO,MAAMqD,oCAAoC,GAAKzC,KAAK,IAAM;EAChErB,UAAU,CAAE,qDAAqD,EAAE;IAClE+D,KAAK,EAAE;EACR,CAAE,CAAC;EAEH,oBAAO7D,IAAA,CAACO,sBAAsB;IAAA,GAAMY;EAAK,CAAI,CAAC;AAC/C,CAAC","ignoreList":[]}
@@ -32,6 +32,7 @@ import useBlockDisplayInformation from '../use-block-display-information';
32
32
  import { useBlockLock } from '../block-lock';
33
33
  import AriaReferencedText from './aria-referenced-text';
34
34
  import { unlock } from '../../lock-unlock';
35
+ import usePasteStyles from '../use-paste-styles';
35
36
  import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
36
37
  function ListViewBlock({
37
38
  block: {
@@ -91,6 +92,7 @@ function ListViewBlock({
91
92
  getGroupingBlockName
92
93
  } = useSelect(blocksStore);
93
94
  const blockInformation = useBlockDisplayInformation(clientId);
95
+ const pasteStyles = usePasteStyles();
94
96
  const {
95
97
  block,
96
98
  blockName,
@@ -192,6 +194,13 @@ function ListViewBlock({
192
194
  blockToFocus = getBlockOrder()[0];
193
195
  }
194
196
  updateFocusAndSelection(blockToFocus, shouldUpdateSelection);
197
+ } else if (isMatch('core/block-editor/paste-styles', event)) {
198
+ event.preventDefault();
199
+ const {
200
+ blocksToUpdate
201
+ } = getBlocksToUpdate();
202
+ const blocks = getBlocksByClientId(blocksToUpdate);
203
+ pasteStyles(blocks);
195
204
  } else if (isMatch('core/block-editor/duplicate', event)) {
196
205
  event.preventDefault();
197
206
  const {
@@ -1 +1 @@
1
- {"version":3,"names":["clsx","hasBlockSupport","switchToBlockType","store","blocksStore","__experimentalTreeGridCell","TreeGridCell","__experimentalTreeGridItem","TreeGridItem","useInstanceId","moreVertical","useCallback","useMemo","useState","useRef","memo","useDispatch","useSelect","__","BACKSPACE","DELETE","isShallowEqual","__unstableUseShortcutEventMatch","useShortcutEventMatch","speak","ListViewLeaf","useListViewScrollIntoView","BlockMoverUpButton","BlockMoverDownButton","ListViewBlockContents","useListViewContext","getBlockPositionDescription","getBlockPropertiesDescription","focusListItem","blockEditorStore","useBlockDisplayInformation","useBlockLock","AriaReferencedText","unlock","jsx","_jsx","jsxs","_jsxs","Fragment","_Fragment","ListViewBlock","block","clientId","displacement","isAfterDraggedBlocks","isDragged","isNesting","isSelected","isBranchSelected","selectBlock","position","level","rowCount","siblingBlockCount","showBlockMovers","path","isExpanded","selectedClientIds","isSyncedBranch","cellRef","rowRef","settingsRef","isHovered","setIsHovered","settingsAnchorRect","setSettingsAnchorRect","isLocked","canEdit","canMove","isFirstSelectedBlock","isLastSelectedBlock","length","toggleBlockHighlight","duplicateBlocks","multiSelect","replaceBlocks","removeBlocks","insertAfterBlock","insertBeforeBlock","setOpenedBlockSettingsMenu","canInsertBlockType","getSelectedBlockClientIds","getPreviousBlockClientId","getBlockRootClientId","getBlockOrder","getBlockParents","getBlocksByClientId","canRemoveBlocks","isGroupable","getGroupingBlockName","blockInformation","blockName","allowRightClickOverrides","select","getBlock","getBlockName","getSettings","showBlockActions","instanceId","descriptionId","expand","collapse","collapseAll","BlockSettingsMenu","listViewInstanceId","expandedState","setInsertedBlock","treeGridElementRef","rootClientId","isMatch","getBlocksToUpdate","selectedBlockClientIds","isUpdatingSelectedBlocks","includes","firstBlockClientId","firstBlockRootClientId","blocksToUpdate","onKeyDown","event","defaultPrevented","target","closest","isDeleteKey","keyCode","stopPropagation","preventDefault","undefined","_getPreviousBlockClie","blocksToDelete","blockToFocus","shouldUpdateSelection","updateFocusAndSelection","canDuplicate","every","blockToUpdate","name","updatedBlocks","newlySelectedBlocks","at","blockClientIds","blockParents","blocks","groupingBlockName","newBlocks","onMouseEnter","onMouseLeave","selectEditorBlock","focusClientId","shouldSelectBlock","current","toggleExpanded","onContextMenu","click","window","DOMRect","clientX","clientY","onMouseDown","button","settingsPopoverAnchor","ownerDocument","getBoundingClientRect","clearSettingsAnchorRect","rowItemRef","blockPositionDescription","blockPropertiesDescription","hasSiblings","hasRenderedMovers","moverCellClassName","listViewBlockSettingsClassName","colSpan","classes","isSynced","dropdownClientIds","currentlyEditingBlockInCanvas","className","onFocus","onBlur","id","ref","children","tabIndex","onClick","onToggleExpanded","ariaDescribedBy","filter","Boolean","join","withoutGridItem","orientation","clientIds","icon","label","popoverProps","anchor","toggleProps","disableOpenOnArrowDown","__experimentalSelectBlock"],"sources":["@wordpress/block-editor/src/components/list-view/block.js"],"sourcesContent":["/**\n * External dependencies\n */\nimport clsx from 'clsx';\n\n/**\n * WordPress dependencies\n */\nimport {\n\thasBlockSupport,\n\tswitchToBlockType,\n\tstore as blocksStore,\n} from '@wordpress/blocks';\nimport {\n\t__experimentalTreeGridCell as TreeGridCell,\n\t__experimentalTreeGridItem as TreeGridItem,\n} from '@wordpress/components';\nimport { useInstanceId } from '@wordpress/compose';\nimport { moreVertical } from '@wordpress/icons';\nimport {\n\tuseCallback,\n\tuseMemo,\n\tuseState,\n\tuseRef,\n\tmemo,\n} from '@wordpress/element';\nimport { useDispatch, useSelect } from '@wordpress/data';\nimport { __ } from '@wordpress/i18n';\nimport { BACKSPACE, DELETE } from '@wordpress/keycodes';\nimport isShallowEqual from '@wordpress/is-shallow-equal';\nimport { __unstableUseShortcutEventMatch as useShortcutEventMatch } from '@wordpress/keyboard-shortcuts';\nimport { speak } from '@wordpress/a11y';\n\n/**\n * Internal dependencies\n */\nimport ListViewLeaf from './leaf';\nimport useListViewScrollIntoView from './use-list-view-scroll-into-view';\nimport {\n\tBlockMoverUpButton,\n\tBlockMoverDownButton,\n} from '../block-mover/button';\nimport ListViewBlockContents from './block-contents';\nimport { useListViewContext } from './context';\nimport {\n\tgetBlockPositionDescription,\n\tgetBlockPropertiesDescription,\n\tfocusListItem,\n} from './utils';\nimport { store as blockEditorStore } from '../../store';\nimport useBlockDisplayInformation from '../use-block-display-information';\nimport { useBlockLock } from '../block-lock';\nimport AriaReferencedText from './aria-referenced-text';\nimport { unlock } from '../../lock-unlock';\n\nfunction ListViewBlock( {\n\tblock: { clientId },\n\tdisplacement,\n\tisAfterDraggedBlocks,\n\tisDragged,\n\tisNesting,\n\tisSelected,\n\tisBranchSelected,\n\tselectBlock,\n\tposition,\n\tlevel,\n\trowCount,\n\tsiblingBlockCount,\n\tshowBlockMovers,\n\tpath,\n\tisExpanded,\n\tselectedClientIds,\n\tisSyncedBranch,\n} ) {\n\tconst cellRef = useRef( null );\n\tconst rowRef = useRef( null );\n\tconst settingsRef = useRef( null );\n\tconst [ isHovered, setIsHovered ] = useState( false );\n\tconst [ settingsAnchorRect, setSettingsAnchorRect ] = useState();\n\n\tconst { isLocked, canEdit, canMove } = useBlockLock( clientId );\n\n\tconst isFirstSelectedBlock =\n\t\tisSelected && selectedClientIds[ 0 ] === clientId;\n\tconst isLastSelectedBlock =\n\t\tisSelected &&\n\t\tselectedClientIds[ selectedClientIds.length - 1 ] === clientId;\n\n\tconst {\n\t\ttoggleBlockHighlight,\n\t\tduplicateBlocks,\n\t\tmultiSelect,\n\t\treplaceBlocks,\n\t\tremoveBlocks,\n\t\tinsertAfterBlock,\n\t\tinsertBeforeBlock,\n\t\tsetOpenedBlockSettingsMenu,\n\t} = unlock( useDispatch( blockEditorStore ) );\n\n\tconst {\n\t\tcanInsertBlockType,\n\t\tgetSelectedBlockClientIds,\n\t\tgetPreviousBlockClientId,\n\t\tgetBlockRootClientId,\n\t\tgetBlockOrder,\n\t\tgetBlockParents,\n\t\tgetBlocksByClientId,\n\t\tcanRemoveBlocks,\n\t\tisGroupable,\n\t} = useSelect( blockEditorStore );\n\tconst { getGroupingBlockName } = useSelect( blocksStore );\n\n\tconst blockInformation = useBlockDisplayInformation( clientId );\n\n\tconst { block, blockName, allowRightClickOverrides } = useSelect(\n\t\t( select ) => {\n\t\t\tconst { getBlock, getBlockName, getSettings } =\n\t\t\t\tselect( blockEditorStore );\n\n\t\t\treturn {\n\t\t\t\tblock: getBlock( clientId ),\n\t\t\t\tblockName: getBlockName( clientId ),\n\t\t\t\tallowRightClickOverrides:\n\t\t\t\t\tgetSettings().allowRightClickOverrides,\n\t\t\t};\n\t\t},\n\t\t[ clientId ]\n\t);\n\n\tconst showBlockActions =\n\t\t// When a block hides its toolbar it also hides the block settings menu,\n\t\t// since that menu is part of the toolbar in the editor canvas.\n\t\t// List View respects this by also hiding the block settings menu.\n\t\thasBlockSupport( blockName, '__experimentalToolbar', true );\n\tconst instanceId = useInstanceId( ListViewBlock );\n\tconst descriptionId = `list-view-block-select-button__description-${ instanceId }`;\n\n\tconst {\n\t\texpand,\n\t\tcollapse,\n\t\tcollapseAll,\n\t\tBlockSettingsMenu,\n\t\tlistViewInstanceId,\n\t\texpandedState,\n\t\tsetInsertedBlock,\n\t\ttreeGridElementRef,\n\t\trootClientId,\n\t} = useListViewContext();\n\tconst isMatch = useShortcutEventMatch();\n\n\t// Determine which blocks to update:\n\t// If the current (focused) block is part of the block selection, use the whole selection.\n\t// If the focused block is not part of the block selection, only update the focused block.\n\tfunction getBlocksToUpdate() {\n\t\tconst selectedBlockClientIds = getSelectedBlockClientIds();\n\t\tconst isUpdatingSelectedBlocks =\n\t\t\tselectedBlockClientIds.includes( clientId );\n\t\tconst firstBlockClientId = isUpdatingSelectedBlocks\n\t\t\t? selectedBlockClientIds[ 0 ]\n\t\t\t: clientId;\n\t\tconst firstBlockRootClientId =\n\t\t\tgetBlockRootClientId( firstBlockClientId );\n\n\t\tconst blocksToUpdate = isUpdatingSelectedBlocks\n\t\t\t? selectedBlockClientIds\n\t\t\t: [ clientId ];\n\n\t\treturn {\n\t\t\tblocksToUpdate,\n\t\t\tfirstBlockClientId,\n\t\t\tfirstBlockRootClientId,\n\t\t\tselectedBlockClientIds,\n\t\t};\n\t}\n\n\t/**\n\t * @param {KeyboardEvent} event\n\t */\n\tasync function onKeyDown( event ) {\n\t\tif ( event.defaultPrevented ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Do not handle events if it comes from modals;\n\t\t// retain the default behavior for these keys.\n\t\tif ( event.target.closest( '[role=dialog]' ) ) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst isDeleteKey = [ BACKSPACE, DELETE ].includes( event.keyCode );\n\n\t\t// If multiple blocks are selected, deselect all blocks when the user\n\t\t// presses the escape key.\n\t\tif (\n\t\t\tisMatch( 'core/block-editor/unselect', event ) &&\n\t\t\tselectedClientIds.length > 0\n\t\t) {\n\t\t\tevent.stopPropagation();\n\t\t\tevent.preventDefault();\n\t\t\tselectBlock( event, undefined );\n\t\t} else if (\n\t\t\tisDeleteKey ||\n\t\t\tisMatch( 'core/block-editor/remove', event )\n\t\t) {\n\t\t\tconst {\n\t\t\t\tblocksToUpdate: blocksToDelete,\n\t\t\t\tfirstBlockClientId,\n\t\t\t\tfirstBlockRootClientId,\n\t\t\t\tselectedBlockClientIds,\n\t\t\t} = getBlocksToUpdate();\n\n\t\t\t// Don't update the selection if the blocks cannot be deleted.\n\t\t\tif ( ! canRemoveBlocks( blocksToDelete ) ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tlet blockToFocus =\n\t\t\t\tgetPreviousBlockClientId( firstBlockClientId ) ??\n\t\t\t\t// If the previous block is not found (when the first block is deleted),\n\t\t\t\t// fallback to focus the parent block.\n\t\t\t\tfirstBlockRootClientId;\n\n\t\t\tremoveBlocks( blocksToDelete, false );\n\n\t\t\t// Update the selection if the original selection has been removed.\n\t\t\tconst shouldUpdateSelection =\n\t\t\t\tselectedBlockClientIds.length > 0 &&\n\t\t\t\tgetSelectedBlockClientIds().length === 0;\n\n\t\t\t// If there's no previous block nor parent block, focus the first block.\n\t\t\tif ( ! blockToFocus ) {\n\t\t\t\tblockToFocus = getBlockOrder()[ 0 ];\n\t\t\t}\n\n\t\t\tupdateFocusAndSelection( blockToFocus, shouldUpdateSelection );\n\t\t} else if ( isMatch( 'core/block-editor/duplicate', event ) ) {\n\t\t\tevent.preventDefault();\n\n\t\t\tconst { blocksToUpdate, firstBlockRootClientId } =\n\t\t\t\tgetBlocksToUpdate();\n\n\t\t\tconst canDuplicate = getBlocksByClientId( blocksToUpdate ).every(\n\t\t\t\t( blockToUpdate ) => {\n\t\t\t\t\treturn (\n\t\t\t\t\t\t!! blockToUpdate &&\n\t\t\t\t\t\thasBlockSupport(\n\t\t\t\t\t\t\tblockToUpdate.name,\n\t\t\t\t\t\t\t'multiple',\n\t\t\t\t\t\t\ttrue\n\t\t\t\t\t\t) &&\n\t\t\t\t\t\tcanInsertBlockType(\n\t\t\t\t\t\t\tblockToUpdate.name,\n\t\t\t\t\t\t\tfirstBlockRootClientId\n\t\t\t\t\t\t)\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t);\n\n\t\t\tif ( canDuplicate ) {\n\t\t\t\tconst updatedBlocks = await duplicateBlocks(\n\t\t\t\t\tblocksToUpdate,\n\t\t\t\t\tfalse\n\t\t\t\t);\n\n\t\t\t\tif ( updatedBlocks?.length ) {\n\t\t\t\t\t// If blocks have been duplicated, focus the first duplicated block.\n\t\t\t\t\tupdateFocusAndSelection( updatedBlocks[ 0 ], false );\n\t\t\t\t}\n\t\t\t}\n\t\t} else if ( isMatch( 'core/block-editor/insert-before', event ) ) {\n\t\t\tevent.preventDefault();\n\n\t\t\tconst { blocksToUpdate } = getBlocksToUpdate();\n\t\t\tawait insertBeforeBlock( blocksToUpdate[ 0 ] );\n\t\t\tconst newlySelectedBlocks = getSelectedBlockClientIds();\n\n\t\t\t// Focus the first block of the newly inserted blocks, to keep focus within the list view.\n\t\t\tsetOpenedBlockSettingsMenu( undefined );\n\t\t\tupdateFocusAndSelection( newlySelectedBlocks[ 0 ], false );\n\t\t} else if ( isMatch( 'core/block-editor/insert-after', event ) ) {\n\t\t\tevent.preventDefault();\n\n\t\t\tconst { blocksToUpdate } = getBlocksToUpdate();\n\t\t\tawait insertAfterBlock( blocksToUpdate.at( -1 ) );\n\t\t\tconst newlySelectedBlocks = getSelectedBlockClientIds();\n\n\t\t\t// Focus the first block of the newly inserted blocks, to keep focus within the list view.\n\t\t\tsetOpenedBlockSettingsMenu( undefined );\n\t\t\tupdateFocusAndSelection( newlySelectedBlocks[ 0 ], false );\n\t\t} else if ( isMatch( 'core/block-editor/select-all', event ) ) {\n\t\t\tevent.preventDefault();\n\n\t\t\tconst { firstBlockRootClientId, selectedBlockClientIds } =\n\t\t\t\tgetBlocksToUpdate();\n\t\t\tconst blockClientIds = getBlockOrder( firstBlockRootClientId );\n\t\t\tif ( ! blockClientIds.length ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// If we have selected all sibling nested blocks, try selecting up a level.\n\t\t\t// This is a similar implementation to that used by `useSelectAll`.\n\t\t\t// `isShallowEqual` is used for the list view instead of a length check,\n\t\t\t// as the array of siblings of the currently focused block may be a different\n\t\t\t// set of blocks from the current block selection if the user is focused\n\t\t\t// on a different part of the list view from the block selection.\n\t\t\tif ( isShallowEqual( selectedBlockClientIds, blockClientIds ) ) {\n\t\t\t\t// Only select up a level if the first block is not the root block.\n\t\t\t\t// This ensures that the block selection can't break out of the root block\n\t\t\t\t// used by the list view, if the list view is only showing a partial hierarchy.\n\t\t\t\tif (\n\t\t\t\t\tfirstBlockRootClientId &&\n\t\t\t\t\tfirstBlockRootClientId !== rootClientId\n\t\t\t\t) {\n\t\t\t\t\tupdateFocusAndSelection( firstBlockRootClientId, true );\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Select all while passing `null` to skip focusing to the editor canvas,\n\t\t\t// and retain focus within the list view.\n\t\t\tmultiSelect(\n\t\t\t\tblockClientIds[ 0 ],\n\t\t\t\tblockClientIds[ blockClientIds.length - 1 ],\n\t\t\t\tnull\n\t\t\t);\n\t\t} else if ( isMatch( 'core/block-editor/collapse-list-view', event ) ) {\n\t\t\tevent.preventDefault();\n\t\t\tconst { firstBlockClientId } = getBlocksToUpdate();\n\t\t\tconst blockParents = getBlockParents( firstBlockClientId, false );\n\t\t\t// Collapse all blocks.\n\t\t\tcollapseAll();\n\t\t\t// Expand all parents of the current block.\n\t\t\texpand( blockParents );\n\t\t} else if ( isMatch( 'core/block-editor/group', event ) ) {\n\t\t\tconst { blocksToUpdate } = getBlocksToUpdate();\n\t\t\tif ( blocksToUpdate.length > 1 && isGroupable( blocksToUpdate ) ) {\n\t\t\t\tevent.preventDefault();\n\t\t\t\tconst blocks = getBlocksByClientId( blocksToUpdate );\n\t\t\t\tconst groupingBlockName = getGroupingBlockName();\n\t\t\t\tconst newBlocks = switchToBlockType(\n\t\t\t\t\tblocks,\n\t\t\t\t\tgroupingBlockName\n\t\t\t\t);\n\t\t\t\treplaceBlocks( blocksToUpdate, newBlocks );\n\t\t\t\tspeak( __( 'Selected blocks are grouped.' ) );\n\t\t\t\tconst newlySelectedBlocks = getSelectedBlockClientIds();\n\t\t\t\t// Focus the first block of the newly inserted blocks, to keep focus within the list view.\n\t\t\t\tsetOpenedBlockSettingsMenu( undefined );\n\t\t\t\tupdateFocusAndSelection( newlySelectedBlocks[ 0 ], false );\n\t\t\t}\n\t\t}\n\t}\n\n\tconst onMouseEnter = useCallback( () => {\n\t\tsetIsHovered( true );\n\t\ttoggleBlockHighlight( clientId, true );\n\t}, [ clientId, setIsHovered, toggleBlockHighlight ] );\n\tconst onMouseLeave = useCallback( () => {\n\t\tsetIsHovered( false );\n\t\ttoggleBlockHighlight( clientId, false );\n\t}, [ clientId, setIsHovered, toggleBlockHighlight ] );\n\n\tconst selectEditorBlock = useCallback(\n\t\t( event ) => {\n\t\t\tselectBlock( event, clientId );\n\t\t\tevent.preventDefault();\n\t\t},\n\t\t[ clientId, selectBlock ]\n\t);\n\n\tconst updateFocusAndSelection = useCallback(\n\t\t( focusClientId, shouldSelectBlock ) => {\n\t\t\tif ( shouldSelectBlock ) {\n\t\t\t\tselectBlock( undefined, focusClientId, null, null );\n\t\t\t}\n\n\t\t\tfocusListItem( focusClientId, treeGridElementRef?.current );\n\t\t},\n\t\t[ selectBlock, treeGridElementRef ]\n\t);\n\n\tconst toggleExpanded = useCallback(\n\t\t( event ) => {\n\t\t\t// Prevent shift+click from opening link in a new window when toggling.\n\t\t\tevent.preventDefault();\n\t\t\tevent.stopPropagation();\n\t\t\tif ( isExpanded === true ) {\n\t\t\t\tcollapse( clientId );\n\t\t\t} else if ( isExpanded === false ) {\n\t\t\t\texpand( clientId );\n\t\t\t}\n\t\t},\n\t\t[ clientId, expand, collapse, isExpanded ]\n\t);\n\n\t// Allow right-clicking an item in the List View to open up the block settings dropdown.\n\tconst onContextMenu = useCallback(\n\t\t( event ) => {\n\t\t\tif ( showBlockActions && allowRightClickOverrides ) {\n\t\t\t\tsettingsRef.current?.click();\n\t\t\t\t// Ensure the position of the settings dropdown is at the cursor.\n\t\t\t\tsetSettingsAnchorRect(\n\t\t\t\t\tnew window.DOMRect( event.clientX, event.clientY, 0, 0 )\n\t\t\t\t);\n\t\t\t\tevent.preventDefault();\n\t\t\t}\n\t\t},\n\t\t[ allowRightClickOverrides, settingsRef, showBlockActions ]\n\t);\n\n\tconst onMouseDown = useCallback(\n\t\t( event ) => {\n\t\t\t// Prevent right-click from focusing the block,\n\t\t\t// because focus will be handled when opening the block settings dropdown.\n\t\t\tif ( allowRightClickOverrides && event.button === 2 ) {\n\t\t\t\tevent.preventDefault();\n\t\t\t}\n\t\t},\n\t\t[ allowRightClickOverrides ]\n\t);\n\n\tconst settingsPopoverAnchor = useMemo( () => {\n\t\tconst { ownerDocument } = rowRef?.current || {};\n\n\t\t// If no custom position is set, the settings dropdown will be anchored to the\n\t\t// DropdownMenu toggle button.\n\t\tif ( ! settingsAnchorRect || ! ownerDocument ) {\n\t\t\treturn undefined;\n\t\t}\n\n\t\t// Position the settings dropdown at the cursor when right-clicking a block.\n\t\treturn {\n\t\t\townerDocument,\n\t\t\tgetBoundingClientRect() {\n\t\t\t\treturn settingsAnchorRect;\n\t\t\t},\n\t\t};\n\t}, [ settingsAnchorRect ] );\n\n\tconst clearSettingsAnchorRect = useCallback( () => {\n\t\t// Clear the custom position for the settings dropdown so that it is restored back\n\t\t// to being anchored to the DropdownMenu toggle button.\n\t\tsetSettingsAnchorRect( undefined );\n\t}, [ setSettingsAnchorRect ] );\n\n\t// Pass in a ref to the row, so that it can be scrolled\n\t// into view when selected. For long lists, the placeholder for the\n\t// selected block is also observed, within ListViewLeafPlaceholder.\n\tuseListViewScrollIntoView( {\n\t\tisSelected,\n\t\trowItemRef: rowRef,\n\t\tselectedClientIds,\n\t} );\n\n\t// When switching between rendering modes (such as template preview and content only),\n\t// it is possible for a block to temporarily be unavailable. In this case, we should not\n\t// render the leaf, to avoid errors further down the tree.\n\tif ( ! block ) {\n\t\treturn null;\n\t}\n\n\tconst blockPositionDescription = getBlockPositionDescription(\n\t\tposition,\n\t\tsiblingBlockCount,\n\t\tlevel\n\t);\n\n\tconst blockPropertiesDescription = getBlockPropertiesDescription(\n\t\tblockInformation,\n\t\tisLocked\n\t);\n\n\tconst hasSiblings = siblingBlockCount > 0;\n\tconst hasRenderedMovers = showBlockMovers && hasSiblings;\n\tconst moverCellClassName = clsx(\n\t\t'block-editor-list-view-block__mover-cell',\n\t\t{ 'is-visible': isHovered || isSelected }\n\t);\n\n\tconst listViewBlockSettingsClassName = clsx(\n\t\t'block-editor-list-view-block__menu-cell',\n\t\t{ 'is-visible': isHovered || isFirstSelectedBlock }\n\t);\n\n\tlet colSpan;\n\tif ( hasRenderedMovers ) {\n\t\tcolSpan = 2;\n\t} else if ( ! showBlockActions ) {\n\t\tcolSpan = 3;\n\t}\n\n\tconst classes = clsx( {\n\t\t'is-selected': isSelected,\n\t\t'is-first-selected': isFirstSelectedBlock,\n\t\t'is-last-selected': isLastSelectedBlock,\n\t\t'is-branch-selected': isBranchSelected,\n\t\t'is-synced-branch': isSyncedBranch,\n\t\t'is-dragging': isDragged,\n\t\t'has-single-cell': ! showBlockActions,\n\t\t'is-synced': blockInformation?.isSynced,\n\t\t'is-draggable': canMove,\n\t\t'is-displacement-normal': displacement === 'normal',\n\t\t'is-displacement-up': displacement === 'up',\n\t\t'is-displacement-down': displacement === 'down',\n\t\t'is-after-dragged-blocks': isAfterDraggedBlocks,\n\t\t'is-nesting': isNesting,\n\t} );\n\n\t// Only include all selected blocks if the currently clicked on block\n\t// is one of the selected blocks. This ensures that if a user attempts\n\t// to alter a block that isn't part of the selection, they're still able\n\t// to do so.\n\tconst dropdownClientIds = selectedClientIds.includes( clientId )\n\t\t? selectedClientIds\n\t\t: [ clientId ];\n\n\t// Detect if there is a block in the canvas currently being edited and multi-selection is not happening.\n\tconst currentlyEditingBlockInCanvas =\n\t\tisSelected && selectedClientIds.length === 1;\n\n\treturn (\n\t\t<ListViewLeaf\n\t\t\tclassName={ classes }\n\t\t\tisDragged={ isDragged }\n\t\t\tonKeyDown={ onKeyDown }\n\t\t\tonMouseEnter={ onMouseEnter }\n\t\t\tonMouseLeave={ onMouseLeave }\n\t\t\tonFocus={ onMouseEnter }\n\t\t\tonBlur={ onMouseLeave }\n\t\t\tlevel={ level }\n\t\t\tposition={ position }\n\t\t\trowCount={ rowCount }\n\t\t\tpath={ path }\n\t\t\tid={ `list-view-${ listViewInstanceId }-block-${ clientId }` }\n\t\t\tdata-block={ clientId }\n\t\t\tdata-expanded={ canEdit ? isExpanded : undefined }\n\t\t\tref={ rowRef }\n\t\t>\n\t\t\t<TreeGridCell\n\t\t\t\tclassName=\"block-editor-list-view-block__contents-cell\"\n\t\t\t\tcolSpan={ colSpan }\n\t\t\t\tref={ cellRef }\n\t\t\t\taria-selected={ !! isSelected }\n\t\t\t>\n\t\t\t\t{ ( { ref, tabIndex, onFocus } ) => (\n\t\t\t\t\t<div className=\"block-editor-list-view-block__contents-container\">\n\t\t\t\t\t\t<ListViewBlockContents\n\t\t\t\t\t\t\tblock={ block }\n\t\t\t\t\t\t\tonClick={ selectEditorBlock }\n\t\t\t\t\t\t\tonContextMenu={ onContextMenu }\n\t\t\t\t\t\t\tonMouseDown={ onMouseDown }\n\t\t\t\t\t\t\tonToggleExpanded={ toggleExpanded }\n\t\t\t\t\t\t\tisSelected={ isSelected }\n\t\t\t\t\t\t\tposition={ position }\n\t\t\t\t\t\t\tsiblingBlockCount={ siblingBlockCount }\n\t\t\t\t\t\t\tlevel={ level }\n\t\t\t\t\t\t\tref={ ref }\n\t\t\t\t\t\t\ttabIndex={\n\t\t\t\t\t\t\t\tcurrentlyEditingBlockInCanvas ? 0 : tabIndex\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tonFocus={ onFocus }\n\t\t\t\t\t\t\tisExpanded={ canEdit ? isExpanded : undefined }\n\t\t\t\t\t\t\tselectedClientIds={ selectedClientIds }\n\t\t\t\t\t\t\tariaDescribedBy={ descriptionId }\n\t\t\t\t\t\t/>\n\t\t\t\t\t\t<AriaReferencedText id={ descriptionId }>\n\t\t\t\t\t\t\t{ [\n\t\t\t\t\t\t\t\tblockPositionDescription,\n\t\t\t\t\t\t\t\tblockPropertiesDescription,\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t.filter( Boolean )\n\t\t\t\t\t\t\t\t.join( ' ' ) }\n\t\t\t\t\t\t</AriaReferencedText>\n\t\t\t\t\t</div>\n\t\t\t\t) }\n\t\t\t</TreeGridCell>\n\t\t\t{ hasRenderedMovers && (\n\t\t\t\t<>\n\t\t\t\t\t<TreeGridCell\n\t\t\t\t\t\tclassName={ moverCellClassName }\n\t\t\t\t\t\twithoutGridItem\n\t\t\t\t\t>\n\t\t\t\t\t\t<TreeGridItem>\n\t\t\t\t\t\t\t{ ( { ref, tabIndex, onFocus } ) => (\n\t\t\t\t\t\t\t\t<BlockMoverUpButton\n\t\t\t\t\t\t\t\t\torientation=\"vertical\"\n\t\t\t\t\t\t\t\t\tclientIds={ [ clientId ] }\n\t\t\t\t\t\t\t\t\tref={ ref }\n\t\t\t\t\t\t\t\t\ttabIndex={ tabIndex }\n\t\t\t\t\t\t\t\t\tonFocus={ onFocus }\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t) }\n\t\t\t\t\t\t</TreeGridItem>\n\t\t\t\t\t\t<TreeGridItem>\n\t\t\t\t\t\t\t{ ( { ref, tabIndex, onFocus } ) => (\n\t\t\t\t\t\t\t\t<BlockMoverDownButton\n\t\t\t\t\t\t\t\t\torientation=\"vertical\"\n\t\t\t\t\t\t\t\t\tclientIds={ [ clientId ] }\n\t\t\t\t\t\t\t\t\tref={ ref }\n\t\t\t\t\t\t\t\t\ttabIndex={ tabIndex }\n\t\t\t\t\t\t\t\t\tonFocus={ onFocus }\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t) }\n\t\t\t\t\t\t</TreeGridItem>\n\t\t\t\t\t</TreeGridCell>\n\t\t\t\t</>\n\t\t\t) }\n\n\t\t\t{ showBlockActions && BlockSettingsMenu && (\n\t\t\t\t<TreeGridCell\n\t\t\t\t\tclassName={ listViewBlockSettingsClassName }\n\t\t\t\t\taria-selected={ !! isSelected }\n\t\t\t\t\tref={ settingsRef }\n\t\t\t\t>\n\t\t\t\t\t{ ( { ref, tabIndex, onFocus } ) => (\n\t\t\t\t\t\t<BlockSettingsMenu\n\t\t\t\t\t\t\tclientIds={ dropdownClientIds }\n\t\t\t\t\t\t\tblock={ block }\n\t\t\t\t\t\t\ticon={ moreVertical }\n\t\t\t\t\t\t\tlabel={ __( 'Options' ) }\n\t\t\t\t\t\t\tpopoverProps={ {\n\t\t\t\t\t\t\t\tanchor: settingsPopoverAnchor, // Used to position the settings at the cursor on right-click.\n\t\t\t\t\t\t\t} }\n\t\t\t\t\t\t\ttoggleProps={ {\n\t\t\t\t\t\t\t\tref,\n\t\t\t\t\t\t\t\tclassName: 'block-editor-list-view-block__menu',\n\t\t\t\t\t\t\t\ttabIndex,\n\t\t\t\t\t\t\t\tonClick: clearSettingsAnchorRect,\n\t\t\t\t\t\t\t\tonFocus,\n\t\t\t\t\t\t\t} }\n\t\t\t\t\t\t\tdisableOpenOnArrowDown\n\t\t\t\t\t\t\texpand={ expand }\n\t\t\t\t\t\t\texpandedState={ expandedState }\n\t\t\t\t\t\t\tsetInsertedBlock={ setInsertedBlock }\n\t\t\t\t\t\t\t__experimentalSelectBlock={\n\t\t\t\t\t\t\t\tupdateFocusAndSelection\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</TreeGridCell>\n\t\t\t) }\n\t\t</ListViewLeaf>\n\t);\n}\n\nexport default memo( ListViewBlock );\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["clsx","hasBlockSupport","switchToBlockType","store","blocksStore","__experimentalTreeGridCell","TreeGridCell","__experimentalTreeGridItem","TreeGridItem","useInstanceId","moreVertical","useCallback","useMemo","useState","useRef","memo","useDispatch","useSelect","__","BACKSPACE","DELETE","isShallowEqual","__unstableUseShortcutEventMatch","useShortcutEventMatch","speak","ListViewLeaf","useListViewScrollIntoView","BlockMoverUpButton","BlockMoverDownButton","ListViewBlockContents","useListViewContext","getBlockPositionDescription","getBlockPropertiesDescription","focusListItem","blockEditorStore","useBlockDisplayInformation","useBlockLock","AriaReferencedText","unlock","usePasteStyles","jsx","_jsx","jsxs","_jsxs","Fragment","_Fragment","ListViewBlock","block","clientId","displacement","isAfterDraggedBlocks","isDragged","isNesting","isSelected","isBranchSelected","selectBlock","position","level","rowCount","siblingBlockCount","showBlockMovers","path","isExpanded","selectedClientIds","isSyncedBranch","cellRef","rowRef","settingsRef","isHovered","setIsHovered","settingsAnchorRect","setSettingsAnchorRect","isLocked","canEdit","canMove","isFirstSelectedBlock","isLastSelectedBlock","length","toggleBlockHighlight","duplicateBlocks","multiSelect","replaceBlocks","removeBlocks","insertAfterBlock","insertBeforeBlock","setOpenedBlockSettingsMenu","canInsertBlockType","getSelectedBlockClientIds","getPreviousBlockClientId","getBlockRootClientId","getBlockOrder","getBlockParents","getBlocksByClientId","canRemoveBlocks","isGroupable","getGroupingBlockName","blockInformation","pasteStyles","blockName","allowRightClickOverrides","select","getBlock","getBlockName","getSettings","showBlockActions","instanceId","descriptionId","expand","collapse","collapseAll","BlockSettingsMenu","listViewInstanceId","expandedState","setInsertedBlock","treeGridElementRef","rootClientId","isMatch","getBlocksToUpdate","selectedBlockClientIds","isUpdatingSelectedBlocks","includes","firstBlockClientId","firstBlockRootClientId","blocksToUpdate","onKeyDown","event","defaultPrevented","target","closest","isDeleteKey","keyCode","stopPropagation","preventDefault","undefined","_getPreviousBlockClie","blocksToDelete","blockToFocus","shouldUpdateSelection","updateFocusAndSelection","blocks","canDuplicate","every","blockToUpdate","name","updatedBlocks","newlySelectedBlocks","at","blockClientIds","blockParents","groupingBlockName","newBlocks","onMouseEnter","onMouseLeave","selectEditorBlock","focusClientId","shouldSelectBlock","current","toggleExpanded","onContextMenu","click","window","DOMRect","clientX","clientY","onMouseDown","button","settingsPopoverAnchor","ownerDocument","getBoundingClientRect","clearSettingsAnchorRect","rowItemRef","blockPositionDescription","blockPropertiesDescription","hasSiblings","hasRenderedMovers","moverCellClassName","listViewBlockSettingsClassName","colSpan","classes","isSynced","dropdownClientIds","currentlyEditingBlockInCanvas","className","onFocus","onBlur","id","ref","children","tabIndex","onClick","onToggleExpanded","ariaDescribedBy","filter","Boolean","join","withoutGridItem","orientation","clientIds","icon","label","popoverProps","anchor","toggleProps","disableOpenOnArrowDown","__experimentalSelectBlock"],"sources":["@wordpress/block-editor/src/components/list-view/block.js"],"sourcesContent":["/**\n * External dependencies\n */\nimport clsx from 'clsx';\n\n/**\n * WordPress dependencies\n */\nimport {\n\thasBlockSupport,\n\tswitchToBlockType,\n\tstore as blocksStore,\n} from '@wordpress/blocks';\nimport {\n\t__experimentalTreeGridCell as TreeGridCell,\n\t__experimentalTreeGridItem as TreeGridItem,\n} from '@wordpress/components';\nimport { useInstanceId } from '@wordpress/compose';\nimport { moreVertical } from '@wordpress/icons';\nimport {\n\tuseCallback,\n\tuseMemo,\n\tuseState,\n\tuseRef,\n\tmemo,\n} from '@wordpress/element';\nimport { useDispatch, useSelect } from '@wordpress/data';\nimport { __ } from '@wordpress/i18n';\nimport { BACKSPACE, DELETE } from '@wordpress/keycodes';\nimport isShallowEqual from '@wordpress/is-shallow-equal';\nimport { __unstableUseShortcutEventMatch as useShortcutEventMatch } from '@wordpress/keyboard-shortcuts';\nimport { speak } from '@wordpress/a11y';\n\n/**\n * Internal dependencies\n */\nimport ListViewLeaf from './leaf';\nimport useListViewScrollIntoView from './use-list-view-scroll-into-view';\nimport {\n\tBlockMoverUpButton,\n\tBlockMoverDownButton,\n} from '../block-mover/button';\nimport ListViewBlockContents from './block-contents';\nimport { useListViewContext } from './context';\nimport {\n\tgetBlockPositionDescription,\n\tgetBlockPropertiesDescription,\n\tfocusListItem,\n} from './utils';\nimport { store as blockEditorStore } from '../../store';\nimport useBlockDisplayInformation from '../use-block-display-information';\nimport { useBlockLock } from '../block-lock';\nimport AriaReferencedText from './aria-referenced-text';\nimport { unlock } from '../../lock-unlock';\nimport usePasteStyles from '../use-paste-styles';\n\nfunction ListViewBlock( {\n\tblock: { clientId },\n\tdisplacement,\n\tisAfterDraggedBlocks,\n\tisDragged,\n\tisNesting,\n\tisSelected,\n\tisBranchSelected,\n\tselectBlock,\n\tposition,\n\tlevel,\n\trowCount,\n\tsiblingBlockCount,\n\tshowBlockMovers,\n\tpath,\n\tisExpanded,\n\tselectedClientIds,\n\tisSyncedBranch,\n} ) {\n\tconst cellRef = useRef( null );\n\tconst rowRef = useRef( null );\n\tconst settingsRef = useRef( null );\n\tconst [ isHovered, setIsHovered ] = useState( false );\n\tconst [ settingsAnchorRect, setSettingsAnchorRect ] = useState();\n\n\tconst { isLocked, canEdit, canMove } = useBlockLock( clientId );\n\n\tconst isFirstSelectedBlock =\n\t\tisSelected && selectedClientIds[ 0 ] === clientId;\n\tconst isLastSelectedBlock =\n\t\tisSelected &&\n\t\tselectedClientIds[ selectedClientIds.length - 1 ] === clientId;\n\n\tconst {\n\t\ttoggleBlockHighlight,\n\t\tduplicateBlocks,\n\t\tmultiSelect,\n\t\treplaceBlocks,\n\t\tremoveBlocks,\n\t\tinsertAfterBlock,\n\t\tinsertBeforeBlock,\n\t\tsetOpenedBlockSettingsMenu,\n\t} = unlock( useDispatch( blockEditorStore ) );\n\n\tconst {\n\t\tcanInsertBlockType,\n\t\tgetSelectedBlockClientIds,\n\t\tgetPreviousBlockClientId,\n\t\tgetBlockRootClientId,\n\t\tgetBlockOrder,\n\t\tgetBlockParents,\n\t\tgetBlocksByClientId,\n\t\tcanRemoveBlocks,\n\t\tisGroupable,\n\t} = useSelect( blockEditorStore );\n\tconst { getGroupingBlockName } = useSelect( blocksStore );\n\n\tconst blockInformation = useBlockDisplayInformation( clientId );\n\n\tconst pasteStyles = usePasteStyles();\n\n\tconst { block, blockName, allowRightClickOverrides } = useSelect(\n\t\t( select ) => {\n\t\t\tconst { getBlock, getBlockName, getSettings } =\n\t\t\t\tselect( blockEditorStore );\n\n\t\t\treturn {\n\t\t\t\tblock: getBlock( clientId ),\n\t\t\t\tblockName: getBlockName( clientId ),\n\t\t\t\tallowRightClickOverrides:\n\t\t\t\t\tgetSettings().allowRightClickOverrides,\n\t\t\t};\n\t\t},\n\t\t[ clientId ]\n\t);\n\n\tconst showBlockActions =\n\t\t// When a block hides its toolbar it also hides the block settings menu,\n\t\t// since that menu is part of the toolbar in the editor canvas.\n\t\t// List View respects this by also hiding the block settings menu.\n\t\thasBlockSupport( blockName, '__experimentalToolbar', true );\n\tconst instanceId = useInstanceId( ListViewBlock );\n\tconst descriptionId = `list-view-block-select-button__description-${ instanceId }`;\n\n\tconst {\n\t\texpand,\n\t\tcollapse,\n\t\tcollapseAll,\n\t\tBlockSettingsMenu,\n\t\tlistViewInstanceId,\n\t\texpandedState,\n\t\tsetInsertedBlock,\n\t\ttreeGridElementRef,\n\t\trootClientId,\n\t} = useListViewContext();\n\tconst isMatch = useShortcutEventMatch();\n\n\t// Determine which blocks to update:\n\t// If the current (focused) block is part of the block selection, use the whole selection.\n\t// If the focused block is not part of the block selection, only update the focused block.\n\tfunction getBlocksToUpdate() {\n\t\tconst selectedBlockClientIds = getSelectedBlockClientIds();\n\t\tconst isUpdatingSelectedBlocks =\n\t\t\tselectedBlockClientIds.includes( clientId );\n\t\tconst firstBlockClientId = isUpdatingSelectedBlocks\n\t\t\t? selectedBlockClientIds[ 0 ]\n\t\t\t: clientId;\n\t\tconst firstBlockRootClientId =\n\t\t\tgetBlockRootClientId( firstBlockClientId );\n\n\t\tconst blocksToUpdate = isUpdatingSelectedBlocks\n\t\t\t? selectedBlockClientIds\n\t\t\t: [ clientId ];\n\n\t\treturn {\n\t\t\tblocksToUpdate,\n\t\t\tfirstBlockClientId,\n\t\t\tfirstBlockRootClientId,\n\t\t\tselectedBlockClientIds,\n\t\t};\n\t}\n\n\t/**\n\t * @param {KeyboardEvent} event\n\t */\n\tasync function onKeyDown( event ) {\n\t\tif ( event.defaultPrevented ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Do not handle events if it comes from modals;\n\t\t// retain the default behavior for these keys.\n\t\tif ( event.target.closest( '[role=dialog]' ) ) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst isDeleteKey = [ BACKSPACE, DELETE ].includes( event.keyCode );\n\n\t\t// If multiple blocks are selected, deselect all blocks when the user\n\t\t// presses the escape key.\n\t\tif (\n\t\t\tisMatch( 'core/block-editor/unselect', event ) &&\n\t\t\tselectedClientIds.length > 0\n\t\t) {\n\t\t\tevent.stopPropagation();\n\t\t\tevent.preventDefault();\n\t\t\tselectBlock( event, undefined );\n\t\t} else if (\n\t\t\tisDeleteKey ||\n\t\t\tisMatch( 'core/block-editor/remove', event )\n\t\t) {\n\t\t\tconst {\n\t\t\t\tblocksToUpdate: blocksToDelete,\n\t\t\t\tfirstBlockClientId,\n\t\t\t\tfirstBlockRootClientId,\n\t\t\t\tselectedBlockClientIds,\n\t\t\t} = getBlocksToUpdate();\n\n\t\t\t// Don't update the selection if the blocks cannot be deleted.\n\t\t\tif ( ! canRemoveBlocks( blocksToDelete ) ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tlet blockToFocus =\n\t\t\t\tgetPreviousBlockClientId( firstBlockClientId ) ??\n\t\t\t\t// If the previous block is not found (when the first block is deleted),\n\t\t\t\t// fallback to focus the parent block.\n\t\t\t\tfirstBlockRootClientId;\n\n\t\t\tremoveBlocks( blocksToDelete, false );\n\n\t\t\t// Update the selection if the original selection has been removed.\n\t\t\tconst shouldUpdateSelection =\n\t\t\t\tselectedBlockClientIds.length > 0 &&\n\t\t\t\tgetSelectedBlockClientIds().length === 0;\n\n\t\t\t// If there's no previous block nor parent block, focus the first block.\n\t\t\tif ( ! blockToFocus ) {\n\t\t\t\tblockToFocus = getBlockOrder()[ 0 ];\n\t\t\t}\n\n\t\t\tupdateFocusAndSelection( blockToFocus, shouldUpdateSelection );\n\t\t} else if ( isMatch( 'core/block-editor/paste-styles', event ) ) {\n\t\t\tevent.preventDefault();\n\n\t\t\tconst { blocksToUpdate } = getBlocksToUpdate();\n\t\t\tconst blocks = getBlocksByClientId( blocksToUpdate );\n\n\t\t\tpasteStyles( blocks );\n\t\t} else if ( isMatch( 'core/block-editor/duplicate', event ) ) {\n\t\t\tevent.preventDefault();\n\n\t\t\tconst { blocksToUpdate, firstBlockRootClientId } =\n\t\t\t\tgetBlocksToUpdate();\n\n\t\t\tconst canDuplicate = getBlocksByClientId( blocksToUpdate ).every(\n\t\t\t\t( blockToUpdate ) => {\n\t\t\t\t\treturn (\n\t\t\t\t\t\t!! blockToUpdate &&\n\t\t\t\t\t\thasBlockSupport(\n\t\t\t\t\t\t\tblockToUpdate.name,\n\t\t\t\t\t\t\t'multiple',\n\t\t\t\t\t\t\ttrue\n\t\t\t\t\t\t) &&\n\t\t\t\t\t\tcanInsertBlockType(\n\t\t\t\t\t\t\tblockToUpdate.name,\n\t\t\t\t\t\t\tfirstBlockRootClientId\n\t\t\t\t\t\t)\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t);\n\n\t\t\tif ( canDuplicate ) {\n\t\t\t\tconst updatedBlocks = await duplicateBlocks(\n\t\t\t\t\tblocksToUpdate,\n\t\t\t\t\tfalse\n\t\t\t\t);\n\n\t\t\t\tif ( updatedBlocks?.length ) {\n\t\t\t\t\t// If blocks have been duplicated, focus the first duplicated block.\n\t\t\t\t\tupdateFocusAndSelection( updatedBlocks[ 0 ], false );\n\t\t\t\t}\n\t\t\t}\n\t\t} else if ( isMatch( 'core/block-editor/insert-before', event ) ) {\n\t\t\tevent.preventDefault();\n\n\t\t\tconst { blocksToUpdate } = getBlocksToUpdate();\n\t\t\tawait insertBeforeBlock( blocksToUpdate[ 0 ] );\n\t\t\tconst newlySelectedBlocks = getSelectedBlockClientIds();\n\n\t\t\t// Focus the first block of the newly inserted blocks, to keep focus within the list view.\n\t\t\tsetOpenedBlockSettingsMenu( undefined );\n\t\t\tupdateFocusAndSelection( newlySelectedBlocks[ 0 ], false );\n\t\t} else if ( isMatch( 'core/block-editor/insert-after', event ) ) {\n\t\t\tevent.preventDefault();\n\n\t\t\tconst { blocksToUpdate } = getBlocksToUpdate();\n\t\t\tawait insertAfterBlock( blocksToUpdate.at( -1 ) );\n\t\t\tconst newlySelectedBlocks = getSelectedBlockClientIds();\n\n\t\t\t// Focus the first block of the newly inserted blocks, to keep focus within the list view.\n\t\t\tsetOpenedBlockSettingsMenu( undefined );\n\t\t\tupdateFocusAndSelection( newlySelectedBlocks[ 0 ], false );\n\t\t} else if ( isMatch( 'core/block-editor/select-all', event ) ) {\n\t\t\tevent.preventDefault();\n\n\t\t\tconst { firstBlockRootClientId, selectedBlockClientIds } =\n\t\t\t\tgetBlocksToUpdate();\n\t\t\tconst blockClientIds = getBlockOrder( firstBlockRootClientId );\n\t\t\tif ( ! blockClientIds.length ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// If we have selected all sibling nested blocks, try selecting up a level.\n\t\t\t// This is a similar implementation to that used by `useSelectAll`.\n\t\t\t// `isShallowEqual` is used for the list view instead of a length check,\n\t\t\t// as the array of siblings of the currently focused block may be a different\n\t\t\t// set of blocks from the current block selection if the user is focused\n\t\t\t// on a different part of the list view from the block selection.\n\t\t\tif ( isShallowEqual( selectedBlockClientIds, blockClientIds ) ) {\n\t\t\t\t// Only select up a level if the first block is not the root block.\n\t\t\t\t// This ensures that the block selection can't break out of the root block\n\t\t\t\t// used by the list view, if the list view is only showing a partial hierarchy.\n\t\t\t\tif (\n\t\t\t\t\tfirstBlockRootClientId &&\n\t\t\t\t\tfirstBlockRootClientId !== rootClientId\n\t\t\t\t) {\n\t\t\t\t\tupdateFocusAndSelection( firstBlockRootClientId, true );\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Select all while passing `null` to skip focusing to the editor canvas,\n\t\t\t// and retain focus within the list view.\n\t\t\tmultiSelect(\n\t\t\t\tblockClientIds[ 0 ],\n\t\t\t\tblockClientIds[ blockClientIds.length - 1 ],\n\t\t\t\tnull\n\t\t\t);\n\t\t} else if ( isMatch( 'core/block-editor/collapse-list-view', event ) ) {\n\t\t\tevent.preventDefault();\n\t\t\tconst { firstBlockClientId } = getBlocksToUpdate();\n\t\t\tconst blockParents = getBlockParents( firstBlockClientId, false );\n\t\t\t// Collapse all blocks.\n\t\t\tcollapseAll();\n\t\t\t// Expand all parents of the current block.\n\t\t\texpand( blockParents );\n\t\t} else if ( isMatch( 'core/block-editor/group', event ) ) {\n\t\t\tconst { blocksToUpdate } = getBlocksToUpdate();\n\t\t\tif ( blocksToUpdate.length > 1 && isGroupable( blocksToUpdate ) ) {\n\t\t\t\tevent.preventDefault();\n\t\t\t\tconst blocks = getBlocksByClientId( blocksToUpdate );\n\t\t\t\tconst groupingBlockName = getGroupingBlockName();\n\t\t\t\tconst newBlocks = switchToBlockType(\n\t\t\t\t\tblocks,\n\t\t\t\t\tgroupingBlockName\n\t\t\t\t);\n\t\t\t\treplaceBlocks( blocksToUpdate, newBlocks );\n\t\t\t\tspeak( __( 'Selected blocks are grouped.' ) );\n\t\t\t\tconst newlySelectedBlocks = getSelectedBlockClientIds();\n\t\t\t\t// Focus the first block of the newly inserted blocks, to keep focus within the list view.\n\t\t\t\tsetOpenedBlockSettingsMenu( undefined );\n\t\t\t\tupdateFocusAndSelection( newlySelectedBlocks[ 0 ], false );\n\t\t\t}\n\t\t}\n\t}\n\n\tconst onMouseEnter = useCallback( () => {\n\t\tsetIsHovered( true );\n\t\ttoggleBlockHighlight( clientId, true );\n\t}, [ clientId, setIsHovered, toggleBlockHighlight ] );\n\tconst onMouseLeave = useCallback( () => {\n\t\tsetIsHovered( false );\n\t\ttoggleBlockHighlight( clientId, false );\n\t}, [ clientId, setIsHovered, toggleBlockHighlight ] );\n\n\tconst selectEditorBlock = useCallback(\n\t\t( event ) => {\n\t\t\tselectBlock( event, clientId );\n\t\t\tevent.preventDefault();\n\t\t},\n\t\t[ clientId, selectBlock ]\n\t);\n\n\tconst updateFocusAndSelection = useCallback(\n\t\t( focusClientId, shouldSelectBlock ) => {\n\t\t\tif ( shouldSelectBlock ) {\n\t\t\t\tselectBlock( undefined, focusClientId, null, null );\n\t\t\t}\n\n\t\t\tfocusListItem( focusClientId, treeGridElementRef?.current );\n\t\t},\n\t\t[ selectBlock, treeGridElementRef ]\n\t);\n\n\tconst toggleExpanded = useCallback(\n\t\t( event ) => {\n\t\t\t// Prevent shift+click from opening link in a new window when toggling.\n\t\t\tevent.preventDefault();\n\t\t\tevent.stopPropagation();\n\t\t\tif ( isExpanded === true ) {\n\t\t\t\tcollapse( clientId );\n\t\t\t} else if ( isExpanded === false ) {\n\t\t\t\texpand( clientId );\n\t\t\t}\n\t\t},\n\t\t[ clientId, expand, collapse, isExpanded ]\n\t);\n\n\t// Allow right-clicking an item in the List View to open up the block settings dropdown.\n\tconst onContextMenu = useCallback(\n\t\t( event ) => {\n\t\t\tif ( showBlockActions && allowRightClickOverrides ) {\n\t\t\t\tsettingsRef.current?.click();\n\t\t\t\t// Ensure the position of the settings dropdown is at the cursor.\n\t\t\t\tsetSettingsAnchorRect(\n\t\t\t\t\tnew window.DOMRect( event.clientX, event.clientY, 0, 0 )\n\t\t\t\t);\n\t\t\t\tevent.preventDefault();\n\t\t\t}\n\t\t},\n\t\t[ allowRightClickOverrides, settingsRef, showBlockActions ]\n\t);\n\n\tconst onMouseDown = useCallback(\n\t\t( event ) => {\n\t\t\t// Prevent right-click from focusing the block,\n\t\t\t// because focus will be handled when opening the block settings dropdown.\n\t\t\tif ( allowRightClickOverrides && event.button === 2 ) {\n\t\t\t\tevent.preventDefault();\n\t\t\t}\n\t\t},\n\t\t[ allowRightClickOverrides ]\n\t);\n\n\tconst settingsPopoverAnchor = useMemo( () => {\n\t\tconst { ownerDocument } = rowRef?.current || {};\n\n\t\t// If no custom position is set, the settings dropdown will be anchored to the\n\t\t// DropdownMenu toggle button.\n\t\tif ( ! settingsAnchorRect || ! ownerDocument ) {\n\t\t\treturn undefined;\n\t\t}\n\n\t\t// Position the settings dropdown at the cursor when right-clicking a block.\n\t\treturn {\n\t\t\townerDocument,\n\t\t\tgetBoundingClientRect() {\n\t\t\t\treturn settingsAnchorRect;\n\t\t\t},\n\t\t};\n\t}, [ settingsAnchorRect ] );\n\n\tconst clearSettingsAnchorRect = useCallback( () => {\n\t\t// Clear the custom position for the settings dropdown so that it is restored back\n\t\t// to being anchored to the DropdownMenu toggle button.\n\t\tsetSettingsAnchorRect( undefined );\n\t}, [ setSettingsAnchorRect ] );\n\n\t// Pass in a ref to the row, so that it can be scrolled\n\t// into view when selected. For long lists, the placeholder for the\n\t// selected block is also observed, within ListViewLeafPlaceholder.\n\tuseListViewScrollIntoView( {\n\t\tisSelected,\n\t\trowItemRef: rowRef,\n\t\tselectedClientIds,\n\t} );\n\n\t// When switching between rendering modes (such as template preview and content only),\n\t// it is possible for a block to temporarily be unavailable. In this case, we should not\n\t// render the leaf, to avoid errors further down the tree.\n\tif ( ! block ) {\n\t\treturn null;\n\t}\n\n\tconst blockPositionDescription = getBlockPositionDescription(\n\t\tposition,\n\t\tsiblingBlockCount,\n\t\tlevel\n\t);\n\n\tconst blockPropertiesDescription = getBlockPropertiesDescription(\n\t\tblockInformation,\n\t\tisLocked\n\t);\n\n\tconst hasSiblings = siblingBlockCount > 0;\n\tconst hasRenderedMovers = showBlockMovers && hasSiblings;\n\tconst moverCellClassName = clsx(\n\t\t'block-editor-list-view-block__mover-cell',\n\t\t{ 'is-visible': isHovered || isSelected }\n\t);\n\n\tconst listViewBlockSettingsClassName = clsx(\n\t\t'block-editor-list-view-block__menu-cell',\n\t\t{ 'is-visible': isHovered || isFirstSelectedBlock }\n\t);\n\n\tlet colSpan;\n\tif ( hasRenderedMovers ) {\n\t\tcolSpan = 2;\n\t} else if ( ! showBlockActions ) {\n\t\tcolSpan = 3;\n\t}\n\n\tconst classes = clsx( {\n\t\t'is-selected': isSelected,\n\t\t'is-first-selected': isFirstSelectedBlock,\n\t\t'is-last-selected': isLastSelectedBlock,\n\t\t'is-branch-selected': isBranchSelected,\n\t\t'is-synced-branch': isSyncedBranch,\n\t\t'is-dragging': isDragged,\n\t\t'has-single-cell': ! showBlockActions,\n\t\t'is-synced': blockInformation?.isSynced,\n\t\t'is-draggable': canMove,\n\t\t'is-displacement-normal': displacement === 'normal',\n\t\t'is-displacement-up': displacement === 'up',\n\t\t'is-displacement-down': displacement === 'down',\n\t\t'is-after-dragged-blocks': isAfterDraggedBlocks,\n\t\t'is-nesting': isNesting,\n\t} );\n\n\t// Only include all selected blocks if the currently clicked on block\n\t// is one of the selected blocks. This ensures that if a user attempts\n\t// to alter a block that isn't part of the selection, they're still able\n\t// to do so.\n\tconst dropdownClientIds = selectedClientIds.includes( clientId )\n\t\t? selectedClientIds\n\t\t: [ clientId ];\n\n\t// Detect if there is a block in the canvas currently being edited and multi-selection is not happening.\n\tconst currentlyEditingBlockInCanvas =\n\t\tisSelected && selectedClientIds.length === 1;\n\n\treturn (\n\t\t<ListViewLeaf\n\t\t\tclassName={ classes }\n\t\t\tisDragged={ isDragged }\n\t\t\tonKeyDown={ onKeyDown }\n\t\t\tonMouseEnter={ onMouseEnter }\n\t\t\tonMouseLeave={ onMouseLeave }\n\t\t\tonFocus={ onMouseEnter }\n\t\t\tonBlur={ onMouseLeave }\n\t\t\tlevel={ level }\n\t\t\tposition={ position }\n\t\t\trowCount={ rowCount }\n\t\t\tpath={ path }\n\t\t\tid={ `list-view-${ listViewInstanceId }-block-${ clientId }` }\n\t\t\tdata-block={ clientId }\n\t\t\tdata-expanded={ canEdit ? isExpanded : undefined }\n\t\t\tref={ rowRef }\n\t\t>\n\t\t\t<TreeGridCell\n\t\t\t\tclassName=\"block-editor-list-view-block__contents-cell\"\n\t\t\t\tcolSpan={ colSpan }\n\t\t\t\tref={ cellRef }\n\t\t\t\taria-selected={ !! isSelected }\n\t\t\t>\n\t\t\t\t{ ( { ref, tabIndex, onFocus } ) => (\n\t\t\t\t\t<div className=\"block-editor-list-view-block__contents-container\">\n\t\t\t\t\t\t<ListViewBlockContents\n\t\t\t\t\t\t\tblock={ block }\n\t\t\t\t\t\t\tonClick={ selectEditorBlock }\n\t\t\t\t\t\t\tonContextMenu={ onContextMenu }\n\t\t\t\t\t\t\tonMouseDown={ onMouseDown }\n\t\t\t\t\t\t\tonToggleExpanded={ toggleExpanded }\n\t\t\t\t\t\t\tisSelected={ isSelected }\n\t\t\t\t\t\t\tposition={ position }\n\t\t\t\t\t\t\tsiblingBlockCount={ siblingBlockCount }\n\t\t\t\t\t\t\tlevel={ level }\n\t\t\t\t\t\t\tref={ ref }\n\t\t\t\t\t\t\ttabIndex={\n\t\t\t\t\t\t\t\tcurrentlyEditingBlockInCanvas ? 0 : tabIndex\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tonFocus={ onFocus }\n\t\t\t\t\t\t\tisExpanded={ canEdit ? isExpanded : undefined }\n\t\t\t\t\t\t\tselectedClientIds={ selectedClientIds }\n\t\t\t\t\t\t\tariaDescribedBy={ descriptionId }\n\t\t\t\t\t\t/>\n\t\t\t\t\t\t<AriaReferencedText id={ descriptionId }>\n\t\t\t\t\t\t\t{ [\n\t\t\t\t\t\t\t\tblockPositionDescription,\n\t\t\t\t\t\t\t\tblockPropertiesDescription,\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t.filter( Boolean )\n\t\t\t\t\t\t\t\t.join( ' ' ) }\n\t\t\t\t\t\t</AriaReferencedText>\n\t\t\t\t\t</div>\n\t\t\t\t) }\n\t\t\t</TreeGridCell>\n\t\t\t{ hasRenderedMovers && (\n\t\t\t\t<>\n\t\t\t\t\t<TreeGridCell\n\t\t\t\t\t\tclassName={ moverCellClassName }\n\t\t\t\t\t\twithoutGridItem\n\t\t\t\t\t>\n\t\t\t\t\t\t<TreeGridItem>\n\t\t\t\t\t\t\t{ ( { ref, tabIndex, onFocus } ) => (\n\t\t\t\t\t\t\t\t<BlockMoverUpButton\n\t\t\t\t\t\t\t\t\torientation=\"vertical\"\n\t\t\t\t\t\t\t\t\tclientIds={ [ clientId ] }\n\t\t\t\t\t\t\t\t\tref={ ref }\n\t\t\t\t\t\t\t\t\ttabIndex={ tabIndex }\n\t\t\t\t\t\t\t\t\tonFocus={ onFocus }\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t) }\n\t\t\t\t\t\t</TreeGridItem>\n\t\t\t\t\t\t<TreeGridItem>\n\t\t\t\t\t\t\t{ ( { ref, tabIndex, onFocus } ) => (\n\t\t\t\t\t\t\t\t<BlockMoverDownButton\n\t\t\t\t\t\t\t\t\torientation=\"vertical\"\n\t\t\t\t\t\t\t\t\tclientIds={ [ clientId ] }\n\t\t\t\t\t\t\t\t\tref={ ref }\n\t\t\t\t\t\t\t\t\ttabIndex={ tabIndex }\n\t\t\t\t\t\t\t\t\tonFocus={ onFocus }\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t) }\n\t\t\t\t\t\t</TreeGridItem>\n\t\t\t\t\t</TreeGridCell>\n\t\t\t\t</>\n\t\t\t) }\n\n\t\t\t{ showBlockActions && BlockSettingsMenu && (\n\t\t\t\t<TreeGridCell\n\t\t\t\t\tclassName={ listViewBlockSettingsClassName }\n\t\t\t\t\taria-selected={ !! isSelected }\n\t\t\t\t\tref={ settingsRef }\n\t\t\t\t>\n\t\t\t\t\t{ ( { ref, tabIndex, onFocus } ) => (\n\t\t\t\t\t\t<BlockSettingsMenu\n\t\t\t\t\t\t\tclientIds={ dropdownClientIds }\n\t\t\t\t\t\t\tblock={ block }\n\t\t\t\t\t\t\ticon={ moreVertical }\n\t\t\t\t\t\t\tlabel={ __( 'Options' ) }\n\t\t\t\t\t\t\tpopoverProps={ {\n\t\t\t\t\t\t\t\tanchor: settingsPopoverAnchor, // Used to position the settings at the cursor on right-click.\n\t\t\t\t\t\t\t} }\n\t\t\t\t\t\t\ttoggleProps={ {\n\t\t\t\t\t\t\t\tref,\n\t\t\t\t\t\t\t\tclassName: 'block-editor-list-view-block__menu',\n\t\t\t\t\t\t\t\ttabIndex,\n\t\t\t\t\t\t\t\tonClick: clearSettingsAnchorRect,\n\t\t\t\t\t\t\t\tonFocus,\n\t\t\t\t\t\t\t} }\n\t\t\t\t\t\t\tdisableOpenOnArrowDown\n\t\t\t\t\t\t\texpand={ expand }\n\t\t\t\t\t\t\texpandedState={ expandedState }\n\t\t\t\t\t\t\tsetInsertedBlock={ setInsertedBlock }\n\t\t\t\t\t\t\t__experimentalSelectBlock={\n\t\t\t\t\t\t\t\tupdateFocusAndSelection\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</TreeGridCell>\n\t\t\t) }\n\t\t</ListViewLeaf>\n\t);\n}\n\nexport default memo( ListViewBlock );\n"],"mappings":"AAAA;AACA;AACA;AACA,OAAOA,IAAI,MAAM,MAAM;;AAEvB;AACA;AACA;AACA,SACCC,eAAe,EACfC,iBAAiB,EACjBC,KAAK,IAAIC,WAAW,QACd,mBAAmB;AAC1B,SACCC,0BAA0B,IAAIC,YAAY,EAC1CC,0BAA0B,IAAIC,YAAY,QACpC,uBAAuB;AAC9B,SAASC,aAAa,QAAQ,oBAAoB;AAClD,SAASC,YAAY,QAAQ,kBAAkB;AAC/C,SACCC,WAAW,EACXC,OAAO,EACPC,QAAQ,EACRC,MAAM,EACNC,IAAI,QACE,oBAAoB;AAC3B,SAASC,WAAW,EAAEC,SAAS,QAAQ,iBAAiB;AACxD,SAASC,EAAE,QAAQ,iBAAiB;AACpC,SAASC,SAAS,EAAEC,MAAM,QAAQ,qBAAqB;AACvD,OAAOC,cAAc,MAAM,6BAA6B;AACxD,SAASC,+BAA+B,IAAIC,qBAAqB,QAAQ,+BAA+B;AACxG,SAASC,KAAK,QAAQ,iBAAiB;;AAEvC;AACA;AACA;AACA,OAAOC,YAAY,MAAM,QAAQ;AACjC,OAAOC,yBAAyB,MAAM,kCAAkC;AACxE,SACCC,kBAAkB,EAClBC,oBAAoB,QACd,uBAAuB;AAC9B,OAAOC,qBAAqB,MAAM,kBAAkB;AACpD,SAASC,kBAAkB,QAAQ,WAAW;AAC9C,SACCC,2BAA2B,EAC3BC,6BAA6B,EAC7BC,aAAa,QACP,SAAS;AAChB,SAAS9B,KAAK,IAAI+B,gBAAgB,QAAQ,aAAa;AACvD,OAAOC,0BAA0B,MAAM,kCAAkC;AACzE,SAASC,YAAY,QAAQ,eAAe;AAC5C,OAAOC,kBAAkB,MAAM,wBAAwB;AACvD,SAASC,MAAM,QAAQ,mBAAmB;AAC1C,OAAOC,cAAc,MAAM,qBAAqB;AAAC,SAAAC,GAAA,IAAAC,IAAA,EAAAC,IAAA,IAAAC,KAAA,EAAAC,QAAA,IAAAC,SAAA;AAEjD,SAASC,aAAaA,CAAE;EACvBC,KAAK,EAAE;IAAEC;EAAS,CAAC;EACnBC,YAAY;EACZC,oBAAoB;EACpBC,SAAS;EACTC,SAAS;EACTC,UAAU;EACVC,gBAAgB;EAChBC,WAAW;EACXC,QAAQ;EACRC,KAAK;EACLC,QAAQ;EACRC,iBAAiB;EACjBC,eAAe;EACfC,IAAI;EACJC,UAAU;EACVC,iBAAiB;EACjBC;AACD,CAAC,EAAG;EACH,MAAMC,OAAO,GAAGnD,MAAM,CAAE,IAAK,CAAC;EAC9B,MAAMoD,MAAM,GAAGpD,MAAM,CAAE,IAAK,CAAC;EAC7B,MAAMqD,WAAW,GAAGrD,MAAM,CAAE,IAAK,CAAC;EAClC,MAAM,CAAEsD,SAAS,EAAEC,YAAY,CAAE,GAAGxD,QAAQ,CAAE,KAAM,CAAC;EACrD,MAAM,CAAEyD,kBAAkB,EAAEC,qBAAqB,CAAE,GAAG1D,QAAQ,CAAC,CAAC;EAEhE,MAAM;IAAE2D,QAAQ;IAAEC,OAAO;IAAEC;EAAQ,CAAC,GAAGtC,YAAY,CAAEY,QAAS,CAAC;EAE/D,MAAM2B,oBAAoB,GACzBtB,UAAU,IAAIU,iBAAiB,CAAE,CAAC,CAAE,KAAKf,QAAQ;EAClD,MAAM4B,mBAAmB,GACxBvB,UAAU,IACVU,iBAAiB,CAAEA,iBAAiB,CAACc,MAAM,GAAG,CAAC,CAAE,KAAK7B,QAAQ;EAE/D,MAAM;IACL8B,oBAAoB;IACpBC,eAAe;IACfC,WAAW;IACXC,aAAa;IACbC,YAAY;IACZC,gBAAgB;IAChBC,iBAAiB;IACjBC;EACD,CAAC,GAAG/C,MAAM,CAAEtB,WAAW,CAAEkB,gBAAiB,CAAE,CAAC;EAE7C,MAAM;IACLoD,kBAAkB;IAClBC,yBAAyB;IACzBC,wBAAwB;IACxBC,oBAAoB;IACpBC,aAAa;IACbC,eAAe;IACfC,mBAAmB;IACnBC,eAAe;IACfC;EACD,CAAC,GAAG7E,SAAS,CAAEiB,gBAAiB,CAAC;EACjC,MAAM;IAAE6D;EAAqB,CAAC,GAAG9E,SAAS,CAAEb,WAAY,CAAC;EAEzD,MAAM4F,gBAAgB,GAAG7D,0BAA0B,CAAEa,QAAS,CAAC;EAE/D,MAAMiD,WAAW,GAAG1D,cAAc,CAAC,CAAC;EAEpC,MAAM;IAAEQ,KAAK;IAAEmD,SAAS;IAAEC;EAAyB,CAAC,GAAGlF,SAAS,CAC7DmF,MAAM,IAAM;IACb,MAAM;MAAEC,QAAQ;MAAEC,YAAY;MAAEC;IAAY,CAAC,GAC5CH,MAAM,CAAElE,gBAAiB,CAAC;IAE3B,OAAO;MACNa,KAAK,EAAEsD,QAAQ,CAAErD,QAAS,CAAC;MAC3BkD,SAAS,EAAEI,YAAY,CAAEtD,QAAS,CAAC;MACnCmD,wBAAwB,EACvBI,WAAW,CAAC,CAAC,CAACJ;IAChB,CAAC;EACF,CAAC,EACD,CAAEnD,QAAQ,CACX,CAAC;EAED,MAAMwD,gBAAgB;EACrB;EACA;EACA;EACAvG,eAAe,CAAEiG,SAAS,EAAE,uBAAuB,EAAE,IAAK,CAAC;EAC5D,MAAMO,UAAU,GAAGhG,aAAa,CAAEqC,aAAc,CAAC;EACjD,MAAM4D,aAAa,GAAG,8CAA+CD,UAAU,EAAG;EAElF,MAAM;IACLE,MAAM;IACNC,QAAQ;IACRC,WAAW;IACXC,iBAAiB;IACjBC,kBAAkB;IAClBC,aAAa;IACbC,gBAAgB;IAChBC,kBAAkB;IAClBC;EACD,CAAC,GAAGrF,kBAAkB,CAAC,CAAC;EACxB,MAAMsF,OAAO,GAAG7F,qBAAqB,CAAC,CAAC;;EAEvC;EACA;EACA;EACA,SAAS8F,iBAAiBA,CAAA,EAAG;IAC5B,MAAMC,sBAAsB,GAAG/B,yBAAyB,CAAC,CAAC;IAC1D,MAAMgC,wBAAwB,GAC7BD,sBAAsB,CAACE,QAAQ,CAAExE,QAAS,CAAC;IAC5C,MAAMyE,kBAAkB,GAAGF,wBAAwB,GAChDD,sBAAsB,CAAE,CAAC,CAAE,GAC3BtE,QAAQ;IACX,MAAM0E,sBAAsB,GAC3BjC,oBAAoB,CAAEgC,kBAAmB,CAAC;IAE3C,MAAME,cAAc,GAAGJ,wBAAwB,GAC5CD,sBAAsB,GACtB,CAAEtE,QAAQ,CAAE;IAEf,OAAO;MACN2E,cAAc;MACdF,kBAAkB;MAClBC,sBAAsB;MACtBJ;IACD,CAAC;EACF;;EAEA;AACD;AACA;EACC,eAAeM,SAASA,CAAEC,KAAK,EAAG;IACjC,IAAKA,KAAK,CAACC,gBAAgB,EAAG;MAC7B;IACD;;IAEA;IACA;IACA,IAAKD,KAAK,CAACE,MAAM,CAACC,OAAO,CAAE,eAAgB,CAAC,EAAG;MAC9C;IACD;IAEA,MAAMC,WAAW,GAAG,CAAE9G,SAAS,EAAEC,MAAM,CAAE,CAACoG,QAAQ,CAAEK,KAAK,CAACK,OAAQ,CAAC;;IAEnE;IACA;IACA,IACCd,OAAO,CAAE,4BAA4B,EAAES,KAAM,CAAC,IAC9C9D,iBAAiB,CAACc,MAAM,GAAG,CAAC,EAC3B;MACDgD,KAAK,CAACM,eAAe,CAAC,CAAC;MACvBN,KAAK,CAACO,cAAc,CAAC,CAAC;MACtB7E,WAAW,CAAEsE,KAAK,EAAEQ,SAAU,CAAC;IAChC,CAAC,MAAM,IACNJ,WAAW,IACXb,OAAO,CAAE,0BAA0B,EAAES,KAAM,CAAC,EAC3C;MAAA,IAAAS,qBAAA;MACD,MAAM;QACLX,cAAc,EAAEY,cAAc;QAC9Bd,kBAAkB;QAClBC,sBAAsB;QACtBJ;MACD,CAAC,GAAGD,iBAAiB,CAAC,CAAC;;MAEvB;MACA,IAAK,CAAExB,eAAe,CAAE0C,cAAe,CAAC,EAAG;QAC1C;MACD;MAEA,IAAIC,YAAY,IAAAF,qBAAA,GACf9C,wBAAwB,CAAEiC,kBAAmB,CAAC,cAAAa,qBAAA,cAAAA,qBAAA;MAC9C;MACA;MACAZ,sBAAsB;MAEvBxC,YAAY,CAAEqD,cAAc,EAAE,KAAM,CAAC;;MAErC;MACA,MAAME,qBAAqB,GAC1BnB,sBAAsB,CAACzC,MAAM,GAAG,CAAC,IACjCU,yBAAyB,CAAC,CAAC,CAACV,MAAM,KAAK,CAAC;;MAEzC;MACA,IAAK,CAAE2D,YAAY,EAAG;QACrBA,YAAY,GAAG9C,aAAa,CAAC,CAAC,CAAE,CAAC,CAAE;MACpC;MAEAgD,uBAAuB,CAAEF,YAAY,EAAEC,qBAAsB,CAAC;IAC/D,CAAC,MAAM,IAAKrB,OAAO,CAAE,gCAAgC,EAAES,KAAM,CAAC,EAAG;MAChEA,KAAK,CAACO,cAAc,CAAC,CAAC;MAEtB,MAAM;QAAET;MAAe,CAAC,GAAGN,iBAAiB,CAAC,CAAC;MAC9C,MAAMsB,MAAM,GAAG/C,mBAAmB,CAAE+B,cAAe,CAAC;MAEpD1B,WAAW,CAAE0C,MAAO,CAAC;IACtB,CAAC,MAAM,IAAKvB,OAAO,CAAE,6BAA6B,EAAES,KAAM,CAAC,EAAG;MAC7DA,KAAK,CAACO,cAAc,CAAC,CAAC;MAEtB,MAAM;QAAET,cAAc;QAAED;MAAuB,CAAC,GAC/CL,iBAAiB,CAAC,CAAC;MAEpB,MAAMuB,YAAY,GAAGhD,mBAAmB,CAAE+B,cAAe,CAAC,CAACkB,KAAK,CAC7DC,aAAa,IAAM;QACpB,OACC,CAAC,CAAEA,aAAa,IAChB7I,eAAe,CACd6I,aAAa,CAACC,IAAI,EAClB,UAAU,EACV,IACD,CAAC,IACDzD,kBAAkB,CACjBwD,aAAa,CAACC,IAAI,EAClBrB,sBACD,CAAC;MAEH,CACD,CAAC;MAED,IAAKkB,YAAY,EAAG;QACnB,MAAMI,aAAa,GAAG,MAAMjE,eAAe,CAC1C4C,cAAc,EACd,KACD,CAAC;QAED,IAAKqB,aAAa,EAAEnE,MAAM,EAAG;UAC5B;UACA6D,uBAAuB,CAAEM,aAAa,CAAE,CAAC,CAAE,EAAE,KAAM,CAAC;QACrD;MACD;IACD,CAAC,MAAM,IAAK5B,OAAO,CAAE,iCAAiC,EAAES,KAAM,CAAC,EAAG;MACjEA,KAAK,CAACO,cAAc,CAAC,CAAC;MAEtB,MAAM;QAAET;MAAe,CAAC,GAAGN,iBAAiB,CAAC,CAAC;MAC9C,MAAMjC,iBAAiB,CAAEuC,cAAc,CAAE,CAAC,CAAG,CAAC;MAC9C,MAAMsB,mBAAmB,GAAG1D,yBAAyB,CAAC,CAAC;;MAEvD;MACAF,0BAA0B,CAAEgD,SAAU,CAAC;MACvCK,uBAAuB,CAAEO,mBAAmB,CAAE,CAAC,CAAE,EAAE,KAAM,CAAC;IAC3D,CAAC,MAAM,IAAK7B,OAAO,CAAE,gCAAgC,EAAES,KAAM,CAAC,EAAG;MAChEA,KAAK,CAACO,cAAc,CAAC,CAAC;MAEtB,MAAM;QAAET;MAAe,CAAC,GAAGN,iBAAiB,CAAC,CAAC;MAC9C,MAAMlC,gBAAgB,CAAEwC,cAAc,CAACuB,EAAE,CAAE,CAAC,CAAE,CAAE,CAAC;MACjD,MAAMD,mBAAmB,GAAG1D,yBAAyB,CAAC,CAAC;;MAEvD;MACAF,0BAA0B,CAAEgD,SAAU,CAAC;MACvCK,uBAAuB,CAAEO,mBAAmB,CAAE,CAAC,CAAE,EAAE,KAAM,CAAC;IAC3D,CAAC,MAAM,IAAK7B,OAAO,CAAE,8BAA8B,EAAES,KAAM,CAAC,EAAG;MAC9DA,KAAK,CAACO,cAAc,CAAC,CAAC;MAEtB,MAAM;QAAEV,sBAAsB;QAAEJ;MAAuB,CAAC,GACvDD,iBAAiB,CAAC,CAAC;MACpB,MAAM8B,cAAc,GAAGzD,aAAa,CAAEgC,sBAAuB,CAAC;MAC9D,IAAK,CAAEyB,cAAc,CAACtE,MAAM,EAAG;QAC9B;MACD;;MAEA;MACA;MACA;MACA;MACA;MACA;MACA,IAAKxD,cAAc,CAAEiG,sBAAsB,EAAE6B,cAAe,CAAC,EAAG;QAC/D;QACA;QACA;QACA,IACCzB,sBAAsB,IACtBA,sBAAsB,KAAKP,YAAY,EACtC;UACDuB,uBAAuB,CAAEhB,sBAAsB,EAAE,IAAK,CAAC;UACvD;QACD;MACD;;MAEA;MACA;MACA1C,WAAW,CACVmE,cAAc,CAAE,CAAC,CAAE,EACnBA,cAAc,CAAEA,cAAc,CAACtE,MAAM,GAAG,CAAC,CAAE,EAC3C,IACD,CAAC;IACF,CAAC,MAAM,IAAKuC,OAAO,CAAE,sCAAsC,EAAES,KAAM,CAAC,EAAG;MACtEA,KAAK,CAACO,cAAc,CAAC,CAAC;MACtB,MAAM;QAAEX;MAAmB,CAAC,GAAGJ,iBAAiB,CAAC,CAAC;MAClD,MAAM+B,YAAY,GAAGzD,eAAe,CAAE8B,kBAAkB,EAAE,KAAM,CAAC;MACjE;MACAZ,WAAW,CAAC,CAAC;MACb;MACAF,MAAM,CAAEyC,YAAa,CAAC;IACvB,CAAC,MAAM,IAAKhC,OAAO,CAAE,yBAAyB,EAAES,KAAM,CAAC,EAAG;MACzD,MAAM;QAAEF;MAAe,CAAC,GAAGN,iBAAiB,CAAC,CAAC;MAC9C,IAAKM,cAAc,CAAC9C,MAAM,GAAG,CAAC,IAAIiB,WAAW,CAAE6B,cAAe,CAAC,EAAG;QACjEE,KAAK,CAACO,cAAc,CAAC,CAAC;QACtB,MAAMO,MAAM,GAAG/C,mBAAmB,CAAE+B,cAAe,CAAC;QACpD,MAAM0B,iBAAiB,GAAGtD,oBAAoB,CAAC,CAAC;QAChD,MAAMuD,SAAS,GAAGpJ,iBAAiB,CAClCyI,MAAM,EACNU,iBACD,CAAC;QACDpE,aAAa,CAAE0C,cAAc,EAAE2B,SAAU,CAAC;QAC1C9H,KAAK,CAAEN,EAAE,CAAE,8BAA+B,CAAE,CAAC;QAC7C,MAAM+H,mBAAmB,GAAG1D,yBAAyB,CAAC,CAAC;QACvD;QACAF,0BAA0B,CAAEgD,SAAU,CAAC;QACvCK,uBAAuB,CAAEO,mBAAmB,CAAE,CAAC,CAAE,EAAE,KAAM,CAAC;MAC3D;IACD;EACD;EAEA,MAAMM,YAAY,GAAG5I,WAAW,CAAE,MAAM;IACvC0D,YAAY,CAAE,IAAK,CAAC;IACpBS,oBAAoB,CAAE9B,QAAQ,EAAE,IAAK,CAAC;EACvC,CAAC,EAAE,CAAEA,QAAQ,EAAEqB,YAAY,EAAES,oBAAoB,CAAG,CAAC;EACrD,MAAM0E,YAAY,GAAG7I,WAAW,CAAE,MAAM;IACvC0D,YAAY,CAAE,KAAM,CAAC;IACrBS,oBAAoB,CAAE9B,QAAQ,EAAE,KAAM,CAAC;EACxC,CAAC,EAAE,CAAEA,QAAQ,EAAEqB,YAAY,EAAES,oBAAoB,CAAG,CAAC;EAErD,MAAM2E,iBAAiB,GAAG9I,WAAW,CAClCkH,KAAK,IAAM;IACZtE,WAAW,CAAEsE,KAAK,EAAE7E,QAAS,CAAC;IAC9B6E,KAAK,CAACO,cAAc,CAAC,CAAC;EACvB,CAAC,EACD,CAAEpF,QAAQ,EAAEO,WAAW,CACxB,CAAC;EAED,MAAMmF,uBAAuB,GAAG/H,WAAW,CAC1C,CAAE+I,aAAa,EAAEC,iBAAiB,KAAM;IACvC,IAAKA,iBAAiB,EAAG;MACxBpG,WAAW,CAAE8E,SAAS,EAAEqB,aAAa,EAAE,IAAI,EAAE,IAAK,CAAC;IACpD;IAEAzH,aAAa,CAAEyH,aAAa,EAAExC,kBAAkB,EAAE0C,OAAQ,CAAC;EAC5D,CAAC,EACD,CAAErG,WAAW,EAAE2D,kBAAkB,CAClC,CAAC;EAED,MAAM2C,cAAc,GAAGlJ,WAAW,CAC/BkH,KAAK,IAAM;IACZ;IACAA,KAAK,CAACO,cAAc,CAAC,CAAC;IACtBP,KAAK,CAACM,eAAe,CAAC,CAAC;IACvB,IAAKrE,UAAU,KAAK,IAAI,EAAG;MAC1B8C,QAAQ,CAAE5D,QAAS,CAAC;IACrB,CAAC,MAAM,IAAKc,UAAU,KAAK,KAAK,EAAG;MAClC6C,MAAM,CAAE3D,QAAS,CAAC;IACnB;EACD,CAAC,EACD,CAAEA,QAAQ,EAAE2D,MAAM,EAAEC,QAAQ,EAAE9C,UAAU,CACzC,CAAC;;EAED;EACA,MAAMgG,aAAa,GAAGnJ,WAAW,CAC9BkH,KAAK,IAAM;IACZ,IAAKrB,gBAAgB,IAAIL,wBAAwB,EAAG;MACnDhC,WAAW,CAACyF,OAAO,EAAEG,KAAK,CAAC,CAAC;MAC5B;MACAxF,qBAAqB,CACpB,IAAIyF,MAAM,CAACC,OAAO,CAAEpC,KAAK,CAACqC,OAAO,EAAErC,KAAK,CAACsC,OAAO,EAAE,CAAC,EAAE,CAAE,CACxD,CAAC;MACDtC,KAAK,CAACO,cAAc,CAAC,CAAC;IACvB;EACD,CAAC,EACD,CAAEjC,wBAAwB,EAAEhC,WAAW,EAAEqC,gBAAgB,CAC1D,CAAC;EAED,MAAM4D,WAAW,GAAGzJ,WAAW,CAC5BkH,KAAK,IAAM;IACZ;IACA;IACA,IAAK1B,wBAAwB,IAAI0B,KAAK,CAACwC,MAAM,KAAK,CAAC,EAAG;MACrDxC,KAAK,CAACO,cAAc,CAAC,CAAC;IACvB;EACD,CAAC,EACD,CAAEjC,wBAAwB,CAC3B,CAAC;EAED,MAAMmE,qBAAqB,GAAG1J,OAAO,CAAE,MAAM;IAC5C,MAAM;MAAE2J;IAAc,CAAC,GAAGrG,MAAM,EAAE0F,OAAO,IAAI,CAAC,CAAC;;IAE/C;IACA;IACA,IAAK,CAAEtF,kBAAkB,IAAI,CAAEiG,aAAa,EAAG;MAC9C,OAAOlC,SAAS;IACjB;;IAEA;IACA,OAAO;MACNkC,aAAa;MACbC,qBAAqBA,CAAA,EAAG;QACvB,OAAOlG,kBAAkB;MAC1B;IACD,CAAC;EACF,CAAC,EAAE,CAAEA,kBAAkB,CAAG,CAAC;EAE3B,MAAMmG,uBAAuB,GAAG9J,WAAW,CAAE,MAAM;IAClD;IACA;IACA4D,qBAAqB,CAAE8D,SAAU,CAAC;EACnC,CAAC,EAAE,CAAE9D,qBAAqB,CAAG,CAAC;;EAE9B;EACA;EACA;EACA7C,yBAAyB,CAAE;IAC1B2B,UAAU;IACVqH,UAAU,EAAExG,MAAM;IAClBH;EACD,CAAE,CAAC;;EAEH;EACA;EACA;EACA,IAAK,CAAEhB,KAAK,EAAG;IACd,OAAO,IAAI;EACZ;EAEA,MAAM4H,wBAAwB,GAAG5I,2BAA2B,CAC3DyB,QAAQ,EACRG,iBAAiB,EACjBF,KACD,CAAC;EAED,MAAMmH,0BAA0B,GAAG5I,6BAA6B,CAC/DgE,gBAAgB,EAChBxB,QACD,CAAC;EAED,MAAMqG,WAAW,GAAGlH,iBAAiB,GAAG,CAAC;EACzC,MAAMmH,iBAAiB,GAAGlH,eAAe,IAAIiH,WAAW;EACxD,MAAME,kBAAkB,GAAG/K,IAAI,CAC9B,0CAA0C,EAC1C;IAAE,YAAY,EAAEoE,SAAS,IAAIf;EAAW,CACzC,CAAC;EAED,MAAM2H,8BAA8B,GAAGhL,IAAI,CAC1C,yCAAyC,EACzC;IAAE,YAAY,EAAEoE,SAAS,IAAIO;EAAqB,CACnD,CAAC;EAED,IAAIsG,OAAO;EACX,IAAKH,iBAAiB,EAAG;IACxBG,OAAO,GAAG,CAAC;EACZ,CAAC,MAAM,IAAK,CAAEzE,gBAAgB,EAAG;IAChCyE,OAAO,GAAG,CAAC;EACZ;EAEA,MAAMC,OAAO,GAAGlL,IAAI,CAAE;IACrB,aAAa,EAAEqD,UAAU;IACzB,mBAAmB,EAAEsB,oBAAoB;IACzC,kBAAkB,EAAEC,mBAAmB;IACvC,oBAAoB,EAAEtB,gBAAgB;IACtC,kBAAkB,EAAEU,cAAc;IAClC,aAAa,EAAEb,SAAS;IACxB,iBAAiB,EAAE,CAAEqD,gBAAgB;IACrC,WAAW,EAAER,gBAAgB,EAAEmF,QAAQ;IACvC,cAAc,EAAEzG,OAAO;IACvB,wBAAwB,EAAEzB,YAAY,KAAK,QAAQ;IACnD,oBAAoB,EAAEA,YAAY,KAAK,IAAI;IAC3C,sBAAsB,EAAEA,YAAY,KAAK,MAAM;IAC/C,yBAAyB,EAAEC,oBAAoB;IAC/C,YAAY,EAAEE;EACf,CAAE,CAAC;;EAEH;EACA;EACA;EACA;EACA,MAAMgI,iBAAiB,GAAGrH,iBAAiB,CAACyD,QAAQ,CAAExE,QAAS,CAAC,GAC7De,iBAAiB,GACjB,CAAEf,QAAQ,CAAE;;EAEf;EACA,MAAMqI,6BAA6B,GAClChI,UAAU,IAAIU,iBAAiB,CAACc,MAAM,KAAK,CAAC;EAE7C,oBACClC,KAAA,CAAClB,YAAY;IACZ6J,SAAS,EAAGJ,OAAS;IACrB/H,SAAS,EAAGA,SAAW;IACvByE,SAAS,EAAGA,SAAW;IACvB2B,YAAY,EAAGA,YAAc;IAC7BC,YAAY,EAAGA,YAAc;IAC7B+B,OAAO,EAAGhC,YAAc;IACxBiC,MAAM,EAAGhC,YAAc;IACvB/F,KAAK,EAAGA,KAAO;IACfD,QAAQ,EAAGA,QAAU;IACrBE,QAAQ,EAAGA,QAAU;IACrBG,IAAI,EAAGA,IAAM;IACb4H,EAAE,EAAG,aAAc1E,kBAAkB,UAAY/D,QAAQ,EAAK;IAC9D,cAAaA,QAAU;IACvB,iBAAgByB,OAAO,GAAGX,UAAU,GAAGuE,SAAW;IAClDqD,GAAG,EAAGxH,MAAQ;IAAAyH,QAAA,gBAEdlJ,IAAA,CAACnC,YAAY;MACZgL,SAAS,EAAC,6CAA6C;MACvDL,OAAO,EAAGA,OAAS;MACnBS,GAAG,EAAGzH,OAAS;MACf,iBAAgB,CAAC,CAAEZ,UAAY;MAAAsI,QAAA,EAE7BA,CAAE;QAAED,GAAG;QAAEE,QAAQ;QAAEL;MAAQ,CAAC,kBAC7B5I,KAAA;QAAK2I,SAAS,EAAC,kDAAkD;QAAAK,QAAA,gBAChElJ,IAAA,CAACZ,qBAAqB;UACrBkB,KAAK,EAAGA,KAAO;UACf8I,OAAO,EAAGpC,iBAAmB;UAC7BK,aAAa,EAAGA,aAAe;UAC/BM,WAAW,EAAGA,WAAa;UAC3B0B,gBAAgB,EAAGjC,cAAgB;UACnCxG,UAAU,EAAGA,UAAY;UACzBG,QAAQ,EAAGA,QAAU;UACrBG,iBAAiB,EAAGA,iBAAmB;UACvCF,KAAK,EAAGA,KAAO;UACfiI,GAAG,EAAGA,GAAK;UACXE,QAAQ,EACPP,6BAA6B,GAAG,CAAC,GAAGO,QACpC;UACDL,OAAO,EAAGA,OAAS;UACnBzH,UAAU,EAAGW,OAAO,GAAGX,UAAU,GAAGuE,SAAW;UAC/CtE,iBAAiB,EAAGA,iBAAmB;UACvCgI,eAAe,EAAGrF;QAAe,CACjC,CAAC,eACFjE,IAAA,CAACJ,kBAAkB;UAACoJ,EAAE,EAAG/E,aAAe;UAAAiF,QAAA,EACrC,CACDhB,wBAAwB,EACxBC,0BAA0B,CAC1B,CACCoB,MAAM,CAAEC,OAAQ,CAAC,CACjBC,IAAI,CAAE,GAAI;QAAC,CACM,CAAC;MAAA,CACjB;IACL,CACY,CAAC,EACbpB,iBAAiB,iBAClBrI,IAAA,CAAAI,SAAA;MAAA8I,QAAA,eACChJ,KAAA,CAACrC,YAAY;QACZgL,SAAS,EAAGP,kBAAoB;QAChCoB,eAAe;QAAAR,QAAA,gBAEflJ,IAAA,CAACjC,YAAY;UAAAmL,QAAA,EACVA,CAAE;YAAED,GAAG;YAAEE,QAAQ;YAAEL;UAAQ,CAAC,kBAC7B9I,IAAA,CAACd,kBAAkB;YAClByK,WAAW,EAAC,UAAU;YACtBC,SAAS,EAAG,CAAErJ,QAAQ,CAAI;YAC1B0I,GAAG,EAAGA,GAAK;YACXE,QAAQ,EAAGA,QAAU;YACrBL,OAAO,EAAGA;UAAS,CACnB;QACD,CACY,CAAC,eACf9I,IAAA,CAACjC,YAAY;UAAAmL,QAAA,EACVA,CAAE;YAAED,GAAG;YAAEE,QAAQ;YAAEL;UAAQ,CAAC,kBAC7B9I,IAAA,CAACb,oBAAoB;YACpBwK,WAAW,EAAC,UAAU;YACtBC,SAAS,EAAG,CAAErJ,QAAQ,CAAI;YAC1B0I,GAAG,EAAGA,GAAK;YACXE,QAAQ,EAAGA,QAAU;YACrBL,OAAO,EAAGA;UAAS,CACnB;QACD,CACY,CAAC;MAAA,CACF;IAAC,CACd,CACF,EAEC/E,gBAAgB,IAAIM,iBAAiB,iBACtCrE,IAAA,CAACnC,YAAY;MACZgL,SAAS,EAAGN,8BAAgC;MAC5C,iBAAgB,CAAC,CAAE3H,UAAY;MAC/BqI,GAAG,EAAGvH,WAAa;MAAAwH,QAAA,EAEjBA,CAAE;QAAED,GAAG;QAAEE,QAAQ;QAAEL;MAAQ,CAAC,kBAC7B9I,IAAA,CAACqE,iBAAiB;QACjBuF,SAAS,EAAGjB,iBAAmB;QAC/BrI,KAAK,EAAGA,KAAO;QACfuJ,IAAI,EAAG5L,YAAc;QACrB6L,KAAK,EAAGrL,EAAE,CAAE,SAAU,CAAG;QACzBsL,YAAY,EAAG;UACdC,MAAM,EAAEnC,qBAAqB,CAAE;QAChC,CAAG;QACHoC,WAAW,EAAG;UACbhB,GAAG;UACHJ,SAAS,EAAE,oCAAoC;UAC/CM,QAAQ;UACRC,OAAO,EAAEpB,uBAAuB;UAChCc;QACD,CAAG;QACHoB,sBAAsB;QACtBhG,MAAM,EAAGA,MAAQ;QACjBK,aAAa,EAAGA,aAAe;QAC/BC,gBAAgB,EAAGA,gBAAkB;QACrC2F,yBAAyB,EACxBlE;MACA,CACD;IACD,CACY,CACd;EAAA,CACY,CAAC;AAEjB;AAEA,eAAe3H,IAAI,CAAE+B,aAAc,CAAC","ignoreList":[]}
@@ -15,7 +15,7 @@ import { isInSameBlock, isInsideRootBlock } from '../../utils/dom';
15
15
  import { unlock } from '../../lock-unlock';
16
16
  import { jsx as _jsx } from "react/jsx-runtime";
17
17
  export default function useTabNav() {
18
- const container = useRef();
18
+ const containerRef = /** @type {typeof useRef<HTMLElement>} */useRef();
19
19
  const focusCaptureBeforeRef = useRef();
20
20
  const focusCaptureAfterRef = useRef();
21
21
  const {
@@ -35,19 +35,19 @@ export default function useTabNav() {
35
35
  // capturing on the focus capture elements.
36
36
  const noCaptureRef = useRef();
37
37
  function onFocusCapture(event) {
38
- const canvasElement = container.current.ownerDocument === event.target.ownerDocument ? container.current : container.current.ownerDocument.defaultView.frameElement;
38
+ const canvasElement = containerRef.current.ownerDocument === event.target.ownerDocument ? containerRef.current : containerRef.current.ownerDocument.defaultView.frameElement;
39
39
 
40
40
  // Do not capture incoming focus if set by us in WritingFlow.
41
41
  if (noCaptureRef.current) {
42
42
  noCaptureRef.current = null;
43
43
  } else if (hasMultiSelection()) {
44
- container.current.focus();
44
+ containerRef.current.focus();
45
45
  } else if (getSelectedBlockClientId()) {
46
46
  if (getLastFocus()?.current) {
47
47
  getLastFocus().current.focus();
48
48
  } else {
49
49
  // Handles when the last focus has not been set yet, or has been cleared by new blocks being added via the inserter.
50
- container.current.querySelector(`[data-block="${getSelectedBlockClientId()}"]`).focus();
50
+ containerRef.current.querySelector(`[data-block="${getSelectedBlockClientId()}"]`).focus();
51
51
  }
52
52
  }
53
53
  // In "compose" mode without a selected ID, we want to place focus on the section root when tabbing to the canvas.
@@ -57,11 +57,11 @@ export default function useTabNav() {
57
57
 
58
58
  // If we have section within the section root, focus the first one.
59
59
  if (sectionBlocks.length) {
60
- container.current.querySelector(`[data-block="${sectionBlocks[0]}"]`).focus();
60
+ containerRef.current.querySelector(`[data-block="${sectionBlocks[0]}"]`).focus();
61
61
  }
62
62
  // If we don't have any section blocks, focus the section root.
63
63
  else if (sectionRootClientId) {
64
- container.current.querySelector(`[data-block="${sectionRootClientId}"]`).focus();
64
+ containerRef.current.querySelector(`[data-block="${sectionRootClientId}"]`).focus();
65
65
  } else {
66
66
  // If we don't have any section root, focus the canvas.
67
67
  canvasElement.focus();
@@ -70,7 +70,7 @@ export default function useTabNav() {
70
70
  const isBefore =
71
71
  // eslint-disable-next-line no-bitwise
72
72
  event.target.compareDocumentPosition(canvasElement) & event.target.DOCUMENT_POSITION_FOLLOWING;
73
- const tabbables = focus.tabbable.find(container.current);
73
+ const tabbables = focus.tabbable.find(containerRef.current);
74
74
  if (tabbables.length) {
75
75
  const next = isBefore ? tabbables[0] : tabbables[tabbables.length - 1];
76
76
  next.focus();
@@ -102,19 +102,26 @@ export default function useTabNav() {
102
102
  if (event.keyCode !== TAB) {
103
103
  return;
104
104
  }
105
- if (!hasMultiSelection() && !getSelectedBlockClientId()) {
105
+ if (
106
+ // Bails in case the focus capture elements aren’t present. They
107
+ // may be omitted to avoid silent tab stops in preview mode.
108
+ // See: https://github.com/WordPress/gutenberg/pull/59317
109
+ !focusCaptureAfterRef.current || !focusCaptureBeforeRef.current) {
106
110
  return;
107
111
  }
108
- const isShift = event.shiftKey;
112
+ const {
113
+ target,
114
+ shiftKey: isShift
115
+ } = event;
109
116
  const direction = isShift ? 'findPrevious' : 'findNext';
110
- const nextTabbable = focus.tabbable[direction](event.target);
117
+ const nextTabbable = focus.tabbable[direction](target);
111
118
 
112
119
  // We want to constrain the tabbing to the block and its child blocks.
113
120
  // If the preceding form element is within a different block,
114
121
  // such as two sibling image blocks in the placeholder state,
115
122
  // we want shift + tab from the first form element to move to the image
116
123
  // block toolbar and not the previous image block's form element.
117
- const currentBlock = event.target.closest('[data-block]');
124
+ const currentBlock = target.closest('[data-block]');
118
125
  const isElementPartOfSelectedBlock = currentBlock && nextTabbable && (isInSameBlock(currentBlock, nextTabbable) || isInsideRootBlock(currentBlock, nextTabbable));
119
126
 
120
127
  // Allow tabbing from the block wrapper to a form element,
@@ -151,7 +158,7 @@ export default function useTabNav() {
151
158
 
152
159
  // If focus disappears due to there being no blocks, move focus to
153
160
  // the writing flow wrapper.
154
- if (!event.relatedTarget && ownerDocument.activeElement === ownerDocument.body && getBlockCount() === 0) {
161
+ if (!event.relatedTarget && event.target.hasAttribute('data-block') && ownerDocument.activeElement === ownerDocument.body && getBlockCount() === 0) {
155
162
  node.focus();
156
163
  }
157
164
  }
@@ -171,7 +178,7 @@ export default function useTabNav() {
171
178
  if (event.target?.getAttribute('role') === 'region') {
172
179
  return;
173
180
  }
174
- if (container.current === event.target) {
181
+ if (containerRef.current === event.target) {
175
182
  return;
176
183
  }
177
184
  const isShift = event.shiftKey;
@@ -200,7 +207,7 @@ export default function useTabNav() {
200
207
  node.removeEventListener('focusout', onFocusOut);
201
208
  };
202
209
  }, []);
203
- const mergedRefs = useMergeRefs([container, ref]);
210
+ const mergedRefs = useMergeRefs([containerRef, ref]);
204
211
  return [before, mergedRefs, after];
205
212
  }
206
213
  //# sourceMappingURL=use-tab-nav.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["focus","isFormElement","TAB","useSelect","useDispatch","useRefEffect","useMergeRefs","useRef","store","blockEditorStore","isInSameBlock","isInsideRootBlock","unlock","jsx","_jsx","useTabNav","container","focusCaptureBeforeRef","focusCaptureAfterRef","hasMultiSelection","getSelectedBlockClientId","getBlockCount","getBlockOrder","getLastFocus","getSectionRootClientId","isZoomOut","setLastFocus","noCaptureRef","onFocusCapture","event","canvasElement","current","ownerDocument","target","defaultView","frameElement","querySelector","sectionRootClientId","sectionBlocks","length","isBefore","compareDocumentPosition","DOCUMENT_POSITION_FOLLOWING","tabbables","tabbable","find","next","before","ref","tabIndex","onFocus","after","node","onKeyDown","defaultPrevented","keyCode","isShift","shiftKey","direction","nextTabbable","currentBlock","closest","isElementPartOfSelectedBlock","preventScroll","onFocusOut","relatedTarget","activeElement","body","preventScrollOnTab","getAttribute","preventDefault","addEventListener","removeEventListener","mergedRefs"],"sources":["@wordpress/block-editor/src/components/writing-flow/use-tab-nav.js"],"sourcesContent":["/**\n * WordPress dependencies\n */\nimport { focus, isFormElement } from '@wordpress/dom';\nimport { TAB } from '@wordpress/keycodes';\nimport { useSelect, useDispatch } from '@wordpress/data';\nimport { useRefEffect, useMergeRefs } from '@wordpress/compose';\nimport { useRef } from '@wordpress/element';\n\n/**\n * Internal dependencies\n */\nimport { store as blockEditorStore } from '../../store';\nimport { isInSameBlock, isInsideRootBlock } from '../../utils/dom';\nimport { unlock } from '../../lock-unlock';\n\nexport default function useTabNav() {\n\tconst container = useRef();\n\tconst focusCaptureBeforeRef = useRef();\n\tconst focusCaptureAfterRef = useRef();\n\n\tconst {\n\t\thasMultiSelection,\n\t\tgetSelectedBlockClientId,\n\t\tgetBlockCount,\n\t\tgetBlockOrder,\n\t\tgetLastFocus,\n\t\tgetSectionRootClientId,\n\t\tisZoomOut,\n\t} = unlock( useSelect( blockEditorStore ) );\n\tconst { setLastFocus } = unlock( useDispatch( blockEditorStore ) );\n\n\t// Reference that holds the a flag for enabling or disabling\n\t// capturing on the focus capture elements.\n\tconst noCaptureRef = useRef();\n\n\tfunction onFocusCapture( event ) {\n\t\tconst canvasElement =\n\t\t\tcontainer.current.ownerDocument === event.target.ownerDocument\n\t\t\t\t? container.current\n\t\t\t\t: container.current.ownerDocument.defaultView.frameElement;\n\n\t\t// Do not capture incoming focus if set by us in WritingFlow.\n\t\tif ( noCaptureRef.current ) {\n\t\t\tnoCaptureRef.current = null;\n\t\t} else if ( hasMultiSelection() ) {\n\t\t\tcontainer.current.focus();\n\t\t} else if ( getSelectedBlockClientId() ) {\n\t\t\tif ( getLastFocus()?.current ) {\n\t\t\t\tgetLastFocus().current.focus();\n\t\t\t} else {\n\t\t\t\t// Handles when the last focus has not been set yet, or has been cleared by new blocks being added via the inserter.\n\t\t\t\tcontainer.current\n\t\t\t\t\t.querySelector(\n\t\t\t\t\t\t`[data-block=\"${ getSelectedBlockClientId() }\"]`\n\t\t\t\t\t)\n\t\t\t\t\t.focus();\n\t\t\t}\n\t\t}\n\t\t// In \"compose\" mode without a selected ID, we want to place focus on the section root when tabbing to the canvas.\n\t\telse if ( isZoomOut() ) {\n\t\t\tconst sectionRootClientId = getSectionRootClientId();\n\t\t\tconst sectionBlocks = getBlockOrder( sectionRootClientId );\n\n\t\t\t// If we have section within the section root, focus the first one.\n\t\t\tif ( sectionBlocks.length ) {\n\t\t\t\tcontainer.current\n\t\t\t\t\t.querySelector( `[data-block=\"${ sectionBlocks[ 0 ] }\"]` )\n\t\t\t\t\t.focus();\n\t\t\t}\n\t\t\t// If we don't have any section blocks, focus the section root.\n\t\t\telse if ( sectionRootClientId ) {\n\t\t\t\tcontainer.current\n\t\t\t\t\t.querySelector( `[data-block=\"${ sectionRootClientId }\"]` )\n\t\t\t\t\t.focus();\n\t\t\t} else {\n\t\t\t\t// If we don't have any section root, focus the canvas.\n\t\t\t\tcanvasElement.focus();\n\t\t\t}\n\t\t} else {\n\t\t\tconst isBefore =\n\t\t\t\t// eslint-disable-next-line no-bitwise\n\t\t\t\tevent.target.compareDocumentPosition( canvasElement ) &\n\t\t\t\tevent.target.DOCUMENT_POSITION_FOLLOWING;\n\t\t\tconst tabbables = focus.tabbable.find( container.current );\n\n\t\t\tif ( tabbables.length ) {\n\t\t\t\tconst next = isBefore\n\t\t\t\t\t? tabbables[ 0 ]\n\t\t\t\t\t: tabbables[ tabbables.length - 1 ];\n\t\t\t\tnext.focus();\n\t\t\t}\n\t\t}\n\t}\n\n\tconst before = (\n\t\t<div\n\t\t\tref={ focusCaptureBeforeRef }\n\t\t\ttabIndex=\"0\"\n\t\t\tonFocus={ onFocusCapture }\n\t\t/>\n\t);\n\n\tconst after = (\n\t\t<div\n\t\t\tref={ focusCaptureAfterRef }\n\t\t\ttabIndex=\"0\"\n\t\t\tonFocus={ onFocusCapture }\n\t\t/>\n\t);\n\n\tconst ref = useRefEffect( ( node ) => {\n\t\tfunction onKeyDown( event ) {\n\t\t\tif ( event.defaultPrevented ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// In Edit mode, Tab should focus the first tabbable element after\n\t\t\t// the content, which is normally the sidebar (with block controls)\n\t\t\t// and Shift+Tab should focus the first tabbable element before the\n\t\t\t// content, which is normally the block toolbar.\n\t\t\t// Arrow keys can be used, and Tab and arrow keys can be used in\n\t\t\t// Navigation mode (press Esc), to navigate through blocks.\n\t\t\tif ( event.keyCode !== TAB ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif ( ! hasMultiSelection() && ! getSelectedBlockClientId() ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst isShift = event.shiftKey;\n\t\t\tconst direction = isShift ? 'findPrevious' : 'findNext';\n\t\t\tconst nextTabbable = focus.tabbable[ direction ]( event.target );\n\n\t\t\t// We want to constrain the tabbing to the block and its child blocks.\n\t\t\t// If the preceding form element is within a different block,\n\t\t\t// such as two sibling image blocks in the placeholder state,\n\t\t\t// we want shift + tab from the first form element to move to the image\n\t\t\t// block toolbar and not the previous image block's form element.\n\t\t\tconst currentBlock = event.target.closest( '[data-block]' );\n\t\t\tconst isElementPartOfSelectedBlock =\n\t\t\t\tcurrentBlock &&\n\t\t\t\tnextTabbable &&\n\t\t\t\t( isInSameBlock( currentBlock, nextTabbable ) ||\n\t\t\t\t\tisInsideRootBlock( currentBlock, nextTabbable ) );\n\n\t\t\t// Allow tabbing from the block wrapper to a form element,\n\t\t\t// and between form elements rendered in a block and its child blocks,\n\t\t\t// such as inside a placeholder. Form elements are generally\n\t\t\t// meant to be UI rather than part of the content. Ideally\n\t\t\t// these are not rendered in the content and perhaps in the\n\t\t\t// future they can be rendered in an iframe or shadow DOM.\n\t\t\tif (\n\t\t\t\tisFormElement( nextTabbable ) &&\n\t\t\t\tisElementPartOfSelectedBlock\n\t\t\t) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst next = isShift ? focusCaptureBeforeRef : focusCaptureAfterRef;\n\n\t\t\t// Disable focus capturing on the focus capture element, so it\n\t\t\t// doesn't refocus this block and so it allows default behaviour\n\t\t\t// (moving focus to the next tabbable element).\n\t\t\tnoCaptureRef.current = true;\n\n\t\t\t// Focusing the focus capture element, which is located above and\n\t\t\t// below the editor, should not scroll the page all the way up or\n\t\t\t// down.\n\t\t\tnext.current.focus( { preventScroll: true } );\n\t\t}\n\n\t\tfunction onFocusOut( event ) {\n\t\t\tsetLastFocus( { ...getLastFocus(), current: event.target } );\n\n\t\t\tconst { ownerDocument } = node;\n\n\t\t\t// If focus disappears due to there being no blocks, move focus to\n\t\t\t// the writing flow wrapper.\n\t\t\tif (\n\t\t\t\t! event.relatedTarget &&\n\t\t\t\townerDocument.activeElement === ownerDocument.body &&\n\t\t\t\tgetBlockCount() === 0\n\t\t\t) {\n\t\t\t\tnode.focus();\n\t\t\t}\n\t\t}\n\n\t\t// When tabbing back to an element in block list, this event handler prevents scrolling if the\n\t\t// focus capture divs (before/after) are outside of the viewport. (For example shift+tab back to a paragraph\n\t\t// when focus is on a sidebar element. This prevents the scrollable writing area from jumping either to the\n\t\t// top or bottom of the document.\n\t\t//\n\t\t// Note that it isn't possible to disable scrolling in the onFocus event. We need to intercept this\n\t\t// earlier in the keypress handler, and call focus( { preventScroll: true } ) instead.\n\t\t// https://developer.mozilla.org/en-US/docs/Web/API/HTMLOrForeignElement/focus#parameters\n\t\tfunction preventScrollOnTab( event ) {\n\t\t\tif ( event.keyCode !== TAB ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif ( event.target?.getAttribute( 'role' ) === 'region' ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif ( container.current === event.target ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst isShift = event.shiftKey;\n\t\t\tconst direction = isShift ? 'findPrevious' : 'findNext';\n\t\t\tconst target = focus.tabbable[ direction ]( event.target );\n\t\t\t// Only do something when the next tabbable is a focus capture div (before/after)\n\t\t\tif (\n\t\t\t\ttarget === focusCaptureBeforeRef.current ||\n\t\t\t\ttarget === focusCaptureAfterRef.current\n\t\t\t) {\n\t\t\t\tevent.preventDefault();\n\t\t\t\ttarget.focus( { preventScroll: true } );\n\t\t\t}\n\t\t}\n\n\t\tconst { ownerDocument } = node;\n\t\tconst { defaultView } = ownerDocument;\n\t\tdefaultView.addEventListener( 'keydown', preventScrollOnTab );\n\t\tnode.addEventListener( 'keydown', onKeyDown );\n\t\tnode.addEventListener( 'focusout', onFocusOut );\n\t\treturn () => {\n\t\t\tdefaultView.removeEventListener( 'keydown', preventScrollOnTab );\n\t\t\tnode.removeEventListener( 'keydown', onKeyDown );\n\t\t\tnode.removeEventListener( 'focusout', onFocusOut );\n\t\t};\n\t}, [] );\n\n\tconst mergedRefs = useMergeRefs( [ container, ref ] );\n\n\treturn [ before, mergedRefs, after ];\n}\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["focus","isFormElement","TAB","useSelect","useDispatch","useRefEffect","useMergeRefs","useRef","store","blockEditorStore","isInSameBlock","isInsideRootBlock","unlock","jsx","_jsx","useTabNav","containerRef","focusCaptureBeforeRef","focusCaptureAfterRef","hasMultiSelection","getSelectedBlockClientId","getBlockCount","getBlockOrder","getLastFocus","getSectionRootClientId","isZoomOut","setLastFocus","noCaptureRef","onFocusCapture","event","canvasElement","current","ownerDocument","target","defaultView","frameElement","querySelector","sectionRootClientId","sectionBlocks","length","isBefore","compareDocumentPosition","DOCUMENT_POSITION_FOLLOWING","tabbables","tabbable","find","next","before","ref","tabIndex","onFocus","after","node","onKeyDown","defaultPrevented","keyCode","shiftKey","isShift","direction","nextTabbable","currentBlock","closest","isElementPartOfSelectedBlock","preventScroll","onFocusOut","relatedTarget","hasAttribute","activeElement","body","preventScrollOnTab","getAttribute","preventDefault","addEventListener","removeEventListener","mergedRefs"],"sources":["@wordpress/block-editor/src/components/writing-flow/use-tab-nav.js"],"sourcesContent":["/**\n * WordPress dependencies\n */\nimport { focus, isFormElement } from '@wordpress/dom';\nimport { TAB } from '@wordpress/keycodes';\nimport { useSelect, useDispatch } from '@wordpress/data';\nimport { useRefEffect, useMergeRefs } from '@wordpress/compose';\nimport { useRef } from '@wordpress/element';\n\n/**\n * Internal dependencies\n */\nimport { store as blockEditorStore } from '../../store';\nimport { isInSameBlock, isInsideRootBlock } from '../../utils/dom';\nimport { unlock } from '../../lock-unlock';\n\nexport default function useTabNav() {\n\tconst containerRef = /** @type {typeof useRef<HTMLElement>} */ ( useRef )();\n\tconst focusCaptureBeforeRef = useRef();\n\tconst focusCaptureAfterRef = useRef();\n\n\tconst {\n\t\thasMultiSelection,\n\t\tgetSelectedBlockClientId,\n\t\tgetBlockCount,\n\t\tgetBlockOrder,\n\t\tgetLastFocus,\n\t\tgetSectionRootClientId,\n\t\tisZoomOut,\n\t} = unlock( useSelect( blockEditorStore ) );\n\tconst { setLastFocus } = unlock( useDispatch( blockEditorStore ) );\n\n\t// Reference that holds the a flag for enabling or disabling\n\t// capturing on the focus capture elements.\n\tconst noCaptureRef = useRef();\n\n\tfunction onFocusCapture( event ) {\n\t\tconst canvasElement =\n\t\t\tcontainerRef.current.ownerDocument === event.target.ownerDocument\n\t\t\t\t? containerRef.current\n\t\t\t\t: containerRef.current.ownerDocument.defaultView.frameElement;\n\n\t\t// Do not capture incoming focus if set by us in WritingFlow.\n\t\tif ( noCaptureRef.current ) {\n\t\t\tnoCaptureRef.current = null;\n\t\t} else if ( hasMultiSelection() ) {\n\t\t\tcontainerRef.current.focus();\n\t\t} else if ( getSelectedBlockClientId() ) {\n\t\t\tif ( getLastFocus()?.current ) {\n\t\t\t\tgetLastFocus().current.focus();\n\t\t\t} else {\n\t\t\t\t// Handles when the last focus has not been set yet, or has been cleared by new blocks being added via the inserter.\n\t\t\t\tcontainerRef.current\n\t\t\t\t\t.querySelector(\n\t\t\t\t\t\t`[data-block=\"${ getSelectedBlockClientId() }\"]`\n\t\t\t\t\t)\n\t\t\t\t\t.focus();\n\t\t\t}\n\t\t}\n\t\t// In \"compose\" mode without a selected ID, we want to place focus on the section root when tabbing to the canvas.\n\t\telse if ( isZoomOut() ) {\n\t\t\tconst sectionRootClientId = getSectionRootClientId();\n\t\t\tconst sectionBlocks = getBlockOrder( sectionRootClientId );\n\n\t\t\t// If we have section within the section root, focus the first one.\n\t\t\tif ( sectionBlocks.length ) {\n\t\t\t\tcontainerRef.current\n\t\t\t\t\t.querySelector( `[data-block=\"${ sectionBlocks[ 0 ] }\"]` )\n\t\t\t\t\t.focus();\n\t\t\t}\n\t\t\t// If we don't have any section blocks, focus the section root.\n\t\t\telse if ( sectionRootClientId ) {\n\t\t\t\tcontainerRef.current\n\t\t\t\t\t.querySelector( `[data-block=\"${ sectionRootClientId }\"]` )\n\t\t\t\t\t.focus();\n\t\t\t} else {\n\t\t\t\t// If we don't have any section root, focus the canvas.\n\t\t\t\tcanvasElement.focus();\n\t\t\t}\n\t\t} else {\n\t\t\tconst isBefore =\n\t\t\t\t// eslint-disable-next-line no-bitwise\n\t\t\t\tevent.target.compareDocumentPosition( canvasElement ) &\n\t\t\t\tevent.target.DOCUMENT_POSITION_FOLLOWING;\n\t\t\tconst tabbables = focus.tabbable.find( containerRef.current );\n\t\t\tif ( tabbables.length ) {\n\t\t\t\tconst next = isBefore\n\t\t\t\t\t? tabbables[ 0 ]\n\t\t\t\t\t: tabbables[ tabbables.length - 1 ];\n\t\t\t\tnext.focus();\n\t\t\t}\n\t\t}\n\t}\n\n\tconst before = (\n\t\t<div\n\t\t\tref={ focusCaptureBeforeRef }\n\t\t\ttabIndex=\"0\"\n\t\t\tonFocus={ onFocusCapture }\n\t\t/>\n\t);\n\n\tconst after = (\n\t\t<div\n\t\t\tref={ focusCaptureAfterRef }\n\t\t\ttabIndex=\"0\"\n\t\t\tonFocus={ onFocusCapture }\n\t\t/>\n\t);\n\n\tconst ref = useRefEffect( ( node ) => {\n\t\tfunction onKeyDown( event ) {\n\t\t\tif ( event.defaultPrevented ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// In Edit mode, Tab should focus the first tabbable element after\n\t\t\t// the content, which is normally the sidebar (with block controls)\n\t\t\t// and Shift+Tab should focus the first tabbable element before the\n\t\t\t// content, which is normally the block toolbar.\n\t\t\t// Arrow keys can be used, and Tab and arrow keys can be used in\n\t\t\t// Navigation mode (press Esc), to navigate through blocks.\n\t\t\tif ( event.keyCode !== TAB ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (\n\t\t\t\t// Bails in case the focus capture elements aren’t present. They\n\t\t\t\t// may be omitted to avoid silent tab stops in preview mode.\n\t\t\t\t// See: https://github.com/WordPress/gutenberg/pull/59317\n\t\t\t\t! focusCaptureAfterRef.current ||\n\t\t\t\t! focusCaptureBeforeRef.current\n\t\t\t) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst { target, shiftKey: isShift } = event;\n\t\t\tconst direction = isShift ? 'findPrevious' : 'findNext';\n\t\t\tconst nextTabbable = focus.tabbable[ direction ]( target );\n\n\t\t\t// We want to constrain the tabbing to the block and its child blocks.\n\t\t\t// If the preceding form element is within a different block,\n\t\t\t// such as two sibling image blocks in the placeholder state,\n\t\t\t// we want shift + tab from the first form element to move to the image\n\t\t\t// block toolbar and not the previous image block's form element.\n\t\t\tconst currentBlock = target.closest( '[data-block]' );\n\t\t\tconst isElementPartOfSelectedBlock =\n\t\t\t\tcurrentBlock &&\n\t\t\t\tnextTabbable &&\n\t\t\t\t( isInSameBlock( currentBlock, nextTabbable ) ||\n\t\t\t\t\tisInsideRootBlock( currentBlock, nextTabbable ) );\n\n\t\t\t// Allow tabbing from the block wrapper to a form element,\n\t\t\t// and between form elements rendered in a block and its child blocks,\n\t\t\t// such as inside a placeholder. Form elements are generally\n\t\t\t// meant to be UI rather than part of the content. Ideally\n\t\t\t// these are not rendered in the content and perhaps in the\n\t\t\t// future they can be rendered in an iframe or shadow DOM.\n\t\t\tif (\n\t\t\t\tisFormElement( nextTabbable ) &&\n\t\t\t\tisElementPartOfSelectedBlock\n\t\t\t) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tconst next = isShift ? focusCaptureBeforeRef : focusCaptureAfterRef;\n\n\t\t\t// Disable focus capturing on the focus capture element, so it\n\t\t\t// doesn't refocus this block and so it allows default behaviour\n\t\t\t// (moving focus to the next tabbable element).\n\t\t\tnoCaptureRef.current = true;\n\n\t\t\t// Focusing the focus capture element, which is located above and\n\t\t\t// below the editor, should not scroll the page all the way up or\n\t\t\t// down.\n\t\t\tnext.current.focus( { preventScroll: true } );\n\t\t}\n\n\t\tfunction onFocusOut( event ) {\n\t\t\tsetLastFocus( { ...getLastFocus(), current: event.target } );\n\n\t\t\tconst { ownerDocument } = node;\n\n\t\t\t// If focus disappears due to there being no blocks, move focus to\n\t\t\t// the writing flow wrapper.\n\t\t\tif (\n\t\t\t\t! event.relatedTarget &&\n\t\t\t\tevent.target.hasAttribute( 'data-block' ) &&\n\t\t\t\townerDocument.activeElement === ownerDocument.body &&\n\t\t\t\tgetBlockCount() === 0\n\t\t\t) {\n\t\t\t\tnode.focus();\n\t\t\t}\n\t\t}\n\n\t\t// When tabbing back to an element in block list, this event handler prevents scrolling if the\n\t\t// focus capture divs (before/after) are outside of the viewport. (For example shift+tab back to a paragraph\n\t\t// when focus is on a sidebar element. This prevents the scrollable writing area from jumping either to the\n\t\t// top or bottom of the document.\n\t\t//\n\t\t// Note that it isn't possible to disable scrolling in the onFocus event. We need to intercept this\n\t\t// earlier in the keypress handler, and call focus( { preventScroll: true } ) instead.\n\t\t// https://developer.mozilla.org/en-US/docs/Web/API/HTMLOrForeignElement/focus#parameters\n\t\tfunction preventScrollOnTab( event ) {\n\t\t\tif ( event.keyCode !== TAB ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif ( event.target?.getAttribute( 'role' ) === 'region' ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif ( containerRef.current === event.target ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst isShift = event.shiftKey;\n\t\t\tconst direction = isShift ? 'findPrevious' : 'findNext';\n\t\t\tconst target = focus.tabbable[ direction ]( event.target );\n\t\t\t// Only do something when the next tabbable is a focus capture div (before/after)\n\t\t\tif (\n\t\t\t\ttarget === focusCaptureBeforeRef.current ||\n\t\t\t\ttarget === focusCaptureAfterRef.current\n\t\t\t) {\n\t\t\t\tevent.preventDefault();\n\t\t\t\ttarget.focus( { preventScroll: true } );\n\t\t\t}\n\t\t}\n\n\t\tconst { ownerDocument } = node;\n\t\tconst { defaultView } = ownerDocument;\n\t\tdefaultView.addEventListener( 'keydown', preventScrollOnTab );\n\t\tnode.addEventListener( 'keydown', onKeyDown );\n\t\tnode.addEventListener( 'focusout', onFocusOut );\n\t\treturn () => {\n\t\t\tdefaultView.removeEventListener( 'keydown', preventScrollOnTab );\n\t\t\tnode.removeEventListener( 'keydown', onKeyDown );\n\t\t\tnode.removeEventListener( 'focusout', onFocusOut );\n\t\t};\n\t}, [] );\n\n\tconst mergedRefs = useMergeRefs( [ containerRef, ref ] );\n\n\treturn [ before, mergedRefs, after ];\n}\n"],"mappings":"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","ignoreList":[]}
@@ -1,7 +1,7 @@
1
1
  /**
2
2
  * WordPress dependencies
3
3
  */
4
- import { useState, useRef, useLayoutEffect, useEffect, useReducer } from '@wordpress/element';
4
+ import { useState, useRef, useEffect, useReducer } from '@wordpress/element';
5
5
  import isShallowEqual from '@wordpress/is-shallow-equal';
6
6
 
7
7
  /**
@@ -18,17 +18,23 @@ function SpacingVisualizer({
18
18
  }) {
19
19
  const blockElement = useBlockElement(clientId);
20
20
  const [style, updateStyle] = useReducer(() => computeStyle(blockElement));
21
- useLayoutEffect(() => {
21
+
22
+ // It's not sufficient to read the block’s computed style when `value` changes because
23
+ // the effect would run before the block’s style has updated. Thus observing mutations
24
+ // to the block’s attributes is used to trigger updates to the visualizer’s styles.
25
+ useEffect(() => {
22
26
  if (!blockElement) {
23
27
  return;
24
28
  }
25
- // It's not sufficient to read the computed spacing value when value.spacing changes as
26
- // useEffect may run before the browser recomputes CSS. We therefore combine
27
- // useLayoutEffect and two rAF calls to ensure that we read the spacing after the current
28
- // paint but before the next paint.
29
- // See https://github.com/WordPress/gutenberg/pull/59227.
30
- window.requestAnimationFrame(() => window.requestAnimationFrame(updateStyle));
31
- }, [blockElement, value]);
29
+ const observer = new window.MutationObserver(updateStyle);
30
+ observer.observe(blockElement, {
31
+ attributes: true,
32
+ attributeFilter: ['style', 'class']
33
+ });
34
+ return () => {
35
+ observer.disconnect();
36
+ };
37
+ }, [blockElement]);
32
38
  const previousValueRef = useRef(value);
33
39
  const [isActive, setIsActive] = useState(false);
34
40
  useEffect(() => {
@@ -1 +1 @@
1
- {"version":3,"names":["useState","useRef","useLayoutEffect","useEffect","useReducer","isShallowEqual","BlockPopoverCover","useBlockElement","jsx","_jsx","SpacingVisualizer","clientId","value","computeStyle","forceShow","blockElement","style","updateStyle","window","requestAnimationFrame","previousValueRef","isActive","setIsActive","current","timeout","setTimeout","clearTimeout","__unstablePopoverSlot","children","className","getComputedCSS","element","property","ownerDocument","defaultView","getComputedStyle","getPropertyValue","MarginVisualizer","spacing","margin","top","right","bottom","left","borderTopWidth","borderRightWidth","borderBottomWidth","borderLeftWidth","PaddingVisualizer","padding"],"sources":["@wordpress/block-editor/src/hooks/spacing-visualizer.js"],"sourcesContent":["/**\n * WordPress dependencies\n */\nimport {\n\tuseState,\n\tuseRef,\n\tuseLayoutEffect,\n\tuseEffect,\n\tuseReducer,\n} from '@wordpress/element';\nimport isShallowEqual from '@wordpress/is-shallow-equal';\n\n/**\n * Internal dependencies\n */\nimport BlockPopoverCover from '../components/block-popover/cover';\nimport { useBlockElement } from '../components/block-list/use-block-props/use-block-refs';\n\nfunction SpacingVisualizer( { clientId, value, computeStyle, forceShow } ) {\n\tconst blockElement = useBlockElement( clientId );\n\tconst [ style, updateStyle ] = useReducer( () =>\n\t\tcomputeStyle( blockElement )\n\t);\n\n\tuseLayoutEffect( () => {\n\t\tif ( ! blockElement ) {\n\t\t\treturn;\n\t\t}\n\t\t// It's not sufficient to read the computed spacing value when value.spacing changes as\n\t\t// useEffect may run before the browser recomputes CSS. We therefore combine\n\t\t// useLayoutEffect and two rAF calls to ensure that we read the spacing after the current\n\t\t// paint but before the next paint.\n\t\t// See https://github.com/WordPress/gutenberg/pull/59227.\n\t\twindow.requestAnimationFrame( () =>\n\t\t\twindow.requestAnimationFrame( updateStyle )\n\t\t);\n\t}, [ blockElement, value ] );\n\n\tconst previousValueRef = useRef( value );\n\tconst [ isActive, setIsActive ] = useState( false );\n\n\tuseEffect( () => {\n\t\tif ( isShallowEqual( value, previousValueRef.current ) || forceShow ) {\n\t\t\treturn;\n\t\t}\n\n\t\tsetIsActive( true );\n\t\tpreviousValueRef.current = value;\n\n\t\tconst timeout = setTimeout( () => {\n\t\t\tsetIsActive( false );\n\t\t}, 400 );\n\n\t\treturn () => {\n\t\t\tsetIsActive( false );\n\t\t\tclearTimeout( timeout );\n\t\t};\n\t}, [ value, forceShow ] );\n\n\tif ( ! isActive && ! forceShow ) {\n\t\treturn null;\n\t}\n\n\treturn (\n\t\t<BlockPopoverCover\n\t\t\tclientId={ clientId }\n\t\t\t__unstablePopoverSlot=\"block-toolbar\"\n\t\t>\n\t\t\t<div className=\"block-editor__spacing-visualizer\" style={ style } />\n\t\t</BlockPopoverCover>\n\t);\n}\n\nfunction getComputedCSS( element, property ) {\n\treturn element.ownerDocument.defaultView\n\t\t.getComputedStyle( element )\n\t\t.getPropertyValue( property );\n}\n\nexport function MarginVisualizer( { clientId, value, forceShow } ) {\n\treturn (\n\t\t<SpacingVisualizer\n\t\t\tclientId={ clientId }\n\t\t\tvalue={ value?.spacing?.margin }\n\t\t\tcomputeStyle={ ( blockElement ) => {\n\t\t\t\tconst top = getComputedCSS( blockElement, 'margin-top' );\n\t\t\t\tconst right = getComputedCSS( blockElement, 'margin-right' );\n\t\t\t\tconst bottom = getComputedCSS( blockElement, 'margin-bottom' );\n\t\t\t\tconst left = getComputedCSS( blockElement, 'margin-left' );\n\t\t\t\treturn {\n\t\t\t\t\tborderTopWidth: top,\n\t\t\t\t\tborderRightWidth: right,\n\t\t\t\t\tborderBottomWidth: bottom,\n\t\t\t\t\tborderLeftWidth: left,\n\t\t\t\t\ttop: top ? `-${ top }` : 0,\n\t\t\t\t\tright: right ? `-${ right }` : 0,\n\t\t\t\t\tbottom: bottom ? `-${ bottom }` : 0,\n\t\t\t\t\tleft: left ? `-${ left }` : 0,\n\t\t\t\t};\n\t\t\t} }\n\t\t\tforceShow={ forceShow }\n\t\t/>\n\t);\n}\n\nexport function PaddingVisualizer( { clientId, value, forceShow } ) {\n\treturn (\n\t\t<SpacingVisualizer\n\t\t\tclientId={ clientId }\n\t\t\tvalue={ value?.spacing?.padding }\n\t\t\tcomputeStyle={ ( blockElement ) => ( {\n\t\t\t\tborderTopWidth: getComputedCSS( blockElement, 'padding-top' ),\n\t\t\t\tborderRightWidth: getComputedCSS(\n\t\t\t\t\tblockElement,\n\t\t\t\t\t'padding-right'\n\t\t\t\t),\n\t\t\t\tborderBottomWidth: getComputedCSS(\n\t\t\t\t\tblockElement,\n\t\t\t\t\t'padding-bottom'\n\t\t\t\t),\n\t\t\t\tborderLeftWidth: getComputedCSS( blockElement, 'padding-left' ),\n\t\t\t} ) }\n\t\t\tforceShow={ forceShow }\n\t\t/>\n\t);\n}\n"],"mappings":"AAAA;AACA;AACA;AACA,SACCA,QAAQ,EACRC,MAAM,EACNC,eAAe,EACfC,SAAS,EACTC,UAAU,QACJ,oBAAoB;AAC3B,OAAOC,cAAc,MAAM,6BAA6B;;AAExD;AACA;AACA;AACA,OAAOC,iBAAiB,MAAM,mCAAmC;AACjE,SAASC,eAAe,QAAQ,yDAAyD;AAAC,SAAAC,GAAA,IAAAC,IAAA;AAE1F,SAASC,iBAAiBA,CAAE;EAAEC,QAAQ;EAAEC,KAAK;EAAEC,YAAY;EAAEC;AAAU,CAAC,EAAG;EAC1E,MAAMC,YAAY,GAAGR,eAAe,CAAEI,QAAS,CAAC;EAChD,MAAM,CAAEK,KAAK,EAAEC,WAAW,CAAE,GAAGb,UAAU,CAAE,MAC1CS,YAAY,CAAEE,YAAa,CAC5B,CAAC;EAEDb,eAAe,CAAE,MAAM;IACtB,IAAK,CAAEa,YAAY,EAAG;MACrB;IACD;IACA;IACA;IACA;IACA;IACA;IACAG,MAAM,CAACC,qBAAqB,CAAE,MAC7BD,MAAM,CAACC,qBAAqB,CAAEF,WAAY,CAC3C,CAAC;EACF,CAAC,EAAE,CAAEF,YAAY,EAAEH,KAAK,CAAG,CAAC;EAE5B,MAAMQ,gBAAgB,GAAGnB,MAAM,CAAEW,KAAM,CAAC;EACxC,MAAM,CAAES,QAAQ,EAAEC,WAAW,CAAE,GAAGtB,QAAQ,CAAE,KAAM,CAAC;EAEnDG,SAAS,CAAE,MAAM;IAChB,IAAKE,cAAc,CAAEO,KAAK,EAAEQ,gBAAgB,CAACG,OAAQ,CAAC,IAAIT,SAAS,EAAG;MACrE;IACD;IAEAQ,WAAW,CAAE,IAAK,CAAC;IACnBF,gBAAgB,CAACG,OAAO,GAAGX,KAAK;IAEhC,MAAMY,OAAO,GAAGC,UAAU,CAAE,MAAM;MACjCH,WAAW,CAAE,KAAM,CAAC;IACrB,CAAC,EAAE,GAAI,CAAC;IAER,OAAO,MAAM;MACZA,WAAW,CAAE,KAAM,CAAC;MACpBI,YAAY,CAAEF,OAAQ,CAAC;IACxB,CAAC;EACF,CAAC,EAAE,CAAEZ,KAAK,EAAEE,SAAS,CAAG,CAAC;EAEzB,IAAK,CAAEO,QAAQ,IAAI,CAAEP,SAAS,EAAG;IAChC,OAAO,IAAI;EACZ;EAEA,oBACCL,IAAA,CAACH,iBAAiB;IACjBK,QAAQ,EAAGA,QAAU;IACrBgB,qBAAqB,EAAC,eAAe;IAAAC,QAAA,eAErCnB,IAAA;MAAKoB,SAAS,EAAC,kCAAkC;MAACb,KAAK,EAAGA;IAAO,CAAE;EAAC,CAClD,CAAC;AAEtB;AAEA,SAASc,cAAcA,CAAEC,OAAO,EAAEC,QAAQ,EAAG;EAC5C,OAAOD,OAAO,CAACE,aAAa,CAACC,WAAW,CACtCC,gBAAgB,CAAEJ,OAAQ,CAAC,CAC3BK,gBAAgB,CAAEJ,QAAS,CAAC;AAC/B;AAEA,OAAO,SAASK,gBAAgBA,CAAE;EAAE1B,QAAQ;EAAEC,KAAK;EAAEE;AAAU,CAAC,EAAG;EAClE,oBACCL,IAAA,CAACC,iBAAiB;IACjBC,QAAQ,EAAGA,QAAU;IACrBC,KAAK,EAAGA,KAAK,EAAE0B,OAAO,EAAEC,MAAQ;IAChC1B,YAAY,EAAKE,YAAY,IAAM;MAClC,MAAMyB,GAAG,GAAGV,cAAc,CAAEf,YAAY,EAAE,YAAa,CAAC;MACxD,MAAM0B,KAAK,GAAGX,cAAc,CAAEf,YAAY,EAAE,cAAe,CAAC;MAC5D,MAAM2B,MAAM,GAAGZ,cAAc,CAAEf,YAAY,EAAE,eAAgB,CAAC;MAC9D,MAAM4B,IAAI,GAAGb,cAAc,CAAEf,YAAY,EAAE,aAAc,CAAC;MAC1D,OAAO;QACN6B,cAAc,EAAEJ,GAAG;QACnBK,gBAAgB,EAAEJ,KAAK;QACvBK,iBAAiB,EAAEJ,MAAM;QACzBK,eAAe,EAAEJ,IAAI;QACrBH,GAAG,EAAEA,GAAG,GAAG,IAAKA,GAAG,EAAG,GAAG,CAAC;QAC1BC,KAAK,EAAEA,KAAK,GAAG,IAAKA,KAAK,EAAG,GAAG,CAAC;QAChCC,MAAM,EAAEA,MAAM,GAAG,IAAKA,MAAM,EAAG,GAAG,CAAC;QACnCC,IAAI,EAAEA,IAAI,GAAG,IAAKA,IAAI,EAAG,GAAG;MAC7B,CAAC;IACF,CAAG;IACH7B,SAAS,EAAGA;EAAW,CACvB,CAAC;AAEJ;AAEA,OAAO,SAASkC,iBAAiBA,CAAE;EAAErC,QAAQ;EAAEC,KAAK;EAAEE;AAAU,CAAC,EAAG;EACnE,oBACCL,IAAA,CAACC,iBAAiB;IACjBC,QAAQ,EAAGA,QAAU;IACrBC,KAAK,EAAGA,KAAK,EAAE0B,OAAO,EAAEW,OAAS;IACjCpC,YAAY,EAAKE,YAAY,KAAQ;MACpC6B,cAAc,EAAEd,cAAc,CAAEf,YAAY,EAAE,aAAc,CAAC;MAC7D8B,gBAAgB,EAAEf,cAAc,CAC/Bf,YAAY,EACZ,eACD,CAAC;MACD+B,iBAAiB,EAAEhB,cAAc,CAChCf,YAAY,EACZ,gBACD,CAAC;MACDgC,eAAe,EAAEjB,cAAc,CAAEf,YAAY,EAAE,cAAe;IAC/D,CAAC,CAAI;IACLD,SAAS,EAAGA;EAAW,CACvB,CAAC;AAEJ","ignoreList":[]}
1
+ {"version":3,"names":["useState","useRef","useEffect","useReducer","isShallowEqual","BlockPopoverCover","useBlockElement","jsx","_jsx","SpacingVisualizer","clientId","value","computeStyle","forceShow","blockElement","style","updateStyle","observer","window","MutationObserver","observe","attributes","attributeFilter","disconnect","previousValueRef","isActive","setIsActive","current","timeout","setTimeout","clearTimeout","__unstablePopoverSlot","children","className","getComputedCSS","element","property","ownerDocument","defaultView","getComputedStyle","getPropertyValue","MarginVisualizer","spacing","margin","top","right","bottom","left","borderTopWidth","borderRightWidth","borderBottomWidth","borderLeftWidth","PaddingVisualizer","padding"],"sources":["@wordpress/block-editor/src/hooks/spacing-visualizer.js"],"sourcesContent":["/**\n * WordPress dependencies\n */\nimport { useState, useRef, useEffect, useReducer } from '@wordpress/element';\nimport isShallowEqual from '@wordpress/is-shallow-equal';\n\n/**\n * Internal dependencies\n */\nimport BlockPopoverCover from '../components/block-popover/cover';\nimport { useBlockElement } from '../components/block-list/use-block-props/use-block-refs';\n\nfunction SpacingVisualizer( { clientId, value, computeStyle, forceShow } ) {\n\tconst blockElement = useBlockElement( clientId );\n\tconst [ style, updateStyle ] = useReducer( () =>\n\t\tcomputeStyle( blockElement )\n\t);\n\n\t// It's not sufficient to read the block’s computed style when `value` changes because\n\t// the effect would run before the block’s style has updated. Thus observing mutations\n\t// to the block’s attributes is used to trigger updates to the visualizer’s styles.\n\tuseEffect( () => {\n\t\tif ( ! blockElement ) {\n\t\t\treturn;\n\t\t}\n\t\tconst observer = new window.MutationObserver( updateStyle );\n\t\tobserver.observe( blockElement, {\n\t\t\tattributes: true,\n\t\t\tattributeFilter: [ 'style', 'class' ],\n\t\t} );\n\t\treturn () => {\n\t\t\tobserver.disconnect();\n\t\t};\n\t}, [ blockElement ] );\n\n\tconst previousValueRef = useRef( value );\n\tconst [ isActive, setIsActive ] = useState( false );\n\n\tuseEffect( () => {\n\t\tif ( isShallowEqual( value, previousValueRef.current ) || forceShow ) {\n\t\t\treturn;\n\t\t}\n\n\t\tsetIsActive( true );\n\t\tpreviousValueRef.current = value;\n\n\t\tconst timeout = setTimeout( () => {\n\t\t\tsetIsActive( false );\n\t\t}, 400 );\n\n\t\treturn () => {\n\t\t\tsetIsActive( false );\n\t\t\tclearTimeout( timeout );\n\t\t};\n\t}, [ value, forceShow ] );\n\n\tif ( ! isActive && ! forceShow ) {\n\t\treturn null;\n\t}\n\n\treturn (\n\t\t<BlockPopoverCover\n\t\t\tclientId={ clientId }\n\t\t\t__unstablePopoverSlot=\"block-toolbar\"\n\t\t>\n\t\t\t<div className=\"block-editor__spacing-visualizer\" style={ style } />\n\t\t</BlockPopoverCover>\n\t);\n}\n\nfunction getComputedCSS( element, property ) {\n\treturn element.ownerDocument.defaultView\n\t\t.getComputedStyle( element )\n\t\t.getPropertyValue( property );\n}\n\nexport function MarginVisualizer( { clientId, value, forceShow } ) {\n\treturn (\n\t\t<SpacingVisualizer\n\t\t\tclientId={ clientId }\n\t\t\tvalue={ value?.spacing?.margin }\n\t\t\tcomputeStyle={ ( blockElement ) => {\n\t\t\t\tconst top = getComputedCSS( blockElement, 'margin-top' );\n\t\t\t\tconst right = getComputedCSS( blockElement, 'margin-right' );\n\t\t\t\tconst bottom = getComputedCSS( blockElement, 'margin-bottom' );\n\t\t\t\tconst left = getComputedCSS( blockElement, 'margin-left' );\n\t\t\t\treturn {\n\t\t\t\t\tborderTopWidth: top,\n\t\t\t\t\tborderRightWidth: right,\n\t\t\t\t\tborderBottomWidth: bottom,\n\t\t\t\t\tborderLeftWidth: left,\n\t\t\t\t\ttop: top ? `-${ top }` : 0,\n\t\t\t\t\tright: right ? `-${ right }` : 0,\n\t\t\t\t\tbottom: bottom ? `-${ bottom }` : 0,\n\t\t\t\t\tleft: left ? `-${ left }` : 0,\n\t\t\t\t};\n\t\t\t} }\n\t\t\tforceShow={ forceShow }\n\t\t/>\n\t);\n}\n\nexport function PaddingVisualizer( { clientId, value, forceShow } ) {\n\treturn (\n\t\t<SpacingVisualizer\n\t\t\tclientId={ clientId }\n\t\t\tvalue={ value?.spacing?.padding }\n\t\t\tcomputeStyle={ ( blockElement ) => ( {\n\t\t\t\tborderTopWidth: getComputedCSS( blockElement, 'padding-top' ),\n\t\t\t\tborderRightWidth: getComputedCSS(\n\t\t\t\t\tblockElement,\n\t\t\t\t\t'padding-right'\n\t\t\t\t),\n\t\t\t\tborderBottomWidth: getComputedCSS(\n\t\t\t\t\tblockElement,\n\t\t\t\t\t'padding-bottom'\n\t\t\t\t),\n\t\t\t\tborderLeftWidth: getComputedCSS( blockElement, 'padding-left' ),\n\t\t\t} ) }\n\t\t\tforceShow={ forceShow }\n\t\t/>\n\t);\n}\n"],"mappings":"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","ignoreList":[]}
@@ -1739,6 +1739,8 @@ iframe[name=editor-canvas] {
1739
1739
  display: block;
1740
1740
  padding: 0;
1741
1741
  position: relative;
1742
+ border: 1px solid #ddd;
1743
+ border-radius: 2px;
1742
1744
  }
1743
1745
 
1744
1746
  .block-editor-global-styles-filters-panel__dropdown-toggle,
@@ -1772,11 +1774,6 @@ iframe[name=editor-canvas] {
1772
1774
  }
1773
1775
  }
1774
1776
 
1775
- .block-editor-global-styles-filters-panel__dropdown {
1776
- border: 1px solid #ddd;
1777
- border-radius: 2px;
1778
- }
1779
-
1780
1777
  .block-editor-global-styles__shadow-indicator {
1781
1778
  appearance: none;
1782
1779
  background: none;
@@ -4136,7 +4133,7 @@ div.block-editor-bindings__panel button:hover .block-editor-bindings__item span
4136
4133
  width: 280px;
4137
4134
  padding: 24px 32px 32px;
4138
4135
  overflow-x: visible;
4139
- overflow-y: scroll;
4136
+ overflow-y: auto;
4140
4137
  }
4141
4138
  .block-editor-block-patterns-explorer__sidebar__categories-list__item {
4142
4139
  display: block;