@skbkontur/react-ui 4.22.2 → 4.22.3
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.
- package/CHANGELOG.md +8 -0
- package/cjs/components/Checkbox/Checkbox.d.ts +1 -0
- package/cjs/components/Checkbox/Checkbox.js +7 -2
- package/cjs/components/Checkbox/Checkbox.js.map +1 -1
- package/cjs/components/CurrencyInput/CurrencyInput.d.ts +1 -0
- package/cjs/components/CurrencyInput/CurrencyInput.js +9 -5
- package/cjs/components/CurrencyInput/CurrencyInput.js.map +1 -1
- package/cjs/components/DateInput/DateInput.d.ts +1 -0
- package/cjs/components/DateInput/DateInput.js +8 -3
- package/cjs/components/DateInput/DateInput.js.map +1 -1
- package/cjs/components/FileUploader/FileUploader.js +4 -1
- package/cjs/components/FileUploader/FileUploader.js.map +1 -1
- package/cjs/components/Input/Input.d.ts +1 -0
- package/cjs/components/Input/Input.js +8 -6
- package/cjs/components/Input/Input.js.map +1 -1
- package/cjs/components/Radio/Radio.d.ts +1 -0
- package/cjs/components/Radio/Radio.js +7 -2
- package/cjs/components/Radio/Radio.js.map +1 -1
- package/cjs/components/Toggle/Toggle.d.ts +1 -0
- package/cjs/components/Toggle/Toggle.js +8 -7
- package/cjs/components/Toggle/Toggle.js.map +1 -1
- package/cjs/internal/CommonWrapper/CommonWrapper.js +9 -2
- package/cjs/internal/CommonWrapper/CommonWrapper.js.map +1 -1
- package/cjs/internal/FocusControlWrapper/FocusControlWrapper.d.ts +17 -0
- package/cjs/internal/FocusControlWrapper/FocusControlWrapper.js +46 -0
- package/cjs/internal/FocusControlWrapper/FocusControlWrapper.js.map +1 -0
- package/cjs/internal/FocusControlWrapper/FocusControlWrapper.stories.d.ts +5 -0
- package/cjs/internal/FocusControlWrapper/index.d.ts +1 -0
- package/cjs/internal/FocusControlWrapper/index.js +1 -0
- package/cjs/internal/FocusControlWrapper/index.js.map +1 -0
- package/cjs/internal/FocusControlWrapper/useFocusControl.d.ts +12 -0
- package/cjs/internal/FocusControlWrapper/useFocusControl.js +34 -0
- package/cjs/internal/FocusControlWrapper/useFocusControl.js.map +1 -0
- package/cjs/internal/InputLikeText/InputLikeText.d.ts +1 -0
- package/cjs/internal/InputLikeText/InputLikeText.js +25 -13
- package/cjs/internal/InputLikeText/InputLikeText.js.map +1 -1
- package/cjs/{components/DateInput/helpers/SelectionHelpers.js.map → lib/dom/selectionHelpers.js.map} +1 -1
- package/components/Checkbox/Checkbox/Checkbox.js +12 -5
- package/components/Checkbox/Checkbox/Checkbox.js.map +1 -1
- package/components/Checkbox/Checkbox.d.ts +1 -0
- package/components/CurrencyInput/CurrencyInput/CurrencyInput.js +11 -6
- package/components/CurrencyInput/CurrencyInput/CurrencyInput.js.map +1 -1
- package/components/CurrencyInput/CurrencyInput.d.ts +1 -0
- package/components/DateInput/DateInput/DateInput.js +13 -6
- package/components/DateInput/DateInput/DateInput.js.map +1 -1
- package/components/DateInput/DateInput.d.ts +1 -0
- package/components/FileUploader/FileUploader/FileUploader.js +7 -2
- package/components/FileUploader/FileUploader/FileUploader.js.map +1 -1
- package/components/Input/Input/Input.js +11 -6
- package/components/Input/Input/Input.js.map +1 -1
- package/components/Input/Input.d.ts +1 -0
- package/components/Radio/Radio/Radio.js +12 -5
- package/components/Radio/Radio/Radio.js.map +1 -1
- package/components/Radio/Radio.d.ts +1 -0
- package/components/Toggle/Toggle/Toggle.js +12 -7
- package/components/Toggle/Toggle/Toggle.js.map +1 -1
- package/components/Toggle/Toggle.d.ts +1 -0
- package/internal/CommonWrapper/CommonWrapper/CommonWrapper.js +17 -6
- package/internal/CommonWrapper/CommonWrapper/CommonWrapper.js.map +1 -1
- package/internal/FocusControlWrapper/FocusControlWrapper/FocusControlWrapper.js +33 -0
- package/internal/FocusControlWrapper/FocusControlWrapper/FocusControlWrapper.js.map +1 -0
- package/internal/FocusControlWrapper/FocusControlWrapper/package.json +6 -0
- package/internal/FocusControlWrapper/FocusControlWrapper.d.ts +17 -0
- package/internal/FocusControlWrapper/FocusControlWrapper.stories.d.ts +5 -0
- package/internal/FocusControlWrapper/index/index.js +1 -0
- package/internal/FocusControlWrapper/index/index.js.map +1 -0
- package/internal/FocusControlWrapper/index/package.json +6 -0
- package/internal/FocusControlWrapper/index.d.ts +1 -0
- package/internal/FocusControlWrapper/package.json +6 -0
- package/internal/FocusControlWrapper/useFocusControl/package.json +6 -0
- package/internal/FocusControlWrapper/useFocusControl/useFocusControl.js +33 -0
- package/internal/FocusControlWrapper/useFocusControl/useFocusControl.js.map +1 -0
- package/internal/FocusControlWrapper/useFocusControl.d.ts +12 -0
- package/internal/InputLikeText/InputLikeText/InputLikeText.js +34 -8
- package/internal/InputLikeText/InputLikeText/InputLikeText.js.map +1 -1
- package/internal/InputLikeText/InputLikeText.d.ts +1 -0
- package/lib/dom/selectionHelpers/package.json +6 -0
- package/{components/DateInput/helpers/SelectionHelpers/SelectionHelpers.js.map → lib/dom/selectionHelpers/selectionHelpers.js.map} +1 -1
- package/package.json +3 -3
- package/components/DateInput/helpers/SelectionHelpers/package.json +0 -6
- /package/cjs/{components/DateInput/helpers/SelectionHelpers.d.ts → lib/dom/selectionHelpers.d.ts} +0 -0
- /package/cjs/{components/DateInput/helpers/SelectionHelpers.js → lib/dom/selectionHelpers.js} +0 -0
- /package/{components/DateInput/helpers/SelectionHelpers/SelectionHelpers.js → lib/dom/selectionHelpers/selectionHelpers.js} +0 -0
- /package/{components/DateInput/helpers/SelectionHelpers.d.ts → lib/dom/selectionHelpers.d.ts} +0 -0
package/CHANGELOG.md
CHANGED
|
@@ -3,6 +3,14 @@
|
|
|
3
3
|
All notable changes to this project will be documented in this file.
|
|
4
4
|
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
|
|
5
5
|
|
|
6
|
+
## [4.22.3](https://github.com/skbkontur/retail-ui/compare/@skbkontur/react-ui@4.22.3-next.0...@skbkontur/react-ui@4.22.3) (2024-04-25)
|
|
7
|
+
|
|
8
|
+
**Note:** Version bump only for package @skbkontur/react-ui
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
|
|
6
14
|
## [4.22.2](https://github.com/skbkontur/retail-ui/compare/@skbkontur/react-ui@4.22.1...@skbkontur/react-ui@4.22.2) (2024-04-19)
|
|
7
15
|
|
|
8
16
|
**Note:** Version bump only for package @skbkontur/react-ui
|
|
@@ -112,6 +112,7 @@ export declare class Checkbox extends React.PureComponent<CheckboxProps, Checkbo
|
|
|
112
112
|
resetIndeterminate: () => void;
|
|
113
113
|
private renderMain;
|
|
114
114
|
private handleFocus;
|
|
115
|
+
private resetFocus;
|
|
115
116
|
private handleBlur;
|
|
116
117
|
private handleChange;
|
|
117
118
|
private handleClick;
|
|
@@ -17,6 +17,7 @@ var _fixFirefoxModifiedClickOnLabel = require("../../lib/events/fixFirefoxModifi
|
|
|
17
17
|
var _ThemeHelpers = require("../../lib/theming/ThemeHelpers");
|
|
18
18
|
var _createPropsGetter = require("../../lib/createPropsGetter");
|
|
19
19
|
|
|
20
|
+
var _FocusControlWrapper = require("../../internal/FocusControlWrapper");
|
|
20
21
|
|
|
21
22
|
var _Checkbox = require("./Checkbox.styles");
|
|
22
23
|
var _CheckedIcon = require("./CheckedIcon");
|
|
@@ -349,7 +350,9 @@ Checkbox = (0, _rootNode.rootNode)(_class = (_temp = _class2 = /*#__PURE__*/func
|
|
|
349
350
|
onMouseOver: onMouseOver,
|
|
350
351
|
onClick: (0, _fixFirefoxModifiedClickOnLabel.fixFirefoxModifiedClickOnLabel)(_this.input) }, /*#__PURE__*/
|
|
351
352
|
|
|
352
|
-
_react.default.createElement(
|
|
353
|
+
_react.default.createElement(_FocusControlWrapper.FocusControlWrapper, { onBlurWhenDisabled: _this.resetFocus }, /*#__PURE__*/
|
|
354
|
+
_react.default.createElement("input", (0, _extends2.default)({}, inputProps, { "aria-label": ariaLabel, "aria-describedby": ariaDescribedby }))),
|
|
355
|
+
|
|
353
356
|
box,
|
|
354
357
|
caption));
|
|
355
358
|
|
|
@@ -372,9 +375,11 @@ Checkbox = (0, _rootNode.rootNode)(_class = (_temp = _class2 = /*#__PURE__*/func
|
|
|
372
375
|
}
|
|
373
376
|
};_this.
|
|
374
377
|
|
|
378
|
+
resetFocus = function () {return _this.setState({ focusedByTab: false });};_this.
|
|
379
|
+
|
|
375
380
|
handleBlur = function (e) {
|
|
381
|
+
_this.resetFocus();
|
|
376
382
|
_this.props.onBlur == null ? void 0 : _this.props.onBlur(e);
|
|
377
|
-
_this.setState({ focusedByTab: false });
|
|
378
383
|
};_this.
|
|
379
384
|
|
|
380
385
|
handleChange = function (event) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["Checkbox.tsx"],"names":["CheckboxDataTids","root","Checkbox","rootNode","getProps","defaultProps","state","focusedByTab","indeterminate","props","initialIndeterminate","isShiftPressed","input","React","createRef","handleShiftPress","e","key","setState","handleShiftRelease","componentDidMount","current","document","addEventListener","componentWillUnmount","removeEventListener","setIndeterminate","resetIndeterminate","renderMain","error","warning","size","onMouseEnter","onMouseLeave","onMouseOver","onValueChange","type","ariaDescribedby","ariaLabel","rest","isIndeterminate","_isTheme2022","theme","iconClass","styles","icon","iconFixPosition","checked","iconUnchecked","iconSize","parseInt","getCheckboxBoxSize","IconCheck","IconSquare","rootClass","getRootSizeClassName","rootFallback","isIE11","isEdge","rootChecked","rootDisableTextSelect","disabled","Boolean","inputProps","className","onChange","handleChange","onFocus","handleFocus","onBlur","handleBlur","onClick","handleClick","ref","caption","children","captionClass","captionIE11","box","getBoxWrapperSizeClassName","boxWrapper","globalClasses","boxChecked","boxFocus","boxError","boxWarning","boxDisabled","globalObject","requestAnimationFrame","keyListener","isTabPressed","event","currentTarget","undefined","rootLarge","rootMedium","rootSmall","boxWrapperLarge","boxWrapperMedium","boxWrapperSmall","checkboxBoxSizeLarge","checkboxBoxSizeMedium","checkboxBoxSizeSmall","componentDidUpdate","prevProps","render","setRootNode","focus","blur","PureComponent","__KONTUR_REACT_UI__","displayName","propTypes","PropTypes","bool","func"],"mappings":"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","sourcesContent":["// TODO: Enable this rule in functional components.\n/* eslint-disable @typescript-eslint/no-unused-vars */\nimport React, { AriaAttributes } from 'react';\nimport PropTypes from 'prop-types';\nimport { globalObject } from '@skbkontur/global-object';\n\nimport { Override } from '../../typings/utility-types';\nimport { keyListener } from '../../lib/events/keyListener';\nimport { Theme } from '../../lib/theming/Theme';\nimport { ThemeContext } from '../../lib/theming/ThemeContext';\nimport { OkIcon, SquareIcon } from '../../internal/icons/16px';\nimport { isEdge, isIE11 } from '../../lib/client';\nimport { CommonWrapper, CommonProps, CommonWrapperRestProps } from '../../internal/CommonWrapper';\nimport { cx } from '../../lib/theming/Emotion';\nimport { rootNode, TSetRootNode } from '../../lib/rootNode';\nimport { fixFirefoxModifiedClickOnLabel } from '../../lib/events/fixFirefoxModifiedClickOnLabel';\nimport { isTheme2022 } from '../../lib/theming/ThemeHelpers';\nimport { createPropsGetter } from '../../lib/createPropsGetter';\nimport { SizeProp } from '../../lib/types/props';\n\nimport { styles, globalClasses } from './Checkbox.styles';\nimport { CheckedIcon } from './CheckedIcon';\nimport { IndeterminateIcon } from './IndeterminateIcon';\n\n/**\n * @deprecated use SizeProp\n */\nexport type CheckboxSize = SizeProp;\n\nexport interface CheckboxProps\n extends CommonProps,\n Pick<AriaAttributes, 'aria-describedby' | 'aria-label'>,\n Override<\n React.InputHTMLAttributes<HTMLInputElement>,\n {\n /**\n * Контент `label`\n */\n children?: React.ReactNode;\n /**\n * Состояние валидации при ошибке.\n */\n error?: boolean;\n /**\n * Состояние валидации при предупреждении.\n */\n warning?: boolean;\n /** Размер */\n size?: SizeProp;\n /**\n * HTML-событие `mouseenter`.\n */\n onMouseEnter?: React.MouseEventHandler<HTMLLabelElement>;\n /**\n * HTML-событие `mouseleave`.\n */\n onMouseLeave?: React.MouseEventHandler<HTMLLabelElement>;\n /**\n * HTML-событие `mouseover`.\n */\n onMouseOver?: React.MouseEventHandler<HTMLLabelElement>;\n /**\n * Функция, вызываемая при изменении `value`.\n */\n onValueChange?: (value: boolean) => void;\n /**\n * HTML-событие `onblur`.\n */\n onBlur?: (event: React.FocusEvent<HTMLInputElement>) => void;\n /**\n * [Неопределённое состояние](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input/checkbox#attr-indeterminate) чекбокса из HTML.\n */\n initialIndeterminate?: boolean;\n }\n > {}\n\nexport interface CheckboxState {\n focusedByTab: boolean;\n indeterminate: boolean;\n isShiftPressed: boolean;\n}\n\nexport const CheckboxDataTids = {\n root: 'Checkbox__root',\n} as const;\n\ntype DefaultProps = Required<Pick<CheckboxProps, 'size'>>;\n\n@rootNode\nexport class Checkbox extends React.PureComponent<CheckboxProps, CheckboxState> {\n public static __KONTUR_REACT_UI__ = 'Checkbox';\n public static displayName = 'Checkbox';\n\n public static defaultProps: DefaultProps = {\n size: 'small',\n };\n\n private getProps = createPropsGetter(Checkbox.defaultProps);\n\n private getRootSizeClassName() {\n switch (this.getProps().size) {\n case 'large':\n return styles.rootLarge(this.theme);\n case 'medium':\n return styles.rootMedium(this.theme);\n case 'small':\n default:\n return styles.rootSmall(this.theme);\n }\n }\n\n private getBoxWrapperSizeClassName() {\n switch (this.getProps().size) {\n case 'large':\n return styles.boxWrapperLarge(this.theme);\n case 'medium':\n return styles.boxWrapperMedium(this.theme);\n case 'small':\n default:\n return styles.boxWrapperSmall(this.theme);\n }\n }\n\n private getCheckboxBoxSize() {\n switch (this.getProps().size) {\n case 'large':\n return this.theme.checkboxBoxSizeLarge;\n case 'medium':\n return this.theme.checkboxBoxSizeMedium;\n case 'small':\n default:\n return this.theme.checkboxBoxSizeSmall;\n }\n }\n\n public static propTypes = {\n checked: PropTypes.bool,\n disabled: PropTypes.bool,\n error: PropTypes.bool,\n warning: PropTypes.bool,\n onValueChange: PropTypes.func,\n onBlur: PropTypes.func,\n onMouseEnter: PropTypes.func,\n onMouseLeave: PropTypes.func,\n onMouseOver: PropTypes.func,\n };\n\n public state = {\n focusedByTab: false,\n indeterminate: this.props.initialIndeterminate || false,\n isShiftPressed: false,\n };\n\n private theme!: Theme;\n private input = React.createRef<HTMLInputElement>();\n\n private handleShiftPress = (e: KeyboardEvent) => {\n if (e.key === 'Shift') {\n this.setState(() => ({\n isShiftPressed: true,\n }));\n }\n };\n\n private handleShiftRelease = (e: KeyboardEvent) => {\n if (e.key === 'Shift') {\n this.setState({\n isShiftPressed: false,\n });\n }\n };\n\n public componentDidMount = () => {\n if (this.state.indeterminate && this.input.current) {\n this.input.current.indeterminate = true;\n }\n\n globalObject.document?.addEventListener('keydown', this.handleShiftPress);\n globalObject.document?.addEventListener('keyup', this.handleShiftRelease);\n };\n\n public componentWillUnmount = () => {\n globalObject.document?.removeEventListener('keydown', this.handleShiftPress);\n globalObject.document?.removeEventListener('keyup', this.handleShiftRelease);\n };\n\n private setRootNode!: TSetRootNode;\n\n public componentDidUpdate(prevProps: CheckboxProps) {\n if (prevProps.checked !== this.props.checked) {\n this.resetIndeterminate();\n }\n }\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 /**\n * Программная установка фокуса чекбоксу.\n * @public\n */\n public focus() {\n keyListener.isTabPressed = true;\n this.input.current?.focus();\n }\n\n /**\n * Программное снятие фокуса с чекбокса.\n * @public\n */\n public blur() {\n this.input.current?.blur();\n }\n\n /**\n * Устанавливает чекбокс в HTML-состояние `indeterminate`.\n * @public\n */\n public setIndeterminate = () => {\n this.setState({\n indeterminate: true,\n });\n if (this.input.current) {\n this.input.current.indeterminate = true;\n }\n };\n\n /**\n * Снимает с чекбокса HTML-состояние `indeterminate`.\n * @public\n */\n public resetIndeterminate = () => {\n this.setState({\n indeterminate: false,\n });\n if (this.input.current) {\n this.input.current.indeterminate = false;\n }\n };\n\n private renderMain = (props: CommonWrapperRestProps<CheckboxProps>) => {\n const {\n error,\n warning,\n size,\n onMouseEnter,\n onMouseLeave,\n onMouseOver,\n onValueChange,\n type,\n initialIndeterminate,\n 'aria-describedby': ariaDescribedby,\n 'aria-label': ariaLabel,\n ...rest\n } = props;\n const isIndeterminate = this.state.indeterminate;\n\n const _isTheme2022 = isTheme2022(this.theme);\n\n const iconClass = cx(\n styles.icon(),\n !_isTheme2022 && styles.iconFixPosition(),\n !props.checked && !isIndeterminate && styles.iconUnchecked(),\n );\n\n const iconSize = parseInt(this.getCheckboxBoxSize());\n const IconCheck = _isTheme2022 ? (\n <span className={iconClass}>\n <CheckedIcon size={iconSize} />\n </span>\n ) : (\n <OkIcon className={iconClass} />\n );\n const IconSquare = _isTheme2022 ? (\n <span className={iconClass}>\n <IndeterminateIcon size={iconSize} />\n </span>\n ) : (\n <SquareIcon className={iconClass} />\n );\n\n const rootClass = cx(this.getRootSizeClassName(), {\n [styles.root(this.theme)]: true,\n [styles.rootFallback()]: isIE11 || isEdge,\n [styles.rootChecked(this.theme)]: props.checked || isIndeterminate,\n [styles.rootDisableTextSelect()]: this.state.isShiftPressed,\n [styles.disabled(this.theme)]: Boolean(props.disabled),\n });\n\n const inputProps = {\n ...rest,\n type: 'checkbox',\n className: styles.input(),\n onChange: this.handleChange,\n onFocus: this.handleFocus,\n onBlur: this.handleBlur,\n onClick: this.handleClick,\n ref: this.input,\n };\n\n let caption = null;\n if (this.props.children) {\n const captionClass = cx({\n [styles.caption(this.theme)]: true,\n [styles.captionIE11()]: isIE11 || isEdge,\n [styles.disabled(this.theme)]: Boolean(props.disabled),\n });\n caption = <span className={captionClass}>{this.props.children}</span>;\n }\n\n const box = (\n <div\n className={cx(this.getBoxWrapperSizeClassName(), {\n [styles.boxWrapper(this.theme)]: true,\n })}\n >\n <div\n className={cx(styles.box(this.theme), globalClasses.box, {\n [styles.boxChecked(this.theme)]: props.checked || isIndeterminate,\n [styles.boxFocus(this.theme)]: this.state.focusedByTab,\n [styles.boxError(this.theme)]: props.error,\n [styles.boxWarning(this.theme)]: props.warning,\n [styles.boxDisabled(this.theme)]: props.disabled,\n })}\n >\n {(isIndeterminate && IconSquare) || IconCheck}\n </div>\n </div>\n );\n\n return (\n <label\n data-tid={CheckboxDataTids.root}\n className={rootClass}\n onMouseEnter={onMouseEnter}\n onMouseLeave={onMouseLeave}\n onMouseOver={onMouseOver}\n onClick={fixFirefoxModifiedClickOnLabel(this.input)}\n >\n <input {...inputProps} aria-label={ariaLabel} aria-describedby={ariaDescribedby} />\n {box}\n {caption}\n </label>\n );\n };\n\n private handleFocus = (e: React.FocusEvent<any>) => {\n if (!this.props.disabled) {\n // focus event fires before keyDown eventlistener\n // so we should check tabPressed in async way\n globalObject.requestAnimationFrame?.(() => {\n if (keyListener.isTabPressed) {\n this.setState({ focusedByTab: true });\n }\n });\n\n if (this.props.onFocus) {\n this.props.onFocus(e);\n }\n }\n };\n\n private handleBlur = (e: React.FocusEvent<HTMLInputElement>) => {\n this.props.onBlur?.(e);\n this.setState({ focusedByTab: false });\n };\n\n private handleChange = (event: React.ChangeEvent<HTMLInputElement>) => {\n const checked = event.currentTarget.checked;\n this.props.onValueChange?.(checked);\n\n this.resetIndeterminate();\n\n this.props.onChange?.(event);\n };\n\n private handleClick = (e: React.MouseEvent<HTMLInputElement>) => {\n this.props.onClick?.(e);\n // support IE11's and old Edge's special behavior\n // https://github.com/jquery/jquery/issues/1698\n if (this.state.indeterminate && (isIE11 || isEdge)) {\n this.resetIndeterminate();\n // simulate correct behavior only if onValueChange is used\n // because we cant simulate real native onChange event\n if (this.props.onValueChange && this.input.current) {\n const checked = !this.input.current.checked;\n\n if (this.props.checked === undefined) {\n // in case of uncontrolled mode\n this.input.current.checked = checked;\n }\n\n this.props.onValueChange(checked);\n }\n }\n };\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["Checkbox.tsx"],"names":["CheckboxDataTids","root","Checkbox","rootNode","getProps","defaultProps","state","focusedByTab","indeterminate","props","initialIndeterminate","isShiftPressed","input","React","createRef","handleShiftPress","e","key","setState","handleShiftRelease","componentDidMount","current","document","addEventListener","componentWillUnmount","removeEventListener","setIndeterminate","resetIndeterminate","renderMain","error","warning","size","onMouseEnter","onMouseLeave","onMouseOver","onValueChange","type","ariaDescribedby","ariaLabel","rest","isIndeterminate","_isTheme2022","theme","iconClass","styles","icon","iconFixPosition","checked","iconUnchecked","iconSize","parseInt","getCheckboxBoxSize","IconCheck","IconSquare","rootClass","getRootSizeClassName","rootFallback","isIE11","isEdge","rootChecked","rootDisableTextSelect","disabled","Boolean","inputProps","className","onChange","handleChange","onFocus","handleFocus","onBlur","handleBlur","onClick","handleClick","ref","caption","children","captionClass","captionIE11","box","getBoxWrapperSizeClassName","boxWrapper","globalClasses","boxChecked","boxFocus","boxError","boxWarning","boxDisabled","resetFocus","globalObject","requestAnimationFrame","keyListener","isTabPressed","event","currentTarget","undefined","rootLarge","rootMedium","rootSmall","boxWrapperLarge","boxWrapperMedium","boxWrapperSmall","checkboxBoxSizeLarge","checkboxBoxSizeMedium","checkboxBoxSizeSmall","componentDidUpdate","prevProps","render","setRootNode","focus","blur","PureComponent","__KONTUR_REACT_UI__","displayName","propTypes","PropTypes","bool","func"],"mappings":"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","sourcesContent":["// TODO: Enable this rule in functional components.\n/* eslint-disable @typescript-eslint/no-unused-vars */\nimport React, { AriaAttributes } from 'react';\nimport PropTypes from 'prop-types';\nimport { globalObject } from '@skbkontur/global-object';\n\nimport { Override } from '../../typings/utility-types';\nimport { keyListener } from '../../lib/events/keyListener';\nimport { Theme } from '../../lib/theming/Theme';\nimport { ThemeContext } from '../../lib/theming/ThemeContext';\nimport { OkIcon, SquareIcon } from '../../internal/icons/16px';\nimport { isEdge, isIE11 } from '../../lib/client';\nimport { CommonWrapper, CommonProps, CommonWrapperRestProps } from '../../internal/CommonWrapper';\nimport { cx } from '../../lib/theming/Emotion';\nimport { rootNode, TSetRootNode } from '../../lib/rootNode';\nimport { fixFirefoxModifiedClickOnLabel } from '../../lib/events/fixFirefoxModifiedClickOnLabel';\nimport { isTheme2022 } from '../../lib/theming/ThemeHelpers';\nimport { createPropsGetter } from '../../lib/createPropsGetter';\nimport { SizeProp } from '../../lib/types/props';\nimport { FocusControlWrapper } from '../../internal/FocusControlWrapper';\n\nimport { styles, globalClasses } from './Checkbox.styles';\nimport { CheckedIcon } from './CheckedIcon';\nimport { IndeterminateIcon } from './IndeterminateIcon';\n\n/**\n * @deprecated use SizeProp\n */\nexport type CheckboxSize = SizeProp;\n\nexport interface CheckboxProps\n extends CommonProps,\n Pick<AriaAttributes, 'aria-describedby' | 'aria-label'>,\n Override<\n React.InputHTMLAttributes<HTMLInputElement>,\n {\n /**\n * Контент `label`\n */\n children?: React.ReactNode;\n /**\n * Состояние валидации при ошибке.\n */\n error?: boolean;\n /**\n * Состояние валидации при предупреждении.\n */\n warning?: boolean;\n /** Размер */\n size?: SizeProp;\n /**\n * HTML-событие `mouseenter`.\n */\n onMouseEnter?: React.MouseEventHandler<HTMLLabelElement>;\n /**\n * HTML-событие `mouseleave`.\n */\n onMouseLeave?: React.MouseEventHandler<HTMLLabelElement>;\n /**\n * HTML-событие `mouseover`.\n */\n onMouseOver?: React.MouseEventHandler<HTMLLabelElement>;\n /**\n * Функция, вызываемая при изменении `value`.\n */\n onValueChange?: (value: boolean) => void;\n /**\n * HTML-событие `onblur`.\n */\n onBlur?: (event: React.FocusEvent<HTMLInputElement>) => void;\n /**\n * [Неопределённое состояние](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input/checkbox#attr-indeterminate) чекбокса из HTML.\n */\n initialIndeterminate?: boolean;\n }\n > {}\n\nexport interface CheckboxState {\n focusedByTab: boolean;\n indeterminate: boolean;\n isShiftPressed: boolean;\n}\n\nexport const CheckboxDataTids = {\n root: 'Checkbox__root',\n} as const;\n\ntype DefaultProps = Required<Pick<CheckboxProps, 'size'>>;\n\n@rootNode\nexport class Checkbox extends React.PureComponent<CheckboxProps, CheckboxState> {\n public static __KONTUR_REACT_UI__ = 'Checkbox';\n public static displayName = 'Checkbox';\n\n public static defaultProps: DefaultProps = {\n size: 'small',\n };\n\n private getProps = createPropsGetter(Checkbox.defaultProps);\n\n private getRootSizeClassName() {\n switch (this.getProps().size) {\n case 'large':\n return styles.rootLarge(this.theme);\n case 'medium':\n return styles.rootMedium(this.theme);\n case 'small':\n default:\n return styles.rootSmall(this.theme);\n }\n }\n\n private getBoxWrapperSizeClassName() {\n switch (this.getProps().size) {\n case 'large':\n return styles.boxWrapperLarge(this.theme);\n case 'medium':\n return styles.boxWrapperMedium(this.theme);\n case 'small':\n default:\n return styles.boxWrapperSmall(this.theme);\n }\n }\n\n private getCheckboxBoxSize() {\n switch (this.getProps().size) {\n case 'large':\n return this.theme.checkboxBoxSizeLarge;\n case 'medium':\n return this.theme.checkboxBoxSizeMedium;\n case 'small':\n default:\n return this.theme.checkboxBoxSizeSmall;\n }\n }\n\n public static propTypes = {\n checked: PropTypes.bool,\n disabled: PropTypes.bool,\n error: PropTypes.bool,\n warning: PropTypes.bool,\n onValueChange: PropTypes.func,\n onBlur: PropTypes.func,\n onMouseEnter: PropTypes.func,\n onMouseLeave: PropTypes.func,\n onMouseOver: PropTypes.func,\n };\n\n public state = {\n focusedByTab: false,\n indeterminate: this.props.initialIndeterminate || false,\n isShiftPressed: false,\n };\n\n private theme!: Theme;\n private input = React.createRef<HTMLInputElement>();\n\n private handleShiftPress = (e: KeyboardEvent) => {\n if (e.key === 'Shift') {\n this.setState(() => ({\n isShiftPressed: true,\n }));\n }\n };\n\n private handleShiftRelease = (e: KeyboardEvent) => {\n if (e.key === 'Shift') {\n this.setState({\n isShiftPressed: false,\n });\n }\n };\n\n public componentDidMount = () => {\n if (this.state.indeterminate && this.input.current) {\n this.input.current.indeterminate = true;\n }\n\n globalObject.document?.addEventListener('keydown', this.handleShiftPress);\n globalObject.document?.addEventListener('keyup', this.handleShiftRelease);\n };\n\n public componentWillUnmount = () => {\n globalObject.document?.removeEventListener('keydown', this.handleShiftPress);\n globalObject.document?.removeEventListener('keyup', this.handleShiftRelease);\n };\n\n private setRootNode!: TSetRootNode;\n\n public componentDidUpdate(prevProps: CheckboxProps) {\n if (prevProps.checked !== this.props.checked) {\n this.resetIndeterminate();\n }\n }\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 /**\n * Программная установка фокуса чекбоксу.\n * @public\n */\n public focus() {\n keyListener.isTabPressed = true;\n this.input.current?.focus();\n }\n\n /**\n * Программное снятие фокуса с чекбокса.\n * @public\n */\n public blur() {\n this.input.current?.blur();\n }\n\n /**\n * Устанавливает чекбокс в HTML-состояние `indeterminate`.\n * @public\n */\n public setIndeterminate = () => {\n this.setState({\n indeterminate: true,\n });\n if (this.input.current) {\n this.input.current.indeterminate = true;\n }\n };\n\n /**\n * Снимает с чекбокса HTML-состояние `indeterminate`.\n * @public\n */\n public resetIndeterminate = () => {\n this.setState({\n indeterminate: false,\n });\n if (this.input.current) {\n this.input.current.indeterminate = false;\n }\n };\n\n private renderMain = (props: CommonWrapperRestProps<CheckboxProps>) => {\n const {\n error,\n warning,\n size,\n onMouseEnter,\n onMouseLeave,\n onMouseOver,\n onValueChange,\n type,\n initialIndeterminate,\n 'aria-describedby': ariaDescribedby,\n 'aria-label': ariaLabel,\n ...rest\n } = props;\n const isIndeterminate = this.state.indeterminate;\n\n const _isTheme2022 = isTheme2022(this.theme);\n\n const iconClass = cx(\n styles.icon(),\n !_isTheme2022 && styles.iconFixPosition(),\n !props.checked && !isIndeterminate && styles.iconUnchecked(),\n );\n\n const iconSize = parseInt(this.getCheckboxBoxSize());\n const IconCheck = _isTheme2022 ? (\n <span className={iconClass}>\n <CheckedIcon size={iconSize} />\n </span>\n ) : (\n <OkIcon className={iconClass} />\n );\n const IconSquare = _isTheme2022 ? (\n <span className={iconClass}>\n <IndeterminateIcon size={iconSize} />\n </span>\n ) : (\n <SquareIcon className={iconClass} />\n );\n\n const rootClass = cx(this.getRootSizeClassName(), {\n [styles.root(this.theme)]: true,\n [styles.rootFallback()]: isIE11 || isEdge,\n [styles.rootChecked(this.theme)]: props.checked || isIndeterminate,\n [styles.rootDisableTextSelect()]: this.state.isShiftPressed,\n [styles.disabled(this.theme)]: Boolean(props.disabled),\n });\n\n const inputProps = {\n ...rest,\n type: 'checkbox',\n className: styles.input(),\n onChange: this.handleChange,\n onFocus: this.handleFocus,\n onBlur: this.handleBlur,\n onClick: this.handleClick,\n ref: this.input,\n };\n\n let caption = null;\n if (this.props.children) {\n const captionClass = cx({\n [styles.caption(this.theme)]: true,\n [styles.captionIE11()]: isIE11 || isEdge,\n [styles.disabled(this.theme)]: Boolean(props.disabled),\n });\n caption = <span className={captionClass}>{this.props.children}</span>;\n }\n\n const box = (\n <div\n className={cx(this.getBoxWrapperSizeClassName(), {\n [styles.boxWrapper(this.theme)]: true,\n })}\n >\n <div\n className={cx(styles.box(this.theme), globalClasses.box, {\n [styles.boxChecked(this.theme)]: props.checked || isIndeterminate,\n [styles.boxFocus(this.theme)]: this.state.focusedByTab,\n [styles.boxError(this.theme)]: props.error,\n [styles.boxWarning(this.theme)]: props.warning,\n [styles.boxDisabled(this.theme)]: props.disabled,\n })}\n >\n {(isIndeterminate && IconSquare) || IconCheck}\n </div>\n </div>\n );\n\n return (\n <label\n data-tid={CheckboxDataTids.root}\n className={rootClass}\n onMouseEnter={onMouseEnter}\n onMouseLeave={onMouseLeave}\n onMouseOver={onMouseOver}\n onClick={fixFirefoxModifiedClickOnLabel(this.input)}\n >\n <FocusControlWrapper onBlurWhenDisabled={this.resetFocus}>\n <input {...inputProps} aria-label={ariaLabel} aria-describedby={ariaDescribedby} />\n </FocusControlWrapper>\n {box}\n {caption}\n </label>\n );\n };\n\n private handleFocus = (e: React.FocusEvent<any>) => {\n if (!this.props.disabled) {\n // focus event fires before keyDown eventlistener\n // so we should check tabPressed in async way\n globalObject.requestAnimationFrame?.(() => {\n if (keyListener.isTabPressed) {\n this.setState({ focusedByTab: true });\n }\n });\n\n if (this.props.onFocus) {\n this.props.onFocus(e);\n }\n }\n };\n\n private resetFocus = () => this.setState({ focusedByTab: false });\n\n private handleBlur = (e: React.FocusEvent<HTMLInputElement>) => {\n this.resetFocus();\n this.props.onBlur?.(e);\n };\n\n private handleChange = (event: React.ChangeEvent<HTMLInputElement>) => {\n const checked = event.currentTarget.checked;\n this.props.onValueChange?.(checked);\n\n this.resetIndeterminate();\n\n this.props.onChange?.(event);\n };\n\n private handleClick = (e: React.MouseEvent<HTMLInputElement>) => {\n this.props.onClick?.(e);\n // support IE11's and old Edge's special behavior\n // https://github.com/jquery/jquery/issues/1698\n if (this.state.indeterminate && (isIE11 || isEdge)) {\n this.resetIndeterminate();\n // simulate correct behavior only if onValueChange is used\n // because we cant simulate real native onChange event\n if (this.props.onValueChange && this.input.current) {\n const checked = !this.input.current.checked;\n\n if (this.props.checked === undefined) {\n // in case of uncontrolled mode\n this.input.current.checked = checked;\n }\n\n this.props.onValueChange(checked);\n }\n }\n };\n}\n"]}
|
|
@@ -14,6 +14,7 @@ var _CommonWrapper = require("../../internal/CommonWrapper");
|
|
|
14
14
|
var _rootNode = require("../../lib/rootNode");
|
|
15
15
|
var _createPropsGetter = require("../../lib/createPropsGetter");
|
|
16
16
|
var _isInstanceOf = require("../../lib/isInstanceOf");
|
|
17
|
+
var _FocusControlWrapper = require("../../internal/FocusControlWrapper");
|
|
17
18
|
|
|
18
19
|
var _constants = require("./constants");
|
|
19
20
|
var _SelectionHelper = require("./SelectionHelper");
|
|
@@ -166,6 +167,7 @@ CurrencyInput = (0, _rootNode.rootNode)(_class = (_temp = _class2 = /*#__PURE__*
|
|
|
166
167
|
var fractionDigits = props.fractionDigits,signed = props.signed,onSubmit = props.onSubmit,integerDigits = props.integerDigits,hideTrailingZeros = props.hideTrailingZeros,rest = (0, _objectWithoutPropertiesLoose2.default)(props, _excluded);
|
|
167
168
|
|
|
168
169
|
return /*#__PURE__*/(
|
|
170
|
+
_react.default.createElement(_FocusControlWrapper.FocusControlWrapper, { onBlurWhenDisabled: _this.resetFocus }, /*#__PURE__*/
|
|
169
171
|
_react.default.createElement(_Input.Input, (0, _extends2.default)({
|
|
170
172
|
"data-tid": CurrencyInputDataTids.root },
|
|
171
173
|
rest, {
|
|
@@ -184,7 +186,8 @@ CurrencyInput = (0, _rootNode.rootNode)(_class = (_temp = _class2 = /*#__PURE__*
|
|
|
184
186
|
onMouseLeave: _this.props.onMouseLeave,
|
|
185
187
|
onMouseOver: _this.props.onMouseOver,
|
|
186
188
|
ref: _this.refInput,
|
|
187
|
-
placeholder: _this.state.focused ? '' : getPlaceholder(props) })));
|
|
189
|
+
placeholder: _this.state.focused ? '' : getPlaceholder(props) }))));
|
|
190
|
+
|
|
188
191
|
|
|
189
192
|
|
|
190
193
|
};_this.
|
|
@@ -454,17 +457,18 @@ CurrencyInput = (0, _rootNode.rootNode)(_class = (_temp = _class2 = /*#__PURE__*
|
|
|
454
457
|
}
|
|
455
458
|
};_this.
|
|
456
459
|
|
|
457
|
-
|
|
460
|
+
resetFocus = function () {
|
|
458
461
|
var value = _CurrencyHelper.CurrencyHelper.parse(_this.state.formatted);
|
|
459
462
|
|
|
460
463
|
_this.setState((0, _extends2.default)({},
|
|
461
464
|
_this.getState(value, _this.getProps().fractionDigits, _this.getProps().hideTrailingZeros), {
|
|
462
465
|
focused: false }));
|
|
463
466
|
|
|
467
|
+
};_this.
|
|
464
468
|
|
|
465
|
-
|
|
466
|
-
|
|
467
|
-
|
|
469
|
+
handleBlur = function (event) {
|
|
470
|
+
_this.resetFocus();
|
|
471
|
+
_this.props.onBlur == null ? void 0 : _this.props.onBlur(event);
|
|
468
472
|
};_this.
|
|
469
473
|
|
|
470
474
|
refInput = function (element) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["CurrencyInput.tsx"],"names":["CurrencyInputDataTids","root","CurrencyInput","rootNode","getProps","defaultProps","state","getState","value","fractionDigits","hideTrailingZeros","focused","tempSelectionForOnChange","SelectionHelper","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","isIE11","persist","selection","getSelection","target","onKeyDown","defaultPrevented","action","CURRENCY_INPUT_ACTIONS","Ignore","Unknown","preventDefault","Submit","Backspace","inputValue","CurrencyInputHelper","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","CurrencyHelper","parse","onValueChange","blink","getOnChangeDelta","oldValue","substring","substr","delta","data","clipboardData","getData","formatForClipboard","setData","selectionStart","selectionEnd","selectionDirection","valueLength","onFocus","onBlur","element","componentDidMount","maxLength","undefined","MAX_SAFE_DIGITS","componentDidUpdate","prevProps","prevState","isValidNumber","isNumeric","Number","setSelectionRange","render","setRootNode","format","normilized","normalizeSelection","React","PureComponent","__KONTUR_REACT_UI__","displayName","propTypes","PropTypes","oneOf","autoFocus","bool","borderless","disabled","error","number","leftIcon","placeholder","string","size","warning","width","oneOfType","func","isRequired","inputMode","globalObject","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, { AriaAttributes } from 'react';\nimport PropTypes from 'prop-types';\nimport warning from 'warning';\nimport debounce from 'lodash.debounce';\nimport { globalObject } from '@skbkontur/global-object';\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';\nimport { isInstanceOf } from '../../lib/isInstanceOf';\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 Pick<AriaAttributes, 'aria-label'>,\n 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 public static displayName = '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 aria-label={this.props['aria-label']}\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 (!isInstanceOf(input, globalObject.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":["CurrencyInputDataTids","root","CurrencyInput","rootNode","getProps","defaultProps","state","getState","value","fractionDigits","hideTrailingZeros","focused","tempSelectionForOnChange","SelectionHelper","fromPosition","renderMain","props","signed","onSubmit","integerDigits","rest","resetFocus","align","formatted","handleBlur","handleFocus","handleMouseUp","handleKeyDown","handleValueChange","handlePaste","handleCopy","handleCut","onMouseEnter","onMouseLeave","onMouseOver","refInput","getPlaceholder","focus","input","blur","debouncedSetSelectionFromEvent","setSelectionFromEvent","event","isIE11","persist","selection","getSelection","target","onKeyDown","defaultPrevented","action","CURRENCY_INPUT_ACTIONS","Ignore","Unknown","preventDefault","Submit","Backspace","inputValue","CurrencyInputHelper","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","CurrencyHelper","parse","onValueChange","blink","getOnChangeDelta","oldValue","substring","substr","delta","data","clipboardData","getData","formatForClipboard","setData","selectionStart","selectionEnd","selectionDirection","valueLength","onFocus","onBlur","element","componentDidMount","maxLength","undefined","MAX_SAFE_DIGITS","componentDidUpdate","prevProps","prevState","isValidNumber","isNumeric","Number","setSelectionRange","render","setRootNode","format","normilized","normalizeSelection","React","PureComponent","__KONTUR_REACT_UI__","displayName","propTypes","PropTypes","oneOf","autoFocus","bool","borderless","disabled","error","number","leftIcon","placeholder","string","size","warning","width","oneOfType","func","isRequired","inputMode","globalObject","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, { AriaAttributes } from 'react';\nimport PropTypes from 'prop-types';\nimport warning from 'warning';\nimport debounce from 'lodash.debounce';\nimport { globalObject } from '@skbkontur/global-object';\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 { rootNode, TSetRootNode } from '../../lib/rootNode';\nimport { createPropsGetter } from '../../lib/createPropsGetter';\nimport { isInstanceOf } from '../../lib/isInstanceOf';\nimport { FocusControlWrapper } from '../../internal/FocusControlWrapper';\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 Pick<AriaAttributes, 'aria-label'>,\n 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 public static displayName = '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 <FocusControlWrapper onBlurWhenDisabled={this.resetFocus}>\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 aria-label={this.props['aria-label']}\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 </FocusControlWrapper>\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 resetFocus = () => {\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\n private handleBlur = (event: React.FocusEvent<HTMLInputElement>) => {\n this.resetFocus();\n this.props.onBlur?.(event);\n };\n\n private refInput = (element: Nullable<Input>) => {\n this.input = element;\n };\n}\n\nfunction getInputSelectionFromEvent(input: EventTarget): Selection {\n if (!isInstanceOf(input, globalObject.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"]}
|
|
@@ -84,6 +84,7 @@ export declare class DateInput extends React.Component<DateInputProps, DateInput
|
|
|
84
84
|
private renderMain;
|
|
85
85
|
private renderIcon;
|
|
86
86
|
private handleFocus;
|
|
87
|
+
private resetFocus;
|
|
87
88
|
private handleBlur;
|
|
88
89
|
private handleMouseDownCapture;
|
|
89
90
|
private handleSelectDateComponent;
|
|
@@ -17,6 +17,7 @@ var _rootNode = require("../../lib/rootNode");
|
|
|
17
17
|
var _createPropsGetter = require("../../lib/createPropsGetter");
|
|
18
18
|
var _ThemeHelpers = require("../../lib/theming/ThemeHelpers");
|
|
19
19
|
|
|
20
|
+
var _FocusControlWrapper = require("../../internal/FocusControlWrapper");
|
|
20
21
|
|
|
21
22
|
var _CalendarIcon = require("./CalendarIcon");
|
|
22
23
|
var _DateFragmentsView = require("./DateFragmentsView");
|
|
@@ -240,6 +241,8 @@ DateInput = (_dec = (0, _decorators.locale)('DatePicker', _locale.DatePickerLoca
|
|
|
240
241
|
|
|
241
242
|
|
|
242
243
|
|
|
244
|
+
|
|
245
|
+
|
|
243
246
|
|
|
244
247
|
|
|
245
248
|
|
|
@@ -277,11 +280,13 @@ DateInput = (_dec = (0, _decorators.locale)('DatePicker', _locale.DatePickerLoca
|
|
|
277
280
|
}
|
|
278
281
|
};_this.
|
|
279
282
|
|
|
283
|
+
resetFocus = function () {return _this.updateValue({ focused: false, selected: null, inputMode: false });};_this.
|
|
284
|
+
|
|
280
285
|
handleBlur = function (e) {
|
|
281
|
-
|
|
282
|
-
_this.updateValue({ focused: false, selected: null, inputMode: false });
|
|
286
|
+
_this.resetFocus();
|
|
283
287
|
|
|
284
288
|
if (_this.props.onBlur) {
|
|
289
|
+
var restored = _this.iDateMediator.restore();
|
|
285
290
|
if (restored) {
|
|
286
291
|
e.persist();
|
|
287
292
|
_this.blurEvent = e;
|
|
@@ -468,4 +473,4 @@ DateInput = (_dec = (0, _decorators.locale)('DatePicker', _locale.DatePickerLoca
|
|
|
468
473
|
_this.shiftSelection(1);
|
|
469
474
|
}
|
|
470
475
|
_this.updateValue({ inputMode: inputMode });
|
|
471
|
-
};_this.state = { valueFormatted: '', selected: null, inputMode: false, focused: false, dragged: false };return _this;}var _proto = DateInput.prototype;_proto.componentDidUpdate = function componentDidUpdate(prevProps) {var _this$getProps = this.getProps(),value = _this$getProps.value,minDate = _this$getProps.minDate,maxDate = _this$getProps.maxDate;if (prevProps.value !== value || prevProps.minDate !== minDate || prevProps.maxDate !== maxDate || this.iDateMediator.isChangedLocale(this.locale)) {this.updateFromProps(false);}this.selectNode();};_proto.componentDidMount = function componentDidMount() {this.updateFromProps(false);if (this.props.autoFocus) {this.focus();}};_proto.blur = function blur() {if (this.inputLikeText) {this.inputLikeText.blur();}};_proto.focus = function focus() {if (this.inputLikeText) {this.inputLikeText.focus();}};_proto.blink = function blink() {if (this.inputLikeText) {this.inputLikeText.blink();}};_proto.render = function render() {var _this2 = this;return /*#__PURE__*/_react.default.createElement(_ThemeContext.ThemeContext.Consumer, null, function (theme) {_this2.theme = theme;return _this2.renderMain();});};_proto.renderMain = function renderMain() {var _cx2;var _this$state2 = this.state,focused = _this$state2.focused,selected = _this$state2.selected,inputMode = _this$state2.inputMode,valueFormatted = _this$state2.valueFormatted;var showValue = Boolean(focused || valueFormatted);var _this$getProps2 = this.getProps(),width = _this$getProps2.width,size = _this$getProps2.size;return /*#__PURE__*/_react.default.createElement(_CommonWrapper.CommonWrapper, (0, _extends2.default)({ rootNodeRef: this.setRootNode }, this.props), /*#__PURE__*/_react.default.createElement(_InputLikeText.InputLikeText, { width: width, ref: this.inputLikeTextRef, size: size, disabled: this.props.disabled, error: this.props.error, warning: this.props.warning, onBlur: this.handleBlur, onFocus: this.handleFocus, onClick: this.props.onClick, onKeyDown: this.handleKeyDown, onMouseDownCapture: this.handleMouseDownCapture, onPaste: this.handlePaste, rightIcon: this.renderIcon(), onDoubleClickCapture: this.handleDoubleClick, onMouseDragStart: this.handleMouseDragStart, onMouseDragEnd: this.handleMouseDragEnd, value: this.iDateMediator.getInternalString(), inputMode: 'numeric', takeContentWidth: true }, /*#__PURE__*/_react.default.createElement("span", { className: (0, _Emotion.cx)(_DateInput.styles.value(), (_cx2 = {}, _cx2[_DateInput.styles.valueVisible()] = showValue, _cx2)) }, /*#__PURE__*/_react.default.createElement(_DateFragmentsView.DateFragmentsView, { ref: this.dateFragmentsViewRef, fragments: this.iDateMediator.getFragments(), onSelectDateComponent: this.handleSelectDateComponent, selected: selected, inputMode: inputMode }))));};return DateInput;}(_react.default.Component), _class2.__KONTUR_REACT_UI__ = 'DateInput', _class2.displayName = 'DateInput', _class2.defaultProps = { value: '', minDate: _constants.MIN_FULLDATE, maxDate: _constants.MAX_FULLDATE, size: 'small', width: 125 }, _temp)) || _class) || _class);exports.DateInput = DateInput;
|
|
476
|
+
};_this.state = { valueFormatted: '', selected: null, inputMode: false, focused: false, dragged: false };return _this;}var _proto = DateInput.prototype;_proto.componentDidUpdate = function componentDidUpdate(prevProps) {var _this$getProps = this.getProps(),value = _this$getProps.value,minDate = _this$getProps.minDate,maxDate = _this$getProps.maxDate;if (prevProps.value !== value || prevProps.minDate !== minDate || prevProps.maxDate !== maxDate || this.iDateMediator.isChangedLocale(this.locale)) {this.updateFromProps(false);}this.selectNode();};_proto.componentDidMount = function componentDidMount() {this.updateFromProps(false);if (this.props.autoFocus) {this.focus();}};_proto.blur = function blur() {if (this.inputLikeText) {this.inputLikeText.blur();}};_proto.focus = function focus() {if (this.inputLikeText) {this.inputLikeText.focus();}};_proto.blink = function blink() {if (this.inputLikeText) {this.inputLikeText.blink();}};_proto.render = function render() {var _this2 = this;return /*#__PURE__*/_react.default.createElement(_ThemeContext.ThemeContext.Consumer, null, function (theme) {_this2.theme = theme;return _this2.renderMain();});};_proto.renderMain = function renderMain() {var _cx2;var _this$state2 = this.state,focused = _this$state2.focused,selected = _this$state2.selected,inputMode = _this$state2.inputMode,valueFormatted = _this$state2.valueFormatted;var showValue = Boolean(focused || valueFormatted);var _this$getProps2 = this.getProps(),width = _this$getProps2.width,size = _this$getProps2.size;return /*#__PURE__*/_react.default.createElement(_CommonWrapper.CommonWrapper, (0, _extends2.default)({ rootNodeRef: this.setRootNode }, this.props), /*#__PURE__*/_react.default.createElement(_FocusControlWrapper.FocusControlWrapper, { onBlurWhenDisabled: this.resetFocus }, /*#__PURE__*/_react.default.createElement(_InputLikeText.InputLikeText, { width: width, ref: this.inputLikeTextRef, size: size, disabled: this.props.disabled, error: this.props.error, warning: this.props.warning, onBlur: this.handleBlur, onFocus: this.handleFocus, onClick: this.props.onClick, onKeyDown: this.handleKeyDown, onMouseDownCapture: this.handleMouseDownCapture, onPaste: this.handlePaste, rightIcon: this.renderIcon(), onDoubleClickCapture: this.handleDoubleClick, onMouseDragStart: this.handleMouseDragStart, onMouseDragEnd: this.handleMouseDragEnd, value: this.iDateMediator.getInternalString(), inputMode: 'numeric', takeContentWidth: true }, /*#__PURE__*/_react.default.createElement("span", { className: (0, _Emotion.cx)(_DateInput.styles.value(), (_cx2 = {}, _cx2[_DateInput.styles.valueVisible()] = showValue, _cx2)) }, /*#__PURE__*/_react.default.createElement(_DateFragmentsView.DateFragmentsView, { ref: this.dateFragmentsViewRef, fragments: this.iDateMediator.getFragments(), onSelectDateComponent: this.handleSelectDateComponent, selected: selected, inputMode: inputMode })))));};return DateInput;}(_react.default.Component), _class2.__KONTUR_REACT_UI__ = 'DateInput', _class2.displayName = 'DateInput', _class2.defaultProps = { value: '', minDate: _constants.MIN_FULLDATE, maxDate: _constants.MAX_FULLDATE, size: 'small', width: 125 }, _temp)) || _class) || _class);exports.DateInput = DateInput;
|