@wordpress/block-editor 14.14.1 → 14.14.3
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.
- package/build/components/block-list/use-block-props/use-firefox-draggable-compatibility.js +14 -11
- package/build/components/block-list/use-block-props/use-firefox-draggable-compatibility.js.map +1 -1
- package/build/components/inserter/block-patterns-explorer/pattern-list.js +3 -0
- package/build/components/inserter/block-patterns-explorer/pattern-list.js.map +1 -1
- package/build/components/link-control/search-input.js +2 -3
- package/build/components/link-control/search-input.js.map +1 -1
- package/build/components/writing-flow/use-tab-nav.js +21 -14
- package/build/components/writing-flow/use-tab-nav.js.map +1 -1
- package/build-module/components/block-list/use-block-props/use-firefox-draggable-compatibility.js +14 -11
- package/build-module/components/block-list/use-block-props/use-firefox-draggable-compatibility.js.map +1 -1
- package/build-module/components/inserter/block-patterns-explorer/pattern-list.js +4 -1
- package/build-module/components/inserter/block-patterns-explorer/pattern-list.js.map +1 -1
- package/build-module/components/link-control/search-input.js +2 -3
- package/build-module/components/link-control/search-input.js.map +1 -1
- package/build-module/components/writing-flow/use-tab-nav.js +21 -14
- package/build-module/components/writing-flow/use-tab-nav.js.map +1 -1
- package/package.json +6 -6
- package/src/components/block-list/use-block-props/use-firefox-draggable-compatibility.js +14 -11
- package/src/components/inserter/block-patterns-explorer/pattern-list.js +7 -0
- package/src/components/link-control/search-input.js +2 -4
- package/src/components/link-control/test/index.js +46 -46
- package/src/components/media-replace-flow/test/index.js +1 -1
- package/src/components/writing-flow/use-tab-nav.js +22 -17
|
@@ -47,12 +47,15 @@ function down(event) {
|
|
|
47
47
|
} = event;
|
|
48
48
|
const {
|
|
49
49
|
ownerDocument,
|
|
50
|
-
isContentEditable
|
|
50
|
+
isContentEditable,
|
|
51
|
+
tagName
|
|
51
52
|
} = target;
|
|
53
|
+
const isInputOrTextArea = ['INPUT', 'TEXTAREA'].includes(tagName);
|
|
52
54
|
const nodes = nodesByDocument.get(ownerDocument);
|
|
53
|
-
if (isContentEditable) {
|
|
54
|
-
// Whenever an editable element is clicked,
|
|
55
|
-
// blocks contain this element, and temporarily
|
|
55
|
+
if (isContentEditable || isInputOrTextArea) {
|
|
56
|
+
// Whenever an editable element or an input or textarea is clicked,
|
|
57
|
+
// check which draggable blocks contain this element, and temporarily
|
|
58
|
+
// disable draggability.
|
|
56
59
|
for (const node of nodes) {
|
|
57
60
|
if (node.getAttribute('draggable') === 'true' && node.contains(target)) {
|
|
58
61
|
node.removeAttribute('draggable');
|
|
@@ -60,8 +63,8 @@ function down(event) {
|
|
|
60
63
|
}
|
|
61
64
|
}
|
|
62
65
|
} else {
|
|
63
|
-
// Whenever a non-editable element is clicked,
|
|
64
|
-
// for any blocks that were previously disabled.
|
|
66
|
+
// Whenever a non-editable element or an input or textarea is clicked,
|
|
67
|
+
// re-enable draggability for any blocks that were previously disabled.
|
|
65
68
|
for (const node of nodes) {
|
|
66
69
|
restore(node);
|
|
67
70
|
}
|
|
@@ -69,11 +72,11 @@ function down(event) {
|
|
|
69
72
|
}
|
|
70
73
|
|
|
71
74
|
/**
|
|
72
|
-
* In Firefox, the `draggable` and `contenteditable`
|
|
73
|
-
* together. When
|
|
74
|
-
* doesn't get set in the right place. The only
|
|
75
|
-
* remove the `draggable` attribute clicking inside
|
|
76
|
-
*
|
|
75
|
+
* In Firefox, the `draggable` and `contenteditable` or `input` or `textarea`
|
|
76
|
+
* elements don't play well together. When these elements are within a
|
|
77
|
+
* `draggable` element, selection doesn't get set in the right place. The only
|
|
78
|
+
* solution is to temporarily remove the `draggable` attribute clicking inside
|
|
79
|
+
* these elements.
|
|
77
80
|
* @return {Function} Cleanup function.
|
|
78
81
|
*/
|
|
79
82
|
function useFirefoxDraggableCompatibility() {
|
package/build/components/block-list/use-block-props/use-firefox-draggable-compatibility.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_compose","require","nodesByDocument","Map","add","doc","node","set","get","Set","addEventListener","down","remove","delete","restore","size","removeEventListener","prevDraggable","getAttribute","removeAttribute","setAttribute","event","target","ownerDocument","isContentEditable","nodes","contains","useFirefoxDraggableCompatibility","useRefEffect"],"sources":["@wordpress/block-editor/src/components/block-list/use-block-props/use-firefox-draggable-compatibility.js"],"sourcesContent":["/**\n * WordPress dependencies\n */\nimport { useRefEffect } from '@wordpress/compose';\n\nconst nodesByDocument = new Map();\n\nfunction add( doc, node ) {\n\tlet set = nodesByDocument.get( doc );\n\tif ( ! set ) {\n\t\tset = new Set();\n\t\tnodesByDocument.set( doc, set );\n\t\tdoc.addEventListener( 'pointerdown', down );\n\t}\n\tset.add( node );\n}\n\nfunction remove( doc, node ) {\n\tconst set = nodesByDocument.get( doc );\n\tif ( set ) {\n\t\tset.delete( node );\n\t\trestore( node );\n\t\tif ( set.size === 0 ) {\n\t\t\tnodesByDocument.delete( doc );\n\t\t\tdoc.removeEventListener( 'pointerdown', down );\n\t\t}\n\t}\n}\n\nfunction restore( node ) {\n\tconst prevDraggable = node.getAttribute( 'data-draggable' );\n\tif ( prevDraggable ) {\n\t\tnode.removeAttribute( 'data-draggable' );\n\t\t// Only restore if `draggable` is still removed. It could have been\n\t\t// changed by React in the meantime.\n\t\tif ( prevDraggable === 'true' && ! node.getAttribute( 'draggable' ) ) {\n\t\t\tnode.setAttribute( 'draggable', 'true' );\n\t\t}\n\t}\n}\n\nfunction down( event ) {\n\tconst { target } = event;\n\tconst { ownerDocument, isContentEditable } = target;\n\tconst nodes = nodesByDocument.get( ownerDocument );\n\n\tif ( isContentEditable ) {\n\t\t// Whenever an editable element
|
|
1
|
+
{"version":3,"names":["_compose","require","nodesByDocument","Map","add","doc","node","set","get","Set","addEventListener","down","remove","delete","restore","size","removeEventListener","prevDraggable","getAttribute","removeAttribute","setAttribute","event","target","ownerDocument","isContentEditable","tagName","isInputOrTextArea","includes","nodes","contains","useFirefoxDraggableCompatibility","useRefEffect"],"sources":["@wordpress/block-editor/src/components/block-list/use-block-props/use-firefox-draggable-compatibility.js"],"sourcesContent":["/**\n * WordPress dependencies\n */\nimport { useRefEffect } from '@wordpress/compose';\n\nconst nodesByDocument = new Map();\n\nfunction add( doc, node ) {\n\tlet set = nodesByDocument.get( doc );\n\tif ( ! set ) {\n\t\tset = new Set();\n\t\tnodesByDocument.set( doc, set );\n\t\tdoc.addEventListener( 'pointerdown', down );\n\t}\n\tset.add( node );\n}\n\nfunction remove( doc, node ) {\n\tconst set = nodesByDocument.get( doc );\n\tif ( set ) {\n\t\tset.delete( node );\n\t\trestore( node );\n\t\tif ( set.size === 0 ) {\n\t\t\tnodesByDocument.delete( doc );\n\t\t\tdoc.removeEventListener( 'pointerdown', down );\n\t\t}\n\t}\n}\n\nfunction restore( node ) {\n\tconst prevDraggable = node.getAttribute( 'data-draggable' );\n\tif ( prevDraggable ) {\n\t\tnode.removeAttribute( 'data-draggable' );\n\t\t// Only restore if `draggable` is still removed. It could have been\n\t\t// changed by React in the meantime.\n\t\tif ( prevDraggable === 'true' && ! node.getAttribute( 'draggable' ) ) {\n\t\t\tnode.setAttribute( 'draggable', 'true' );\n\t\t}\n\t}\n}\n\nfunction down( event ) {\n\tconst { target } = event;\n\tconst { ownerDocument, isContentEditable, tagName } = target;\n\tconst isInputOrTextArea = [ 'INPUT', 'TEXTAREA' ].includes( tagName );\n\n\tconst nodes = nodesByDocument.get( ownerDocument );\n\n\tif ( isContentEditable || isInputOrTextArea ) {\n\t\t// Whenever an editable element or an input or textarea is clicked,\n\t\t// check which draggable blocks contain this element, and temporarily\n\t\t// disable draggability.\n\t\tfor ( const node of nodes ) {\n\t\t\tif (\n\t\t\t\tnode.getAttribute( 'draggable' ) === 'true' &&\n\t\t\t\tnode.contains( target )\n\t\t\t) {\n\t\t\t\tnode.removeAttribute( 'draggable' );\n\t\t\t\tnode.setAttribute( 'data-draggable', 'true' );\n\t\t\t}\n\t\t}\n\t} else {\n\t\t// Whenever a non-editable element or an input or textarea is clicked,\n\t\t// re-enable draggability for any blocks that were previously disabled.\n\t\tfor ( const node of nodes ) {\n\t\t\trestore( node );\n\t\t}\n\t}\n}\n\n/**\n * In Firefox, the `draggable` and `contenteditable` or `input` or `textarea`\n * elements don't play well together. When these elements are within a\n * `draggable` element, selection doesn't get set in the right place. The only\n * solution is to temporarily remove the `draggable` attribute clicking inside\n * these elements.\n * @return {Function} Cleanup function.\n */\nexport function useFirefoxDraggableCompatibility() {\n\treturn useRefEffect( ( node ) => {\n\t\tadd( node.ownerDocument, node );\n\t\treturn () => {\n\t\t\tremove( node.ownerDocument, node );\n\t\t};\n\t}, [] );\n}\n"],"mappings":";;;;;;AAGA,IAAAA,QAAA,GAAAC,OAAA;AAHA;AACA;AACA;;AAGA,MAAMC,eAAe,GAAG,IAAIC,GAAG,CAAC,CAAC;AAEjC,SAASC,GAAGA,CAAEC,GAAG,EAAEC,IAAI,EAAG;EACzB,IAAIC,GAAG,GAAGL,eAAe,CAACM,GAAG,CAAEH,GAAI,CAAC;EACpC,IAAK,CAAEE,GAAG,EAAG;IACZA,GAAG,GAAG,IAAIE,GAAG,CAAC,CAAC;IACfP,eAAe,CAACK,GAAG,CAAEF,GAAG,EAAEE,GAAI,CAAC;IAC/BF,GAAG,CAACK,gBAAgB,CAAE,aAAa,EAAEC,IAAK,CAAC;EAC5C;EACAJ,GAAG,CAACH,GAAG,CAAEE,IAAK,CAAC;AAChB;AAEA,SAASM,MAAMA,CAAEP,GAAG,EAAEC,IAAI,EAAG;EAC5B,MAAMC,GAAG,GAAGL,eAAe,CAACM,GAAG,CAAEH,GAAI,CAAC;EACtC,IAAKE,GAAG,EAAG;IACVA,GAAG,CAACM,MAAM,CAAEP,IAAK,CAAC;IAClBQ,OAAO,CAAER,IAAK,CAAC;IACf,IAAKC,GAAG,CAACQ,IAAI,KAAK,CAAC,EAAG;MACrBb,eAAe,CAACW,MAAM,CAAER,GAAI,CAAC;MAC7BA,GAAG,CAACW,mBAAmB,CAAE,aAAa,EAAEL,IAAK,CAAC;IAC/C;EACD;AACD;AAEA,SAASG,OAAOA,CAAER,IAAI,EAAG;EACxB,MAAMW,aAAa,GAAGX,IAAI,CAACY,YAAY,CAAE,gBAAiB,CAAC;EAC3D,IAAKD,aAAa,EAAG;IACpBX,IAAI,CAACa,eAAe,CAAE,gBAAiB,CAAC;IACxC;IACA;IACA,IAAKF,aAAa,KAAK,MAAM,IAAI,CAAEX,IAAI,CAACY,YAAY,CAAE,WAAY,CAAC,EAAG;MACrEZ,IAAI,CAACc,YAAY,CAAE,WAAW,EAAE,MAAO,CAAC;IACzC;EACD;AACD;AAEA,SAAST,IAAIA,CAAEU,KAAK,EAAG;EACtB,MAAM;IAAEC;EAAO,CAAC,GAAGD,KAAK;EACxB,MAAM;IAAEE,aAAa;IAAEC,iBAAiB;IAAEC;EAAQ,CAAC,GAAGH,MAAM;EAC5D,MAAMI,iBAAiB,GAAG,CAAE,OAAO,EAAE,UAAU,CAAE,CAACC,QAAQ,CAAEF,OAAQ,CAAC;EAErE,MAAMG,KAAK,GAAG1B,eAAe,CAACM,GAAG,CAAEe,aAAc,CAAC;EAElD,IAAKC,iBAAiB,IAAIE,iBAAiB,EAAG;IAC7C;IACA;IACA;IACA,KAAM,MAAMpB,IAAI,IAAIsB,KAAK,EAAG;MAC3B,IACCtB,IAAI,CAACY,YAAY,CAAE,WAAY,CAAC,KAAK,MAAM,IAC3CZ,IAAI,CAACuB,QAAQ,CAAEP,MAAO,CAAC,EACtB;QACDhB,IAAI,CAACa,eAAe,CAAE,WAAY,CAAC;QACnCb,IAAI,CAACc,YAAY,CAAE,gBAAgB,EAAE,MAAO,CAAC;MAC9C;IACD;EACD,CAAC,MAAM;IACN;IACA;IACA,KAAM,MAAMd,IAAI,IAAIsB,KAAK,EAAG;MAC3Bd,OAAO,CAAER,IAAK,CAAC;IAChB;EACD;AACD;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,SAASwB,gCAAgCA,CAAA,EAAG;EAClD,OAAO,IAAAC,qBAAY,EAAIzB,IAAI,IAAM;IAChCF,GAAG,CAAEE,IAAI,CAACiB,aAAa,EAAEjB,IAAK,CAAC;IAC/B,OAAO,MAAM;MACZM,MAAM,CAAEN,IAAI,CAACiB,aAAa,EAAEjB,IAAK,CAAC;IACnC,CAAC;EACF,CAAC,EAAE,EAAG,CAAC;AACR","ignoreList":[]}
|
|
@@ -65,6 +65,9 @@ function PatternList({
|
|
|
65
65
|
if (selectedCategory === _utils.myPatternsCategory.name && pattern.type === _utils.INSERTER_PATTERN_TYPES.user) {
|
|
66
66
|
return true;
|
|
67
67
|
}
|
|
68
|
+
if (selectedCategory === _utils.starterPatternsCategory.name && pattern.blockTypes?.includes('core/post-content')) {
|
|
69
|
+
return true;
|
|
70
|
+
}
|
|
68
71
|
if (selectedCategory === 'uncategorized') {
|
|
69
72
|
var _pattern$categories$s;
|
|
70
73
|
const hasKnownCategory = (_pattern$categories$s = pattern.categories?.some(category => registeredPatternCategories.includes(category))) !== null && _pattern$categories$s !== void 0 ? _pattern$categories$s : false;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_element","require","_i18n","_compose","_components","_a11y","_blockPatternsList","_interopRequireDefault","_useInsertionPoint","_usePatternsState","_inserterListbox","_searchItems","_blockPatternsPaging","_usePatternsPaging","_utils","_jsxRuntime","PatternsListHeader","filterValue","filteredBlockPatternsLength","jsx","__experimentalHeading","level","lineHeight","className","children","sprintf","_n","PatternList","searchValue","selectedCategory","patternCategories","rootClientId","onModalClose","container","useRef","debouncedSpeak","useDebounce","speak","destinationRootClientId","onInsertBlocks","useInsertionPoint","shouldFocusBlock","patterns","onClickPattern","usePatternsState","registeredPatternCategories","useMemo","map","patternCategory","name","filteredBlockPatterns","filteredPatterns","filter","pattern","allPatternsCategory","myPatternsCategory","type","INSERTER_PATTERN_TYPES","user","_pattern$categories$s","hasKnownCategory","categories","some","category","includes","length","searchItems","useEffect","count","resultsFoundMessage","pagingProps","usePatternsPaging","previousSearchValue","setPreviousSearchValue","useState","changePage","hasItems","jsxs","ref","default","Fragment","blockPatterns","categoryPatterns","blocks","isDraggable","_default","exports"],"sources":["@wordpress/block-editor/src/components/inserter/block-patterns-explorer/pattern-list.js"],"sourcesContent":["/**\n * WordPress dependencies\n */\nimport { useMemo, useEffect, useRef, useState } from '@wordpress/element';\nimport { _n, sprintf } from '@wordpress/i18n';\nimport { useDebounce } from '@wordpress/compose';\nimport { __experimentalHeading as Heading } from '@wordpress/components';\nimport { speak } from '@wordpress/a11y';\n\n/**\n * Internal dependencies\n */\nimport BlockPatternsList from '../../block-patterns-list';\nimport useInsertionPoint from '../hooks/use-insertion-point';\nimport usePatternsState from '../hooks/use-patterns-state';\nimport InserterListbox from '../../inserter-listbox';\nimport { searchItems } from '../search-items';\nimport BlockPatternsPaging from '../../block-patterns-paging';\nimport usePatternsPaging from '../hooks/use-patterns-paging';\nimport {\n\tINSERTER_PATTERN_TYPES,\n\tallPatternsCategory,\n\tmyPatternsCategory,\n} from '../block-patterns-tab/utils';\n\nfunction PatternsListHeader( { filterValue, filteredBlockPatternsLength } ) {\n\tif ( ! filterValue ) {\n\t\treturn null;\n\t}\n\n\treturn (\n\t\t<Heading\n\t\t\tlevel={ 2 }\n\t\t\tlineHeight=\"48px\"\n\t\t\tclassName=\"block-editor-block-patterns-explorer__search-results-count\"\n\t\t>\n\t\t\t{ sprintf(\n\t\t\t\t/* translators: %d: number of patterns. */\n\t\t\t\t_n(\n\t\t\t\t\t'%d pattern found',\n\t\t\t\t\t'%d patterns found',\n\t\t\t\t\tfilteredBlockPatternsLength\n\t\t\t\t),\n\t\t\t\tfilteredBlockPatternsLength\n\t\t\t) }\n\t\t</Heading>\n\t);\n}\n\nfunction PatternList( {\n\tsearchValue,\n\tselectedCategory,\n\tpatternCategories,\n\trootClientId,\n\tonModalClose,\n} ) {\n\tconst container = useRef();\n\tconst debouncedSpeak = useDebounce( speak, 500 );\n\tconst [ destinationRootClientId, onInsertBlocks ] = useInsertionPoint( {\n\t\trootClientId,\n\t\tshouldFocusBlock: true,\n\t} );\n\tconst [ patterns, , onClickPattern ] = usePatternsState(\n\t\tonInsertBlocks,\n\t\tdestinationRootClientId,\n\t\tselectedCategory\n\t);\n\n\tconst registeredPatternCategories = useMemo(\n\t\t() =>\n\t\t\tpatternCategories.map(\n\t\t\t\t( patternCategory ) => patternCategory.name\n\t\t\t),\n\t\t[ patternCategories ]\n\t);\n\n\tconst filteredBlockPatterns = useMemo( () => {\n\t\tconst filteredPatterns = patterns.filter( ( pattern ) => {\n\t\t\tif ( selectedCategory === allPatternsCategory.name ) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t\tif (\n\t\t\t\tselectedCategory === myPatternsCategory.name &&\n\t\t\t\tpattern.type === INSERTER_PATTERN_TYPES.user\n\t\t\t) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t\tif ( selectedCategory === 'uncategorized' ) {\n\t\t\t\tconst hasKnownCategory =\n\t\t\t\t\tpattern.categories?.some( ( category ) =>\n\t\t\t\t\t\tregisteredPatternCategories.includes( category )\n\t\t\t\t\t) ?? false;\n\n\t\t\t\treturn ! pattern.categories?.length || ! hasKnownCategory;\n\t\t\t}\n\n\t\t\treturn pattern.categories?.includes( selectedCategory );\n\t\t} );\n\n\t\tif ( ! searchValue ) {\n\t\t\treturn filteredPatterns;\n\t\t}\n\n\t\treturn searchItems( filteredPatterns, searchValue );\n\t}, [\n\t\tsearchValue,\n\t\tpatterns,\n\t\tselectedCategory,\n\t\tregisteredPatternCategories,\n\t] );\n\n\t// Announce search results on change.\n\tuseEffect( () => {\n\t\tif ( ! searchValue ) {\n\t\t\treturn;\n\t\t}\n\t\tconst count = filteredBlockPatterns.length;\n\t\tconst resultsFoundMessage = sprintf(\n\t\t\t/* translators: %d: number of results. */\n\t\t\t_n( '%d result found.', '%d results found.', count ),\n\t\t\tcount\n\t\t);\n\t\tdebouncedSpeak( resultsFoundMessage );\n\t}, [ searchValue, debouncedSpeak, filteredBlockPatterns.length ] );\n\n\tconst pagingProps = usePatternsPaging(\n\t\tfilteredBlockPatterns,\n\t\tselectedCategory,\n\t\tcontainer\n\t);\n\n\t// Reset page when search value changes.\n\tconst [ previousSearchValue, setPreviousSearchValue ] =\n\t\tuseState( searchValue );\n\tif ( searchValue !== previousSearchValue ) {\n\t\tsetPreviousSearchValue( searchValue );\n\t\tpagingProps.changePage( 1 );\n\t}\n\n\tconst hasItems = !! filteredBlockPatterns?.length;\n\treturn (\n\t\t<div\n\t\t\tclassName=\"block-editor-block-patterns-explorer__list\"\n\t\t\tref={ container }\n\t\t>\n\t\t\t<PatternsListHeader\n\t\t\t\tfilterValue={ searchValue }\n\t\t\t\tfilteredBlockPatternsLength={ filteredBlockPatterns.length }\n\t\t\t/>\n\n\t\t\t<InserterListbox>\n\t\t\t\t{ hasItems && (\n\t\t\t\t\t<>\n\t\t\t\t\t\t<BlockPatternsList\n\t\t\t\t\t\t\tblockPatterns={ pagingProps.categoryPatterns }\n\t\t\t\t\t\t\tonClickPattern={ ( pattern, blocks ) => {\n\t\t\t\t\t\t\t\tonClickPattern( pattern, blocks );\n\t\t\t\t\t\t\t\tonModalClose();\n\t\t\t\t\t\t\t} }\n\t\t\t\t\t\t\tisDraggable={ false }\n\t\t\t\t\t\t/>\n\t\t\t\t\t\t<BlockPatternsPaging { ...pagingProps } />\n\t\t\t\t\t</>\n\t\t\t\t) }\n\t\t\t</InserterListbox>\n\t\t</div>\n\t);\n}\n\nexport default PatternList;\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"names":["_element","require","_i18n","_compose","_components","_a11y","_blockPatternsList","_interopRequireDefault","_useInsertionPoint","_usePatternsState","_inserterListbox","_searchItems","_blockPatternsPaging","_usePatternsPaging","_utils","_jsxRuntime","PatternsListHeader","filterValue","filteredBlockPatternsLength","jsx","__experimentalHeading","level","lineHeight","className","children","sprintf","_n","PatternList","searchValue","selectedCategory","patternCategories","rootClientId","onModalClose","container","useRef","debouncedSpeak","useDebounce","speak","destinationRootClientId","onInsertBlocks","useInsertionPoint","shouldFocusBlock","patterns","onClickPattern","usePatternsState","registeredPatternCategories","useMemo","map","patternCategory","name","filteredBlockPatterns","filteredPatterns","filter","pattern","allPatternsCategory","myPatternsCategory","type","INSERTER_PATTERN_TYPES","user","starterPatternsCategory","blockTypes","includes","_pattern$categories$s","hasKnownCategory","categories","some","category","length","searchItems","useEffect","count","resultsFoundMessage","pagingProps","usePatternsPaging","previousSearchValue","setPreviousSearchValue","useState","changePage","hasItems","jsxs","ref","default","Fragment","blockPatterns","categoryPatterns","blocks","isDraggable","_default","exports"],"sources":["@wordpress/block-editor/src/components/inserter/block-patterns-explorer/pattern-list.js"],"sourcesContent":["/**\n * WordPress dependencies\n */\nimport { useMemo, useEffect, useRef, useState } from '@wordpress/element';\nimport { _n, sprintf } from '@wordpress/i18n';\nimport { useDebounce } from '@wordpress/compose';\nimport { __experimentalHeading as Heading } from '@wordpress/components';\nimport { speak } from '@wordpress/a11y';\n\n/**\n * Internal dependencies\n */\nimport BlockPatternsList from '../../block-patterns-list';\nimport useInsertionPoint from '../hooks/use-insertion-point';\nimport usePatternsState from '../hooks/use-patterns-state';\nimport InserterListbox from '../../inserter-listbox';\nimport { searchItems } from '../search-items';\nimport BlockPatternsPaging from '../../block-patterns-paging';\nimport usePatternsPaging from '../hooks/use-patterns-paging';\nimport {\n\tINSERTER_PATTERN_TYPES,\n\tallPatternsCategory,\n\tmyPatternsCategory,\n\tstarterPatternsCategory,\n} from '../block-patterns-tab/utils';\n\nfunction PatternsListHeader( { filterValue, filteredBlockPatternsLength } ) {\n\tif ( ! filterValue ) {\n\t\treturn null;\n\t}\n\n\treturn (\n\t\t<Heading\n\t\t\tlevel={ 2 }\n\t\t\tlineHeight=\"48px\"\n\t\t\tclassName=\"block-editor-block-patterns-explorer__search-results-count\"\n\t\t>\n\t\t\t{ sprintf(\n\t\t\t\t/* translators: %d: number of patterns. */\n\t\t\t\t_n(\n\t\t\t\t\t'%d pattern found',\n\t\t\t\t\t'%d patterns found',\n\t\t\t\t\tfilteredBlockPatternsLength\n\t\t\t\t),\n\t\t\t\tfilteredBlockPatternsLength\n\t\t\t) }\n\t\t</Heading>\n\t);\n}\n\nfunction PatternList( {\n\tsearchValue,\n\tselectedCategory,\n\tpatternCategories,\n\trootClientId,\n\tonModalClose,\n} ) {\n\tconst container = useRef();\n\tconst debouncedSpeak = useDebounce( speak, 500 );\n\tconst [ destinationRootClientId, onInsertBlocks ] = useInsertionPoint( {\n\t\trootClientId,\n\t\tshouldFocusBlock: true,\n\t} );\n\tconst [ patterns, , onClickPattern ] = usePatternsState(\n\t\tonInsertBlocks,\n\t\tdestinationRootClientId,\n\t\tselectedCategory\n\t);\n\n\tconst registeredPatternCategories = useMemo(\n\t\t() =>\n\t\t\tpatternCategories.map(\n\t\t\t\t( patternCategory ) => patternCategory.name\n\t\t\t),\n\t\t[ patternCategories ]\n\t);\n\n\tconst filteredBlockPatterns = useMemo( () => {\n\t\tconst filteredPatterns = patterns.filter( ( pattern ) => {\n\t\t\tif ( selectedCategory === allPatternsCategory.name ) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t\tif (\n\t\t\t\tselectedCategory === myPatternsCategory.name &&\n\t\t\t\tpattern.type === INSERTER_PATTERN_TYPES.user\n\t\t\t) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t\tif (\n\t\t\t\tselectedCategory === starterPatternsCategory.name &&\n\t\t\t\tpattern.blockTypes?.includes( 'core/post-content' )\n\t\t\t) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t\tif ( selectedCategory === 'uncategorized' ) {\n\t\t\t\tconst hasKnownCategory =\n\t\t\t\t\tpattern.categories?.some( ( category ) =>\n\t\t\t\t\t\tregisteredPatternCategories.includes( category )\n\t\t\t\t\t) ?? false;\n\n\t\t\t\treturn ! pattern.categories?.length || ! hasKnownCategory;\n\t\t\t}\n\n\t\t\treturn pattern.categories?.includes( selectedCategory );\n\t\t} );\n\n\t\tif ( ! searchValue ) {\n\t\t\treturn filteredPatterns;\n\t\t}\n\n\t\treturn searchItems( filteredPatterns, searchValue );\n\t}, [\n\t\tsearchValue,\n\t\tpatterns,\n\t\tselectedCategory,\n\t\tregisteredPatternCategories,\n\t] );\n\n\t// Announce search results on change.\n\tuseEffect( () => {\n\t\tif ( ! searchValue ) {\n\t\t\treturn;\n\t\t}\n\t\tconst count = filteredBlockPatterns.length;\n\t\tconst resultsFoundMessage = sprintf(\n\t\t\t/* translators: %d: number of results. */\n\t\t\t_n( '%d result found.', '%d results found.', count ),\n\t\t\tcount\n\t\t);\n\t\tdebouncedSpeak( resultsFoundMessage );\n\t}, [ searchValue, debouncedSpeak, filteredBlockPatterns.length ] );\n\n\tconst pagingProps = usePatternsPaging(\n\t\tfilteredBlockPatterns,\n\t\tselectedCategory,\n\t\tcontainer\n\t);\n\n\t// Reset page when search value changes.\n\tconst [ previousSearchValue, setPreviousSearchValue ] =\n\t\tuseState( searchValue );\n\tif ( searchValue !== previousSearchValue ) {\n\t\tsetPreviousSearchValue( searchValue );\n\t\tpagingProps.changePage( 1 );\n\t}\n\n\tconst hasItems = !! filteredBlockPatterns?.length;\n\treturn (\n\t\t<div\n\t\t\tclassName=\"block-editor-block-patterns-explorer__list\"\n\t\t\tref={ container }\n\t\t>\n\t\t\t<PatternsListHeader\n\t\t\t\tfilterValue={ searchValue }\n\t\t\t\tfilteredBlockPatternsLength={ filteredBlockPatterns.length }\n\t\t\t/>\n\n\t\t\t<InserterListbox>\n\t\t\t\t{ hasItems && (\n\t\t\t\t\t<>\n\t\t\t\t\t\t<BlockPatternsList\n\t\t\t\t\t\t\tblockPatterns={ pagingProps.categoryPatterns }\n\t\t\t\t\t\t\tonClickPattern={ ( pattern, blocks ) => {\n\t\t\t\t\t\t\t\tonClickPattern( pattern, blocks );\n\t\t\t\t\t\t\t\tonModalClose();\n\t\t\t\t\t\t\t} }\n\t\t\t\t\t\t\tisDraggable={ false }\n\t\t\t\t\t\t/>\n\t\t\t\t\t\t<BlockPatternsPaging { ...pagingProps } />\n\t\t\t\t\t</>\n\t\t\t\t) }\n\t\t\t</InserterListbox>\n\t\t</div>\n\t);\n}\n\nexport default PatternList;\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -102,17 +102,16 @@ const LinkControlSearchInput = (0, _element.forwardRef)(({
|
|
|
102
102
|
}, suggestion);
|
|
103
103
|
}
|
|
104
104
|
};
|
|
105
|
-
const inputLabel = placeholder !== null && placeholder !== void 0 ? placeholder : (0, _i18n.__)('Search or type URL');
|
|
106
105
|
return /*#__PURE__*/(0, _jsxRuntime.jsxs)("div", {
|
|
107
106
|
className: "block-editor-link-control__search-input-container",
|
|
108
107
|
children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_.URLInput, {
|
|
109
108
|
disableSuggestions: currentLink?.url === value,
|
|
110
|
-
label:
|
|
109
|
+
label: (0, _i18n.__)('Link'),
|
|
111
110
|
hideLabelFromVision: hideLabelFromVision,
|
|
112
111
|
className: className,
|
|
113
112
|
value: value,
|
|
114
113
|
onChange: onInputChange,
|
|
115
|
-
placeholder:
|
|
114
|
+
placeholder: placeholder !== null && placeholder !== void 0 ? placeholder : (0, _i18n.__)('Search or type URL'),
|
|
116
115
|
__experimentalRenderSuggestions: showSuggestions ? handleRenderSuggestions : null,
|
|
117
116
|
__experimentalFetchLinkSuggestions: searchHandler,
|
|
118
117
|
__experimentalHandleURLSuggestions: true,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_element","require","_i18n","_","_searchResults","_interopRequireDefault","_constants","_useSearchHandler","_deprecated","_jsxRuntime","noopSearchHandler","Promise","resolve","noop","LinkControlSearchInput","forwardRef","value","children","currentLink","className","placeholder","withCreateSuggestion","onCreateSuggestion","onChange","onSelect","showSuggestions","renderSuggestions","props","jsx","default","fetchSuggestions","allowDirectEntry","showInitialSuggestions","suggestionsQuery","withURLSuggestion","createSuggestionButtonText","hideLabelFromVision","suffix","ref","genericSearchHandler","useSearchHandler","searchHandler","focusedSuggestion","setFocusedSuggestion","useState","onInputChange","selection","suggestion","handleRenderSuggestions","handleSuggestionClick","onSuggestionSelected","selectedSuggestion","CREATE_TYPE","type","title","url","e","Object","keys","length","id","restLinkProps","inputLabel","__","jsxs","URLInput","disableSuggestions","label","__experimentalRenderSuggestions","__experimentalFetchLinkSuggestions","__experimentalHandleURLSuggestions","__experimentalShowInitialSuggestions","onSubmit","event","hasSuggestion","trim","preventDefault","_default","exports","__experimentalLinkControlSearchInput","deprecated","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":["_element","require","_i18n","_","_searchResults","_interopRequireDefault","_constants","_useSearchHandler","_deprecated","_jsxRuntime","noopSearchHandler","Promise","resolve","noop","LinkControlSearchInput","forwardRef","value","children","currentLink","className","placeholder","withCreateSuggestion","onCreateSuggestion","onChange","onSelect","showSuggestions","renderSuggestions","props","jsx","default","fetchSuggestions","allowDirectEntry","showInitialSuggestions","suggestionsQuery","withURLSuggestion","createSuggestionButtonText","hideLabelFromVision","suffix","ref","genericSearchHandler","useSearchHandler","searchHandler","focusedSuggestion","setFocusedSuggestion","useState","onInputChange","selection","suggestion","handleRenderSuggestions","handleSuggestionClick","onSuggestionSelected","selectedSuggestion","CREATE_TYPE","type","title","url","e","Object","keys","length","id","restLinkProps","jsxs","URLInput","disableSuggestions","label","__","__experimentalRenderSuggestions","__experimentalFetchLinkSuggestions","__experimentalHandleURLSuggestions","__experimentalShowInitialSuggestions","onSubmit","event","hasSuggestion","trim","preventDefault","_default","exports","__experimentalLinkControlSearchInput","deprecated","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":"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","ignoreList":[]}
|
|
@@ -22,7 +22,7 @@ var _jsxRuntime = require("react/jsx-runtime");
|
|
|
22
22
|
*/
|
|
23
23
|
|
|
24
24
|
function useTabNav() {
|
|
25
|
-
const
|
|
25
|
+
const containerRef = /** @type {typeof useRef<HTMLElement>} */(0, _element.useRef)();
|
|
26
26
|
const focusCaptureBeforeRef = (0, _element.useRef)();
|
|
27
27
|
const focusCaptureAfterRef = (0, _element.useRef)();
|
|
28
28
|
const {
|
|
@@ -42,19 +42,19 @@ function useTabNav() {
|
|
|
42
42
|
// capturing on the focus capture elements.
|
|
43
43
|
const noCaptureRef = (0, _element.useRef)();
|
|
44
44
|
function onFocusCapture(event) {
|
|
45
|
-
const canvasElement =
|
|
45
|
+
const canvasElement = containerRef.current.ownerDocument === event.target.ownerDocument ? containerRef.current : containerRef.current.ownerDocument.defaultView.frameElement;
|
|
46
46
|
|
|
47
47
|
// Do not capture incoming focus if set by us in WritingFlow.
|
|
48
48
|
if (noCaptureRef.current) {
|
|
49
49
|
noCaptureRef.current = null;
|
|
50
50
|
} else if (hasMultiSelection()) {
|
|
51
|
-
|
|
51
|
+
containerRef.current.focus();
|
|
52
52
|
} else if (getSelectedBlockClientId()) {
|
|
53
53
|
if (getLastFocus()?.current) {
|
|
54
54
|
getLastFocus().current.focus();
|
|
55
55
|
} else {
|
|
56
56
|
// Handles when the last focus has not been set yet, or has been cleared by new blocks being added via the inserter.
|
|
57
|
-
|
|
57
|
+
containerRef.current.querySelector(`[data-block="${getSelectedBlockClientId()}"]`).focus();
|
|
58
58
|
}
|
|
59
59
|
}
|
|
60
60
|
// In "compose" mode without a selected ID, we want to place focus on the section root when tabbing to the canvas.
|
|
@@ -64,11 +64,11 @@ function useTabNav() {
|
|
|
64
64
|
|
|
65
65
|
// If we have section within the section root, focus the first one.
|
|
66
66
|
if (sectionBlocks.length) {
|
|
67
|
-
|
|
67
|
+
containerRef.current.querySelector(`[data-block="${sectionBlocks[0]}"]`).focus();
|
|
68
68
|
}
|
|
69
69
|
// If we don't have any section blocks, focus the section root.
|
|
70
70
|
else if (sectionRootClientId) {
|
|
71
|
-
|
|
71
|
+
containerRef.current.querySelector(`[data-block="${sectionRootClientId}"]`).focus();
|
|
72
72
|
} else {
|
|
73
73
|
// If we don't have any section root, focus the canvas.
|
|
74
74
|
canvasElement.focus();
|
|
@@ -77,7 +77,7 @@ function useTabNav() {
|
|
|
77
77
|
const isBefore =
|
|
78
78
|
// eslint-disable-next-line no-bitwise
|
|
79
79
|
event.target.compareDocumentPosition(canvasElement) & event.target.DOCUMENT_POSITION_FOLLOWING;
|
|
80
|
-
const tabbables = _dom.focus.tabbable.find(
|
|
80
|
+
const tabbables = _dom.focus.tabbable.find(containerRef.current);
|
|
81
81
|
if (tabbables.length) {
|
|
82
82
|
const next = isBefore ? tabbables[0] : tabbables[tabbables.length - 1];
|
|
83
83
|
next.focus();
|
|
@@ -109,19 +109,26 @@ function useTabNav() {
|
|
|
109
109
|
if (event.keyCode !== _keycodes.TAB) {
|
|
110
110
|
return;
|
|
111
111
|
}
|
|
112
|
-
if (
|
|
112
|
+
if (
|
|
113
|
+
// Bails in case the focus capture elements aren’t present. They
|
|
114
|
+
// may be omitted to avoid silent tab stops in preview mode.
|
|
115
|
+
// See: https://github.com/WordPress/gutenberg/pull/59317
|
|
116
|
+
!focusCaptureAfterRef.current || !focusCaptureBeforeRef.current) {
|
|
113
117
|
return;
|
|
114
118
|
}
|
|
115
|
-
const
|
|
119
|
+
const {
|
|
120
|
+
target,
|
|
121
|
+
shiftKey: isShift
|
|
122
|
+
} = event;
|
|
116
123
|
const direction = isShift ? 'findPrevious' : 'findNext';
|
|
117
|
-
const nextTabbable = _dom.focus.tabbable[direction](
|
|
124
|
+
const nextTabbable = _dom.focus.tabbable[direction](target);
|
|
118
125
|
|
|
119
126
|
// We want to constrain the tabbing to the block and its child blocks.
|
|
120
127
|
// If the preceding form element is within a different block,
|
|
121
128
|
// such as two sibling image blocks in the placeholder state,
|
|
122
129
|
// we want shift + tab from the first form element to move to the image
|
|
123
130
|
// block toolbar and not the previous image block's form element.
|
|
124
|
-
const currentBlock =
|
|
131
|
+
const currentBlock = target.closest('[data-block]');
|
|
125
132
|
const isElementPartOfSelectedBlock = currentBlock && nextTabbable && ((0, _dom2.isInSameBlock)(currentBlock, nextTabbable) || (0, _dom2.isInsideRootBlock)(currentBlock, nextTabbable));
|
|
126
133
|
|
|
127
134
|
// Allow tabbing from the block wrapper to a form element,
|
|
@@ -158,7 +165,7 @@ function useTabNav() {
|
|
|
158
165
|
|
|
159
166
|
// If focus disappears due to there being no blocks, move focus to
|
|
160
167
|
// the writing flow wrapper.
|
|
161
|
-
if (!event.relatedTarget && ownerDocument.activeElement === ownerDocument.body && getBlockCount() === 0) {
|
|
168
|
+
if (!event.relatedTarget && event.target.hasAttribute('data-block') && ownerDocument.activeElement === ownerDocument.body && getBlockCount() === 0) {
|
|
162
169
|
node.focus();
|
|
163
170
|
}
|
|
164
171
|
}
|
|
@@ -178,7 +185,7 @@ function useTabNav() {
|
|
|
178
185
|
if (event.target?.getAttribute('role') === 'region') {
|
|
179
186
|
return;
|
|
180
187
|
}
|
|
181
|
-
if (
|
|
188
|
+
if (containerRef.current === event.target) {
|
|
182
189
|
return;
|
|
183
190
|
}
|
|
184
191
|
const isShift = event.shiftKey;
|
|
@@ -207,7 +214,7 @@ function useTabNav() {
|
|
|
207
214
|
node.removeEventListener('focusout', onFocusOut);
|
|
208
215
|
};
|
|
209
216
|
}, []);
|
|
210
|
-
const mergedRefs = (0, _compose.useMergeRefs)([
|
|
217
|
+
const mergedRefs = (0, _compose.useMergeRefs)([containerRef, ref]);
|
|
211
218
|
return [before, mergedRefs, after];
|
|
212
219
|
}
|
|
213
220
|
//# sourceMappingURL=use-tab-nav.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_dom","require","_keycodes","_data","_compose","_element","_store","_dom2","_lockUnlock","_jsxRuntime","useTabNav","container","useRef","focusCaptureBeforeRef","focusCaptureAfterRef","hasMultiSelection","getSelectedBlockClientId","getBlockCount","getBlockOrder","getLastFocus","getSectionRootClientId","isZoomOut","unlock","useSelect","blockEditorStore","setLastFocus","useDispatch","noCaptureRef","onFocusCapture","event","canvasElement","current","ownerDocument","target","defaultView","frameElement","focus","querySelector","sectionRootClientId","sectionBlocks","length","isBefore","compareDocumentPosition","DOCUMENT_POSITION_FOLLOWING","tabbables","tabbable","find","next","before","jsx","ref","tabIndex","onFocus","after","useRefEffect","node","onKeyDown","defaultPrevented","keyCode","TAB","isShift","shiftKey","direction","nextTabbable","currentBlock","closest","isElementPartOfSelectedBlock","isInSameBlock","isInsideRootBlock","isFormElement","preventScroll","onFocusOut","relatedTarget","activeElement","body","preventScrollOnTab","getAttribute","preventDefault","addEventListener","removeEventListener","mergedRefs","useMergeRefs"],"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":["_dom","require","_keycodes","_data","_compose","_element","_store","_dom2","_lockUnlock","_jsxRuntime","useTabNav","containerRef","useRef","focusCaptureBeforeRef","focusCaptureAfterRef","hasMultiSelection","getSelectedBlockClientId","getBlockCount","getBlockOrder","getLastFocus","getSectionRootClientId","isZoomOut","unlock","useSelect","blockEditorStore","setLastFocus","useDispatch","noCaptureRef","onFocusCapture","event","canvasElement","current","ownerDocument","target","defaultView","frameElement","focus","querySelector","sectionRootClientId","sectionBlocks","length","isBefore","compareDocumentPosition","DOCUMENT_POSITION_FOLLOWING","tabbables","tabbable","find","next","before","jsx","ref","tabIndex","onFocus","after","useRefEffect","node","onKeyDown","defaultPrevented","keyCode","TAB","shiftKey","isShift","direction","nextTabbable","currentBlock","closest","isElementPartOfSelectedBlock","isInSameBlock","isInsideRootBlock","isFormElement","preventScroll","onFocusOut","relatedTarget","hasAttribute","activeElement","body","preventScrollOnTab","getAttribute","preventDefault","addEventListener","removeEventListener","mergedRefs","useMergeRefs"],"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":[]}
|
package/build-module/components/block-list/use-block-props/use-firefox-draggable-compatibility.js
CHANGED
|
@@ -40,12 +40,15 @@ function down(event) {
|
|
|
40
40
|
} = event;
|
|
41
41
|
const {
|
|
42
42
|
ownerDocument,
|
|
43
|
-
isContentEditable
|
|
43
|
+
isContentEditable,
|
|
44
|
+
tagName
|
|
44
45
|
} = target;
|
|
46
|
+
const isInputOrTextArea = ['INPUT', 'TEXTAREA'].includes(tagName);
|
|
45
47
|
const nodes = nodesByDocument.get(ownerDocument);
|
|
46
|
-
if (isContentEditable) {
|
|
47
|
-
// Whenever an editable element is clicked,
|
|
48
|
-
// blocks contain this element, and temporarily
|
|
48
|
+
if (isContentEditable || isInputOrTextArea) {
|
|
49
|
+
// Whenever an editable element or an input or textarea is clicked,
|
|
50
|
+
// check which draggable blocks contain this element, and temporarily
|
|
51
|
+
// disable draggability.
|
|
49
52
|
for (const node of nodes) {
|
|
50
53
|
if (node.getAttribute('draggable') === 'true' && node.contains(target)) {
|
|
51
54
|
node.removeAttribute('draggable');
|
|
@@ -53,8 +56,8 @@ function down(event) {
|
|
|
53
56
|
}
|
|
54
57
|
}
|
|
55
58
|
} else {
|
|
56
|
-
// Whenever a non-editable element is clicked,
|
|
57
|
-
// for any blocks that were previously disabled.
|
|
59
|
+
// Whenever a non-editable element or an input or textarea is clicked,
|
|
60
|
+
// re-enable draggability for any blocks that were previously disabled.
|
|
58
61
|
for (const node of nodes) {
|
|
59
62
|
restore(node);
|
|
60
63
|
}
|
|
@@ -62,11 +65,11 @@ function down(event) {
|
|
|
62
65
|
}
|
|
63
66
|
|
|
64
67
|
/**
|
|
65
|
-
* In Firefox, the `draggable` and `contenteditable`
|
|
66
|
-
* together. When
|
|
67
|
-
* doesn't get set in the right place. The only
|
|
68
|
-
* remove the `draggable` attribute clicking inside
|
|
69
|
-
*
|
|
68
|
+
* In Firefox, the `draggable` and `contenteditable` or `input` or `textarea`
|
|
69
|
+
* elements don't play well together. When these elements are within a
|
|
70
|
+
* `draggable` element, selection doesn't get set in the right place. The only
|
|
71
|
+
* solution is to temporarily remove the `draggable` attribute clicking inside
|
|
72
|
+
* these elements.
|
|
70
73
|
* @return {Function} Cleanup function.
|
|
71
74
|
*/
|
|
72
75
|
export function useFirefoxDraggableCompatibility() {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["useRefEffect","nodesByDocument","Map","add","doc","node","set","get","Set","addEventListener","down","remove","delete","restore","size","removeEventListener","prevDraggable","getAttribute","removeAttribute","setAttribute","event","target","ownerDocument","isContentEditable","nodes","contains","useFirefoxDraggableCompatibility"],"sources":["@wordpress/block-editor/src/components/block-list/use-block-props/use-firefox-draggable-compatibility.js"],"sourcesContent":["/**\n * WordPress dependencies\n */\nimport { useRefEffect } from '@wordpress/compose';\n\nconst nodesByDocument = new Map();\n\nfunction add( doc, node ) {\n\tlet set = nodesByDocument.get( doc );\n\tif ( ! set ) {\n\t\tset = new Set();\n\t\tnodesByDocument.set( doc, set );\n\t\tdoc.addEventListener( 'pointerdown', down );\n\t}\n\tset.add( node );\n}\n\nfunction remove( doc, node ) {\n\tconst set = nodesByDocument.get( doc );\n\tif ( set ) {\n\t\tset.delete( node );\n\t\trestore( node );\n\t\tif ( set.size === 0 ) {\n\t\t\tnodesByDocument.delete( doc );\n\t\t\tdoc.removeEventListener( 'pointerdown', down );\n\t\t}\n\t}\n}\n\nfunction restore( node ) {\n\tconst prevDraggable = node.getAttribute( 'data-draggable' );\n\tif ( prevDraggable ) {\n\t\tnode.removeAttribute( 'data-draggable' );\n\t\t// Only restore if `draggable` is still removed. It could have been\n\t\t// changed by React in the meantime.\n\t\tif ( prevDraggable === 'true' && ! node.getAttribute( 'draggable' ) ) {\n\t\t\tnode.setAttribute( 'draggable', 'true' );\n\t\t}\n\t}\n}\n\nfunction down( event ) {\n\tconst { target } = event;\n\tconst { ownerDocument, isContentEditable } = target;\n\tconst nodes = nodesByDocument.get( ownerDocument );\n\n\tif ( isContentEditable ) {\n\t\t// Whenever an editable element
|
|
1
|
+
{"version":3,"names":["useRefEffect","nodesByDocument","Map","add","doc","node","set","get","Set","addEventListener","down","remove","delete","restore","size","removeEventListener","prevDraggable","getAttribute","removeAttribute","setAttribute","event","target","ownerDocument","isContentEditable","tagName","isInputOrTextArea","includes","nodes","contains","useFirefoxDraggableCompatibility"],"sources":["@wordpress/block-editor/src/components/block-list/use-block-props/use-firefox-draggable-compatibility.js"],"sourcesContent":["/**\n * WordPress dependencies\n */\nimport { useRefEffect } from '@wordpress/compose';\n\nconst nodesByDocument = new Map();\n\nfunction add( doc, node ) {\n\tlet set = nodesByDocument.get( doc );\n\tif ( ! set ) {\n\t\tset = new Set();\n\t\tnodesByDocument.set( doc, set );\n\t\tdoc.addEventListener( 'pointerdown', down );\n\t}\n\tset.add( node );\n}\n\nfunction remove( doc, node ) {\n\tconst set = nodesByDocument.get( doc );\n\tif ( set ) {\n\t\tset.delete( node );\n\t\trestore( node );\n\t\tif ( set.size === 0 ) {\n\t\t\tnodesByDocument.delete( doc );\n\t\t\tdoc.removeEventListener( 'pointerdown', down );\n\t\t}\n\t}\n}\n\nfunction restore( node ) {\n\tconst prevDraggable = node.getAttribute( 'data-draggable' );\n\tif ( prevDraggable ) {\n\t\tnode.removeAttribute( 'data-draggable' );\n\t\t// Only restore if `draggable` is still removed. It could have been\n\t\t// changed by React in the meantime.\n\t\tif ( prevDraggable === 'true' && ! node.getAttribute( 'draggable' ) ) {\n\t\t\tnode.setAttribute( 'draggable', 'true' );\n\t\t}\n\t}\n}\n\nfunction down( event ) {\n\tconst { target } = event;\n\tconst { ownerDocument, isContentEditable, tagName } = target;\n\tconst isInputOrTextArea = [ 'INPUT', 'TEXTAREA' ].includes( tagName );\n\n\tconst nodes = nodesByDocument.get( ownerDocument );\n\n\tif ( isContentEditable || isInputOrTextArea ) {\n\t\t// Whenever an editable element or an input or textarea is clicked,\n\t\t// check which draggable blocks contain this element, and temporarily\n\t\t// disable draggability.\n\t\tfor ( const node of nodes ) {\n\t\t\tif (\n\t\t\t\tnode.getAttribute( 'draggable' ) === 'true' &&\n\t\t\t\tnode.contains( target )\n\t\t\t) {\n\t\t\t\tnode.removeAttribute( 'draggable' );\n\t\t\t\tnode.setAttribute( 'data-draggable', 'true' );\n\t\t\t}\n\t\t}\n\t} else {\n\t\t// Whenever a non-editable element or an input or textarea is clicked,\n\t\t// re-enable draggability for any blocks that were previously disabled.\n\t\tfor ( const node of nodes ) {\n\t\t\trestore( node );\n\t\t}\n\t}\n}\n\n/**\n * In Firefox, the `draggable` and `contenteditable` or `input` or `textarea`\n * elements don't play well together. When these elements are within a\n * `draggable` element, selection doesn't get set in the right place. The only\n * solution is to temporarily remove the `draggable` attribute clicking inside\n * these elements.\n * @return {Function} Cleanup function.\n */\nexport function useFirefoxDraggableCompatibility() {\n\treturn useRefEffect( ( node ) => {\n\t\tadd( node.ownerDocument, node );\n\t\treturn () => {\n\t\t\tremove( node.ownerDocument, node );\n\t\t};\n\t}, [] );\n}\n"],"mappings":"AAAA;AACA;AACA;AACA,SAASA,YAAY,QAAQ,oBAAoB;AAEjD,MAAMC,eAAe,GAAG,IAAIC,GAAG,CAAC,CAAC;AAEjC,SAASC,GAAGA,CAAEC,GAAG,EAAEC,IAAI,EAAG;EACzB,IAAIC,GAAG,GAAGL,eAAe,CAACM,GAAG,CAAEH,GAAI,CAAC;EACpC,IAAK,CAAEE,GAAG,EAAG;IACZA,GAAG,GAAG,IAAIE,GAAG,CAAC,CAAC;IACfP,eAAe,CAACK,GAAG,CAAEF,GAAG,EAAEE,GAAI,CAAC;IAC/BF,GAAG,CAACK,gBAAgB,CAAE,aAAa,EAAEC,IAAK,CAAC;EAC5C;EACAJ,GAAG,CAACH,GAAG,CAAEE,IAAK,CAAC;AAChB;AAEA,SAASM,MAAMA,CAAEP,GAAG,EAAEC,IAAI,EAAG;EAC5B,MAAMC,GAAG,GAAGL,eAAe,CAACM,GAAG,CAAEH,GAAI,CAAC;EACtC,IAAKE,GAAG,EAAG;IACVA,GAAG,CAACM,MAAM,CAAEP,IAAK,CAAC;IAClBQ,OAAO,CAAER,IAAK,CAAC;IACf,IAAKC,GAAG,CAACQ,IAAI,KAAK,CAAC,EAAG;MACrBb,eAAe,CAACW,MAAM,CAAER,GAAI,CAAC;MAC7BA,GAAG,CAACW,mBAAmB,CAAE,aAAa,EAAEL,IAAK,CAAC;IAC/C;EACD;AACD;AAEA,SAASG,OAAOA,CAAER,IAAI,EAAG;EACxB,MAAMW,aAAa,GAAGX,IAAI,CAACY,YAAY,CAAE,gBAAiB,CAAC;EAC3D,IAAKD,aAAa,EAAG;IACpBX,IAAI,CAACa,eAAe,CAAE,gBAAiB,CAAC;IACxC;IACA;IACA,IAAKF,aAAa,KAAK,MAAM,IAAI,CAAEX,IAAI,CAACY,YAAY,CAAE,WAAY,CAAC,EAAG;MACrEZ,IAAI,CAACc,YAAY,CAAE,WAAW,EAAE,MAAO,CAAC;IACzC;EACD;AACD;AAEA,SAAST,IAAIA,CAAEU,KAAK,EAAG;EACtB,MAAM;IAAEC;EAAO,CAAC,GAAGD,KAAK;EACxB,MAAM;IAAEE,aAAa;IAAEC,iBAAiB;IAAEC;EAAQ,CAAC,GAAGH,MAAM;EAC5D,MAAMI,iBAAiB,GAAG,CAAE,OAAO,EAAE,UAAU,CAAE,CAACC,QAAQ,CAAEF,OAAQ,CAAC;EAErE,MAAMG,KAAK,GAAG1B,eAAe,CAACM,GAAG,CAAEe,aAAc,CAAC;EAElD,IAAKC,iBAAiB,IAAIE,iBAAiB,EAAG;IAC7C;IACA;IACA;IACA,KAAM,MAAMpB,IAAI,IAAIsB,KAAK,EAAG;MAC3B,IACCtB,IAAI,CAACY,YAAY,CAAE,WAAY,CAAC,KAAK,MAAM,IAC3CZ,IAAI,CAACuB,QAAQ,CAAEP,MAAO,CAAC,EACtB;QACDhB,IAAI,CAACa,eAAe,CAAE,WAAY,CAAC;QACnCb,IAAI,CAACc,YAAY,CAAE,gBAAgB,EAAE,MAAO,CAAC;MAC9C;IACD;EACD,CAAC,MAAM;IACN;IACA;IACA,KAAM,MAAMd,IAAI,IAAIsB,KAAK,EAAG;MAC3Bd,OAAO,CAAER,IAAK,CAAC;IAChB;EACD;AACD;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,SAASwB,gCAAgCA,CAAA,EAAG;EAClD,OAAO7B,YAAY,CAAIK,IAAI,IAAM;IAChCF,GAAG,CAAEE,IAAI,CAACiB,aAAa,EAAEjB,IAAK,CAAC;IAC/B,OAAO,MAAM;MACZM,MAAM,CAAEN,IAAI,CAACiB,aAAa,EAAEjB,IAAK,CAAC;IACnC,CAAC;EACF,CAAC,EAAE,EAAG,CAAC;AACR","ignoreList":[]}
|
|
@@ -17,7 +17,7 @@ import InserterListbox from '../../inserter-listbox';
|
|
|
17
17
|
import { searchItems } from '../search-items';
|
|
18
18
|
import BlockPatternsPaging from '../../block-patterns-paging';
|
|
19
19
|
import usePatternsPaging from '../hooks/use-patterns-paging';
|
|
20
|
-
import { INSERTER_PATTERN_TYPES, allPatternsCategory, myPatternsCategory } from '../block-patterns-tab/utils';
|
|
20
|
+
import { INSERTER_PATTERN_TYPES, allPatternsCategory, myPatternsCategory, starterPatternsCategory } from '../block-patterns-tab/utils';
|
|
21
21
|
import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
|
|
22
22
|
function PatternsListHeader({
|
|
23
23
|
filterValue,
|
|
@@ -57,6 +57,9 @@ function PatternList({
|
|
|
57
57
|
if (selectedCategory === myPatternsCategory.name && pattern.type === INSERTER_PATTERN_TYPES.user) {
|
|
58
58
|
return true;
|
|
59
59
|
}
|
|
60
|
+
if (selectedCategory === starterPatternsCategory.name && pattern.blockTypes?.includes('core/post-content')) {
|
|
61
|
+
return true;
|
|
62
|
+
}
|
|
60
63
|
if (selectedCategory === 'uncategorized') {
|
|
61
64
|
var _pattern$categories$s;
|
|
62
65
|
const hasKnownCategory = (_pattern$categories$s = pattern.categories?.some(category => registeredPatternCategories.includes(category))) !== null && _pattern$categories$s !== void 0 ? _pattern$categories$s : false;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["useMemo","useEffect","useRef","useState","_n","sprintf","useDebounce","__experimentalHeading","Heading","speak","BlockPatternsList","useInsertionPoint","usePatternsState","InserterListbox","searchItems","BlockPatternsPaging","usePatternsPaging","INSERTER_PATTERN_TYPES","allPatternsCategory","myPatternsCategory","jsx","_jsx","Fragment","_Fragment","jsxs","_jsxs","PatternsListHeader","filterValue","filteredBlockPatternsLength","level","lineHeight","className","children","PatternList","searchValue","selectedCategory","patternCategories","rootClientId","onModalClose","container","debouncedSpeak","destinationRootClientId","onInsertBlocks","shouldFocusBlock","patterns","onClickPattern","registeredPatternCategories","map","patternCategory","name","filteredBlockPatterns","filteredPatterns","filter","pattern","type","user","_pattern$categories$s","hasKnownCategory","categories","some","category","
|
|
1
|
+
{"version":3,"names":["useMemo","useEffect","useRef","useState","_n","sprintf","useDebounce","__experimentalHeading","Heading","speak","BlockPatternsList","useInsertionPoint","usePatternsState","InserterListbox","searchItems","BlockPatternsPaging","usePatternsPaging","INSERTER_PATTERN_TYPES","allPatternsCategory","myPatternsCategory","starterPatternsCategory","jsx","_jsx","Fragment","_Fragment","jsxs","_jsxs","PatternsListHeader","filterValue","filteredBlockPatternsLength","level","lineHeight","className","children","PatternList","searchValue","selectedCategory","patternCategories","rootClientId","onModalClose","container","debouncedSpeak","destinationRootClientId","onInsertBlocks","shouldFocusBlock","patterns","onClickPattern","registeredPatternCategories","map","patternCategory","name","filteredBlockPatterns","filteredPatterns","filter","pattern","type","user","blockTypes","includes","_pattern$categories$s","hasKnownCategory","categories","some","category","length","count","resultsFoundMessage","pagingProps","previousSearchValue","setPreviousSearchValue","changePage","hasItems","ref","blockPatterns","categoryPatterns","blocks","isDraggable"],"sources":["@wordpress/block-editor/src/components/inserter/block-patterns-explorer/pattern-list.js"],"sourcesContent":["/**\n * WordPress dependencies\n */\nimport { useMemo, useEffect, useRef, useState } from '@wordpress/element';\nimport { _n, sprintf } from '@wordpress/i18n';\nimport { useDebounce } from '@wordpress/compose';\nimport { __experimentalHeading as Heading } from '@wordpress/components';\nimport { speak } from '@wordpress/a11y';\n\n/**\n * Internal dependencies\n */\nimport BlockPatternsList from '../../block-patterns-list';\nimport useInsertionPoint from '../hooks/use-insertion-point';\nimport usePatternsState from '../hooks/use-patterns-state';\nimport InserterListbox from '../../inserter-listbox';\nimport { searchItems } from '../search-items';\nimport BlockPatternsPaging from '../../block-patterns-paging';\nimport usePatternsPaging from '../hooks/use-patterns-paging';\nimport {\n\tINSERTER_PATTERN_TYPES,\n\tallPatternsCategory,\n\tmyPatternsCategory,\n\tstarterPatternsCategory,\n} from '../block-patterns-tab/utils';\n\nfunction PatternsListHeader( { filterValue, filteredBlockPatternsLength } ) {\n\tif ( ! filterValue ) {\n\t\treturn null;\n\t}\n\n\treturn (\n\t\t<Heading\n\t\t\tlevel={ 2 }\n\t\t\tlineHeight=\"48px\"\n\t\t\tclassName=\"block-editor-block-patterns-explorer__search-results-count\"\n\t\t>\n\t\t\t{ sprintf(\n\t\t\t\t/* translators: %d: number of patterns. */\n\t\t\t\t_n(\n\t\t\t\t\t'%d pattern found',\n\t\t\t\t\t'%d patterns found',\n\t\t\t\t\tfilteredBlockPatternsLength\n\t\t\t\t),\n\t\t\t\tfilteredBlockPatternsLength\n\t\t\t) }\n\t\t</Heading>\n\t);\n}\n\nfunction PatternList( {\n\tsearchValue,\n\tselectedCategory,\n\tpatternCategories,\n\trootClientId,\n\tonModalClose,\n} ) {\n\tconst container = useRef();\n\tconst debouncedSpeak = useDebounce( speak, 500 );\n\tconst [ destinationRootClientId, onInsertBlocks ] = useInsertionPoint( {\n\t\trootClientId,\n\t\tshouldFocusBlock: true,\n\t} );\n\tconst [ patterns, , onClickPattern ] = usePatternsState(\n\t\tonInsertBlocks,\n\t\tdestinationRootClientId,\n\t\tselectedCategory\n\t);\n\n\tconst registeredPatternCategories = useMemo(\n\t\t() =>\n\t\t\tpatternCategories.map(\n\t\t\t\t( patternCategory ) => patternCategory.name\n\t\t\t),\n\t\t[ patternCategories ]\n\t);\n\n\tconst filteredBlockPatterns = useMemo( () => {\n\t\tconst filteredPatterns = patterns.filter( ( pattern ) => {\n\t\t\tif ( selectedCategory === allPatternsCategory.name ) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t\tif (\n\t\t\t\tselectedCategory === myPatternsCategory.name &&\n\t\t\t\tpattern.type === INSERTER_PATTERN_TYPES.user\n\t\t\t) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t\tif (\n\t\t\t\tselectedCategory === starterPatternsCategory.name &&\n\t\t\t\tpattern.blockTypes?.includes( 'core/post-content' )\n\t\t\t) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t\tif ( selectedCategory === 'uncategorized' ) {\n\t\t\t\tconst hasKnownCategory =\n\t\t\t\t\tpattern.categories?.some( ( category ) =>\n\t\t\t\t\t\tregisteredPatternCategories.includes( category )\n\t\t\t\t\t) ?? false;\n\n\t\t\t\treturn ! pattern.categories?.length || ! hasKnownCategory;\n\t\t\t}\n\n\t\t\treturn pattern.categories?.includes( selectedCategory );\n\t\t} );\n\n\t\tif ( ! searchValue ) {\n\t\t\treturn filteredPatterns;\n\t\t}\n\n\t\treturn searchItems( filteredPatterns, searchValue );\n\t}, [\n\t\tsearchValue,\n\t\tpatterns,\n\t\tselectedCategory,\n\t\tregisteredPatternCategories,\n\t] );\n\n\t// Announce search results on change.\n\tuseEffect( () => {\n\t\tif ( ! searchValue ) {\n\t\t\treturn;\n\t\t}\n\t\tconst count = filteredBlockPatterns.length;\n\t\tconst resultsFoundMessage = sprintf(\n\t\t\t/* translators: %d: number of results. */\n\t\t\t_n( '%d result found.', '%d results found.', count ),\n\t\t\tcount\n\t\t);\n\t\tdebouncedSpeak( resultsFoundMessage );\n\t}, [ searchValue, debouncedSpeak, filteredBlockPatterns.length ] );\n\n\tconst pagingProps = usePatternsPaging(\n\t\tfilteredBlockPatterns,\n\t\tselectedCategory,\n\t\tcontainer\n\t);\n\n\t// Reset page when search value changes.\n\tconst [ previousSearchValue, setPreviousSearchValue ] =\n\t\tuseState( searchValue );\n\tif ( searchValue !== previousSearchValue ) {\n\t\tsetPreviousSearchValue( searchValue );\n\t\tpagingProps.changePage( 1 );\n\t}\n\n\tconst hasItems = !! filteredBlockPatterns?.length;\n\treturn (\n\t\t<div\n\t\t\tclassName=\"block-editor-block-patterns-explorer__list\"\n\t\t\tref={ container }\n\t\t>\n\t\t\t<PatternsListHeader\n\t\t\t\tfilterValue={ searchValue }\n\t\t\t\tfilteredBlockPatternsLength={ filteredBlockPatterns.length }\n\t\t\t/>\n\n\t\t\t<InserterListbox>\n\t\t\t\t{ hasItems && (\n\t\t\t\t\t<>\n\t\t\t\t\t\t<BlockPatternsList\n\t\t\t\t\t\t\tblockPatterns={ pagingProps.categoryPatterns }\n\t\t\t\t\t\t\tonClickPattern={ ( pattern, blocks ) => {\n\t\t\t\t\t\t\t\tonClickPattern( pattern, blocks );\n\t\t\t\t\t\t\t\tonModalClose();\n\t\t\t\t\t\t\t} }\n\t\t\t\t\t\t\tisDraggable={ false }\n\t\t\t\t\t\t/>\n\t\t\t\t\t\t<BlockPatternsPaging { ...pagingProps } />\n\t\t\t\t\t</>\n\t\t\t\t) }\n\t\t\t</InserterListbox>\n\t\t</div>\n\t);\n}\n\nexport default PatternList;\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -95,17 +95,16 @@ const LinkControlSearchInput = forwardRef(({
|
|
|
95
95
|
}, suggestion);
|
|
96
96
|
}
|
|
97
97
|
};
|
|
98
|
-
const inputLabel = placeholder !== null && placeholder !== void 0 ? placeholder : __('Search or type URL');
|
|
99
98
|
return /*#__PURE__*/_jsxs("div", {
|
|
100
99
|
className: "block-editor-link-control__search-input-container",
|
|
101
100
|
children: [/*#__PURE__*/_jsx(URLInput, {
|
|
102
101
|
disableSuggestions: currentLink?.url === value,
|
|
103
|
-
label:
|
|
102
|
+
label: __('Link'),
|
|
104
103
|
hideLabelFromVision: hideLabelFromVision,
|
|
105
104
|
className: className,
|
|
106
105
|
value: value,
|
|
107
106
|
onChange: onInputChange,
|
|
108
|
-
placeholder:
|
|
107
|
+
placeholder: placeholder !== null && placeholder !== void 0 ? placeholder : __('Search or type URL'),
|
|
109
108
|
__experimentalRenderSuggestions: showSuggestions ? handleRenderSuggestions : null,
|
|
110
109
|
__experimentalFetchLinkSuggestions: searchHandler,
|
|
111
110
|
__experimentalHandleURLSuggestions: true,
|