UNPKG

@yuebai008/cli

Version:

Command line interface for rapid qg-minigame development

1 lines 5.85 kB
import*as Host from"../../core/host/host.js";import{DefaultShortcutSetting}from"./ShortcutRegistry.js";export class KeyboardShortcut{descriptors;action;type;keybindSets;constructor(e,t,o,r){this.descriptors=e,this.action=t,this.type=o,this.keybindSets=r||new Set}title(){return this.descriptors.map((e=>e.name)).join(" ")}isDefault(){return this.type===Type.DefaultShortcut||this.type===Type.DisabledDefault||this.type===Type.KeybindSetShortcut&&this.keybindSets.has(DefaultShortcutSetting)}changeType(e){return new KeyboardShortcut(this.descriptors,this.action,e)}changeKeys(e){return this.descriptors=e,this}descriptorsMatch(e){return e.length===this.descriptors.length&&e.every(((e,t)=>e.key===this.descriptors[t].key))}hasKeybindSet(e){return!this.keybindSets||this.keybindSets.has(e)}equals(e){return this.descriptorsMatch(e.descriptors)&&this.type===e.type&&this.action===e.action}static createShortcutFromSettingObject(e){return new KeyboardShortcut(e.descriptors,e.action,e.type)}static makeKey(e,t){return"string"==typeof e&&(e=e.charCodeAt(0)-(/^[a-z]/.test(e)?32:0)),t=t||Modifiers.None,KeyboardShortcut.makeKeyFromCodeAndModifiers(e,t)}static makeKeyFromEvent(e){let t=Modifiers.None;e.shiftKey&&(t|=Modifiers.Shift),e.ctrlKey&&(t|=Modifiers.Ctrl),e.altKey&&(t|=Modifiers.Alt),e.metaKey&&(t|=Modifiers.Meta);const o=e.keyCode||e.__keyCode;return KeyboardShortcut.makeKeyFromCodeAndModifiers(o,t)}static makeKeyFromEventIgnoringModifiers(e){const t=e.keyCode||e.__keyCode;return KeyboardShortcut.makeKeyFromCodeAndModifiers(t,Modifiers.None)}static eventHasCtrlEquivalentKey(e){return Host.Platform.isMac()?e.metaKey&&!e.ctrlKey:e.ctrlKey&&!e.metaKey}static eventHasEitherCtrlOrMeta(e){return e.metaKey||e.ctrlKey}static hasNoModifiers(e){const t=e;return!(t.ctrlKey||t.shiftKey||t.altKey||t.metaKey)}static makeDescriptor(e,t){return{key:KeyboardShortcut.makeKey("string"==typeof e?e:e.code,t),name:KeyboardShortcut.shortcutToString(e,t)}}static makeDescriptorFromBindingShortcut(e){const[t,...o]=e.split(/\+(?!$)/).reverse();let r=0;for(const t of o){const o=Modifiers[t];console.assert(void 0!==o,`Only one key other than modifier is allowed in shortcut <${e}>`),r|=o}console.assert(t.length>0,`Modifiers-only shortcuts are not allowed (encountered <${e}>)`);const a=Keys[t]||KeyBindings[t];return a&&"shiftKey"in a&&a.shiftKey&&(r|=Modifiers.Shift),KeyboardShortcut.makeDescriptor(a||t,r)}static shortcutToString(e,t){return"string"!=typeof e&&KeyboardShortcut.isModifier(e.code)?KeyboardShortcut.modifiersToString(t):KeyboardShortcut.modifiersToString(t)+KeyboardShortcut.keyName(e)}static keyName(e){return"string"==typeof e?e.toUpperCase():"string"==typeof e.name?e.name:e.name[Host.Platform.platform()]||e.name.other||""}static makeKeyFromCodeAndModifiers(e,t){return 255&e|(t||0)<<8}static keyCodeAndModifiersFromKey(e){return{keyCode:255&e,modifiers:e>>8}}static isModifier(e){const{keyCode:t}=KeyboardShortcut.keyCodeAndModifiersFromKey(e);return t===Keys.Shift.code||t===Keys.Ctrl.code||t===Keys.Alt.code||t===Keys.Meta.code}static modifiersToString(e){const t=Host.Platform.isMac(),o=Modifiers,r=new Map([[o.Ctrl,t?"Ctrl ":"Ctrl + "],[o.Alt,t?"⌥ ":"Alt + "],[o.Shift,t?"⇧ ":"Shift + "],[o.Meta,t?"⌘ ":"Win + "]]);return[o.Meta,o.Ctrl,o.Alt,o.Shift].map((function(t){return(e||0)&t?r.get(t):""})).join("")}}export const Modifiers={None:0,Shift:1,Ctrl:2,Alt:4,Meta:8,CtrlOrMeta:Host.Platform.isMac()?8:2,ShiftOrOption:Host.Platform.isMac()?4:1};const leftKey={code:37,name:"←"},upKey={code:38,name:"↑"},rightKey={code:39,name:"→"},downKey={code:40,name:"↓"},ctrlKey={code:17,name:"Ctrl"},escKey={code:27,name:"Esc"},spaceKey={code:32,name:"Space"},plusKey={code:187,name:"+"},backquoteKey={code:192,name:"`"},quoteKey={code:222,name:"'"};export const Keys={Backspace:{code:8,name:"↤"},Tab:{code:9,name:{mac:"⇥",other:"Tab"}},Enter:{code:13,name:{mac:"↩",other:"Enter"}},Shift:{code:16,name:{mac:"⇧",other:"Shift"}},Ctrl:ctrlKey,Control:ctrlKey,Alt:{code:18,name:"Alt"},Esc:escKey,Escape:escKey,Space:spaceKey," ":spaceKey,PageUp:{code:33,name:{mac:"⇞",other:"PageUp"}},PageDown:{code:34,name:{mac:"⇟",other:"PageDown"}},End:{code:35,name:{mac:"↗",other:"End"}},Home:{code:36,name:{mac:"↖",other:"Home"}},Left:leftKey,Up:upKey,Right:rightKey,Down:downKey,ArrowLeft:leftKey,ArrowUp:upKey,ArrowRight:rightKey,ArrowDown:downKey,Delete:{code:46,name:"Del"},Zero:{code:48,name:"0"},H:{code:72,name:"H"},N:{code:78,name:"N"},P:{code:80,name:"P"},Meta:{code:91,name:"Meta"},F1:{code:112,name:"F1"},F2:{code:113,name:"F2"},F3:{code:114,name:"F3"},F4:{code:115,name:"F4"},F5:{code:116,name:"F5"},F6:{code:117,name:"F6"},F7:{code:118,name:"F7"},F8:{code:119,name:"F8"},F9:{code:120,name:"F9"},F10:{code:121,name:"F10"},F11:{code:122,name:"F11"},F12:{code:123,name:"F12"},Semicolon:{code:186,name:";"},NumpadPlus:{code:107,name:"Numpad +"},NumpadMinus:{code:109,name:"Numpad -"},Numpad0:{code:96,name:"Numpad 0"},Plus:plusKey,Equal:plusKey,Comma:{code:188,name:","},Minus:{code:189,name:"-"},Period:{code:190,name:"."},Slash:{code:191,name:"/"},QuestionMark:{code:191,name:"?"},Apostrophe:backquoteKey,Tilde:{code:192,name:"Tilde"},Backquote:backquoteKey,IntlBackslash:backquoteKey,LeftSquareBracket:{code:219,name:"["},RightSquareBracket:{code:221,name:"]"},Backslash:{code:220,name:"\\"},SingleQuote:quoteKey,Quote:quoteKey,get CtrlOrMeta(){return Host.Platform.isMac()?this.Meta:this.Ctrl}};export var Type;!function(e){e.UserShortcut="UserShortcut",e.DefaultShortcut="DefaultShortcut",e.DisabledDefault="DisabledDefault",e.UnsetShortcut="UnsetShortcut",e.KeybindSetShortcut="KeybindSetShortcut"}(Type||(Type={}));export const KeyBindings={};!function(){for(const e in Keys){const t=Keys[e];if("object"==typeof t&&t.code){const o="string"==typeof t.name?t.name:e;KeyBindings[o]=t}}}();