@gravity-ui/uikit
Version:
Gravity UI base styling and components
52 lines (51 loc) • 2.19 kB
JavaScript
'use client';
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.Hotkey = void 0;
exports.parseHotkeys = parseHotkeys;
const tslib_1 = require("tslib");
const jsx_runtime_1 = require("react/jsx-runtime");
const React = tslib_1.__importStar(require("react"));
const cn_1 = require("../utils/cn.js");
const filterDOMProps_1 = require("../utils/filterDOMProps.js");
const definitions_1 = require("./definitions.js");
const parse_1 = require("./parse.js");
const utils_1 = require("./utils.js");
require("./Hotkey.css");
const b = (0, cn_1.block)('hotkey');
const Spaces = {
BetweenGroups: String.fromCharCode(160), //
BetweenKeys: String.fromCharCode(8239), // Narrow No-Break Space
};
exports.Hotkey = React.forwardRef(function Hotkey(props, ref) {
const { value, platform, view = 'light', qa, style, className, ...restProps } = props;
const groups = parseHotkeys(value, { platform });
const content = [];
let hasGroups = false;
groups.forEach((keys, groupIdx) => {
if (keys.length === 0)
return;
if (hasGroups) {
content.push(Spaces.BetweenGroups);
}
else {
hasGroups = true;
}
keys.forEach((key, keyIdx) => {
const isFirstKey = keyIdx === 0;
if (!isFirstKey) {
content.push(Spaces.BetweenKeys, (0, jsx_runtime_1.jsx)("span", { className: b('plus'), children: "+" }, `${key}_${groupIdx}_${keyIdx}_plus`), Spaces.BetweenKeys);
}
content.push((0, jsx_runtime_1.jsx)("kbd", { children: key }, `${key}_${groupIdx}_${keyIdx}`));
});
});
if (content.length === 0)
return null;
return ((0, jsx_runtime_1.jsx)("kbd", { ...(0, filterDOMProps_1.filterDOMProps)(restProps, { labelable: true }), ref: ref, style: style, "data-qa": qa, className: b({ view }, className), children: content }));
});
function parseHotkeys(value, opts) {
const platform = opts.platform ?? ((0, utils_1.isMac)() ? 'mac' : 'pc');
const defs = definitions_1.defsByPlatform[platform];
return (0, parse_1.parseKeyGroups)(defs, value);
}
//# sourceMappingURL=Hotkey.js.map