@lobehub/ui
Version:
Lobe UI is an open-source UI component library for building AIGC web apps
1 lines • 7.34 kB
Source Map (JSON)
{"version":3,"file":"Hotkey.mjs","names":["Icon","LeftClickIcon","RightClickIcon","RightDoubleClickIcon","LeftDoubleClickIcon","mapping: Record<string, any>","Flexbox","Center"],"sources":["../../src/Hotkey/Hotkey.tsx"],"sourcesContent":["'use client';\n\nimport { cx, useThemeMode } from 'antd-style';\nimport {\n ArrowBigUpIcon,\n ArrowDownIcon,\n ArrowLeftIcon,\n ArrowRightIcon,\n ArrowRightToLineIcon,\n ArrowUpIcon,\n ChevronUpIcon,\n Command,\n CornerDownLeftIcon,\n Delete,\n Grid2X2Icon,\n MouseIcon,\n Option,\n SpaceIcon,\n} from 'lucide-react';\nimport { memo, useEffect, useMemo, useState } from 'react';\n\nimport { Center, Flexbox } from '@/Flex';\nimport Icon from '@/Icon';\nimport LeftClickIcon from '@/icons/lucideExtra/LeftClickIcon';\nimport LeftDoubleClickIcon from '@/icons/lucideExtra/LeftDoubleClickIcon';\nimport RightClickIcon from '@/icons/lucideExtra/RightClickIcon';\nimport RightDoubleClickIcon from '@/icons/lucideExtra/RightDoubleClickIcon';\n\nimport { KeyMapEnum } from './const';\nimport { variants } from './style';\nimport type { HotkeyProps } from './type';\nimport { checkIsAppleDevice, splitKeysByPlus, startCase } from './utils';\n\nconst mappingKey = (isAppleDevice: boolean) => ({\n [KeyMapEnum.Alt]: isAppleDevice ? <Icon icon={Option} size={{ size: '0.95em' }} /> : 'Alt',\n [KeyMapEnum.Backspace]: isAppleDevice ? <Icon icon={Delete} /> : 'Backspace',\n [KeyMapEnum.Ctrl]: isAppleDevice ? <Icon icon={ChevronUpIcon} /> : 'Ctrl',\n [KeyMapEnum.Down]: <Icon icon={ArrowDownIcon} />,\n [KeyMapEnum.Enter]: isAppleDevice ? <Icon icon={CornerDownLeftIcon} /> : 'Enter',\n [KeyMapEnum.LeftClick]: <Icon icon={LeftClickIcon} size={{ size: '1.2em', strokeWidth: 1.75 }} />,\n [KeyMapEnum.Left]: <Icon icon={ArrowLeftIcon} />,\n [KeyMapEnum.Meta]: isAppleDevice ? (\n <Icon icon={Command} size={{ size: '0.95em' }} />\n ) : (\n <Icon icon={Grid2X2Icon} />\n ),\n [KeyMapEnum.MiddleClick]: <Icon icon={MouseIcon} size={{ size: '1.2em', strokeWidth: 1.75 }} />,\n [KeyMapEnum.Mod]: isAppleDevice ? <Icon icon={Command} size={{ size: '0.95em' }} /> : 'Ctrl',\n [KeyMapEnum.RightClick]: (\n <Icon icon={RightClickIcon} size={{ size: '1.2em', strokeWidth: 1.75 }} />\n ),\n [KeyMapEnum.RightDoubleClick]: (\n <Icon icon={RightDoubleClickIcon} size={{ size: '1.2em', strokeWidth: 1.75 }} />\n ),\n [KeyMapEnum.LeftDoubleClick]: (\n <Icon icon={LeftDoubleClickIcon} size={{ size: '1.2em', strokeWidth: 1.75 }} />\n ),\n [KeyMapEnum.Right]: <Icon icon={ArrowRightIcon} />,\n [KeyMapEnum.Shift]: isAppleDevice ? (\n <Icon icon={ArrowBigUpIcon} size={{ size: '1.15em', strokeWidth: 1.75 }} />\n ) : (\n 'Shift'\n ),\n [KeyMapEnum.Space]: <Icon icon={SpaceIcon} />,\n [KeyMapEnum.Tab]: isAppleDevice ? <Icon icon={ArrowRightToLineIcon} /> : 'Tab',\n [KeyMapEnum.Up]: <Icon icon={ArrowUpIcon} />,\n [KeyMapEnum.Comma]: ',',\n [KeyMapEnum.Period]: '.',\n [KeyMapEnum.Slash]: '?',\n [KeyMapEnum.Semicolon]: ';',\n [KeyMapEnum.Quote]: \"'\",\n [KeyMapEnum.Backquote]: '`',\n [KeyMapEnum.Backslash]: '\\\\',\n [KeyMapEnum.BracketLeft]: '[',\n [KeyMapEnum.BracketRight]: ']',\n [KeyMapEnum.Minus]: '-',\n [KeyMapEnum.Equal]: '+',\n});\n\nconst Hotkey = memo<HotkeyProps>(\n ({\n variant = 'filled',\n classNames,\n styles: customStyles,\n keys,\n inverseTheme,\n isApple,\n compact,\n className,\n style,\n ...rest\n }) => {\n const { isDarkMode } = useThemeMode();\n const isBorderless = variant === 'borderless';\n const [keysGroup, setKeysGroup] = useState(splitKeysByPlus(keys));\n const isAppleDevice = useMemo(() => checkIsAppleDevice(isApple), [isApple]);\n\n useEffect(() => {\n const newValue = splitKeysByPlus(keys);\n setKeysGroup(newValue);\n }, [keys]);\n\n const mapping: Record<string, any> = useMemo(() => mappingKey(isAppleDevice), [isAppleDevice]);\n\n return (\n <Flexbox\n align={'center'}\n className={className}\n gap={isBorderless ? 6 : 2}\n horizontal\n style={style}\n {...rest}\n >\n {compact || isBorderless ? (\n <Center\n as={'kbd'}\n className={cx(\n variants({ inverseTheme, isDarkMode, variant }),\n classNames?.kbdClassName,\n )}\n gap={6}\n horizontal\n style={customStyles?.kbdStyle}\n >\n {keysGroup.map((key, index) => (\n <div key={index}>{mapping[key] ?? startCase(key)}</div>\n ))}\n </Center>\n ) : (\n keysGroup.map((key, index) => (\n <Center\n as={'kbd'}\n className={cx(\n variants({ inverseTheme, isDarkMode, variant }),\n classNames?.kbdClassName,\n )}\n key={index}\n style={customStyles?.kbdStyle}\n >\n {mapping[key] ?? startCase(key)}\n </Center>\n ))\n )}\n </Flexbox>\n );\n },\n);\n\nHotkey.displayName = 'Hotkey';\n\nexport default Hotkey;\n"],"mappings":"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"}