@skbkontur/react-ui 4.7.0 → 4.8.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (34) hide show
  1. package/CHANGELOG.md +17 -0
  2. package/cjs/components/CurrencyInput/CurrencyInput.js +5 -2
  3. package/cjs/components/CurrencyInput/CurrencyInput.js.map +1 -1
  4. package/cjs/components/CurrencyInput/CurrencyInput.md +13 -0
  5. package/cjs/components/MenuItem/MenuItem.d.ts +6 -0
  6. package/cjs/components/MenuItem/MenuItem.js +45 -18
  7. package/cjs/components/MenuItem/MenuItem.js.map +1 -1
  8. package/cjs/components/MenuItem/MenuItem.styles.d.ts +1 -0
  9. package/cjs/components/MenuItem/MenuItem.styles.js +7 -3
  10. package/cjs/components/MenuItem/MenuItem.styles.js.map +1 -1
  11. package/cjs/components/Switcher/Switcher.d.ts +3 -2
  12. package/cjs/components/Switcher/Switcher.js +4 -3
  13. package/cjs/components/Switcher/Switcher.js.map +1 -1
  14. package/cjs/internal/ThemeShowcase/VariablesCollector.d.ts +1 -1
  15. package/cjs/internal/themes/DefaultTheme.d.ts +1 -0
  16. package/cjs/internal/themes/DefaultTheme.js +3 -2
  17. package/cjs/internal/themes/DefaultTheme.js.map +1 -1
  18. package/components/CurrencyInput/CurrencyInput/CurrencyInput.js +7 -1
  19. package/components/CurrencyInput/CurrencyInput/CurrencyInput.js.map +1 -1
  20. package/components/CurrencyInput/CurrencyInput.md +13 -0
  21. package/components/MenuItem/MenuItem/MenuItem.js +29 -5
  22. package/components/MenuItem/MenuItem/MenuItem.js.map +1 -1
  23. package/components/MenuItem/MenuItem.d.ts +6 -0
  24. package/components/MenuItem/MenuItem.styles/MenuItem.styles.js +5 -2
  25. package/components/MenuItem/MenuItem.styles/MenuItem.styles.js.map +1 -1
  26. package/components/MenuItem/MenuItem.styles.d.ts +1 -0
  27. package/components/Switcher/Switcher/Switcher.js +4 -3
  28. package/components/Switcher/Switcher/Switcher.js.map +1 -1
  29. package/components/Switcher/Switcher.d.ts +3 -2
  30. package/internal/ThemeShowcase/VariablesCollector.d.ts +1 -1
  31. package/internal/themes/DefaultTheme/DefaultTheme.js +2 -1
  32. package/internal/themes/DefaultTheme/DefaultTheme.js.map +1 -1
  33. package/internal/themes/DefaultTheme.d.ts +1 -0
  34. package/package.json +2 -2
@@ -449,6 +449,12 @@ var CurrencyInput = rootNode(_class = (_temp = _class2 = /*#__PURE__*/function (
449
449
  this.setState(this.getState(value, fractionDigits, hideTrailingZeros));
450
450
  }
451
451
 
452
+ if (isNonNullable(prevProps.value) && isNullable(value)) {
453
+ this.setState({
454
+ formatted: ''
455
+ });
456
+ }
457
+
452
458
  if (this.state.focused && this.input) {
453
459
  var _this$state$selection = this.state.selection,
454
460
  start = _this$state$selection.start,
@@ -500,7 +506,7 @@ var CurrencyInput = rootNode(_class = (_temp = _class2 = /*#__PURE__*/function (
500
506
  signed: PropTypes.bool,
501
507
  size: PropTypes.oneOf(['small', 'medium', 'large']),
502
508
  value: function value(props) {
503
- warning(isValidNumber(props.value), "[CurrencyInput]: Prop value is not a valid number");
509
+ warning(isValidNumber(props.value), '[CurrencyInput]: Prop `value` is not a valid number');
504
510
  },
505
511
  warning: PropTypes.bool,
506
512
  width: PropTypes.oneOfType([PropTypes.number, PropTypes.string]),
@@ -1 +1 @@
1
- {"version":3,"sources":["CurrencyInput.tsx"],"names":["React","PropTypes","warning","debounce","isNonNullable","isNullable","isIE11","Input","CommonWrapper","rootNode","createPropsGetter","MAX_SAFE_DIGITS","SelectionHelper","CurrencyHelper","CurrencyInputHelper","CURRENCY_INPUT_ACTIONS","extractAction","CurrencyInputDataTids","root","CurrencyInput","getProps","defaultProps","state","getState","value","fractionDigits","hideTrailingZeros","focused","tempSelectionForOnChange","fromPosition","renderMain","props","signed","onSubmit","integerDigits","rest","align","formatted","handleBlur","handleFocus","handleMouseUp","handleKeyDown","handleValueChange","handlePaste","handleCopy","handleCut","onMouseEnter","onMouseLeave","onMouseOver","refInput","getPlaceholder","focus","input","blur","debouncedSetSelectionFromEvent","setSelectionFromEvent","event","persist","selection","getSelection","target","onKeyDown","defaultPrevented","action","Ignore","Unknown","preventDefault","Submit","Backspace","inputValue","moveCursor","end","Delete","start","MoveCursorLeft","MoveCursorRight","Home","setState","End","length","ExtendSelectionLeft","extendSelection","ExtendSelectionRight","FullSelection","forward","ExtendSelectionToStart","backward","ExtendSelectionToEnd","inputEnd","Comma","scrollInput","node","getNode","scrollWidth","clientWidth","PAD","SHIFT","selected","position","direction","charsCount","charWidth","frame","Math","ceil","frameStart","scrollLeft","frameEnd","getInputSelectionFromEvent","step","extended","result","safeInsert","unsigned","parsedValue","parse","onValueChange","blink","getOnChangeDelta","oldValue","substring","substr","delta","data","clipboardData","getData","formatForClipboard","setData","selectionStart","selectionEnd","selectionDirection","valueLength","onFocus","onBlur","element","componentDidMount","maxLength","undefined","componentDidUpdate","prevProps","prevState","isValidNumber","isNumeric","Number","setSelectionRange","render","setRootNode","format","normilized","normalizeSelection","PureComponent","__KONTUR_REACT_UI__","propTypes","oneOf","autoFocus","bool","borderless","disabled","error","number","leftIcon","placeholder","string","size","width","oneOfType","func","isRequired","inputMode","HTMLInputElement","Error","isNaN","parseFloat","isFinite"],"mappings":"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","sourcesContent":["// TODO: Enable this rule in functional components.\n/* eslint-disable @typescript-eslint/no-unused-vars */\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport warning from 'warning';\nimport debounce from 'lodash.debounce';\n\nimport { isNonNullable, isNullable } from '../../lib/utils';\nimport { isIE11 } from '../../lib/client';\nimport { Input, InputProps } from '../Input';\nimport { Nullable, Override } from '../../typings/utility-types';\nimport { CommonProps, CommonWrapper, CommonWrapperRestProps } from '../../internal/CommonWrapper';\nimport { TSetRootNode, rootNode } from '../../lib/rootNode';\nimport { createPropsGetter } from '../../lib/createPropsGetter';\n\nimport { MAX_SAFE_DIGITS } from './constants';\nimport { Selection, SelectionDirection, SelectionHelper } from './SelectionHelper';\nimport { CurrencyHelper } from './CurrencyHelper';\nimport { CurrencyInputHelper } from './CurrencyInputHelper';\nimport { CURRENCY_INPUT_ACTIONS, extractAction } from './CurrencyInputKeyboardActions';\n\nexport interface CurrencyInputProps\n extends CommonProps,\n Override<\n InputProps,\n {\n /** Значение */\n value?: Nullable<number>;\n /** Убрать лишние нули после запятой */\n hideTrailingZeros?: boolean;\n /** Кол-во цифр после запятой */\n fractionDigits?: Nullable<number>;\n /** Отрицательные значения */\n signed?: boolean;\n /**\n * Допустимое кол-во цифр целой части.\n * Если передан **0**, или `fractionDigits=15`, то и в целой части допускается только **0**.\n */\n integerDigits?: Nullable<number>;\n /** Вызывается при изменении `value` */\n onValueChange: (value: Nullable<number>) => void;\n /** onSubmit */\n onSubmit?: () => void;\n }\n > {}\n\nexport interface CurrencyInputState {\n formatted: string;\n selection: Selection;\n focused: boolean;\n}\n\nexport const CurrencyInputDataTids = {\n root: 'CurrencyInput__root',\n} as const;\n\ntype DefaultProps = Required<\n Pick<CurrencyInputProps, 'align' | 'fractionDigits' | 'hideTrailingZeros' | 'value' | 'inputMode'>\n>;\n\n/**\n * Поле для денежных сумм (и других числовых значений).\n * Принимает любые свойства `Input`.\n *\n * Максимальная длина числа - **15 цифр** (с десятичным разделителем в любом месте).\n * <br/>\n * Если `fractionDigits=15`, то в целой части допускается **0**.\n */\n@rootNode\nexport class CurrencyInput extends React.PureComponent<CurrencyInputProps, CurrencyInputState> {\n public static __KONTUR_REACT_UI__ = 'CurrencyInput';\n\n public static propTypes = {\n align: PropTypes.oneOf(['left', 'center', 'right']),\n autoFocus: PropTypes.bool,\n borderless: PropTypes.bool,\n disabled: PropTypes.bool,\n error: PropTypes.bool,\n fractionDigits: PropTypes.number,\n hideTrailingZeros: PropTypes.bool,\n leftIcon: PropTypes.element,\n placeholder: PropTypes.string,\n signed: PropTypes.bool,\n size: PropTypes.oneOf(['small', 'medium', 'large']),\n value: (props: CurrencyInputProps) => {\n warning(isValidNumber(props.value), `[CurrencyInput]: Prop value is not a valid number`);\n },\n warning: PropTypes.bool,\n width: PropTypes.oneOfType([PropTypes.number, PropTypes.string]),\n onBlur: PropTypes.func,\n onValueChange: PropTypes.func.isRequired,\n onFocus: PropTypes.func,\n onMouseEnter: PropTypes.func,\n onMouseLeave: PropTypes.func,\n onMouseOver: PropTypes.func,\n onSubmit: PropTypes.func,\n };\n\n public static defaultProps: DefaultProps = {\n align: 'right',\n fractionDigits: 2,\n hideTrailingZeros: false,\n value: null,\n inputMode: 'decimal',\n };\n\n private getProps = createPropsGetter(CurrencyInput.defaultProps);\n\n public state: CurrencyInputState = {\n ...this.getState(this.getProps().value, this.getProps().fractionDigits, this.getProps().hideTrailingZeros),\n focused: false,\n };\n\n private input: Nullable<Input>;\n private tempSelectionForOnChange: Selection = SelectionHelper.fromPosition(0);\n private setRootNode!: TSetRootNode;\n\n public componentDidMount(): void {\n const { maxLength, integerDigits } = this.props;\n const fractionDigits = this.getProps().fractionDigits;\n warning(\n maxLength === undefined,\n `[CurrencyInput]: Prop 'maxLength' has been deprecated. See 'integerDigits' and 'fractionDigits'`,\n );\n warning(\n (integerDigits || 0) + (fractionDigits || 0) <= MAX_SAFE_DIGITS,\n `[CurrencyInput]: Sum of 'integerDigits' and 'fractionDigits' exceeds ${MAX_SAFE_DIGITS}.` +\n `\\nSee https://tech.skbkontur.ru/react-ui/#/CurrencyInput?id=why15`,\n );\n }\n\n public componentDidUpdate(prevProps: CurrencyInputProps, prevState: CurrencyInputState) {\n const { value, fractionDigits, hideTrailingZeros } = this.getProps();\n if (\n (isValidNumber(value) && isNumeric(value) && Number(value) !== CurrencyHelper.parse(prevState.formatted)) ||\n prevProps.fractionDigits !== fractionDigits\n ) {\n this.setState(this.getState(value, fractionDigits, hideTrailingZeros));\n }\n if (this.state.focused && this.input) {\n const { start, end } = this.state.selection;\n\n this.input.setSelectionRange(start, end);\n }\n if (prevState.selection !== this.state.selection) {\n this.scrollInput();\n }\n }\n\n public render() {\n return (\n <CommonWrapper rootNodeRef={this.setRootNode} {...this.props}>\n {this.renderMain}\n </CommonWrapper>\n );\n }\n\n public renderMain = (props: CommonWrapperRestProps<CurrencyInputProps>) => {\n const { fractionDigits, signed, onSubmit, integerDigits, hideTrailingZeros, ...rest } = props;\n\n return (\n <Input\n data-tid={CurrencyInputDataTids.root}\n {...rest}\n align={this.getProps().align}\n value={this.state.formatted}\n onBlur={this.handleBlur}\n onFocus={this.handleFocus}\n onMouseUp={this.handleMouseUp}\n onKeyDown={this.handleKeyDown}\n onValueChange={this.handleValueChange}\n onPaste={this.handlePaste}\n onCopy={this.handleCopy}\n onCut={this.handleCut}\n onMouseEnter={this.props.onMouseEnter}\n onMouseLeave={this.props.onMouseLeave}\n onMouseOver={this.props.onMouseOver}\n ref={this.refInput}\n placeholder={this.state.focused ? '' : getPlaceholder(props)}\n />\n );\n };\n\n /**\n * @public\n */\n public focus = () => {\n if (this.input) {\n this.input.focus();\n }\n };\n\n /**\n * @public\n */\n public blur = () => {\n if (this.input) {\n this.input.blur();\n }\n };\n\n private getState(value: Nullable<number>, fractionDigits: Nullable<number>, hideTrailingZeros: boolean) {\n return {\n formatted: CurrencyHelper.format(value, { fractionDigits, hideTrailingZeros }),\n selection: SelectionHelper.fromPosition(0),\n };\n }\n\n private setSelectionFromEvent(event: React.MouseEvent<HTMLInputElement>) {\n const selection = getInputSelectionFromEvent(event.target);\n const normilized = CurrencyInputHelper.normalizeSelection(this.state.formatted, selection);\n this.setState({ selection: normilized });\n }\n\n // for IE11\n private readonly debouncedSetSelectionFromEvent = debounce(this.setSelectionFromEvent, 300);\n\n private handleMouseUp = (event: React.MouseEvent<HTMLInputElement>) => {\n if (isIE11) {\n event.persist();\n this.debouncedSetSelectionFromEvent(event);\n } else {\n this.setSelectionFromEvent(event);\n }\n };\n\n private handleKeyDown = (event: React.KeyboardEvent<HTMLInputElement>) => {\n const selection = this.getSelection(event.target);\n this.tempSelectionForOnChange = selection;\n\n if (this.props.onKeyDown) {\n this.props.onKeyDown(event);\n if (event.defaultPrevented) {\n return;\n }\n }\n\n const action = extractAction(event);\n\n if (action === CURRENCY_INPUT_ACTIONS.Ignore) {\n return;\n }\n\n if (action !== CURRENCY_INPUT_ACTIONS.Unknown) {\n event.preventDefault();\n }\n\n switch (action) {\n case CURRENCY_INPUT_ACTIONS.Submit: {\n if (this.props.onSubmit) {\n this.props.onSubmit();\n }\n return;\n }\n case CURRENCY_INPUT_ACTIONS.Backspace: {\n this.inputValue(CurrencyInputHelper.moveCursor(this.state.formatted, selection, -1), selection.end, '');\n return;\n }\n case CURRENCY_INPUT_ACTIONS.Delete: {\n this.inputValue(selection.start, CurrencyInputHelper.moveCursor(this.state.formatted, selection, +1), '');\n return;\n }\n case CURRENCY_INPUT_ACTIONS.MoveCursorLeft: {\n this.moveCursor(selection, -1);\n return;\n }\n case CURRENCY_INPUT_ACTIONS.MoveCursorRight: {\n this.moveCursor(selection, +1);\n return;\n }\n case CURRENCY_INPUT_ACTIONS.Home: {\n this.setState({ selection: SelectionHelper.fromPosition(0) });\n return;\n }\n case CURRENCY_INPUT_ACTIONS.End: {\n const end = this.state.formatted.length;\n this.setState({ selection: SelectionHelper.fromPosition(end) });\n return;\n }\n case CURRENCY_INPUT_ACTIONS.ExtendSelectionLeft: {\n this.extendSelection(selection, -1);\n return;\n }\n case CURRENCY_INPUT_ACTIONS.ExtendSelectionRight: {\n this.extendSelection(selection, +1);\n return;\n }\n case CURRENCY_INPUT_ACTIONS.FullSelection: {\n this.setState({\n selection: SelectionHelper.forward(0, this.state.formatted.length),\n });\n return;\n }\n case CURRENCY_INPUT_ACTIONS.ExtendSelectionToStart: {\n this.setState({\n selection: SelectionHelper.backward(0, selection.start),\n });\n return;\n }\n case CURRENCY_INPUT_ACTIONS.ExtendSelectionToEnd: {\n const inputEnd = this.state.formatted.length;\n this.setState({\n selection: SelectionHelper.forward(selection.start, inputEnd),\n });\n return;\n }\n case CURRENCY_INPUT_ACTIONS.Comma: {\n this.inputValue(selection.start, selection.end, ',');\n return;\n }\n }\n };\n\n private scrollInput = () => {\n const node = this.input?.getNode();\n if (!node || node.scrollWidth === node.clientWidth) {\n return;\n }\n const PAD = 1;\n const SHIFT = 3;\n\n const selection = this.state.selection;\n const selected = selection.start !== selection.end;\n const position = selected && selection.direction === 'forward' ? selection.end : selection.start;\n const charsCount = this.state.formatted.length;\n const charWidth = node.scrollWidth / charsCount;\n const frame = Math.ceil(node.clientWidth / charWidth);\n const frameStart = Math.ceil(node.scrollLeft / charWidth);\n const frameEnd = frameStart + frame;\n\n if (position < frameStart + PAD) {\n node.scrollLeft = (position - SHIFT) * charWidth;\n }\n if (position > frameEnd - PAD) {\n node.scrollLeft = (position - frame + SHIFT) * charWidth;\n }\n };\n\n private getSelection = (input: EventTarget): Selection => {\n const selection = getInputSelectionFromEvent(input);\n return {\n start: selection.start,\n end: selection.end,\n direction: this.state.selection.direction,\n };\n };\n\n private moveCursor = (selection: Selection, step: number) => {\n const position = CurrencyInputHelper.moveCursor(this.state.formatted, selection, step);\n this.setState({ selection: SelectionHelper.fromPosition(position) });\n };\n\n private extendSelection = (selection: Selection, step: number) => {\n const extended = CurrencyInputHelper.extendSelection(this.state.formatted, selection, step);\n this.setState({ selection: extended });\n };\n\n private inputValue = (start: number, end: number, value: string) => {\n const result = CurrencyInputHelper.safeInsert(this.state.formatted, start, end, value, {\n integerDigits: this.props.integerDigits,\n fractionDigits: this.getProps().fractionDigits,\n unsigned: !this.props.signed,\n });\n if (result) {\n const formatted = result.value;\n const selection = SelectionHelper.fromPosition(result.position);\n this.setState({ formatted, selection }, () => {\n const parsedValue = CurrencyHelper.parse(formatted);\n if (this.props.value !== parsedValue) {\n this.props.onValueChange(parsedValue);\n }\n });\n return true;\n }\n\n if (this.input) {\n this.input.blink();\n }\n return false;\n };\n\n private getOnChangeDelta = (value: string) => {\n const selection = this.tempSelectionForOnChange;\n const oldValue = this.state.formatted;\n if (selection.start !== selection.end) {\n return value.substring(selection.start, value.length - (oldValue.length - selection.end));\n } else if (value.length > oldValue.length) {\n return value.substr(selection.start, value.length - oldValue.length);\n }\n return null;\n };\n\n private handleValueChange = (value: string): void => {\n const selection = this.tempSelectionForOnChange;\n const delta = this.getOnChangeDelta(value);\n if (isNonNullable(delta) && !this.inputValue(selection.start, selection.end, delta)) {\n this.setState({ selection });\n }\n };\n\n private handlePaste = (event: React.ClipboardEvent<HTMLInputElement>) => {\n const data = event.clipboardData.getData('text');\n const selection = this.getSelection(event.target);\n this.inputValue(selection.start, selection.end, data);\n event.preventDefault();\n };\n\n private handleCopy = (event: React.ClipboardEvent<HTMLInputElement>) => {\n const selection = this.getSelection(event.target);\n if (selection.start !== selection.end) {\n const substring = this.state.formatted.substring(selection.start, selection.end);\n const data = CurrencyHelper.formatForClipboard(substring);\n event.clipboardData.setData('text', data);\n }\n event.preventDefault();\n };\n\n private handleCut = (event: React.ClipboardEvent<HTMLInputElement>) => {\n const selection = this.getSelection(event.target);\n if (selection.start !== selection.end) {\n const substring = this.state.formatted.substring(selection.start, selection.end);\n const data = CurrencyHelper.formatForClipboard(substring);\n event.clipboardData.setData('text', data);\n this.inputValue(selection.start, selection.end, '');\n }\n event.preventDefault();\n };\n\n private handleFocus = (event: React.FocusEvent<HTMLInputElement>) => {\n const { selectionStart, selectionEnd, selectionDirection } = event.target;\n const valueLength = event.target.value.length;\n\n const selection = {\n start: selectionStart !== selectionEnd ? selectionStart || 0 : selectionStart || valueLength,\n end: selectionEnd !== selectionStart ? selectionEnd || 0 : selectionEnd || valueLength,\n direction: (selectionDirection as SelectionDirection) || 'none',\n };\n\n this.setState({\n focused: true,\n selection,\n });\n\n if (this.props.onFocus) {\n this.props.onFocus(event);\n }\n };\n\n private handleBlur = (event: React.FocusEvent<HTMLInputElement>) => {\n const value = CurrencyHelper.parse(this.state.formatted);\n\n this.setState({\n ...this.getState(value, this.getProps().fractionDigits, this.getProps().hideTrailingZeros),\n focused: false,\n });\n\n if (this.props.onBlur) {\n this.props.onBlur(event);\n }\n };\n\n private refInput = (element: Nullable<Input>) => {\n this.input = element;\n };\n}\n\nfunction getInputSelectionFromEvent(input: EventTarget): Selection {\n if (!(input instanceof HTMLInputElement)) {\n throw new Error('input is not HTMLInputElement');\n }\n\n return {\n start: input.selectionStart ?? 0,\n end: input.selectionEnd ?? 0,\n direction: input.selectionDirection as SelectionDirection,\n };\n}\n\nfunction isNumeric(value: unknown): value is number | string {\n return !isNaN(parseFloat(value as string)) && isFinite(value as number);\n}\n\nfunction isValidNumber(value: unknown): boolean {\n return !isNaN(Number(value));\n}\n\nconst getPlaceholder = (props: CurrencyInputProps) => {\n if (isNullable(props.placeholder)) {\n return CurrencyHelper.format(0, {\n fractionDigits: props.fractionDigits,\n hideTrailingZeros: props.hideTrailingZeros,\n });\n }\n\n return props.placeholder;\n};\n"]}
1
+ {"version":3,"sources":["CurrencyInput.tsx"],"names":["React","PropTypes","warning","debounce","isNonNullable","isNullable","isIE11","Input","CommonWrapper","rootNode","createPropsGetter","MAX_SAFE_DIGITS","SelectionHelper","CurrencyHelper","CurrencyInputHelper","CURRENCY_INPUT_ACTIONS","extractAction","CurrencyInputDataTids","root","CurrencyInput","getProps","defaultProps","state","getState","value","fractionDigits","hideTrailingZeros","focused","tempSelectionForOnChange","fromPosition","renderMain","props","signed","onSubmit","integerDigits","rest","align","formatted","handleBlur","handleFocus","handleMouseUp","handleKeyDown","handleValueChange","handlePaste","handleCopy","handleCut","onMouseEnter","onMouseLeave","onMouseOver","refInput","getPlaceholder","focus","input","blur","debouncedSetSelectionFromEvent","setSelectionFromEvent","event","persist","selection","getSelection","target","onKeyDown","defaultPrevented","action","Ignore","Unknown","preventDefault","Submit","Backspace","inputValue","moveCursor","end","Delete","start","MoveCursorLeft","MoveCursorRight","Home","setState","End","length","ExtendSelectionLeft","extendSelection","ExtendSelectionRight","FullSelection","forward","ExtendSelectionToStart","backward","ExtendSelectionToEnd","inputEnd","Comma","scrollInput","node","getNode","scrollWidth","clientWidth","PAD","SHIFT","selected","position","direction","charsCount","charWidth","frame","Math","ceil","frameStart","scrollLeft","frameEnd","getInputSelectionFromEvent","step","extended","result","safeInsert","unsigned","parsedValue","parse","onValueChange","blink","getOnChangeDelta","oldValue","substring","substr","delta","data","clipboardData","getData","formatForClipboard","setData","selectionStart","selectionEnd","selectionDirection","valueLength","onFocus","onBlur","element","componentDidMount","maxLength","undefined","componentDidUpdate","prevProps","prevState","isValidNumber","isNumeric","Number","setSelectionRange","render","setRootNode","format","normilized","normalizeSelection","PureComponent","__KONTUR_REACT_UI__","propTypes","oneOf","autoFocus","bool","borderless","disabled","error","number","leftIcon","placeholder","string","size","width","oneOfType","func","isRequired","inputMode","HTMLInputElement","Error","isNaN","parseFloat","isFinite"],"mappings":"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","sourcesContent":["// TODO: Enable this rule in functional components.\n/* eslint-disable @typescript-eslint/no-unused-vars */\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport warning from 'warning';\nimport debounce from 'lodash.debounce';\n\nimport { isNonNullable, isNullable } from '../../lib/utils';\nimport { isIE11 } from '../../lib/client';\nimport { Input, InputProps } from '../Input';\nimport { Nullable, Override } from '../../typings/utility-types';\nimport { CommonProps, CommonWrapper, CommonWrapperRestProps } from '../../internal/CommonWrapper';\nimport { TSetRootNode, rootNode } from '../../lib/rootNode';\nimport { createPropsGetter } from '../../lib/createPropsGetter';\n\nimport { MAX_SAFE_DIGITS } from './constants';\nimport { Selection, SelectionDirection, SelectionHelper } from './SelectionHelper';\nimport { CurrencyHelper } from './CurrencyHelper';\nimport { CurrencyInputHelper } from './CurrencyInputHelper';\nimport { CURRENCY_INPUT_ACTIONS, extractAction } from './CurrencyInputKeyboardActions';\n\nexport interface CurrencyInputProps\n extends CommonProps,\n Override<\n InputProps,\n {\n /** Значение */\n value?: Nullable<number>;\n /** Убрать лишние нули после запятой */\n hideTrailingZeros?: boolean;\n /** Кол-во цифр после запятой */\n fractionDigits?: Nullable<number>;\n /** Отрицательные значения */\n signed?: boolean;\n /**\n * Допустимое кол-во цифр целой части.\n * Если передан **0**, или `fractionDigits=15`, то и в целой части допускается только **0**.\n */\n integerDigits?: Nullable<number>;\n /** Вызывается при изменении `value` */\n onValueChange: (value: Nullable<number>) => void;\n /** onSubmit */\n onSubmit?: () => void;\n }\n > {}\n\nexport interface CurrencyInputState {\n formatted: string;\n selection: Selection;\n focused: boolean;\n}\n\nexport const CurrencyInputDataTids = {\n root: 'CurrencyInput__root',\n} as const;\n\ntype DefaultProps = Required<\n Pick<CurrencyInputProps, 'align' | 'fractionDigits' | 'hideTrailingZeros' | 'value' | 'inputMode'>\n>;\n\n/**\n * Поле для денежных сумм (и других числовых значений).\n * Принимает любые свойства `Input`.\n *\n * Максимальная длина числа - **15 цифр** (с десятичным разделителем в любом месте).\n * <br/>\n * Если `fractionDigits=15`, то в целой части допускается **0**.\n */\n@rootNode\nexport class CurrencyInput extends React.PureComponent<CurrencyInputProps, CurrencyInputState> {\n public static __KONTUR_REACT_UI__ = 'CurrencyInput';\n\n public static propTypes = {\n align: PropTypes.oneOf(['left', 'center', 'right']),\n autoFocus: PropTypes.bool,\n borderless: PropTypes.bool,\n disabled: PropTypes.bool,\n error: PropTypes.bool,\n fractionDigits: PropTypes.number,\n hideTrailingZeros: PropTypes.bool,\n leftIcon: PropTypes.element,\n placeholder: PropTypes.string,\n signed: PropTypes.bool,\n size: PropTypes.oneOf(['small', 'medium', 'large']),\n value: (props: CurrencyInputProps) => {\n warning(isValidNumber(props.value), '[CurrencyInput]: Prop `value` is not a valid number');\n },\n warning: PropTypes.bool,\n width: PropTypes.oneOfType([PropTypes.number, PropTypes.string]),\n onBlur: PropTypes.func,\n onValueChange: PropTypes.func.isRequired,\n onFocus: PropTypes.func,\n onMouseEnter: PropTypes.func,\n onMouseLeave: PropTypes.func,\n onMouseOver: PropTypes.func,\n onSubmit: PropTypes.func,\n };\n\n public static defaultProps: DefaultProps = {\n align: 'right',\n fractionDigits: 2,\n hideTrailingZeros: false,\n value: null,\n inputMode: 'decimal',\n };\n\n private getProps = createPropsGetter(CurrencyInput.defaultProps);\n\n public state: CurrencyInputState = {\n ...this.getState(this.getProps().value, this.getProps().fractionDigits, this.getProps().hideTrailingZeros),\n focused: false,\n };\n\n private input: Nullable<Input>;\n private tempSelectionForOnChange: Selection = SelectionHelper.fromPosition(0);\n private setRootNode!: TSetRootNode;\n\n public componentDidMount(): void {\n const { maxLength, integerDigits } = this.props;\n const fractionDigits = this.getProps().fractionDigits;\n warning(\n maxLength === undefined,\n `[CurrencyInput]: Prop 'maxLength' has been deprecated. See 'integerDigits' and 'fractionDigits'`,\n );\n warning(\n (integerDigits || 0) + (fractionDigits || 0) <= MAX_SAFE_DIGITS,\n `[CurrencyInput]: Sum of 'integerDigits' and 'fractionDigits' exceeds ${MAX_SAFE_DIGITS}.` +\n `\\nSee https://tech.skbkontur.ru/react-ui/#/CurrencyInput?id=why15`,\n );\n }\n\n public componentDidUpdate(prevProps: CurrencyInputProps, prevState: CurrencyInputState) {\n const { value, fractionDigits, hideTrailingZeros } = this.getProps();\n if (\n (isValidNumber(value) && isNumeric(value) && Number(value) !== CurrencyHelper.parse(prevState.formatted)) ||\n prevProps.fractionDigits !== fractionDigits\n ) {\n this.setState(this.getState(value, fractionDigits, hideTrailingZeros));\n }\n if (isNonNullable(prevProps.value) && isNullable(value)) {\n this.setState({ formatted: '' });\n }\n if (this.state.focused && this.input) {\n const { start, end } = this.state.selection;\n\n this.input.setSelectionRange(start, end);\n }\n if (prevState.selection !== this.state.selection) {\n this.scrollInput();\n }\n }\n\n public render() {\n return (\n <CommonWrapper rootNodeRef={this.setRootNode} {...this.props}>\n {this.renderMain}\n </CommonWrapper>\n );\n }\n\n public renderMain = (props: CommonWrapperRestProps<CurrencyInputProps>) => {\n const { fractionDigits, signed, onSubmit, integerDigits, hideTrailingZeros, ...rest } = props;\n\n return (\n <Input\n data-tid={CurrencyInputDataTids.root}\n {...rest}\n align={this.getProps().align}\n value={this.state.formatted}\n onBlur={this.handleBlur}\n onFocus={this.handleFocus}\n onMouseUp={this.handleMouseUp}\n onKeyDown={this.handleKeyDown}\n onValueChange={this.handleValueChange}\n onPaste={this.handlePaste}\n onCopy={this.handleCopy}\n onCut={this.handleCut}\n onMouseEnter={this.props.onMouseEnter}\n onMouseLeave={this.props.onMouseLeave}\n onMouseOver={this.props.onMouseOver}\n ref={this.refInput}\n placeholder={this.state.focused ? '' : getPlaceholder(props)}\n />\n );\n };\n\n /**\n * @public\n */\n public focus = () => {\n if (this.input) {\n this.input.focus();\n }\n };\n\n /**\n * @public\n */\n public blur = () => {\n if (this.input) {\n this.input.blur();\n }\n };\n\n private getState(value: Nullable<number>, fractionDigits: Nullable<number>, hideTrailingZeros: boolean) {\n return {\n formatted: CurrencyHelper.format(value, { fractionDigits, hideTrailingZeros }),\n selection: SelectionHelper.fromPosition(0),\n };\n }\n\n private setSelectionFromEvent(event: React.MouseEvent<HTMLInputElement>) {\n const selection = getInputSelectionFromEvent(event.target);\n const normilized = CurrencyInputHelper.normalizeSelection(this.state.formatted, selection);\n this.setState({ selection: normilized });\n }\n\n // for IE11\n private readonly debouncedSetSelectionFromEvent = debounce(this.setSelectionFromEvent, 300);\n\n private handleMouseUp = (event: React.MouseEvent<HTMLInputElement>) => {\n if (isIE11) {\n event.persist();\n this.debouncedSetSelectionFromEvent(event);\n } else {\n this.setSelectionFromEvent(event);\n }\n };\n\n private handleKeyDown = (event: React.KeyboardEvent<HTMLInputElement>) => {\n const selection = this.getSelection(event.target);\n this.tempSelectionForOnChange = selection;\n\n if (this.props.onKeyDown) {\n this.props.onKeyDown(event);\n if (event.defaultPrevented) {\n return;\n }\n }\n\n const action = extractAction(event);\n\n if (action === CURRENCY_INPUT_ACTIONS.Ignore) {\n return;\n }\n\n if (action !== CURRENCY_INPUT_ACTIONS.Unknown) {\n event.preventDefault();\n }\n\n switch (action) {\n case CURRENCY_INPUT_ACTIONS.Submit: {\n if (this.props.onSubmit) {\n this.props.onSubmit();\n }\n return;\n }\n case CURRENCY_INPUT_ACTIONS.Backspace: {\n this.inputValue(CurrencyInputHelper.moveCursor(this.state.formatted, selection, -1), selection.end, '');\n return;\n }\n case CURRENCY_INPUT_ACTIONS.Delete: {\n this.inputValue(selection.start, CurrencyInputHelper.moveCursor(this.state.formatted, selection, +1), '');\n return;\n }\n case CURRENCY_INPUT_ACTIONS.MoveCursorLeft: {\n this.moveCursor(selection, -1);\n return;\n }\n case CURRENCY_INPUT_ACTIONS.MoveCursorRight: {\n this.moveCursor(selection, +1);\n return;\n }\n case CURRENCY_INPUT_ACTIONS.Home: {\n this.setState({ selection: SelectionHelper.fromPosition(0) });\n return;\n }\n case CURRENCY_INPUT_ACTIONS.End: {\n const end = this.state.formatted.length;\n this.setState({ selection: SelectionHelper.fromPosition(end) });\n return;\n }\n case CURRENCY_INPUT_ACTIONS.ExtendSelectionLeft: {\n this.extendSelection(selection, -1);\n return;\n }\n case CURRENCY_INPUT_ACTIONS.ExtendSelectionRight: {\n this.extendSelection(selection, +1);\n return;\n }\n case CURRENCY_INPUT_ACTIONS.FullSelection: {\n this.setState({\n selection: SelectionHelper.forward(0, this.state.formatted.length),\n });\n return;\n }\n case CURRENCY_INPUT_ACTIONS.ExtendSelectionToStart: {\n this.setState({\n selection: SelectionHelper.backward(0, selection.start),\n });\n return;\n }\n case CURRENCY_INPUT_ACTIONS.ExtendSelectionToEnd: {\n const inputEnd = this.state.formatted.length;\n this.setState({\n selection: SelectionHelper.forward(selection.start, inputEnd),\n });\n return;\n }\n case CURRENCY_INPUT_ACTIONS.Comma: {\n this.inputValue(selection.start, selection.end, ',');\n return;\n }\n }\n };\n\n private scrollInput = () => {\n const node = this.input?.getNode();\n if (!node || node.scrollWidth === node.clientWidth) {\n return;\n }\n const PAD = 1;\n const SHIFT = 3;\n\n const selection = this.state.selection;\n const selected = selection.start !== selection.end;\n const position = selected && selection.direction === 'forward' ? selection.end : selection.start;\n const charsCount = this.state.formatted.length;\n const charWidth = node.scrollWidth / charsCount;\n const frame = Math.ceil(node.clientWidth / charWidth);\n const frameStart = Math.ceil(node.scrollLeft / charWidth);\n const frameEnd = frameStart + frame;\n\n if (position < frameStart + PAD) {\n node.scrollLeft = (position - SHIFT) * charWidth;\n }\n if (position > frameEnd - PAD) {\n node.scrollLeft = (position - frame + SHIFT) * charWidth;\n }\n };\n\n private getSelection = (input: EventTarget): Selection => {\n const selection = getInputSelectionFromEvent(input);\n return {\n start: selection.start,\n end: selection.end,\n direction: this.state.selection.direction,\n };\n };\n\n private moveCursor = (selection: Selection, step: number) => {\n const position = CurrencyInputHelper.moveCursor(this.state.formatted, selection, step);\n this.setState({ selection: SelectionHelper.fromPosition(position) });\n };\n\n private extendSelection = (selection: Selection, step: number) => {\n const extended = CurrencyInputHelper.extendSelection(this.state.formatted, selection, step);\n this.setState({ selection: extended });\n };\n\n private inputValue = (start: number, end: number, value: string) => {\n const result = CurrencyInputHelper.safeInsert(this.state.formatted, start, end, value, {\n integerDigits: this.props.integerDigits,\n fractionDigits: this.getProps().fractionDigits,\n unsigned: !this.props.signed,\n });\n if (result) {\n const formatted = result.value;\n const selection = SelectionHelper.fromPosition(result.position);\n this.setState({ formatted, selection }, () => {\n const parsedValue = CurrencyHelper.parse(formatted);\n if (this.props.value !== parsedValue) {\n this.props.onValueChange(parsedValue);\n }\n });\n return true;\n }\n\n if (this.input) {\n this.input.blink();\n }\n return false;\n };\n\n private getOnChangeDelta = (value: string) => {\n const selection = this.tempSelectionForOnChange;\n const oldValue = this.state.formatted;\n if (selection.start !== selection.end) {\n return value.substring(selection.start, value.length - (oldValue.length - selection.end));\n } else if (value.length > oldValue.length) {\n return value.substr(selection.start, value.length - oldValue.length);\n }\n return null;\n };\n\n private handleValueChange = (value: string): void => {\n const selection = this.tempSelectionForOnChange;\n const delta = this.getOnChangeDelta(value);\n if (isNonNullable(delta) && !this.inputValue(selection.start, selection.end, delta)) {\n this.setState({ selection });\n }\n };\n\n private handlePaste = (event: React.ClipboardEvent<HTMLInputElement>) => {\n const data = event.clipboardData.getData('text');\n const selection = this.getSelection(event.target);\n this.inputValue(selection.start, selection.end, data);\n event.preventDefault();\n };\n\n private handleCopy = (event: React.ClipboardEvent<HTMLInputElement>) => {\n const selection = this.getSelection(event.target);\n if (selection.start !== selection.end) {\n const substring = this.state.formatted.substring(selection.start, selection.end);\n const data = CurrencyHelper.formatForClipboard(substring);\n event.clipboardData.setData('text', data);\n }\n event.preventDefault();\n };\n\n private handleCut = (event: React.ClipboardEvent<HTMLInputElement>) => {\n const selection = this.getSelection(event.target);\n if (selection.start !== selection.end) {\n const substring = this.state.formatted.substring(selection.start, selection.end);\n const data = CurrencyHelper.formatForClipboard(substring);\n event.clipboardData.setData('text', data);\n this.inputValue(selection.start, selection.end, '');\n }\n event.preventDefault();\n };\n\n private handleFocus = (event: React.FocusEvent<HTMLInputElement>) => {\n const { selectionStart, selectionEnd, selectionDirection } = event.target;\n const valueLength = event.target.value.length;\n\n const selection = {\n start: selectionStart !== selectionEnd ? selectionStart || 0 : selectionStart || valueLength,\n end: selectionEnd !== selectionStart ? selectionEnd || 0 : selectionEnd || valueLength,\n direction: (selectionDirection as SelectionDirection) || 'none',\n };\n\n this.setState({\n focused: true,\n selection,\n });\n\n if (this.props.onFocus) {\n this.props.onFocus(event);\n }\n };\n\n private handleBlur = (event: React.FocusEvent<HTMLInputElement>) => {\n const value = CurrencyHelper.parse(this.state.formatted);\n\n this.setState({\n ...this.getState(value, this.getProps().fractionDigits, this.getProps().hideTrailingZeros),\n focused: false,\n });\n\n if (this.props.onBlur) {\n this.props.onBlur(event);\n }\n };\n\n private refInput = (element: Nullable<Input>) => {\n this.input = element;\n };\n}\n\nfunction getInputSelectionFromEvent(input: EventTarget): Selection {\n if (!(input instanceof HTMLInputElement)) {\n throw new Error('input is not HTMLInputElement');\n }\n\n return {\n start: input.selectionStart ?? 0,\n end: input.selectionEnd ?? 0,\n direction: input.selectionDirection as SelectionDirection,\n };\n}\n\nfunction isNumeric(value: unknown): value is number | string {\n return !isNaN(parseFloat(value as string)) && isFinite(value as number);\n}\n\nfunction isValidNumber(value: unknown): boolean {\n return !isNaN(Number(value));\n}\n\nconst getPlaceholder = (props: CurrencyInputProps) => {\n if (isNullable(props.placeholder)) {\n return CurrencyHelper.format(0, {\n fractionDigits: props.fractionDigits,\n hideTrailingZeros: props.hideTrailingZeros,\n });\n }\n\n return props.placeholder;\n};\n"]}
@@ -4,6 +4,19 @@ const [value, setValue] = React.useState();
4
4
  <CurrencyInput value={value} fractionDigits={3} onValueChange={setValue} />
5
5
  ```
6
6
 
7
+ Очистить значение в `CurrencyInput` можно с помощью `null` или `undefined`
8
+ ```jsx harmony
9
+ import { Button, Group } from '@skbkontur/react-ui';
10
+
11
+ const [value, setValue] = React.useState();
12
+
13
+ <Group>
14
+ <CurrencyInput value={value} onValueChange={setValue} />
15
+ <Button onClick={() => setValue(null)}>Null</Button>
16
+ <Button onClick={() => setValue(undefined)}>Undefined</Button>
17
+ </Group>
18
+ ```
19
+
7
20
  `fractionDigits={15}`
8
21
 
9
22
  ```jsx harmony
@@ -38,10 +38,14 @@ export var MenuItem = rootNode(_class = (_temp = _class2 = /*#__PURE__*/function
38
38
  }
39
39
 
40
40
  _this = _React$Component.call.apply(_React$Component, [this].concat(args)) || this;
41
+ _this.state = {
42
+ iconOffsetTop: 0
43
+ };
41
44
  _this.mouseEntered = false;
45
+ _this.rootRef = null;
42
46
 
43
47
  _this.renderMain = function (props) {
44
- var _cx, _cx2;
48
+ var _cx2, _cx3, _cx4;
45
49
 
46
50
  var link = props.link,
47
51
  comment = props.comment,
@@ -62,12 +66,17 @@ export var MenuItem = rootNode(_class = (_temp = _class2 = /*#__PURE__*/function
62
66
  var iconElement = null;
63
67
 
64
68
  if (icon) {
69
+ var _cx;
70
+
65
71
  iconElement = /*#__PURE__*/React.createElement("div", {
66
- className: styles.icon(_this.theme)
72
+ style: {
73
+ top: _this.state.iconOffsetTop
74
+ },
75
+ className: cx((_cx = {}, _cx[styles.icon(_this.theme)] = true, _cx))
67
76
  }, icon);
68
77
  }
69
78
 
70
- var className = cx((_cx = {}, _cx[styles.root(_this.theme)] = true, _cx[styles.rootMobile(_this.theme)] = isMobile, _cx[styles.loose()] = !!loose, _cx[styles.hover(_this.theme)] = hover, _cx[styles.selected(_this.theme)] = state === 'selected', _cx[styles.link(_this.theme)] = !!link, _cx[styles.withIcon(_this.theme)] = Boolean(iconElement) || !!_enableIconPadding, _cx[styles.disabled(_this.theme)] = !!_this.props.disabled, _cx));
79
+ var className = cx((_cx2 = {}, _cx2[styles.root(_this.theme)] = true, _cx2[styles.rootMobile(_this.theme)] = isMobile, _cx2[styles.loose()] = !!loose, _cx2[styles.hover(_this.theme)] = hover, _cx2[styles.selected(_this.theme)] = state === 'selected', _cx2[styles.link(_this.theme)] = !!link, _cx2[styles.withIcon(_this.theme)] = Boolean(iconElement) || !!_enableIconPadding, _cx2[styles.disabled(_this.theme)] = !!_this.props.disabled, _cx2));
71
80
  var children = _this.props.children;
72
81
  var content = children;
73
82
 
@@ -78,6 +87,7 @@ export var MenuItem = rootNode(_class = (_temp = _class2 = /*#__PURE__*/function
78
87
  var Component = _this.getComponent();
79
88
 
80
89
  return /*#__PURE__*/React.createElement(Component, _extends({
90
+ ref: _this.setRootRef,
81
91
  "data-tid": MenuItemDataTids.root
82
92
  }, rest, {
83
93
  state: state,
@@ -87,9 +97,11 @@ export var MenuItem = rootNode(_class = (_temp = _class2 = /*#__PURE__*/function
87
97
  href: href,
88
98
  rel: href ? rel : undefined,
89
99
  tabIndex: -1
90
- }), iconElement, content, _this.props.comment && /*#__PURE__*/React.createElement("div", {
100
+ }), iconElement, /*#__PURE__*/React.createElement("span", {
101
+ className: cx((_cx3 = {}, _cx3[styles.contentMobile()] = isMobile, _cx3))
102
+ }, content), _this.props.comment && /*#__PURE__*/React.createElement("div", {
91
103
  "data-tid": MenuItemDataTids.comment,
92
- className: cx((_cx2 = {}, _cx2[styles.comment(_this.theme)] = true, _cx2[styles.commentHover(_this.theme)] = hover, _cx2))
104
+ className: cx((_cx4 = {}, _cx4[styles.comment(_this.theme)] = true, _cx4[styles.commentHover(_this.theme)] = hover, _cx4))
93
105
  }, comment));
94
106
  };
95
107
 
@@ -109,6 +121,10 @@ export var MenuItem = rootNode(_class = (_temp = _class2 = /*#__PURE__*/function
109
121
  }
110
122
  };
111
123
 
124
+ _this.setRootRef = function (element) {
125
+ _this.rootRef = element;
126
+ };
127
+
112
128
  _this.getComponent = function () {
113
129
  var _this$props = _this.props,
114
130
  disabled = _this$props.disabled,
@@ -146,6 +162,14 @@ export var MenuItem = rootNode(_class = (_temp = _class2 = /*#__PURE__*/function
146
162
  });
147
163
  };
148
164
 
165
+ _proto.componentDidMount = function componentDidMount() {
166
+ if (this.rootRef) {
167
+ this.setState({
168
+ iconOffsetTop: window.getComputedStyle(this.rootRef).getPropertyValue('padding-top')
169
+ });
170
+ }
171
+ };
172
+
149
173
  return MenuItem;
150
174
  }(React.Component), _class2.__KONTUR_REACT_UI__ = 'MenuItem', _class2.__MENU_ITEM__ = true, _class2.propTypes = {
151
175
  comment: PropTypes.node,
@@ -1 +1 @@
1
- {"version":3,"sources":["MenuItem.tsx"],"names":["React","PropTypes","isExternalLink","isFunction","isReactUIComponent","ThemeContext","CommonWrapper","cx","rootNode","styles","MenuItemDataTids","root","comment","MenuItem","mouseEntered","renderMain","props","link","icon","loose","state","_enableIconPadding","component","onMouseEnter","onMouseLeave","isMobile","href","rel","rest","hover","disabled","iconElement","theme","className","rootMobile","selected","withIcon","Boolean","children","content","Component","getComponent","handleMouseEnterFix","handleMouseLeave","undefined","commentHover","e","render","setRootNode","__KONTUR_REACT_UI__","__MENU_ITEM__","propTypes","node","bool","string","target","onClick","func","isMenuItem"],"mappings":"4ZAAA;AACA;AACA,OAAOA,KAAP,MAAkB,OAAlB;AACA,OAAOC,SAAP,MAAsB,YAAtB;;AAEA,SAASC,cAAT,EAAyBC,UAAzB,EAAqCC,kBAArC,QAA+D,iBAA/D;AACA,SAASC,YAAT,QAA6B,gCAA7B;;AAEA,SAAsBC,aAAtB,QAAmE,8BAAnE;AACA,SAASC,EAAT,QAAmB,2BAAnB;AACA,SAASC,QAAT,QAAuC,sCAAvC;;AAEA,SAASC,MAAT,QAAuB,mBAAvB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA0EA,OAAO,IAAMC,gBAAgB,GAAG;AAC9BC,EAAAA,IAAI,EAAE,gBADwB;AAE9BC,EAAAA,OAAO,EAAE,mBAFqB,EAAzB;;;AAKP;AACA;AACA;AACA;AACA;AACA;;AAEA,WAAaC,QAAb,GADCL,QACD;;;;;;;;;;;;;;;;;;;;;;;AAuBUM,IAAAA,YAvBV,GAuByB,KAvBzB;;;;;;;;;;;;;;;;;;AAyCUC,IAAAA,UAzCV,GAyCuB,UAACC,KAAD,EAAkD;AACrE;AACEC,MAAAA,IADF;;;;;;;;;;;;;AAcID,MAAAA,KAdJ,CACEC,IADF,CAEEL,OAFF,GAcII,KAdJ,CAEEJ,OAFF,CAGEM,IAHF,GAcIF,KAdJ,CAGEE,IAHF,CAIEC,KAJF,GAcIH,KAdJ,CAIEG,KAJF,CAKEC,KALF,GAcIJ,KAdJ,CAKEI,KALF,CAMEC,kBANF,GAcIL,KAdJ,CAMEK,kBANF,CAOEC,SAPF,GAcIN,KAdJ,CAOEM,SAPF,CAQEC,YARF,GAcIP,KAdJ,CAQEO,YARF,CASEC,YATF,GAcIR,KAdJ,CASEQ,YATF,CAUEC,QAVF,GAcIT,KAdJ,CAUES,QAVF,CAWEC,IAXF,GAcIV,KAdJ,CAWEU,IAXF,cAcIV,KAdJ,CAYEW,GAZF,CAYEA,GAZF,2BAYQ,MAAKX,KAAL,CAAWU,IAAX,IAAmBxB,cAAc,CAAC,MAAKc,KAAL,CAAWU,IAAZ,CAAjC,GAAqD,qBAArD,GAA6E,MAAKV,KAAL,CAAWW,GAZhG,cAaKC,IAbL,iCAcIZ,KAdJ;;AAgBA,UAAMa,KAAK,GAAGT,KAAK,KAAK,OAAV,IAAqB,CAAC,MAAKJ,KAAL,CAAWc,QAA/C;;AAEA,UAAIC,WAAW,GAAG,IAAlB;AACA,UAAIb,IAAJ,EAAU;AACRa,QAAAA,WAAW,gBAAG,6BAAK,SAAS,EAAEtB,MAAM,CAACS,IAAP,CAAY,MAAKc,KAAjB,CAAhB,IAA0Cd,IAA1C,CAAd;AACD;;AAED,UAAMe,SAAS,GAAG1B,EAAE;AACjBE,MAAAA,MAAM,CAACE,IAAP,CAAY,MAAKqB,KAAjB,CADiB,IACS,IADT;AAEjBvB,MAAAA,MAAM,CAACyB,UAAP,CAAkB,MAAKF,KAAvB,CAFiB,IAEeP,QAFf;AAGjBhB,MAAAA,MAAM,CAACU,KAAP,EAHiB,IAGA,CAAC,CAACA,KAHF;AAIjBV,MAAAA,MAAM,CAACoB,KAAP,CAAa,MAAKG,KAAlB,CAJiB,IAIUH,KAJV;AAKjBpB,MAAAA,MAAM,CAAC0B,QAAP,CAAgB,MAAKH,KAArB,CALiB,IAKaZ,KAAK,KAAK,UALvB;AAMjBX,MAAAA,MAAM,CAACQ,IAAP,CAAY,MAAKe,KAAjB,CANiB,IAMS,CAAC,CAACf,IANX;AAOjBR,MAAAA,MAAM,CAAC2B,QAAP,CAAgB,MAAKJ,KAArB,CAPiB,IAOaK,OAAO,CAACN,WAAD,CAAP,IAAwB,CAAC,CAACV,kBAPvC;AAQjBZ,MAAAA,MAAM,CAACqB,QAAP,CAAgB,MAAKE,KAArB,CARiB,IAQa,CAAC,CAAC,MAAKhB,KAAL,CAAWc,QAR1B,OAApB;;;AAWA,UAAQQ,QAAR,GAAqB,MAAKtB,KAA1B,CAAQsB,QAAR;;AAEA,UAAIC,OAAO,GAAGD,QAAd;AACA,UAAInC,UAAU,CAACmC,QAAD,CAAd,EAA0B;AACxBC,QAAAA,OAAO,GAAGD,QAAQ,CAAC,MAAKtB,KAAL,CAAWI,KAAZ,CAAlB;AACD;;AAED,UAAMoB,SAAS,GAAG,MAAKC,YAAL,EAAlB;;AAEA;AACE,4BAAC,SAAD;AACE,sBAAU/B,gBAAgB,CAACC,IAD7B;AAEMiB,QAAAA,IAFN;AAGE,UAAA,KAAK,EAAER,KAHT;AAIE,UAAA,WAAW,EAAE,MAAKsB,mBAJpB;AAKE,UAAA,YAAY,EAAE,MAAKC,gBALrB;AAME,UAAA,SAAS,EAAEV,SANb;AAOE,UAAA,IAAI,EAAEP,IAPR;AAQE,UAAA,GAAG,EAAEA,IAAI,GAAGC,GAAH,GAASiB,SARpB;AASE,UAAA,QAAQ,EAAE,CAAC,CATb;;AAWGb,QAAAA,WAXH;AAYGQ,QAAAA,OAZH;AAaG,cAAKvB,KAAL,CAAWJ,OAAX;AACC;AACE,sBAAUF,gBAAgB,CAACE,OAD7B;AAEE,UAAA,SAAS,EAAEL,EAAE;AACVE,UAAAA,MAAM,CAACG,OAAP,CAAe,MAAKoB,KAApB,CADU,IACmB,IADnB;AAEVvB,UAAAA,MAAM,CAACoC,YAAP,CAAoB,MAAKb,KAAzB,CAFU,IAEwBH,KAFxB,QAFf;;;AAOGjB,QAAAA,OAPH,CAdJ,CADF;;;;;AA2BD,KAhHH;;;;AAoHU8B,IAAAA,mBApHV,GAoHgC,UAACI,CAAD,EAAsC;AAClE,UAAI,CAAC,MAAKhC,YAAN,IAAsB,MAAKE,KAAL,CAAWO,YAArC,EAAmD;AACjD,cAAKT,YAAL,GAAoB,IAApB;AACA,cAAKE,KAAL,CAAWO,YAAX,CAAwBuB,CAAxB;AACD;AACF,KAzHH;;AA2HUH,IAAAA,gBA3HV,GA2H6B,UAACG,CAAD,EAAsC;AAC/D,YAAKhC,YAAL,GAAoB,KAApB;AACA,UAAI,MAAKE,KAAL,CAAWQ,YAAf,EAA6B;AAC3B,cAAKR,KAAL,CAAWQ,YAAX,CAAwBsB,CAAxB;AACD;AACF,KAhIH;;AAkIUL,IAAAA,YAlIV,GAkIyB,YAAM;AAC3B,wBAAsC,MAAKzB,KAA3C,CAAQc,QAAR,eAAQA,QAAR,CAAkBR,SAAlB,eAAkBA,SAAlB,CAA6BI,IAA7B,eAA6BA,IAA7B;;AAEA,UAAII,QAAJ,EAAc;AACZ,eAAO,QAAP;AACD;;AAED,UAAIR,SAAJ,EAAe;AACb,eAAOA,SAAP;AACD;;AAED,UAAII,IAAJ,EAAU;AACR,eAAO,GAAP;AACD;;AAED,aAAO,QAAP;AACD,KAlJH,sDA0BSqB,MA1BT,GA0BE,kBAAgB,mBACd,oBACE,oBAAC,YAAD,CAAc,QAAd,QACG,UAACf,KAAD,EAAW,CACV,MAAI,CAACA,KAAL,GAAaA,KAAb,CACA,oBACE,oBAAC,aAAD,aAAe,WAAW,EAAE,MAAI,CAACgB,WAAjC,IAAkD,MAAI,CAAChC,KAAvD,GACG,MAAI,CAACD,UADR,CADF,CAKD,CARH,CADF,CAYD,CAvCH,mBAA8Bf,KAAK,CAACwC,SAApC,WACgBS,mBADhB,GACsC,UADtC,UAEgBC,aAFhB,GAEgC,IAFhC,UAIgBC,SAJhB,GAI4B,EACxBvC,OAAO,EAAEX,SAAS,CAACmD,IADK,EAGxBtB,QAAQ,EAAE7B,SAAS,CAACoD,IAHI,EAKxB3B,IAAI,EAAEzB,SAAS,CAACqD,MALQ,EAOxBpC,IAAI,EAAEjB,SAAS,CAACmD,IAPQ,EASxBjC,KAAK,EAAElB,SAAS,CAACoD,IATO,EAWxBjC,KAAK,EAAEnB,SAAS,CAACqD,MAXO,EAaxBC,MAAM,EAAEtD,SAAS,CAACqD,MAbM,EAexBE,OAAO,EAAEvD,SAAS,CAACwD,IAfK,EAJ5B;;;AAqJA,OAAO,IAAMC,UAAU,GAAGtD,kBAAkB,CAAC,UAAD,CAArC","sourcesContent":["// TODO: Enable this rule in functional components.\n/* eslint-disable @typescript-eslint/no-unused-vars */\nimport React from 'react';\nimport PropTypes from 'prop-types';\n\nimport { isExternalLink, isFunction, isReactUIComponent } from '../../lib/utils';\nimport { ThemeContext } from '../../lib/theming/ThemeContext';\nimport { Theme } from '../../lib/theming/Theme';\nimport { CommonProps, CommonWrapper, CommonWrapperRestProps } from '../../internal/CommonWrapper';\nimport { cx } from '../../lib/theming/Emotion';\nimport { rootNode, TSetRootNode } from '../../lib/rootNode/rootNodeDecorator';\n\nimport { styles } from './MenuItem.styles';\n\nexport type MenuItemState = null | 'hover' | 'selected' | void;\n\nexport interface MenuItemProps extends CommonProps {\n /**\n * @ignore\n */\n _enableIconPadding?: boolean;\n /**\n * Добавляет описание для элемента меню.\n */\n comment?: React.ReactNode;\n /**\n * Отключенное состояние.\n */\n disabled?: boolean;\n /**\n * Добавляет элементу меню иконку.\n */\n icon?: React.ReactElement<any>;\n /**\n * Меняет цвет текста на синий.\n */\n link?: boolean;\n /**\n * @ignore\n */\n loose?: boolean;\n /**\n * @ignore\n */\n state?: MenuItemState;\n /**\n * HTML-событие `onclick`.\n */\n onClick?: (event: React.SyntheticEvent<HTMLElement>) => void;\n /**\n * HTML-событие `mouseenter`.\n */\n onMouseEnter?: React.MouseEventHandler;\n /**\n * HTML-событие `mouseleave`.\n */\n onMouseLeave?: React.MouseEventHandler;\n children?: React.ReactNode | ((state: MenuItemState) => React.ReactNode);\n /**\n * HTML-атрибут `target`.\n */\n target?: React.AnchorHTMLAttributes<HTMLAnchorElement>['target'];\n /**\n * HTML-атрибут `title`.\n */\n title?: React.AnchorHTMLAttributes<HTMLAnchorElement>['title'];\n /**\n * HTML-атрибут `href`.\n */\n href?: React.AnchorHTMLAttributes<HTMLAnchorElement>['href'];\n /**\n * HTML-атрибут `rel`.\n *\n * Для внешних ссылок аттрибут rel по умолчанию равен \"noopener noreferrer\"\n */\n rel?: React.AnchorHTMLAttributes<HTMLAnchorElement>['rel'];\n /**\n * Заменяет корневой элемент, на компонент переданный в проп.\n *\n * По умолчанию корневой элемент рендерится как `button`. <br />Если передан `href`, то вместо `button` рендерится `a`.\n */\n component?: React.ComponentType<any>;\n\n isMobile?: boolean;\n}\n\nexport const MenuItemDataTids = {\n root: 'MenuItem__root',\n comment: 'MenuItem__comment',\n} as const;\n\n/**\n *\n * `MenuItem` - это вложенный компонент, задающий базовые стили для элемента меню и позволяющий навигироваться по элементам меню с помощью клавиатуры.\n *\n * Сущности в которых может быть использован `MenuItem`: [`DropdownMenu`](#/Components/DropdownMenu), [`Kebab`](#/Components/Kebab), [`TooltipMenu`](#/Components/TooltipMenu) и [`Select`](#/Components/Select).\n */\n@rootNode\nexport class MenuItem extends React.Component<MenuItemProps> {\n public static __KONTUR_REACT_UI__ = 'MenuItem';\n public static __MENU_ITEM__ = true;\n\n public static propTypes = {\n comment: PropTypes.node,\n\n disabled: PropTypes.bool,\n\n href: PropTypes.string,\n\n icon: PropTypes.node,\n\n loose: PropTypes.bool,\n\n state: PropTypes.string,\n\n target: PropTypes.string,\n\n onClick: PropTypes.func,\n };\n\n private theme!: Theme;\n private mouseEntered = false;\n private setRootNode!: TSetRootNode;\n\n public render() {\n return (\n <ThemeContext.Consumer>\n {(theme) => {\n this.theme = theme;\n return (\n <CommonWrapper rootNodeRef={this.setRootNode} {...this.props}>\n {this.renderMain}\n </CommonWrapper>\n );\n }}\n </ThemeContext.Consumer>\n );\n }\n\n private renderMain = (props: CommonWrapperRestProps<MenuItemProps>) => {\n const {\n link,\n comment,\n icon,\n loose,\n state,\n _enableIconPadding,\n component,\n onMouseEnter,\n onMouseLeave,\n isMobile,\n href,\n rel = this.props.href && isExternalLink(this.props.href) ? 'noopener noreferrer' : this.props.rel,\n ...rest\n } = props;\n\n const hover = state === 'hover' && !this.props.disabled;\n\n let iconElement = null;\n if (icon) {\n iconElement = <div className={styles.icon(this.theme)}>{icon}</div>;\n }\n\n const className = cx({\n [styles.root(this.theme)]: true,\n [styles.rootMobile(this.theme)]: isMobile,\n [styles.loose()]: !!loose,\n [styles.hover(this.theme)]: hover,\n [styles.selected(this.theme)]: state === 'selected',\n [styles.link(this.theme)]: !!link,\n [styles.withIcon(this.theme)]: Boolean(iconElement) || !!_enableIconPadding,\n [styles.disabled(this.theme)]: !!this.props.disabled,\n });\n\n const { children } = this.props;\n\n let content = children;\n if (isFunction(children)) {\n content = children(this.props.state);\n }\n\n const Component = this.getComponent();\n\n return (\n <Component\n data-tid={MenuItemDataTids.root}\n {...rest}\n state={state}\n onMouseOver={this.handleMouseEnterFix}\n onMouseLeave={this.handleMouseLeave}\n className={className}\n href={href}\n rel={href ? rel : undefined}\n tabIndex={-1}\n >\n {iconElement}\n {content}\n {this.props.comment && (\n <div\n data-tid={MenuItemDataTids.comment}\n className={cx({\n [styles.comment(this.theme)]: true,\n [styles.commentHover(this.theme)]: hover,\n })}\n >\n {comment}\n </div>\n )}\n </Component>\n );\n };\n\n // https://github.com/facebook/react/issues/10109\n // Mouseenter event not triggered when cursor moves from disabled button\n private handleMouseEnterFix = (e: React.MouseEvent<HTMLElement>) => {\n if (!this.mouseEntered && this.props.onMouseEnter) {\n this.mouseEntered = true;\n this.props.onMouseEnter(e);\n }\n };\n\n private handleMouseLeave = (e: React.MouseEvent<HTMLElement>) => {\n this.mouseEntered = false;\n if (this.props.onMouseLeave) {\n this.props.onMouseLeave(e);\n }\n };\n\n private getComponent = () => {\n const { disabled, component, href } = this.props;\n\n if (disabled) {\n return 'button';\n }\n\n if (component) {\n return component;\n }\n\n if (href) {\n return 'a';\n }\n\n return 'button';\n };\n}\n\nexport const isMenuItem = isReactUIComponent('MenuItem');\n"]}
1
+ {"version":3,"sources":["MenuItem.tsx"],"names":["React","PropTypes","isExternalLink","isFunction","isReactUIComponent","ThemeContext","CommonWrapper","cx","rootNode","styles","MenuItemDataTids","root","comment","MenuItem","state","iconOffsetTop","mouseEntered","rootRef","renderMain","props","link","icon","loose","_enableIconPadding","component","onMouseEnter","onMouseLeave","isMobile","href","rel","rest","hover","disabled","iconElement","top","theme","className","rootMobile","selected","withIcon","Boolean","children","content","Component","getComponent","setRootRef","handleMouseEnterFix","handleMouseLeave","undefined","contentMobile","commentHover","e","element","render","setRootNode","componentDidMount","setState","window","getComputedStyle","getPropertyValue","__KONTUR_REACT_UI__","__MENU_ITEM__","propTypes","node","bool","string","target","onClick","func","isMenuItem"],"mappings":"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","sourcesContent":["// TODO: Enable this rule in functional components.\n/* eslint-disable @typescript-eslint/no-unused-vars */\nimport React from 'react';\nimport PropTypes from 'prop-types';\n\nimport { Nullable } from '../../typings/utility-types';\nimport { isExternalLink, isFunction, isReactUIComponent } from '../../lib/utils';\nimport { ThemeContext } from '../../lib/theming/ThemeContext';\nimport { Theme } from '../../lib/theming/Theme';\nimport { CommonProps, CommonWrapper, CommonWrapperRestProps } from '../../internal/CommonWrapper';\nimport { cx } from '../../lib/theming/Emotion';\nimport { rootNode, TSetRootNode } from '../../lib/rootNode/rootNodeDecorator';\n\nimport { styles } from './MenuItem.styles';\n\nexport type MenuItemState = null | 'hover' | 'selected' | void;\n\nexport interface MenuItemProps extends CommonProps {\n /**\n * @ignore\n */\n _enableIconPadding?: boolean;\n /**\n * Добавляет описание для элемента меню.\n */\n comment?: React.ReactNode;\n /**\n * Отключенное состояние.\n */\n disabled?: boolean;\n /**\n * Добавляет элементу меню иконку.\n */\n icon?: React.ReactElement<any>;\n /**\n * Меняет цвет текста на синий.\n */\n link?: boolean;\n /**\n * @ignore\n */\n loose?: boolean;\n /**\n * @ignore\n */\n state?: MenuItemState;\n /**\n * HTML-событие `onclick`.\n */\n onClick?: (event: React.SyntheticEvent<HTMLElement>) => void;\n /**\n * HTML-событие `mouseenter`.\n */\n onMouseEnter?: React.MouseEventHandler;\n /**\n * HTML-событие `mouseleave`.\n */\n onMouseLeave?: React.MouseEventHandler;\n children?: React.ReactNode | ((state: MenuItemState) => React.ReactNode);\n /**\n * HTML-атрибут `target`.\n */\n target?: React.AnchorHTMLAttributes<HTMLAnchorElement>['target'];\n /**\n * HTML-атрибут `title`.\n */\n title?: React.AnchorHTMLAttributes<HTMLAnchorElement>['title'];\n /**\n * HTML-атрибут `href`.\n */\n href?: React.AnchorHTMLAttributes<HTMLAnchorElement>['href'];\n /**\n * HTML-атрибут `rel`.\n *\n * Для внешних ссылок аттрибут rel по умолчанию равен \"noopener noreferrer\"\n */\n rel?: React.AnchorHTMLAttributes<HTMLAnchorElement>['rel'];\n /**\n * Заменяет корневой элемент, на компонент переданный в проп.\n *\n * По умолчанию корневой элемент рендерится как `button`. <br />Если передан `href`, то вместо `button` рендерится `a`.\n */\n component?: React.ComponentType<any>;\n\n isMobile?: boolean;\n}\n\nexport const MenuItemDataTids = {\n root: 'MenuItem__root',\n comment: 'MenuItem__comment',\n} as const;\n\n/**\n *\n * `MenuItem` - это вложенный компонент, задающий базовые стили для элемента меню и позволяющий навигироваться по элементам меню с помощью клавиатуры.\n *\n * Сущности в которых может быть использован `MenuItem`: [`DropdownMenu`](#/Components/DropdownMenu), [`Kebab`](#/Components/Kebab), [`TooltipMenu`](#/Components/TooltipMenu) и [`Select`](#/Components/Select).\n */\n@rootNode\nexport class MenuItem extends React.Component<MenuItemProps> {\n public static __KONTUR_REACT_UI__ = 'MenuItem';\n public static __MENU_ITEM__ = true;\n\n public static propTypes = {\n comment: PropTypes.node,\n\n disabled: PropTypes.bool,\n\n href: PropTypes.string,\n\n icon: PropTypes.node,\n\n loose: PropTypes.bool,\n\n state: PropTypes.string,\n\n target: PropTypes.string,\n\n onClick: PropTypes.func,\n };\n\n public state = {\n iconOffsetTop: 0,\n };\n\n private theme!: Theme;\n private mouseEntered = false;\n private setRootNode!: TSetRootNode;\n private rootRef: Nullable<HTMLElement> = null;\n\n public render() {\n return (\n <ThemeContext.Consumer>\n {(theme) => {\n this.theme = theme;\n return (\n <CommonWrapper rootNodeRef={this.setRootNode} {...this.props}>\n {this.renderMain}\n </CommonWrapper>\n );\n }}\n </ThemeContext.Consumer>\n );\n }\n\n public componentDidMount() {\n if (this.rootRef) {\n this.setState({ iconOffsetTop: window.getComputedStyle(this.rootRef).getPropertyValue('padding-top') });\n }\n }\n\n private renderMain = (props: CommonWrapperRestProps<MenuItemProps>) => {\n const {\n link,\n comment,\n icon,\n loose,\n state,\n _enableIconPadding,\n component,\n onMouseEnter,\n onMouseLeave,\n isMobile,\n href,\n rel = this.props.href && isExternalLink(this.props.href) ? 'noopener noreferrer' : this.props.rel,\n ...rest\n } = props;\n\n const hover = state === 'hover' && !this.props.disabled;\n\n let iconElement = null;\n if (icon) {\n iconElement = (\n <div style={{ top: this.state.iconOffsetTop }} className={cx({ [styles.icon(this.theme)]: true })}>\n {icon}\n </div>\n );\n }\n\n const className = cx({\n [styles.root(this.theme)]: true,\n [styles.rootMobile(this.theme)]: isMobile,\n [styles.loose()]: !!loose,\n [styles.hover(this.theme)]: hover,\n [styles.selected(this.theme)]: state === 'selected',\n [styles.link(this.theme)]: !!link,\n [styles.withIcon(this.theme)]: Boolean(iconElement) || !!_enableIconPadding,\n [styles.disabled(this.theme)]: !!this.props.disabled,\n });\n\n const { children } = this.props;\n\n let content = children;\n if (isFunction(children)) {\n content = children(this.props.state);\n }\n\n const Component = this.getComponent();\n\n return (\n <Component\n ref={this.setRootRef}\n data-tid={MenuItemDataTids.root}\n {...rest}\n state={state}\n onMouseOver={this.handleMouseEnterFix}\n onMouseLeave={this.handleMouseLeave}\n className={className}\n href={href}\n rel={href ? rel : undefined}\n tabIndex={-1}\n >\n {iconElement}\n <span\n className={cx({\n [styles.contentMobile()]: isMobile,\n })}\n >\n {content}\n </span>\n {this.props.comment && (\n <div\n data-tid={MenuItemDataTids.comment}\n className={cx({\n [styles.comment(this.theme)]: true,\n [styles.commentHover(this.theme)]: hover,\n })}\n >\n {comment}\n </div>\n )}\n </Component>\n );\n };\n\n // https://github.com/facebook/react/issues/10109\n // Mouseenter event not triggered when cursor moves from disabled button\n private handleMouseEnterFix = (e: React.MouseEvent<HTMLElement>) => {\n if (!this.mouseEntered && this.props.onMouseEnter) {\n this.mouseEntered = true;\n this.props.onMouseEnter(e);\n }\n };\n\n private handleMouseLeave = (e: React.MouseEvent<HTMLElement>) => {\n this.mouseEntered = false;\n if (this.props.onMouseLeave) {\n this.props.onMouseLeave(e);\n }\n };\n\n private setRootRef = (element: HTMLElement) => {\n this.rootRef = element;\n };\n\n private getComponent = () => {\n const { disabled, component, href } = this.props;\n\n if (disabled) {\n return 'button';\n }\n\n if (component) {\n return component;\n }\n\n if (href) {\n return 'a';\n }\n\n return 'button';\n };\n}\n\nexport const isMenuItem = isReactUIComponent('MenuItem');\n"]}
@@ -93,13 +93,19 @@ export declare class MenuItem extends React.Component<MenuItemProps> {
93
93
  target: PropTypes.Requireable<string>;
94
94
  onClick: PropTypes.Requireable<(...args: any[]) => any>;
95
95
  };
96
+ state: {
97
+ iconOffsetTop: number;
98
+ };
96
99
  private theme;
97
100
  private mouseEntered;
98
101
  private setRootNode;
102
+ private rootRef;
99
103
  render(): JSX.Element;
104
+ componentDidMount(): void;
100
105
  private renderMain;
101
106
  private handleMouseEnterFix;
102
107
  private handleMouseLeave;
108
+ private setRootRef;
103
109
  private getComponent;
104
110
  }
105
111
  export declare const isMenuItem: (child: React.ReactNode) => child is React.ReactElement<any, string | React.JSXElementConstructor<any>>;
@@ -1,6 +1,6 @@
1
1
  import _taggedTemplateLiteralLoose from "@babel/runtime/helpers/esm/taggedTemplateLiteralLoose";
2
2
 
3
- var _templateObject, _templateObject2, _templateObject3, _templateObject4, _templateObject5, _templateObject6, _templateObject7, _templateObject8, _templateObject9, _templateObject10, _templateObject11;
3
+ var _templateObject, _templateObject2, _templateObject3, _templateObject4, _templateObject5, _templateObject6, _templateObject7, _templateObject8, _templateObject9, _templateObject10, _templateObject11, _templateObject12;
4
4
 
5
5
  import { css, memoizeStyle } from "../../../lib/theming/Emotion";
6
6
  import { resetButton } from "../../../lib/styles/Mixins";
@@ -41,6 +41,9 @@ export var styles = memoizeStyle({
41
41
  return css(_templateObject10 || (_templateObject10 = _taggedTemplateLiteralLoose(["\n color: ", ";\n opacity: 0.6;\n "])), t.menuItemCommentColorHover);
42
42
  },
43
43
  icon: function icon(t) {
44
- return css(_templateObject11 || (_templateObject11 = _taggedTemplateLiteralLoose(["\n width: ", ";\n display: inline-block;\n position: absolute;\n left: ", "px;\n top: ", ";\n transform: translateY(", ");\n "])), t.menuItemIconWidth, parseInt(t.menuItemPaddingX) + parseInt(t.menuItemIconLegacyMargin), t.menuItemPaddingY, t.menuItemIconLegacyShift);
44
+ return css(_templateObject11 || (_templateObject11 = _taggedTemplateLiteralLoose(["\n width: ", ";\n display: inline-block;\n position: absolute;\n left: ", "px;\n transform: translateY(", ");\n "])), t.menuItemIconWidth, parseInt(t.menuItemPaddingX) + parseInt(t.menuItemIconLegacyMargin), t.menuItemIconLegacyShift);
45
+ },
46
+ contentMobile: function contentMobile() {
47
+ return css(_templateObject12 || (_templateObject12 = _taggedTemplateLiteralLoose(["\n margin-left: 8px;\n "])));
45
48
  }
46
49
  });
@@ -1 +1 @@
1
- {"version":3,"sources":["MenuItem.styles.ts"],"names":["css","memoizeStyle","resetButton","styles","root","t","legacyPaddingX","parseFloat","menuItemLegacyPaddingX","legacyPaddingY","menuItemLegacyPaddingY","paddingX","menuItemPaddingX","paddingY","menuItemPaddingY","menuItemLineHeight","menuItemFontSize","menuItemTextColor","menuItemBorderRadius","rootMobile","fontSizeMobile","lineHeightMobile","menuItemPaddingMobile","hover","menuItemHoverBg","menuItemHoverColor","selected","menuItemSelectedBg","disabled","menuItemDisabledColor","link","menuItemLinkColor","loose","withIcon","menuItemPaddingForIcon","comment","menuItemCommentColor","commentHover","menuItemCommentColorHover","icon","menuItemIconWidth","parseInt","menuItemIconLegacyMargin","menuItemIconLegacyShift"],"mappings":"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","sourcesContent":["import { Theme } from '../../lib/theming/Theme';\nimport { css, memoizeStyle } from '../../lib/theming/Emotion';\nimport { resetButton } from '../../lib/styles/Mixins';\n\nexport const styles = memoizeStyle({\n root(t: Theme) {\n const legacyPaddingX = parseFloat(t.menuItemLegacyPaddingX);\n const legacyPaddingY = parseFloat(t.menuItemLegacyPaddingY);\n\n const paddingX = legacyPaddingX !== 0 ? `${parseFloat(t.menuItemPaddingX) + legacyPaddingX}px` : t.menuItemPaddingX;\n const paddingY = legacyPaddingY !== 0 ? `${parseFloat(t.menuItemPaddingY) + legacyPaddingY}px` : t.menuItemPaddingY;\n\n return css`\n ${resetButton()};\n\n cursor: pointer;\n display: block;\n line-height: ${t.menuItemLineHeight};\n font-size: ${t.menuItemFontSize};\n padding: ${t.menuItemPaddingY} ${paddingX} ${paddingY} ${t.menuItemPaddingX};\n position: relative;\n text-decoration: none;\n color: ${t.menuItemTextColor};\n border-radius: ${t.menuItemBorderRadius};\n\n button& {\n min-width: 100%;\n }\n `;\n },\n\n rootMobile(t: Theme) {\n return css`\n font-size: ${t.fontSizeMobile};\n line-height: ${t.lineHeightMobile};\n padding: ${t.menuItemPaddingMobile};\n `;\n },\n\n hover(t: Theme) {\n // Color with !important in purpose to override `a:hover`\n return css`\n background: ${t.menuItemHoverBg} !important;\n color: ${t.menuItemHoverColor} !important;\n `;\n },\n selected(t: Theme) {\n return css`\n background: ${t.menuItemSelectedBg} !important;\n `;\n },\n disabled(t: Theme) {\n return css`\n background: transparent;\n color: ${t.menuItemDisabledColor};\n cursor: default;\n `;\n },\n link(t: Theme) {\n return css`\n color: ${t.menuItemLinkColor};\n `;\n },\n loose() {\n return css`\n padding-left: 15px;\n `;\n },\n withIcon(t: Theme) {\n return css`\n padding-left: ${t.menuItemPaddingForIcon};\n `;\n },\n comment(t: Theme) {\n return css`\n color: ${t.menuItemCommentColor};\n white-space: normal;\n `;\n },\n commentHover(t: Theme) {\n return css`\n color: ${t.menuItemCommentColorHover};\n opacity: 0.6;\n `;\n },\n icon(t: Theme) {\n return css`\n width: ${t.menuItemIconWidth};\n display: inline-block;\n position: absolute;\n left: ${parseInt(t.menuItemPaddingX) + parseInt(t.menuItemIconLegacyMargin)}px;\n top: ${t.menuItemPaddingY};\n transform: translateY(${t.menuItemIconLegacyShift});\n `;\n },\n});\n"]}
1
+ {"version":3,"sources":["MenuItem.styles.ts"],"names":["css","memoizeStyle","resetButton","styles","root","t","legacyPaddingX","parseFloat","menuItemLegacyPaddingX","legacyPaddingY","menuItemLegacyPaddingY","paddingX","menuItemPaddingX","paddingY","menuItemPaddingY","menuItemLineHeight","menuItemFontSize","menuItemTextColor","menuItemBorderRadius","rootMobile","fontSizeMobile","lineHeightMobile","menuItemPaddingMobile","hover","menuItemHoverBg","menuItemHoverColor","selected","menuItemSelectedBg","disabled","menuItemDisabledColor","link","menuItemLinkColor","loose","withIcon","menuItemPaddingForIcon","comment","menuItemCommentColor","commentHover","menuItemCommentColorHover","icon","menuItemIconWidth","parseInt","menuItemIconLegacyMargin","menuItemIconLegacyShift","contentMobile"],"mappings":"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","sourcesContent":["import { Theme } from '../../lib/theming/Theme';\nimport { css, memoizeStyle } from '../../lib/theming/Emotion';\nimport { resetButton } from '../../lib/styles/Mixins';\n\nexport const styles = memoizeStyle({\n root(t: Theme) {\n const legacyPaddingX = parseFloat(t.menuItemLegacyPaddingX);\n const legacyPaddingY = parseFloat(t.menuItemLegacyPaddingY);\n\n const paddingX = legacyPaddingX !== 0 ? `${parseFloat(t.menuItemPaddingX) + legacyPaddingX}px` : t.menuItemPaddingX;\n const paddingY = legacyPaddingY !== 0 ? `${parseFloat(t.menuItemPaddingY) + legacyPaddingY}px` : t.menuItemPaddingY;\n\n return css`\n ${resetButton()};\n\n cursor: pointer;\n display: block;\n line-height: ${t.menuItemLineHeight};\n font-size: ${t.menuItemFontSize};\n padding: ${t.menuItemPaddingY} ${paddingX} ${paddingY} ${t.menuItemPaddingX};\n position: relative;\n text-decoration: none;\n color: ${t.menuItemTextColor};\n border-radius: ${t.menuItemBorderRadius};\n\n button& {\n min-width: 100%;\n }\n `;\n },\n\n rootMobile(t: Theme) {\n return css`\n font-size: ${t.fontSizeMobile};\n line-height: ${t.lineHeightMobile};\n padding: ${t.menuItemPaddingMobile};\n `;\n },\n\n hover(t: Theme) {\n // Color with !important in purpose to override `a:hover`\n return css`\n background: ${t.menuItemHoverBg} !important;\n color: ${t.menuItemHoverColor} !important;\n `;\n },\n selected(t: Theme) {\n return css`\n background: ${t.menuItemSelectedBg} !important;\n `;\n },\n disabled(t: Theme) {\n return css`\n background: transparent;\n color: ${t.menuItemDisabledColor};\n cursor: default;\n `;\n },\n link(t: Theme) {\n return css`\n color: ${t.menuItemLinkColor};\n `;\n },\n loose() {\n return css`\n padding-left: 15px;\n `;\n },\n withIcon(t: Theme) {\n return css`\n padding-left: ${t.menuItemPaddingForIcon};\n `;\n },\n comment(t: Theme) {\n return css`\n color: ${t.menuItemCommentColor};\n white-space: normal;\n `;\n },\n commentHover(t: Theme) {\n return css`\n color: ${t.menuItemCommentColorHover};\n opacity: 0.6;\n `;\n },\n icon(t: Theme) {\n return css`\n width: ${t.menuItemIconWidth};\n display: inline-block;\n position: absolute;\n left: ${parseInt(t.menuItemPaddingX) + parseInt(t.menuItemIconLegacyMargin)}px;\n transform: translateY(${t.menuItemIconLegacyShift});\n `;\n },\n contentMobile() {\n return css`\n margin-left: 8px;\n `;\n },\n});\n"]}
@@ -11,4 +11,5 @@ export declare const styles: {
11
11
  comment(t: Theme): string;
12
12
  commentHover(t: Theme): string;
13
13
  icon(t: Theme): string;
14
+ contentMobile(): string;
14
15
  };
@@ -128,9 +128,10 @@ export var Switcher = rootNode(_class = (_temp = _class2 = /*#__PURE__*/function
128
128
  return _this.props.items.map(function (item, i) {
129
129
  var _this$_extractPropsFr3 = _this._extractPropsFromItem(item),
130
130
  label = _this$_extractPropsFr3.label,
131
- value = _this$_extractPropsFr3.value;
131
+ value = _this$_extractPropsFr3.value,
132
+ customButtonProps = _this$_extractPropsFr3.buttonProps;
132
133
 
133
- var buttonProps = {
134
+ var commonButtonProps = {
134
135
  checked: _this.props.value === value,
135
136
  visuallyFocused: _this.state.focusedIndex === i,
136
137
  onClick: function onClick() {
@@ -142,7 +143,7 @@ export var Switcher = rootNode(_class = (_temp = _class2 = /*#__PURE__*/function
142
143
  };
143
144
  return /*#__PURE__*/React.createElement(Button, _extends({
144
145
  key: value
145
- }, buttonProps), label);
146
+ }, commonButtonProps, customButtonProps), label);
146
147
  });
147
148
  };
148
149
 
@@ -1 +1 @@
1
- {"version":3,"sources":["Switcher.tsx"],"names":["React","PropTypes","isKeyArrowHorizontal","isKeyArrowLeft","isKeyEnter","Group","Button","ThemeContext","CommonWrapper","cx","rootNode","styles","getSwitcherTheme","SwitcherDataTids","root","Switcher","state","focusedIndex","selectItem","value","props","onValueChange","_extractPropsFromItem","item","label","_extractValuesFromItems","items","map","move","step","selectedIndex","length","_focus","index","setState","handleKey","e","preventDefault","_handleFocus","currentIndex","indexOf","_handleBlur","_renderItems","i","buttonProps","checked","visuallyFocused","onClick","disableFocus","size","disabled","getLabelSizeClassName","captionLarge","theme","captionMedium","captionSmall","render","renderMain","listClassName","error","inputProps","type","onKeyDown","onFocus","onBlur","className","input","captionClassName","caption","setRootNode","wrap","Component","__KONTUR_REACT_UI__","propTypes","bool","oneOfType","arrayOf","string","shape","isRequired","func"],"mappings":"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","sourcesContent":["import React from 'react';\nimport PropTypes from 'prop-types';\n\nimport { isKeyArrowHorizontal, isKeyArrowLeft, isKeyEnter } from '../../lib/events/keyboard/identifiers';\nimport { Group } from '../Group';\nimport { Button, ButtonSize } from '../Button';\nimport { Nullable } from '../../typings/utility-types';\nimport { ThemeContext } from '../../lib/theming/ThemeContext';\nimport { Theme } from '../../lib/theming/Theme';\nimport { CommonProps, CommonWrapper } from '../../internal/CommonWrapper';\nimport { cx } from '../../lib/theming/Emotion';\nimport { rootNode, TSetRootNode } from '../../lib/rootNode';\n\nimport { styles } from './Switcher.styles';\nimport { getSwitcherTheme } from './switcherTheme';\n\nexport type SwitcherSize = ButtonSize;\ntype SwitcherItems = string | SwitcherItem;\n\nexport const SwitcherDataTids = {\n root: 'Switcher__root',\n} as const;\n\nexport interface SwitcherProps extends CommonProps {\n /**\n * Список строк или список элементов типа `{ label: string, value: string }`\n */\n items: SwitcherItems[];\n\n value?: string;\n\n onValueChange?: (value: string) => void;\n\n caption?: string;\n\n error?: boolean;\n\n /** Размер */\n size?: SwitcherSize;\n\n disabled?: boolean;\n}\n\nexport interface SwitcherState {\n focusedIndex: Nullable<number>;\n}\n\ninterface SwitcherItem {\n label: string;\n value: string;\n}\n\n@rootNode\nexport class Switcher extends React.Component<SwitcherProps, SwitcherState> {\n public static __KONTUR_REACT_UI__ = 'Switcher';\n\n public static propTypes = {\n error: PropTypes.bool,\n disabled: PropTypes.bool,\n items: PropTypes.oneOfType([\n PropTypes.arrayOf(PropTypes.string),\n PropTypes.arrayOf(\n PropTypes.shape({\n label: PropTypes.string,\n value: PropTypes.string,\n }),\n ),\n ]).isRequired,\n caption: PropTypes.string,\n value: PropTypes.string,\n onValueChange: PropTypes.func,\n };\n\n public state: SwitcherState = {\n focusedIndex: null,\n };\n\n private theme!: Theme;\n private setRootNode!: TSetRootNode;\n\n public render() {\n return (\n <ThemeContext.Consumer>\n {(theme) => {\n this.theme = getSwitcherTheme(theme);\n return <ThemeContext.Provider value={this.theme}>{this.renderMain()}</ThemeContext.Provider>;\n }}\n </ThemeContext.Consumer>\n );\n }\n\n private renderMain() {\n const listClassName = cx({\n [styles.error(this.theme)]: !!this.props.error,\n });\n\n const inputProps = {\n type: 'checkbox',\n onKeyDown: this.handleKey,\n onFocus: this._handleFocus,\n onBlur: this._handleBlur,\n className: styles.input(),\n };\n\n const captionClassName = cx(styles.caption(this.theme), this.getLabelSizeClassName());\n\n return (\n <CommonWrapper rootNodeRef={this.setRootNode} {...this.props}>\n <div data-tid={SwitcherDataTids.root} className={styles.root()}>\n {this.props.caption ? <div className={captionClassName}>{this.props.caption}</div> : null}\n <div className={styles.wrap()}>\n <input {...inputProps} />\n <div className={listClassName}>\n <Group>{this._renderItems()}</Group>\n </div>\n </div>\n </div>\n </CommonWrapper>\n );\n }\n\n private selectItem = (value: string) => {\n if (this.props.onValueChange) {\n this.props.onValueChange(value);\n }\n };\n\n private _extractPropsFromItem = (item: string | SwitcherItem): SwitcherItem => {\n return typeof item === 'object' ? item : { label: item, value: item };\n };\n\n private _extractValuesFromItems = (): string[] => {\n return this.props.items.map((item) => {\n const { value } = this._extractPropsFromItem(item);\n return value;\n });\n };\n\n private move = (step: number) => {\n let selectedIndex = this.state.focusedIndex;\n\n if (typeof selectedIndex !== 'number') {\n return;\n }\n\n const items = this._extractValuesFromItems();\n\n selectedIndex += step;\n\n if (selectedIndex < 0) {\n selectedIndex = items.length - 1;\n } else if (selectedIndex >= items.length) {\n selectedIndex = 0;\n }\n\n this._focus(selectedIndex);\n };\n\n private _focus = (index: number) => {\n this.setState({ focusedIndex: index });\n };\n\n private handleKey = (e: React.KeyboardEvent<HTMLInputElement>) => {\n const focusedIndex = this.state.focusedIndex;\n if (typeof focusedIndex !== 'number') {\n return;\n }\n\n if (isKeyEnter(e)) {\n if (this.props.onValueChange) {\n const { value } = this._extractPropsFromItem(this.props.items[focusedIndex]);\n this.selectItem(value);\n }\n return;\n }\n\n if (isKeyArrowHorizontal(e)) {\n e.preventDefault();\n this.move(isKeyArrowLeft(e) ? -1 : 1);\n }\n };\n\n private _handleFocus = () => {\n const { value } = this.props;\n\n const items = this._extractValuesFromItems();\n const currentIndex = [...items].indexOf(value as string);\n const index = currentIndex > -1 ? currentIndex : 0;\n\n this.setState({ focusedIndex: index });\n };\n\n private _handleBlur = () => {\n this.setState({ focusedIndex: null });\n };\n\n private _renderItems = () => {\n return this.props.items.map((item, i) => {\n const { label, value } = this._extractPropsFromItem(item);\n const buttonProps = {\n checked: this.props.value === value,\n visuallyFocused: this.state.focusedIndex === i,\n onClick: () => {\n this.selectItem(value);\n },\n disableFocus: true,\n size: this.props.size,\n disabled: this.props.disabled,\n };\n return (\n <Button key={value} {...buttonProps}>\n {label}\n </Button>\n );\n });\n };\n\n private getLabelSizeClassName = (): string => {\n switch (this.props.size) {\n case 'large':\n return styles.captionLarge(this.theme);\n case 'medium':\n return styles.captionMedium(this.theme);\n case 'small':\n default:\n return styles.captionSmall(this.theme);\n }\n };\n}\n"]}
1
+ {"version":3,"sources":["Switcher.tsx"],"names":["React","PropTypes","isKeyArrowHorizontal","isKeyArrowLeft","isKeyEnter","Group","Button","ThemeContext","CommonWrapper","cx","rootNode","styles","getSwitcherTheme","SwitcherDataTids","root","Switcher","state","focusedIndex","selectItem","value","props","onValueChange","_extractPropsFromItem","item","label","_extractValuesFromItems","items","map","move","step","selectedIndex","length","_focus","index","setState","handleKey","e","preventDefault","_handleFocus","currentIndex","indexOf","_handleBlur","_renderItems","i","customButtonProps","buttonProps","commonButtonProps","checked","visuallyFocused","onClick","disableFocus","size","disabled","getLabelSizeClassName","captionLarge","theme","captionMedium","captionSmall","render","renderMain","listClassName","error","inputProps","type","onKeyDown","onFocus","onBlur","className","input","captionClassName","caption","setRootNode","wrap","Component","__KONTUR_REACT_UI__","propTypes","bool","oneOfType","arrayOf","string","shape","isRequired","func"],"mappings":"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","sourcesContent":["import React from 'react';\nimport PropTypes from 'prop-types';\n\nimport { isKeyArrowHorizontal, isKeyArrowLeft, isKeyEnter } from '../../lib/events/keyboard/identifiers';\nimport { Group } from '../Group';\nimport { Button, ButtonProps, ButtonSize } from '../Button';\nimport { Nullable } from '../../typings/utility-types';\nimport { ThemeContext } from '../../lib/theming/ThemeContext';\nimport { Theme } from '../../lib/theming/Theme';\nimport { CommonProps, CommonWrapper } from '../../internal/CommonWrapper';\nimport { cx } from '../../lib/theming/Emotion';\nimport { rootNode, TSetRootNode } from '../../lib/rootNode';\n\nimport { styles } from './Switcher.styles';\nimport { getSwitcherTheme } from './switcherTheme';\n\nexport type SwitcherSize = ButtonSize;\ntype SwitcherItems = string | SwitcherItem;\n\nexport const SwitcherDataTids = {\n root: 'Switcher__root',\n} as const;\n\nexport interface SwitcherProps extends CommonProps {\n /**\n * Список строк или список элементов типа `{ label: string, value: string, buttonProps?: Partial<ButtonProps> }`\n */\n items: SwitcherItems[];\n\n value?: string;\n\n onValueChange?: (value: string) => void;\n\n caption?: string;\n\n error?: boolean;\n\n /** Размер */\n size?: SwitcherSize;\n\n disabled?: boolean;\n}\n\nexport interface SwitcherState {\n focusedIndex: Nullable<number>;\n}\n\ninterface SwitcherItem {\n label: string;\n value: string;\n buttonProps?: Partial<ButtonProps>;\n}\n\n@rootNode\nexport class Switcher extends React.Component<SwitcherProps, SwitcherState> {\n public static __KONTUR_REACT_UI__ = 'Switcher';\n\n public static propTypes = {\n error: PropTypes.bool,\n disabled: PropTypes.bool,\n items: PropTypes.oneOfType([\n PropTypes.arrayOf(PropTypes.string),\n PropTypes.arrayOf(\n PropTypes.shape({\n label: PropTypes.string,\n value: PropTypes.string,\n }),\n ),\n ]).isRequired,\n caption: PropTypes.string,\n value: PropTypes.string,\n onValueChange: PropTypes.func,\n };\n\n public state: SwitcherState = {\n focusedIndex: null,\n };\n\n private theme!: Theme;\n private setRootNode!: TSetRootNode;\n\n public render() {\n return (\n <ThemeContext.Consumer>\n {(theme) => {\n this.theme = getSwitcherTheme(theme);\n return <ThemeContext.Provider value={this.theme}>{this.renderMain()}</ThemeContext.Provider>;\n }}\n </ThemeContext.Consumer>\n );\n }\n\n private renderMain() {\n const listClassName = cx({\n [styles.error(this.theme)]: !!this.props.error,\n });\n\n const inputProps = {\n type: 'checkbox',\n onKeyDown: this.handleKey,\n onFocus: this._handleFocus,\n onBlur: this._handleBlur,\n className: styles.input(),\n };\n\n const captionClassName = cx(styles.caption(this.theme), this.getLabelSizeClassName());\n\n return (\n <CommonWrapper rootNodeRef={this.setRootNode} {...this.props}>\n <div data-tid={SwitcherDataTids.root} className={styles.root()}>\n {this.props.caption ? <div className={captionClassName}>{this.props.caption}</div> : null}\n <div className={styles.wrap()}>\n <input {...inputProps} />\n <div className={listClassName}>\n <Group>{this._renderItems()}</Group>\n </div>\n </div>\n </div>\n </CommonWrapper>\n );\n }\n\n private selectItem = (value: string) => {\n if (this.props.onValueChange) {\n this.props.onValueChange(value);\n }\n };\n\n private _extractPropsFromItem = (item: string | SwitcherItem): SwitcherItem => {\n return typeof item === 'object' ? item : { label: item, value: item };\n };\n\n private _extractValuesFromItems = (): string[] => {\n return this.props.items.map((item) => {\n const { value } = this._extractPropsFromItem(item);\n return value;\n });\n };\n\n private move = (step: number) => {\n let selectedIndex = this.state.focusedIndex;\n\n if (typeof selectedIndex !== 'number') {\n return;\n }\n\n const items = this._extractValuesFromItems();\n\n selectedIndex += step;\n\n if (selectedIndex < 0) {\n selectedIndex = items.length - 1;\n } else if (selectedIndex >= items.length) {\n selectedIndex = 0;\n }\n\n this._focus(selectedIndex);\n };\n\n private _focus = (index: number) => {\n this.setState({ focusedIndex: index });\n };\n\n private handleKey = (e: React.KeyboardEvent<HTMLInputElement>) => {\n const focusedIndex = this.state.focusedIndex;\n if (typeof focusedIndex !== 'number') {\n return;\n }\n\n if (isKeyEnter(e)) {\n if (this.props.onValueChange) {\n const { value } = this._extractPropsFromItem(this.props.items[focusedIndex]);\n this.selectItem(value);\n }\n return;\n }\n\n if (isKeyArrowHorizontal(e)) {\n e.preventDefault();\n this.move(isKeyArrowLeft(e) ? -1 : 1);\n }\n };\n\n private _handleFocus = () => {\n const { value } = this.props;\n\n const items = this._extractValuesFromItems();\n const currentIndex = [...items].indexOf(value as string);\n const index = currentIndex > -1 ? currentIndex : 0;\n\n this.setState({ focusedIndex: index });\n };\n\n private _handleBlur = () => {\n this.setState({ focusedIndex: null });\n };\n\n private _renderItems = () => {\n return this.props.items.map((item, i) => {\n const { label, value, buttonProps: customButtonProps } = this._extractPropsFromItem(item);\n const commonButtonProps = {\n checked: this.props.value === value,\n visuallyFocused: this.state.focusedIndex === i,\n onClick: () => {\n this.selectItem(value);\n },\n disableFocus: true,\n size: this.props.size,\n disabled: this.props.disabled,\n };\n return (\n <Button key={value} {...commonButtonProps} {...customButtonProps}>\n {label}\n </Button>\n );\n });\n };\n\n private getLabelSizeClassName = (): string => {\n switch (this.props.size) {\n case 'large':\n return styles.captionLarge(this.theme);\n case 'medium':\n return styles.captionMedium(this.theme);\n case 'small':\n default:\n return styles.captionSmall(this.theme);\n }\n };\n}\n"]}
@@ -1,6 +1,6 @@
1
1
  import React from 'react';
2
2
  import PropTypes from 'prop-types';
3
- import { ButtonSize } from '../Button';
3
+ import { ButtonProps, ButtonSize } from '../Button';
4
4
  import { Nullable } from '../../typings/utility-types';
5
5
  import { CommonProps } from '../../internal/CommonWrapper';
6
6
  export declare type SwitcherSize = ButtonSize;
@@ -10,7 +10,7 @@ export declare const SwitcherDataTids: {
10
10
  };
11
11
  export interface SwitcherProps extends CommonProps {
12
12
  /**
13
- * Список строк или список элементов типа `{ label: string, value: string }`
13
+ * Список строк или список элементов типа `{ label: string, value: string, buttonProps?: Partial<ButtonProps> }`
14
14
  */
15
15
  items: SwitcherItems[];
16
16
  value?: string;
@@ -27,6 +27,7 @@ export interface SwitcherState {
27
27
  interface SwitcherItem {
28
28
  label: string;
29
29
  value: string;
30
+ buttonProps?: Partial<ButtonProps>;
30
31
  }
31
32
  export declare class Switcher extends React.Component<SwitcherProps, SwitcherState> {
32
33
  static __KONTUR_REACT_UI__: string;