@primer/react
Version:
An implementation of GitHub's Primer Design System using React
30 lines (29 loc) • 1.43 kB
JavaScript
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 };