@skbkontur/react-ui 3.12.6 → 3.12.7-datepicker.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (76) hide show
  1. package/CHANGELOG.md +19 -0
  2. package/cjs/components/DatePicker/DatePicker.d.ts +19 -0
  3. package/cjs/components/DatePicker/DatePicker.js +26 -2
  4. package/cjs/components/DatePicker/DatePicker.js.map +1 -1
  5. package/cjs/components/DatePicker/DatePicker.md +22 -0
  6. package/cjs/components/DatePicker/Picker.d.ts +3 -1
  7. package/cjs/components/DatePicker/Picker.js +5 -1
  8. package/cjs/components/DatePicker/Picker.js.map +1 -1
  9. package/cjs/components/Tooltip/Tooltip.d.ts +1 -1
  10. package/cjs/components/Tooltip/Tooltip.js +2 -2
  11. package/cjs/components/Tooltip/Tooltip.js.map +1 -1
  12. package/cjs/internal/Calendar/Calendar.d.ts +11 -1
  13. package/cjs/internal/Calendar/Calendar.js +63 -20
  14. package/cjs/internal/Calendar/Calendar.js.map +1 -1
  15. package/cjs/internal/Calendar/Calendar.styles.js +1 -1
  16. package/cjs/internal/Calendar/Calendar.styles.js.map +1 -1
  17. package/cjs/internal/Calendar/DayCellView.d.ts +2 -0
  18. package/cjs/internal/Calendar/DayCellView.js +3 -2
  19. package/cjs/internal/Calendar/DayCellView.js.map +1 -1
  20. package/cjs/internal/Calendar/DayCellView.styles.js +5 -5
  21. package/cjs/internal/Calendar/DayCellView.styles.js.map +1 -1
  22. package/cjs/internal/Calendar/Month.d.ts +1 -0
  23. package/cjs/internal/Calendar/Month.js +9 -4
  24. package/cjs/internal/Calendar/Month.js.map +1 -1
  25. package/cjs/internal/Calendar/MonthView.styles.js +1 -1
  26. package/cjs/internal/Calendar/MonthView.styles.js.map +1 -1
  27. package/cjs/internal/Calendar/MonthViewModel.js +2 -2
  28. package/cjs/internal/Calendar/MonthViewModel.js.map +1 -1
  29. package/cjs/internal/Calendar/config.d.ts +2 -1
  30. package/cjs/internal/Calendar/config.js +6 -3
  31. package/cjs/internal/Calendar/config.js.map +1 -1
  32. package/cjs/internal/ThemeShowcase/VariablesCollector.d.ts +1 -1
  33. package/cjs/internal/themes/DefaultTheme.d.ts +4 -0
  34. package/cjs/internal/themes/DefaultTheme.js +12 -2
  35. package/cjs/internal/themes/DefaultTheme.js.map +1 -1
  36. package/cjs/internal/themes/Theme8px.d.ts +2 -1
  37. package/cjs/internal/themes/Theme8px.js +2 -1
  38. package/cjs/internal/themes/Theme8px.js.map +1 -1
  39. package/components/DatePicker/DatePicker/DatePicker.js +9 -2
  40. package/components/DatePicker/DatePicker/DatePicker.js.map +1 -1
  41. package/components/DatePicker/DatePicker.d.ts +19 -0
  42. package/components/DatePicker/DatePicker.md +22 -0
  43. package/components/DatePicker/Picker/Picker.js +3 -1
  44. package/components/DatePicker/Picker/Picker.js.map +1 -1
  45. package/components/DatePicker/Picker.d.ts +3 -1
  46. package/components/Tooltip/Tooltip/Tooltip.js +2 -2
  47. package/components/Tooltip/Tooltip/Tooltip.js.map +1 -1
  48. package/components/Tooltip/Tooltip.d.ts +1 -1
  49. package/internal/Calendar/Calendar/Calendar.js +55 -22
  50. package/internal/Calendar/Calendar/Calendar.js.map +1 -1
  51. package/internal/Calendar/Calendar.d.ts +11 -1
  52. package/internal/Calendar/Calendar.styles/Calendar.styles.js +1 -1
  53. package/internal/Calendar/Calendar.styles/Calendar.styles.js.map +1 -1
  54. package/internal/Calendar/DayCellView/DayCellView.js +3 -2
  55. package/internal/Calendar/DayCellView/DayCellView.js.map +1 -1
  56. package/internal/Calendar/DayCellView.d.ts +2 -0
  57. package/internal/Calendar/DayCellView.styles/DayCellView.styles.js +1 -1
  58. package/internal/Calendar/DayCellView.styles/DayCellView.styles.js.map +1 -1
  59. package/internal/Calendar/Month/Month.js +8 -3
  60. package/internal/Calendar/Month/Month.js.map +1 -1
  61. package/internal/Calendar/Month.d.ts +1 -0
  62. package/internal/Calendar/MonthView.styles/MonthView.styles.js +1 -1
  63. package/internal/Calendar/MonthView.styles/MonthView.styles.js.map +1 -1
  64. package/internal/Calendar/MonthViewModel/MonthViewModel.js +2 -2
  65. package/internal/Calendar/MonthViewModel/MonthViewModel.js.map +1 -1
  66. package/internal/Calendar/config/config.js +4 -3
  67. package/internal/Calendar/config/config.js.map +1 -1
  68. package/internal/Calendar/config.d.ts +2 -1
  69. package/internal/ThemeShowcase/VariablesCollector.d.ts +1 -1
  70. package/internal/themes/DefaultTheme/DefaultTheme.js +17 -0
  71. package/internal/themes/DefaultTheme/DefaultTheme.js.map +1 -1
  72. package/internal/themes/DefaultTheme.d.ts +4 -0
  73. package/internal/themes/Theme8px/Theme8px.js +2 -1
  74. package/internal/themes/Theme8px/Theme8px.js.map +1 -1
  75. package/internal/themes/Theme8px.d.ts +2 -1
  76. package/package.json +3 -3
package/CHANGELOG.md CHANGED
@@ -3,6 +3,25 @@
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.7-datepicker.0](https://github.com/skbkontur/retail-ui/compare/@skbkontur/react-ui@3.12.7...@skbkontur/react-ui@3.12.7-datepicker.0) (2023-05-02)
7
+
8
+ **Note:** Version bump only for package @skbkontur/react-ui
9
+
10
+
11
+
12
+
13
+
14
+ ## [3.12.7](https://github.com/skbkontur/retail-ui/compare/@skbkontur/react-ui@3.12.6...@skbkontur/react-ui@3.12.7) (2022-08-12)
15
+
16
+
17
+ ### Bug Fixes
18
+
19
+ * **Tooltip:** add event arg to onCloseRequest prop ([#2973](https://github.com/skbkontur/retail-ui/issues/2973)) ([591eb23](https://github.com/skbkontur/retail-ui/commit/591eb238b8db3763e7237a9624b5d477da3180c4)), closes [#2966](https://github.com/skbkontur/retail-ui/issues/2966)
20
+
21
+
22
+
23
+
24
+
6
25
  ## [3.12.6](https://github.com/skbkontur/retail-ui/compare/@skbkontur/react-ui@3.12.5...@skbkontur/react-ui@3.12.6) (2022-08-03)
7
26
 
8
27
 
@@ -1,6 +1,7 @@
1
1
  import PropTypes from 'prop-types';
2
2
  import React from 'react';
3
3
  import { Nullable } from '../../typings/utility-types';
4
+ import { CalendarDateShape, CalendarMonthChangeInfo } from '../../internal/Calendar';
4
5
  import { CommonProps, CommonWrapperRestProps } from '../../internal/CommonWrapper';
5
6
  export declare const MIN_WIDTH = 120;
6
7
  export interface DatePickerProps<T> extends CommonProps {
@@ -48,6 +49,21 @@ export interface DatePickerProps<T> extends CommonProps {
48
49
  * @returns {boolean} `true` для выходного или `false` для рабочего дня
49
50
  */
50
51
  isHoliday: (day: T, isWeekend: boolean) => boolean;
52
+ /**
53
+ * Метод отрисовки дат в календаре
54
+ * @default (date) => date.date as number
55
+ * @param {CalendarDateShape} date - дата в формате `{ year: number; month: number; date: number; }`
56
+ *
57
+ * @returns {ReactNode} возвращает компонент, который отрисовывает контент числа месяца
58
+ */
59
+ renderDay: (date: CalendarDateShape) => React.ReactNode;
60
+ /**
61
+ * Вызывается при каждом изменении месяца
62
+ * @param {CalendarMonthChangeInfo} changeInfo - информация о изменении отображаемого месяца, где
63
+ * `month: number` - номер текущего отображаемого месяца от 0 до 11,
64
+ * `year: number` - отображаемый год,
65
+ */
66
+ onMonthChange?: (changeInfo: CalendarMonthChangeInfo) => void;
51
67
  }
52
68
  export interface DatePickerState {
53
69
  opened: boolean;
@@ -87,11 +103,14 @@ export declare class DatePicker extends React.PureComponent<DatePickerProps<Date
87
103
  onMouseLeave: PropTypes.Requireable<(...args: any[]) => any>;
88
104
  onMouseOver: PropTypes.Requireable<(...args: any[]) => any>;
89
105
  isHoliday: PropTypes.Validator<(...args: any[]) => any>;
106
+ renderDay: PropTypes.Validator<(...args: any[]) => any>;
107
+ onMonthChange: PropTypes.Requireable<(...args: any[]) => any>;
90
108
  };
91
109
  static defaultProps: {
92
110
  minDate: string;
93
111
  maxDate: string;
94
112
  isHoliday: (_day: DatePickerValue, isWeekend: boolean) => boolean;
113
+ renderDay: (date: CalendarDateShape) => number;
95
114
  };
96
115
  static validate: (value: Nullable<string>, range?: {
97
116
  minDate?: string | undefined;
@@ -68,6 +68,23 @@ var MIN_WIDTH = 120;exports.MIN_WIDTH = MIN_WIDTH;var
68
68
 
69
69
 
70
70
 
71
+
72
+
73
+
74
+
75
+
76
+
77
+
78
+
79
+
80
+
81
+
82
+
83
+
84
+
85
+
86
+
87
+
71
88
 
72
89
 
73
90
 
@@ -164,6 +181,11 @@ DatePicker = (0, _rootNode.rootNode)(_class = (_temp = _class2 = /*#__PURE__*/fu
164
181
 
165
182
 
166
183
 
184
+
185
+
186
+
187
+
188
+
167
189
 
168
190
 
169
191
 
@@ -258,7 +280,9 @@ DatePicker = (0, _rootNode.rootNode)(_class = (_temp = _class2 = /*#__PURE__*/fu
258
280
  onPick: _this.handlePick,
259
281
  onSelect: _this.handleSelect,
260
282
  enableTodayLink: _this.props.enableTodayLink,
261
- isHoliday: _this.isHoliday }));
283
+ isHoliday: _this.isHoliday,
284
+ renderDay: _this.props.renderDay,
285
+ onMonthChange: _this.props.onMonthChange }));
262
286
 
263
287
 
264
288
 
@@ -379,4 +403,4 @@ DatePicker = (0, _rootNode.rootNode)(_class = (_temp = _class2 = /*#__PURE__*/fu
379
403
  * Минимальная дата в календаре.
380
404
  */minDate: _propTypes.default.string.isRequired, /**
381
405
  * Строка формата `dd.mm.yyyy`
382
- */value: _propTypes.default.string, warning: _propTypes.default.bool, width: _propTypes.default.oneOfType([_propTypes.default.number, _propTypes.default.string]).isRequired, onBlur: _propTypes.default.func, onValueChange: _propTypes.default.func.isRequired, onFocus: _propTypes.default.func, onKeyDown: _propTypes.default.func, onMouseEnter: _propTypes.default.func, onMouseLeave: _propTypes.default.func, onMouseOver: _propTypes.default.func, isHoliday: _propTypes.default.func.isRequired }, _class2.defaultProps = { minDate: _constants.MIN_FULLDATE, maxDate: _constants.MAX_FULLDATE, isHoliday: function isHoliday(_day, isWeekend) {return isWeekend;} }, _class2.validate = function (value, range) {if (range === void 0) {range = {};}if (!value) {return false;}var _range = range,_range$minDate = _range.minDate,minDate = _range$minDate === void 0 ? _constants.MIN_FULLDATE : _range$minDate,_range$maxDate = _range.maxDate,maxDate = _range$maxDate === void 0 ? _constants.MAX_FULLDATE : _range$maxDate;var internalDate = new _InternalDate.InternalDate({ order: _types.InternalDateOrder.DMY, separator: _types.InternalDateSeparator.Dot }).setRangeStart(new _InternalDate.InternalDate({ value: minDate })).setRangeEnd(new _InternalDate.InternalDate({ value: maxDate })).parseValue(value);return internalDate.validate({ checks: [_types.InternalDateValidateCheck.NotNull, _types.InternalDateValidateCheck.Number, _types.InternalDateValidateCheck.Native, _types.InternalDateValidateCheck.Limits, _types.InternalDateValidateCheck.Range] });}, _temp)) || _class;exports.DatePicker = DatePicker;
406
+ */value: _propTypes.default.string, warning: _propTypes.default.bool, width: _propTypes.default.oneOfType([_propTypes.default.number, _propTypes.default.string]).isRequired, onBlur: _propTypes.default.func, onValueChange: _propTypes.default.func.isRequired, onFocus: _propTypes.default.func, onKeyDown: _propTypes.default.func, onMouseEnter: _propTypes.default.func, onMouseLeave: _propTypes.default.func, onMouseOver: _propTypes.default.func, isHoliday: _propTypes.default.func.isRequired, renderDay: _propTypes.default.func.isRequired, onMonthChange: _propTypes.default.func }, _class2.defaultProps = { minDate: _constants.MIN_FULLDATE, maxDate: _constants.MAX_FULLDATE, isHoliday: function isHoliday(_day, isWeekend) {return isWeekend;}, renderDay: function renderDay(date) {return date.date;} }, _class2.validate = function (value, range) {if (range === void 0) {range = {};}if (!value) {return false;}var _range = range,_range$minDate = _range.minDate,minDate = _range$minDate === void 0 ? _constants.MIN_FULLDATE : _range$minDate,_range$maxDate = _range.maxDate,maxDate = _range$maxDate === void 0 ? _constants.MAX_FULLDATE : _range$maxDate;var internalDate = new _InternalDate.InternalDate({ order: _types.InternalDateOrder.DMY, separator: _types.InternalDateSeparator.Dot }).setRangeStart(new _InternalDate.InternalDate({ value: minDate })).setRangeEnd(new _InternalDate.InternalDate({ value: maxDate })).parseValue(value);return internalDate.validate({ checks: [_types.InternalDateValidateCheck.NotNull, _types.InternalDateValidateCheck.Number, _types.InternalDateValidateCheck.Native, _types.InternalDateValidateCheck.Limits, _types.InternalDateValidateCheck.Range] });}, _temp)) || _class;exports.DatePicker = DatePicker;
@@ -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","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"]}
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","renderDay","onMonthChange","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":"0cAAA;AACA;;AAEA;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,iD;;AAEA,IAAMA,gBAAgB,GAAG;AACvBC,EAAAA,SAAS,EAAE,IADY;AAEvBC,EAAAA,QAAQ,EAAE,IAFa;AAGvBC,EAAAA,OAAO,EAAE,IAHc;AAIvBC,EAAAA,KAAK,EAAE,IAJgB;AAKvBC,EAAAA,IAAI,EAAE,IALiB;AAMvBC,EAAAA,SAAS,EAAE,IANY,EAAzB;;;AASO,IAAMC,SAAS,GAAG,GAAlB,C;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA2EMC,U,OADZC,kB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA0FQC,IAAAA,K,GAAyB,EAAEC,MAAM,EAAE,KAAV,EAAiBC,4BAA4B,EAAE,KAA/C,E;;AAExBC,IAAAA,K,GAA0B,I;AAC1BC,IAAAA,O,GAAU,K;AACVC,IAAAA,W;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA4DDC,IAAAA,U,GAAa,UAACC,KAAD,EAAqE;AACvF,UAAIC,MAAM,GAAG,IAAb,CADuF;;AAGnD,YAAKD,KAH8C,CAG/EE,KAH+E,eAG/EA,KAH+E,CAGxEC,OAHwE,eAGxEA,OAHwE,CAG/DC,OAH+D,eAG/DA,OAH+D;;AAKvF,UAAMC,YAAY,GAAG,MAAKC,gBAAL,CAAsBJ,KAAtB,CAArB;AACA,UAAMK,IAAI,GAAGF,YAAY,GAAGA,YAAY,CAACG,cAAb,EAAH,GAAmC,IAA5D;;AAEA,UAAMC,aAAa,GAAG,MAAKH,gBAAL,CAAsBH,OAAtB,CAAtB;AACA,UAAMO,gBAAgB,GAAID,aAAa,IAAIA,aAAa,CAACD,cAAd,EAAlB,IAAqDG,SAA9E;;AAEA,UAAMC,aAAa,GAAG,MAAKN,gBAAL,CAAsBF,OAAtB,CAAtB;AACA,UAAMS,gBAAgB,GAAID,aAAa,IAAIA,aAAa,CAACJ,cAAd,EAAlB,IAAqDG,SAA9E;;AAEA,UAAI,MAAKlB,KAAL,CAAWC,MAAf,EAAuB;AACrBO,QAAAA,MAAM;AACJ,qCAAC,oCAAD,IAAmB,SAAS,EAAE,MAAKa,SAAnC,EAA8C,OAAO,EAAE,CAAvD,EAA0D,KAAK,EAAE,MAAKd,KAAL,CAAWe,SAA5E;AACE,qCAAC,cAAD;AACE,UAAA,KAAK,EAAER,IADT;AAEE,UAAA,OAAO,EAAEG,gBAFX;AAGE,UAAA,OAAO,EAAEG,gBAHX;AAIE,UAAA,MAAM,EAAE,MAAKG,UAJf;AAKE,UAAA,QAAQ,EAAE,MAAKC,YALjB;AAME,UAAA,eAAe,EAAE,MAAKjB,KAAL,CAAWkB,eAN9B;AAOE,UAAA,SAAS,EAAE,MAAKC,SAPlB;AAQE,UAAA,SAAS,EAAE,MAAKnB,KAAL,CAAWoB,SARxB;AASE,UAAA,aAAa,EAAE,MAAKpB,KAAL,CAAWqB,aAT5B,GADF,CADF;;;;AAeD;;AAED;AACE;AACE,UAAA,SAAS,EAAEC,mBAAOC,IAAP,EADb;AAEE,UAAA,KAAK,EAAE,MAAKC,YAAL,EAFT;AAGE,UAAA,YAAY,EAAE,MAAKxB,KAAL,CAAWyB,YAH3B;AAIE,UAAA,YAAY,EAAE,MAAKzB,KAAL,CAAW0B,YAJ3B;AAKE,UAAA,WAAW,EAAE,MAAK1B,KAAL,CAAW2B,WAL1B;;AAOE,qCAAC,oBAAD;AACM,sCAAY3B,KAAZ,EAAmBjB,gBAAnB,CADN;AAEE,UAAA,GAAG,EAAE,MAAK6C,WAFZ;AAGE,UAAA,KAAK,EAAE,MAAK5B,KAAL,CAAWE,KAAX,IAAoB,EAH7B;AAIE,UAAA,KAAK,EAAC,MAJR;AAKE,UAAA,QAAQ,MALV;AAME,UAAA,OAAO,EAAE,MAAKF,KAAL,CAAWG,OANtB;AAOE,UAAA,OAAO,EAAE,MAAKH,KAAL,CAAWI,OAPtB;AAQE,UAAA,MAAM,EAAE,MAAKyB,UARf;AASE,UAAA,OAAO,EAAE,MAAKC,WAThB;AAUE,UAAA,aAAa,EAAE,MAAK9B,KAAL,CAAW+B,aAV5B,IAPF;;AAmBG,cAAKtC,KAAL,CAAWE,4BAAX;AACC,qCAAC,gCAAD;AACE,UAAA,aAAa,EAAE,MAAKK,KAAL,CAAW+B,aAD5B;AAEE,UAAA,KAAK,EAAE,MAAK/B,KAAL,CAAWE,KAAX,IAAoB,EAF7B;AAGE,UAAA,OAAO,EAAE,MAAKF,KAAL,CAAWG,OAHtB;AAIE,UAAA,OAAO,EAAE,MAAKH,KAAL,CAAWI,OAJtB;AAKE,UAAA,QAAQ,EAAE,MAAKJ,KAAL,CAAWf,QALvB,GApBJ;;;AA4BG,SAAC,MAAKQ,KAAL,CAAWE,4BAAZ,IAA4CM,MA5B/C,CADF;;;AAgCD,K;;AAEMa,IAAAA,S,GAAY,YAAM;AACvB,aAAO,uEAAP;AACD,K;;AAEOU,IAAAA,Y,GAAe,YAAM;AACnBQ,MAAAA,KADmB,GACT,MAAKhC,KADI,CACnBgC,KADmB;AAE3B,aAAO,0BAAcA,KAAd,IAAuB,EAAEA,KAAK,EAALA,KAAF,EAAvB,GAAmC,EAAEC,QAAQ,EAAE3C,SAAZ,EAA1C;AACD,K;;AAEOsC,IAAAA,W,GAAc,UAACM,GAAD,EAA2B;AAC/C,YAAKtC,KAAL,GAAasC,GAAb;AACD,K;;;;;;;;;;;;;AAaOJ,IAAAA,W,GAAc,YAAM;AAC1B,UAAI,MAAKjC,OAAT,EAAkB;AAChB;AACD;;AAED,YAAKA,OAAL,GAAe,IAAf;;AAEA,YAAKsC,QAAL,CAAc,EAAEzC,MAAM,EAAE,IAAV,EAAd;;AAEA,UAAI,MAAKM,KAAL,CAAWoC,OAAf,EAAwB;AACtB,cAAKpC,KAAL,CAAWoC,OAAX;AACD;AACF,K;;AAEOP,IAAAA,U,GAAa,YAAM;AACzB,UAAI,CAAC,MAAKhC,OAAV,EAAmB;AACjB;AACD;;AAED,YAAKA,OAAL,GAAe,KAAf;AACA,YAAKwC,KAAL;;AAEA,UAAI,MAAKrC,KAAL,CAAWsC,MAAf,EAAuB;AACrB,cAAKtC,KAAL,CAAWsC,MAAX;AACD;AACF,K;;AAEOtB,IAAAA,U,GAAa,UAACuB,SAAD,EAAkC;AACrD,YAAKtB,YAAL,CAAkBsB,SAAlB;AACA,YAAKC,IAAL;AACD,K;;AAEOvB,IAAAA,Y,GAAe,gBAA8C,KAA3CV,IAA2C,QAA3CA,IAA2C,CAArCkC,KAAqC,QAArCA,KAAqC,CAA9BC,IAA8B,QAA9BA,IAA8B;AACnE,UAAMxC,KAAK,GAAGyC,iDAAwBC,oBAAxB,CAA6C,EAAErC,IAAI,EAAJA,IAAF,EAAQkC,KAAK,EAAEA,KAAK,GAAG,CAAvB,EAA0BC,IAAI,EAAJA,IAA1B,EAA7C,CAAd;AACA,UAAI,MAAK1C,KAAL,CAAW+B,aAAf,EAA8B;AAC5B,cAAK/B,KAAL,CAAW+B,aAAX,CAAyB7B,KAAzB;AACD;AACF,K;;AAEOiB,IAAAA,S,GAAY,iBAAkF,KAA/EZ,IAA+E,SAA/EA,IAA+E,CAAzEkC,KAAyE,SAAzEA,KAAyE,CAAlEC,IAAkE,SAAlEA,IAAkE,CAA5DG,SAA4D,SAA5DA,SAA4D;AACpG,UAAMC,UAAU,GAAGH,iDAAwBC,oBAAxB,CAA6C,EAAErC,IAAI,EAAJA,IAAF,EAAQkC,KAAK,EAAEA,KAAK,GAAG,CAAvB,EAA0BC,IAAI,EAAJA,IAA1B,EAA7C,CAAnB;AACA,aAAO,MAAK1C,KAAL,CAAWmB,SAAX,CAAqB2B,UAArB,EAAiCD,SAAjC,CAAP;AACD,K,wDA9LME,iB,GAAP,6BAA2B,CACzB,IAAI,KAAK/C,KAAL,CAAWgD,yBAAX,IAAwCC,gBAA5C,EAAsD,CACpD,KAAKd,QAAL,CAAc,EACZxC,4BAA4B,EAAE,IADlB,EAAd,EAGD,CACD,IAAI,KAAKK,KAAL,CAAWhB,SAAf,EAA0B,CACxB,KAAKkE,KAAL,GACD,CACF,C,QAEMC,kB,GAAP,8BAA4B,KAClBlE,QADkB,GACL,KAAKe,KADA,CAClBf,QADkB,KAElBS,MAFkB,GAEP,KAAKD,KAFE,CAElBC,MAFkB,CAG1B,IAAIT,QAAQ,IAAIS,MAAhB,EAAwB,CACtB,KAAK2C,KAAL,GACD,CACF,C,CAED;AACF;AACA,K,QACSG,I,GAAP,gBAAc,CACZ,IAAI,KAAK5C,KAAT,EAAgB,CACd,KAAKA,KAAL,CAAW4C,IAAX,GACD,CACD,KAAKX,UAAL,GACD,C,CAED;AACF;AACA,K,QACSqB,K,GAAP,iBAAe,CACb,IAAI,KAAKlD,KAAL,CAAWf,QAAf,EAAyB,CACvB,OACD,CACD,IAAI,KAAKW,KAAT,EAAgB,CACd,KAAKA,KAAL,CAAWsD,KAAX,GACD,CACD,KAAKpB,WAAL,GACD,C,CAED;AACF;AACA;AACA,K,QACSO,K,GAAP,iBAAe,CACb,KAAKF,QAAL,CAAc,EAAEzC,MAAM,EAAE,KAAV,EAAd,EACD,C,QAEM0D,M,GAAP,kBAAgB,CACd,oBACE,6BAAC,4BAAD,2BAAe,WAAW,EAAE,KAAKtD,WAAjC,IAAkD,KAAKE,KAAvD,GACG,KAAKD,UADR,CADF,CAKD,C,QAiFOO,gB,GAAR,0BAAyBJ,KAAzB,EAA6E,CAC3E,IAAIA,KAAK,KAAKS,SAAV,IAAuBT,KAAK,KAAK,IAArC,EAA2C,CACzC,OAAOS,SAAP,CACD,CACD,IAAMJ,IAAI,GAAG,IAAI8C,0BAAJ,CAAiB,EAAEnD,KAAK,EAALA,KAAF,EAAjB,CAAb,CACA,IAAIK,IAAI,CAAC+C,QAAL,CAAc,EAAEC,MAAM,EAAE,CAACC,iCAA0BC,OAA3B,EAAoCD,iCAA0BE,MAA9D,CAAV,EAAd,CAAJ,EAAsG,CACpG,OAAOnD,IAAP,CACD,CACD,OAAOI,SAAP,CACD,C,qBAjP6BgD,eAAMC,a,WACtBC,mB,GAAsB,Y,UAEtBC,S,GAAY,EACxB9E,SAAS,EAAE+E,mBAAUC,IADG,EAGxB/E,QAAQ,EAAE8E,mBAAUC,IAHI,EAKxB;AACJ;AACA,KACI9C,eAAe,EAAE6C,mBAAUC,IARH,EAUxB7E,KAAK,EAAE4E,mBAAUC,IAVO,EAYxB;AACJ;AACA,KACI5D,OAAO,EAAE2D,mBAAUE,MAAV,CAAiBC,UAfF,EAiBxBnD,SAAS,EAAEgD,mBAAUI,KAAV,CAAgB,CAAC,MAAD,EAAS,OAAT,CAAhB,CAjBa,EAmBxB;AACJ;AACA,KACIhE,OAAO,EAAE4D,mBAAUE,MAAV,CAAiBC,UAtBF,EAwBxB;AACJ;AACA,KACIhE,KAAK,EAAE6D,mBAAUE,MA3BO,EA6BxB/E,OAAO,EAAE6E,mBAAUC,IA7BK,EA+BxBhC,KAAK,EAAE+B,mBAAUK,SAAV,CAAoB,CAACL,mBAAUM,MAAX,EAAmBN,mBAAUE,MAA7B,CAApB,EAA0DC,UA/BzC,EAiCxB5B,MAAM,EAAEyB,mBAAUO,IAjCM,EAmCxBvC,aAAa,EAAEgC,mBAAUO,IAAV,CAAeJ,UAnCN,EAqCxB9B,OAAO,EAAE2B,mBAAUO,IArCK,EAuCxBjF,SAAS,EAAE0E,mBAAUO,IAvCG,EAyCxB7C,YAAY,EAAEsC,mBAAUO,IAzCA,EA2CxB5C,YAAY,EAAEqC,mBAAUO,IA3CA,EA6CxB3C,WAAW,EAAEoC,mBAAUO,IA7CC,EA+CxBnD,SAAS,EAAE4C,mBAAUO,IAAV,CAAeJ,UA/CF,EAiDxB9C,SAAS,EAAE2C,mBAAUO,IAAV,CAAeJ,UAjDF,EAmDxB7C,aAAa,EAAE0C,mBAAUO,IAnDD,E,UAsDZC,Y,GAAe,EAC3BpE,OAAO,EAAEqE,uBADkB,EAE3BpE,OAAO,EAAEqE,uBAFkB,EAG3BtD,SAAS,EAAE,mBAACuD,IAAD,EAAwB7B,SAAxB,UAA+CA,SAA/C,EAHgB,EAI3BzB,SAAS,EAAE,mBAACb,IAAD,UAA6BA,IAAI,CAACA,IAAlC,EAJgB,E,UAOf+C,Q,GAAW,UAACpD,KAAD,EAA0ByE,KAA1B,EAAiF,KAAvDA,KAAuD,cAAvDA,KAAuD,GAAP,EAAO,EACxG,IAAI,CAACzE,KAAL,EAAY,CACV,OAAO,KAAP,CACD,CAHuG,aAK7CyE,KAL6C,yBAKhGxE,OALgG,CAKhGA,OALgG,+BAKtFqE,uBALsF,0CAKxEpE,OALwE,CAKxEA,OALwE,+BAK9DqE,uBAL8D,kBAMxG,IAAMpE,YAAY,GAAG,IAAIgD,0BAAJ,CAAiB,EACpCuB,KAAK,EAAEC,yBAAkBC,GADW,EAEpCC,SAAS,EAAEC,6BAAsBC,GAFG,EAAjB,EAIlBC,aAJkB,CAIJ,IAAI7B,0BAAJ,CAAiB,EAAEnD,KAAK,EAAEC,OAAT,EAAjB,CAJI,EAKlBgF,WALkB,CAKN,IAAI9B,0BAAJ,CAAiB,EAAEnD,KAAK,EAAEE,OAAT,EAAjB,CALM,EAMlBgF,UANkB,CAMPlF,KANO,CAArB,CAQA,OAAOG,YAAY,CAACiD,QAAb,CAAsB,EAC3BC,MAAM,EAAE,CACNC,iCAA0BC,OADpB,EAEND,iCAA0B6B,MAFpB,EAGN7B,iCAA0BE,MAHpB,EAINF,iCAA0B8B,MAJpB,EAKN9B,iCAA0B+B,KALpB,CADmB,EAAtB,CAAP,CASD,C","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, CalendarMonthChangeInfo } 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 /**\n * Метод отрисовки дат в календаре\n * @default (date) => date.date as number\n * @param {CalendarDateShape} date - дата в формате `{ year: number; month: number; date: number; }`\n *\n * @returns {ReactNode} возвращает компонент, который отрисовывает контент числа месяца\n */\n renderDay: (date: CalendarDateShape) => React.ReactNode;\n\n /**\n * Вызывается при каждом изменении месяца\n * @param {CalendarMonthChangeInfo} changeInfo - информация о изменении отображаемого месяца, где\n * `month: number` - номер текущего отображаемого месяца от 0 до 11,\n * `year: number` - отображаемый год,\n */\n onMonthChange?: (changeInfo: CalendarMonthChangeInfo) => void;\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 renderDay: PropTypes.func.isRequired,\n\n onMonthChange: PropTypes.func,\n };\n\n public static defaultProps = {\n minDate: MIN_FULLDATE,\n maxDate: MAX_FULLDATE,\n isHoliday: (_day: DatePickerValue, isWeekend: boolean) => isWeekend,\n renderDay: (date: CalendarDateShape) => date.date,\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 renderDay={this.props.renderDay}\n onMonthChange={this.props.onMonthChange}\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"]}
@@ -305,3 +305,25 @@ const en_GB = {
305
305
  separator: DateSeparator.Slash,
306
306
  };
307
307
  ```
308
+
309
+ ### Кастомизирование отображения даты
310
+
311
+ ```jsx harmony
312
+ import MagicWand from '@skbkontur/react-icons/MagicWand';
313
+
314
+ const [value, setValue] = React.useState();
315
+
316
+ const CustomDayItem = ({ date }) => {
317
+ const isEven = (num) => num % 2 === 0;
318
+
319
+ return (
320
+ <div>
321
+ {isEven(date.date) ? <MagicWand /> : date.date}
322
+ </div>
323
+ );
324
+ };
325
+
326
+ const renderDay = (date) => <CustomDayItem date={date} />;
327
+
328
+ <DatePicker value={value} onValueChange={setValue} renderDay={renderDay} />;
329
+ ```
@@ -1,5 +1,5 @@
1
1
  import React from 'react';
2
- import { CalendarDateShape } from '../../internal/Calendar';
2
+ import { CalendarDateShape, CalendarMonthChangeInfo } from '../../internal/Calendar';
3
3
  import { Nullable } from '../../typings/utility-types';
4
4
  interface Props {
5
5
  maxDate?: CalendarDateShape;
@@ -11,6 +11,8 @@ interface Props {
11
11
  isHoliday?: (day: CalendarDateShape & {
12
12
  isWeekend: boolean;
13
13
  }) => boolean;
14
+ renderDay?: (date: CalendarDateShape) => React.ReactNode;
15
+ onMonthChange?: (changeInfo: CalendarMonthChangeInfo) => void;
14
16
  }
15
17
  interface State {
16
18
  date: CalendarDateShape;
@@ -27,6 +27,8 @@ var _locale = require("./locale");var _dec, _class, _class2, _temp;
27
27
 
28
28
 
29
29
 
30
+
31
+
30
32
  var getTodayCalendarDate = function getTodayCalendarDate() {
31
33
  var d = new Date();
32
34
  return {
@@ -88,6 +90,8 @@ Picker = (_dec = (0, _decorators.locale)('DatePicker', _locale.DatePickerLocaleH
88
90
 
89
91
 
90
92
 
93
+
94
+
91
95
 
92
96
 
93
97
 
@@ -136,4 +140,4 @@ Picker = (_dec = (0, _decorators.locale)('DatePicker', _locale.DatePickerLocaleH
136
140
  }
137
141
 
138
142
  return today;
139
- };var _today = getTodayCalendarDate();_this.state = { date: _this.getInitialDate(_today), today: _today };return _this;}var _proto = Picker.prototype;_proto.componentDidUpdate = function componentDidUpdate(prevProps) {var value = this.props.value;if (value && !(0, _shallowequal.default)(value, prevProps.value)) {this.scrollToMonth(value.month, value.year);}};_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 _this3 = this;var date = this.state.date;return /*#__PURE__*/_react.default.createElement("div", { className: _Picker.styles.root(this.theme), onMouseDown: function onMouseDown(e) {return e.preventDefault();} }, /*#__PURE__*/_react.default.createElement(_Calendar.Calendar, { ref: function ref(c) {return _this3.calendar = c;}, value: this.props.value, initialMonth: date.month, initialYear: date.year, onSelect: this.props.onPick, minDate: this.props.minDate, maxDate: this.props.maxDate, isHoliday: this.props.isHoliday }), this.props.enableTodayLink && this.renderTodayLink(), ' ');};_proto.renderTodayLink = function renderTodayLink() {var _this$locale = this.locale,order = _this$locale.order,separator = _this$locale.separator;var today = new _InternalDate.InternalDate({ order: order, separator: separator }).setComponents(_InternalDateGetter.InternalDateGetter.getTodayComponents());return /*#__PURE__*/_react.default.createElement("button", { "data-tid": "Picker__todayWrapper", className: _Picker.styles.todayWrapper(this.theme), onClick: this.handleSelectToday(today), tabIndex: -1 }, this.locale.today + " " + today.toString({ withPad: true, withSeparator: true }));};return Picker;}(_react.default.Component), _class2.__KONTUR_REACT_UI__ = 'Picker', _temp)) || _class);exports.Picker = Picker;
143
+ };var _today = getTodayCalendarDate();_this.state = { date: _this.getInitialDate(_today), today: _today };return _this;}var _proto = Picker.prototype;_proto.componentDidUpdate = function componentDidUpdate(prevProps) {var value = this.props.value;if (value && !(0, _shallowequal.default)(value, prevProps.value)) {this.scrollToMonth(value.month, value.year);}};_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 _this3 = this;var date = this.state.date;return /*#__PURE__*/_react.default.createElement("div", { className: _Picker.styles.root(this.theme), onMouseDown: function onMouseDown(e) {return e.preventDefault();} }, /*#__PURE__*/_react.default.createElement(_Calendar.Calendar, { ref: function ref(c) {return _this3.calendar = c;}, value: this.props.value, initialMonth: date.month, initialYear: date.year, onSelect: this.props.onPick, minDate: this.props.minDate, maxDate: this.props.maxDate, isHoliday: this.props.isHoliday, renderDay: this.props.renderDay, onMonthChange: this.props.onMonthChange }), this.props.enableTodayLink && this.renderTodayLink(), ' ');};_proto.renderTodayLink = function renderTodayLink() {var _this$locale = this.locale,order = _this$locale.order,separator = _this$locale.separator;var today = new _InternalDate.InternalDate({ order: order, separator: separator }).setComponents(_InternalDateGetter.InternalDateGetter.getTodayComponents());return /*#__PURE__*/_react.default.createElement("button", { "data-tid": "Picker__todayWrapper", className: _Picker.styles.todayWrapper(this.theme), onClick: this.handleSelectToday(today), tabIndex: -1 }, this.locale.today + " " + today.toString({ withPad: true, withSeparator: true }));};return Picker;}(_react.default.Component), _class2.__KONTUR_REACT_UI__ = 'Picker', _temp)) || _class);exports.Picker = Picker;
@@ -1 +1 @@
1
- {"version":3,"sources":["Picker.tsx"],"names":["getTodayCalendarDate","d","Date","date","getDate","month","getMonth","year","getFullYear","Picker","DatePickerLocaleHelper","props","theme","calendar","locale","scrollToMonth","handleSelectToday","today","onSelect","toNativeFormat","state","getInitialDate","value","minDate","maxDate","componentDidUpdate","prevProps","render","renderMain","styles","root","e","preventDefault","c","onPick","isHoliday","enableTodayLink","renderTodayLink","order","separator","InternalDate","setComponents","InternalDateGetter","getTodayComponents","todayWrapper","toString","withPad","withSeparator","React","Component","__KONTUR_REACT_UI__"],"mappings":"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","sourcesContent":["import React from 'react';\nimport shallowEqual from 'shallowequal';\n\nimport { InternalDate } from '../../lib/date/InternalDate';\nimport { InternalDateGetter } from '../../lib/date/InternalDateGetter';\nimport { Calendar, CalendarDateShape, isGreater, isLess } from '../../internal/Calendar';\nimport { locale } from '../../lib/locale/decorators';\nimport { Nullable } from '../../typings/utility-types';\nimport { Theme } from '../../lib/theming/Theme';\nimport { ThemeContext } from '../../lib/theming/ThemeContext';\n\nimport { styles } from './Picker.styles';\nimport { DatePickerLocale, DatePickerLocaleHelper } from './locale';\n\ninterface Props {\n maxDate?: CalendarDateShape;\n minDate?: CalendarDateShape;\n value: Nullable<CalendarDateShape>;\n onPick: (date: CalendarDateShape) => void;\n onSelect?: (date: CalendarDateShape) => void;\n enableTodayLink?: boolean;\n isHoliday?: (day: CalendarDateShape & { isWeekend: boolean }) => boolean;\n}\n\ninterface State {\n date: CalendarDateShape;\n today: CalendarDateShape;\n}\n\nconst getTodayCalendarDate = () => {\n const d = new Date();\n return {\n date: d.getDate(),\n month: d.getMonth(),\n year: d.getFullYear(),\n };\n};\n\n@locale('DatePicker', DatePickerLocaleHelper)\nexport class Picker extends React.Component<Props, State> {\n public static __KONTUR_REACT_UI__ = 'Picker';\n\n private theme!: Theme;\n private calendar: Calendar | null = null;\n private readonly locale!: DatePickerLocale;\n\n constructor(props: Props) {\n super(props);\n const today = getTodayCalendarDate();\n this.state = {\n date: this.getInitialDate(today),\n today,\n };\n }\n\n public componentDidUpdate(prevProps: Props) {\n const { value } = this.props;\n if (value && !shallowEqual(value, prevProps.value)) {\n this.scrollToMonth(value.month, value.year);\n }\n }\n\n public render() {\n return (\n <ThemeContext.Consumer>\n {(theme) => {\n this.theme = theme;\n return this.renderMain();\n }}\n </ThemeContext.Consumer>\n );\n }\n\n private renderMain() {\n const { date } = this.state;\n\n return (\n <div className={styles.root(this.theme)} onMouseDown={(e) => e.preventDefault()}>\n <Calendar\n ref={(c) => (this.calendar = c)}\n value={this.props.value}\n initialMonth={date.month}\n initialYear={date.year}\n onSelect={this.props.onPick}\n minDate={this.props.minDate}\n maxDate={this.props.maxDate}\n isHoliday={this.props.isHoliday}\n />\n {this.props.enableTodayLink && this.renderTodayLink()}{' '}\n </div>\n );\n }\n\n private scrollToMonth = (month: number, year: number) => {\n if (this.calendar) {\n this.calendar.scrollToMonth(month, year);\n }\n };\n\n private renderTodayLink() {\n const { order, separator } = this.locale;\n const today = new InternalDate({ order, separator }).setComponents(InternalDateGetter.getTodayComponents());\n return (\n <button\n data-tid=\"Picker__todayWrapper\"\n className={styles.todayWrapper(this.theme)}\n onClick={this.handleSelectToday(today)}\n tabIndex={-1}\n >\n {`${this.locale.today} ${today.toString({ withPad: true, withSeparator: true })}`}\n </button>\n );\n }\n\n private handleSelectToday = (today: InternalDate) => () => {\n if (this.props.onSelect) {\n this.props.onSelect(today.toNativeFormat()!);\n }\n if (this.calendar) {\n const { month, year } = this.state.today;\n this.calendar.scrollToMonth(month, year);\n }\n };\n\n private getInitialDate = (today: CalendarDateShape) => {\n if (this.props.value) {\n return this.props.value;\n }\n\n if (this.props.minDate && isLess(today, this.props.minDate)) {\n return this.props.minDate;\n }\n\n if (this.props.maxDate && isGreater(today, this.props.maxDate)) {\n return this.props.maxDate;\n }\n\n return today;\n };\n}\n"]}
1
+ {"version":3,"sources":["Picker.tsx"],"names":["getTodayCalendarDate","d","Date","date","getDate","month","getMonth","year","getFullYear","Picker","DatePickerLocaleHelper","props","theme","calendar","locale","scrollToMonth","handleSelectToday","today","onSelect","toNativeFormat","state","getInitialDate","value","minDate","maxDate","componentDidUpdate","prevProps","render","renderMain","styles","root","e","preventDefault","c","onPick","isHoliday","renderDay","onMonthChange","enableTodayLink","renderTodayLink","order","separator","InternalDate","setComponents","InternalDateGetter","getTodayComponents","todayWrapper","toString","withPad","withSeparator","React","Component","__KONTUR_REACT_UI__"],"mappings":"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","sourcesContent":["import React from 'react';\nimport shallowEqual from 'shallowequal';\n\nimport { InternalDate } from '../../lib/date/InternalDate';\nimport { InternalDateGetter } from '../../lib/date/InternalDateGetter';\nimport { Calendar, CalendarDateShape, CalendarMonthChangeInfo, isGreater, isLess } from '../../internal/Calendar';\nimport { locale } from '../../lib/locale/decorators';\nimport { Nullable } from '../../typings/utility-types';\nimport { Theme } from '../../lib/theming/Theme';\nimport { ThemeContext } from '../../lib/theming/ThemeContext';\n\nimport { styles } from './Picker.styles';\nimport { DatePickerLocale, DatePickerLocaleHelper } from './locale';\n\ninterface Props {\n maxDate?: CalendarDateShape;\n minDate?: CalendarDateShape;\n value: Nullable<CalendarDateShape>;\n onPick: (date: CalendarDateShape) => void;\n onSelect?: (date: CalendarDateShape) => void;\n enableTodayLink?: boolean;\n isHoliday?: (day: CalendarDateShape & { isWeekend: boolean }) => boolean;\n renderDay?: (date: CalendarDateShape) => React.ReactNode;\n onMonthChange?: (changeInfo: CalendarMonthChangeInfo) => void;\n}\n\ninterface State {\n date: CalendarDateShape;\n today: CalendarDateShape;\n}\n\nconst getTodayCalendarDate = () => {\n const d = new Date();\n return {\n date: d.getDate(),\n month: d.getMonth(),\n year: d.getFullYear(),\n };\n};\n\n@locale('DatePicker', DatePickerLocaleHelper)\nexport class Picker extends React.Component<Props, State> {\n public static __KONTUR_REACT_UI__ = 'Picker';\n\n private theme!: Theme;\n private calendar: Calendar | null = null;\n private readonly locale!: DatePickerLocale;\n\n constructor(props: Props) {\n super(props);\n const today = getTodayCalendarDate();\n this.state = {\n date: this.getInitialDate(today),\n today,\n };\n }\n\n public componentDidUpdate(prevProps: Props) {\n const { value } = this.props;\n if (value && !shallowEqual(value, prevProps.value)) {\n this.scrollToMonth(value.month, value.year);\n }\n }\n\n public render() {\n return (\n <ThemeContext.Consumer>\n {(theme) => {\n this.theme = theme;\n return this.renderMain();\n }}\n </ThemeContext.Consumer>\n );\n }\n\n private renderMain() {\n const { date } = this.state;\n\n return (\n <div className={styles.root(this.theme)} onMouseDown={(e) => e.preventDefault()}>\n <Calendar\n ref={(c) => (this.calendar = c)}\n value={this.props.value}\n initialMonth={date.month}\n initialYear={date.year}\n onSelect={this.props.onPick}\n minDate={this.props.minDate}\n maxDate={this.props.maxDate}\n isHoliday={this.props.isHoliday}\n renderDay={this.props.renderDay}\n onMonthChange={this.props.onMonthChange}\n />\n {this.props.enableTodayLink && this.renderTodayLink()}{' '}\n </div>\n );\n }\n\n private scrollToMonth = (month: number, year: number) => {\n if (this.calendar) {\n this.calendar.scrollToMonth(month, year);\n }\n };\n\n private renderTodayLink() {\n const { order, separator } = this.locale;\n const today = new InternalDate({ order, separator }).setComponents(InternalDateGetter.getTodayComponents());\n return (\n <button\n data-tid=\"Picker__todayWrapper\"\n className={styles.todayWrapper(this.theme)}\n onClick={this.handleSelectToday(today)}\n tabIndex={-1}\n >\n {`${this.locale.today} ${today.toString({ withPad: true, withSeparator: true })}`}\n </button>\n );\n }\n\n private handleSelectToday = (today: InternalDate) => () => {\n if (this.props.onSelect) {\n this.props.onSelect(today.toNativeFormat()!);\n }\n if (this.calendar) {\n const { month, year } = this.state.today;\n this.calendar.scrollToMonth(month, year);\n }\n };\n\n private getInitialDate = (today: CalendarDateShape) => {\n if (this.props.value) {\n return this.props.value;\n }\n\n if (this.props.minDate && isLess(today, this.props.minDate)) {\n return this.props.minDate;\n }\n\n if (this.props.maxDate && isGreater(today, this.props.maxDate)) {\n return this.props.maxDate;\n }\n\n return today;\n };\n}\n"]}
@@ -68,7 +68,7 @@ export interface TooltipProps extends CommonProps {
68
68
  * Хэндлер, вызываемый при клике по крестику или
69
69
  * снаружи тултипа
70
70
  */
71
- onCloseRequest?: () => void;
71
+ onCloseRequest?: (event?: Event | React.MouseEvent) => void;
72
72
  /**
73
73
  * Хэндлер, вызываемый при закрытии тултипа
74
74
  */
@@ -482,7 +482,7 @@ Tooltip = (0, _rootNode.rootNode)(_class = (_temp = _class2 = /*#__PURE__*/funct
482
482
  _this.clickedOutside = _this.isClickOutsideContent(event);
483
483
  if (_this.clickedOutside) {
484
484
  if (_this.props.onCloseRequest) {
485
- _this.props.onCloseRequest();
485
+ _this.props.onCloseRequest(event);
486
486
  }
487
487
  _this.close();
488
488
  }
@@ -526,7 +526,7 @@ Tooltip = (0, _rootNode.rootNode)(_class = (_temp = _class2 = /*#__PURE__*/funct
526
526
  }
527
527
 
528
528
  if (_this.props.onCloseRequest) {
529
- _this.props.onCloseRequest();
529
+ _this.props.onCloseRequest(event);
530
530
  }
531
531
 
532
532
  _this.close();
@@ -1 +1 @@
1
- {"version":3,"sources":["Tooltip.tsx"],"names":["Positions","Tooltip","rootNode","state","opened","focused","theme","hoverTimeout","contentElement","positions","clickedOutside","setRootNode","renderContent","content","props","render","refContent","styles","tooltipContent","renderCloseButton","getRenderLayerAnchorElement","node","open","setState","close","handleMouseEnter","event","isHoverAnchor","trigger","target","clearHoverTimeout","window","setTimeout","delay","handleMouseLeave","relatedTarget","handleClick","handleClickOutsideAnchor","isClickOutsideContent","onCloseRequest","handleFocus","handleBlur","handleCloseButtonClick","stopPropagation","onCloseClick","defaultPrevented","componentDidUpdate","prevProps","allowedPositions","pos","posChanged","allowedChanged","componentWillUnmount","ThemeFactory","create","popupPinOffset","tooltipPinOffset","popupMargin","tooltipMargin","popupBorder","tooltipBorder","popupBorderRadius","tooltipBorderRadius","popupPinSize","tooltipPinSize","popupPinOffsetX","tooltipPinOffsetX","popupPinOffsetY","tooltipPinOffsetY","renderMain","hasCross","closeButton","undefined","triggersWithoutCloseButton","includes","cross","show","hide","getProps","popupProps","layerProps","active","anchorElement","children","popup","renderPopup","disableAnimations","getPositions","onOpen","onClose","index","indexOf","Error","join","slice","useWrapper","onClickOutside","onMouseEnter","onMouseLeave","onClick","onFocus","onBlur","clearTimeout","Element","React","PureComponent","__KONTUR_REACT_UI__","propTypes","propName","componentName","Array","isArray","defaultProps","DefaultPosition","isTestEnv","closeOnChildrenMouseLeave"],"mappings":"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","sourcesContent":["import React from 'react';\nimport warning from 'warning';\nimport isEqual from 'lodash.isequal';\n\nimport { ThemeFactory } from '../../lib/theming/ThemeFactory';\nimport { DefaultPosition, Popup, PopupProps, PopupPositionsType } from '../../internal/Popup';\nimport { RenderLayer, RenderLayerProps } from '../../internal/RenderLayer';\nimport { CrossIcon } from '../../internal/icons/CrossIcon';\nimport { Nullable } from '../../typings/utility-types';\nimport { MouseEventType } from '../../typings/event-types';\nimport { containsTargetOrRenderContainer } from '../../lib/listenFocusOutside';\nimport { ThemeContext } from '../../lib/theming/ThemeContext';\nimport { Theme } from '../../lib/theming/Theme';\nimport { isTestEnv } from '../../lib/currentEnvironment';\nimport { CommonProps, CommonWrapper } from '../../internal/CommonWrapper';\nimport { getRootNode, rootNode, TSetRootNode } from '../../lib/rootNode';\n\nimport { styles } from './Tooltip.styles';\n\nexport type TooltipTrigger =\n /** Наведение на children и на тултип */\n | 'hover'\n /** Клик на children */\n | 'click'\n /** Фокус на children */\n | 'focus'\n /** Наведение на children и на тултип и фокус на children */\n | 'hover&focus'\n /** Просто открыт */\n | 'opened'\n /** Просто закрыт */\n | 'closed'\n /** Наведение ТОЛЬКО на children, а не на тултип */\n | 'hoverAnchor'\n /** Управление через публичные функции show и hide */\n | 'manual';\n\nexport interface TooltipProps extends CommonProps {\n /**\n * Относительно какого элемента позиционировать тултип\n */\n anchorElement?: HTMLElement;\n\n /**\n * Если не указан `anchorElement` то тултип будет позиционироваться\n * относительно дочерних элементов\n */\n children?: React.ReactNode;\n\n className?: string;\n\n /**\n * Показывать крестик для закрытия тултипа. По-умолчанию крестик\n * показывается если проп *trigger* не `hover` и не `focus`.\n */\n closeButton?: boolean;\n\n /**\n * Функция, которая возвращает содержимое тултипа.\n *\n * Если эта функция вернула `null`, то тултип не показывается.\n */\n render?: Nullable<() => React.ReactNode>;\n\n /**\n * Значение по умолчанию: `\"top left\"`.\n */\n pos: PopupPositionsType;\n\n /**\n * Триггер открытия тултипа\n * ```ts\n * type TooltipTrigger =\n * | 'hover'\n * | 'click'\n * | 'focus'\n * | 'hover&focus'\n * | 'opened'\n * | 'closed'\n * | 'hoverAnchor'\n * | 'manual';\n * ```\n */\n trigger: TooltipTrigger;\n\n /**\n * Хэндлер, вызываемый при клике по крестику\n */\n onCloseClick?: React.MouseEventHandler<HTMLElement>;\n\n /**\n * Хэндлер, вызываемый при клике по крестику или\n * снаружи тултипа\n */\n onCloseRequest?: () => void;\n\n /**\n * Хэндлер, вызываемый при закрытии тултипа\n */\n onClose?: () => void;\n\n /**\n * Хэндлер, вызываемый при открытии тултипа\n */\n onOpen?: () => void;\n\n /**\n * Список позиций, которые тултип будет занимать.\n * Если положение тултипа в определенной позиции\n * будет выходить за край экрана, то будет выбрана\n * следующая позиция. Обязательно должен включать\n * позицию указанную в `pos`\n */\n allowedPositions: PopupPositionsType[];\n\n /**\n * Флаг отключения анимации.\n * @default false\n */\n disableAnimations: boolean;\n\n /**\n * Явно указывает, что вложенные элементы должны быть обёрнуты в `<span/>`. <br/> Используется для корректного позиционирования тултипа при двух и более вложенных элементах.\n *\n * _Примечание_: при **двух и более** вложенных элементах обёртка будет добавлена автоматически.\n */\n useWrapper: boolean;\n}\n\nexport interface TooltipState {\n opened: boolean;\n focused: boolean;\n}\n\nconst Positions: PopupPositionsType[] = [\n 'right bottom',\n 'right middle',\n 'right top',\n 'top right',\n 'top center',\n 'top left',\n 'left top',\n 'left middle',\n 'left bottom',\n 'bottom left',\n 'bottom center',\n 'bottom right',\n];\n\n@rootNode\nexport class Tooltip extends React.PureComponent<TooltipProps, TooltipState> {\n public static __KONTUR_REACT_UI__ = 'Tooltip';\n\n public static propTypes = {\n children(props: TooltipProps, propName: keyof TooltipProps, componentName: string) {\n const children = props[propName];\n warning(\n children || props.anchorElement,\n `[${componentName}]: you must provide either 'children' or 'anchorElement' prop for ${componentName} to work properly`,\n );\n warning(\n !(Array.isArray(children) && props.useWrapper === false),\n `[${componentName}]: you provided multiple children, but useWrapper={false} - forcing wrapper <span/> for positioning to work correctly`,\n );\n },\n };\n\n public static defaultProps = {\n pos: DefaultPosition,\n trigger: 'hover',\n allowedPositions: Positions,\n disableAnimations: isTestEnv,\n useWrapper: false,\n closeOnChildrenMouseLeave: false,\n };\n\n public static delay = 100;\n private static triggersWithoutCloseButton: TooltipTrigger[] = ['hover', 'hoverAnchor', 'focus', 'hover&focus'];\n\n public state: TooltipState = { opened: false, focused: false };\n private theme!: Theme;\n private hoverTimeout: Nullable<number> = null;\n private contentElement: Nullable<HTMLElement> = null;\n private positions: Nullable<PopupPositionsType[]> = null;\n private clickedOutside = true;\n private setRootNode!: TSetRootNode;\n\n public componentDidUpdate(prevProps: TooltipProps) {\n if (this.props.trigger === 'closed' && this.state.opened) {\n this.close();\n }\n\n const { allowedPositions, pos } = this.props;\n const posChanged = prevProps.pos !== pos;\n const allowedChanged = !isEqual(prevProps.allowedPositions, allowedPositions);\n\n if (posChanged || allowedChanged) {\n this.positions = null;\n }\n }\n\n public componentWillUnmount() {\n this.clearHoverTimeout();\n }\n\n public render() {\n return (\n <ThemeContext.Consumer>\n {(theme) => {\n this.theme = theme;\n return (\n <ThemeContext.Provider\n value={ThemeFactory.create(\n {\n popupPinOffset: theme.tooltipPinOffset,\n popupMargin: theme.tooltipMargin,\n popupBorder: theme.tooltipBorder,\n popupBorderRadius: theme.tooltipBorderRadius,\n popupPinSize: theme.tooltipPinSize,\n popupPinOffsetX: theme.tooltipPinOffsetX,\n popupPinOffsetY: theme.tooltipPinOffsetY,\n },\n theme,\n )}\n >\n {this.renderMain()}\n </ThemeContext.Provider>\n );\n }}\n </ThemeContext.Consumer>\n );\n }\n\n public renderContent = () => {\n const content = this.props.render ? this.props.render() : null;\n if (content == null) {\n return null;\n }\n\n return (\n <div ref={this.refContent} className={styles.tooltipContent(this.theme)}>\n {content}\n {this.renderCloseButton()}\n </div>\n );\n };\n\n public renderCloseButton() {\n const hasCross =\n this.props.closeButton === undefined\n ? !Tooltip.triggersWithoutCloseButton.includes(this.props.trigger)\n : this.props.closeButton;\n\n if (!hasCross) {\n return null;\n }\n\n return (\n <div className={styles.cross(this.theme)} onClick={this.handleCloseButtonClick}>\n <CrossIcon />\n </div>\n );\n }\n\n /**\n * Программно открывает тултип.\n * <p>Не действует если проп *trigger* `'opened'` или `'closed'`.</p>\n * @public\n */\n public show() {\n if (this.state.opened) return;\n if (this.props.trigger === 'opened' || this.props.trigger === 'closed') {\n warning(true, `Function 'show' is not supported with trigger specified '${this.props.trigger}'`);\n return;\n }\n this.open();\n }\n\n /**\n * Программно закрывает тултип.\n * <p>Не действует если проп *trigger* `'opened'` или `'closed'`.</p>\n * @public\n */\n public hide() {\n if (this.props.trigger === 'opened' || this.props.trigger === 'closed') {\n warning(true, `Function 'hide' is not supported with trigger specified '${this.props.trigger}'`);\n return;\n }\n this.close();\n }\n\n private renderMain() {\n const props = this.props;\n const content = this.renderContent();\n const { popupProps, layerProps = { active: false } } = this.getProps();\n const anchorElement = props.children || props.anchorElement;\n const popup = this.renderPopup(anchorElement, popupProps, content);\n\n return (\n <RenderLayer {...layerProps} getAnchorElement={this.getRenderLayerAnchorElement}>\n {popup}\n </RenderLayer>\n );\n }\n\n private getRenderLayerAnchorElement = () => {\n return getRootNode(this);\n };\n\n private renderPopup(\n anchorElement: React.ReactNode | HTMLElement,\n popupProps: Partial<PopupProps>,\n content: JSX.Element | null,\n ) {\n return (\n <CommonWrapper rootNodeRef={this.setRootNode} {...this.props}>\n <Popup\n anchorElement={anchorElement}\n hasPin\n hasShadow\n maxWidth=\"none\"\n opened={this.state.opened}\n disableAnimations={this.props.disableAnimations}\n positions={this.getPositions()}\n ignoreHover={this.props.trigger === 'hoverAnchor'}\n onOpen={this.props.onOpen}\n onClose={this.props.onClose}\n tryPreserveFirstRenderedPosition\n {...popupProps}\n >\n {content}\n </Popup>\n </CommonWrapper>\n );\n }\n\n private refContent = (node: HTMLElement | null) => {\n this.contentElement = node;\n };\n\n private getPositions() {\n if (!this.positions) {\n const allowedPositions = this.props.allowedPositions;\n const index = allowedPositions.indexOf(this.props.pos);\n if (index === -1) {\n throw new Error('Unexpected position passed to Tooltip. Expected one of: ' + allowedPositions.join(', '));\n }\n\n this.positions = [...allowedPositions.slice(index), ...allowedPositions.slice(0, index)];\n }\n\n return this.positions;\n }\n\n private getProps(): {\n layerProps?: Partial<RenderLayerProps>;\n popupProps: Partial<PopupProps>;\n } {\n const props = this.props;\n const useWrapper = !!props.children && props.useWrapper;\n switch (props.trigger) {\n case 'opened':\n return {\n layerProps: {\n active: true,\n onClickOutside: this.handleClickOutsideAnchor,\n },\n popupProps: {\n opened: true,\n useWrapper,\n },\n };\n\n case 'closed':\n return {\n popupProps: {\n opened: false,\n useWrapper,\n },\n };\n\n case 'hoverAnchor':\n case 'hover':\n return {\n popupProps: {\n onMouseEnter: this.handleMouseEnter,\n onMouseLeave: this.handleMouseLeave,\n useWrapper,\n },\n };\n case 'manual':\n return {\n popupProps: {\n useWrapper,\n },\n };\n case 'click':\n return {\n layerProps: {\n active: this.state.opened,\n onClickOutside: this.handleClickOutsideAnchor,\n },\n popupProps: {\n onClick: this.handleClick,\n useWrapper,\n },\n };\n\n case 'focus':\n return {\n popupProps: {\n onFocus: this.handleFocus,\n onBlur: this.handleBlur,\n useWrapper,\n },\n };\n\n case 'hover&focus':\n return {\n layerProps: {\n active: this.state.opened,\n onClickOutside: this.handleClickOutsideAnchor,\n },\n popupProps: {\n onFocus: this.handleFocus,\n onBlur: this.handleBlur,\n onMouseEnter: this.handleMouseEnter,\n onMouseLeave: this.handleMouseLeave,\n useWrapper,\n },\n };\n\n default:\n throw new Error('Unknown trigger specified: ' + props.trigger);\n }\n }\n\n private open = () => this.setState({ opened: true });\n\n private close = () => this.setState({ opened: false });\n\n private clearHoverTimeout() {\n if (this.hoverTimeout) {\n clearTimeout(this.hoverTimeout);\n this.hoverTimeout = null;\n }\n }\n\n private handleMouseEnter = (event: MouseEventType) => {\n const isHoverAnchor = this.props.trigger === 'hoverAnchor';\n if (isHoverAnchor && event.target === this.contentElement) {\n return;\n }\n\n this.clearHoverTimeout();\n\n this.hoverTimeout = window.setTimeout(this.open, Tooltip.delay);\n };\n\n private handleMouseLeave = (event: MouseEventType) => {\n if (\n (this.props.trigger === 'hover&focus' && this.state.focused) ||\n (this.props.trigger === 'hover' && event.relatedTarget === this.contentElement)\n ) {\n return;\n }\n\n this.clearHoverTimeout();\n\n if (this.props.trigger === 'hoverAnchor') {\n this.close();\n } else {\n this.hoverTimeout = window.setTimeout(this.close, Tooltip.delay);\n }\n };\n\n private handleClick = () => {\n this.open();\n };\n\n private handleClickOutsideAnchor = (event: Event) => {\n this.clickedOutside = this.isClickOutsideContent(event);\n if (this.clickedOutside) {\n if (this.props.onCloseRequest) {\n this.props.onCloseRequest();\n }\n this.close();\n }\n };\n\n private isClickOutsideContent(event: Event) {\n if (this.contentElement && event.target instanceof Element) {\n return !containsTargetOrRenderContainer(event.target)(this.contentElement);\n }\n\n return true;\n }\n\n private handleFocus = () => {\n this.setState({ focused: true });\n this.open();\n };\n\n private handleBlur = () => {\n if (this.props.trigger === 'hover&focus' && this.clickedOutside) {\n this.close();\n }\n\n if (this.props.trigger === 'focus') {\n this.close();\n }\n\n this.clickedOutside = true;\n this.setState({ focused: false });\n };\n\n private handleCloseButtonClick = (event: React.MouseEvent<HTMLElement>) => {\n event.stopPropagation();\n\n if (this.props.onCloseClick) {\n this.props.onCloseClick(event);\n }\n\n if (event.defaultPrevented) {\n return;\n }\n\n if (this.props.onCloseRequest) {\n this.props.onCloseRequest();\n }\n\n this.close();\n };\n}\n"]}
1
+ {"version":3,"sources":["Tooltip.tsx"],"names":["Positions","Tooltip","rootNode","state","opened","focused","theme","hoverTimeout","contentElement","positions","clickedOutside","setRootNode","renderContent","content","props","render","refContent","styles","tooltipContent","renderCloseButton","getRenderLayerAnchorElement","node","open","setState","close","handleMouseEnter","event","isHoverAnchor","trigger","target","clearHoverTimeout","window","setTimeout","delay","handleMouseLeave","relatedTarget","handleClick","handleClickOutsideAnchor","isClickOutsideContent","onCloseRequest","handleFocus","handleBlur","handleCloseButtonClick","stopPropagation","onCloseClick","defaultPrevented","componentDidUpdate","prevProps","allowedPositions","pos","posChanged","allowedChanged","componentWillUnmount","ThemeFactory","create","popupPinOffset","tooltipPinOffset","popupMargin","tooltipMargin","popupBorder","tooltipBorder","popupBorderRadius","tooltipBorderRadius","popupPinSize","tooltipPinSize","popupPinOffsetX","tooltipPinOffsetX","popupPinOffsetY","tooltipPinOffsetY","renderMain","hasCross","closeButton","undefined","triggersWithoutCloseButton","includes","cross","show","hide","getProps","popupProps","layerProps","active","anchorElement","children","popup","renderPopup","disableAnimations","getPositions","onOpen","onClose","index","indexOf","Error","join","slice","useWrapper","onClickOutside","onMouseEnter","onMouseLeave","onClick","onFocus","onBlur","clearTimeout","Element","React","PureComponent","__KONTUR_REACT_UI__","propTypes","propName","componentName","Array","isArray","defaultProps","DefaultPosition","isTestEnv","closeOnChildrenMouseLeave"],"mappings":"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","sourcesContent":["import React from 'react';\nimport warning from 'warning';\nimport isEqual from 'lodash.isequal';\n\nimport { ThemeFactory } from '../../lib/theming/ThemeFactory';\nimport { DefaultPosition, Popup, PopupProps, PopupPositionsType } from '../../internal/Popup';\nimport { RenderLayer, RenderLayerProps } from '../../internal/RenderLayer';\nimport { CrossIcon } from '../../internal/icons/CrossIcon';\nimport { Nullable } from '../../typings/utility-types';\nimport { MouseEventType } from '../../typings/event-types';\nimport { containsTargetOrRenderContainer } from '../../lib/listenFocusOutside';\nimport { ThemeContext } from '../../lib/theming/ThemeContext';\nimport { Theme } from '../../lib/theming/Theme';\nimport { isTestEnv } from '../../lib/currentEnvironment';\nimport { CommonProps, CommonWrapper } from '../../internal/CommonWrapper';\nimport { getRootNode, rootNode, TSetRootNode } from '../../lib/rootNode';\n\nimport { styles } from './Tooltip.styles';\n\nexport type TooltipTrigger =\n /** Наведение на children и на тултип */\n | 'hover'\n /** Клик на children */\n | 'click'\n /** Фокус на children */\n | 'focus'\n /** Наведение на children и на тултип и фокус на children */\n | 'hover&focus'\n /** Просто открыт */\n | 'opened'\n /** Просто закрыт */\n | 'closed'\n /** Наведение ТОЛЬКО на children, а не на тултип */\n | 'hoverAnchor'\n /** Управление через публичные функции show и hide */\n | 'manual';\n\nexport interface TooltipProps extends CommonProps {\n /**\n * Относительно какого элемента позиционировать тултип\n */\n anchorElement?: HTMLElement;\n\n /**\n * Если не указан `anchorElement` то тултип будет позиционироваться\n * относительно дочерних элементов\n */\n children?: React.ReactNode;\n\n className?: string;\n\n /**\n * Показывать крестик для закрытия тултипа. По-умолчанию крестик\n * показывается если проп *trigger* не `hover` и не `focus`.\n */\n closeButton?: boolean;\n\n /**\n * Функция, которая возвращает содержимое тултипа.\n *\n * Если эта функция вернула `null`, то тултип не показывается.\n */\n render?: Nullable<() => React.ReactNode>;\n\n /**\n * Значение по умолчанию: `\"top left\"`.\n */\n pos: PopupPositionsType;\n\n /**\n * Триггер открытия тултипа\n * ```ts\n * type TooltipTrigger =\n * | 'hover'\n * | 'click'\n * | 'focus'\n * | 'hover&focus'\n * | 'opened'\n * | 'closed'\n * | 'hoverAnchor'\n * | 'manual';\n * ```\n */\n trigger: TooltipTrigger;\n\n /**\n * Хэндлер, вызываемый при клике по крестику\n */\n onCloseClick?: React.MouseEventHandler<HTMLElement>;\n\n /**\n * Хэндлер, вызываемый при клике по крестику или\n * снаружи тултипа\n */\n onCloseRequest?: (event?: Event | React.MouseEvent) => void;\n\n /**\n * Хэндлер, вызываемый при закрытии тултипа\n */\n onClose?: () => void;\n\n /**\n * Хэндлер, вызываемый при открытии тултипа\n */\n onOpen?: () => void;\n\n /**\n * Список позиций, которые тултип будет занимать.\n * Если положение тултипа в определенной позиции\n * будет выходить за край экрана, то будет выбрана\n * следующая позиция. Обязательно должен включать\n * позицию указанную в `pos`\n */\n allowedPositions: PopupPositionsType[];\n\n /**\n * Флаг отключения анимации.\n * @default false\n */\n disableAnimations: boolean;\n\n /**\n * Явно указывает, что вложенные элементы должны быть обёрнуты в `<span/>`. <br/> Используется для корректного позиционирования тултипа при двух и более вложенных элементах.\n *\n * _Примечание_: при **двух и более** вложенных элементах обёртка будет добавлена автоматически.\n */\n useWrapper: boolean;\n}\n\nexport interface TooltipState {\n opened: boolean;\n focused: boolean;\n}\n\nconst Positions: PopupPositionsType[] = [\n 'right bottom',\n 'right middle',\n 'right top',\n 'top right',\n 'top center',\n 'top left',\n 'left top',\n 'left middle',\n 'left bottom',\n 'bottom left',\n 'bottom center',\n 'bottom right',\n];\n\n@rootNode\nexport class Tooltip extends React.PureComponent<TooltipProps, TooltipState> {\n public static __KONTUR_REACT_UI__ = 'Tooltip';\n\n public static propTypes = {\n children(props: TooltipProps, propName: keyof TooltipProps, componentName: string) {\n const children = props[propName];\n warning(\n children || props.anchorElement,\n `[${componentName}]: you must provide either 'children' or 'anchorElement' prop for ${componentName} to work properly`,\n );\n warning(\n !(Array.isArray(children) && props.useWrapper === false),\n `[${componentName}]: you provided multiple children, but useWrapper={false} - forcing wrapper <span/> for positioning to work correctly`,\n );\n },\n };\n\n public static defaultProps = {\n pos: DefaultPosition,\n trigger: 'hover',\n allowedPositions: Positions,\n disableAnimations: isTestEnv,\n useWrapper: false,\n closeOnChildrenMouseLeave: false,\n };\n\n public static delay = 100;\n private static triggersWithoutCloseButton: TooltipTrigger[] = ['hover', 'hoverAnchor', 'focus', 'hover&focus'];\n\n public state: TooltipState = { opened: false, focused: false };\n private theme!: Theme;\n private hoverTimeout: Nullable<number> = null;\n private contentElement: Nullable<HTMLElement> = null;\n private positions: Nullable<PopupPositionsType[]> = null;\n private clickedOutside = true;\n private setRootNode!: TSetRootNode;\n\n public componentDidUpdate(prevProps: TooltipProps) {\n if (this.props.trigger === 'closed' && this.state.opened) {\n this.close();\n }\n\n const { allowedPositions, pos } = this.props;\n const posChanged = prevProps.pos !== pos;\n const allowedChanged = !isEqual(prevProps.allowedPositions, allowedPositions);\n\n if (posChanged || allowedChanged) {\n this.positions = null;\n }\n }\n\n public componentWillUnmount() {\n this.clearHoverTimeout();\n }\n\n public render() {\n return (\n <ThemeContext.Consumer>\n {(theme) => {\n this.theme = theme;\n return (\n <ThemeContext.Provider\n value={ThemeFactory.create(\n {\n popupPinOffset: theme.tooltipPinOffset,\n popupMargin: theme.tooltipMargin,\n popupBorder: theme.tooltipBorder,\n popupBorderRadius: theme.tooltipBorderRadius,\n popupPinSize: theme.tooltipPinSize,\n popupPinOffsetX: theme.tooltipPinOffsetX,\n popupPinOffsetY: theme.tooltipPinOffsetY,\n },\n theme,\n )}\n >\n {this.renderMain()}\n </ThemeContext.Provider>\n );\n }}\n </ThemeContext.Consumer>\n );\n }\n\n public renderContent = () => {\n const content = this.props.render ? this.props.render() : null;\n if (content == null) {\n return null;\n }\n\n return (\n <div ref={this.refContent} className={styles.tooltipContent(this.theme)}>\n {content}\n {this.renderCloseButton()}\n </div>\n );\n };\n\n public renderCloseButton() {\n const hasCross =\n this.props.closeButton === undefined\n ? !Tooltip.triggersWithoutCloseButton.includes(this.props.trigger)\n : this.props.closeButton;\n\n if (!hasCross) {\n return null;\n }\n\n return (\n <div className={styles.cross(this.theme)} onClick={this.handleCloseButtonClick}>\n <CrossIcon />\n </div>\n );\n }\n\n /**\n * Программно открывает тултип.\n * <p>Не действует если проп *trigger* `'opened'` или `'closed'`.</p>\n * @public\n */\n public show() {\n if (this.state.opened) return;\n if (this.props.trigger === 'opened' || this.props.trigger === 'closed') {\n warning(true, `Function 'show' is not supported with trigger specified '${this.props.trigger}'`);\n return;\n }\n this.open();\n }\n\n /**\n * Программно закрывает тултип.\n * <p>Не действует если проп *trigger* `'opened'` или `'closed'`.</p>\n * @public\n */\n public hide() {\n if (this.props.trigger === 'opened' || this.props.trigger === 'closed') {\n warning(true, `Function 'hide' is not supported with trigger specified '${this.props.trigger}'`);\n return;\n }\n this.close();\n }\n\n private renderMain() {\n const props = this.props;\n const content = this.renderContent();\n const { popupProps, layerProps = { active: false } } = this.getProps();\n const anchorElement = props.children || props.anchorElement;\n const popup = this.renderPopup(anchorElement, popupProps, content);\n\n return (\n <RenderLayer {...layerProps} getAnchorElement={this.getRenderLayerAnchorElement}>\n {popup}\n </RenderLayer>\n );\n }\n\n private getRenderLayerAnchorElement = () => {\n return getRootNode(this);\n };\n\n private renderPopup(\n anchorElement: React.ReactNode | HTMLElement,\n popupProps: Partial<PopupProps>,\n content: JSX.Element | null,\n ) {\n return (\n <CommonWrapper rootNodeRef={this.setRootNode} {...this.props}>\n <Popup\n anchorElement={anchorElement}\n hasPin\n hasShadow\n maxWidth=\"none\"\n opened={this.state.opened}\n disableAnimations={this.props.disableAnimations}\n positions={this.getPositions()}\n ignoreHover={this.props.trigger === 'hoverAnchor'}\n onOpen={this.props.onOpen}\n onClose={this.props.onClose}\n tryPreserveFirstRenderedPosition\n {...popupProps}\n >\n {content}\n </Popup>\n </CommonWrapper>\n );\n }\n\n private refContent = (node: HTMLElement | null) => {\n this.contentElement = node;\n };\n\n private getPositions() {\n if (!this.positions) {\n const allowedPositions = this.props.allowedPositions;\n const index = allowedPositions.indexOf(this.props.pos);\n if (index === -1) {\n throw new Error('Unexpected position passed to Tooltip. Expected one of: ' + allowedPositions.join(', '));\n }\n\n this.positions = [...allowedPositions.slice(index), ...allowedPositions.slice(0, index)];\n }\n\n return this.positions;\n }\n\n private getProps(): {\n layerProps?: Partial<RenderLayerProps>;\n popupProps: Partial<PopupProps>;\n } {\n const props = this.props;\n const useWrapper = !!props.children && props.useWrapper;\n switch (props.trigger) {\n case 'opened':\n return {\n layerProps: {\n active: true,\n onClickOutside: this.handleClickOutsideAnchor,\n },\n popupProps: {\n opened: true,\n useWrapper,\n },\n };\n\n case 'closed':\n return {\n popupProps: {\n opened: false,\n useWrapper,\n },\n };\n\n case 'hoverAnchor':\n case 'hover':\n return {\n popupProps: {\n onMouseEnter: this.handleMouseEnter,\n onMouseLeave: this.handleMouseLeave,\n useWrapper,\n },\n };\n case 'manual':\n return {\n popupProps: {\n useWrapper,\n },\n };\n case 'click':\n return {\n layerProps: {\n active: this.state.opened,\n onClickOutside: this.handleClickOutsideAnchor,\n },\n popupProps: {\n onClick: this.handleClick,\n useWrapper,\n },\n };\n\n case 'focus':\n return {\n popupProps: {\n onFocus: this.handleFocus,\n onBlur: this.handleBlur,\n useWrapper,\n },\n };\n\n case 'hover&focus':\n return {\n layerProps: {\n active: this.state.opened,\n onClickOutside: this.handleClickOutsideAnchor,\n },\n popupProps: {\n onFocus: this.handleFocus,\n onBlur: this.handleBlur,\n onMouseEnter: this.handleMouseEnter,\n onMouseLeave: this.handleMouseLeave,\n useWrapper,\n },\n };\n\n default:\n throw new Error('Unknown trigger specified: ' + props.trigger);\n }\n }\n\n private open = () => this.setState({ opened: true });\n\n private close = () => this.setState({ opened: false });\n\n private clearHoverTimeout() {\n if (this.hoverTimeout) {\n clearTimeout(this.hoverTimeout);\n this.hoverTimeout = null;\n }\n }\n\n private handleMouseEnter = (event: MouseEventType) => {\n const isHoverAnchor = this.props.trigger === 'hoverAnchor';\n if (isHoverAnchor && event.target === this.contentElement) {\n return;\n }\n\n this.clearHoverTimeout();\n\n this.hoverTimeout = window.setTimeout(this.open, Tooltip.delay);\n };\n\n private handleMouseLeave = (event: MouseEventType) => {\n if (\n (this.props.trigger === 'hover&focus' && this.state.focused) ||\n (this.props.trigger === 'hover' && event.relatedTarget === this.contentElement)\n ) {\n return;\n }\n\n this.clearHoverTimeout();\n\n if (this.props.trigger === 'hoverAnchor') {\n this.close();\n } else {\n this.hoverTimeout = window.setTimeout(this.close, Tooltip.delay);\n }\n };\n\n private handleClick = () => {\n this.open();\n };\n\n private handleClickOutsideAnchor = (event: Event) => {\n this.clickedOutside = this.isClickOutsideContent(event);\n if (this.clickedOutside) {\n if (this.props.onCloseRequest) {\n this.props.onCloseRequest(event);\n }\n this.close();\n }\n };\n\n private isClickOutsideContent(event: Event) {\n if (this.contentElement && event.target instanceof Element) {\n return !containsTargetOrRenderContainer(event.target)(this.contentElement);\n }\n\n return true;\n }\n\n private handleFocus = () => {\n this.setState({ focused: true });\n this.open();\n };\n\n private handleBlur = () => {\n if (this.props.trigger === 'hover&focus' && this.clickedOutside) {\n this.close();\n }\n\n if (this.props.trigger === 'focus') {\n this.close();\n }\n\n this.clickedOutside = true;\n this.setState({ focused: false });\n };\n\n private handleCloseButtonClick = (event: React.MouseEvent<HTMLElement>) => {\n event.stopPropagation();\n\n if (this.props.onCloseClick) {\n this.props.onCloseClick(event);\n }\n\n if (event.defaultPrevented) {\n return;\n }\n\n if (this.props.onCloseRequest) {\n this.props.onCloseRequest(event);\n }\n\n this.close();\n };\n}\n"]}
@@ -2,6 +2,10 @@ import React from 'react';
2
2
  import { Nullable } from '../../typings/utility-types';
3
3
  import { MonthViewModel } from './MonthViewModel';
4
4
  import { CalendarDateShape } from './CalendarDateShape';
5
+ export interface CalendarMonthChangeInfo {
6
+ month: number;
7
+ year: number;
8
+ }
5
9
  export interface CalendarProps {
6
10
  initialMonth?: number;
7
11
  initialYear?: number;
@@ -12,6 +16,8 @@ export interface CalendarProps {
12
16
  isHoliday?: (day: CalendarDateShape & {
13
17
  isWeekend: boolean;
14
18
  }) => boolean;
19
+ renderDay?: (date: CalendarDateShape) => React.ReactNode;
20
+ onMonthChange?: (changeInfo: CalendarMonthChangeInfo) => void;
15
21
  }
16
22
  export interface CalendarState {
17
23
  scrollPosition: number;
@@ -43,6 +49,7 @@ export declare class Calendar extends React.Component<CalendarProps, CalendarSta
43
49
  private touchStartY;
44
50
  constructor(props: CalendarProps);
45
51
  componentWillUnmount(): void;
52
+ componentDidUpdate(prevProps: Readonly<CalendarProps>, prevState: Readonly<CalendarState>): void;
46
53
  render(): JSX.Element;
47
54
  /**
48
55
  * Scrolls calendar to given date
@@ -52,7 +59,6 @@ export declare class Calendar extends React.Component<CalendarProps, CalendarSta
52
59
  private renderMain;
53
60
  private refRoot;
54
61
  private renderMonth;
55
- private getMonthPositions;
56
62
  private handleMonthYearChange;
57
63
  private executeAnimations;
58
64
  private handleTouchStart;
@@ -63,4 +69,8 @@ export declare class Calendar extends React.Component<CalendarProps, CalendarSta
63
69
  private scrollToNearestWeek;
64
70
  private scrollTo;
65
71
  private scrollAmount;
72
+ private getMonthPositions;
73
+ private getVisibleMonths;
74
+ private monthsChangeHandle;
75
+ private getViewModel;
66
76
  }