UNPKG

@primer/react

Version:

An implementation of GitHub's Primer Design System using React

30 lines (29 loc) 1.43 kB
import { accessibleKeyName } from "../key-names.js"; //#region src/KeybindingHint/components/utils.ts /** * Consistent sort order for modifier keys. There should never be more than one non-modifier * key in a chord, so we don't need to worry about sorting those - we just put them at * the end. */ const keySortPriorities = { control: 1, meta: 2, alt: 3, option: 4, shift: 5, function: 6 }; const keySortPriority = (priority) => { var _keySortPriorities$pr; return (_keySortPriorities$pr = keySortPriorities[priority]) !== null && _keySortPriorities$pr !== void 0 ? _keySortPriorities$pr : Infinity; }; const compareLowercaseKeys = (a, b) => keySortPriority(a) - keySortPriority(b); /** Split and sort the chord keys in standard order. */ const splitChord = (chord) => chord.split("+").map((k) => k.toLowerCase()).sort(compareLowercaseKeys); const splitSequence = (sequence) => sequence.split(" "); /** Plain string version of `Chord` for use in `aria` string attributes. */ const accessibleChordString = (chord, platform) => splitChord(chord).map((key) => accessibleKeyName(key, platform)).join(" "); /** Plain string version of `Sequence` for use in `aria` string attributes. */ const accessibleSequenceString = (sequence, platform) => splitSequence(sequence).map((chord) => accessibleChordString(chord, platform)).join(" then "); //#endregion export { accessibleChordString, accessibleSequenceString, splitChord };