UNPKG

@teaui/core

Version:

A high-level terminal UI library for Node

105 lines 2.47 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.styleTextForHotKey = exports.match = void 0; exports.toHotKeyDef = toHotKeyDef; exports.isKeyPrintable = isKeyPrintable; const ansi_1 = require("../ansi"); function toHotKeyDef(hotKey) { if (typeof hotKey !== 'string') { return hotKey; } // hotkey string supports: // C- control // M- meta // S- shift const ctrl = hotKey.includes('C-'); const meta = hotKey.includes('M-'); const shift = hotKey.includes('S-'); const char = hotKey.replace(/^([CMS]-)*/, '').toLowerCase(); return { char, ctrl, meta, shift }; } function isKeyPrintable(event) { switch (event.name) { case 'up': case 'down': case 'left': case 'right': case 'pageup': case 'pagedown': case 'home': case 'end': case 'insert': case 'clear': case 'enter': case 'return': case 'escape': case 'tab': case 'delete': case 'backspace': case 'f1': case 'f2': case 'f3': case 'f4': case 'f1': case 'f2': case 'f3': case 'f4': case 'f1': case 'f2': case 'f3': case 'f4': case 'f5': case 'f5': case 'f6': case 'f7': case 'f8': case 'f9': case 'f10': case 'f11': case 'f12': return false; } if ((event.char.codePointAt(0) ?? 0) < 32) { return false; } return true; } const match = (key, event) => { if ((key.ctrl ?? false) !== event.ctrl) { return false; } if ((key.meta ?? false) !== event.meta) { return false; } if ((key.shift ?? false) !== event.shift) { return false; } return key.char === event.name; }; exports.match = match; const styleTextForHotKey = (text, key_) => { const key = toHotKeyDef(key_); const alt = '⌥'; const shift = '⇧'; const ctrl = '⌃'; let mod = ''; if (key.ctrl) { mod += ctrl; } if (key.meta) { mod += alt; } if (key.shift) { mod += shift; } if (!mod) { return text; } mod = (0, ansi_1.underline)(mod + key.char); if (!text) { return mod; } return `${text} ${mod}`; }; exports.styleTextForHotKey = styleTextForHotKey; //# sourceMappingURL=key.js.map