@skbkontur/react-ui 3.12.1 → 3.12.2

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 CHANGED
@@ -3,6 +3,18 @@
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
+ ## [3.12.2](https://github.com/skbkontur/retail-ui/compare/@skbkontur/react-ui@3.12.1...@skbkontur/react-ui@3.12.2) (2022-03-18)
7
+
8
+
9
+ ### Bug Fixes
10
+
11
+ * **DatePicker:** scroll to date ([#2830](https://github.com/skbkontur/retail-ui/issues/2830)) ([9fbd169](https://github.com/skbkontur/retail-ui/commit/9fbd1694199f71ad9337f2e89626320b78bd4e47))
12
+ * **DropdownContainer:** position with relative body (lts) ([#2828](https://github.com/skbkontur/retail-ui/issues/2828)) ([8db4e1c](https://github.com/skbkontur/retail-ui/commit/8db4e1cc6214f2a1bc9d8f02a071881a29f711d0))
13
+
14
+
15
+
16
+
17
+
6
18
  ## [3.12.1](https://github.com/skbkontur/retail-ui/compare/@skbkontur/react-ui@3.12.0...@skbkontur/react-ui@3.12.1) (2022-03-01)
7
19
 
8
20
 
@@ -100,9 +100,6 @@ export declare class DatePicker extends React.PureComponent<DatePickerProps<Date
100
100
  state: DatePickerState;
101
101
  private input;
102
102
  private focused;
103
- private internalDate?;
104
- private minDate?;
105
- private maxDate?;
106
103
  private setRootNode;
107
104
  componentDidMount(): void;
108
105
  componentDidUpdate(): void;
@@ -174,9 +174,6 @@ DatePicker = (0, _rootNode.rootNode)(_class = (_temp = _class2 = /*#__PURE__*/fu
174
174
 
175
175
  input = null;_this.
176
176
  focused = false;_this.
177
- internalDate = _this.parseValueToDate(_this.props.value);_this.
178
- minDate = _this.parseValueToDate(_this.props.minDate);_this.
179
- maxDate = _this.parseValueToDate(_this.props.maxDate);_this.
180
177
  setRootNode = void 0;_this.
181
178
 
182
179
 
@@ -237,19 +234,27 @@ DatePicker = (0, _rootNode.rootNode)(_class = (_temp = _class2 = /*#__PURE__*/fu
237
234
 
238
235
 
239
236
 
237
+ renderMain = function (props) {
238
+ var picker = null;var _this$props =
240
239
 
240
+ _this.props,value = _this$props.value,minDate = _this$props.minDate,maxDate = _this$props.maxDate;
241
241
 
242
+ var internalDate = _this.parseValueToDate(value);
243
+ var date = internalDate ? internalDate.toNativeFormat() : null;
244
+
245
+ var parsedMinDate = _this.parseValueToDate(minDate);
246
+ var formattedMinDate = parsedMinDate && parsedMinDate.toNativeFormat() || undefined;
247
+
248
+ var parsedMaxDate = _this.parseValueToDate(maxDate);
249
+ var formattedMaxDate = parsedMaxDate && parsedMaxDate.toNativeFormat() || undefined;
242
250
 
243
- renderMain = function (props) {
244
- var picker = null;
245
- var date = _this.internalDate ? _this.internalDate.toNativeFormat() : null;
246
251
  if (_this.state.opened) {
247
252
  picker = /*#__PURE__*/
248
253
  _react.default.createElement(_DropdownContainer.DropdownContainer, { getParent: _this.getParent, offsetY: 2, align: _this.props.menuAlign }, /*#__PURE__*/
249
254
  _react.default.createElement(_Picker.Picker, {
250
255
  value: date,
251
- minDate: _this.minDate && _this.minDate.toNativeFormat() || undefined,
252
- maxDate: _this.maxDate && _this.maxDate.toNativeFormat() || undefined,
256
+ minDate: formattedMinDate,
257
+ maxDate: formattedMaxDate,
253
258
  onPick: _this.handlePick,
254
259
  onSelect: _this.handleSelect,
255
260
  enableTodayLink: _this.props.enableTodayLink,
@@ -359,7 +364,7 @@ DatePicker = (0, _rootNode.rootNode)(_class = (_temp = _class2 = /*#__PURE__*/fu
359
364
  isHoliday = function (_ref2) {var date = _ref2.date,month = _ref2.month,year = _ref2.year,isWeekend = _ref2.isWeekend;
360
365
  var dateString = _InternalDateTransformer.InternalDateTransformer.dateToInternalString({ date: date, month: month + 1, year: year });
361
366
  return _this.props.isHoliday(dateString, isWeekend);
362
- };return _this;}var _proto = DatePicker.prototype;_proto.componentDidMount = function componentDidMount() {if (this.props.useMobileNativeDatePicker && _client.isMobile) {this.setState({ canUseMobileNativeDatePicker: true });}if (this.props.autoFocus) {this.focus();}};_proto.componentDidUpdate = function componentDidUpdate() {var _this$props = this.props,disabled = _this$props.disabled,value = _this$props.value,minDate = _this$props.minDate,maxDate = _this$props.maxDate;var opened = this.state.opened;if (disabled && opened) {this.close();}this.internalDate = this.parseValueToDate(value);this.minDate = this.parseValueToDate(minDate);this.maxDate = this.parseValueToDate(maxDate);} /**
367
+ };return _this;}var _proto = DatePicker.prototype;_proto.componentDidMount = function componentDidMount() {if (this.props.useMobileNativeDatePicker && _client.isMobile) {this.setState({ canUseMobileNativeDatePicker: true });}if (this.props.autoFocus) {this.focus();}};_proto.componentDidUpdate = function componentDidUpdate() {var disabled = this.props.disabled;var opened = this.state.opened;if (disabled && opened) {this.close();}} /**
363
368
  * @public
364
369
  */;_proto.blur = function blur() {if (this.input) {this.input.blur();}this.handleBlur();} /**
365
370
  * @public
@@ -1 +1 @@
1
- {"version":3,"sources":["DatePicker.tsx"],"names":["INPUT_PASS_PROPS","autoFocus","disabled","warning","error","size","onKeyDown","MIN_WIDTH","DatePicker","rootNode","state","opened","canUseMobileNativeDatePicker","input","focused","internalDate","parseValueToDate","props","value","minDate","maxDate","setRootNode","renderMain","picker","date","toNativeFormat","getParent","menuAlign","undefined","handlePick","handleSelect","enableTodayLink","isHoliday","styles","root","getRootStyle","onMouseEnter","onMouseLeave","onMouseOver","getInputRef","handleBlur","handleFocus","onValueChange","width","minWidth","ref","setState","onFocus","close","onBlur","dateShape","blur","month","year","InternalDateTransformer","dateToInternalString","isWeekend","dateString","componentDidMount","useMobileNativeDatePicker","isMobile","focus","componentDidUpdate","render","InternalDate","validate","checks","InternalDateValidateCheck","NotNull","Native","React","PureComponent","__KONTUR_REACT_UI__","propTypes","PropTypes","bool","string","isRequired","oneOf","oneOfType","number","func","defaultProps","MIN_FULLDATE","MAX_FULLDATE","_day","range","order","InternalDateOrder","DMY","separator","InternalDateSeparator","Dot","setRangeStart","setRangeEnd","parseValue","Number","Limits","Range"],"mappings":"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","sourcesContent":["import PropTypes from 'prop-types';\nimport React from 'react';\n\nimport { InternalDate } from '../../lib/date/InternalDate';\nimport { InternalDateTransformer } from '../../lib/date/InternalDateTransformer';\nimport { MAX_FULLDATE, MIN_FULLDATE } from '../../lib/date/constants';\nimport { InternalDateOrder, InternalDateSeparator, InternalDateValidateCheck } from '../../lib/date/types';\nimport { Nullable } from '../../typings/utility-types';\nimport { CalendarDateShape } from '../../internal/Calendar';\nimport { DateInput } from '../DateInput';\nimport { DropdownContainer } from '../../internal/DropdownContainer';\nimport { filterProps } from '../../lib/filterProps';\nimport { CommonWrapper, CommonProps, CommonWrapperRestProps } from '../../internal/CommonWrapper';\nimport { isMobile } from '../../lib/client';\nimport { NativeDateInput } from '../../internal/NativeDateInput';\nimport { getRootNode, rootNode, TSetRootNode } from '../../lib/rootNode';\nimport { isNonNullable } from '../../lib/utils';\n\nimport { Picker } from './Picker';\nimport { styles } from './DatePicker.styles';\n\nconst INPUT_PASS_PROPS = {\n autoFocus: true,\n disabled: true,\n warning: true,\n error: true,\n size: true,\n onKeyDown: true,\n};\n\nexport const MIN_WIDTH = 120;\n\nexport interface DatePickerProps<T> extends CommonProps {\n autoFocus?: boolean;\n disabled?: boolean;\n enableTodayLink?: boolean;\n /**\n * Cостояние валидации при ошибке.\n */\n error?: boolean;\n minDate: T;\n maxDate: T;\n menuAlign?: 'left' | 'right';\n size?: 'small' | 'medium' | 'large';\n value?: T | null;\n /**\n * Cостояние валидации при предупреждении.\n */\n warning?: boolean;\n width?: number | string;\n onBlur?: () => void;\n /**\n * Вызывается при изменении `value`\n *\n * @param value - строка в формате `dd.mm.yyyy`.\n */\n onValueChange: (value: T) => void;\n onFocus?: () => void;\n onKeyDown?: (e: React.KeyboardEvent<any>) => void;\n onMouseEnter?: (e: React.MouseEvent<any>) => void;\n onMouseLeave?: (e: React.MouseEvent<any>) => void;\n onMouseOver?: (e: React.MouseEvent<any>) => void;\n /**\n * Использовать на мобильных устройствах нативный календарь для выбора дат.\n *\n * - На iOS нативный календарь не умеет работать с minDate и maxDate\n */\n useMobileNativeDatePicker?: boolean;\n\n /**\n * Функция для определения праздничных дней\n * @default (_day, isWeekend) => isWeekend\n * @param {T} day - строка в формате `dd.mm.yyyy`\n * @param {boolean} isWeekend - флаг выходного (суббота или воскресенье)\n *\n * @returns {boolean} `true` для выходного или `false` для рабочего дня\n */\n isHoliday: (day: T, isWeekend: boolean) => boolean;\n}\n\nexport interface DatePickerState {\n opened: boolean;\n canUseMobileNativeDatePicker: boolean;\n}\n\ntype DatePickerValue = string;\n\n@rootNode\nexport class DatePicker extends React.PureComponent<DatePickerProps<DatePickerValue>, DatePickerState> {\n public static __KONTUR_REACT_UI__ = 'DatePicker';\n\n public static propTypes = {\n autoFocus: PropTypes.bool,\n\n disabled: PropTypes.bool,\n\n /**\n * Включает кнопку сегодня в календаре\n */\n enableTodayLink: PropTypes.bool,\n\n error: PropTypes.bool,\n\n /**\n * Максимальная дата в календаре.\n */\n maxDate: PropTypes.string.isRequired,\n\n menuAlign: PropTypes.oneOf(['left', 'right'] as Array<'left' | 'right'>),\n\n /**\n * Минимальная дата в календаре.\n */\n minDate: PropTypes.string.isRequired,\n\n /**\n * Строка формата `dd.mm.yyyy`\n */\n value: PropTypes.string,\n\n warning: PropTypes.bool,\n\n width: PropTypes.oneOfType([PropTypes.number, PropTypes.string]).isRequired,\n\n onBlur: PropTypes.func,\n\n onValueChange: PropTypes.func.isRequired,\n\n onFocus: PropTypes.func,\n\n onKeyDown: PropTypes.func,\n\n onMouseEnter: PropTypes.func,\n\n onMouseLeave: PropTypes.func,\n\n onMouseOver: PropTypes.func,\n\n isHoliday: PropTypes.func.isRequired,\n };\n\n public static defaultProps = {\n minDate: MIN_FULLDATE,\n maxDate: MAX_FULLDATE,\n isHoliday: (_day: DatePickerValue, isWeekend: boolean) => isWeekend,\n };\n\n public static validate = (value: Nullable<string>, range: { minDate?: string; maxDate?: string } = {}) => {\n if (!value) {\n return false;\n }\n\n const { minDate = MIN_FULLDATE, maxDate = MAX_FULLDATE } = range;\n const internalDate = new InternalDate({\n order: InternalDateOrder.DMY,\n separator: InternalDateSeparator.Dot,\n })\n .setRangeStart(new InternalDate({ value: minDate }))\n .setRangeEnd(new InternalDate({ value: maxDate }))\n .parseValue(value);\n\n return internalDate.validate({\n checks: [\n InternalDateValidateCheck.NotNull,\n InternalDateValidateCheck.Number,\n InternalDateValidateCheck.Native,\n InternalDateValidateCheck.Limits,\n InternalDateValidateCheck.Range,\n ],\n });\n };\n\n public state: DatePickerState = { opened: false, canUseMobileNativeDatePicker: false };\n\n private input: DateInput | null = null;\n private focused = false;\n private internalDate?: InternalDate = this.parseValueToDate(this.props.value);\n private minDate?: InternalDate = this.parseValueToDate(this.props.minDate);\n private maxDate?: InternalDate = this.parseValueToDate(this.props.maxDate);\n private setRootNode!: TSetRootNode;\n\n public componentDidMount() {\n if (this.props.useMobileNativeDatePicker && isMobile) {\n this.setState({\n canUseMobileNativeDatePicker: true,\n });\n }\n if (this.props.autoFocus) {\n this.focus();\n }\n }\n\n public componentDidUpdate() {\n const { disabled, value, minDate, maxDate } = this.props;\n const { opened } = this.state;\n if (disabled && opened) {\n this.close();\n }\n this.internalDate = this.parseValueToDate(value);\n this.minDate = this.parseValueToDate(minDate);\n this.maxDate = this.parseValueToDate(maxDate);\n }\n\n /**\n * @public\n */\n public blur() {\n if (this.input) {\n this.input.blur();\n }\n this.handleBlur();\n }\n\n /**\n * @public\n */\n public focus() {\n if (this.props.disabled) {\n return;\n }\n if (this.input) {\n this.input.focus();\n }\n this.handleFocus();\n }\n\n /**\n * Закрывает выпадашку выбора дня\n * @public\n */\n public close() {\n this.setState({ opened: false });\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<DatePickerProps<DatePickerValue>>) => {\n let picker = null;\n const date = this.internalDate ? this.internalDate.toNativeFormat() : null;\n if (this.state.opened) {\n picker = (\n <DropdownContainer getParent={this.getParent} offsetY={2} align={this.props.menuAlign}>\n <Picker\n value={date}\n minDate={(this.minDate && this.minDate.toNativeFormat()) || undefined}\n maxDate={(this.maxDate && this.maxDate.toNativeFormat()) || undefined}\n onPick={this.handlePick}\n onSelect={this.handleSelect}\n enableTodayLink={this.props.enableTodayLink}\n isHoliday={this.isHoliday}\n />\n </DropdownContainer>\n );\n }\n\n return (\n <label\n className={styles.root()}\n style={this.getRootStyle()}\n onMouseEnter={this.props.onMouseEnter}\n onMouseLeave={this.props.onMouseLeave}\n onMouseOver={this.props.onMouseOver}\n >\n <DateInput\n {...filterProps(props, INPUT_PASS_PROPS)}\n ref={this.getInputRef}\n value={this.props.value || ''}\n width=\"100%\"\n withIcon\n minDate={this.props.minDate}\n maxDate={this.props.maxDate}\n onBlur={this.handleBlur}\n onFocus={this.handleFocus}\n onValueChange={this.props.onValueChange}\n />\n {this.state.canUseMobileNativeDatePicker && (\n <NativeDateInput\n onValueChange={this.props.onValueChange}\n value={this.props.value || ''}\n minDate={this.props.minDate}\n maxDate={this.props.maxDate}\n disabled={this.props.disabled}\n />\n )}\n {!this.state.canUseMobileNativeDatePicker && picker}\n </label>\n );\n };\n\n public getParent = () => {\n return getRootNode(this);\n };\n\n private getRootStyle = () => {\n const { width } = this.props;\n return isNonNullable(width) ? { width } : { minWidth: MIN_WIDTH };\n };\n\n private getInputRef = (ref: DateInput | null) => {\n this.input = ref;\n };\n\n private parseValueToDate(value?: Nullable<string>): InternalDate | undefined {\n if (value === undefined || value === null) {\n return undefined;\n }\n const date = new InternalDate({ value });\n if (date.validate({ checks: [InternalDateValidateCheck.NotNull, InternalDateValidateCheck.Native] })) {\n return date;\n }\n return undefined;\n }\n\n private handleFocus = () => {\n if (this.focused) {\n return;\n }\n\n this.focused = true;\n\n this.setState({ opened: true });\n\n if (this.props.onFocus) {\n this.props.onFocus();\n }\n };\n\n private handleBlur = () => {\n if (!this.focused) {\n return;\n }\n\n this.focused = false;\n this.close();\n\n if (this.props.onBlur) {\n this.props.onBlur();\n }\n };\n\n private handlePick = (dateShape: CalendarDateShape) => {\n this.handleSelect(dateShape);\n this.blur();\n };\n\n private handleSelect = ({ date, month, year }: CalendarDateShape) => {\n const value = InternalDateTransformer.dateToInternalString({ date, month: month + 1, year });\n if (this.props.onValueChange) {\n this.props.onValueChange(value);\n }\n };\n\n private isHoliday = ({ date, month, year, isWeekend }: CalendarDateShape & { isWeekend: boolean }) => {\n const dateString = InternalDateTransformer.dateToInternalString({ date, month: month + 1, year });\n return this.props.isHoliday(dateString, isWeekend);\n };\n}\n"]}
1
+ {"version":3,"sources":["DatePicker.tsx"],"names":["INPUT_PASS_PROPS","autoFocus","disabled","warning","error","size","onKeyDown","MIN_WIDTH","DatePicker","rootNode","state","opened","canUseMobileNativeDatePicker","input","focused","setRootNode","renderMain","props","picker","value","minDate","maxDate","internalDate","parseValueToDate","date","toNativeFormat","parsedMinDate","formattedMinDate","undefined","parsedMaxDate","formattedMaxDate","getParent","menuAlign","handlePick","handleSelect","enableTodayLink","isHoliday","styles","root","getRootStyle","onMouseEnter","onMouseLeave","onMouseOver","getInputRef","handleBlur","handleFocus","onValueChange","width","minWidth","ref","setState","onFocus","close","onBlur","dateShape","blur","month","year","InternalDateTransformer","dateToInternalString","isWeekend","dateString","componentDidMount","useMobileNativeDatePicker","isMobile","focus","componentDidUpdate","render","InternalDate","validate","checks","InternalDateValidateCheck","NotNull","Native","React","PureComponent","__KONTUR_REACT_UI__","propTypes","PropTypes","bool","string","isRequired","oneOf","oneOfType","number","func","defaultProps","MIN_FULLDATE","MAX_FULLDATE","_day","range","order","InternalDateOrder","DMY","separator","InternalDateSeparator","Dot","setRangeStart","setRangeEnd","parseValue","Number","Limits","Range"],"mappings":"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","sourcesContent":["import PropTypes from 'prop-types';\nimport React from 'react';\n\nimport { InternalDate } from '../../lib/date/InternalDate';\nimport { InternalDateTransformer } from '../../lib/date/InternalDateTransformer';\nimport { MAX_FULLDATE, MIN_FULLDATE } from '../../lib/date/constants';\nimport { InternalDateOrder, InternalDateSeparator, InternalDateValidateCheck } from '../../lib/date/types';\nimport { Nullable } from '../../typings/utility-types';\nimport { CalendarDateShape } from '../../internal/Calendar';\nimport { DateInput } from '../DateInput';\nimport { DropdownContainer } from '../../internal/DropdownContainer';\nimport { filterProps } from '../../lib/filterProps';\nimport { CommonWrapper, CommonProps, CommonWrapperRestProps } from '../../internal/CommonWrapper';\nimport { isMobile } from '../../lib/client';\nimport { NativeDateInput } from '../../internal/NativeDateInput';\nimport { getRootNode, rootNode, TSetRootNode } from '../../lib/rootNode';\nimport { isNonNullable } from '../../lib/utils';\n\nimport { Picker } from './Picker';\nimport { styles } from './DatePicker.styles';\n\nconst INPUT_PASS_PROPS = {\n autoFocus: true,\n disabled: true,\n warning: true,\n error: true,\n size: true,\n onKeyDown: true,\n};\n\nexport const MIN_WIDTH = 120;\n\nexport interface DatePickerProps<T> extends CommonProps {\n autoFocus?: boolean;\n disabled?: boolean;\n enableTodayLink?: boolean;\n /**\n * Cостояние валидации при ошибке.\n */\n error?: boolean;\n minDate: T;\n maxDate: T;\n menuAlign?: 'left' | 'right';\n size?: 'small' | 'medium' | 'large';\n value?: T | null;\n /**\n * Cостояние валидации при предупреждении.\n */\n warning?: boolean;\n width?: number | string;\n onBlur?: () => void;\n /**\n * Вызывается при изменении `value`\n *\n * @param value - строка в формате `dd.mm.yyyy`.\n */\n onValueChange: (value: T) => void;\n onFocus?: () => void;\n onKeyDown?: (e: React.KeyboardEvent<any>) => void;\n onMouseEnter?: (e: React.MouseEvent<any>) => void;\n onMouseLeave?: (e: React.MouseEvent<any>) => void;\n onMouseOver?: (e: React.MouseEvent<any>) => void;\n /**\n * Использовать на мобильных устройствах нативный календарь для выбора дат.\n *\n * - На iOS нативный календарь не умеет работать с minDate и maxDate\n */\n useMobileNativeDatePicker?: boolean;\n\n /**\n * Функция для определения праздничных дней\n * @default (_day, isWeekend) => isWeekend\n * @param {T} day - строка в формате `dd.mm.yyyy`\n * @param {boolean} isWeekend - флаг выходного (суббота или воскресенье)\n *\n * @returns {boolean} `true` для выходного или `false` для рабочего дня\n */\n isHoliday: (day: T, isWeekend: boolean) => boolean;\n}\n\nexport interface DatePickerState {\n opened: boolean;\n canUseMobileNativeDatePicker: boolean;\n}\n\ntype DatePickerValue = string;\n\n@rootNode\nexport class DatePicker extends React.PureComponent<DatePickerProps<DatePickerValue>, DatePickerState> {\n public static __KONTUR_REACT_UI__ = 'DatePicker';\n\n public static propTypes = {\n autoFocus: PropTypes.bool,\n\n disabled: PropTypes.bool,\n\n /**\n * Включает кнопку сегодня в календаре\n */\n enableTodayLink: PropTypes.bool,\n\n error: PropTypes.bool,\n\n /**\n * Максимальная дата в календаре.\n */\n maxDate: PropTypes.string.isRequired,\n\n menuAlign: PropTypes.oneOf(['left', 'right'] as Array<'left' | 'right'>),\n\n /**\n * Минимальная дата в календаре.\n */\n minDate: PropTypes.string.isRequired,\n\n /**\n * Строка формата `dd.mm.yyyy`\n */\n value: PropTypes.string,\n\n warning: PropTypes.bool,\n\n width: PropTypes.oneOfType([PropTypes.number, PropTypes.string]).isRequired,\n\n onBlur: PropTypes.func,\n\n onValueChange: PropTypes.func.isRequired,\n\n onFocus: PropTypes.func,\n\n onKeyDown: PropTypes.func,\n\n onMouseEnter: PropTypes.func,\n\n onMouseLeave: PropTypes.func,\n\n onMouseOver: PropTypes.func,\n\n isHoliday: PropTypes.func.isRequired,\n };\n\n public static defaultProps = {\n minDate: MIN_FULLDATE,\n maxDate: MAX_FULLDATE,\n isHoliday: (_day: DatePickerValue, isWeekend: boolean) => isWeekend,\n };\n\n public static validate = (value: Nullable<string>, range: { minDate?: string; maxDate?: string } = {}) => {\n if (!value) {\n return false;\n }\n\n const { minDate = MIN_FULLDATE, maxDate = MAX_FULLDATE } = range;\n const internalDate = new InternalDate({\n order: InternalDateOrder.DMY,\n separator: InternalDateSeparator.Dot,\n })\n .setRangeStart(new InternalDate({ value: minDate }))\n .setRangeEnd(new InternalDate({ value: maxDate }))\n .parseValue(value);\n\n return internalDate.validate({\n checks: [\n InternalDateValidateCheck.NotNull,\n InternalDateValidateCheck.Number,\n InternalDateValidateCheck.Native,\n InternalDateValidateCheck.Limits,\n InternalDateValidateCheck.Range,\n ],\n });\n };\n\n public state: DatePickerState = { opened: false, canUseMobileNativeDatePicker: false };\n\n private input: DateInput | null = null;\n private focused = false;\n private setRootNode!: TSetRootNode;\n\n public componentDidMount() {\n if (this.props.useMobileNativeDatePicker && isMobile) {\n this.setState({\n canUseMobileNativeDatePicker: true,\n });\n }\n if (this.props.autoFocus) {\n this.focus();\n }\n }\n\n public componentDidUpdate() {\n const { disabled } = this.props;\n const { opened } = this.state;\n if (disabled && opened) {\n this.close();\n }\n }\n\n /**\n * @public\n */\n public blur() {\n if (this.input) {\n this.input.blur();\n }\n this.handleBlur();\n }\n\n /**\n * @public\n */\n public focus() {\n if (this.props.disabled) {\n return;\n }\n if (this.input) {\n this.input.focus();\n }\n this.handleFocus();\n }\n\n /**\n * Закрывает выпадашку выбора дня\n * @public\n */\n public close() {\n this.setState({ opened: false });\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<DatePickerProps<DatePickerValue>>) => {\n let picker = null;\n\n const { value, minDate, maxDate } = this.props;\n\n const internalDate = this.parseValueToDate(value);\n const date = internalDate ? internalDate.toNativeFormat() : null;\n\n const parsedMinDate = this.parseValueToDate(minDate);\n const formattedMinDate = (parsedMinDate && parsedMinDate.toNativeFormat()) || undefined;\n\n const parsedMaxDate = this.parseValueToDate(maxDate);\n const formattedMaxDate = (parsedMaxDate && parsedMaxDate.toNativeFormat()) || undefined;\n\n if (this.state.opened) {\n picker = (\n <DropdownContainer getParent={this.getParent} offsetY={2} align={this.props.menuAlign}>\n <Picker\n value={date}\n minDate={formattedMinDate}\n maxDate={formattedMaxDate}\n onPick={this.handlePick}\n onSelect={this.handleSelect}\n enableTodayLink={this.props.enableTodayLink}\n isHoliday={this.isHoliday}\n />\n </DropdownContainer>\n );\n }\n\n return (\n <label\n className={styles.root()}\n style={this.getRootStyle()}\n onMouseEnter={this.props.onMouseEnter}\n onMouseLeave={this.props.onMouseLeave}\n onMouseOver={this.props.onMouseOver}\n >\n <DateInput\n {...filterProps(props, INPUT_PASS_PROPS)}\n ref={this.getInputRef}\n value={this.props.value || ''}\n width=\"100%\"\n withIcon\n minDate={this.props.minDate}\n maxDate={this.props.maxDate}\n onBlur={this.handleBlur}\n onFocus={this.handleFocus}\n onValueChange={this.props.onValueChange}\n />\n {this.state.canUseMobileNativeDatePicker && (\n <NativeDateInput\n onValueChange={this.props.onValueChange}\n value={this.props.value || ''}\n minDate={this.props.minDate}\n maxDate={this.props.maxDate}\n disabled={this.props.disabled}\n />\n )}\n {!this.state.canUseMobileNativeDatePicker && picker}\n </label>\n );\n };\n\n public getParent = () => {\n return getRootNode(this);\n };\n\n private getRootStyle = () => {\n const { width } = this.props;\n return isNonNullable(width) ? { width } : { minWidth: MIN_WIDTH };\n };\n\n private getInputRef = (ref: DateInput | null) => {\n this.input = ref;\n };\n\n private parseValueToDate(value?: Nullable<string>): InternalDate | undefined {\n if (value === undefined || value === null) {\n return undefined;\n }\n const date = new InternalDate({ value });\n if (date.validate({ checks: [InternalDateValidateCheck.NotNull, InternalDateValidateCheck.Native] })) {\n return date;\n }\n return undefined;\n }\n\n private handleFocus = () => {\n if (this.focused) {\n return;\n }\n\n this.focused = true;\n\n this.setState({ opened: true });\n\n if (this.props.onFocus) {\n this.props.onFocus();\n }\n };\n\n private handleBlur = () => {\n if (!this.focused) {\n return;\n }\n\n this.focused = false;\n this.close();\n\n if (this.props.onBlur) {\n this.props.onBlur();\n }\n };\n\n private handlePick = (dateShape: CalendarDateShape) => {\n this.handleSelect(dateShape);\n this.blur();\n };\n\n private handleSelect = ({ date, month, year }: CalendarDateShape) => {\n const value = InternalDateTransformer.dateToInternalString({ date, month: month + 1, year });\n if (this.props.onValueChange) {\n this.props.onValueChange(value);\n }\n };\n\n private isHoliday = ({ date, month, year, isWeekend }: CalendarDateShape & { isWeekend: boolean }) => {\n const dateString = InternalDateTransformer.dateToInternalString({ date, month: month + 1, year });\n return this.props.isHoliday(dateString, isWeekend);\n };\n}\n"]}
@@ -28,10 +28,10 @@ export declare class DropdownContainer extends React.PureComponent<DropdownConta
28
28
  offsetX: number;
29
29
  offsetY: number;
30
30
  };
31
- state: DropdownContainerState;
32
31
  private getProps;
33
32
  private dom;
34
33
  private layoutSub;
34
+ constructor(props: DropdownContainerProps);
35
35
  componentDidMount(): void;
36
36
  componentWillUnmount(): void;
37
37
  render(): JSX.Element;
@@ -33,7 +33,7 @@ var _DropdownContainer = require("./DropdownContainer.styles");var
33
33
 
34
34
 
35
35
 
36
- DropdownContainer = /*#__PURE__*/function (_React$PureComponent) {(0, _inheritsLoose2.default)(DropdownContainer, _React$PureComponent);function DropdownContainer() {var _this;for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {args[_key] = arguments[_key];}_this = _React$PureComponent.call.apply(_React$PureComponent, [this].concat(args)) || this;_this.
36
+ DropdownContainer = /*#__PURE__*/function (_React$PureComponent) {(0, _inheritsLoose2.default)(DropdownContainer, _React$PureComponent);
37
37
 
38
38
 
39
39
 
@@ -43,22 +43,13 @@ DropdownContainer = /*#__PURE__*/function (_React$PureComponent) {(0, _inheritsL
43
43
 
44
44
 
45
45
 
46
- state = {
47
- position: null,
48
- minWidth: 0,
49
- isDocumentElementRoot: true };_this.
50
-
51
-
52
- getProps = (0, _createPropsGetter.createPropsGetter)(DropdownContainer.defaultProps);_this.
53
-
54
- dom = void 0;_this.
55
- layoutSub = void 0;_this.
56
-
57
46
 
58
47
 
59
48
 
60
49
 
61
50
 
51
+ function DropdownContainer(props) {var _this;
52
+ _this = _React$PureComponent.call(this, props) || this;_this.getProps = (0, _createPropsGetter.createPropsGetter)(DropdownContainer.defaultProps);_this.dom = void 0;_this.layoutSub = void 0;_this.
62
53
 
63
54
 
64
55
 
@@ -207,4 +198,15 @@ DropdownContainer = /*#__PURE__*/function (_React$PureComponent) {(0, _inheritsL
207
198
  left: offsetX,
208
199
  right: null };
209
200
 
210
- };return _this;}var _proto = DropdownContainer.prototype;_proto.componentDidMount = function componentDidMount() {this.position();this.layoutSub = LayoutEvents.addListener(this.position);var _document2 = document,body = _document2.body,docEl = _document2.documentElement;var htmlPosition = getComputedStyle(docEl).position;var bodyPosition = getComputedStyle(body).position;var hasLimitedHeightRoot = body.scrollHeight > body.clientHeight;var hasStaticRoot = htmlPosition === 'static' && bodyPosition === 'static';this.setState({ isDocumentElementRoot: hasLimitedHeightRoot || hasStaticRoot });};_proto.componentWillUnmount = function componentWillUnmount() {if (this.layoutSub) {this.layoutSub.remove();}};_proto.render = function render() {var _cx;var style = { position: 'absolute', top: '0' };if (this.state.position) {var _this$state$position = this.state.position,top = _this$state$position.top,bottom = _this$state$position.bottom,left = _this$state$position.left,right = _this$state$position.right;style = (0, _extends2.default)({}, style, { top: top !== null ? top : undefined, bottom: bottom !== null ? bottom : undefined, left: left !== null ? left : undefined, right: right !== null ? right : undefined, minWidth: this.state.minWidth, maxWidth: this.props.hasFixedWidth ? this.state.minWidth : undefined });}var content = /*#__PURE__*/_react.default.createElement(_ZIndex.ZIndex, { priority: 'DropdownContainer', wrapperRef: this.ZIndexRef, style: style, className: (0, _Emotion.cx)((_cx = {}, _cx[_DropdownContainer.styles.alignRight()] = this.props.align === 'right' && !_client.isIE11, _cx)) }, this.props.children);return this.props.disablePortal ? content : /*#__PURE__*/_react.default.createElement(_RenderContainer.RenderContainer, null, content);};return DropdownContainer;}(_react.default.PureComponent);exports.DropdownContainer = DropdownContainer;DropdownContainer.__KONTUR_REACT_UI__ = 'DropdownContainer';DropdownContainer.defaultProps = { align: 'left', disablePortal: false, offsetX: 0, offsetY: -1 };
201
+ };_this.state = { position: null, minWidth: 0, isDocumentElementRoot: getIsDocumentElementRoot() };return _this;}var _proto = DropdownContainer.prototype;_proto.componentDidMount = function componentDidMount() {this.position();this.layoutSub = LayoutEvents.addListener(this.position);};_proto.componentWillUnmount = function componentWillUnmount() {if (this.layoutSub) {this.layoutSub.remove();}};_proto.render = function render() {var _cx;var style = { position: 'absolute', top: '0' };if (this.state.position) {var _this$state$position = this.state.position,top = _this$state$position.top,bottom = _this$state$position.bottom,left = _this$state$position.left,right = _this$state$position.right;style = (0, _extends2.default)({}, style, { top: top !== null ? top : undefined, bottom: bottom !== null ? bottom : undefined, left: left !== null ? left : undefined, right: right !== null ? right : undefined, minWidth: this.state.minWidth, maxWidth: this.props.hasFixedWidth ? this.state.minWidth : undefined });}var content = /*#__PURE__*/_react.default.createElement(_ZIndex.ZIndex, { priority: 'DropdownContainer', wrapperRef: this.ZIndexRef, style: style, className: (0, _Emotion.cx)((_cx = {}, _cx[_DropdownContainer.styles.alignRight()] = this.props.align === 'right' && !_client.isIE11, _cx)) }, this.props.children);return this.props.disablePortal ? content : /*#__PURE__*/_react.default.createElement(_RenderContainer.RenderContainer, null, content);};return DropdownContainer;}(_react.default.PureComponent);exports.DropdownContainer = DropdownContainer;DropdownContainer.__KONTUR_REACT_UI__ = 'DropdownContainer';DropdownContainer.defaultProps = { align: 'left', disablePortal: false, offsetX: 0, offsetY: -1 };
202
+
203
+
204
+ var getIsDocumentElementRoot = function getIsDocumentElementRoot() {var _document2 =
205
+ document,body = _document2.body,documentElement = _document2.documentElement;
206
+ var htmlPosition = getComputedStyle(documentElement).position;
207
+ var bodyPosition = getComputedStyle(body).position;
208
+
209
+ var hasLimitedHeightRoot = body.scrollHeight > body.clientHeight;
210
+ var hasStaticRoot = htmlPosition === 'static' && bodyPosition === 'static';
211
+ return hasLimitedHeightRoot || hasStaticRoot;
212
+ };
@@ -1 +1 @@
1
- {"version":3,"sources":["DropdownContainer.tsx"],"names":["DropdownContainer","state","position","minWidth","isDocumentElementRoot","getProps","defaultProps","dom","layoutSub","ZIndexRef","element","isElement","node","Element","target","props","getParent","targetRect","getBoundingClientRect","document","body","docEl","documentElement","Error","scrollX","window","pageXOffset","scrollLeft","scrollY","pageYOffset","scrollTop","left","right","align","docWidth","offsetWidth","offsetX","offsetY","bottom","top","distanceToBottom","clientHeight","dropdownHeight","getHeight","scrollHeight","setState","getMinWidth","disablePortal","convertToRelativePosition","child","children","item","height","width","targetHeight","componentDidMount","LayoutEvents","addListener","htmlPosition","getComputedStyle","bodyPosition","hasLimitedHeightRoot","hasStaticRoot","componentWillUnmount","remove","render","style","undefined","maxWidth","hasFixedWidth","content","styles","alignRight","isIE11","React","PureComponent","__KONTUR_REACT_UI__"],"mappings":"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","sourcesContent":["import React from 'react';\n\nimport * as LayoutEvents from '../../lib/LayoutEvents';\nimport { RenderContainer } from '../RenderContainer';\nimport { ZIndex } from '../ZIndex';\nimport { createPropsGetter } from '../../lib/createPropsGetter';\nimport { Nullable } from '../../typings/utility-types';\nimport { cx } from '../../lib/theming/Emotion';\nimport { isIE11 } from '../../lib/client';\n\nimport { styles } from './DropdownContainer.styles';\n\nexport interface DropdownContainerPosition {\n top: Nullable<number>;\n bottom: Nullable<number>;\n left: Nullable<number>;\n right: Nullable<number>;\n}\n\nexport interface DropdownContainerProps {\n align?: 'left' | 'right';\n getParent: () => Nullable<HTMLElement>;\n children?: React.ReactNode;\n disablePortal?: boolean;\n offsetY?: number;\n offsetX?: number;\n hasFixedWidth?: boolean;\n}\n\nexport interface DropdownContainerState {\n position: Nullable<DropdownContainerPosition>;\n minWidth: number;\n isDocumentElementRoot?: boolean;\n}\n\nexport class DropdownContainer extends React.PureComponent<DropdownContainerProps, DropdownContainerState> {\n public static __KONTUR_REACT_UI__ = 'DropdownContainer';\n\n public static defaultProps = {\n align: 'left',\n disablePortal: false,\n offsetX: 0,\n offsetY: -1,\n };\n\n public state: DropdownContainerState = {\n position: null,\n minWidth: 0,\n isDocumentElementRoot: true,\n };\n\n private getProps = createPropsGetter(DropdownContainer.defaultProps);\n\n private dom: Nullable<HTMLDivElement>;\n private layoutSub: Nullable<ReturnType<typeof LayoutEvents.addListener>>;\n\n public componentDidMount() {\n this.position();\n this.layoutSub = LayoutEvents.addListener(this.position);\n\n const { body, documentElement: docEl } = document;\n const htmlPosition = getComputedStyle(docEl).position;\n const bodyPosition = getComputedStyle(body).position;\n\n const hasLimitedHeightRoot = body.scrollHeight > body.clientHeight;\n const hasStaticRoot = htmlPosition === 'static' && bodyPosition === 'static';\n\n this.setState({ isDocumentElementRoot: hasLimitedHeightRoot || hasStaticRoot });\n }\n\n public componentWillUnmount() {\n if (this.layoutSub) {\n this.layoutSub.remove();\n }\n }\n\n public render() {\n let style: React.CSSProperties = {\n position: 'absolute',\n top: '0',\n };\n if (this.state.position) {\n const { top, bottom, left, right } = this.state.position;\n style = {\n ...style,\n top: top !== null ? top : undefined,\n bottom: bottom !== null ? bottom : undefined,\n left: left !== null ? left : undefined,\n right: right !== null ? right : undefined,\n minWidth: this.state.minWidth,\n maxWidth: this.props.hasFixedWidth ? this.state.minWidth : undefined,\n };\n }\n\n const content = (\n <ZIndex\n priority={'DropdownContainer'}\n wrapperRef={this.ZIndexRef}\n style={style}\n className={cx({\n [styles.alignRight()]: this.props.align === 'right' && !isIE11,\n })}\n >\n {this.props.children}\n </ZIndex>\n );\n\n return this.props.disablePortal ? content : <RenderContainer>{content}</RenderContainer>;\n }\n\n private ZIndexRef = (element: Nullable<HTMLDivElement>) => {\n this.dom = element;\n };\n\n private isElement = (node: Nullable<Element>): node is Element => {\n return node instanceof Element;\n };\n\n public position = () => {\n const target = this.props.getParent();\n const dom = this.dom;\n\n if (target && this.isElement(target) && dom) {\n const targetRect = target.getBoundingClientRect();\n const { body, documentElement: docEl } = document;\n\n if (!docEl) {\n throw Error('There is no \"documentElement\" in \"document\"');\n }\n\n const scrollX = window.pageXOffset || docEl.scrollLeft || 0;\n const scrollY = window.pageYOffset || docEl.scrollTop || 0;\n\n let left = null;\n let right = null;\n\n if (this.props.align === 'right') {\n const docWidth = docEl.offsetWidth || 0;\n right = docWidth - (targetRect.right + scrollX) + this.getProps().offsetX;\n } else {\n left = targetRect.left + scrollX + this.getProps().offsetX;\n }\n\n const { offsetY = 0 } = this.props;\n let bottom = null;\n let top: number | null = targetRect.bottom + scrollY + offsetY;\n\n const distanceToBottom = docEl.clientHeight - targetRect.bottom;\n const dropdownHeight = this.getHeight();\n\n if (distanceToBottom < dropdownHeight && targetRect.top > dropdownHeight) {\n const clientHeight = this.state.isDocumentElementRoot ? docEl.clientHeight : body.scrollHeight;\n\n top = null;\n bottom = clientHeight + offsetY - scrollY - targetRect.top;\n }\n\n const position = {\n top,\n left,\n right,\n bottom,\n };\n\n this.setState({\n minWidth: this.getMinWidth(),\n position: this.props.disablePortal ? this.convertToRelativePosition(position) : position,\n });\n }\n };\n\n private getHeight = () => {\n if (!this.isElement(this.dom)) {\n return 0;\n }\n const child = this.dom.children.item(0);\n if (!child) {\n return 0;\n }\n return child.getBoundingClientRect().height;\n };\n\n private getMinWidth = () => {\n const target = this.props.getParent();\n if (!target || !this.isElement(target)) {\n return 0;\n }\n return target.getBoundingClientRect().width;\n };\n\n private convertToRelativePosition = (position: DropdownContainerPosition): DropdownContainerPosition => {\n const target = this.props.getParent();\n const { offsetX = 0, offsetY = 0 } = this.props;\n const { top, bottom, left, right } = position;\n if (target && this.isElement(target)) {\n const targetHeight = target.getBoundingClientRect().height;\n return {\n top: top !== null ? targetHeight + offsetY : null,\n bottom: bottom !== null ? targetHeight + offsetY : null,\n left: left !== null ? offsetX : null,\n right: right !== null ? offsetX : null,\n };\n }\n return {\n top: offsetY,\n bottom: null,\n left: offsetX,\n right: null,\n };\n };\n}\n"]}
1
+ {"version":3,"sources":["DropdownContainer.tsx"],"names":["DropdownContainer","props","getProps","defaultProps","dom","layoutSub","ZIndexRef","element","isElement","node","Element","position","target","getParent","targetRect","getBoundingClientRect","document","body","docEl","documentElement","Error","scrollX","window","pageXOffset","scrollLeft","scrollY","pageYOffset","scrollTop","left","right","align","docWidth","offsetWidth","offsetX","offsetY","bottom","top","distanceToBottom","clientHeight","dropdownHeight","getHeight","state","isDocumentElementRoot","scrollHeight","setState","minWidth","getMinWidth","disablePortal","convertToRelativePosition","child","children","item","height","width","targetHeight","getIsDocumentElementRoot","componentDidMount","LayoutEvents","addListener","componentWillUnmount","remove","render","style","undefined","maxWidth","hasFixedWidth","content","styles","alignRight","isIE11","React","PureComponent","__KONTUR_REACT_UI__","htmlPosition","getComputedStyle","bodyPosition","hasLimitedHeightRoot","hasStaticRoot"],"mappings":"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","sourcesContent":["import React from 'react';\n\nimport * as LayoutEvents from '../../lib/LayoutEvents';\nimport { RenderContainer } from '../RenderContainer';\nimport { ZIndex } from '../ZIndex';\nimport { createPropsGetter } from '../../lib/createPropsGetter';\nimport { Nullable } from '../../typings/utility-types';\nimport { cx } from '../../lib/theming/Emotion';\nimport { isIE11 } from '../../lib/client';\n\nimport { styles } from './DropdownContainer.styles';\n\nexport interface DropdownContainerPosition {\n top: Nullable<number>;\n bottom: Nullable<number>;\n left: Nullable<number>;\n right: Nullable<number>;\n}\n\nexport interface DropdownContainerProps {\n align?: 'left' | 'right';\n getParent: () => Nullable<HTMLElement>;\n children?: React.ReactNode;\n disablePortal?: boolean;\n offsetY?: number;\n offsetX?: number;\n hasFixedWidth?: boolean;\n}\n\nexport interface DropdownContainerState {\n position: Nullable<DropdownContainerPosition>;\n minWidth: number;\n isDocumentElementRoot?: boolean;\n}\n\nexport class DropdownContainer extends React.PureComponent<DropdownContainerProps, DropdownContainerState> {\n public static __KONTUR_REACT_UI__ = 'DropdownContainer';\n\n public static defaultProps = {\n align: 'left',\n disablePortal: false,\n offsetX: 0,\n offsetY: -1,\n };\n\n private getProps = createPropsGetter(DropdownContainer.defaultProps);\n\n private dom: Nullable<HTMLDivElement>;\n private layoutSub: Nullable<ReturnType<typeof LayoutEvents.addListener>>;\n\n constructor(props: DropdownContainerProps) {\n super(props);\n\n this.state = { position: null, minWidth: 0, isDocumentElementRoot: getIsDocumentElementRoot() };\n }\n\n public componentDidMount() {\n this.position();\n this.layoutSub = LayoutEvents.addListener(this.position);\n }\n\n public componentWillUnmount() {\n if (this.layoutSub) {\n this.layoutSub.remove();\n }\n }\n\n public render() {\n let style: React.CSSProperties = {\n position: 'absolute',\n top: '0',\n };\n if (this.state.position) {\n const { top, bottom, left, right } = this.state.position;\n style = {\n ...style,\n top: top !== null ? top : undefined,\n bottom: bottom !== null ? bottom : undefined,\n left: left !== null ? left : undefined,\n right: right !== null ? right : undefined,\n minWidth: this.state.minWidth,\n maxWidth: this.props.hasFixedWidth ? this.state.minWidth : undefined,\n };\n }\n\n const content = (\n <ZIndex\n priority={'DropdownContainer'}\n wrapperRef={this.ZIndexRef}\n style={style}\n className={cx({\n [styles.alignRight()]: this.props.align === 'right' && !isIE11,\n })}\n >\n {this.props.children}\n </ZIndex>\n );\n\n return this.props.disablePortal ? content : <RenderContainer>{content}</RenderContainer>;\n }\n\n private ZIndexRef = (element: Nullable<HTMLDivElement>) => {\n this.dom = element;\n };\n\n private isElement = (node: Nullable<Element>): node is Element => {\n return node instanceof Element;\n };\n\n public position = () => {\n const target = this.props.getParent();\n const dom = this.dom;\n\n if (target && this.isElement(target) && dom) {\n const targetRect = target.getBoundingClientRect();\n const { body, documentElement: docEl } = document;\n\n if (!docEl) {\n throw Error('There is no \"documentElement\" in \"document\"');\n }\n\n const scrollX = window.pageXOffset || docEl.scrollLeft || 0;\n const scrollY = window.pageYOffset || docEl.scrollTop || 0;\n\n let left = null;\n let right = null;\n\n if (this.props.align === 'right') {\n const docWidth = docEl.offsetWidth || 0;\n right = docWidth - (targetRect.right + scrollX) + this.getProps().offsetX;\n } else {\n left = targetRect.left + scrollX + this.getProps().offsetX;\n }\n\n const { offsetY = 0 } = this.props;\n let bottom = null;\n let top: number | null = targetRect.bottom + scrollY + offsetY;\n\n const distanceToBottom = docEl.clientHeight - targetRect.bottom;\n const dropdownHeight = this.getHeight();\n\n if (distanceToBottom < dropdownHeight && targetRect.top > dropdownHeight) {\n const clientHeight = this.state.isDocumentElementRoot ? docEl.clientHeight : body.scrollHeight;\n\n top = null;\n bottom = clientHeight + offsetY - scrollY - targetRect.top;\n }\n\n const position = {\n top,\n left,\n right,\n bottom,\n };\n\n this.setState({\n minWidth: this.getMinWidth(),\n position: this.props.disablePortal ? this.convertToRelativePosition(position) : position,\n });\n }\n };\n\n private getHeight = () => {\n if (!this.isElement(this.dom)) {\n return 0;\n }\n const child = this.dom.children.item(0);\n if (!child) {\n return 0;\n }\n return child.getBoundingClientRect().height;\n };\n\n private getMinWidth = () => {\n const target = this.props.getParent();\n if (!target || !this.isElement(target)) {\n return 0;\n }\n return target.getBoundingClientRect().width;\n };\n\n private convertToRelativePosition = (position: DropdownContainerPosition): DropdownContainerPosition => {\n const target = this.props.getParent();\n const { offsetX = 0, offsetY = 0 } = this.props;\n const { top, bottom, left, right } = position;\n if (target && this.isElement(target)) {\n const targetHeight = target.getBoundingClientRect().height;\n return {\n top: top !== null ? targetHeight + offsetY : null,\n bottom: bottom !== null ? targetHeight + offsetY : null,\n left: left !== null ? offsetX : null,\n right: right !== null ? offsetX : null,\n };\n }\n return {\n top: offsetY,\n bottom: null,\n left: offsetX,\n right: null,\n };\n };\n}\n\nconst getIsDocumentElementRoot = () => {\n const { body, documentElement } = document;\n const htmlPosition = getComputedStyle(documentElement).position;\n const bodyPosition = getComputedStyle(body).position;\n\n const hasLimitedHeightRoot = body.scrollHeight > body.clientHeight;\n const hasStaticRoot = htmlPosition === 'static' && bodyPosition === 'static';\n return hasLimitedHeightRoot || hasStaticRoot;\n};\n"]}
@@ -46,14 +46,26 @@ export var DatePicker = rootNode(_class = (_temp = _class2 = /*#__PURE__*/functi
46
46
  };
47
47
  _this.input = null;
48
48
  _this.focused = false;
49
- _this.internalDate = _this.parseValueToDate(_this.props.value);
50
- _this.minDate = _this.parseValueToDate(_this.props.minDate);
51
- _this.maxDate = _this.parseValueToDate(_this.props.maxDate);
52
49
  _this.setRootNode = void 0;
53
50
 
54
51
  _this.renderMain = function (props) {
55
52
  var picker = null;
56
- var date = _this.internalDate ? _this.internalDate.toNativeFormat() : null;
53
+ var _this$props = _this.props,
54
+ value = _this$props.value,
55
+ minDate = _this$props.minDate,
56
+ maxDate = _this$props.maxDate;
57
+
58
+ var internalDate = _this.parseValueToDate(value);
59
+
60
+ var date = internalDate ? internalDate.toNativeFormat() : null;
61
+
62
+ var parsedMinDate = _this.parseValueToDate(minDate);
63
+
64
+ var formattedMinDate = parsedMinDate && parsedMinDate.toNativeFormat() || undefined;
65
+
66
+ var parsedMaxDate = _this.parseValueToDate(maxDate);
67
+
68
+ var formattedMaxDate = parsedMaxDate && parsedMaxDate.toNativeFormat() || undefined;
57
69
 
58
70
  if (_this.state.opened) {
59
71
  picker = /*#__PURE__*/React.createElement(DropdownContainer, {
@@ -62,8 +74,8 @@ export var DatePicker = rootNode(_class = (_temp = _class2 = /*#__PURE__*/functi
62
74
  align: _this.props.menuAlign
63
75
  }, /*#__PURE__*/React.createElement(Picker, {
64
76
  value: date,
65
- minDate: _this.minDate && _this.minDate.toNativeFormat() || undefined,
66
- maxDate: _this.maxDate && _this.maxDate.toNativeFormat() || undefined,
77
+ minDate: formattedMinDate,
78
+ maxDate: formattedMaxDate,
67
79
  onPick: _this.handlePick,
68
80
  onSelect: _this.handleSelect,
69
81
  enableTodayLink: _this.props.enableTodayLink,
@@ -195,20 +207,12 @@ export var DatePicker = rootNode(_class = (_temp = _class2 = /*#__PURE__*/functi
195
207
  };
196
208
 
197
209
  _proto.componentDidUpdate = function componentDidUpdate() {
198
- var _this$props = this.props,
199
- disabled = _this$props.disabled,
200
- value = _this$props.value,
201
- minDate = _this$props.minDate,
202
- maxDate = _this$props.maxDate;
210
+ var disabled = this.props.disabled;
203
211
  var opened = this.state.opened;
204
212
 
205
213
  if (disabled && opened) {
206
214
  this.close();
207
215
  }
208
-
209
- this.internalDate = this.parseValueToDate(value);
210
- this.minDate = this.parseValueToDate(minDate);
211
- this.maxDate = this.parseValueToDate(maxDate);
212
216
  }
213
217
  /**
214
218
  * @public
@@ -1 +1 @@
1
- {"version":3,"sources":["DatePicker.tsx"],"names":["PropTypes","React","InternalDate","InternalDateTransformer","MAX_FULLDATE","MIN_FULLDATE","InternalDateOrder","InternalDateSeparator","InternalDateValidateCheck","DateInput","DropdownContainer","filterProps","CommonWrapper","isMobile","NativeDateInput","getRootNode","rootNode","isNonNullable","Picker","styles","INPUT_PASS_PROPS","autoFocus","disabled","warning","error","size","onKeyDown","MIN_WIDTH","DatePicker","state","opened","canUseMobileNativeDatePicker","input","focused","internalDate","parseValueToDate","props","value","minDate","maxDate","setRootNode","renderMain","picker","date","toNativeFormat","getParent","menuAlign","undefined","handlePick","handleSelect","enableTodayLink","isHoliday","root","getRootStyle","onMouseEnter","onMouseLeave","onMouseOver","getInputRef","handleBlur","handleFocus","onValueChange","width","minWidth","ref","setState","onFocus","close","onBlur","dateShape","blur","month","year","dateToInternalString","isWeekend","dateString","componentDidMount","useMobileNativeDatePicker","focus","componentDidUpdate","render","validate","checks","NotNull","Native","PureComponent","__KONTUR_REACT_UI__","propTypes","bool","string","isRequired","oneOf","oneOfType","number","func","defaultProps","_day","range","order","DMY","separator","Dot","setRangeStart","setRangeEnd","parseValue","Number","Limits","Range"],"mappings":"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","sourcesContent":["import PropTypes from 'prop-types';\nimport React from 'react';\n\nimport { InternalDate } from '../../lib/date/InternalDate';\nimport { InternalDateTransformer } from '../../lib/date/InternalDateTransformer';\nimport { MAX_FULLDATE, MIN_FULLDATE } from '../../lib/date/constants';\nimport { InternalDateOrder, InternalDateSeparator, InternalDateValidateCheck } from '../../lib/date/types';\nimport { Nullable } from '../../typings/utility-types';\nimport { CalendarDateShape } from '../../internal/Calendar';\nimport { DateInput } from '../DateInput';\nimport { DropdownContainer } from '../../internal/DropdownContainer';\nimport { filterProps } from '../../lib/filterProps';\nimport { CommonWrapper, CommonProps, CommonWrapperRestProps } from '../../internal/CommonWrapper';\nimport { isMobile } from '../../lib/client';\nimport { NativeDateInput } from '../../internal/NativeDateInput';\nimport { getRootNode, rootNode, TSetRootNode } from '../../lib/rootNode';\nimport { isNonNullable } from '../../lib/utils';\n\nimport { Picker } from './Picker';\nimport { styles } from './DatePicker.styles';\n\nconst INPUT_PASS_PROPS = {\n autoFocus: true,\n disabled: true,\n warning: true,\n error: true,\n size: true,\n onKeyDown: true,\n};\n\nexport const MIN_WIDTH = 120;\n\nexport interface DatePickerProps<T> extends CommonProps {\n autoFocus?: boolean;\n disabled?: boolean;\n enableTodayLink?: boolean;\n /**\n * Cостояние валидации при ошибке.\n */\n error?: boolean;\n minDate: T;\n maxDate: T;\n menuAlign?: 'left' | 'right';\n size?: 'small' | 'medium' | 'large';\n value?: T | null;\n /**\n * Cостояние валидации при предупреждении.\n */\n warning?: boolean;\n width?: number | string;\n onBlur?: () => void;\n /**\n * Вызывается при изменении `value`\n *\n * @param value - строка в формате `dd.mm.yyyy`.\n */\n onValueChange: (value: T) => void;\n onFocus?: () => void;\n onKeyDown?: (e: React.KeyboardEvent<any>) => void;\n onMouseEnter?: (e: React.MouseEvent<any>) => void;\n onMouseLeave?: (e: React.MouseEvent<any>) => void;\n onMouseOver?: (e: React.MouseEvent<any>) => void;\n /**\n * Использовать на мобильных устройствах нативный календарь для выбора дат.\n *\n * - На iOS нативный календарь не умеет работать с minDate и maxDate\n */\n useMobileNativeDatePicker?: boolean;\n\n /**\n * Функция для определения праздничных дней\n * @default (_day, isWeekend) => isWeekend\n * @param {T} day - строка в формате `dd.mm.yyyy`\n * @param {boolean} isWeekend - флаг выходного (суббота или воскресенье)\n *\n * @returns {boolean} `true` для выходного или `false` для рабочего дня\n */\n isHoliday: (day: T, isWeekend: boolean) => boolean;\n}\n\nexport interface DatePickerState {\n opened: boolean;\n canUseMobileNativeDatePicker: boolean;\n}\n\ntype DatePickerValue = string;\n\n@rootNode\nexport class DatePicker extends React.PureComponent<DatePickerProps<DatePickerValue>, DatePickerState> {\n public static __KONTUR_REACT_UI__ = 'DatePicker';\n\n public static propTypes = {\n autoFocus: PropTypes.bool,\n\n disabled: PropTypes.bool,\n\n /**\n * Включает кнопку сегодня в календаре\n */\n enableTodayLink: PropTypes.bool,\n\n error: PropTypes.bool,\n\n /**\n * Максимальная дата в календаре.\n */\n maxDate: PropTypes.string.isRequired,\n\n menuAlign: PropTypes.oneOf(['left', 'right'] as Array<'left' | 'right'>),\n\n /**\n * Минимальная дата в календаре.\n */\n minDate: PropTypes.string.isRequired,\n\n /**\n * Строка формата `dd.mm.yyyy`\n */\n value: PropTypes.string,\n\n warning: PropTypes.bool,\n\n width: PropTypes.oneOfType([PropTypes.number, PropTypes.string]).isRequired,\n\n onBlur: PropTypes.func,\n\n onValueChange: PropTypes.func.isRequired,\n\n onFocus: PropTypes.func,\n\n onKeyDown: PropTypes.func,\n\n onMouseEnter: PropTypes.func,\n\n onMouseLeave: PropTypes.func,\n\n onMouseOver: PropTypes.func,\n\n isHoliday: PropTypes.func.isRequired,\n };\n\n public static defaultProps = {\n minDate: MIN_FULLDATE,\n maxDate: MAX_FULLDATE,\n isHoliday: (_day: DatePickerValue, isWeekend: boolean) => isWeekend,\n };\n\n public static validate = (value: Nullable<string>, range: { minDate?: string; maxDate?: string } = {}) => {\n if (!value) {\n return false;\n }\n\n const { minDate = MIN_FULLDATE, maxDate = MAX_FULLDATE } = range;\n const internalDate = new InternalDate({\n order: InternalDateOrder.DMY,\n separator: InternalDateSeparator.Dot,\n })\n .setRangeStart(new InternalDate({ value: minDate }))\n .setRangeEnd(new InternalDate({ value: maxDate }))\n .parseValue(value);\n\n return internalDate.validate({\n checks: [\n InternalDateValidateCheck.NotNull,\n InternalDateValidateCheck.Number,\n InternalDateValidateCheck.Native,\n InternalDateValidateCheck.Limits,\n InternalDateValidateCheck.Range,\n ],\n });\n };\n\n public state: DatePickerState = { opened: false, canUseMobileNativeDatePicker: false };\n\n private input: DateInput | null = null;\n private focused = false;\n private internalDate?: InternalDate = this.parseValueToDate(this.props.value);\n private minDate?: InternalDate = this.parseValueToDate(this.props.minDate);\n private maxDate?: InternalDate = this.parseValueToDate(this.props.maxDate);\n private setRootNode!: TSetRootNode;\n\n public componentDidMount() {\n if (this.props.useMobileNativeDatePicker && isMobile) {\n this.setState({\n canUseMobileNativeDatePicker: true,\n });\n }\n if (this.props.autoFocus) {\n this.focus();\n }\n }\n\n public componentDidUpdate() {\n const { disabled, value, minDate, maxDate } = this.props;\n const { opened } = this.state;\n if (disabled && opened) {\n this.close();\n }\n this.internalDate = this.parseValueToDate(value);\n this.minDate = this.parseValueToDate(minDate);\n this.maxDate = this.parseValueToDate(maxDate);\n }\n\n /**\n * @public\n */\n public blur() {\n if (this.input) {\n this.input.blur();\n }\n this.handleBlur();\n }\n\n /**\n * @public\n */\n public focus() {\n if (this.props.disabled) {\n return;\n }\n if (this.input) {\n this.input.focus();\n }\n this.handleFocus();\n }\n\n /**\n * Закрывает выпадашку выбора дня\n * @public\n */\n public close() {\n this.setState({ opened: false });\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<DatePickerProps<DatePickerValue>>) => {\n let picker = null;\n const date = this.internalDate ? this.internalDate.toNativeFormat() : null;\n if (this.state.opened) {\n picker = (\n <DropdownContainer getParent={this.getParent} offsetY={2} align={this.props.menuAlign}>\n <Picker\n value={date}\n minDate={(this.minDate && this.minDate.toNativeFormat()) || undefined}\n maxDate={(this.maxDate && this.maxDate.toNativeFormat()) || undefined}\n onPick={this.handlePick}\n onSelect={this.handleSelect}\n enableTodayLink={this.props.enableTodayLink}\n isHoliday={this.isHoliday}\n />\n </DropdownContainer>\n );\n }\n\n return (\n <label\n className={styles.root()}\n style={this.getRootStyle()}\n onMouseEnter={this.props.onMouseEnter}\n onMouseLeave={this.props.onMouseLeave}\n onMouseOver={this.props.onMouseOver}\n >\n <DateInput\n {...filterProps(props, INPUT_PASS_PROPS)}\n ref={this.getInputRef}\n value={this.props.value || ''}\n width=\"100%\"\n withIcon\n minDate={this.props.minDate}\n maxDate={this.props.maxDate}\n onBlur={this.handleBlur}\n onFocus={this.handleFocus}\n onValueChange={this.props.onValueChange}\n />\n {this.state.canUseMobileNativeDatePicker && (\n <NativeDateInput\n onValueChange={this.props.onValueChange}\n value={this.props.value || ''}\n minDate={this.props.minDate}\n maxDate={this.props.maxDate}\n disabled={this.props.disabled}\n />\n )}\n {!this.state.canUseMobileNativeDatePicker && picker}\n </label>\n );\n };\n\n public getParent = () => {\n return getRootNode(this);\n };\n\n private getRootStyle = () => {\n const { width } = this.props;\n return isNonNullable(width) ? { width } : { minWidth: MIN_WIDTH };\n };\n\n private getInputRef = (ref: DateInput | null) => {\n this.input = ref;\n };\n\n private parseValueToDate(value?: Nullable<string>): InternalDate | undefined {\n if (value === undefined || value === null) {\n return undefined;\n }\n const date = new InternalDate({ value });\n if (date.validate({ checks: [InternalDateValidateCheck.NotNull, InternalDateValidateCheck.Native] })) {\n return date;\n }\n return undefined;\n }\n\n private handleFocus = () => {\n if (this.focused) {\n return;\n }\n\n this.focused = true;\n\n this.setState({ opened: true });\n\n if (this.props.onFocus) {\n this.props.onFocus();\n }\n };\n\n private handleBlur = () => {\n if (!this.focused) {\n return;\n }\n\n this.focused = false;\n this.close();\n\n if (this.props.onBlur) {\n this.props.onBlur();\n }\n };\n\n private handlePick = (dateShape: CalendarDateShape) => {\n this.handleSelect(dateShape);\n this.blur();\n };\n\n private handleSelect = ({ date, month, year }: CalendarDateShape) => {\n const value = InternalDateTransformer.dateToInternalString({ date, month: month + 1, year });\n if (this.props.onValueChange) {\n this.props.onValueChange(value);\n }\n };\n\n private isHoliday = ({ date, month, year, isWeekend }: CalendarDateShape & { isWeekend: boolean }) => {\n const dateString = InternalDateTransformer.dateToInternalString({ date, month: month + 1, year });\n return this.props.isHoliday(dateString, isWeekend);\n };\n}\n"]}
1
+ {"version":3,"sources":["DatePicker.tsx"],"names":["PropTypes","React","InternalDate","InternalDateTransformer","MAX_FULLDATE","MIN_FULLDATE","InternalDateOrder","InternalDateSeparator","InternalDateValidateCheck","DateInput","DropdownContainer","filterProps","CommonWrapper","isMobile","NativeDateInput","getRootNode","rootNode","isNonNullable","Picker","styles","INPUT_PASS_PROPS","autoFocus","disabled","warning","error","size","onKeyDown","MIN_WIDTH","DatePicker","state","opened","canUseMobileNativeDatePicker","input","focused","setRootNode","renderMain","props","picker","value","minDate","maxDate","internalDate","parseValueToDate","date","toNativeFormat","parsedMinDate","formattedMinDate","undefined","parsedMaxDate","formattedMaxDate","getParent","menuAlign","handlePick","handleSelect","enableTodayLink","isHoliday","root","getRootStyle","onMouseEnter","onMouseLeave","onMouseOver","getInputRef","handleBlur","handleFocus","onValueChange","width","minWidth","ref","setState","onFocus","close","onBlur","dateShape","blur","month","year","dateToInternalString","isWeekend","dateString","componentDidMount","useMobileNativeDatePicker","focus","componentDidUpdate","render","validate","checks","NotNull","Native","PureComponent","__KONTUR_REACT_UI__","propTypes","bool","string","isRequired","oneOf","oneOfType","number","func","defaultProps","_day","range","order","DMY","separator","Dot","setRangeStart","setRangeEnd","parseValue","Number","Limits","Range"],"mappings":"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","sourcesContent":["import PropTypes from 'prop-types';\nimport React from 'react';\n\nimport { InternalDate } from '../../lib/date/InternalDate';\nimport { InternalDateTransformer } from '../../lib/date/InternalDateTransformer';\nimport { MAX_FULLDATE, MIN_FULLDATE } from '../../lib/date/constants';\nimport { InternalDateOrder, InternalDateSeparator, InternalDateValidateCheck } from '../../lib/date/types';\nimport { Nullable } from '../../typings/utility-types';\nimport { CalendarDateShape } from '../../internal/Calendar';\nimport { DateInput } from '../DateInput';\nimport { DropdownContainer } from '../../internal/DropdownContainer';\nimport { filterProps } from '../../lib/filterProps';\nimport { CommonWrapper, CommonProps, CommonWrapperRestProps } from '../../internal/CommonWrapper';\nimport { isMobile } from '../../lib/client';\nimport { NativeDateInput } from '../../internal/NativeDateInput';\nimport { getRootNode, rootNode, TSetRootNode } from '../../lib/rootNode';\nimport { isNonNullable } from '../../lib/utils';\n\nimport { Picker } from './Picker';\nimport { styles } from './DatePicker.styles';\n\nconst INPUT_PASS_PROPS = {\n autoFocus: true,\n disabled: true,\n warning: true,\n error: true,\n size: true,\n onKeyDown: true,\n};\n\nexport const MIN_WIDTH = 120;\n\nexport interface DatePickerProps<T> extends CommonProps {\n autoFocus?: boolean;\n disabled?: boolean;\n enableTodayLink?: boolean;\n /**\n * Cостояние валидации при ошибке.\n */\n error?: boolean;\n minDate: T;\n maxDate: T;\n menuAlign?: 'left' | 'right';\n size?: 'small' | 'medium' | 'large';\n value?: T | null;\n /**\n * Cостояние валидации при предупреждении.\n */\n warning?: boolean;\n width?: number | string;\n onBlur?: () => void;\n /**\n * Вызывается при изменении `value`\n *\n * @param value - строка в формате `dd.mm.yyyy`.\n */\n onValueChange: (value: T) => void;\n onFocus?: () => void;\n onKeyDown?: (e: React.KeyboardEvent<any>) => void;\n onMouseEnter?: (e: React.MouseEvent<any>) => void;\n onMouseLeave?: (e: React.MouseEvent<any>) => void;\n onMouseOver?: (e: React.MouseEvent<any>) => void;\n /**\n * Использовать на мобильных устройствах нативный календарь для выбора дат.\n *\n * - На iOS нативный календарь не умеет работать с minDate и maxDate\n */\n useMobileNativeDatePicker?: boolean;\n\n /**\n * Функция для определения праздничных дней\n * @default (_day, isWeekend) => isWeekend\n * @param {T} day - строка в формате `dd.mm.yyyy`\n * @param {boolean} isWeekend - флаг выходного (суббота или воскресенье)\n *\n * @returns {boolean} `true` для выходного или `false` для рабочего дня\n */\n isHoliday: (day: T, isWeekend: boolean) => boolean;\n}\n\nexport interface DatePickerState {\n opened: boolean;\n canUseMobileNativeDatePicker: boolean;\n}\n\ntype DatePickerValue = string;\n\n@rootNode\nexport class DatePicker extends React.PureComponent<DatePickerProps<DatePickerValue>, DatePickerState> {\n public static __KONTUR_REACT_UI__ = 'DatePicker';\n\n public static propTypes = {\n autoFocus: PropTypes.bool,\n\n disabled: PropTypes.bool,\n\n /**\n * Включает кнопку сегодня в календаре\n */\n enableTodayLink: PropTypes.bool,\n\n error: PropTypes.bool,\n\n /**\n * Максимальная дата в календаре.\n */\n maxDate: PropTypes.string.isRequired,\n\n menuAlign: PropTypes.oneOf(['left', 'right'] as Array<'left' | 'right'>),\n\n /**\n * Минимальная дата в календаре.\n */\n minDate: PropTypes.string.isRequired,\n\n /**\n * Строка формата `dd.mm.yyyy`\n */\n value: PropTypes.string,\n\n warning: PropTypes.bool,\n\n width: PropTypes.oneOfType([PropTypes.number, PropTypes.string]).isRequired,\n\n onBlur: PropTypes.func,\n\n onValueChange: PropTypes.func.isRequired,\n\n onFocus: PropTypes.func,\n\n onKeyDown: PropTypes.func,\n\n onMouseEnter: PropTypes.func,\n\n onMouseLeave: PropTypes.func,\n\n onMouseOver: PropTypes.func,\n\n isHoliday: PropTypes.func.isRequired,\n };\n\n public static defaultProps = {\n minDate: MIN_FULLDATE,\n maxDate: MAX_FULLDATE,\n isHoliday: (_day: DatePickerValue, isWeekend: boolean) => isWeekend,\n };\n\n public static validate = (value: Nullable<string>, range: { minDate?: string; maxDate?: string } = {}) => {\n if (!value) {\n return false;\n }\n\n const { minDate = MIN_FULLDATE, maxDate = MAX_FULLDATE } = range;\n const internalDate = new InternalDate({\n order: InternalDateOrder.DMY,\n separator: InternalDateSeparator.Dot,\n })\n .setRangeStart(new InternalDate({ value: minDate }))\n .setRangeEnd(new InternalDate({ value: maxDate }))\n .parseValue(value);\n\n return internalDate.validate({\n checks: [\n InternalDateValidateCheck.NotNull,\n InternalDateValidateCheck.Number,\n InternalDateValidateCheck.Native,\n InternalDateValidateCheck.Limits,\n InternalDateValidateCheck.Range,\n ],\n });\n };\n\n public state: DatePickerState = { opened: false, canUseMobileNativeDatePicker: false };\n\n private input: DateInput | null = null;\n private focused = false;\n private setRootNode!: TSetRootNode;\n\n public componentDidMount() {\n if (this.props.useMobileNativeDatePicker && isMobile) {\n this.setState({\n canUseMobileNativeDatePicker: true,\n });\n }\n if (this.props.autoFocus) {\n this.focus();\n }\n }\n\n public componentDidUpdate() {\n const { disabled } = this.props;\n const { opened } = this.state;\n if (disabled && opened) {\n this.close();\n }\n }\n\n /**\n * @public\n */\n public blur() {\n if (this.input) {\n this.input.blur();\n }\n this.handleBlur();\n }\n\n /**\n * @public\n */\n public focus() {\n if (this.props.disabled) {\n return;\n }\n if (this.input) {\n this.input.focus();\n }\n this.handleFocus();\n }\n\n /**\n * Закрывает выпадашку выбора дня\n * @public\n */\n public close() {\n this.setState({ opened: false });\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<DatePickerProps<DatePickerValue>>) => {\n let picker = null;\n\n const { value, minDate, maxDate } = this.props;\n\n const internalDate = this.parseValueToDate(value);\n const date = internalDate ? internalDate.toNativeFormat() : null;\n\n const parsedMinDate = this.parseValueToDate(minDate);\n const formattedMinDate = (parsedMinDate && parsedMinDate.toNativeFormat()) || undefined;\n\n const parsedMaxDate = this.parseValueToDate(maxDate);\n const formattedMaxDate = (parsedMaxDate && parsedMaxDate.toNativeFormat()) || undefined;\n\n if (this.state.opened) {\n picker = (\n <DropdownContainer getParent={this.getParent} offsetY={2} align={this.props.menuAlign}>\n <Picker\n value={date}\n minDate={formattedMinDate}\n maxDate={formattedMaxDate}\n onPick={this.handlePick}\n onSelect={this.handleSelect}\n enableTodayLink={this.props.enableTodayLink}\n isHoliday={this.isHoliday}\n />\n </DropdownContainer>\n );\n }\n\n return (\n <label\n className={styles.root()}\n style={this.getRootStyle()}\n onMouseEnter={this.props.onMouseEnter}\n onMouseLeave={this.props.onMouseLeave}\n onMouseOver={this.props.onMouseOver}\n >\n <DateInput\n {...filterProps(props, INPUT_PASS_PROPS)}\n ref={this.getInputRef}\n value={this.props.value || ''}\n width=\"100%\"\n withIcon\n minDate={this.props.minDate}\n maxDate={this.props.maxDate}\n onBlur={this.handleBlur}\n onFocus={this.handleFocus}\n onValueChange={this.props.onValueChange}\n />\n {this.state.canUseMobileNativeDatePicker && (\n <NativeDateInput\n onValueChange={this.props.onValueChange}\n value={this.props.value || ''}\n minDate={this.props.minDate}\n maxDate={this.props.maxDate}\n disabled={this.props.disabled}\n />\n )}\n {!this.state.canUseMobileNativeDatePicker && picker}\n </label>\n );\n };\n\n public getParent = () => {\n return getRootNode(this);\n };\n\n private getRootStyle = () => {\n const { width } = this.props;\n return isNonNullable(width) ? { width } : { minWidth: MIN_WIDTH };\n };\n\n private getInputRef = (ref: DateInput | null) => {\n this.input = ref;\n };\n\n private parseValueToDate(value?: Nullable<string>): InternalDate | undefined {\n if (value === undefined || value === null) {\n return undefined;\n }\n const date = new InternalDate({ value });\n if (date.validate({ checks: [InternalDateValidateCheck.NotNull, InternalDateValidateCheck.Native] })) {\n return date;\n }\n return undefined;\n }\n\n private handleFocus = () => {\n if (this.focused) {\n return;\n }\n\n this.focused = true;\n\n this.setState({ opened: true });\n\n if (this.props.onFocus) {\n this.props.onFocus();\n }\n };\n\n private handleBlur = () => {\n if (!this.focused) {\n return;\n }\n\n this.focused = false;\n this.close();\n\n if (this.props.onBlur) {\n this.props.onBlur();\n }\n };\n\n private handlePick = (dateShape: CalendarDateShape) => {\n this.handleSelect(dateShape);\n this.blur();\n };\n\n private handleSelect = ({ date, month, year }: CalendarDateShape) => {\n const value = InternalDateTransformer.dateToInternalString({ date, month: month + 1, year });\n if (this.props.onValueChange) {\n this.props.onValueChange(value);\n }\n };\n\n private isHoliday = ({ date, month, year, isWeekend }: CalendarDateShape & { isWeekend: boolean }) => {\n const dateString = InternalDateTransformer.dateToInternalString({ date, month: month + 1, year });\n return this.props.isHoliday(dateString, isWeekend);\n };\n}\n"]}
@@ -100,9 +100,6 @@ export declare class DatePicker extends React.PureComponent<DatePickerProps<Date
100
100
  state: DatePickerState;
101
101
  private input;
102
102
  private focused;
103
- private internalDate?;
104
- private minDate?;
105
- private maxDate?;
106
103
  private setRootNode;
107
104
  componentDidMount(): void;
108
105
  componentDidUpdate(): void;
@@ -11,19 +11,10 @@ import { styles } from "../DropdownContainer.styles";
11
11
  export var DropdownContainer = /*#__PURE__*/function (_React$PureComponent) {
12
12
  _inheritsLoose(DropdownContainer, _React$PureComponent);
13
13
 
14
- function DropdownContainer() {
14
+ function DropdownContainer(props) {
15
15
  var _this;
16
16
 
17
- for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
18
- args[_key] = arguments[_key];
19
- }
20
-
21
- _this = _React$PureComponent.call.apply(_React$PureComponent, [this].concat(args)) || this;
22
- _this.state = {
23
- position: null,
24
- minWidth: 0,
25
- isDocumentElementRoot: true
26
- };
17
+ _this = _React$PureComponent.call(this, props) || this;
27
18
  _this.getProps = createPropsGetter(DropdownContainer.defaultProps);
28
19
  _this.dom = void 0;
29
20
  _this.layoutSub = void 0;
@@ -146,6 +137,11 @@ export var DropdownContainer = /*#__PURE__*/function (_React$PureComponent) {
146
137
  };
147
138
  };
148
139
 
140
+ _this.state = {
141
+ position: null,
142
+ minWidth: 0,
143
+ isDocumentElementRoot: getIsDocumentElementRoot()
144
+ };
149
145
  return _this;
150
146
  }
151
147
 
@@ -154,16 +150,6 @@ export var DropdownContainer = /*#__PURE__*/function (_React$PureComponent) {
154
150
  _proto.componentDidMount = function componentDidMount() {
155
151
  this.position();
156
152
  this.layoutSub = LayoutEvents.addListener(this.position);
157
- var _document2 = document,
158
- body = _document2.body,
159
- docEl = _document2.documentElement;
160
- var htmlPosition = getComputedStyle(docEl).position;
161
- var bodyPosition = getComputedStyle(body).position;
162
- var hasLimitedHeightRoot = body.scrollHeight > body.clientHeight;
163
- var hasStaticRoot = htmlPosition === 'static' && bodyPosition === 'static';
164
- this.setState({
165
- isDocumentElementRoot: hasLimitedHeightRoot || hasStaticRoot
166
- });
167
153
  };
168
154
 
169
155
  _proto.componentWillUnmount = function componentWillUnmount() {
@@ -213,4 +199,15 @@ DropdownContainer.defaultProps = {
213
199
  disablePortal: false,
214
200
  offsetX: 0,
215
201
  offsetY: -1
202
+ };
203
+
204
+ var getIsDocumentElementRoot = function getIsDocumentElementRoot() {
205
+ var _document2 = document,
206
+ body = _document2.body,
207
+ documentElement = _document2.documentElement;
208
+ var htmlPosition = getComputedStyle(documentElement).position;
209
+ var bodyPosition = getComputedStyle(body).position;
210
+ var hasLimitedHeightRoot = body.scrollHeight > body.clientHeight;
211
+ var hasStaticRoot = htmlPosition === 'static' && bodyPosition === 'static';
212
+ return hasLimitedHeightRoot || hasStaticRoot;
216
213
  };
@@ -1 +1 @@
1
- {"version":3,"sources":["DropdownContainer.tsx"],"names":["React","LayoutEvents","RenderContainer","ZIndex","createPropsGetter","cx","isIE11","styles","DropdownContainer","state","position","minWidth","isDocumentElementRoot","getProps","defaultProps","dom","layoutSub","ZIndexRef","element","isElement","node","Element","target","props","getParent","targetRect","getBoundingClientRect","document","body","docEl","documentElement","Error","scrollX","window","pageXOffset","scrollLeft","scrollY","pageYOffset","scrollTop","left","right","align","docWidth","offsetWidth","offsetX","offsetY","bottom","top","distanceToBottom","clientHeight","dropdownHeight","getHeight","scrollHeight","setState","getMinWidth","disablePortal","convertToRelativePosition","child","children","item","height","width","targetHeight","componentDidMount","addListener","htmlPosition","getComputedStyle","bodyPosition","hasLimitedHeightRoot","hasStaticRoot","componentWillUnmount","remove","render","style","undefined","maxWidth","hasFixedWidth","content","alignRight","PureComponent","__KONTUR_REACT_UI__"],"mappings":"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","sourcesContent":["import React from 'react';\n\nimport * as LayoutEvents from '../../lib/LayoutEvents';\nimport { RenderContainer } from '../RenderContainer';\nimport { ZIndex } from '../ZIndex';\nimport { createPropsGetter } from '../../lib/createPropsGetter';\nimport { Nullable } from '../../typings/utility-types';\nimport { cx } from '../../lib/theming/Emotion';\nimport { isIE11 } from '../../lib/client';\n\nimport { styles } from './DropdownContainer.styles';\n\nexport interface DropdownContainerPosition {\n top: Nullable<number>;\n bottom: Nullable<number>;\n left: Nullable<number>;\n right: Nullable<number>;\n}\n\nexport interface DropdownContainerProps {\n align?: 'left' | 'right';\n getParent: () => Nullable<HTMLElement>;\n children?: React.ReactNode;\n disablePortal?: boolean;\n offsetY?: number;\n offsetX?: number;\n hasFixedWidth?: boolean;\n}\n\nexport interface DropdownContainerState {\n position: Nullable<DropdownContainerPosition>;\n minWidth: number;\n isDocumentElementRoot?: boolean;\n}\n\nexport class DropdownContainer extends React.PureComponent<DropdownContainerProps, DropdownContainerState> {\n public static __KONTUR_REACT_UI__ = 'DropdownContainer';\n\n public static defaultProps = {\n align: 'left',\n disablePortal: false,\n offsetX: 0,\n offsetY: -1,\n };\n\n public state: DropdownContainerState = {\n position: null,\n minWidth: 0,\n isDocumentElementRoot: true,\n };\n\n private getProps = createPropsGetter(DropdownContainer.defaultProps);\n\n private dom: Nullable<HTMLDivElement>;\n private layoutSub: Nullable<ReturnType<typeof LayoutEvents.addListener>>;\n\n public componentDidMount() {\n this.position();\n this.layoutSub = LayoutEvents.addListener(this.position);\n\n const { body, documentElement: docEl } = document;\n const htmlPosition = getComputedStyle(docEl).position;\n const bodyPosition = getComputedStyle(body).position;\n\n const hasLimitedHeightRoot = body.scrollHeight > body.clientHeight;\n const hasStaticRoot = htmlPosition === 'static' && bodyPosition === 'static';\n\n this.setState({ isDocumentElementRoot: hasLimitedHeightRoot || hasStaticRoot });\n }\n\n public componentWillUnmount() {\n if (this.layoutSub) {\n this.layoutSub.remove();\n }\n }\n\n public render() {\n let style: React.CSSProperties = {\n position: 'absolute',\n top: '0',\n };\n if (this.state.position) {\n const { top, bottom, left, right } = this.state.position;\n style = {\n ...style,\n top: top !== null ? top : undefined,\n bottom: bottom !== null ? bottom : undefined,\n left: left !== null ? left : undefined,\n right: right !== null ? right : undefined,\n minWidth: this.state.minWidth,\n maxWidth: this.props.hasFixedWidth ? this.state.minWidth : undefined,\n };\n }\n\n const content = (\n <ZIndex\n priority={'DropdownContainer'}\n wrapperRef={this.ZIndexRef}\n style={style}\n className={cx({\n [styles.alignRight()]: this.props.align === 'right' && !isIE11,\n })}\n >\n {this.props.children}\n </ZIndex>\n );\n\n return this.props.disablePortal ? content : <RenderContainer>{content}</RenderContainer>;\n }\n\n private ZIndexRef = (element: Nullable<HTMLDivElement>) => {\n this.dom = element;\n };\n\n private isElement = (node: Nullable<Element>): node is Element => {\n return node instanceof Element;\n };\n\n public position = () => {\n const target = this.props.getParent();\n const dom = this.dom;\n\n if (target && this.isElement(target) && dom) {\n const targetRect = target.getBoundingClientRect();\n const { body, documentElement: docEl } = document;\n\n if (!docEl) {\n throw Error('There is no \"documentElement\" in \"document\"');\n }\n\n const scrollX = window.pageXOffset || docEl.scrollLeft || 0;\n const scrollY = window.pageYOffset || docEl.scrollTop || 0;\n\n let left = null;\n let right = null;\n\n if (this.props.align === 'right') {\n const docWidth = docEl.offsetWidth || 0;\n right = docWidth - (targetRect.right + scrollX) + this.getProps().offsetX;\n } else {\n left = targetRect.left + scrollX + this.getProps().offsetX;\n }\n\n const { offsetY = 0 } = this.props;\n let bottom = null;\n let top: number | null = targetRect.bottom + scrollY + offsetY;\n\n const distanceToBottom = docEl.clientHeight - targetRect.bottom;\n const dropdownHeight = this.getHeight();\n\n if (distanceToBottom < dropdownHeight && targetRect.top > dropdownHeight) {\n const clientHeight = this.state.isDocumentElementRoot ? docEl.clientHeight : body.scrollHeight;\n\n top = null;\n bottom = clientHeight + offsetY - scrollY - targetRect.top;\n }\n\n const position = {\n top,\n left,\n right,\n bottom,\n };\n\n this.setState({\n minWidth: this.getMinWidth(),\n position: this.props.disablePortal ? this.convertToRelativePosition(position) : position,\n });\n }\n };\n\n private getHeight = () => {\n if (!this.isElement(this.dom)) {\n return 0;\n }\n const child = this.dom.children.item(0);\n if (!child) {\n return 0;\n }\n return child.getBoundingClientRect().height;\n };\n\n private getMinWidth = () => {\n const target = this.props.getParent();\n if (!target || !this.isElement(target)) {\n return 0;\n }\n return target.getBoundingClientRect().width;\n };\n\n private convertToRelativePosition = (position: DropdownContainerPosition): DropdownContainerPosition => {\n const target = this.props.getParent();\n const { offsetX = 0, offsetY = 0 } = this.props;\n const { top, bottom, left, right } = position;\n if (target && this.isElement(target)) {\n const targetHeight = target.getBoundingClientRect().height;\n return {\n top: top !== null ? targetHeight + offsetY : null,\n bottom: bottom !== null ? targetHeight + offsetY : null,\n left: left !== null ? offsetX : null,\n right: right !== null ? offsetX : null,\n };\n }\n return {\n top: offsetY,\n bottom: null,\n left: offsetX,\n right: null,\n };\n };\n}\n"]}
1
+ {"version":3,"sources":["DropdownContainer.tsx"],"names":["React","LayoutEvents","RenderContainer","ZIndex","createPropsGetter","cx","isIE11","styles","DropdownContainer","props","getProps","defaultProps","dom","layoutSub","ZIndexRef","element","isElement","node","Element","position","target","getParent","targetRect","getBoundingClientRect","document","body","docEl","documentElement","Error","scrollX","window","pageXOffset","scrollLeft","scrollY","pageYOffset","scrollTop","left","right","align","docWidth","offsetWidth","offsetX","offsetY","bottom","top","distanceToBottom","clientHeight","dropdownHeight","getHeight","state","isDocumentElementRoot","scrollHeight","setState","minWidth","getMinWidth","disablePortal","convertToRelativePosition","child","children","item","height","width","targetHeight","getIsDocumentElementRoot","componentDidMount","addListener","componentWillUnmount","remove","render","style","undefined","maxWidth","hasFixedWidth","content","alignRight","PureComponent","__KONTUR_REACT_UI__","htmlPosition","getComputedStyle","bodyPosition","hasLimitedHeightRoot","hasStaticRoot"],"mappings":"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","sourcesContent":["import React from 'react';\n\nimport * as LayoutEvents from '../../lib/LayoutEvents';\nimport { RenderContainer } from '../RenderContainer';\nimport { ZIndex } from '../ZIndex';\nimport { createPropsGetter } from '../../lib/createPropsGetter';\nimport { Nullable } from '../../typings/utility-types';\nimport { cx } from '../../lib/theming/Emotion';\nimport { isIE11 } from '../../lib/client';\n\nimport { styles } from './DropdownContainer.styles';\n\nexport interface DropdownContainerPosition {\n top: Nullable<number>;\n bottom: Nullable<number>;\n left: Nullable<number>;\n right: Nullable<number>;\n}\n\nexport interface DropdownContainerProps {\n align?: 'left' | 'right';\n getParent: () => Nullable<HTMLElement>;\n children?: React.ReactNode;\n disablePortal?: boolean;\n offsetY?: number;\n offsetX?: number;\n hasFixedWidth?: boolean;\n}\n\nexport interface DropdownContainerState {\n position: Nullable<DropdownContainerPosition>;\n minWidth: number;\n isDocumentElementRoot?: boolean;\n}\n\nexport class DropdownContainer extends React.PureComponent<DropdownContainerProps, DropdownContainerState> {\n public static __KONTUR_REACT_UI__ = 'DropdownContainer';\n\n public static defaultProps = {\n align: 'left',\n disablePortal: false,\n offsetX: 0,\n offsetY: -1,\n };\n\n private getProps = createPropsGetter(DropdownContainer.defaultProps);\n\n private dom: Nullable<HTMLDivElement>;\n private layoutSub: Nullable<ReturnType<typeof LayoutEvents.addListener>>;\n\n constructor(props: DropdownContainerProps) {\n super(props);\n\n this.state = { position: null, minWidth: 0, isDocumentElementRoot: getIsDocumentElementRoot() };\n }\n\n public componentDidMount() {\n this.position();\n this.layoutSub = LayoutEvents.addListener(this.position);\n }\n\n public componentWillUnmount() {\n if (this.layoutSub) {\n this.layoutSub.remove();\n }\n }\n\n public render() {\n let style: React.CSSProperties = {\n position: 'absolute',\n top: '0',\n };\n if (this.state.position) {\n const { top, bottom, left, right } = this.state.position;\n style = {\n ...style,\n top: top !== null ? top : undefined,\n bottom: bottom !== null ? bottom : undefined,\n left: left !== null ? left : undefined,\n right: right !== null ? right : undefined,\n minWidth: this.state.minWidth,\n maxWidth: this.props.hasFixedWidth ? this.state.minWidth : undefined,\n };\n }\n\n const content = (\n <ZIndex\n priority={'DropdownContainer'}\n wrapperRef={this.ZIndexRef}\n style={style}\n className={cx({\n [styles.alignRight()]: this.props.align === 'right' && !isIE11,\n })}\n >\n {this.props.children}\n </ZIndex>\n );\n\n return this.props.disablePortal ? content : <RenderContainer>{content}</RenderContainer>;\n }\n\n private ZIndexRef = (element: Nullable<HTMLDivElement>) => {\n this.dom = element;\n };\n\n private isElement = (node: Nullable<Element>): node is Element => {\n return node instanceof Element;\n };\n\n public position = () => {\n const target = this.props.getParent();\n const dom = this.dom;\n\n if (target && this.isElement(target) && dom) {\n const targetRect = target.getBoundingClientRect();\n const { body, documentElement: docEl } = document;\n\n if (!docEl) {\n throw Error('There is no \"documentElement\" in \"document\"');\n }\n\n const scrollX = window.pageXOffset || docEl.scrollLeft || 0;\n const scrollY = window.pageYOffset || docEl.scrollTop || 0;\n\n let left = null;\n let right = null;\n\n if (this.props.align === 'right') {\n const docWidth = docEl.offsetWidth || 0;\n right = docWidth - (targetRect.right + scrollX) + this.getProps().offsetX;\n } else {\n left = targetRect.left + scrollX + this.getProps().offsetX;\n }\n\n const { offsetY = 0 } = this.props;\n let bottom = null;\n let top: number | null = targetRect.bottom + scrollY + offsetY;\n\n const distanceToBottom = docEl.clientHeight - targetRect.bottom;\n const dropdownHeight = this.getHeight();\n\n if (distanceToBottom < dropdownHeight && targetRect.top > dropdownHeight) {\n const clientHeight = this.state.isDocumentElementRoot ? docEl.clientHeight : body.scrollHeight;\n\n top = null;\n bottom = clientHeight + offsetY - scrollY - targetRect.top;\n }\n\n const position = {\n top,\n left,\n right,\n bottom,\n };\n\n this.setState({\n minWidth: this.getMinWidth(),\n position: this.props.disablePortal ? this.convertToRelativePosition(position) : position,\n });\n }\n };\n\n private getHeight = () => {\n if (!this.isElement(this.dom)) {\n return 0;\n }\n const child = this.dom.children.item(0);\n if (!child) {\n return 0;\n }\n return child.getBoundingClientRect().height;\n };\n\n private getMinWidth = () => {\n const target = this.props.getParent();\n if (!target || !this.isElement(target)) {\n return 0;\n }\n return target.getBoundingClientRect().width;\n };\n\n private convertToRelativePosition = (position: DropdownContainerPosition): DropdownContainerPosition => {\n const target = this.props.getParent();\n const { offsetX = 0, offsetY = 0 } = this.props;\n const { top, bottom, left, right } = position;\n if (target && this.isElement(target)) {\n const targetHeight = target.getBoundingClientRect().height;\n return {\n top: top !== null ? targetHeight + offsetY : null,\n bottom: bottom !== null ? targetHeight + offsetY : null,\n left: left !== null ? offsetX : null,\n right: right !== null ? offsetX : null,\n };\n }\n return {\n top: offsetY,\n bottom: null,\n left: offsetX,\n right: null,\n };\n };\n}\n\nconst getIsDocumentElementRoot = () => {\n const { body, documentElement } = document;\n const htmlPosition = getComputedStyle(documentElement).position;\n const bodyPosition = getComputedStyle(body).position;\n\n const hasLimitedHeightRoot = body.scrollHeight > body.clientHeight;\n const hasStaticRoot = htmlPosition === 'static' && bodyPosition === 'static';\n return hasLimitedHeightRoot || hasStaticRoot;\n};\n"]}
@@ -28,10 +28,10 @@ export declare class DropdownContainer extends React.PureComponent<DropdownConta
28
28
  offsetX: number;
29
29
  offsetY: number;
30
30
  };
31
- state: DropdownContainerState;
32
31
  private getProps;
33
32
  private dom;
34
33
  private layoutSub;
34
+ constructor(props: DropdownContainerProps);
35
35
  componentDidMount(): void;
36
36
  componentWillUnmount(): void;
37
37
  render(): JSX.Element;
package/package.json CHANGED
@@ -1,11 +1,11 @@
1
1
  {
2
2
  "name": "@skbkontur/react-ui",
3
- "version": "3.12.1",
3
+ "version": "3.12.2",
4
4
  "description": "UI Components",
5
5
  "main": "cjs/index.js",
6
6
  "module": "index.js",
7
7
  "sideEffects": false,
8
- "homepage": "https://tech.skbkontur.ru/react-ui/3.12.1/",
8
+ "homepage": "https://tech.skbkontur.ru/react-ui/3.12.2/",
9
9
  "repository": {
10
10
  "type": "git",
11
11
  "url": "git@github.com:skbkontur/retail-ui.git"