UNPKG

@gravity-ui/uikit

Version:

Gravity UI base styling and components

52 lines (51 loc) 2.19 kB
'use client'; "use strict"; 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