@gravity-ui/date-components 2.6.0 → 2.7.1

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 (23) hide show
  1. package/dist/cjs/components/DatePicker/hooks/datePickerStateFactory.js +19 -3
  2. package/dist/cjs/components/RelativeDatePicker/hooks/useRelativeDatePickerProps.js +16 -12
  3. package/dist/cjs/components/RelativeRangeDatePicker/RelativeRangeDatePicker.css +3 -0
  4. package/dist/cjs/components/RelativeRangeDatePicker/RelativeRangeDatePicker.js +11 -5
  5. package/dist/cjs/components/RelativeRangeDatePicker/components/PickerDialog/PickerDialog.css +4 -0
  6. package/dist/cjs/components/RelativeRangeDatePicker/components/PickerDialog/PickerDialog.js +4 -1
  7. package/dist/cjs/components/RelativeRangeDatePicker/components/Presets/Presets.css +4 -0
  8. package/dist/cjs/components/RelativeRangeDatePicker/hooks/useRelativeRangeDatePickerState.d.ts +6 -5
  9. package/dist/cjs/components/RelativeRangeDatePicker/index.d.ts +4 -0
  10. package/dist/cjs/components/RelativeRangeDatePicker/index.js +7 -1
  11. package/dist/cjs/components/RelativeRangeDatePicker/utils.js +1 -1
  12. package/dist/esm/components/DatePicker/hooks/datePickerStateFactory.js +19 -3
  13. package/dist/esm/components/RelativeDatePicker/hooks/useRelativeDatePickerProps.js +16 -12
  14. package/dist/esm/components/RelativeRangeDatePicker/RelativeRangeDatePicker.css +3 -0
  15. package/dist/esm/components/RelativeRangeDatePicker/RelativeRangeDatePicker.js +11 -5
  16. package/dist/esm/components/RelativeRangeDatePicker/components/PickerDialog/PickerDialog.css +4 -0
  17. package/dist/esm/components/RelativeRangeDatePicker/components/PickerDialog/PickerDialog.js +4 -1
  18. package/dist/esm/components/RelativeRangeDatePicker/components/Presets/Presets.css +4 -0
  19. package/dist/esm/components/RelativeRangeDatePicker/hooks/useRelativeRangeDatePickerState.d.ts +6 -5
  20. package/dist/esm/components/RelativeRangeDatePicker/index.d.ts +4 -0
  21. package/dist/esm/components/RelativeRangeDatePicker/index.js +2 -0
  22. package/dist/esm/components/RelativeRangeDatePicker/utils.js +1 -1
  23. package/package.json +3 -2
@@ -39,9 +39,25 @@ function datePickerStateFactory({ getPlaceholderTime, mergeDateTime, setTimezone
39
39
  disabled,
40
40
  readOnly, validationState: props.validationState, minValue: props.minValue, maxValue: props.maxValue, isDateUnavailable: props.isDateUnavailable, format, placeholderValue: props.placeholderValue, timeZone }));
41
41
  const timeFormat = react_1.default.useMemo(() => {
42
- const hasSeconds = dateFieldState.sections.some((s) => s.type === 'second');
43
- return hasSeconds ? 'LTS' : 'LT';
44
- }, [dateFieldState.sections]);
42
+ if (!dateFieldState.hasTime) {
43
+ return undefined;
44
+ }
45
+ const timeFormatParts = [];
46
+ const hours = dateFieldState.sections.find((s) => s.type === 'hour');
47
+ if (hours) {
48
+ timeFormatParts.push(hours.format);
49
+ }
50
+ const minutes = dateFieldState.sections.find((s) => s.type === 'minute');
51
+ if (minutes) {
52
+ timeFormatParts.push(minutes.format);
53
+ }
54
+ const seconds = dateFieldState.sections.find((s) => s.type === 'second');
55
+ if (seconds) {
56
+ timeFormatParts.push(seconds.format);
57
+ }
58
+ const dayPeriod = dateFieldState.sections.find((s) => s.type === 'dayPeriod');
59
+ return timeFormatParts.join(':') + (dayPeriod ? ` ${dayPeriod.format}` : '');
60
+ }, [dateFieldState.hasTime, dateFieldState.sections]);
45
61
  if (value) {
46
62
  selectedDate = setTimezone(value, timeZone);
47
63
  if (dateFieldState.hasTime) {
@@ -38,18 +38,6 @@ function useRelativeDatePickerProps(state, _a) {
38
38
  if (!state.isActive && isOpen) {
39
39
  setOpen(false);
40
40
  }
41
- const [prevOpen, setPrevOpen] = react_1.default.useState(isOpen);
42
- if (isOpen !== prevOpen) {
43
- setPrevOpen(isOpen);
44
- if (!isOpen) {
45
- // FIXME: use popup afterOpenChange instead.
46
- setTimeout(() => {
47
- setFocusedDate(mode === 'relative'
48
- ? relativeDateState.lastCorrectDate
49
- : datePickerState.dateFieldState.displayValue);
50
- }, 200);
51
- }
52
- }
53
41
  const commonInputProps = {
54
42
  onFocus: () => {
55
43
  if (!state.isActive) {
@@ -59,6 +47,17 @@ function useRelativeDatePickerProps(state, _a) {
59
47
  },
60
48
  errorMessage: props.errorMessage,
61
49
  errorPlacement: props.errorPlacement,
50
+ controlProps: {
51
+ onClick: () => {
52
+ if (state.disabled) {
53
+ return;
54
+ }
55
+ if (!isOpen) {
56
+ state.setActive(true);
57
+ setOpen(true);
58
+ }
59
+ },
60
+ },
62
61
  };
63
62
  const { inputProps } = (0, DateField_1.useDateFieldProps)(datePickerState.dateFieldState, Object.assign(Object.assign({}, props), { value: undefined, defaultValue: undefined, onUpdate: undefined }));
64
63
  const { inputProps: relativeDateProps } = (0, RelativeDateField_1.useRelativeDateFieldProps)(relativeDateState, Object.assign(Object.assign({}, props), { value: undefined, defaultValue: undefined, onUpdate: undefined }));
@@ -145,6 +144,11 @@ function useRelativeDatePickerProps(state, _a) {
145
144
  setOpen(false);
146
145
  focusInput();
147
146
  },
147
+ onTransitionExited: () => {
148
+ setFocusedDate(mode === 'relative'
149
+ ? relativeDateState.lastCorrectDate
150
+ : datePickerState.dateFieldState.displayValue);
151
+ },
148
152
  },
149
153
  calendarProps: {
150
154
  ref: calendarRef,
@@ -2,6 +2,9 @@
2
2
  position: relative;
3
3
  display: inline-flex;
4
4
  }
5
+ .g-date-relative-range-date-picker__input {
6
+ caret-color: transparent;
7
+ }
5
8
  .g-date-relative-range-date-picker__input_mobile {
6
9
  pointer-events: none;
7
10
  }
@@ -33,10 +33,7 @@ function RelativeRangeDatePicker(props) {
33
33
  },
34
34
  onBlurWithin: (e) => {
35
35
  var _a;
36
- // when the popup is open and an user clicks outside, focus will be returned to the input
37
- const seemsIsClickOutsideInEmptySpace = open &&
38
- (document.activeElement === null || document.activeElement === document.body);
39
- if (!seemsIsClickOutsideInEmptySpace) {
36
+ if (!open) {
40
37
  setIsActive(false);
41
38
  (_a = props.onBlur) === null || _a === void 0 ? void 0 : _a.call(props, e);
42
39
  }
@@ -64,6 +61,15 @@ function RelativeRangeDatePicker(props) {
64
61
  'aria-expanded': open,
65
62
  disabled: isMobile,
66
63
  className: b('input', { mobile: isMobile }),
64
+ onClick: () => {
65
+ if (props.disabled) {
66
+ return;
67
+ }
68
+ if (!open) {
69
+ setIsActive(true);
70
+ setOpen(true);
71
+ }
72
+ },
67
73
  }, onKeyDown: (e) => {
68
74
  if (props.disabled) {
69
75
  return;
@@ -94,7 +100,7 @@ function RelativeRangeDatePicker(props) {
94
100
  state.setValue(v.value, v.timeZone);
95
101
  }, value: { value: state.value, timeZone: state.timeZone }, toStringValue: (v) => v.timeZone, disabled: props.disabled }), (0, jsx_runtime_1.jsx)(PickerDialog_1.PickerDialog, { state: state, props: props, open: open, onClose: () => {
96
102
  setOpen(false);
97
- }, anchorRef: anchorRef, isMobile: isMobile, className: props.className })] })));
103
+ }, anchorRef: anchorRef, isMobile: isMobile, className: props.popupClassName })] })));
98
104
  }
99
105
  exports.RelativeRangeDatePicker = RelativeRangeDatePicker;
100
106
  function getNativeValue(value) {
@@ -1,5 +1,6 @@
1
1
  .g-date-relative-range-date-picker-dialog__content {
2
2
  --_--popup-content-padding: var(--g-spacing-2);
3
+ --_--g-date-picker-presets-padding: var(--_--popup-content-padding);
3
4
  padding: var(--_--popup-content-padding);
4
5
  }
5
6
  .g-date-relative-range-date-picker-dialog__content_mobile {
@@ -29,4 +30,7 @@
29
30
  margin-block: var(--g-spacing-2) calc(-1 * var(--_--popup-content-padding));
30
31
  margin-inline: calc(-1 * var(--_--popup-content-padding));
31
32
  border-block-start: 1px solid var(--g-color-line-generic);
33
+ }
34
+ .g-date-relative-range-date-picker-dialog__presets {
35
+ margin-inline: calc(-1 * var(--_--popup-content-padding));
32
36
  }
@@ -40,5 +40,8 @@ function DialogContent(props) {
40
40
  props.onApply();
41
41
  }, className: b('apply'), width: "max", children: (0, i18n_1.i18n)('Apply') })) : null, props.withPresets && !props.readOnly ? ((0, jsx_runtime_1.jsx)(Presets_1.Presets, { size: props.size, presetTabs: props.presetTabs, onChoosePreset: (start, end) => {
42
42
  state.setRange({ type: 'relative', value: start }, { type: 'relative', value: end });
43
- }, minValue: props.minValue, docs: props.docs })) : null, props.withZonesList ? ((0, jsx_runtime_1.jsx)("div", { className: b('zone'), children: (0, jsx_runtime_1.jsx)(Zones_1.Zones, { value: state.timeZone, onUpdate: state.setTimeZone, disabled: props.readOnly, size: props.size }) })) : null] }));
43
+ if (!props.withApplyButton) {
44
+ props.onApply();
45
+ }
46
+ }, minValue: props.minValue, docs: props.docs, className: b('presets') })) : null, props.withZonesList ? ((0, jsx_runtime_1.jsx)("div", { className: b('zone'), children: (0, jsx_runtime_1.jsx)(Zones_1.Zones, { value: state.timeZone, onUpdate: state.setTimeZone, disabled: props.readOnly, size: props.size }) })) : null] }));
44
47
  }
@@ -1,8 +1,12 @@
1
+ .g-date-relative-range-date-picker-presets {
2
+ --g-list-item-padding: 0 var(--_--g-date-picker-presets-padding, 0);
3
+ }
1
4
  .g-date-relative-range-date-picker-presets__tabs {
2
5
  --g-tabs-border-width: 0;
3
6
  display: flex;
4
7
  align-items: center;
5
8
  gap: var(--g-spacing-2);
9
+ padding-inline: var(--_--g-date-picker-presets-padding, 0);
6
10
  box-shadow: inset 0 -1px var(--g-color-line-generic);
7
11
  }
8
12
  .g-date-relative-range-date-picker-presets__list-container {
@@ -1,17 +1,18 @@
1
1
  import type { DateTime } from '@gravity-ui/date-utils';
2
2
  import type { Value } from '../../RelativeDatePicker';
3
3
  import type { RangeValue } from '../../types';
4
+ export type RelativeRangeDatePickerValue = RangeValue<Value | null>;
4
5
  export interface RelativeRangeDatePickerState {
5
- value: RangeValue<Value | null> | null;
6
+ value: RelativeRangeDatePickerValue | null;
6
7
  timeZone: string;
7
- setValue: (value: RangeValue<Value | null> | null, timeZone: string) => void;
8
+ setValue: (value: RelativeRangeDatePickerValue | null, timeZone: string) => void;
8
9
  isInvalid: boolean;
9
10
  errors: string[];
10
11
  }
11
12
  export interface RelativeRangeDatePickerStateOptions {
12
- value?: RangeValue<Value | null> | null;
13
- defaultValue?: RangeValue<Value | null>;
14
- onUpdate?: (value: RangeValue<Value | null> | null, timeZone: string) => void;
13
+ value?: RelativeRangeDatePickerValue | null;
14
+ defaultValue?: RelativeRangeDatePickerValue;
15
+ onUpdate?: (value: RelativeRangeDatePickerValue | null, timeZone: string) => void;
15
16
  timeZone?: string;
16
17
  defaultTimeZone?: string;
17
18
  onUpdateTimeZone?: (timeZone: string) => void;
@@ -2,3 +2,7 @@ export * from './RelativeRangeDatePicker';
2
2
  export { PickerDialog as RelativeRangeDatePickerDialog } from './components/PickerDialog/PickerDialog';
3
3
  export type { PickerDialogProps as RelativeRangeDatePickerDialogProps } from './components/PickerDialog/PickerDialog';
4
4
  export * from './hooks/useRelativeRangeDatePickerState';
5
+ export { DEFAULT_DATE_PRESETS, DEFAULT_TIME_PRESETS, DEFAULT_OTHERS_PRESETS, } from './components/Presets/defaultPresets';
6
+ export { getDefaultPresetTabs } from './components/Presets/utils';
7
+ export type { Preset as RelativeRangeDatePickerPreset } from './components/Presets/defaultPresets';
8
+ export type { PresetTab as RelativeRangeDatePickerPresetTab } from './components/Presets/utils';
@@ -1,8 +1,14 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.RelativeRangeDatePickerDialog = void 0;
3
+ exports.getDefaultPresetTabs = exports.DEFAULT_OTHERS_PRESETS = exports.DEFAULT_TIME_PRESETS = exports.DEFAULT_DATE_PRESETS = exports.RelativeRangeDatePickerDialog = void 0;
4
4
  const tslib_1 = require("tslib");
5
5
  tslib_1.__exportStar(require("./RelativeRangeDatePicker"), exports);
6
6
  var PickerDialog_1 = require("./components/PickerDialog/PickerDialog");
7
7
  Object.defineProperty(exports, "RelativeRangeDatePickerDialog", { enumerable: true, get: function () { return PickerDialog_1.PickerDialog; } });
8
8
  tslib_1.__exportStar(require("./hooks/useRelativeRangeDatePickerState"), exports);
9
+ var defaultPresets_1 = require("./components/Presets/defaultPresets");
10
+ Object.defineProperty(exports, "DEFAULT_DATE_PRESETS", { enumerable: true, get: function () { return defaultPresets_1.DEFAULT_DATE_PRESETS; } });
11
+ Object.defineProperty(exports, "DEFAULT_TIME_PRESETS", { enumerable: true, get: function () { return defaultPresets_1.DEFAULT_TIME_PRESETS; } });
12
+ Object.defineProperty(exports, "DEFAULT_OTHERS_PRESETS", { enumerable: true, get: function () { return defaultPresets_1.DEFAULT_OTHERS_PRESETS; } });
13
+ var utils_1 = require("./components/Presets/utils");
14
+ Object.defineProperty(exports, "getDefaultPresetTabs", { enumerable: true, get: function () { return utils_1.getDefaultPresetTabs; } });
@@ -27,7 +27,7 @@ function getDefaultTitle({ value, timeZone, alwaysShowAsAbsolute, format = 'L',
27
27
  if (!value) {
28
28
  return '';
29
29
  }
30
- const tz = timeZone === 'system' ? '' : ` (${getTimeZoneOffset(timeZone)})`;
30
+ const tz = timeZone === 'default' ? '' : ` (${getTimeZoneOffset(timeZone)})`;
31
31
  let from = '';
32
32
  if (value.start) {
33
33
  from =
@@ -35,9 +35,25 @@ export function datePickerStateFactory({ getPlaceholderTime, mergeDateTime, setT
35
35
  disabled,
36
36
  readOnly, validationState: props.validationState, minValue: props.minValue, maxValue: props.maxValue, isDateUnavailable: props.isDateUnavailable, format, placeholderValue: props.placeholderValue, timeZone }));
37
37
  const timeFormat = React.useMemo(() => {
38
- const hasSeconds = dateFieldState.sections.some((s) => s.type === 'second');
39
- return hasSeconds ? 'LTS' : 'LT';
40
- }, [dateFieldState.sections]);
38
+ if (!dateFieldState.hasTime) {
39
+ return undefined;
40
+ }
41
+ const timeFormatParts = [];
42
+ const hours = dateFieldState.sections.find((s) => s.type === 'hour');
43
+ if (hours) {
44
+ timeFormatParts.push(hours.format);
45
+ }
46
+ const minutes = dateFieldState.sections.find((s) => s.type === 'minute');
47
+ if (minutes) {
48
+ timeFormatParts.push(minutes.format);
49
+ }
50
+ const seconds = dateFieldState.sections.find((s) => s.type === 'second');
51
+ if (seconds) {
52
+ timeFormatParts.push(seconds.format);
53
+ }
54
+ const dayPeriod = dateFieldState.sections.find((s) => s.type === 'dayPeriod');
55
+ return timeFormatParts.join(':') + (dayPeriod ? ` ${dayPeriod.format}` : '');
56
+ }, [dateFieldState.hasTime, dateFieldState.sections]);
41
57
  if (value) {
42
58
  selectedDate = setTimezone(value, timeZone);
43
59
  if (dateFieldState.hasTime) {
@@ -35,18 +35,6 @@ export function useRelativeDatePickerProps(state, _a) {
35
35
  if (!state.isActive && isOpen) {
36
36
  setOpen(false);
37
37
  }
38
- const [prevOpen, setPrevOpen] = React.useState(isOpen);
39
- if (isOpen !== prevOpen) {
40
- setPrevOpen(isOpen);
41
- if (!isOpen) {
42
- // FIXME: use popup afterOpenChange instead.
43
- setTimeout(() => {
44
- setFocusedDate(mode === 'relative'
45
- ? relativeDateState.lastCorrectDate
46
- : datePickerState.dateFieldState.displayValue);
47
- }, 200);
48
- }
49
- }
50
38
  const commonInputProps = {
51
39
  onFocus: () => {
52
40
  if (!state.isActive) {
@@ -56,6 +44,17 @@ export function useRelativeDatePickerProps(state, _a) {
56
44
  },
57
45
  errorMessage: props.errorMessage,
58
46
  errorPlacement: props.errorPlacement,
47
+ controlProps: {
48
+ onClick: () => {
49
+ if (state.disabled) {
50
+ return;
51
+ }
52
+ if (!isOpen) {
53
+ state.setActive(true);
54
+ setOpen(true);
55
+ }
56
+ },
57
+ },
59
58
  };
60
59
  const { inputProps } = useDateFieldProps(datePickerState.dateFieldState, Object.assign(Object.assign({}, props), { value: undefined, defaultValue: undefined, onUpdate: undefined }));
61
60
  const { inputProps: relativeDateProps } = useRelativeDateFieldProps(relativeDateState, Object.assign(Object.assign({}, props), { value: undefined, defaultValue: undefined, onUpdate: undefined }));
@@ -142,6 +141,11 @@ export function useRelativeDatePickerProps(state, _a) {
142
141
  setOpen(false);
143
142
  focusInput();
144
143
  },
144
+ onTransitionExited: () => {
145
+ setFocusedDate(mode === 'relative'
146
+ ? relativeDateState.lastCorrectDate
147
+ : datePickerState.dateFieldState.displayValue);
148
+ },
145
149
  },
146
150
  calendarProps: {
147
151
  ref: calendarRef,
@@ -2,6 +2,9 @@
2
2
  position: relative;
3
3
  display: inline-flex;
4
4
  }
5
+ .g-date-relative-range-date-picker__input {
6
+ caret-color: transparent;
7
+ }
5
8
  .g-date-relative-range-date-picker__input_mobile {
6
9
  pointer-events: none;
7
10
  }
@@ -29,10 +29,7 @@ export function RelativeRangeDatePicker(props) {
29
29
  },
30
30
  onBlurWithin: (e) => {
31
31
  var _a;
32
- // when the popup is open and an user clicks outside, focus will be returned to the input
33
- const seemsIsClickOutsideInEmptySpace = open &&
34
- (document.activeElement === null || document.activeElement === document.body);
35
- if (!seemsIsClickOutsideInEmptySpace) {
32
+ if (!open) {
36
33
  setIsActive(false);
37
34
  (_a = props.onBlur) === null || _a === void 0 ? void 0 : _a.call(props, e);
38
35
  }
@@ -60,6 +57,15 @@ export function RelativeRangeDatePicker(props) {
60
57
  'aria-expanded': open,
61
58
  disabled: isMobile,
62
59
  className: b('input', { mobile: isMobile }),
60
+ onClick: () => {
61
+ if (props.disabled) {
62
+ return;
63
+ }
64
+ if (!open) {
65
+ setIsActive(true);
66
+ setOpen(true);
67
+ }
68
+ },
63
69
  }, onKeyDown: (e) => {
64
70
  if (props.disabled) {
65
71
  return;
@@ -90,7 +96,7 @@ export function RelativeRangeDatePicker(props) {
90
96
  state.setValue(v.value, v.timeZone);
91
97
  }, value: { value: state.value, timeZone: state.timeZone }, toStringValue: (v) => v.timeZone, disabled: props.disabled }), _jsx(PickerDialog, { state: state, props: props, open: open, onClose: () => {
92
98
  setOpen(false);
93
- }, anchorRef: anchorRef, isMobile: isMobile, className: props.className })] })));
99
+ }, anchorRef: anchorRef, isMobile: isMobile, className: props.popupClassName })] })));
94
100
  }
95
101
  function getNativeValue(value) {
96
102
  if (!value) {
@@ -1,5 +1,6 @@
1
1
  .g-date-relative-range-date-picker-dialog__content {
2
2
  --_--popup-content-padding: var(--g-spacing-2);
3
+ --_--g-date-picker-presets-padding: var(--_--popup-content-padding);
3
4
  padding: var(--_--popup-content-padding);
4
5
  }
5
6
  .g-date-relative-range-date-picker-dialog__content_mobile {
@@ -29,4 +30,7 @@
29
30
  margin-block: var(--g-spacing-2) calc(-1 * var(--_--popup-content-padding));
30
31
  margin-inline: calc(-1 * var(--_--popup-content-padding));
31
32
  border-block-start: 1px solid var(--g-color-line-generic);
33
+ }
34
+ .g-date-relative-range-date-picker-dialog__presets {
35
+ margin-inline: calc(-1 * var(--_--popup-content-padding));
32
36
  }
@@ -36,5 +36,8 @@ function DialogContent(props) {
36
36
  props.onApply();
37
37
  }, className: b('apply'), width: "max", children: i18n('Apply') })) : null, props.withPresets && !props.readOnly ? (_jsx(Presets, { size: props.size, presetTabs: props.presetTabs, onChoosePreset: (start, end) => {
38
38
  state.setRange({ type: 'relative', value: start }, { type: 'relative', value: end });
39
- }, minValue: props.minValue, docs: props.docs })) : null, props.withZonesList ? (_jsx("div", { className: b('zone'), children: _jsx(Zones, { value: state.timeZone, onUpdate: state.setTimeZone, disabled: props.readOnly, size: props.size }) })) : null] }));
39
+ if (!props.withApplyButton) {
40
+ props.onApply();
41
+ }
42
+ }, minValue: props.minValue, docs: props.docs, className: b('presets') })) : null, props.withZonesList ? (_jsx("div", { className: b('zone'), children: _jsx(Zones, { value: state.timeZone, onUpdate: state.setTimeZone, disabled: props.readOnly, size: props.size }) })) : null] }));
40
43
  }
@@ -1,8 +1,12 @@
1
+ .g-date-relative-range-date-picker-presets {
2
+ --g-list-item-padding: 0 var(--_--g-date-picker-presets-padding, 0);
3
+ }
1
4
  .g-date-relative-range-date-picker-presets__tabs {
2
5
  --g-tabs-border-width: 0;
3
6
  display: flex;
4
7
  align-items: center;
5
8
  gap: var(--g-spacing-2);
9
+ padding-inline: var(--_--g-date-picker-presets-padding, 0);
6
10
  box-shadow: inset 0 -1px var(--g-color-line-generic);
7
11
  }
8
12
  .g-date-relative-range-date-picker-presets__list-container {
@@ -1,17 +1,18 @@
1
1
  import type { DateTime } from '@gravity-ui/date-utils';
2
2
  import type { Value } from '../../RelativeDatePicker';
3
3
  import type { RangeValue } from '../../types';
4
+ export type RelativeRangeDatePickerValue = RangeValue<Value | null>;
4
5
  export interface RelativeRangeDatePickerState {
5
- value: RangeValue<Value | null> | null;
6
+ value: RelativeRangeDatePickerValue | null;
6
7
  timeZone: string;
7
- setValue: (value: RangeValue<Value | null> | null, timeZone: string) => void;
8
+ setValue: (value: RelativeRangeDatePickerValue | null, timeZone: string) => void;
8
9
  isInvalid: boolean;
9
10
  errors: string[];
10
11
  }
11
12
  export interface RelativeRangeDatePickerStateOptions {
12
- value?: RangeValue<Value | null> | null;
13
- defaultValue?: RangeValue<Value | null>;
14
- onUpdate?: (value: RangeValue<Value | null> | null, timeZone: string) => void;
13
+ value?: RelativeRangeDatePickerValue | null;
14
+ defaultValue?: RelativeRangeDatePickerValue;
15
+ onUpdate?: (value: RelativeRangeDatePickerValue | null, timeZone: string) => void;
15
16
  timeZone?: string;
16
17
  defaultTimeZone?: string;
17
18
  onUpdateTimeZone?: (timeZone: string) => void;
@@ -2,3 +2,7 @@ export * from './RelativeRangeDatePicker';
2
2
  export { PickerDialog as RelativeRangeDatePickerDialog } from './components/PickerDialog/PickerDialog';
3
3
  export type { PickerDialogProps as RelativeRangeDatePickerDialogProps } from './components/PickerDialog/PickerDialog';
4
4
  export * from './hooks/useRelativeRangeDatePickerState';
5
+ export { DEFAULT_DATE_PRESETS, DEFAULT_TIME_PRESETS, DEFAULT_OTHERS_PRESETS, } from './components/Presets/defaultPresets';
6
+ export { getDefaultPresetTabs } from './components/Presets/utils';
7
+ export type { Preset as RelativeRangeDatePickerPreset } from './components/Presets/defaultPresets';
8
+ export type { PresetTab as RelativeRangeDatePickerPresetTab } from './components/Presets/utils';
@@ -1,3 +1,5 @@
1
1
  export * from './RelativeRangeDatePicker';
2
2
  export { PickerDialog as RelativeRangeDatePickerDialog } from './components/PickerDialog/PickerDialog';
3
3
  export * from './hooks/useRelativeRangeDatePickerState';
4
+ export { DEFAULT_DATE_PRESETS, DEFAULT_TIME_PRESETS, DEFAULT_OTHERS_PRESETS, } from './components/Presets/defaultPresets';
5
+ export { getDefaultPresetTabs } from './components/Presets/utils';
@@ -21,7 +21,7 @@ export function getDefaultTitle({ value, timeZone, alwaysShowAsAbsolute, format
21
21
  if (!value) {
22
22
  return '';
23
23
  }
24
- const tz = timeZone === 'system' ? '' : ` (${getTimeZoneOffset(timeZone)})`;
24
+ const tz = timeZone === 'default' ? '' : ` (${getTimeZoneOffset(timeZone)})`;
25
25
  let from = '';
26
26
  if (value.start) {
27
27
  from =
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@gravity-ui/date-components",
3
- "version": "2.6.0",
3
+ "version": "2.7.1",
4
4
  "description": "",
5
5
  "license": "MIT",
6
6
  "main": "dist/cjs/index.js",
@@ -62,8 +62,9 @@
62
62
  "@gravity-ui/tsconfig": "^1.0.0",
63
63
  "@gravity-ui/uikit": "^6.15.0",
64
64
  "@storybook/addon-a11y": "^8.1.10",
65
+ "@storybook/addon-actions": "^8.1.10",
65
66
  "@storybook/addon-essentials": "^8.1.10",
66
- "@storybook/addon-storysource": "8.1.10",
67
+ "@storybook/addon-storysource": "^8.1.10",
67
68
  "@storybook/addon-viewport": "^8.1.10",
68
69
  "@storybook/addon-webpack5-compiler-babel": "^3.0.3",
69
70
  "@storybook/blocks": "^8.1.10",