@wordpress/commands 0.6.9 → 0.6.10

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.
@@ -211,6 +211,16 @@ function CommandMenu() {
211
211
  return false;
212
212
  }
213
213
 
214
+ const onKeyDown = event => {
215
+ if ( // Ignore keydowns from IMEs
216
+ event.nativeEvent.isComposing || // Workaround for Mac Safari where the final Enter/Backspace of an IME composition
217
+ // is `isComposing=false`, even though it's technically still part of the composition.
218
+ // These can only be detected by keyCode.
219
+ event.keyCode === 229) {
220
+ event.preventDefault();
221
+ }
222
+ };
223
+
214
224
  const isLoading = Object.values(loaders).some(Boolean);
215
225
  return (0, _element.createElement)(_components.Modal, {
216
226
  className: "commands-command-menu",
@@ -220,7 +230,8 @@ function CommandMenu() {
220
230
  }, (0, _element.createElement)("div", {
221
231
  className: "commands-command-menu__container"
222
232
  }, (0, _element.createElement)(_cmdk.Command, {
223
- label: (0, _i18n.__)('Command palette')
233
+ label: (0, _i18n.__)('Command palette'),
234
+ onKeyDown: onKeyDown
224
235
  }, (0, _element.createElement)("div", {
225
236
  className: "commands-command-menu__header"
226
237
  }, (0, _element.createElement)(_cmdk.Command.Input, {
@@ -1 +1 @@
1
- {"version":3,"sources":["@wordpress/commands/src/components/command-menu.js"],"names":["CommandMenuLoader","name","search","hook","setLoader","close","isLoading","commands","length","map","command","searchLabel","label","callback","icon","CommandMenuLoaderWrapper","currentLoader","key","setKey","current","prevKey","CommandMenuGroup","isContextual","loaders","select","getCommands","getCommandLoaders","commandsStore","loader","CommandMenu","registerShortcut","keyboardShortcutsStore","setSearch","isOpen","open","setLoaders","commandMenuInput","category","description","keyCombination","modifier","character","event","preventDefault","bindGlobal","value","closeAndReset","focus","Object","values","some","Boolean"],"mappings":";;;;;;;;;AASA;;AANA;;AAKA;;AAEA;;AACA;;AAKA;;AAIA;;AAKA;;AAzBA;AACA;AACA;;AAGA;AACA;AACA;;AAeA;AACA;AACA;AAGA,SAASA,iBAAT,CAA4B;AAAEC,EAAAA,IAAF;AAAQC,EAAAA,MAAR;AAAgBC,EAAAA,IAAhB;AAAsBC,EAAAA,SAAtB;AAAiCC,EAAAA;AAAjC,CAA5B,EAAuE;AAAA;;AACtE,QAAM;AAAEC,IAAAA,SAAF;AAAaC,IAAAA,QAAQ,GAAG;AAAxB,eAA+BJ,IAAI,CAAE;AAAED,IAAAA;AAAF,GAAF,CAAnC,yCAAqD,EAA3D;AACA,0BAAW,MAAM;AAChBE,IAAAA,SAAS,CAAEH,IAAF,EAAQK,SAAR,CAAT;AACA,GAFD,EAEG,CAAEF,SAAF,EAAaH,IAAb,EAAmBK,SAAnB,CAFH;;AAIA,MAAK,CAAEC,QAAQ,CAACC,MAAhB,EAAyB;AACxB,WAAO,IAAP;AACA;;AAED,SACC,qDACC,4BAAC,aAAD,CAAS,IAAT,QACGD,QAAQ,CAACE,GAAT,CAAgBC,OAAF;AAAA;;AAAA,WACf,4BAAC,aAAD,CAAS,IAAT;AACC,MAAA,GAAG,EAAGA,OAAO,CAACT,IADf;AAEC,MAAA,KAAK,0BAAGS,OAAO,CAACC,WAAX,uEAA0BD,OAAO,CAACE,KAFxC;AAGC,MAAA,QAAQ,EAAG,MAAMF,OAAO,CAACG,QAAR,CAAkB;AAAER,QAAAA;AAAF,OAAlB;AAHlB,OAKC,4BAAC,gCAAD;AACC,MAAA,SAAS,EAAC,MADX;AAEC,MAAA,SAAS,EAAC;AAFX,OAIC,4BAAC,WAAD;AAAM,MAAA,IAAI,EAAGK,OAAO,CAACI;AAArB,MAJD,EAKC,0CACC,4BAAC,yBAAD;AACC,MAAA,IAAI,EAAGJ,OAAO,CAACE,KADhB;AAEC,MAAA,SAAS,EAAGV;AAFb,MADD,CALD,CALD,CADe;AAAA,GAAd,CADH,CADD,CADD;AA0BA;;AAEM,SAASa,wBAAT,CAAmC;AAAEZ,EAAAA,IAAF;AAAQD,EAAAA,MAAR;AAAgBE,EAAAA,SAAhB;AAA2BC,EAAAA;AAA3B,CAAnC,EAAwE;AAC9E;AACA;AACA;AACA;AACA;AACA,QAAMW,aAAa,GAAG,qBAAQb,IAAR,CAAtB;AACA,QAAM,CAAEc,GAAF,EAAOC,MAAP,IAAkB,uBAAU,CAAV,CAAxB;AACA,0BAAW,MAAM;AAChB,QAAKF,aAAa,CAACG,OAAd,KAA0BhB,IAA/B,EAAsC;AACrCa,MAAAA,aAAa,CAACG,OAAd,GAAwBhB,IAAxB;AACAe,MAAAA,MAAM,CAAIE,OAAF,IAAeA,OAAO,GAAG,CAA3B,CAAN;AACA;AACD,GALD,EAKG,CAAEjB,IAAF,CALH;AAOA,SACC,4BAAC,iBAAD;AACC,IAAA,GAAG,EAAGc,GADP;AAEC,IAAA,IAAI,EAAGD,aAAa,CAACG,OAFtB;AAGC,IAAA,MAAM,EAAGjB,MAHV;AAIC,IAAA,SAAS,EAAGE,SAJb;AAKC,IAAA,KAAK,EAAGC;AALT,IADD;AASA;;AAEM,SAASgB,gBAAT,CAA2B;AAAEC,EAAAA,YAAF;AAAgBpB,EAAAA,MAAhB;AAAwBE,EAAAA,SAAxB;AAAmCC,EAAAA;AAAnC,CAA3B,EAAwE;AAC9E,QAAM;AAAEE,IAAAA,QAAF;AAAYgB,IAAAA;AAAZ,MAAwB,qBAC3BC,MAAF,IAAc;AACb,UAAM;AAAEC,MAAAA,WAAF;AAAeC,MAAAA;AAAf,QAAqCF,MAAM,CAAEG,YAAF,CAAjD;AACA,WAAO;AACNpB,MAAAA,QAAQ,EAAEkB,WAAW,CAAEH,YAAF,CADf;AAENC,MAAAA,OAAO,EAAEG,iBAAiB,CAAEJ,YAAF;AAFpB,KAAP;AAIA,GAP4B,EAQ7B,CAAEA,YAAF,CAR6B,CAA9B;;AAWA,MAAK,CAAEf,QAAQ,CAACC,MAAX,IAAqB,CAAEe,OAAO,CAACf,MAApC,EAA6C;AAC5C,WAAO,IAAP;AACA;;AAED,SACC,4BAAC,aAAD,CAAS,KAAT,QACGD,QAAQ,CAACE,GAAT,CAAgBC,OAAF;AAAA;;AAAA,WACf,4BAAC,aAAD,CAAS,IAAT;AACC,MAAA,GAAG,EAAGA,OAAO,CAACT,IADf;AAEC,MAAA,KAAK,2BAAGS,OAAO,CAACC,WAAX,yEAA0BD,OAAO,CAACE,KAFxC;AAGC,MAAA,QAAQ,EAAG,MAAMF,OAAO,CAACG,QAAR,CAAkB;AAAER,QAAAA;AAAF,OAAlB;AAHlB,OAKC,4BAAC,gCAAD;AACC,MAAA,SAAS,EAAC,MADX;AAEC,MAAA,SAAS,EAAC;AAFX,OAIC,4BAAC,WAAD;AAAM,MAAA,IAAI,EAAGK,OAAO,CAACI;AAArB,MAJD,EAKC,0CACC,4BAAC,yBAAD;AACC,MAAA,IAAI,EAAGJ,OAAO,CAACE,KADhB;AAEC,MAAA,SAAS,EAAGV;AAFb,MADD,CALD,CALD,CADe;AAAA,GAAd,CADH,EAqBGqB,OAAO,CAACd,GAAR,CAAemB,MAAF,IACd,4BAAC,wBAAD;AACC,IAAA,GAAG,EAAGA,MAAM,CAAC3B,IADd;AAEC,IAAA,IAAI,EAAG2B,MAAM,CAACzB,IAFf;AAGC,IAAA,MAAM,EAAGD,MAHV;AAIC,IAAA,SAAS,EAAGE,SAJb;AAKC,IAAA,KAAK,EAAGC;AALT,IADC,CArBH,CADD;AAiCA;;AAEM,SAASwB,WAAT,GAAuB;AAC7B,QAAM;AAAEC,IAAAA;AAAF,MAAuB,uBAAaC,wBAAb,CAA7B;AACA,QAAM,CAAE7B,MAAF,EAAU8B,SAAV,IAAwB,uBAAU,EAAV,CAA9B;AACA,QAAMC,MAAM,GAAG,qBACZT,MAAF,IAAcA,MAAM,CAAEG,YAAF,CAAN,CAAwBM,MAAxB,EADA,EAEd,EAFc,CAAf;AAIA,QAAM;AAAEC,IAAAA,IAAF;AAAQ7B,IAAAA;AAAR,MAAkB,uBAAasB,YAAb,CAAxB;AACA,QAAM,CAAEJ,OAAF,EAAWY,UAAX,IAA0B,uBAAU,EAAV,CAAhC;AACA,QAAMC,gBAAgB,GAAG,sBAAzB;AAEA,0BAAW,MAAM;AAChBN,IAAAA,gBAAgB,CAAE;AACjB7B,MAAAA,IAAI,EAAE,eADW;AAEjBoC,MAAAA,QAAQ,EAAE,QAFO;AAGjBC,MAAAA,WAAW,EAAE,cAAI,0BAAJ,CAHI;AAIjBC,MAAAA,cAAc,EAAE;AACfC,QAAAA,QAAQ,EAAE,SADK;AAEfC,QAAAA,SAAS,EAAE;AAFI;AAJC,KAAF,CAAhB;AASA,GAVD,EAUG,CAAEX,gBAAF,CAVH;AAYA,sCACC,eADD,EAEGY,KAAF,IAAa;AACZA,IAAAA,KAAK,CAACC,cAAN;;AACA,QAAKV,MAAL,EAAc;AACb5B,MAAAA,KAAK;AACL,KAFD,MAEO;AACN6B,MAAAA,IAAI;AACJ;AACD,GATF,EAUC;AACCU,IAAAA,UAAU,EAAE;AADb,GAVD;AAeA,QAAMxC,SAAS,GAAG,0BACjB,CAAEH,IAAF,EAAQ4C,KAAR,KACCV,UAAU,CAAIhB,OAAF,KAAiB,EAC5B,GAAGA,OADyB;AAE5B,KAAElB,IAAF,GAAU4C;AAFkB,GAAjB,CAAF,CAFM,EAMjB,EANiB,CAAlB;;AAQA,QAAMC,aAAa,GAAG,MAAM;AAC3Bd,IAAAA,SAAS,CAAE,EAAF,CAAT;AACA3B,IAAAA,KAAK;AACL,GAHD;;AAKA,0BAAW,MAAM;AAChB;AACA,QAAK4B,MAAL,EAAc;AACbG,MAAAA,gBAAgB,CAACjB,OAAjB,CAAyB4B,KAAzB;AACA;AACD,GALD,EAKG,CAAEd,MAAF,CALH;;AAOA,MAAK,CAAEA,MAAP,EAAgB;AACf,WAAO,KAAP;AACA;;AACD,QAAM3B,SAAS,GAAG0C,MAAM,CAACC,MAAP,CAAe1B,OAAf,EAAyB2B,IAAzB,CAA+BC,OAA/B,CAAlB;AAEA,SACC,4BAAC,iBAAD;AACC,IAAA,SAAS,EAAC,uBADX;AAEC,IAAA,gBAAgB,EAAC,gCAFlB;AAGC,IAAA,cAAc,EAAGL,aAHlB;AAIC,IAAA,wBAAwB;AAJzB,KAMC;AAAK,IAAA,SAAS,EAAC;AAAf,KACC,4BAAC,aAAD;AAAS,IAAA,KAAK,EAAG,cAAI,iBAAJ;AAAjB,KACC;AAAK,IAAA,SAAS,EAAC;AAAf,KACC,4BAAC,aAAD,CAAS,KAAT;AACC,IAAA,GAAG,EAAGV,gBADP;AAEC,IAAA,KAAK,EAAGlC,MAFT;AAGC,IAAA,aAAa,EAAG8B,SAHjB;AAIC,IAAA,WAAW,EAAG,cAAI,0BAAJ;AAJf,IADD,CADD,EASC,4BAAC,aAAD,CAAS,IAAT,QACG9B,MAAM,IAAI,CAAEI,SAAZ,IACD,4BAAC,aAAD,CAAS,KAAT,QACG,cAAI,mBAAJ,CADH,CAFF,EAMC,4BAAC,gBAAD;AACC,IAAA,MAAM,EAAGJ,MADV;AAEC,IAAA,SAAS,EAAGE,SAFb;AAGC,IAAA,KAAK,EAAG0C,aAHT;AAIC,IAAA,YAAY;AAJb,IAND,EAYG5C,MAAM,IACP,4BAAC,gBAAD;AACC,IAAA,MAAM,EAAGA,MADV;AAEC,IAAA,SAAS,EAAGE,SAFb;AAGC,IAAA,KAAK,EAAG0C;AAHT,IAbF,CATD,CADD,CAND,CADD;AAyCA","sourcesContent":["/**\n * External dependencies\n */\nimport { Command } from 'cmdk';\n\n/**\n * WordPress dependencies\n */\nimport { useSelect, useDispatch } from '@wordpress/data';\nimport { useState, useEffect, useRef, useCallback } from '@wordpress/element';\nimport { __ } from '@wordpress/i18n';\nimport {\n\tModal,\n\tTextHighlight,\n\t__experimentalHStack as HStack,\n} from '@wordpress/components';\nimport {\n\tstore as keyboardShortcutsStore,\n\tuseShortcut,\n} from '@wordpress/keyboard-shortcuts';\nimport { Icon } from '@wordpress/icons';\n\n/**\n * Internal dependencies\n */\nimport { store as commandsStore } from '../store';\n\nfunction CommandMenuLoader( { name, search, hook, setLoader, close } ) {\n\tconst { isLoading, commands = [] } = hook( { search } ) ?? {};\n\tuseEffect( () => {\n\t\tsetLoader( name, isLoading );\n\t}, [ setLoader, name, isLoading ] );\n\n\tif ( ! commands.length ) {\n\t\treturn null;\n\t}\n\n\treturn (\n\t\t<>\n\t\t\t<Command.List>\n\t\t\t\t{ commands.map( ( command ) => (\n\t\t\t\t\t<Command.Item\n\t\t\t\t\t\tkey={ command.name }\n\t\t\t\t\t\tvalue={ command.searchLabel ?? command.label }\n\t\t\t\t\t\tonSelect={ () => command.callback( { close } ) }\n\t\t\t\t\t>\n\t\t\t\t\t\t<HStack\n\t\t\t\t\t\t\talignment=\"left\"\n\t\t\t\t\t\t\tclassName=\"commands-command-menu__item\"\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<Icon icon={ command.icon } />\n\t\t\t\t\t\t\t<span>\n\t\t\t\t\t\t\t\t<TextHighlight\n\t\t\t\t\t\t\t\t\ttext={ command.label }\n\t\t\t\t\t\t\t\t\thighlight={ search }\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t</HStack>\n\t\t\t\t\t</Command.Item>\n\t\t\t\t) ) }\n\t\t\t</Command.List>\n\t\t</>\n\t);\n}\n\nexport function CommandMenuLoaderWrapper( { hook, search, setLoader, close } ) {\n\t// The \"hook\" prop is actually a custom React hook\n\t// so to avoid breaking the rules of hooks\n\t// the CommandMenuLoaderWrapper component need to be\n\t// remounted on each hook prop change\n\t// We use the key state to make sure we do that properly.\n\tconst currentLoader = useRef( hook );\n\tconst [ key, setKey ] = useState( 0 );\n\tuseEffect( () => {\n\t\tif ( currentLoader.current !== hook ) {\n\t\t\tcurrentLoader.current = hook;\n\t\t\tsetKey( ( prevKey ) => prevKey + 1 );\n\t\t}\n\t}, [ hook ] );\n\n\treturn (\n\t\t<CommandMenuLoader\n\t\t\tkey={ key }\n\t\t\thook={ currentLoader.current }\n\t\t\tsearch={ search }\n\t\t\tsetLoader={ setLoader }\n\t\t\tclose={ close }\n\t\t/>\n\t);\n}\n\nexport function CommandMenuGroup( { isContextual, search, setLoader, close } ) {\n\tconst { commands, loaders } = useSelect(\n\t\t( select ) => {\n\t\t\tconst { getCommands, getCommandLoaders } = select( commandsStore );\n\t\t\treturn {\n\t\t\t\tcommands: getCommands( isContextual ),\n\t\t\t\tloaders: getCommandLoaders( isContextual ),\n\t\t\t};\n\t\t},\n\t\t[ isContextual ]\n\t);\n\n\tif ( ! commands.length && ! loaders.length ) {\n\t\treturn null;\n\t}\n\n\treturn (\n\t\t<Command.Group>\n\t\t\t{ commands.map( ( command ) => (\n\t\t\t\t<Command.Item\n\t\t\t\t\tkey={ command.name }\n\t\t\t\t\tvalue={ command.searchLabel ?? command.label }\n\t\t\t\t\tonSelect={ () => command.callback( { close } ) }\n\t\t\t\t>\n\t\t\t\t\t<HStack\n\t\t\t\t\t\talignment=\"left\"\n\t\t\t\t\t\tclassName=\"commands-command-menu__item\"\n\t\t\t\t\t>\n\t\t\t\t\t\t<Icon icon={ command.icon } />\n\t\t\t\t\t\t<span>\n\t\t\t\t\t\t\t<TextHighlight\n\t\t\t\t\t\t\t\ttext={ command.label }\n\t\t\t\t\t\t\t\thighlight={ search }\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t</span>\n\t\t\t\t\t</HStack>\n\t\t\t\t</Command.Item>\n\t\t\t) ) }\n\t\t\t{ loaders.map( ( loader ) => (\n\t\t\t\t<CommandMenuLoaderWrapper\n\t\t\t\t\tkey={ loader.name }\n\t\t\t\t\thook={ loader.hook }\n\t\t\t\t\tsearch={ search }\n\t\t\t\t\tsetLoader={ setLoader }\n\t\t\t\t\tclose={ close }\n\t\t\t\t/>\n\t\t\t) ) }\n\t\t</Command.Group>\n\t);\n}\n\nexport function CommandMenu() {\n\tconst { registerShortcut } = useDispatch( keyboardShortcutsStore );\n\tconst [ search, setSearch ] = useState( '' );\n\tconst isOpen = useSelect(\n\t\t( select ) => select( commandsStore ).isOpen(),\n\t\t[]\n\t);\n\tconst { open, close } = useDispatch( commandsStore );\n\tconst [ loaders, setLoaders ] = useState( {} );\n\tconst commandMenuInput = useRef();\n\n\tuseEffect( () => {\n\t\tregisterShortcut( {\n\t\t\tname: 'core/commands',\n\t\t\tcategory: 'global',\n\t\t\tdescription: __( 'Open the command palette' ),\n\t\t\tkeyCombination: {\n\t\t\t\tmodifier: 'primary',\n\t\t\t\tcharacter: 'k',\n\t\t\t},\n\t\t} );\n\t}, [ registerShortcut ] );\n\n\tuseShortcut(\n\t\t'core/commands',\n\t\t( event ) => {\n\t\t\tevent.preventDefault();\n\t\t\tif ( isOpen ) {\n\t\t\t\tclose();\n\t\t\t} else {\n\t\t\t\topen();\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\tbindGlobal: true,\n\t\t}\n\t);\n\n\tconst setLoader = useCallback(\n\t\t( name, value ) =>\n\t\t\tsetLoaders( ( current ) => ( {\n\t\t\t\t...current,\n\t\t\t\t[ name ]: value,\n\t\t\t} ) ),\n\t\t[]\n\t);\n\tconst closeAndReset = () => {\n\t\tsetSearch( '' );\n\t\tclose();\n\t};\n\n\tuseEffect( () => {\n\t\t// Focus the command palette input when mounting the modal.\n\t\tif ( isOpen ) {\n\t\t\tcommandMenuInput.current.focus();\n\t\t}\n\t}, [ isOpen ] );\n\n\tif ( ! isOpen ) {\n\t\treturn false;\n\t}\n\tconst isLoading = Object.values( loaders ).some( Boolean );\n\n\treturn (\n\t\t<Modal\n\t\t\tclassName=\"commands-command-menu\"\n\t\t\toverlayClassName=\"commands-command-menu__overlay\"\n\t\t\tonRequestClose={ closeAndReset }\n\t\t\t__experimentalHideHeader\n\t\t>\n\t\t\t<div className=\"commands-command-menu__container\">\n\t\t\t\t<Command label={ __( 'Command palette' ) }>\n\t\t\t\t\t<div className=\"commands-command-menu__header\">\n\t\t\t\t\t\t<Command.Input\n\t\t\t\t\t\t\tref={ commandMenuInput }\n\t\t\t\t\t\t\tvalue={ search }\n\t\t\t\t\t\t\tonValueChange={ setSearch }\n\t\t\t\t\t\t\tplaceholder={ __( 'Type a command or search' ) }\n\t\t\t\t\t\t/>\n\t\t\t\t\t</div>\n\t\t\t\t\t<Command.List>\n\t\t\t\t\t\t{ search && ! isLoading && (\n\t\t\t\t\t\t\t<Command.Empty>\n\t\t\t\t\t\t\t\t{ __( 'No results found.' ) }\n\t\t\t\t\t\t\t</Command.Empty>\n\t\t\t\t\t\t) }\n\t\t\t\t\t\t<CommandMenuGroup\n\t\t\t\t\t\t\tsearch={ search }\n\t\t\t\t\t\t\tsetLoader={ setLoader }\n\t\t\t\t\t\t\tclose={ closeAndReset }\n\t\t\t\t\t\t\tisContextual\n\t\t\t\t\t\t/>\n\t\t\t\t\t\t{ search && (\n\t\t\t\t\t\t\t<CommandMenuGroup\n\t\t\t\t\t\t\t\tsearch={ search }\n\t\t\t\t\t\t\t\tsetLoader={ setLoader }\n\t\t\t\t\t\t\t\tclose={ closeAndReset }\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t) }\n\t\t\t\t\t</Command.List>\n\t\t\t\t</Command>\n\t\t\t</div>\n\t\t</Modal>\n\t);\n}\n"]}
1
+ {"version":3,"sources":["@wordpress/commands/src/components/command-menu.js"],"names":["CommandMenuLoader","name","search","hook","setLoader","close","isLoading","commands","length","map","command","searchLabel","label","callback","icon","CommandMenuLoaderWrapper","currentLoader","key","setKey","current","prevKey","CommandMenuGroup","isContextual","loaders","select","getCommands","getCommandLoaders","commandsStore","loader","CommandMenu","registerShortcut","keyboardShortcutsStore","setSearch","isOpen","open","setLoaders","commandMenuInput","category","description","keyCombination","modifier","character","event","preventDefault","bindGlobal","value","closeAndReset","focus","onKeyDown","nativeEvent","isComposing","keyCode","Object","values","some","Boolean"],"mappings":"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","sourcesContent":["/**\n * External dependencies\n */\nimport { Command } from 'cmdk';\n\n/**\n * WordPress dependencies\n */\nimport { useSelect, useDispatch } from '@wordpress/data';\nimport { useState, useEffect, useRef, useCallback } from '@wordpress/element';\nimport { __ } from '@wordpress/i18n';\nimport {\n\tModal,\n\tTextHighlight,\n\t__experimentalHStack as HStack,\n} from '@wordpress/components';\nimport {\n\tstore as keyboardShortcutsStore,\n\tuseShortcut,\n} from '@wordpress/keyboard-shortcuts';\nimport { Icon } from '@wordpress/icons';\n\n/**\n * Internal dependencies\n */\nimport { store as commandsStore } from '../store';\n\nfunction CommandMenuLoader( { name, search, hook, setLoader, close } ) {\n\tconst { isLoading, commands = [] } = hook( { search } ) ?? {};\n\tuseEffect( () => {\n\t\tsetLoader( name, isLoading );\n\t}, [ setLoader, name, isLoading ] );\n\n\tif ( ! commands.length ) {\n\t\treturn null;\n\t}\n\n\treturn (\n\t\t<>\n\t\t\t<Command.List>\n\t\t\t\t{ commands.map( ( command ) => (\n\t\t\t\t\t<Command.Item\n\t\t\t\t\t\tkey={ command.name }\n\t\t\t\t\t\tvalue={ command.searchLabel ?? command.label }\n\t\t\t\t\t\tonSelect={ () => command.callback( { close } ) }\n\t\t\t\t\t>\n\t\t\t\t\t\t<HStack\n\t\t\t\t\t\t\talignment=\"left\"\n\t\t\t\t\t\t\tclassName=\"commands-command-menu__item\"\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<Icon icon={ command.icon } />\n\t\t\t\t\t\t\t<span>\n\t\t\t\t\t\t\t\t<TextHighlight\n\t\t\t\t\t\t\t\t\ttext={ command.label }\n\t\t\t\t\t\t\t\t\thighlight={ search }\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t</HStack>\n\t\t\t\t\t</Command.Item>\n\t\t\t\t) ) }\n\t\t\t</Command.List>\n\t\t</>\n\t);\n}\n\nexport function CommandMenuLoaderWrapper( { hook, search, setLoader, close } ) {\n\t// The \"hook\" prop is actually a custom React hook\n\t// so to avoid breaking the rules of hooks\n\t// the CommandMenuLoaderWrapper component need to be\n\t// remounted on each hook prop change\n\t// We use the key state to make sure we do that properly.\n\tconst currentLoader = useRef( hook );\n\tconst [ key, setKey ] = useState( 0 );\n\tuseEffect( () => {\n\t\tif ( currentLoader.current !== hook ) {\n\t\t\tcurrentLoader.current = hook;\n\t\t\tsetKey( ( prevKey ) => prevKey + 1 );\n\t\t}\n\t}, [ hook ] );\n\n\treturn (\n\t\t<CommandMenuLoader\n\t\t\tkey={ key }\n\t\t\thook={ currentLoader.current }\n\t\t\tsearch={ search }\n\t\t\tsetLoader={ setLoader }\n\t\t\tclose={ close }\n\t\t/>\n\t);\n}\n\nexport function CommandMenuGroup( { isContextual, search, setLoader, close } ) {\n\tconst { commands, loaders } = useSelect(\n\t\t( select ) => {\n\t\t\tconst { getCommands, getCommandLoaders } = select( commandsStore );\n\t\t\treturn {\n\t\t\t\tcommands: getCommands( isContextual ),\n\t\t\t\tloaders: getCommandLoaders( isContextual ),\n\t\t\t};\n\t\t},\n\t\t[ isContextual ]\n\t);\n\n\tif ( ! commands.length && ! loaders.length ) {\n\t\treturn null;\n\t}\n\n\treturn (\n\t\t<Command.Group>\n\t\t\t{ commands.map( ( command ) => (\n\t\t\t\t<Command.Item\n\t\t\t\t\tkey={ command.name }\n\t\t\t\t\tvalue={ command.searchLabel ?? command.label }\n\t\t\t\t\tonSelect={ () => command.callback( { close } ) }\n\t\t\t\t>\n\t\t\t\t\t<HStack\n\t\t\t\t\t\talignment=\"left\"\n\t\t\t\t\t\tclassName=\"commands-command-menu__item\"\n\t\t\t\t\t>\n\t\t\t\t\t\t<Icon icon={ command.icon } />\n\t\t\t\t\t\t<span>\n\t\t\t\t\t\t\t<TextHighlight\n\t\t\t\t\t\t\t\ttext={ command.label }\n\t\t\t\t\t\t\t\thighlight={ search }\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t</span>\n\t\t\t\t\t</HStack>\n\t\t\t\t</Command.Item>\n\t\t\t) ) }\n\t\t\t{ loaders.map( ( loader ) => (\n\t\t\t\t<CommandMenuLoaderWrapper\n\t\t\t\t\tkey={ loader.name }\n\t\t\t\t\thook={ loader.hook }\n\t\t\t\t\tsearch={ search }\n\t\t\t\t\tsetLoader={ setLoader }\n\t\t\t\t\tclose={ close }\n\t\t\t\t/>\n\t\t\t) ) }\n\t\t</Command.Group>\n\t);\n}\n\nexport function CommandMenu() {\n\tconst { registerShortcut } = useDispatch( keyboardShortcutsStore );\n\tconst [ search, setSearch ] = useState( '' );\n\tconst isOpen = useSelect(\n\t\t( select ) => select( commandsStore ).isOpen(),\n\t\t[]\n\t);\n\tconst { open, close } = useDispatch( commandsStore );\n\tconst [ loaders, setLoaders ] = useState( {} );\n\tconst commandMenuInput = useRef();\n\n\tuseEffect( () => {\n\t\tregisterShortcut( {\n\t\t\tname: 'core/commands',\n\t\t\tcategory: 'global',\n\t\t\tdescription: __( 'Open the command palette' ),\n\t\t\tkeyCombination: {\n\t\t\t\tmodifier: 'primary',\n\t\t\t\tcharacter: 'k',\n\t\t\t},\n\t\t} );\n\t}, [ registerShortcut ] );\n\n\tuseShortcut(\n\t\t'core/commands',\n\t\t( event ) => {\n\t\t\tevent.preventDefault();\n\t\t\tif ( isOpen ) {\n\t\t\t\tclose();\n\t\t\t} else {\n\t\t\t\topen();\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\tbindGlobal: true,\n\t\t}\n\t);\n\n\tconst setLoader = useCallback(\n\t\t( name, value ) =>\n\t\t\tsetLoaders( ( current ) => ( {\n\t\t\t\t...current,\n\t\t\t\t[ name ]: value,\n\t\t\t} ) ),\n\t\t[]\n\t);\n\tconst closeAndReset = () => {\n\t\tsetSearch( '' );\n\t\tclose();\n\t};\n\n\tuseEffect( () => {\n\t\t// Focus the command palette input when mounting the modal.\n\t\tif ( isOpen ) {\n\t\t\tcommandMenuInput.current.focus();\n\t\t}\n\t}, [ isOpen ] );\n\n\tif ( ! isOpen ) {\n\t\treturn false;\n\t}\n\n\tconst onKeyDown = ( event ) => {\n\t\tif (\n\t\t\t// Ignore keydowns from IMEs\n\t\t\tevent.nativeEvent.isComposing ||\n\t\t\t// Workaround for Mac Safari where the final Enter/Backspace of an IME composition\n\t\t\t// is `isComposing=false`, even though it's technically still part of the composition.\n\t\t\t// These can only be detected by keyCode.\n\t\t\tevent.keyCode === 229\n\t\t) {\n\t\t\tevent.preventDefault();\n\t\t}\n\t};\n\n\tconst isLoading = Object.values( loaders ).some( Boolean );\n\n\treturn (\n\t\t<Modal\n\t\t\tclassName=\"commands-command-menu\"\n\t\t\toverlayClassName=\"commands-command-menu__overlay\"\n\t\t\tonRequestClose={ closeAndReset }\n\t\t\t__experimentalHideHeader\n\t\t>\n\t\t\t<div className=\"commands-command-menu__container\">\n\t\t\t\t<Command\n\t\t\t\t\tlabel={ __( 'Command palette' ) }\n\t\t\t\t\tonKeyDown={ onKeyDown }\n\t\t\t\t>\n\t\t\t\t\t<div className=\"commands-command-menu__header\">\n\t\t\t\t\t\t<Command.Input\n\t\t\t\t\t\t\tref={ commandMenuInput }\n\t\t\t\t\t\t\tvalue={ search }\n\t\t\t\t\t\t\tonValueChange={ setSearch }\n\t\t\t\t\t\t\tplaceholder={ __( 'Type a command or search' ) }\n\t\t\t\t\t\t/>\n\t\t\t\t\t</div>\n\t\t\t\t\t<Command.List>\n\t\t\t\t\t\t{ search && ! isLoading && (\n\t\t\t\t\t\t\t<Command.Empty>\n\t\t\t\t\t\t\t\t{ __( 'No results found.' ) }\n\t\t\t\t\t\t\t</Command.Empty>\n\t\t\t\t\t\t) }\n\t\t\t\t\t\t<CommandMenuGroup\n\t\t\t\t\t\t\tsearch={ search }\n\t\t\t\t\t\t\tsetLoader={ setLoader }\n\t\t\t\t\t\t\tclose={ closeAndReset }\n\t\t\t\t\t\t\tisContextual\n\t\t\t\t\t\t/>\n\t\t\t\t\t\t{ search && (\n\t\t\t\t\t\t\t<CommandMenuGroup\n\t\t\t\t\t\t\t\tsearch={ search }\n\t\t\t\t\t\t\t\tsetLoader={ setLoader }\n\t\t\t\t\t\t\t\tclose={ closeAndReset }\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t) }\n\t\t\t\t\t</Command.List>\n\t\t\t\t</Command>\n\t\t\t</div>\n\t\t</Modal>\n\t);\n}\n"]}
@@ -195,6 +195,16 @@ export function CommandMenu() {
195
195
  return false;
196
196
  }
197
197
 
198
+ const onKeyDown = event => {
199
+ if ( // Ignore keydowns from IMEs
200
+ event.nativeEvent.isComposing || // Workaround for Mac Safari where the final Enter/Backspace of an IME composition
201
+ // is `isComposing=false`, even though it's technically still part of the composition.
202
+ // These can only be detected by keyCode.
203
+ event.keyCode === 229) {
204
+ event.preventDefault();
205
+ }
206
+ };
207
+
198
208
  const isLoading = Object.values(loaders).some(Boolean);
199
209
  return createElement(Modal, {
200
210
  className: "commands-command-menu",
@@ -204,7 +214,8 @@ export function CommandMenu() {
204
214
  }, createElement("div", {
205
215
  className: "commands-command-menu__container"
206
216
  }, createElement(Command, {
207
- label: __('Command palette')
217
+ label: __('Command palette'),
218
+ onKeyDown: onKeyDown
208
219
  }, createElement("div", {
209
220
  className: "commands-command-menu__header"
210
221
  }, createElement(Command.Input, {
@@ -1 +1 @@
1
- {"version":3,"sources":["@wordpress/commands/src/components/command-menu.js"],"names":["Command","useSelect","useDispatch","useState","useEffect","useRef","useCallback","__","Modal","TextHighlight","__experimentalHStack","HStack","store","keyboardShortcutsStore","useShortcut","Icon","commandsStore","CommandMenuLoader","name","search","hook","setLoader","close","isLoading","commands","length","map","command","searchLabel","label","callback","icon","CommandMenuLoaderWrapper","currentLoader","key","setKey","current","prevKey","CommandMenuGroup","isContextual","loaders","select","getCommands","getCommandLoaders","loader","CommandMenu","registerShortcut","setSearch","isOpen","open","setLoaders","commandMenuInput","category","description","keyCombination","modifier","character","event","preventDefault","bindGlobal","value","closeAndReset","focus","Object","values","some","Boolean"],"mappings":"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","sourcesContent":["/**\n * External dependencies\n */\nimport { Command } from 'cmdk';\n\n/**\n * WordPress dependencies\n */\nimport { useSelect, useDispatch } from '@wordpress/data';\nimport { useState, useEffect, useRef, useCallback } from '@wordpress/element';\nimport { __ } from '@wordpress/i18n';\nimport {\n\tModal,\n\tTextHighlight,\n\t__experimentalHStack as HStack,\n} from '@wordpress/components';\nimport {\n\tstore as keyboardShortcutsStore,\n\tuseShortcut,\n} from '@wordpress/keyboard-shortcuts';\nimport { Icon } from '@wordpress/icons';\n\n/**\n * Internal dependencies\n */\nimport { store as commandsStore } from '../store';\n\nfunction CommandMenuLoader( { name, search, hook, setLoader, close } ) {\n\tconst { isLoading, commands = [] } = hook( { search } ) ?? {};\n\tuseEffect( () => {\n\t\tsetLoader( name, isLoading );\n\t}, [ setLoader, name, isLoading ] );\n\n\tif ( ! commands.length ) {\n\t\treturn null;\n\t}\n\n\treturn (\n\t\t<>\n\t\t\t<Command.List>\n\t\t\t\t{ commands.map( ( command ) => (\n\t\t\t\t\t<Command.Item\n\t\t\t\t\t\tkey={ command.name }\n\t\t\t\t\t\tvalue={ command.searchLabel ?? command.label }\n\t\t\t\t\t\tonSelect={ () => command.callback( { close } ) }\n\t\t\t\t\t>\n\t\t\t\t\t\t<HStack\n\t\t\t\t\t\t\talignment=\"left\"\n\t\t\t\t\t\t\tclassName=\"commands-command-menu__item\"\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<Icon icon={ command.icon } />\n\t\t\t\t\t\t\t<span>\n\t\t\t\t\t\t\t\t<TextHighlight\n\t\t\t\t\t\t\t\t\ttext={ command.label }\n\t\t\t\t\t\t\t\t\thighlight={ search }\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t</HStack>\n\t\t\t\t\t</Command.Item>\n\t\t\t\t) ) }\n\t\t\t</Command.List>\n\t\t</>\n\t);\n}\n\nexport function CommandMenuLoaderWrapper( { hook, search, setLoader, close } ) {\n\t// The \"hook\" prop is actually a custom React hook\n\t// so to avoid breaking the rules of hooks\n\t// the CommandMenuLoaderWrapper component need to be\n\t// remounted on each hook prop change\n\t// We use the key state to make sure we do that properly.\n\tconst currentLoader = useRef( hook );\n\tconst [ key, setKey ] = useState( 0 );\n\tuseEffect( () => {\n\t\tif ( currentLoader.current !== hook ) {\n\t\t\tcurrentLoader.current = hook;\n\t\t\tsetKey( ( prevKey ) => prevKey + 1 );\n\t\t}\n\t}, [ hook ] );\n\n\treturn (\n\t\t<CommandMenuLoader\n\t\t\tkey={ key }\n\t\t\thook={ currentLoader.current }\n\t\t\tsearch={ search }\n\t\t\tsetLoader={ setLoader }\n\t\t\tclose={ close }\n\t\t/>\n\t);\n}\n\nexport function CommandMenuGroup( { isContextual, search, setLoader, close } ) {\n\tconst { commands, loaders } = useSelect(\n\t\t( select ) => {\n\t\t\tconst { getCommands, getCommandLoaders } = select( commandsStore );\n\t\t\treturn {\n\t\t\t\tcommands: getCommands( isContextual ),\n\t\t\t\tloaders: getCommandLoaders( isContextual ),\n\t\t\t};\n\t\t},\n\t\t[ isContextual ]\n\t);\n\n\tif ( ! commands.length && ! loaders.length ) {\n\t\treturn null;\n\t}\n\n\treturn (\n\t\t<Command.Group>\n\t\t\t{ commands.map( ( command ) => (\n\t\t\t\t<Command.Item\n\t\t\t\t\tkey={ command.name }\n\t\t\t\t\tvalue={ command.searchLabel ?? command.label }\n\t\t\t\t\tonSelect={ () => command.callback( { close } ) }\n\t\t\t\t>\n\t\t\t\t\t<HStack\n\t\t\t\t\t\talignment=\"left\"\n\t\t\t\t\t\tclassName=\"commands-command-menu__item\"\n\t\t\t\t\t>\n\t\t\t\t\t\t<Icon icon={ command.icon } />\n\t\t\t\t\t\t<span>\n\t\t\t\t\t\t\t<TextHighlight\n\t\t\t\t\t\t\t\ttext={ command.label }\n\t\t\t\t\t\t\t\thighlight={ search }\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t</span>\n\t\t\t\t\t</HStack>\n\t\t\t\t</Command.Item>\n\t\t\t) ) }\n\t\t\t{ loaders.map( ( loader ) => (\n\t\t\t\t<CommandMenuLoaderWrapper\n\t\t\t\t\tkey={ loader.name }\n\t\t\t\t\thook={ loader.hook }\n\t\t\t\t\tsearch={ search }\n\t\t\t\t\tsetLoader={ setLoader }\n\t\t\t\t\tclose={ close }\n\t\t\t\t/>\n\t\t\t) ) }\n\t\t</Command.Group>\n\t);\n}\n\nexport function CommandMenu() {\n\tconst { registerShortcut } = useDispatch( keyboardShortcutsStore );\n\tconst [ search, setSearch ] = useState( '' );\n\tconst isOpen = useSelect(\n\t\t( select ) => select( commandsStore ).isOpen(),\n\t\t[]\n\t);\n\tconst { open, close } = useDispatch( commandsStore );\n\tconst [ loaders, setLoaders ] = useState( {} );\n\tconst commandMenuInput = useRef();\n\n\tuseEffect( () => {\n\t\tregisterShortcut( {\n\t\t\tname: 'core/commands',\n\t\t\tcategory: 'global',\n\t\t\tdescription: __( 'Open the command palette' ),\n\t\t\tkeyCombination: {\n\t\t\t\tmodifier: 'primary',\n\t\t\t\tcharacter: 'k',\n\t\t\t},\n\t\t} );\n\t}, [ registerShortcut ] );\n\n\tuseShortcut(\n\t\t'core/commands',\n\t\t( event ) => {\n\t\t\tevent.preventDefault();\n\t\t\tif ( isOpen ) {\n\t\t\t\tclose();\n\t\t\t} else {\n\t\t\t\topen();\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\tbindGlobal: true,\n\t\t}\n\t);\n\n\tconst setLoader = useCallback(\n\t\t( name, value ) =>\n\t\t\tsetLoaders( ( current ) => ( {\n\t\t\t\t...current,\n\t\t\t\t[ name ]: value,\n\t\t\t} ) ),\n\t\t[]\n\t);\n\tconst closeAndReset = () => {\n\t\tsetSearch( '' );\n\t\tclose();\n\t};\n\n\tuseEffect( () => {\n\t\t// Focus the command palette input when mounting the modal.\n\t\tif ( isOpen ) {\n\t\t\tcommandMenuInput.current.focus();\n\t\t}\n\t}, [ isOpen ] );\n\n\tif ( ! isOpen ) {\n\t\treturn false;\n\t}\n\tconst isLoading = Object.values( loaders ).some( Boolean );\n\n\treturn (\n\t\t<Modal\n\t\t\tclassName=\"commands-command-menu\"\n\t\t\toverlayClassName=\"commands-command-menu__overlay\"\n\t\t\tonRequestClose={ closeAndReset }\n\t\t\t__experimentalHideHeader\n\t\t>\n\t\t\t<div className=\"commands-command-menu__container\">\n\t\t\t\t<Command label={ __( 'Command palette' ) }>\n\t\t\t\t\t<div className=\"commands-command-menu__header\">\n\t\t\t\t\t\t<Command.Input\n\t\t\t\t\t\t\tref={ commandMenuInput }\n\t\t\t\t\t\t\tvalue={ search }\n\t\t\t\t\t\t\tonValueChange={ setSearch }\n\t\t\t\t\t\t\tplaceholder={ __( 'Type a command or search' ) }\n\t\t\t\t\t\t/>\n\t\t\t\t\t</div>\n\t\t\t\t\t<Command.List>\n\t\t\t\t\t\t{ search && ! isLoading && (\n\t\t\t\t\t\t\t<Command.Empty>\n\t\t\t\t\t\t\t\t{ __( 'No results found.' ) }\n\t\t\t\t\t\t\t</Command.Empty>\n\t\t\t\t\t\t) }\n\t\t\t\t\t\t<CommandMenuGroup\n\t\t\t\t\t\t\tsearch={ search }\n\t\t\t\t\t\t\tsetLoader={ setLoader }\n\t\t\t\t\t\t\tclose={ closeAndReset }\n\t\t\t\t\t\t\tisContextual\n\t\t\t\t\t\t/>\n\t\t\t\t\t\t{ search && (\n\t\t\t\t\t\t\t<CommandMenuGroup\n\t\t\t\t\t\t\t\tsearch={ search }\n\t\t\t\t\t\t\t\tsetLoader={ setLoader }\n\t\t\t\t\t\t\t\tclose={ closeAndReset }\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t) }\n\t\t\t\t\t</Command.List>\n\t\t\t\t</Command>\n\t\t\t</div>\n\t\t</Modal>\n\t);\n}\n"]}
1
+ {"version":3,"sources":["@wordpress/commands/src/components/command-menu.js"],"names":["Command","useSelect","useDispatch","useState","useEffect","useRef","useCallback","__","Modal","TextHighlight","__experimentalHStack","HStack","store","keyboardShortcutsStore","useShortcut","Icon","commandsStore","CommandMenuLoader","name","search","hook","setLoader","close","isLoading","commands","length","map","command","searchLabel","label","callback","icon","CommandMenuLoaderWrapper","currentLoader","key","setKey","current","prevKey","CommandMenuGroup","isContextual","loaders","select","getCommands","getCommandLoaders","loader","CommandMenu","registerShortcut","setSearch","isOpen","open","setLoaders","commandMenuInput","category","description","keyCombination","modifier","character","event","preventDefault","bindGlobal","value","closeAndReset","focus","onKeyDown","nativeEvent","isComposing","keyCode","Object","values","some","Boolean"],"mappings":"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","sourcesContent":["/**\n * External dependencies\n */\nimport { Command } from 'cmdk';\n\n/**\n * WordPress dependencies\n */\nimport { useSelect, useDispatch } from '@wordpress/data';\nimport { useState, useEffect, useRef, useCallback } from '@wordpress/element';\nimport { __ } from '@wordpress/i18n';\nimport {\n\tModal,\n\tTextHighlight,\n\t__experimentalHStack as HStack,\n} from '@wordpress/components';\nimport {\n\tstore as keyboardShortcutsStore,\n\tuseShortcut,\n} from '@wordpress/keyboard-shortcuts';\nimport { Icon } from '@wordpress/icons';\n\n/**\n * Internal dependencies\n */\nimport { store as commandsStore } from '../store';\n\nfunction CommandMenuLoader( { name, search, hook, setLoader, close } ) {\n\tconst { isLoading, commands = [] } = hook( { search } ) ?? {};\n\tuseEffect( () => {\n\t\tsetLoader( name, isLoading );\n\t}, [ setLoader, name, isLoading ] );\n\n\tif ( ! commands.length ) {\n\t\treturn null;\n\t}\n\n\treturn (\n\t\t<>\n\t\t\t<Command.List>\n\t\t\t\t{ commands.map( ( command ) => (\n\t\t\t\t\t<Command.Item\n\t\t\t\t\t\tkey={ command.name }\n\t\t\t\t\t\tvalue={ command.searchLabel ?? command.label }\n\t\t\t\t\t\tonSelect={ () => command.callback( { close } ) }\n\t\t\t\t\t>\n\t\t\t\t\t\t<HStack\n\t\t\t\t\t\t\talignment=\"left\"\n\t\t\t\t\t\t\tclassName=\"commands-command-menu__item\"\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<Icon icon={ command.icon } />\n\t\t\t\t\t\t\t<span>\n\t\t\t\t\t\t\t\t<TextHighlight\n\t\t\t\t\t\t\t\t\ttext={ command.label }\n\t\t\t\t\t\t\t\t\thighlight={ search }\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t</HStack>\n\t\t\t\t\t</Command.Item>\n\t\t\t\t) ) }\n\t\t\t</Command.List>\n\t\t</>\n\t);\n}\n\nexport function CommandMenuLoaderWrapper( { hook, search, setLoader, close } ) {\n\t// The \"hook\" prop is actually a custom React hook\n\t// so to avoid breaking the rules of hooks\n\t// the CommandMenuLoaderWrapper component need to be\n\t// remounted on each hook prop change\n\t// We use the key state to make sure we do that properly.\n\tconst currentLoader = useRef( hook );\n\tconst [ key, setKey ] = useState( 0 );\n\tuseEffect( () => {\n\t\tif ( currentLoader.current !== hook ) {\n\t\t\tcurrentLoader.current = hook;\n\t\t\tsetKey( ( prevKey ) => prevKey + 1 );\n\t\t}\n\t}, [ hook ] );\n\n\treturn (\n\t\t<CommandMenuLoader\n\t\t\tkey={ key }\n\t\t\thook={ currentLoader.current }\n\t\t\tsearch={ search }\n\t\t\tsetLoader={ setLoader }\n\t\t\tclose={ close }\n\t\t/>\n\t);\n}\n\nexport function CommandMenuGroup( { isContextual, search, setLoader, close } ) {\n\tconst { commands, loaders } = useSelect(\n\t\t( select ) => {\n\t\t\tconst { getCommands, getCommandLoaders } = select( commandsStore );\n\t\t\treturn {\n\t\t\t\tcommands: getCommands( isContextual ),\n\t\t\t\tloaders: getCommandLoaders( isContextual ),\n\t\t\t};\n\t\t},\n\t\t[ isContextual ]\n\t);\n\n\tif ( ! commands.length && ! loaders.length ) {\n\t\treturn null;\n\t}\n\n\treturn (\n\t\t<Command.Group>\n\t\t\t{ commands.map( ( command ) => (\n\t\t\t\t<Command.Item\n\t\t\t\t\tkey={ command.name }\n\t\t\t\t\tvalue={ command.searchLabel ?? command.label }\n\t\t\t\t\tonSelect={ () => command.callback( { close } ) }\n\t\t\t\t>\n\t\t\t\t\t<HStack\n\t\t\t\t\t\talignment=\"left\"\n\t\t\t\t\t\tclassName=\"commands-command-menu__item\"\n\t\t\t\t\t>\n\t\t\t\t\t\t<Icon icon={ command.icon } />\n\t\t\t\t\t\t<span>\n\t\t\t\t\t\t\t<TextHighlight\n\t\t\t\t\t\t\t\ttext={ command.label }\n\t\t\t\t\t\t\t\thighlight={ search }\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t</span>\n\t\t\t\t\t</HStack>\n\t\t\t\t</Command.Item>\n\t\t\t) ) }\n\t\t\t{ loaders.map( ( loader ) => (\n\t\t\t\t<CommandMenuLoaderWrapper\n\t\t\t\t\tkey={ loader.name }\n\t\t\t\t\thook={ loader.hook }\n\t\t\t\t\tsearch={ search }\n\t\t\t\t\tsetLoader={ setLoader }\n\t\t\t\t\tclose={ close }\n\t\t\t\t/>\n\t\t\t) ) }\n\t\t</Command.Group>\n\t);\n}\n\nexport function CommandMenu() {\n\tconst { registerShortcut } = useDispatch( keyboardShortcutsStore );\n\tconst [ search, setSearch ] = useState( '' );\n\tconst isOpen = useSelect(\n\t\t( select ) => select( commandsStore ).isOpen(),\n\t\t[]\n\t);\n\tconst { open, close } = useDispatch( commandsStore );\n\tconst [ loaders, setLoaders ] = useState( {} );\n\tconst commandMenuInput = useRef();\n\n\tuseEffect( () => {\n\t\tregisterShortcut( {\n\t\t\tname: 'core/commands',\n\t\t\tcategory: 'global',\n\t\t\tdescription: __( 'Open the command palette' ),\n\t\t\tkeyCombination: {\n\t\t\t\tmodifier: 'primary',\n\t\t\t\tcharacter: 'k',\n\t\t\t},\n\t\t} );\n\t}, [ registerShortcut ] );\n\n\tuseShortcut(\n\t\t'core/commands',\n\t\t( event ) => {\n\t\t\tevent.preventDefault();\n\t\t\tif ( isOpen ) {\n\t\t\t\tclose();\n\t\t\t} else {\n\t\t\t\topen();\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\tbindGlobal: true,\n\t\t}\n\t);\n\n\tconst setLoader = useCallback(\n\t\t( name, value ) =>\n\t\t\tsetLoaders( ( current ) => ( {\n\t\t\t\t...current,\n\t\t\t\t[ name ]: value,\n\t\t\t} ) ),\n\t\t[]\n\t);\n\tconst closeAndReset = () => {\n\t\tsetSearch( '' );\n\t\tclose();\n\t};\n\n\tuseEffect( () => {\n\t\t// Focus the command palette input when mounting the modal.\n\t\tif ( isOpen ) {\n\t\t\tcommandMenuInput.current.focus();\n\t\t}\n\t}, [ isOpen ] );\n\n\tif ( ! isOpen ) {\n\t\treturn false;\n\t}\n\n\tconst onKeyDown = ( event ) => {\n\t\tif (\n\t\t\t// Ignore keydowns from IMEs\n\t\t\tevent.nativeEvent.isComposing ||\n\t\t\t// Workaround for Mac Safari where the final Enter/Backspace of an IME composition\n\t\t\t// is `isComposing=false`, even though it's technically still part of the composition.\n\t\t\t// These can only be detected by keyCode.\n\t\t\tevent.keyCode === 229\n\t\t) {\n\t\t\tevent.preventDefault();\n\t\t}\n\t};\n\n\tconst isLoading = Object.values( loaders ).some( Boolean );\n\n\treturn (\n\t\t<Modal\n\t\t\tclassName=\"commands-command-menu\"\n\t\t\toverlayClassName=\"commands-command-menu__overlay\"\n\t\t\tonRequestClose={ closeAndReset }\n\t\t\t__experimentalHideHeader\n\t\t>\n\t\t\t<div className=\"commands-command-menu__container\">\n\t\t\t\t<Command\n\t\t\t\t\tlabel={ __( 'Command palette' ) }\n\t\t\t\t\tonKeyDown={ onKeyDown }\n\t\t\t\t>\n\t\t\t\t\t<div className=\"commands-command-menu__header\">\n\t\t\t\t\t\t<Command.Input\n\t\t\t\t\t\t\tref={ commandMenuInput }\n\t\t\t\t\t\t\tvalue={ search }\n\t\t\t\t\t\t\tonValueChange={ setSearch }\n\t\t\t\t\t\t\tplaceholder={ __( 'Type a command or search' ) }\n\t\t\t\t\t\t/>\n\t\t\t\t\t</div>\n\t\t\t\t\t<Command.List>\n\t\t\t\t\t\t{ search && ! isLoading && (\n\t\t\t\t\t\t\t<Command.Empty>\n\t\t\t\t\t\t\t\t{ __( 'No results found.' ) }\n\t\t\t\t\t\t\t</Command.Empty>\n\t\t\t\t\t\t) }\n\t\t\t\t\t\t<CommandMenuGroup\n\t\t\t\t\t\t\tsearch={ search }\n\t\t\t\t\t\t\tsetLoader={ setLoader }\n\t\t\t\t\t\t\tclose={ closeAndReset }\n\t\t\t\t\t\t\tisContextual\n\t\t\t\t\t\t/>\n\t\t\t\t\t\t{ search && (\n\t\t\t\t\t\t\t<CommandMenuGroup\n\t\t\t\t\t\t\t\tsearch={ search }\n\t\t\t\t\t\t\t\tsetLoader={ setLoader }\n\t\t\t\t\t\t\t\tclose={ closeAndReset }\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t) }\n\t\t\t\t\t</Command.List>\n\t\t\t\t</Command>\n\t\t\t</div>\n\t\t</Modal>\n\t);\n}\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@wordpress/commands",
3
- "version": "0.6.9",
3
+ "version": "0.6.10",
4
4
  "description": "Handles the commands menu.",
5
5
  "author": "The WordPress Contributors",
6
6
  "license": "GPL-2.0-or-later",
@@ -27,7 +27,7 @@
27
27
  "react-native": "src/index",
28
28
  "dependencies": {
29
29
  "@babel/runtime": "^7.16.0",
30
- "@wordpress/components": "^25.1.9",
30
+ "@wordpress/components": "^25.1.10",
31
31
  "@wordpress/data": "^9.5.5",
32
32
  "@wordpress/element": "^5.12.1",
33
33
  "@wordpress/i18n": "^4.35.1",
@@ -43,5 +43,5 @@
43
43
  "publishConfig": {
44
44
  "access": "public"
45
45
  },
46
- "gitHead": "609a9df27d25e3d224dd1e2b97beb1bc02693255"
46
+ "gitHead": "a6c8348f0058e714c97df49b4025e5d7d1c9e437"
47
47
  }
@@ -201,6 +201,20 @@ export function CommandMenu() {
201
201
  if ( ! isOpen ) {
202
202
  return false;
203
203
  }
204
+
205
+ const onKeyDown = ( event ) => {
206
+ if (
207
+ // Ignore keydowns from IMEs
208
+ event.nativeEvent.isComposing ||
209
+ // Workaround for Mac Safari where the final Enter/Backspace of an IME composition
210
+ // is `isComposing=false`, even though it's technically still part of the composition.
211
+ // These can only be detected by keyCode.
212
+ event.keyCode === 229
213
+ ) {
214
+ event.preventDefault();
215
+ }
216
+ };
217
+
204
218
  const isLoading = Object.values( loaders ).some( Boolean );
205
219
 
206
220
  return (
@@ -211,7 +225,10 @@ export function CommandMenu() {
211
225
  __experimentalHideHeader
212
226
  >
213
227
  <div className="commands-command-menu__container">
214
- <Command label={ __( 'Command palette' ) }>
228
+ <Command
229
+ label={ __( 'Command palette' ) }
230
+ onKeyDown={ onKeyDown }
231
+ >
215
232
  <div className="commands-command-menu__header">
216
233
  <Command.Input
217
234
  ref={ commandMenuInput }