@gravity-ui/date-components 1.1.0 → 1.2.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 (65) hide show
  1. package/dist/cjs/components/Calendar/Calendar.css +37 -37
  2. package/dist/cjs/components/Calendar/Calendar.js +2 -4
  3. package/dist/cjs/components/Calendar/CalendarBase.js +2 -4
  4. package/dist/cjs/components/Calendar/RangeCalendar.js +2 -4
  5. package/dist/cjs/components/Calendar/hooks/useCalendarCellProps.js +2 -4
  6. package/dist/cjs/components/Calendar/hooks/useCalendarGridProps.js +11 -0
  7. package/dist/cjs/components/Calendar/hooks/useCalendarProps.js +2 -4
  8. package/dist/cjs/components/Calendar/hooks/useCalendarState.js +2 -4
  9. package/dist/cjs/components/Calendar/hooks/useRangeCalendarState.js +13 -21
  10. package/dist/cjs/components/Calendar/i18n/index.js +3 -5
  11. package/dist/cjs/components/Calendar/index.js +8 -21
  12. package/dist/cjs/components/DateField/DateField.js +3 -16
  13. package/dist/cjs/components/DateField/hooks/useDateFieldProps.js +25 -20
  14. package/dist/cjs/components/DateField/hooks/useDateFieldState.js +23 -167
  15. package/dist/cjs/components/DateField/i18n/index.js +3 -5
  16. package/dist/cjs/components/DateField/index.js +4 -17
  17. package/dist/cjs/components/DateField/utils.d.ts +14 -3
  18. package/dist/cjs/components/DateField/utils.js +172 -3
  19. package/dist/cjs/components/DatePicker/DatePicker.css +6 -0
  20. package/dist/cjs/components/DatePicker/DatePicker.d.ts +2 -2
  21. package/dist/cjs/components/DatePicker/DatePicker.js +8 -48
  22. package/dist/cjs/components/DatePicker/hooks/useDatePickerProps.d.ts +20 -0
  23. package/dist/cjs/components/DatePicker/hooks/useDatePickerProps.js +121 -0
  24. package/dist/cjs/components/DatePicker/hooks/useDatePickerState.d.ts +4 -5
  25. package/dist/cjs/components/DatePicker/hooks/useDatePickerState.js +17 -4
  26. package/dist/cjs/components/DatePicker/i18n/index.js +3 -5
  27. package/dist/cjs/components/DatePicker/index.d.ts +1 -0
  28. package/dist/cjs/components/DatePicker/index.js +4 -16
  29. package/dist/cjs/components/RelativeDateField/RelativeDateField.js +2 -4
  30. package/dist/cjs/components/RelativeDateField/hooks/useRelativeDateFieldProps.js +2 -4
  31. package/dist/cjs/components/RelativeDateField/hooks/useRelativeDateFieldState.js +2 -4
  32. package/dist/cjs/components/RelativeDateField/index.js +4 -17
  33. package/dist/cjs/components/RelativeDatePicker/RelativeDatePicker.css +1 -0
  34. package/dist/cjs/components/RelativeDatePicker/RelativeDatePicker.js +2 -4
  35. package/dist/cjs/components/RelativeDatePicker/hooks/useRelativeDatePickerProps.js +32 -43
  36. package/dist/cjs/components/RelativeDatePicker/hooks/useRelativeDatePickerState.js +2 -4
  37. package/dist/cjs/components/RelativeDatePicker/i18n/index.js +3 -5
  38. package/dist/cjs/components/RelativeDatePicker/index.js +4 -17
  39. package/dist/cjs/components/hooks/useControlledState.js +2 -4
  40. package/dist/cjs/components/index.js +6 -19
  41. package/dist/cjs/index.js +2 -15
  42. package/dist/esm/components/Calendar/Calendar.css +37 -37
  43. package/dist/esm/components/Calendar/hooks/useCalendarGridProps.js +11 -0
  44. package/dist/esm/components/Calendar/hooks/useRangeCalendarState.js +11 -16
  45. package/dist/esm/components/DateField/DateField.js +1 -11
  46. package/dist/esm/components/DateField/hooks/useDateFieldProps.js +24 -17
  47. package/dist/esm/components/DateField/hooks/useDateFieldState.js +19 -161
  48. package/dist/esm/components/DateField/utils.d.ts +14 -3
  49. package/dist/esm/components/DateField/utils.js +165 -2
  50. package/dist/esm/components/DatePicker/DatePicker.css +6 -0
  51. package/dist/esm/components/DatePicker/DatePicker.d.ts +2 -2
  52. package/dist/esm/components/DatePicker/DatePicker.js +9 -46
  53. package/dist/esm/components/DatePicker/hooks/useDatePickerProps.d.ts +20 -0
  54. package/dist/esm/components/DatePicker/hooks/useDatePickerProps.js +117 -0
  55. package/dist/esm/components/DatePicker/hooks/useDatePickerState.d.ts +4 -5
  56. package/dist/esm/components/DatePicker/hooks/useDatePickerState.js +15 -0
  57. package/dist/esm/components/DatePicker/index.d.ts +1 -0
  58. package/dist/esm/components/DatePicker/index.js +1 -0
  59. package/dist/esm/components/RelativeDatePicker/RelativeDatePicker.css +1 -0
  60. package/dist/esm/components/RelativeDatePicker/hooks/useRelativeDatePickerProps.js +30 -38
  61. package/package.json +37 -33
  62. package/dist/cjs/components/DatePicker/DesktopCalendar.d.ts +0 -17
  63. package/dist/cjs/components/DatePicker/DesktopCalendar.js +0 -65
  64. package/dist/esm/components/DatePicker/DesktopCalendar.d.ts +0 -17
  65. package/dist/esm/components/DatePicker/DesktopCalendar.js +0 -57
@@ -50,43 +50,6 @@
50
50
  height: 100%;
51
51
  padding: 0 var(--_--calendar-padding) var(--_--calendar-padding);
52
52
  }
53
- .g-date-calendar__content_animation_forward {
54
- transform: translateX(-100%);
55
- animation: calendar-forward 0.25s ease forwards;
56
- }
57
- .g-date-calendar__content_animation_forward.g-date-calendar__current-state {
58
- left: -100%;
59
- }
60
- .g-date-calendar__content_animation_backward {
61
- transform: translateX(0);
62
- animation: calendar-backward 0.25s ease forwards;
63
- }
64
- .g-date-calendar__content_animation_backward.g-date-calendar__current-state {
65
- left: 100%;
66
- }
67
- .g-date-calendar__content_animation_zoom-in {
68
- transform: scale();
69
- }
70
- .g-date-calendar__content_animation_zoom-in.g-date-calendar__previous-state {
71
- animation: calendar-zoom-in-hiding 0.25s ease forwards;
72
- }
73
- .g-date-calendar__content_animation_zoom-in.g-date-calendar__current-state {
74
- animation: calendar-zoom-in-showing 0.25s ease forwards;
75
- }
76
- .g-date-calendar__content_animation_zoom-out {
77
- transform: scale();
78
- }
79
- .g-date-calendar__content_animation_zoom-out.g-date-calendar__current-state {
80
- animation: calendar-zoom-out-showing 0.25s ease forwards;
81
- }
82
- .g-date-calendar__content_animation_zoom-out.g-date-calendar__previous-state {
83
- animation: calendar-zoom-out-hiding 0.25s ease forwards;
84
- }
85
- @media screen and (prefers-reduced-motion: reduce), (update: slow) {
86
- .g-date-calendar__content[class] {
87
- animation-duration: 0.001ms;
88
- }
89
- }
90
53
  @keyframes calendar-forward {
91
54
  from {
92
55
  transform: translateX(0);
@@ -143,6 +106,43 @@
143
106
  transform: scale(2);
144
107
  }
145
108
  }
109
+ .g-date-calendar__content_animation_forward {
110
+ transform: translateX(-100%);
111
+ animation: calendar-forward 0.25s ease forwards;
112
+ }
113
+ .g-date-calendar__content_animation_forward.g-date-calendar__current-state {
114
+ left: -100%;
115
+ }
116
+ .g-date-calendar__content_animation_backward {
117
+ transform: translateX(0);
118
+ animation: calendar-backward 0.25s ease forwards;
119
+ }
120
+ .g-date-calendar__content_animation_backward.g-date-calendar__current-state {
121
+ left: 100%;
122
+ }
123
+ .g-date-calendar__content_animation_zoom-in {
124
+ transform: scale();
125
+ }
126
+ .g-date-calendar__content_animation_zoom-in.g-date-calendar__previous-state {
127
+ animation: calendar-zoom-in-hiding 0.25s ease forwards;
128
+ }
129
+ .g-date-calendar__content_animation_zoom-in.g-date-calendar__current-state {
130
+ animation: calendar-zoom-in-showing 0.25s ease forwards;
131
+ }
132
+ .g-date-calendar__content_animation_zoom-out {
133
+ transform: scale();
134
+ }
135
+ .g-date-calendar__content_animation_zoom-out.g-date-calendar__current-state {
136
+ animation: calendar-zoom-out-showing 0.25s ease forwards;
137
+ }
138
+ .g-date-calendar__content_animation_zoom-out.g-date-calendar__previous-state {
139
+ animation: calendar-zoom-out-hiding 0.25s ease forwards;
140
+ }
141
+ @media screen and (prefers-reduced-motion: reduce), (update: slow) {
142
+ .g-date-calendar__content[class] {
143
+ animation-duration: 0.001ms;
144
+ }
145
+ }
146
146
  .g-date-calendar__grid-rowgroup {
147
147
  display: grid;
148
148
  gap: var(--_--calendar-days-gap);
@@ -1,11 +1,9 @@
1
1
  "use strict";
2
- var __importDefault = (this && this.__importDefault) || function (mod) {
3
- return (mod && mod.__esModule) ? mod : { "default": mod };
4
- };
5
2
  Object.defineProperty(exports, "__esModule", { value: true });
6
3
  exports.Calendar = void 0;
4
+ const tslib_1 = require("tslib");
7
5
  const jsx_runtime_1 = require("react/jsx-runtime");
8
- const react_1 = __importDefault(require("react"));
6
+ const react_1 = tslib_1.__importDefault(require("react"));
9
7
  const CalendarBase_1 = require("./CalendarBase");
10
8
  const useCalendarState_1 = require("./hooks/useCalendarState");
11
9
  require("./Calendar.css");
@@ -1,11 +1,9 @@
1
1
  "use strict";
2
- var __importDefault = (this && this.__importDefault) || function (mod) {
3
- return (mod && mod.__esModule) ? mod : { "default": mod };
4
- };
5
2
  Object.defineProperty(exports, "__esModule", { value: true });
6
3
  exports.CalendarBase = void 0;
4
+ const tslib_1 = require("tslib");
7
5
  const jsx_runtime_1 = require("react/jsx-runtime");
8
- const react_1 = __importDefault(require("react"));
6
+ const react_1 = tslib_1.__importDefault(require("react"));
9
7
  const uikit_1 = require("@gravity-ui/uikit");
10
8
  const cn_1 = require("../../utils/cn");
11
9
  const useCalendarCellProps_1 = require("./hooks/useCalendarCellProps");
@@ -1,11 +1,9 @@
1
1
  "use strict";
2
- var __importDefault = (this && this.__importDefault) || function (mod) {
3
- return (mod && mod.__esModule) ? mod : { "default": mod };
4
- };
5
2
  Object.defineProperty(exports, "__esModule", { value: true });
6
3
  exports.RangeCalendar = void 0;
4
+ const tslib_1 = require("tslib");
7
5
  const jsx_runtime_1 = require("react/jsx-runtime");
8
- const react_1 = __importDefault(require("react"));
6
+ const react_1 = tslib_1.__importDefault(require("react"));
9
7
  const CalendarBase_1 = require("./CalendarBase");
10
8
  const useRangeCalendarState_1 = require("./hooks/useRangeCalendarState");
11
9
  require("./Calendar.css");
@@ -1,10 +1,8 @@
1
1
  "use strict";
2
- var __importDefault = (this && this.__importDefault) || function (mod) {
3
- return (mod && mod.__esModule) ? mod : { "default": mod };
4
- };
5
2
  Object.defineProperty(exports, "__esModule", { value: true });
6
3
  exports.useCalendarCellProps = void 0;
7
- const react_1 = __importDefault(require("react"));
4
+ const tslib_1 = require("tslib");
5
+ const react_1 = tslib_1.__importDefault(require("react"));
8
6
  const date_utils_1 = require("@gravity-ui/date-utils");
9
7
  function useCalendarCellProps(date, state) {
10
8
  const ref = react_1.default.useRef(null);
@@ -12,36 +12,47 @@ function useCalendarGridProps(state) {
12
12
  ? `${state.startDate.year()} — ${state.endDate.year()}`
13
13
  : state.focusedDate.format(state.mode === 'days' ? 'MMMM YYYY' : 'YYYY'), 'aria-disabled': state.disabled ? 'true' : undefined, 'aria-readonly': state.readOnly ? 'true' : undefined }, focusWithinProps), { onKeyDown: (e) => {
14
14
  if (e.key === 'ArrowRight') {
15
+ e.preventDefault();
15
16
  state.focusNextCell();
16
17
  }
17
18
  else if (e.key === 'ArrowLeft') {
19
+ e.preventDefault();
18
20
  state.focusPreviousCell();
19
21
  }
20
22
  else if (e.key === 'ArrowDown') {
23
+ e.preventDefault();
21
24
  state.focusNextRow();
22
25
  }
23
26
  else if (e.key === 'ArrowUp') {
27
+ e.preventDefault();
24
28
  state.focusPreviousRow();
25
29
  }
26
30
  else if (e.key === 'PageDown') {
31
+ e.preventDefault();
27
32
  state.focusNextPage(e.shiftKey);
28
33
  }
29
34
  else if (e.key === 'PageUp') {
35
+ e.preventDefault();
30
36
  state.focusPreviousPage(e.shiftKey);
31
37
  }
32
38
  else if (e.key === 'End') {
39
+ e.preventDefault();
33
40
  state.focusSectionEnd();
34
41
  }
35
42
  else if (e.key === 'Home') {
43
+ e.preventDefault();
36
44
  state.focusSectionStart();
37
45
  }
38
46
  else if (e.code === 'Minus') {
47
+ e.preventDefault();
39
48
  state.zoomOut();
40
49
  }
41
50
  else if (e.code === 'Equal') {
51
+ e.preventDefault();
42
52
  state.zoomIn();
43
53
  }
44
54
  else if (e.key === 'Enter' || e.key === ' ') {
55
+ e.preventDefault();
45
56
  state.selectDate(state.focusedDate);
46
57
  }
47
58
  } });
@@ -1,10 +1,8 @@
1
1
  "use strict";
2
- var __importDefault = (this && this.__importDefault) || function (mod) {
3
- return (mod && mod.__esModule) ? mod : { "default": mod };
4
- };
5
2
  Object.defineProperty(exports, "__esModule", { value: true });
6
3
  exports.useCalendarProps = void 0;
7
- const react_1 = __importDefault(require("react"));
4
+ const tslib_1 = require("tslib");
5
+ const react_1 = tslib_1.__importDefault(require("react"));
8
6
  const uikit_1 = require("@gravity-ui/uikit");
9
7
  const i18n_1 = require("../i18n");
10
8
  const buttonDisabledClassName = 'yc-button_disabled g-button_disabled';
@@ -1,10 +1,8 @@
1
1
  "use strict";
2
- var __importDefault = (this && this.__importDefault) || function (mod) {
3
- return (mod && mod.__esModule) ? mod : { "default": mod };
4
- };
5
2
  Object.defineProperty(exports, "__esModule", { value: true });
6
3
  exports.useCalendarState = void 0;
7
- const react_1 = __importDefault(require("react"));
4
+ const tslib_1 = require("tslib");
5
+ const react_1 = tslib_1.__importDefault(require("react"));
8
6
  const useControlledState_1 = require("../../hooks/useControlledState");
9
7
  const dates_1 = require("../../utils/dates");
10
8
  const utils_1 = require("../utils");
@@ -1,35 +1,30 @@
1
1
  "use strict";
2
- var __rest = (this && this.__rest) || function (s, e) {
3
- var t = {};
4
- for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
5
- t[p] = s[p];
6
- if (s != null && typeof Object.getOwnPropertySymbols === "function")
7
- for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
8
- if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))
9
- t[p[i]] = s[p[i]];
10
- }
11
- return t;
12
- };
13
- var __importDefault = (this && this.__importDefault) || function (mod) {
14
- return (mod && mod.__esModule) ? mod : { "default": mod };
15
- };
16
2
  Object.defineProperty(exports, "__esModule", { value: true });
17
3
  exports.useRangeCalendarState = void 0;
18
- const react_1 = __importDefault(require("react"));
4
+ const tslib_1 = require("tslib");
5
+ const react_1 = tslib_1.__importDefault(require("react"));
19
6
  const useControlledState_1 = require("../../hooks/useControlledState");
20
7
  const utils_1 = require("../utils");
21
8
  const useCalendarState_1 = require("./useCalendarState");
22
9
  function useRangeCalendarState(props) {
23
10
  var _a, _b;
24
- const { value: valueProp, defaultValue, onUpdate } = props, calendarProps = __rest(props, ["value", "defaultValue", "onUpdate"]);
11
+ const { value: valueProp, defaultValue, onUpdate } = props, calendarProps = tslib_1.__rest(props, ["value", "defaultValue", "onUpdate"]);
25
12
  const [value, setValue] = (0, useControlledState_1.useControlledState)(valueProp, defaultValue, onUpdate);
26
13
  const [anchorDate, setAnchorDateState] = react_1.default.useState();
27
14
  const calendar = (0, useCalendarState_1.useCalendarState)(Object.assign(Object.assign({}, calendarProps), { value: (_a = value === null || value === void 0 ? void 0 : value.start) !== null && _a !== void 0 ? _a : null }));
28
15
  const highlightedRange = anchorDate
29
16
  ? makeRange(anchorDate, calendar.focusedDate, calendar.mode)
30
17
  : (_b = (value && makeRange(value.start, value.end, calendar.mode))) !== null && _b !== void 0 ? _b : undefined;
31
- const selectDate = (date) => {
32
- if (props.disabled || props.readOnly) {
18
+ const minMode = calendar.availableModes[0];
19
+ const selectDate = (date, force = false) => {
20
+ if (props.disabled) {
21
+ return;
22
+ }
23
+ if (!force && calendar.mode !== minMode) {
24
+ calendar.zoomIn();
25
+ return;
26
+ }
27
+ if (props.readOnly) {
33
28
  return;
34
29
  }
35
30
  date = (0, utils_1.constrainValue)(date, props.minValue, props.maxValue);
@@ -49,9 +44,6 @@ function useRangeCalendarState(props) {
49
44
  setValue,
50
45
  selectDate,
51
46
  anchorDate, setAnchorDate: setAnchorDateState, highlightedRange,
52
- selectFocusedDate() {
53
- selectDate(calendar.focusedDate);
54
- },
55
47
  isSelected(date) {
56
48
  if (!highlightedRange) {
57
49
  return false;
@@ -1,11 +1,9 @@
1
1
  "use strict";
2
- var __importDefault = (this && this.__importDefault) || function (mod) {
3
- return (mod && mod.__esModule) ? mod : { "default": mod };
4
- };
5
2
  Object.defineProperty(exports, "__esModule", { value: true });
6
3
  exports.i18n = void 0;
4
+ const tslib_1 = require("tslib");
7
5
  const i18n_1 = require("@gravity-ui/uikit/i18n");
8
6
  const cn_1 = require("../../../utils/cn");
9
- const en_json_1 = __importDefault(require("./en.json"));
10
- const ru_json_1 = __importDefault(require("./ru.json"));
7
+ const en_json_1 = tslib_1.__importDefault(require("./en.json"));
8
+ const ru_json_1 = tslib_1.__importDefault(require("./ru.json"));
11
9
  exports.i18n = (0, i18n_1.addComponentKeysets)({ en: en_json_1.default, ru: ru_json_1.default }, `${cn_1.NAMESPACE}calendar`);
@@ -1,23 +1,10 @@
1
1
  "use strict";
2
- var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
- if (k2 === undefined) k2 = k;
4
- var desc = Object.getOwnPropertyDescriptor(m, k);
5
- if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
- desc = { enumerable: true, get: function() { return m[k]; } };
7
- }
8
- Object.defineProperty(o, k2, desc);
9
- }) : (function(o, m, k, k2) {
10
- if (k2 === undefined) k2 = k;
11
- o[k2] = m[k];
12
- }));
13
- var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
- for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
- };
16
2
  Object.defineProperty(exports, "__esModule", { value: true });
17
- __exportStar(require("./Calendar"), exports);
18
- __exportStar(require("./RangeCalendar"), exports);
19
- __exportStar(require("./hooks/useCalendarState"), exports);
20
- __exportStar(require("./hooks/useRangeCalendarState"), exports);
21
- __exportStar(require("./hooks/useCalendarProps"), exports);
22
- __exportStar(require("./hooks/useCalendarGridProps"), exports);
23
- __exportStar(require("./hooks/useCalendarCellProps"), exports);
3
+ const tslib_1 = require("tslib");
4
+ tslib_1.__exportStar(require("./Calendar"), exports);
5
+ tslib_1.__exportStar(require("./RangeCalendar"), exports);
6
+ tslib_1.__exportStar(require("./hooks/useCalendarState"), exports);
7
+ tslib_1.__exportStar(require("./hooks/useRangeCalendarState"), exports);
8
+ tslib_1.__exportStar(require("./hooks/useCalendarProps"), exports);
9
+ tslib_1.__exportStar(require("./hooks/useCalendarGridProps"), exports);
10
+ tslib_1.__exportStar(require("./hooks/useCalendarCellProps"), exports);
@@ -1,22 +1,9 @@
1
1
  "use strict";
2
- var __rest = (this && this.__rest) || function (s, e) {
3
- var t = {};
4
- for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
5
- t[p] = s[p];
6
- if (s != null && typeof Object.getOwnPropertySymbols === "function")
7
- for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
8
- if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))
9
- t[p[i]] = s[p[i]];
10
- }
11
- return t;
12
- };
13
- var __importDefault = (this && this.__importDefault) || function (mod) {
14
- return (mod && mod.__esModule) ? mod : { "default": mod };
15
- };
16
2
  Object.defineProperty(exports, "__esModule", { value: true });
17
3
  exports.DateField = void 0;
4
+ const tslib_1 = require("tslib");
18
5
  const jsx_runtime_1 = require("react/jsx-runtime");
19
- const react_1 = __importDefault(require("react"));
6
+ const react_1 = tslib_1.__importDefault(require("react"));
20
7
  const uikit_1 = require("@gravity-ui/uikit");
21
8
  const cn_1 = require("../../utils/cn");
22
9
  const useDateFieldProps_1 = require("./hooks/useDateFieldProps");
@@ -24,7 +11,7 @@ const useDateFieldState_1 = require("./hooks/useDateFieldState");
24
11
  require("./DateField.css");
25
12
  const b = (0, cn_1.block)('date-field');
26
13
  function DateField(_a) {
27
- var { className } = _a, props = __rest(_a, ["className"]);
14
+ var { className } = _a, props = tslib_1.__rest(_a, ["className"]);
28
15
  const state = (0, useDateFieldState_1.useDateFieldState)(props);
29
16
  const { inputProps } = (0, useDateFieldProps_1.useDateFieldProps)(state, props);
30
17
  const [isActive, setActive] = react_1.default.useState(false);
@@ -1,10 +1,8 @@
1
1
  "use strict";
2
- var __importDefault = (this && this.__importDefault) || function (mod) {
3
- return (mod && mod.__esModule) ? mod : { "default": mod };
4
- };
5
2
  Object.defineProperty(exports, "__esModule", { value: true });
6
3
  exports.useDateFieldProps = void 0;
7
- const react_1 = __importDefault(require("react"));
4
+ const tslib_1 = require("tslib");
5
+ const react_1 = tslib_1.__importDefault(require("react"));
8
6
  const utils_1 = require("../utils");
9
7
  function useDateFieldProps(state, props) {
10
8
  const inputRef = react_1.default.useRef(null);
@@ -86,12 +84,16 @@ function useDateFieldProps(state, props) {
86
84
  if (state.selectedSectionIndexes !== null) {
87
85
  return;
88
86
  }
89
- const input = inputRef.current;
87
+ const input = e.target;
88
+ const isAutofocus = !inputRef.current;
90
89
  setTimeout(() => {
91
90
  if (!input || input !== inputRef.current) {
92
91
  return;
93
92
  }
94
- if (
93
+ if (isAutofocus) {
94
+ state.focusSectionInPosition(0);
95
+ }
96
+ else if (
95
97
  // avoid selecting all sections when focusing empty field without value
96
98
  input.value.length &&
97
99
  Number(input.selectionEnd) - Number(input.selectionStart) ===
@@ -147,7 +149,7 @@ function useDateFieldProps(state, props) {
147
149
  e.preventDefault();
148
150
  state.clearSection();
149
151
  }
150
- else if (e.key === 'a' && e[utils_1.CtrlCmd]) {
152
+ else if (e.key === 'a' && (e['ctrlKey'] || e['metaKey'])) {
151
153
  e.preventDefault();
152
154
  setSelectedSections('all');
153
155
  }
@@ -169,32 +171,35 @@ function useDateFieldProps(state, props) {
169
171
  onBeforeInput(e) {
170
172
  e.preventDefault();
171
173
  // @ts-expect-error
172
- const key = e.nativeEvent.data;
173
- // eslint-disable-next-line no-eq-null, eqeqeq
174
- if (key != null) {
174
+ const key = e.data;
175
+ if (key !== undefined && key !== null) {
175
176
  state.onInput(key);
176
177
  }
177
178
  },
178
179
  onPaste(e) {
180
+ e.preventDefault();
179
181
  if (state.readOnly) {
180
- e.preventDefault();
181
182
  return;
182
183
  }
183
- const pastedValue = e.clipboardData.getData('text');
184
- if (state.setValueFromString(pastedValue)) {
185
- e.preventDefault();
186
- }
187
- else if (state.selectedSectionIndexes &&
184
+ const pastedValue = (0, utils_1.cleanString)(e.clipboardData.getData('text'));
185
+ if (state.selectedSectionIndexes &&
188
186
  state.selectedSectionIndexes.startIndex ===
189
187
  state.selectedSectionIndexes.endIndex) {
190
188
  const activeSection = state.sections[state.selectedSectionIndexes.startIndex];
189
+ const digitsOnly = /^\d+$/.test(pastedValue);
190
+ const lettersOnly = /^[a-zA-Z]+$/.test(pastedValue);
191
191
  const isValidValue = Boolean(activeSection) &&
192
- ((activeSection.contentType === 'digit' && /^\d+$/.test(pastedValue)) ||
193
- activeSection.contentType === 'letter');
194
- if (!isValidValue) {
195
- e.preventDefault();
192
+ ((activeSection.contentType === 'digit' && digitsOnly) ||
193
+ (activeSection.contentType === 'letter' && lettersOnly));
194
+ if (isValidValue) {
195
+ state.onInput(pastedValue);
196
+ return;
197
+ }
198
+ if (digitsOnly || lettersOnly) {
199
+ return;
196
200
  }
197
201
  }
202
+ state.setValueFromString(pastedValue);
198
203
  },
199
204
  },
200
205
  },