@gravity-ui/date-components 3.0.2 → 3.1.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 (93) hide show
  1. package/dist/cjs/components/DateField/utils.js +11 -1
  2. package/dist/cjs/components/DateField/utils.js.map +1 -1
  3. package/dist/cjs/components/DatePicker/hooks/useDatePickerProps.js +1 -0
  4. package/dist/cjs/components/DatePicker/hooks/useDatePickerProps.js.map +1 -1
  5. package/dist/cjs/components/RangeDateField/hooks/useRangeDateFieldState.js +2 -3
  6. package/dist/cjs/components/RangeDateField/hooks/useRangeDateFieldState.js.map +1 -1
  7. package/dist/cjs/components/RelativeDateField/RelativeDateField.js +14 -4
  8. package/dist/cjs/components/RelativeDateField/RelativeDateField.js.map +1 -1
  9. package/dist/cjs/components/RelativeDatePicker/hooks/useRelativeDatePickerProps.js +1 -0
  10. package/dist/cjs/components/RelativeDatePicker/hooks/useRelativeDatePickerProps.js.map +1 -1
  11. package/dist/cjs/components/RelativeRangeDatePicker/RelativeRangeDatePicker.js +18 -31
  12. package/dist/cjs/components/RelativeRangeDatePicker/RelativeRangeDatePicker.js.map +1 -1
  13. package/dist/cjs/components/RelativeRangeDatePicker/components/Control/Control.d.ts +2 -1
  14. package/dist/cjs/components/RelativeRangeDatePicker/components/Control/Control.js +3 -2
  15. package/dist/cjs/components/RelativeRangeDatePicker/components/Control/Control.js.map +1 -1
  16. package/dist/cjs/components/RelativeRangeDatePicker/components/PickerDialog/PickerDialog.d.ts +5 -1
  17. package/dist/cjs/components/RelativeRangeDatePicker/components/PickerDialog/PickerDialog.js +5 -2
  18. package/dist/cjs/components/RelativeRangeDatePicker/components/PickerDialog/PickerDialog.js.map +1 -1
  19. package/dist/cjs/components/RelativeRangeDatePicker/components/PickerDialog/PickerDoc.css +13 -0
  20. package/dist/cjs/components/RelativeRangeDatePicker/components/PickerDialog/PickerDoc.css.map +1 -0
  21. package/dist/cjs/components/RelativeRangeDatePicker/components/PickerDialog/PickerDoc.d.ts +11 -0
  22. package/dist/cjs/components/RelativeRangeDatePicker/components/PickerDialog/PickerDoc.js +100 -0
  23. package/dist/cjs/components/RelativeRangeDatePicker/components/PickerDialog/PickerDoc.js.map +1 -0
  24. package/dist/cjs/components/RelativeRangeDatePicker/components/PickerDialog/PickerForm.css +6 -0
  25. package/dist/cjs/components/RelativeRangeDatePicker/components/PickerDialog/PickerForm.css.map +1 -1
  26. package/dist/cjs/components/RelativeRangeDatePicker/components/PickerDialog/PickerForm.d.ts +3 -1
  27. package/dist/cjs/components/RelativeRangeDatePicker/components/PickerDialog/PickerForm.js +8 -3
  28. package/dist/cjs/components/RelativeRangeDatePicker/components/PickerDialog/PickerForm.js.map +1 -1
  29. package/dist/cjs/components/RelativeRangeDatePicker/components/PickerDialog/i18n/en.json +2 -1
  30. package/dist/cjs/components/RelativeRangeDatePicker/components/PickerDialog/i18n/index.d.ts +2 -2
  31. package/dist/cjs/components/RelativeRangeDatePicker/components/PickerDialog/i18n/ru.json +2 -1
  32. package/dist/cjs/components/RelativeRangeDatePicker/components/Presets/Presets.css +0 -3
  33. package/dist/cjs/components/RelativeRangeDatePicker/components/Presets/Presets.css.map +1 -1
  34. package/dist/cjs/components/RelativeRangeDatePicker/components/Presets/Presets.d.ts +1 -3
  35. package/dist/cjs/components/RelativeRangeDatePicker/components/Presets/Presets.js +2 -3
  36. package/dist/cjs/components/RelativeRangeDatePicker/components/Presets/Presets.js.map +1 -1
  37. package/dist/cjs/components/RelativeRangeDatePicker/index.d.ts +1 -0
  38. package/dist/cjs/components/RelativeRangeDatePicker/index.js +3 -1
  39. package/dist/cjs/components/RelativeRangeDatePicker/index.js.map +1 -1
  40. package/dist/cjs/components/RelativeRangeDatePicker/types.d.ts +4 -1
  41. package/dist/cjs/components/RelativeRangeDatePicker/types.js.map +1 -1
  42. package/dist/esm/components/DateField/utils.js +11 -1
  43. package/dist/esm/components/DateField/utils.js.map +1 -1
  44. package/dist/esm/components/DatePicker/hooks/useDatePickerProps.js +1 -0
  45. package/dist/esm/components/DatePicker/hooks/useDatePickerProps.js.map +1 -1
  46. package/dist/esm/components/RangeDateField/hooks/useRangeDateFieldState.js +2 -3
  47. package/dist/esm/components/RangeDateField/hooks/useRangeDateFieldState.js.map +1 -1
  48. package/dist/esm/components/RelativeDateField/RelativeDateField.js +14 -4
  49. package/dist/esm/components/RelativeDateField/RelativeDateField.js.map +1 -1
  50. package/dist/esm/components/RelativeDatePicker/hooks/useRelativeDatePickerProps.js +1 -0
  51. package/dist/esm/components/RelativeDatePicker/hooks/useRelativeDatePickerProps.js.map +1 -1
  52. package/dist/esm/components/RelativeRangeDatePicker/RelativeRangeDatePicker.js +18 -31
  53. package/dist/esm/components/RelativeRangeDatePicker/RelativeRangeDatePicker.js.map +1 -1
  54. package/dist/esm/components/RelativeRangeDatePicker/components/Control/Control.d.ts +2 -1
  55. package/dist/esm/components/RelativeRangeDatePicker/components/Control/Control.js +3 -2
  56. package/dist/esm/components/RelativeRangeDatePicker/components/Control/Control.js.map +1 -1
  57. package/dist/esm/components/RelativeRangeDatePicker/components/PickerDialog/PickerDialog.d.ts +5 -1
  58. package/dist/esm/components/RelativeRangeDatePicker/components/PickerDialog/PickerDialog.js +5 -2
  59. package/dist/esm/components/RelativeRangeDatePicker/components/PickerDialog/PickerDialog.js.map +1 -1
  60. package/dist/esm/components/RelativeRangeDatePicker/components/PickerDialog/PickerDoc.css +13 -0
  61. package/dist/esm/components/RelativeRangeDatePicker/components/PickerDialog/PickerDoc.css.map +1 -0
  62. package/dist/esm/components/RelativeRangeDatePicker/components/PickerDialog/PickerDoc.d.ts +11 -0
  63. package/dist/esm/components/RelativeRangeDatePicker/components/PickerDialog/PickerDoc.js +97 -0
  64. package/dist/esm/components/RelativeRangeDatePicker/components/PickerDialog/PickerDoc.js.map +1 -0
  65. package/dist/esm/components/RelativeRangeDatePicker/components/PickerDialog/PickerForm.css +6 -0
  66. package/dist/esm/components/RelativeRangeDatePicker/components/PickerDialog/PickerForm.css.map +1 -1
  67. package/dist/esm/components/RelativeRangeDatePicker/components/PickerDialog/PickerForm.d.ts +3 -1
  68. package/dist/esm/components/RelativeRangeDatePicker/components/PickerDialog/PickerForm.js +9 -4
  69. package/dist/esm/components/RelativeRangeDatePicker/components/PickerDialog/PickerForm.js.map +1 -1
  70. package/dist/esm/components/RelativeRangeDatePicker/components/PickerDialog/i18n/en.json +2 -1
  71. package/dist/esm/components/RelativeRangeDatePicker/components/PickerDialog/i18n/index.d.ts +2 -2
  72. package/dist/esm/components/RelativeRangeDatePicker/components/PickerDialog/i18n/ru.json +2 -1
  73. package/dist/esm/components/RelativeRangeDatePicker/components/Presets/Presets.css +0 -3
  74. package/dist/esm/components/RelativeRangeDatePicker/components/Presets/Presets.css.map +1 -1
  75. package/dist/esm/components/RelativeRangeDatePicker/components/Presets/Presets.d.ts +1 -3
  76. package/dist/esm/components/RelativeRangeDatePicker/components/Presets/Presets.js +2 -3
  77. package/dist/esm/components/RelativeRangeDatePicker/components/Presets/Presets.js.map +1 -1
  78. package/dist/esm/components/RelativeRangeDatePicker/index.d.ts +1 -0
  79. package/dist/esm/components/RelativeRangeDatePicker/index.js +1 -0
  80. package/dist/esm/components/RelativeRangeDatePicker/index.js.map +1 -1
  81. package/dist/esm/components/RelativeRangeDatePicker/types.d.ts +4 -1
  82. package/dist/esm/components/RelativeRangeDatePicker/types.js.map +1 -1
  83. package/package.json +1 -1
  84. package/dist/cjs/components/RelativeRangeDatePicker/components/Presets/PresetsDoc.css +0 -16
  85. package/dist/cjs/components/RelativeRangeDatePicker/components/Presets/PresetsDoc.css.map +0 -1
  86. package/dist/cjs/components/RelativeRangeDatePicker/components/Presets/PresetsDoc.d.ts +0 -9
  87. package/dist/cjs/components/RelativeRangeDatePicker/components/Presets/PresetsDoc.js +0 -94
  88. package/dist/cjs/components/RelativeRangeDatePicker/components/Presets/PresetsDoc.js.map +0 -1
  89. package/dist/esm/components/RelativeRangeDatePicker/components/Presets/PresetsDoc.css +0 -16
  90. package/dist/esm/components/RelativeRangeDatePicker/components/Presets/PresetsDoc.css.map +0 -1
  91. package/dist/esm/components/RelativeRangeDatePicker/components/Presets/PresetsDoc.d.ts +0 -9
  92. package/dist/esm/components/RelativeRangeDatePicker/components/Presets/PresetsDoc.js +0 -90
  93. package/dist/esm/components/RelativeRangeDatePicker/components/Presets/PresetsDoc.js.map +0 -1
@@ -17,33 +17,27 @@ function RelativeRangeDatePicker(props) {
17
17
  const state = (0, useRelativeRangeDatePickerState_1.useRelativeRangeDatePickerState)(props);
18
18
  const isMobile = (0, uikit_1.useMobile)();
19
19
  const [anchor, setAnchor] = react_1.default.useState(null);
20
- const inputRef = react_1.default.useRef(null);
21
- const [isActive, setIsActive] = react_1.default.useState(false);
20
+ const dialogClosing = react_1.default.useRef(false);
22
21
  const [open, setOpen] = (0, uikit_1.useControlledState)(undefined, false, props.onOpenChange);
23
22
  const { focusWithinProps } = (0, uikit_1.useFocusWithin)({
24
23
  isDisabled: props.disabled,
25
- onFocusWithin: (e) => {
24
+ onFocusWithin: props.onFocus,
25
+ onBlurWithin: props.onBlur,
26
+ onFocusWithinChange: (isFocusWithin) => {
26
27
  var _a;
27
- if (!isActive) {
28
- (_a = props.onFocus) === null || _a === void 0 ? void 0 : _a.call(props, e);
29
- }
30
- },
31
- onBlurWithin: (e) => {
32
- var _a;
33
- if (!open) {
34
- setIsActive(false);
35
- (_a = props.onBlur) === null || _a === void 0 ? void 0 : _a.call(props, e);
28
+ if (isFocusWithin &&
29
+ !dialogClosing.current &&
30
+ !props.renderControl &&
31
+ ((_a = document.activeElement) === null || _a === void 0 ? void 0 : _a.tagName) !== 'BUTTON') {
32
+ setOpen(true);
36
33
  }
37
34
  },
38
35
  });
39
- return ((0, jsx_runtime_1.jsxs)("div", Object.assign({ ref: setAnchor }, focusWithinProps, { className: b(null, props.className), style: props.style, children: [(0, jsx_runtime_1.jsx)(Control_1.Control, { props: props, state: state, open: open, isMobile: isMobile, ref: inputRef, onClick: () => {
36
+ return ((0, jsx_runtime_1.jsxs)("div", Object.assign({ ref: setAnchor }, focusWithinProps, { className: b(null, props.className), style: props.style, children: [(0, jsx_runtime_1.jsx)(Control_1.Control, { props: props, state: state, open: open, setOpen: setOpen, isMobile: isMobile, onClick: () => {
40
37
  if (props.disabled) {
41
38
  return;
42
39
  }
43
- if (!open) {
44
- setIsActive(true);
45
- setOpen(true);
46
- }
40
+ setOpen(true);
47
41
  }, onKeyDown: (e) => {
48
42
  if (props.disabled) {
49
43
  return;
@@ -53,28 +47,21 @@ function RelativeRangeDatePicker(props) {
53
47
  setOpen(true);
54
48
  }
55
49
  }, onClickCalendar: () => {
56
- setIsActive(true);
57
50
  setOpen(!open);
58
- }, onFocus: () => {
59
- if (!isActive) {
60
- setIsActive(true);
61
- setOpen(true);
62
- }
63
51
  }, onUpdate: (v) => {
64
52
  if (!props.readOnly && !v) {
65
53
  state.setValue(null, 'default');
66
54
  }
67
55
  } }), (0, jsx_runtime_1.jsx)(HiddenInput_1.HiddenInput, { name: props.name, form: props.form, value: state.value, toStringValue: (v) => { var _a, _b; return (_b = (_a = v === null || v === void 0 ? void 0 : v.start) === null || _a === void 0 ? void 0 : _a.type) !== null && _b !== void 0 ? _b : ''; }, disabled: props.disabled }), (0, jsx_runtime_1.jsx)(HiddenInput_1.HiddenInput, { name: props.name, form: props.form, value: state.value, toStringValue: (v) => { var _a; return getNativeValue((_a = v === null || v === void 0 ? void 0 : v.start) !== null && _a !== void 0 ? _a : null); }, disabled: props.disabled }), (0, jsx_runtime_1.jsx)(HiddenInput_1.HiddenInput, { name: props.name, form: props.form, value: state.value, toStringValue: (v) => { var _a, _b; return (_b = (_a = v === null || v === void 0 ? void 0 : v.end) === null || _a === void 0 ? void 0 : _a.type) !== null && _b !== void 0 ? _b : ''; }, disabled: props.disabled }), (0, jsx_runtime_1.jsx)(HiddenInput_1.HiddenInput, { name: props.name, form: props.form, value: state.value, toStringValue: (v) => { var _a; return getNativeValue((_a = v === null || v === void 0 ? void 0 : v.end) !== null && _a !== void 0 ? _a : null); }, disabled: props.disabled }), (0, jsx_runtime_1.jsx)(HiddenInput_1.HiddenInput, { name: props.name, form: props.form, onReset: (v) => {
68
56
  state.setValue(v.value, v.timeZone);
69
- }, value: { value: state.value, timeZone: state.timeZone }, toStringValue: (v) => v.timeZone, disabled: props.disabled }), (0, jsx_runtime_1.jsx)(PickerDialog_1.PickerDialog, { value: state.value, onUpdate: state.setValue, timeZone: state.timeZone, open: open, onClose: (reason) => {
57
+ }, value: { value: state.value, timeZone: state.timeZone }, toStringValue: (v) => v.timeZone, disabled: props.disabled }), (0, jsx_runtime_1.jsx)(PickerDialog_1.PickerDialog, { value: state.value, onUpdate: state.setValue, timeZone: state.timeZone, open: open, onClose: () => {
70
58
  setOpen(false);
71
- if (reason === 'escape-key') {
72
- setTimeout(() => {
73
- var _a;
74
- (_a = inputRef.current) === null || _a === void 0 ? void 0 : _a.focus({ preventScroll: true });
75
- });
76
- }
77
- }, anchor: anchor, modal: true, popupClassName: props.popupClassName, popupStyle: props.popupStyle, popupPlacement: props.popupPlacement, popupOffset: props.popupOffset, isMobile: isMobile, size: props.size, format: props.format, readOnly: props.readOnly, minValue: props.minValue, maxValue: props.maxValue, allowNullableValues: props.allowNullableValues, isDateUnavailable: props.isDateUnavailable, placeholderValue: props.placeholderValue, withPresets: props.withPresets, presetTabs: props.presetTabs, docs: props.docs, withApplyButton: props.withApplyButton, withZonesList: props.withZonesList })] })));
59
+ dialogClosing.current = true;
60
+ }, onRemove: () => {
61
+ setTimeout(() => {
62
+ dialogClosing.current = false;
63
+ });
64
+ }, anchor: anchor, modal: true, returnFocus: true, popupClassName: props.popupClassName, popupStyle: props.popupStyle, popupPlacement: props.popupPlacement, popupOffset: props.popupOffset, isMobile: isMobile, size: props.size, format: props.format, readOnly: props.readOnly, minValue: props.minValue, maxValue: props.maxValue, allowNullableValues: props.allowNullableValues, isDateUnavailable: props.isDateUnavailable, placeholderValue: props.placeholderValue, withPresets: props.withPresets, presetTabs: props.presetTabs, docs: props.docs, withApplyButton: props.withApplyButton, withZonesList: props.withZonesList, withHeader: props.withHeader })] })));
78
65
  }
79
66
  function getNativeValue(value) {
80
67
  if (!value) {
@@ -1 +1 @@
1
- {"version":3,"file":"RelativeRangeDatePicker.js","sourceRoot":"../../../../src","sources":["components/RelativeRangeDatePicker/RelativeRangeDatePicker.tsx"],"names":[],"mappings":"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","sourcesContent":["'use client';\n\nimport React from 'react';\n\nimport {useControlledState, useFocusWithin, useMobile} from '@gravity-ui/uikit';\n\nimport {block} from '../../utils/cn';\nimport {HiddenInput} from '../HiddenInput/HiddenInput';\nimport type {Value} from '../RelativeDatePicker';\n\nimport {Control} from './components/Control/Control';\nimport {PickerDialog} from './components/PickerDialog/PickerDialog';\nimport {useRelativeRangeDatePickerState} from './hooks/useRelativeRangeDatePickerState';\nimport type {RelativeRangeDatePickerProps} from './types';\n\nimport './RelativeRangeDatePicker.scss';\n\nconst b = block('relative-range-date-picker');\n\nexport function RelativeRangeDatePicker(props: RelativeRangeDatePickerProps) {\n const state = useRelativeRangeDatePickerState(props);\n\n const isMobile = useMobile();\n\n const [anchor, setAnchor] = React.useState<HTMLDivElement | null>(null);\n const inputRef = React.useRef<HTMLInputElement>(null);\n\n const [isActive, setIsActive] = React.useState(false);\n const [open, setOpen] = useControlledState<boolean>(undefined, false, props.onOpenChange);\n\n const {focusWithinProps} = useFocusWithin({\n isDisabled: props.disabled,\n onFocusWithin: (e) => {\n if (!isActive) {\n props.onFocus?.(e);\n }\n },\n onBlurWithin: (e) => {\n if (!open) {\n setIsActive(false);\n props.onBlur?.(e);\n }\n },\n });\n\n return (\n <div\n ref={setAnchor}\n {...focusWithinProps}\n className={b(null, props.className)}\n style={props.style}\n >\n <Control\n props={props}\n state={state}\n open={open}\n isMobile={isMobile}\n ref={inputRef}\n onClick={() => {\n if (props.disabled) {\n return;\n }\n if (!open) {\n setIsActive(true);\n setOpen(true);\n }\n }}\n onKeyDown={(e) => {\n if (props.disabled) {\n return;\n }\n if (e.altKey && (e.key === 'ArrowDown' || e.key === 'ArrowUp')) {\n e.preventDefault();\n setOpen(true);\n }\n }}\n onClickCalendar={() => {\n setIsActive(true);\n setOpen(!open);\n }}\n onFocus={() => {\n if (!isActive) {\n setIsActive(true);\n setOpen(true);\n }\n }}\n onUpdate={(v: string) => {\n if (!props.readOnly && !v) {\n state.setValue(null, 'default');\n }\n }}\n />\n <HiddenInput\n name={props.name}\n form={props.form}\n value={state.value}\n toStringValue={(v) => v?.start?.type ?? ''}\n disabled={props.disabled}\n />\n <HiddenInput\n name={props.name}\n form={props.form}\n value={state.value}\n toStringValue={(v) => getNativeValue(v?.start ?? null)}\n disabled={props.disabled}\n />\n <HiddenInput\n name={props.name}\n form={props.form}\n value={state.value}\n toStringValue={(v) => v?.end?.type ?? ''}\n disabled={props.disabled}\n />\n <HiddenInput\n name={props.name}\n form={props.form}\n value={state.value}\n toStringValue={(v) => getNativeValue(v?.end ?? null)}\n disabled={props.disabled}\n />\n <HiddenInput\n name={props.name}\n form={props.form}\n onReset={(v) => {\n state.setValue(v.value, v.timeZone);\n }}\n value={{value: state.value, timeZone: state.timeZone}}\n toStringValue={(v) => v.timeZone}\n disabled={props.disabled}\n />\n\n <PickerDialog\n value={state.value}\n onUpdate={state.setValue}\n timeZone={state.timeZone}\n open={open}\n onClose={(reason) => {\n setOpen(false);\n if (reason === 'escape-key') {\n setTimeout(() => {\n inputRef.current?.focus({preventScroll: true});\n });\n }\n }}\n anchor={anchor}\n modal\n popupClassName={props.popupClassName}\n popupStyle={props.popupStyle}\n popupPlacement={props.popupPlacement}\n popupOffset={props.popupOffset}\n isMobile={isMobile}\n size={props.size}\n format={props.format}\n readOnly={props.readOnly}\n minValue={props.minValue}\n maxValue={props.maxValue}\n allowNullableValues={props.allowNullableValues}\n isDateUnavailable={props.isDateUnavailable}\n placeholderValue={props.placeholderValue}\n withPresets={props.withPresets}\n presetTabs={props.presetTabs}\n docs={props.docs}\n withApplyButton={props.withApplyButton}\n withZonesList={props.withZonesList}\n />\n </div>\n );\n}\n\nfunction getNativeValue(value: Value | null) {\n if (!value) {\n return '';\n }\n if (value.type === 'relative') {\n return value.value;\n }\n return value.value.toISOString();\n}\n"]}
1
+ {"version":3,"file":"RelativeRangeDatePicker.js","sourceRoot":"../../../../src","sources":["components/RelativeRangeDatePicker/RelativeRangeDatePicker.tsx"],"names":[],"mappings":"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","sourcesContent":["'use client';\n\nimport React from 'react';\n\nimport {useControlledState, useFocusWithin, useMobile} from '@gravity-ui/uikit';\n\nimport {block} from '../../utils/cn';\nimport {HiddenInput} from '../HiddenInput/HiddenInput';\nimport type {Value} from '../RelativeDatePicker';\n\nimport {Control} from './components/Control/Control';\nimport {PickerDialog} from './components/PickerDialog/PickerDialog';\nimport {useRelativeRangeDatePickerState} from './hooks/useRelativeRangeDatePickerState';\nimport type {RelativeRangeDatePickerProps} from './types';\n\nimport './RelativeRangeDatePicker.scss';\n\nconst b = block('relative-range-date-picker');\n\nexport function RelativeRangeDatePicker(props: RelativeRangeDatePickerProps) {\n const state = useRelativeRangeDatePickerState(props);\n\n const isMobile = useMobile();\n\n const [anchor, setAnchor] = React.useState<HTMLDivElement | null>(null);\n const dialogClosing = React.useRef(false);\n\n const [open, setOpen] = useControlledState<boolean>(undefined, false, props.onOpenChange);\n\n const {focusWithinProps} = useFocusWithin({\n isDisabled: props.disabled,\n onFocusWithin: props.onFocus,\n onBlurWithin: props.onBlur,\n onFocusWithinChange: (isFocusWithin) => {\n if (\n isFocusWithin &&\n !dialogClosing.current &&\n !props.renderControl &&\n document.activeElement?.tagName !== 'BUTTON'\n ) {\n setOpen(true);\n }\n },\n });\n\n return (\n <div\n ref={setAnchor}\n {...focusWithinProps}\n className={b(null, props.className)}\n style={props.style}\n >\n <Control\n props={props}\n state={state}\n open={open}\n setOpen={setOpen}\n isMobile={isMobile}\n onClick={() => {\n if (props.disabled) {\n return;\n }\n setOpen(true);\n }}\n onKeyDown={(e) => {\n if (props.disabled) {\n return;\n }\n if (e.altKey && (e.key === 'ArrowDown' || e.key === 'ArrowUp')) {\n e.preventDefault();\n setOpen(true);\n }\n }}\n onClickCalendar={() => {\n setOpen(!open);\n }}\n onUpdate={(v: string) => {\n if (!props.readOnly && !v) {\n state.setValue(null, 'default');\n }\n }}\n />\n <HiddenInput\n name={props.name}\n form={props.form}\n value={state.value}\n toStringValue={(v) => v?.start?.type ?? ''}\n disabled={props.disabled}\n />\n <HiddenInput\n name={props.name}\n form={props.form}\n value={state.value}\n toStringValue={(v) => getNativeValue(v?.start ?? null)}\n disabled={props.disabled}\n />\n <HiddenInput\n name={props.name}\n form={props.form}\n value={state.value}\n toStringValue={(v) => v?.end?.type ?? ''}\n disabled={props.disabled}\n />\n <HiddenInput\n name={props.name}\n form={props.form}\n value={state.value}\n toStringValue={(v) => getNativeValue(v?.end ?? null)}\n disabled={props.disabled}\n />\n <HiddenInput\n name={props.name}\n form={props.form}\n onReset={(v) => {\n state.setValue(v.value, v.timeZone);\n }}\n value={{value: state.value, timeZone: state.timeZone}}\n toStringValue={(v) => v.timeZone}\n disabled={props.disabled}\n />\n\n <PickerDialog\n value={state.value}\n onUpdate={state.setValue}\n timeZone={state.timeZone}\n open={open}\n onClose={() => {\n setOpen(false);\n dialogClosing.current = true;\n }}\n onRemove={() => {\n setTimeout(() => {\n dialogClosing.current = false;\n });\n }}\n anchor={anchor}\n modal\n returnFocus\n popupClassName={props.popupClassName}\n popupStyle={props.popupStyle}\n popupPlacement={props.popupPlacement}\n popupOffset={props.popupOffset}\n isMobile={isMobile}\n size={props.size}\n format={props.format}\n readOnly={props.readOnly}\n minValue={props.minValue}\n maxValue={props.maxValue}\n allowNullableValues={props.allowNullableValues}\n isDateUnavailable={props.isDateUnavailable}\n placeholderValue={props.placeholderValue}\n withPresets={props.withPresets}\n presetTabs={props.presetTabs}\n docs={props.docs}\n withApplyButton={props.withApplyButton}\n withZonesList={props.withZonesList}\n withHeader={props.withHeader}\n />\n </div>\n );\n}\n\nfunction getNativeValue(value: Value | null) {\n if (!value) {\n return '';\n }\n if (value.type === 'relative') {\n return value.value;\n }\n return value.value.toISOString();\n}\n"]}
@@ -6,10 +6,11 @@ export type ControlProps = {
6
6
  props: RelativeRangeDatePickerProps;
7
7
  state: RelativeRangeDatePickerState;
8
8
  open: boolean;
9
+ setOpen: (open: boolean) => void;
9
10
  isMobile?: boolean;
10
11
  onClick: (e: React.MouseEvent<HTMLElement>) => void;
11
12
  onKeyDown: (e: React.KeyboardEvent<HTMLElement>) => void;
12
- onFocus: (e: React.FocusEvent<HTMLElement>) => void;
13
+ onFocus?: (e: React.FocusEvent<HTMLElement>) => void;
13
14
  onClickCalendar: (e: React.MouseEvent<HTMLElement>) => void;
14
15
  onUpdate: (value: string) => void;
15
16
  };
@@ -12,7 +12,7 @@ const utils_1 = require("../../utils.js");
12
12
  const i18n_1 = require("./i18n/index.js");
13
13
  require("./Control.css");
14
14
  const b = (0, cn_1.block)('relative-range-date-picker-control');
15
- exports.Control = react_1.default.forwardRef(({ props, state, open, isMobile, onClick, onKeyDown, onFocus, onClickCalendar, onUpdate }, ref) => {
15
+ exports.Control = react_1.default.forwardRef(({ props, state, open, setOpen, isMobile, onClick, onKeyDown, onFocus, onClickCalendar, onUpdate, }, ref) => {
16
16
  var _a;
17
17
  const { alwaysShowAsAbsolute, presetTabs, getRangeTitle } = props;
18
18
  const format = props.format || 'L';
@@ -48,8 +48,9 @@ exports.Control = react_1.default.forwardRef(({ props, state, open, isMobile, on
48
48
  validationState,
49
49
  errorMessage,
50
50
  open,
51
+ setOpen,
51
52
  triggerProps,
52
- })) : ((0, jsx_runtime_1.jsxs)(react_1.default.Fragment, { children: [(0, jsx_runtime_1.jsx)(uikit_1.TextInput, { id: props.id, autoFocus: props.autoFocus, controlRef: ref, value: text, placeholder: props.placeholder, onUpdate: onUpdate, controlProps: Object.assign(Object.assign({ className: b('input', { mobile: isMobile }) }, triggerProps), { disabled: isMobile, onClick }), onKeyDown: onKeyDown, onFocus: onFocus, validationState: validationState, errorMessage: errorMessage, errorPlacement: props.errorPlacement, pin: props.pin, size: props.size, label: props.label, hasClear: props.hasClear, disabled: props.disabled, endContent: (0, jsx_runtime_1.jsx)(uikit_1.Button, { view: "flat-secondary", size: (0, getButtonSizeForInput_1.getButtonSizeForInput)(props.size), disabled: props.disabled, "aria-haspopup": "dialog", "aria-expanded": open, "aria-label": (0, i18n_1.i18n)('Range date picker'), onClick: onClickCalendar, children: (0, jsx_runtime_1.jsx)(uikit_1.Icon, { data: icons_1.Calendar }) }) }), isMobile ? ((0, jsx_runtime_1.jsx)("button", { className: b('mobile-trigger', {
53
+ })) : ((0, jsx_runtime_1.jsxs)(react_1.default.Fragment, { children: [(0, jsx_runtime_1.jsx)(uikit_1.TextInput, { id: props.id, autoFocus: props.autoFocus, controlRef: ref, value: text, placeholder: props.placeholder, onUpdate: onUpdate, controlProps: Object.assign(Object.assign({ className: b('input', { mobile: isMobile }) }, triggerProps), { disabled: isMobile, onClick }), onKeyDown: onKeyDown, onFocus: onFocus, validationState: validationState, errorMessage: errorMessage, errorPlacement: props.errorPlacement, pin: props.pin, size: props.size, label: props.label, hasClear: props.hasClear, disabled: props.disabled, endContent: (0, jsx_runtime_1.jsx)(uikit_1.Button, { view: "flat-secondary", size: (0, getButtonSizeForInput_1.getButtonSizeForInput)(props.size), disabled: props.disabled, "aria-haspopup": "dialog", "aria-expanded": open, "aria-label": (0, i18n_1.i18n)('Range date picker'), onClick: onClickCalendar, tabIndex: -1, children: (0, jsx_runtime_1.jsx)(uikit_1.Icon, { data: icons_1.Calendar }) }) }), isMobile ? ((0, jsx_runtime_1.jsx)("button", { className: b('mobile-trigger', {
53
54
  'has-clear': Boolean(props.hasClear && state.value),
54
55
  'has-errors': state.isInvalid && props.errorPlacement === 'inside',
55
56
  size: props.size,
@@ -1 +1 @@
1
- {"version":3,"file":"Control.js","sourceRoot":"../../../../../../src","sources":["components/RelativeRangeDatePicker/components/Control/Control.tsx"],"names":[],"mappings":"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","sourcesContent":["import React from 'react';\n\nimport {Calendar as CalendarIcon} from '@gravity-ui/icons';\nimport {Button, Icon, TextInput} from '@gravity-ui/uikit';\n\nimport {block} from '../../../../utils/cn';\nimport {getButtonSizeForInput} from '../../../utils/getButtonSizeForInput';\nimport type {RelativeRangeDatePickerState} from '../../hooks/useRelativeRangeDatePickerState';\nimport type {RelativeRangeDatePickerProps, RelativeRangeDatePickerTriggerProps} from '../../types';\nimport {getDefaultTitle} from '../../utils';\n\nimport {i18n} from './i18n';\n\nimport './Control.scss';\n\nexport type ControlProps = {\n props: RelativeRangeDatePickerProps;\n state: RelativeRangeDatePickerState;\n open: boolean;\n isMobile?: boolean;\n onClick: (e: React.MouseEvent<HTMLElement>) => void;\n onKeyDown: (e: React.KeyboardEvent<HTMLElement>) => void;\n onFocus: (e: React.FocusEvent<HTMLElement>) => void;\n onClickCalendar: (e: React.MouseEvent<HTMLElement>) => void;\n onUpdate: (value: string) => void;\n};\n\nconst b = block('relative-range-date-picker-control');\n\nexport const Control = React.forwardRef<HTMLInputElement, ControlProps>(\n (\n {props, state, open, isMobile, onClick, onKeyDown, onFocus, onClickCalendar, onUpdate},\n ref,\n ) => {\n const {alwaysShowAsAbsolute, presetTabs, getRangeTitle} = props;\n const format = props.format || 'L';\n\n const text = React.useMemo(\n () =>\n typeof getRangeTitle === 'function'\n ? getRangeTitle(state.value, state.timeZone)\n : getDefaultTitle({\n value: state.value,\n timeZone: state.timeZone,\n alwaysShowAsAbsolute,\n format,\n presets: presetTabs?.flatMap(({presets}) => presets),\n }),\n [alwaysShowAsAbsolute, format, getRangeTitle, presetTabs, state.timeZone, state.value],\n );\n\n const validationState = props.validationState || (state.isInvalid ? 'invalid' : undefined);\n const errorMessage = props.errorMessage ?? state.errors.join('\\n');\n\n const triggerProps: RelativeRangeDatePickerTriggerProps = {\n id: props.id,\n role: 'combobox',\n 'aria-haspopup': 'dialog',\n 'aria-expanded': open,\n 'aria-label': props['aria-label'],\n 'aria-labelledby': props['aria-labelledby'],\n 'aria-describedby': props['aria-describedby'],\n 'aria-details': props['aria-details'],\n disabled: props.disabled,\n readOnly: props.readOnly,\n onClick: onClickCalendar,\n onKeyDown,\n };\n\n return props.renderControl ? (\n props.renderControl({\n ref,\n value: state.value,\n title: text,\n validationState,\n errorMessage,\n open,\n triggerProps,\n })\n ) : (\n <React.Fragment>\n <TextInput\n id={props.id}\n autoFocus={props.autoFocus}\n controlRef={ref}\n value={text}\n placeholder={props.placeholder}\n onUpdate={onUpdate}\n controlProps={{\n className: b('input', {mobile: isMobile}),\n ...triggerProps,\n disabled: isMobile,\n onClick,\n }}\n onKeyDown={onKeyDown}\n onFocus={onFocus}\n validationState={validationState}\n errorMessage={errorMessage}\n errorPlacement={props.errorPlacement}\n pin={props.pin}\n size={props.size}\n label={props.label}\n hasClear={props.hasClear}\n disabled={props.disabled}\n endContent={\n <Button\n view=\"flat-secondary\"\n size={getButtonSizeForInput(props.size)}\n disabled={props.disabled}\n aria-haspopup=\"dialog\"\n aria-expanded={open}\n aria-label={i18n('Range date picker')}\n onClick={onClickCalendar}\n >\n <Icon data={CalendarIcon} />\n </Button>\n }\n />\n {isMobile ? (\n <button\n className={b('mobile-trigger', {\n 'has-clear': Boolean(props.hasClear && state.value),\n 'has-errors': state.isInvalid && props.errorPlacement === 'inside',\n size: props.size,\n })}\n onClick={onClick}\n />\n ) : null}\n </React.Fragment>\n );\n },\n);\n\nControl.displayName = 'Control';\n"]}
1
+ {"version":3,"file":"Control.js","sourceRoot":"../../../../../../src","sources":["components/RelativeRangeDatePicker/components/Control/Control.tsx"],"names":[],"mappings":";;;;;AAAA,0DAA0B;AAE1B,6CAA2D;AAC3D,6CAA0D;AAE1D,gDAA2C;AAC3C,mFAA2E;AAG3E,0CAA4C;AAE5C,0CAA4B;AAE5B,yBAAwB;AAexB,MAAM,CAAC,GAAG,IAAA,UAAK,EAAC,oCAAoC,CAAC,CAAC;AAEzC,QAAA,OAAO,GAAG,eAAK,CAAC,UAAU,CACnC,CACI,EACI,KAAK,EACL,KAAK,EACL,IAAI,EACJ,OAAO,EACP,QAAQ,EACR,OAAO,EACP,SAAS,EACT,OAAO,EACP,eAAe,EACf,QAAQ,GACX,EACD,GAAG,EACL,EAAE;;IACA,MAAM,EAAC,oBAAoB,EAAE,UAAU,EAAE,aAAa,EAAC,GAAG,KAAK,CAAC;IAChE,MAAM,MAAM,GAAG,KAAK,CAAC,MAAM,IAAI,GAAG,CAAC;IAEnC,MAAM,IAAI,GAAG,eAAK,CAAC,OAAO,CACtB,GAAG,EAAE,CACD,OAAO,aAAa,KAAK,UAAU;QAC/B,CAAC,CAAC,aAAa,CAAC,KAAK,CAAC,KAAK,EAAE,KAAK,CAAC,QAAQ,CAAC;QAC5C,CAAC,CAAC,IAAA,uBAAe,EAAC;YACZ,KAAK,EAAE,KAAK,CAAC,KAAK;YAClB,QAAQ,EAAE,KAAK,CAAC,QAAQ;YACxB,oBAAoB;YACpB,MAAM;YACN,OAAO,EAAE,UAAU,aAAV,UAAU,uBAAV,UAAU,CAAE,OAAO,CAAC,CAAC,EAAC,OAAO,EAAC,EAAE,EAAE,CAAC,OAAO,CAAC;SACvD,CAAC,EACZ,CAAC,oBAAoB,EAAE,MAAM,EAAE,aAAa,EAAE,UAAU,EAAE,KAAK,CAAC,QAAQ,EAAE,KAAK,CAAC,KAAK,CAAC,CACzF,CAAC;IAEF,MAAM,eAAe,GAAG,KAAK,CAAC,eAAe,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;IAC3F,MAAM,YAAY,GAAG,MAAA,KAAK,CAAC,YAAY,mCAAI,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAEnE,MAAM,YAAY,GAAwC;QACtD,EAAE,EAAE,KAAK,CAAC,EAAE;QACZ,IAAI,EAAE,UAAU;QAChB,eAAe,EAAE,QAAQ;QACzB,eAAe,EAAE,IAAI;QACrB,YAAY,EAAE,KAAK,CAAC,YAAY,CAAC;QACjC,iBAAiB,EAAE,KAAK,CAAC,iBAAiB,CAAC;QAC3C,kBAAkB,EAAE,KAAK,CAAC,kBAAkB,CAAC;QAC7C,cAAc,EAAE,KAAK,CAAC,cAAc,CAAC;QACrC,QAAQ,EAAE,KAAK,CAAC,QAAQ;QACxB,QAAQ,EAAE,KAAK,CAAC,QAAQ;QACxB,OAAO,EAAE,eAAe;QACxB,SAAS;KACZ,CAAC;IAEF,OAAO,KAAK,CAAC,aAAa,CAAC,CAAC,CAAC,CACzB,KAAK,CAAC,aAAa,CAAC;QAChB,GAAG;QACH,KAAK,EAAE,KAAK,CAAC,KAAK;QAClB,KAAK,EAAE,IAAI;QACX,eAAe;QACf,YAAY;QACZ,IAAI;QACJ,OAAO;QACP,YAAY;KACf,CAAC,CACL,CAAC,CAAC,CAAC,CACA,wBAAC,eAAK,CAAC,QAAQ,eACX,uBAAC,iBAAS,IACN,EAAE,EAAE,KAAK,CAAC,EAAE,EACZ,SAAS,EAAE,KAAK,CAAC,SAAS,EAC1B,UAAU,EAAE,GAAG,EACf,KAAK,EAAE,IAAI,EACX,WAAW,EAAE,KAAK,CAAC,WAAW,EAC9B,QAAQ,EAAE,QAAQ,EAClB,YAAY,gCACR,SAAS,EAAE,CAAC,CAAC,OAAO,EAAE,EAAC,MAAM,EAAE,QAAQ,EAAC,CAAC,IACtC,YAAY,KACf,QAAQ,EAAE,QAAQ,EAClB,OAAO,KAEX,SAAS,EAAE,SAAS,EACpB,OAAO,EAAE,OAAO,EAChB,eAAe,EAAE,eAAe,EAChC,YAAY,EAAE,YAAY,EAC1B,cAAc,EAAE,KAAK,CAAC,cAAc,EACpC,GAAG,EAAE,KAAK,CAAC,GAAG,EACd,IAAI,EAAE,KAAK,CAAC,IAAI,EAChB,KAAK,EAAE,KAAK,CAAC,KAAK,EAClB,QAAQ,EAAE,KAAK,CAAC,QAAQ,EACxB,QAAQ,EAAE,KAAK,CAAC,QAAQ,EACxB,UAAU,EACN,uBAAC,cAAM,IACH,IAAI,EAAC,gBAAgB,EACrB,IAAI,EAAE,IAAA,6CAAqB,EAAC,KAAK,CAAC,IAAI,CAAC,EACvC,QAAQ,EAAE,KAAK,CAAC,QAAQ,mBACV,QAAQ,mBACP,IAAI,gBACP,IAAA,WAAI,EAAC,mBAAmB,CAAC,EACrC,OAAO,EAAE,eAAe,EACxB,QAAQ,EAAE,CAAC,CAAC,YAEZ,uBAAC,YAAI,IAAC,IAAI,EAAE,gBAAY,GAAI,GACvB,GAEf,EACD,QAAQ,CAAC,CAAC,CAAC,CACR,mCACI,SAAS,EAAE,CAAC,CAAC,gBAAgB,EAAE;oBAC3B,WAAW,EAAE,OAAO,CAAC,KAAK,CAAC,QAAQ,IAAI,KAAK,CAAC,KAAK,CAAC;oBACnD,YAAY,EAAE,KAAK,CAAC,SAAS,IAAI,KAAK,CAAC,cAAc,KAAK,QAAQ;oBAClE,IAAI,EAAE,KAAK,CAAC,IAAI;iBACnB,CAAC,EACF,OAAO,EAAE,OAAO,GAClB,CACL,CAAC,CAAC,CAAC,IAAI,IACK,CACpB,CAAC;AACN,CAAC,CACJ,CAAC;AAEF,eAAO,CAAC,WAAW,GAAG,SAAS,CAAC","sourcesContent":["import React from 'react';\n\nimport {Calendar as CalendarIcon} from '@gravity-ui/icons';\nimport {Button, Icon, TextInput} from '@gravity-ui/uikit';\n\nimport {block} from '../../../../utils/cn';\nimport {getButtonSizeForInput} from '../../../utils/getButtonSizeForInput';\nimport type {RelativeRangeDatePickerState} from '../../hooks/useRelativeRangeDatePickerState';\nimport type {RelativeRangeDatePickerProps, RelativeRangeDatePickerTriggerProps} from '../../types';\nimport {getDefaultTitle} from '../../utils';\n\nimport {i18n} from './i18n';\n\nimport './Control.scss';\n\nexport type ControlProps = {\n props: RelativeRangeDatePickerProps;\n state: RelativeRangeDatePickerState;\n open: boolean;\n setOpen: (open: boolean) => void;\n isMobile?: boolean;\n onClick: (e: React.MouseEvent<HTMLElement>) => void;\n onKeyDown: (e: React.KeyboardEvent<HTMLElement>) => void;\n onFocus?: (e: React.FocusEvent<HTMLElement>) => void;\n onClickCalendar: (e: React.MouseEvent<HTMLElement>) => void;\n onUpdate: (value: string) => void;\n};\n\nconst b = block('relative-range-date-picker-control');\n\nexport const Control = React.forwardRef<HTMLInputElement, ControlProps>(\n (\n {\n props,\n state,\n open,\n setOpen,\n isMobile,\n onClick,\n onKeyDown,\n onFocus,\n onClickCalendar,\n onUpdate,\n },\n ref,\n ) => {\n const {alwaysShowAsAbsolute, presetTabs, getRangeTitle} = props;\n const format = props.format || 'L';\n\n const text = React.useMemo(\n () =>\n typeof getRangeTitle === 'function'\n ? getRangeTitle(state.value, state.timeZone)\n : getDefaultTitle({\n value: state.value,\n timeZone: state.timeZone,\n alwaysShowAsAbsolute,\n format,\n presets: presetTabs?.flatMap(({presets}) => presets),\n }),\n [alwaysShowAsAbsolute, format, getRangeTitle, presetTabs, state.timeZone, state.value],\n );\n\n const validationState = props.validationState || (state.isInvalid ? 'invalid' : undefined);\n const errorMessage = props.errorMessage ?? state.errors.join('\\n');\n\n const triggerProps: RelativeRangeDatePickerTriggerProps = {\n id: props.id,\n role: 'combobox',\n 'aria-haspopup': 'dialog',\n 'aria-expanded': open,\n 'aria-label': props['aria-label'],\n 'aria-labelledby': props['aria-labelledby'],\n 'aria-describedby': props['aria-describedby'],\n 'aria-details': props['aria-details'],\n disabled: props.disabled,\n readOnly: props.readOnly,\n onClick: onClickCalendar,\n onKeyDown,\n };\n\n return props.renderControl ? (\n props.renderControl({\n ref,\n value: state.value,\n title: text,\n validationState,\n errorMessage,\n open,\n setOpen,\n triggerProps,\n })\n ) : (\n <React.Fragment>\n <TextInput\n id={props.id}\n autoFocus={props.autoFocus}\n controlRef={ref}\n value={text}\n placeholder={props.placeholder}\n onUpdate={onUpdate}\n controlProps={{\n className: b('input', {mobile: isMobile}),\n ...triggerProps,\n disabled: isMobile,\n onClick,\n }}\n onKeyDown={onKeyDown}\n onFocus={onFocus}\n validationState={validationState}\n errorMessage={errorMessage}\n errorPlacement={props.errorPlacement}\n pin={props.pin}\n size={props.size}\n label={props.label}\n hasClear={props.hasClear}\n disabled={props.disabled}\n endContent={\n <Button\n view=\"flat-secondary\"\n size={getButtonSizeForInput(props.size)}\n disabled={props.disabled}\n aria-haspopup=\"dialog\"\n aria-expanded={open}\n aria-label={i18n('Range date picker')}\n onClick={onClickCalendar}\n tabIndex={-1}\n >\n <Icon data={CalendarIcon} />\n </Button>\n }\n />\n {isMobile ? (\n <button\n className={b('mobile-trigger', {\n 'has-clear': Boolean(props.hasClear && state.value),\n 'has-errors': state.isInvalid && props.errorPlacement === 'inside',\n size: props.size,\n })}\n onClick={onClick}\n />\n ) : null}\n </React.Fragment>\n );\n },\n);\n\nControl.displayName = 'Control';\n"]}
@@ -9,9 +9,13 @@ export interface PickerDialogProps extends PickerFormProps, PopupStyleProps {
9
9
  open: boolean;
10
10
  /** Handles popup close event */
11
11
  onClose: (reason?: Parameters<NonNullable<PopupProps['onOpenChange']>>[2] | 'apply') => void;
12
+ /** Handles popup remove from DOM event */
13
+ onRemove?: () => void;
12
14
  /** If true `Popup` act like a modal dialog */
13
15
  modal?: boolean;
16
+ /** Element which focus should be returned to */
17
+ returnFocus?: PopupProps['returnFocus'];
14
18
  /** If true `Sheet` is used instead of `Popup` */
15
19
  isMobile?: boolean;
16
20
  }
17
- export declare function PickerDialog({ open, onClose, isMobile, anchor, popupClassName, popupStyle, popupPlacement, popupOffset, modal, ...props }: PickerDialogProps): import("react/jsx-runtime").JSX.Element;
21
+ export declare function PickerDialog({ open, onClose, isMobile, anchor, popupClassName, popupStyle, popupPlacement, popupOffset, modal, returnFocus, onRemove, ...props }: PickerDialogProps): import("react/jsx-runtime").JSX.Element;
@@ -10,10 +10,13 @@ const PickerForm_1 = require("./PickerForm.js");
10
10
  require("./PickerDialog.css");
11
11
  const b = (0, cn_1.block)('relative-range-date-picker-dialog');
12
12
  function PickerDialog(_a) {
13
- var { open, onClose, isMobile, anchor, popupClassName, popupStyle, popupPlacement, popupOffset, modal } = _a, props = tslib_1.__rest(_a, ["open", "onClose", "isMobile", "anchor", "popupClassName", "popupStyle", "popupPlacement", "popupOffset", "modal"]);
13
+ var { open, onClose, isMobile, anchor, popupClassName, popupStyle, popupPlacement, popupOffset, modal, returnFocus = false, onRemove } = _a, props = tslib_1.__rest(_a, ["open", "onClose", "isMobile", "anchor", "popupClassName", "popupStyle", "popupPlacement", "popupOffset", "modal", "returnFocus", "onRemove"]);
14
14
  if (isMobile) {
15
15
  return ((0, jsx_runtime_1.jsx)(uikit_1.Sheet, { visible: open, onClose: () => {
16
16
  onClose('outside-press');
17
+ setTimeout(() => {
18
+ onRemove === null || onRemove === void 0 ? void 0 : onRemove();
19
+ });
17
20
  }, contentClassName: b('content', { mobile: true, size: 'xl' }, popupClassName), children: (0, jsx_runtime_1.jsx)(PickerForm_1.PickerForm, Object.assign({}, props, { size: "xl", onApply: () => {
18
21
  onClose('apply');
19
22
  } })) }));
@@ -22,7 +25,7 @@ function PickerDialog(_a) {
22
25
  if (!isOpen) {
23
26
  onClose(reason);
24
27
  }
25
- }, placement: popupPlacement, offset: popupOffset, role: "dialog", anchorElement: anchor, className: b('content', { size: props.size }, popupClassName), style: popupStyle, modal: modal, children: (0, jsx_runtime_1.jsx)(PickerForm_1.PickerForm, Object.assign({}, props, { onApply: () => {
28
+ }, placement: popupPlacement, offset: popupOffset, role: "dialog", anchorElement: anchor, className: b('content', { size: props.size }, popupClassName), style: popupStyle, modal: modal, returnFocus: returnFocus, onTransitionOutComplete: onRemove, children: (0, jsx_runtime_1.jsx)(PickerForm_1.PickerForm, Object.assign({}, props, { onApply: () => {
26
29
  onClose('apply');
27
30
  } })) }));
28
31
  }
@@ -1 +1 @@
1
- {"version":3,"file":"PickerDialog.js","sourceRoot":"../../../../../../src","sources":["components/RelativeRangeDatePicker/components/PickerDialog/PickerDialog.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAC;;;AA4Bb,oCAwDC;;;AAlFD,6CAA+C;AAG/C,gDAA2C;AAG3C,gDAAwC;AAGxC,8BAA6B;AAE7B,MAAM,CAAC,GAAG,IAAA,UAAK,EAAC,mCAAmC,CAAC,CAAC;AAerD,SAAgB,YAAY,CAAC,EAWT;QAXS,EACzB,IAAI,EACJ,OAAO,EACP,QAAQ,EACR,MAAM,EACN,cAAc,EACd,UAAU,EACV,cAAc,EACd,WAAW,EACX,KAAK,OAEW,EADb,KAAK,sBAViB,mHAW5B,CADW;IAER,IAAI,QAAQ,EAAE,CAAC;QACX,OAAO,CACH,uBAAC,aAAK,IACF,OAAO,EAAE,IAAI,EACb,OAAO,EAAE,GAAG,EAAE;gBACV,OAAO,CAAC,eAAe,CAAC,CAAC;YAC7B,CAAC,EACD,gBAAgB,EAAE,CAAC,CAAC,SAAS,EAAE,EAAC,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAC,EAAE,cAAc,CAAC,YAE1E,uBAAC,uBAAU,oBACH,KAAK,IACT,IAAI,EAAC,IAAI,EACT,OAAO,EAAE,GAAG,EAAE;oBACV,OAAO,CAAC,OAAO,CAAC,CAAC;gBACrB,CAAC,IACH,GACE,CACX,CAAC;IACN,CAAC;IAED,OAAO,CACH,uBAAC,aAAK,IACF,IAAI,EAAE,IAAI,EACV,YAAY,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,EAAE;YACrC,IAAI,CAAC,MAAM,EAAE,CAAC;gBACV,OAAO,CAAC,MAAM,CAAC,CAAC;YACpB,CAAC;QACL,CAAC,EACD,SAAS,EAAE,cAAc,EACzB,MAAM,EAAE,WAAW,EACnB,IAAI,EAAC,QAAQ,EACb,aAAa,EAAE,MAAM,EACrB,SAAS,EAAE,CAAC,CAAC,SAAS,EAAE,EAAC,IAAI,EAAE,KAAK,CAAC,IAAI,EAAC,EAAE,cAAc,CAAC,EAC3D,KAAK,EAAE,UAAU,EACjB,KAAK,EAAE,KAAK,YAEZ,uBAAC,uBAAU,oBACH,KAAK,IACT,OAAO,EAAE,GAAG,EAAE;gBACV,OAAO,CAAC,OAAO,CAAC,CAAC;YACrB,CAAC,IACH,GACE,CACX,CAAC;AACN,CAAC","sourcesContent":["'use client';\n\nimport {Popup, Sheet} from '@gravity-ui/uikit';\nimport type {PopupProps} from '@gravity-ui/uikit';\n\nimport {block} from '../../../../utils/cn';\nimport type {PopupStyleProps} from '../../../types';\n\nimport {PickerForm} from './PickerForm';\nimport type {PickerFormProps} from './PickerForm';\n\nimport './PickerDialog.scss';\n\nconst b = block('relative-range-date-picker-dialog');\n\nexport interface PickerDialogProps extends PickerFormProps, PopupStyleProps {\n /** Popup anchor */\n anchor: HTMLElement | null;\n /** Manages `Popup` visibility */\n open: boolean;\n /** Handles popup close event */\n onClose: (reason?: Parameters<NonNullable<PopupProps['onOpenChange']>>[2] | 'apply') => void;\n /** If true `Popup` act like a modal dialog */\n modal?: boolean;\n /** If true `Sheet` is used instead of `Popup` */\n isMobile?: boolean;\n}\n\nexport function PickerDialog({\n open,\n onClose,\n isMobile,\n anchor,\n popupClassName,\n popupStyle,\n popupPlacement,\n popupOffset,\n modal,\n ...props\n}: PickerDialogProps) {\n if (isMobile) {\n return (\n <Sheet\n visible={open}\n onClose={() => {\n onClose('outside-press');\n }}\n contentClassName={b('content', {mobile: true, size: 'xl'}, popupClassName)}\n >\n <PickerForm\n {...props}\n size=\"xl\"\n onApply={() => {\n onClose('apply');\n }}\n />\n </Sheet>\n );\n }\n\n return (\n <Popup\n open={open}\n onOpenChange={(isOpen, _event, reason) => {\n if (!isOpen) {\n onClose(reason);\n }\n }}\n placement={popupPlacement}\n offset={popupOffset}\n role=\"dialog\"\n anchorElement={anchor}\n className={b('content', {size: props.size}, popupClassName)}\n style={popupStyle}\n modal={modal}\n >\n <PickerForm\n {...props}\n onApply={() => {\n onClose('apply');\n }}\n />\n </Popup>\n );\n}\n"]}
1
+ {"version":3,"file":"PickerDialog.js","sourceRoot":"../../../../../../src","sources":["components/RelativeRangeDatePicker/components/PickerDialog/PickerDialog.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAC;;;AAgCb,oCA+DC;;;AA7FD,6CAA+C;AAG/C,gDAA2C;AAG3C,gDAAwC;AAGxC,8BAA6B;AAE7B,MAAM,CAAC,GAAG,IAAA,UAAK,EAAC,mCAAmC,CAAC,CAAC;AAmBrD,SAAgB,YAAY,CAAC,EAaT;QAbS,EACzB,IAAI,EACJ,OAAO,EACP,QAAQ,EACR,MAAM,EACN,cAAc,EACd,UAAU,EACV,cAAc,EACd,WAAW,EACX,KAAK,EACL,WAAW,GAAG,KAAK,EACnB,QAAQ,OAEQ,EADb,KAAK,sBAZiB,8IAa5B,CADW;IAER,IAAI,QAAQ,EAAE,CAAC;QACX,OAAO,CACH,uBAAC,aAAK,IACF,OAAO,EAAE,IAAI,EACb,OAAO,EAAE,GAAG,EAAE;gBACV,OAAO,CAAC,eAAe,CAAC,CAAC;gBACzB,UAAU,CAAC,GAAG,EAAE;oBACZ,QAAQ,aAAR,QAAQ,uBAAR,QAAQ,EAAI,CAAC;gBACjB,CAAC,CAAC,CAAC;YACP,CAAC,EACD,gBAAgB,EAAE,CAAC,CAAC,SAAS,EAAE,EAAC,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAC,EAAE,cAAc,CAAC,YAE1E,uBAAC,uBAAU,oBACH,KAAK,IACT,IAAI,EAAC,IAAI,EACT,OAAO,EAAE,GAAG,EAAE;oBACV,OAAO,CAAC,OAAO,CAAC,CAAC;gBACrB,CAAC,IACH,GACE,CACX,CAAC;IACN,CAAC;IAED,OAAO,CACH,uBAAC,aAAK,IACF,IAAI,EAAE,IAAI,EACV,YAAY,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,EAAE;YACrC,IAAI,CAAC,MAAM,EAAE,CAAC;gBACV,OAAO,CAAC,MAAM,CAAC,CAAC;YACpB,CAAC;QACL,CAAC,EACD,SAAS,EAAE,cAAc,EACzB,MAAM,EAAE,WAAW,EACnB,IAAI,EAAC,QAAQ,EACb,aAAa,EAAE,MAAM,EACrB,SAAS,EAAE,CAAC,CAAC,SAAS,EAAE,EAAC,IAAI,EAAE,KAAK,CAAC,IAAI,EAAC,EAAE,cAAc,CAAC,EAC3D,KAAK,EAAE,UAAU,EACjB,KAAK,EAAE,KAAK,EACZ,WAAW,EAAE,WAAW,EACxB,uBAAuB,EAAE,QAAQ,YAEjC,uBAAC,uBAAU,oBACH,KAAK,IACT,OAAO,EAAE,GAAG,EAAE;gBACV,OAAO,CAAC,OAAO,CAAC,CAAC;YACrB,CAAC,IACH,GACE,CACX,CAAC;AACN,CAAC","sourcesContent":["'use client';\n\nimport {Popup, Sheet} from '@gravity-ui/uikit';\nimport type {PopupProps} from '@gravity-ui/uikit';\n\nimport {block} from '../../../../utils/cn';\nimport type {PopupStyleProps} from '../../../types';\n\nimport {PickerForm} from './PickerForm';\nimport type {PickerFormProps} from './PickerForm';\n\nimport './PickerDialog.scss';\n\nconst b = block('relative-range-date-picker-dialog');\n\nexport interface PickerDialogProps extends PickerFormProps, PopupStyleProps {\n /** Popup anchor */\n anchor: HTMLElement | null;\n /** Manages `Popup` visibility */\n open: boolean;\n /** Handles popup close event */\n onClose: (reason?: Parameters<NonNullable<PopupProps['onOpenChange']>>[2] | 'apply') => void;\n /** Handles popup remove from DOM event */\n onRemove?: () => void;\n /** If true `Popup` act like a modal dialog */\n modal?: boolean;\n /** Element which focus should be returned to */\n returnFocus?: PopupProps['returnFocus'];\n /** If true `Sheet` is used instead of `Popup` */\n isMobile?: boolean;\n}\n\nexport function PickerDialog({\n open,\n onClose,\n isMobile,\n anchor,\n popupClassName,\n popupStyle,\n popupPlacement,\n popupOffset,\n modal,\n returnFocus = false,\n onRemove,\n ...props\n}: PickerDialogProps) {\n if (isMobile) {\n return (\n <Sheet\n visible={open}\n onClose={() => {\n onClose('outside-press');\n setTimeout(() => {\n onRemove?.();\n });\n }}\n contentClassName={b('content', {mobile: true, size: 'xl'}, popupClassName)}\n >\n <PickerForm\n {...props}\n size=\"xl\"\n onApply={() => {\n onClose('apply');\n }}\n />\n </Sheet>\n );\n }\n\n return (\n <Popup\n open={open}\n onOpenChange={(isOpen, _event, reason) => {\n if (!isOpen) {\n onClose(reason);\n }\n }}\n placement={popupPlacement}\n offset={popupOffset}\n role=\"dialog\"\n anchorElement={anchor}\n className={b('content', {size: props.size}, popupClassName)}\n style={popupStyle}\n modal={modal}\n returnFocus={returnFocus}\n onTransitionOutComplete={onRemove}\n >\n <PickerForm\n {...props}\n onApply={() => {\n onClose('apply');\n }}\n />\n </Popup>\n );\n}\n"]}
@@ -0,0 +1,13 @@
1
+ .g-date-relative-range-date-picker-doc__button {
2
+ --g-button-background-color-hover: transparent;
3
+ }
4
+ .g-date-relative-range-date-picker-doc__table_size_xl {
5
+ font-family: var(--g-text-body-font-family);
6
+ font-weight: var(--g-text-body-font-weight);
7
+ font-size: var(--g-text-body-2-font-size);
8
+ line-height: var(--g-text-body-2-line-height);
9
+ }
10
+ .g-date-relative-range-date-picker-doc__table > table {
11
+ width: 100%;
12
+ }
13
+ /*# sourceMappingURL=PickerDoc.css.map */
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["components/RelativeRangeDatePicker/components/PickerDialog/data:;charset=utf-8,@use%20'@gravity-ui/uikit/variables';%0A%0A$block:%20'.%23%7Bvariables.$ns%7Drelative-range-date-picker-doc';%0A%0A%23%7B$block%7D%20%7B%0A%20%20%20%20&__button%20%7B%0A%20%20%20%20%20%20%20%20--g-button-background-color-hover:%20transparent;%0A%20%20%20%20%7D%0A%0A%20%20%20%20&__table%20%7B%0A%20%20%20%20%20%20%20%20&_size_xl%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20@include%20mixins.text-body-2();%0A%20%20%20%20%20%20%20%20%7D%0A%0A%20%20%20%20%20%20%20%20&%20%3E%20table%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20width:%20100%25;%0A%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%7D%0A%7D%0A","components/RelativeRangeDatePicker/components/PickerDialog/file:/home/runner/work/date-components/date-components/node_modules/@gravity-ui/uikit/styles/mixins.scss"],"names":[],"mappings":"AAMI;EACI;;AAIA;EC8JJ;EACA;EACA;EACA;;AD7JI;EACI","sourcesContent":["@use '@gravity-ui/uikit/styles/mixins';\n@use '../../../variables';\n\n$block: '.#{variables.$ns}relative-range-date-picker-doc';\n\n#{$block} {\n &__button {\n --g-button-background-color-hover: transparent;\n }\n\n &__table {\n &_size_xl {\n @include mixins.text-body-2();\n }\n\n & > table {\n width: 100%;\n }\n }\n}\n","@use 'sass:list';\n@use 'sass:selector';\n\n@mixin overflow-ellipsis($type: ellipsis) {\n white-space: nowrap;\n overflow: hidden;\n text-overflow: $type;\n}\n\n@mixin button-reset() {\n padding: 0;\n\n font-family: var(--g-text-body-font-family);\n font-size: inherit;\n font-weight: var(--g-text-body-font-weight);\n\n color: inherit;\n background: none;\n border: none;\n outline: none;\n cursor: pointer;\n}\n\n@mixin expand-interactive-area($h: 4px, $v: $h) {\n position: relative;\n\n &::after {\n content: '';\n position: absolute;\n inset: logical (-$v) (-$h) (-$v);\n }\n}\n\n@mixin max-height($height) {\n max-height: $height;\n overflow-y: auto;\n}\n\n@mixin max-text-width($width: 100%) {\n @include overflow-ellipsis();\n\n max-width: $width;\n}\n\n@mixin aspect-ratio($ratio) {\n position: relative;\n\n &::before {\n display: block;\n content: '';\n width: 100%;\n padding-block-start: $ratio * 100%;\n }\n\n > *:only-child {\n position: absolute;\n inset: 0;\n }\n}\n\n@function get-pin-selector($mod, $selector, $append: true) {\n @if $append {\n @return selector.append($mod, $selector);\n } @else {\n @return list.join($mod, $selector, $separator: space);\n }\n}\n\n@mixin pin($block, $selectors, $radius, $append: true) {\n @each $selector in $selectors {\n &#{get-pin-selector(#{$block}_pin_round-round, $selector, $append)} {\n border-radius: $radius;\n }\n\n &#{get-pin-selector(#{$block}_pin_brick-brick, $selector, $append)} {\n border-radius: 0;\n }\n\n &#{get-pin-selector(#{$block}_pin_clear-clear, $selector, $append)} {\n border-radius: 0;\n border-inline: 0;\n }\n\n &#{get-pin-selector(#{$block}_pin_circle-circle, $selector, $append)} {\n border-radius: 100px;\n }\n\n &#{get-pin-selector(#{$block}_pin_round-brick, $selector, $append)} {\n border-start-start-radius: $radius;\n border-start-end-radius: 0;\n border-end-start-radius: $radius;\n border-end-end-radius: 0;\n }\n\n &#{get-pin-selector(#{$block}_pin_brick-round, $selector, $append)} {\n border-start-start-radius: 0;\n border-start-end-radius: $radius;\n border-end-start-radius: 0;\n border-end-end-radius: $radius;\n }\n\n &#{get-pin-selector(#{$block}_pin_round-clear, $selector, $append)} {\n border-start-start-radius: $radius;\n border-start-end-radius: 0;\n border-end-start-radius: $radius;\n border-end-end-radius: 0;\n border-inline-end: 0;\n }\n\n &#{get-pin-selector(#{$block}_pin_clear-round, $selector, $append)} {\n border-start-start-radius: 0;\n border-start-end-radius: $radius;\n border-end-start-radius: 0;\n border-end-end-radius: $radius;\n border-inline-start: 0;\n }\n\n &#{get-pin-selector(#{$block}_pin_brick-clear, $selector, $append)} {\n border-radius: 0;\n border-inline-end: 0;\n }\n\n &#{get-pin-selector(#{$block}_pin_clear-brick, $selector, $append)} {\n border-radius: 0;\n border-inline-start: 0;\n }\n\n &#{get-pin-selector(#{$block}_pin_circle-brick, $selector, $append)} {\n border-start-start-radius: 100px;\n border-start-end-radius: 0;\n border-end-start-radius: 100px;\n border-end-end-radius: 0;\n }\n\n &#{get-pin-selector(#{$block}_pin_brick-circle, $selector, $append)} {\n border-start-start-radius: 0;\n border-start-end-radius: 100px;\n border-end-start-radius: 0;\n border-end-end-radius: 100px;\n }\n\n &#{get-pin-selector(#{$block}_pin_circle-clear, $selector, $append)} {\n border-start-start-radius: 100px;\n border-start-end-radius: 0;\n border-end-start-radius: 100px;\n border-end-end-radius: 0;\n border-inline-end: 0;\n }\n\n &#{get-pin-selector(#{$block}_pin_clear-circle, $selector, $append)} {\n border-start-start-radius: 0;\n border-start-end-radius: 100px;\n border-end-start-radius: 0;\n border-end-end-radius: 100px;\n border-inline-start: 0;\n }\n }\n}\n\n// Typography\n\n@mixin text-body-1() {\n font-family: var(--g-text-body-font-family);\n font-weight: var(--g-text-body-font-weight);\n font-size: var(--g-text-body-1-font-size);\n line-height: var(--g-text-body-1-line-height);\n}\n\n@mixin text-body-2() {\n font-family: var(--g-text-body-font-family);\n font-weight: var(--g-text-body-font-weight);\n font-size: var(--g-text-body-2-font-size);\n line-height: var(--g-text-body-2-line-height);\n}\n\n@mixin text-body-3() {\n font-family: var(--g-text-body-font-family);\n font-weight: var(--g-text-body-font-weight);\n font-size: var(--g-text-body-3-font-size);\n line-height: var(--g-text-body-3-line-height);\n}\n\n@mixin text-body-short() {\n font-family: var(--g-text-body-font-family);\n font-weight: var(--g-text-body-font-weight);\n font-size: var(--g-text-body-short-font-size);\n line-height: var(--g-text-body-short-line-height);\n}\n\n@mixin text-caption-1() {\n font-family: var(--g-text-caption-font-family);\n font-weight: var(--g-text-caption-font-weight);\n font-size: var(--g-text-caption-1-font-size);\n line-height: var(--g-text-caption-1-line-height);\n}\n\n@mixin text-caption-2() {\n font-family: var(--g-text-caption-font-family);\n font-weight: var(--g-text-caption-font-weight);\n font-size: var(--g-text-caption-2-font-size);\n line-height: var(--g-text-caption-2-line-height);\n}\n\n@mixin text-header-1() {\n font-family: var(--g-text-header-font-family);\n font-weight: var(--g-text-header-font-weight);\n font-size: var(--g-text-header-1-font-size);\n line-height: var(--g-text-header-1-line-height);\n}\n\n@mixin text-header-2() {\n font-family: var(--g-text-header-font-family);\n font-weight: var(--g-text-header-font-weight);\n font-size: var(--g-text-header-2-font-size);\n line-height: var(--g-text-header-2-line-height);\n}\n\n@mixin text-subheader-1() {\n font-family: var(--g-text-subheader-font-family);\n font-weight: var(--g-text-subheader-font-weight);\n font-size: var(--g-text-subheader-1-font-size);\n line-height: var(--g-text-subheader-1-line-height);\n}\n\n@mixin text-subheader-2() {\n font-family: var(--g-text-subheader-font-family);\n font-weight: var(--g-text-subheader-font-weight);\n font-size: var(--g-text-subheader-2-font-size);\n line-height: var(--g-text-subheader-2-line-height);\n}\n\n@mixin text-subheader-3() {\n font-family: var(--g-text-subheader-font-family);\n font-weight: var(--g-text-subheader-font-weight);\n font-size: var(--g-text-subheader-3-font-size);\n line-height: var(--g-text-subheader-3-line-height);\n}\n\n@mixin text-display-1() {\n font-family: var(--g-text-display-font-family);\n font-weight: var(--g-text-display-font-weight);\n font-size: var(--g-text-display-1-font-size);\n line-height: var(--g-text-display-1-line-height);\n}\n\n@mixin text-display-2() {\n font-family: var(--g-text-display-font-family);\n font-weight: var(--g-text-display-font-weight);\n font-size: var(--g-text-display-2-font-size);\n line-height: var(--g-text-display-2-line-height);\n}\n\n@mixin text-display-3() {\n font-family: var(--g-text-display-font-family);\n font-weight: var(--g-text-display-font-weight);\n font-size: var(--g-text-display-3-font-size);\n line-height: var(--g-text-display-3-line-height);\n}\n\n@mixin text-display-4() {\n font-family: var(--g-text-display-font-family);\n font-weight: var(--g-text-display-font-weight);\n font-size: var(--g-text-display-4-font-size);\n line-height: var(--g-text-display-4-line-height);\n}\n\n@mixin text-code-1() {\n font-family: var(--g-text-code-font-family);\n font-weight: var(--g-text-code-font-weight);\n font-size: var(--g-text-code-1-font-size);\n line-height: var(--g-text-code-1-line-height);\n}\n\n@mixin text-code-2() {\n font-family: var(--g-text-code-font-family);\n font-weight: var(--g-text-code-font-weight);\n font-size: var(--g-text-code-2-font-size);\n line-height: var(--g-text-code-2-line-height);\n}\n\n@mixin text-code-3() {\n font-family: var(--g-text-code-font-family);\n font-weight: var(--g-text-code-font-weight);\n font-size: var(--g-text-code-3-font-size);\n line-height: var(--g-text-code-3-line-height);\n}\n\n@mixin text-code-inline-1() {\n font-family: var(--g-text-code-font-family);\n font-weight: var(--g-text-code-font-weight);\n font-size: var(--g-text-code-inline-1-font-size);\n line-height: var(--g-text-code-inline-1-line-height);\n}\n\n@mixin text-code-inline-2() {\n font-family: var(--g-text-code-font-family);\n font-weight: var(--g-text-code-font-weight);\n font-size: var(--g-text-code-inline-2-font-size);\n line-height: var(--g-text-code-inline-2-line-height);\n}\n\n@mixin text-code-inline-3() {\n font-family: var(--g-text-code-font-family);\n font-weight: var(--g-text-code-font-weight);\n font-size: var(--g-text-code-inline-3-font-size);\n line-height: var(--g-text-code-inline-3-line-height);\n}\n\n@mixin text-accent() {\n font-weight: var(--g-text-accent-font-weight);\n}\n\n@mixin loading($loading-color-1: rgba(255, 255, 255, 0.3), $loading-color-2: transparent) {\n background-image: repeating-linear-gradient(\n -45deg,\n $loading-color-1,\n $loading-color-1 4px,\n $loading-color-2 4px,\n $loading-color-2 8px\n );\n background-size: 150%;\n background-clip: padding-box;\n\n // stylelint-disable-next-line no-unknown-animations\n animation: g-loading-animation 0.5s linear infinite;\n}\n\n@mixin scrollbar() {\n &::-webkit-scrollbar,\n *::-webkit-scrollbar {\n width: var(--g-scrollbar-width);\n height: var(--g-scrollbar-width);\n background: var(--g-color-scroll-track);\n }\n\n &::-webkit-scrollbar-track,\n *::-webkit-scrollbar-track {\n background: var(--g-color-scroll-track);\n }\n\n &::-webkit-scrollbar-corner,\n *::-webkit-scrollbar-corner {\n background: var(--g-color-scroll-corner);\n }\n\n &::-webkit-scrollbar-thumb,\n *::-webkit-scrollbar-thumb {\n background: var(--g-color-scroll-handle);\n }\n\n &::-webkit-scrollbar-thumb:hover,\n *::-webkit-scrollbar-thumb:hover {\n background: var(--g-color-scroll-handle-hover);\n }\n}\n"],"file":"PickerDoc.css"}
@@ -0,0 +1,11 @@
1
+ import type { Preset } from "../Presets/defaultPresets.js";
2
+ import "./PickerDoc.css";
3
+ interface PresetsDocProps {
4
+ className?: string;
5
+ size?: 's' | 'm' | 'l' | 'xl';
6
+ docs?: Preset[];
7
+ onStartUpdate: (start: string) => void;
8
+ onEndUpdate: (end: string) => void;
9
+ }
10
+ export declare function PickerDoc({ docs, ...props }: PresetsDocProps): import("react/jsx-runtime").JSX.Element | null;
11
+ export {};
@@ -0,0 +1,100 @@
1
+ 'use client';
2
+ "use strict";
3
+ Object.defineProperty(exports, "__esModule", { value: true });
4
+ exports.PickerDoc = PickerDoc;
5
+ const tslib_1 = require("tslib");
6
+ const jsx_runtime_1 = require("react/jsx-runtime");
7
+ const react_1 = tslib_1.__importDefault(require("react"));
8
+ const icons_1 = require("@gravity-ui/icons");
9
+ const uikit_1 = require("@gravity-ui/uikit");
10
+ const cn_1 = require("../../../../utils/cn.js");
11
+ const getButtonSizeForInput_1 = require("../../../utils/getButtonSizeForInput.js");
12
+ const i18n_1 = require("../Presets/i18n/index.js");
13
+ require("./PickerDoc.css");
14
+ const b = (0, cn_1.block)('relative-range-date-picker-doc');
15
+ const data = [
16
+ {
17
+ get title() {
18
+ return (0, i18n_1.i18n)('Last 5 minutes');
19
+ },
20
+ from: 'now - 5m',
21
+ to: 'now',
22
+ },
23
+ {
24
+ get title() {
25
+ return (0, i18n_1.i18n)('From start of day');
26
+ },
27
+ from: 'now/d',
28
+ to: 'now',
29
+ },
30
+ {
31
+ get title() {
32
+ return (0, i18n_1.i18n)('This week');
33
+ },
34
+ from: 'now/w',
35
+ to: 'now/w',
36
+ },
37
+ {
38
+ get title() {
39
+ return (0, i18n_1.i18n)('From start of week');
40
+ },
41
+ from: 'now/w',
42
+ to: 'now',
43
+ },
44
+ {
45
+ get title() {
46
+ return (0, i18n_1.i18n)('Previous month');
47
+ },
48
+ from: 'now - 1M/M',
49
+ to: 'now - 1M/M',
50
+ },
51
+ ];
52
+ function DocContent({ size, docs, onStartUpdate, onEndUpdate }) {
53
+ const isMobile = (0, uikit_1.useMobile)();
54
+ const columns = react_1.default.useMemo(() => [
55
+ {
56
+ id: 'title',
57
+ name: () => {
58
+ return (0, i18n_1.i18n)('Range');
59
+ },
60
+ },
61
+ {
62
+ id: 'from',
63
+ name: () => {
64
+ return (0, i18n_1.i18n)('From');
65
+ },
66
+ template: (item) => ((0, jsx_runtime_1.jsx)(uikit_1.Button, { size: isMobile ? 'l' : (0, getButtonSizeForInput_1.getButtonSizeForInput)(size), onClick: () => onStartUpdate(item.from), children: item.from })),
67
+ },
68
+ {
69
+ id: 'to',
70
+ name: () => {
71
+ return (0, i18n_1.i18n)('To');
72
+ },
73
+ template: (item) => ((0, jsx_runtime_1.jsx)(uikit_1.Button, { size: isMobile ? 'l' : (0, getButtonSizeForInput_1.getButtonSizeForInput)(size), onClick: () => onEndUpdate(item.to), children: item.to })),
74
+ },
75
+ ], [isMobile, onEndUpdate, onStartUpdate, size]);
76
+ return (0, jsx_runtime_1.jsx)(uikit_1.Table, { columns: columns, data: docs, className: b('table', { size }), wordWrap: true });
77
+ }
78
+ function DesktopDoc(_a) {
79
+ var { className, size } = _a, props = tslib_1.__rest(_a, ["className", "size"]);
80
+ return ((0, jsx_runtime_1.jsx)(uikit_1.Popover, { className: b(null), hasArrow: false, placement: ['right-start', 'left-start'], content: (0, jsx_runtime_1.jsx)(DocContent, Object.assign({ size: size }, props)), children: (0, jsx_runtime_1.jsx)(uikit_1.Button, { className: b('button', className), view: "flat-secondary", size: (0, getButtonSizeForInput_1.getButtonSizeForInput)(size), children: (0, jsx_runtime_1.jsx)(uikit_1.Icon, { data: icons_1.CircleQuestion }) }) }));
81
+ }
82
+ function MobileDoc(_a) {
83
+ var { className } = _a, props = tslib_1.__rest(_a, ["className"]);
84
+ const [open, setOpen] = react_1.default.useState(false);
85
+ return ((0, jsx_runtime_1.jsxs)("div", { className: b(null, className), children: [(0, jsx_runtime_1.jsx)(uikit_1.Button, { className: b('button'), view: "flat-secondary", size: "l", onClick: () => {
86
+ setOpen(true);
87
+ }, children: (0, jsx_runtime_1.jsx)(uikit_1.Icon, { data: icons_1.CircleQuestion }) }), (0, jsx_runtime_1.jsx)(uikit_1.Sheet, { visible: open, onClose: () => setOpen(false), children: (0, jsx_runtime_1.jsx)(DocContent, Object.assign({}, props)) })] }));
88
+ }
89
+ function PickerDoc(_a) {
90
+ var { docs = data } = _a, props = tslib_1.__rest(_a, ["docs"]);
91
+ const isMobile = (0, uikit_1.useMobile)();
92
+ if (!Array.isArray(docs) || docs.length === 0) {
93
+ return null;
94
+ }
95
+ if (isMobile) {
96
+ return (0, jsx_runtime_1.jsx)(MobileDoc, Object.assign({}, props, { docs: docs }));
97
+ }
98
+ return (0, jsx_runtime_1.jsx)(DesktopDoc, Object.assign({}, props, { docs: docs }));
99
+ }
100
+ //# sourceMappingURL=PickerDoc.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PickerDoc.js","sourceRoot":"../../../../../../src","sources":["components/RelativeRangeDatePicker/components/PickerDialog/PickerDoc.tsx"],"names":[],"mappings":"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","sourcesContent":["'use client';\n\nimport React from 'react';\n\nimport {CircleQuestion} from '@gravity-ui/icons';\nimport {Button, Icon, Popover, Sheet, Table, useMobile} from '@gravity-ui/uikit';\nimport type {TableColumnConfig} from '@gravity-ui/uikit';\n\nimport {block} from '../../../../utils/cn';\nimport {getButtonSizeForInput} from '../../../utils/getButtonSizeForInput';\nimport type {Preset} from '../Presets/defaultPresets';\nimport {i18n} from '../Presets/i18n';\n\nimport './PickerDoc.scss';\n\nconst b = block('relative-range-date-picker-doc');\n\nconst data: Preset[] = [\n {\n get title() {\n return i18n('Last 5 minutes');\n },\n from: 'now - 5m',\n to: 'now',\n },\n {\n get title() {\n return i18n('From start of day');\n },\n from: 'now/d',\n to: 'now',\n },\n {\n get title() {\n return i18n('This week');\n },\n from: 'now/w',\n to: 'now/w',\n },\n {\n get title() {\n return i18n('From start of week');\n },\n from: 'now/w',\n to: 'now',\n },\n {\n get title() {\n return i18n('Previous month');\n },\n from: 'now - 1M/M',\n to: 'now - 1M/M',\n },\n];\n\ninterface DocContentProps extends Omit<PresetsDocProps, 'docs' | 'className'> {\n docs: Preset[];\n}\n\nfunction DocContent({size, docs, onStartUpdate, onEndUpdate}: DocContentProps) {\n const isMobile = useMobile();\n\n const columns: TableColumnConfig<Preset>[] = React.useMemo(\n () => [\n {\n id: 'title',\n name: () => {\n return i18n('Range');\n },\n },\n {\n id: 'from',\n name: () => {\n return i18n('From');\n },\n template: (item) => (\n <Button\n size={isMobile ? 'l' : getButtonSizeForInput(size)}\n onClick={() => onStartUpdate(item.from)}\n >\n {item.from}\n </Button>\n ),\n },\n {\n id: 'to',\n name: () => {\n return i18n('To');\n },\n template: (item) => (\n <Button\n size={isMobile ? 'l' : getButtonSizeForInput(size)}\n onClick={() => onEndUpdate(item.to)}\n >\n {item.to}\n </Button>\n ),\n },\n ],\n [isMobile, onEndUpdate, onStartUpdate, size],\n );\n\n return <Table columns={columns} data={docs} className={b('table', {size})} wordWrap />;\n}\n\ninterface DesktopDocProps extends Omit<PresetsDocProps, 'docs'> {\n docs: Preset[];\n}\n\nfunction DesktopDoc({className, size, ...props}: DesktopDocProps) {\n return (\n <Popover\n className={b(null)}\n hasArrow={false}\n placement={['right-start', 'left-start']}\n content={<DocContent size={size} {...props} />}\n >\n <Button\n className={b('button', className)}\n view=\"flat-secondary\"\n size={getButtonSizeForInput(size)}\n >\n <Icon data={CircleQuestion} />\n </Button>\n </Popover>\n );\n}\n\ninterface MobileDocProps extends Omit<PresetsDocProps, 'docs'> {\n docs: Preset[];\n}\n\nfunction MobileDoc({className, ...props}: MobileDocProps) {\n const [open, setOpen] = React.useState(false);\n return (\n <div className={b(null, className)}>\n <Button\n className={b('button')}\n view=\"flat-secondary\"\n size=\"l\"\n onClick={() => {\n setOpen(true);\n }}\n >\n <Icon data={CircleQuestion} />\n </Button>\n <Sheet visible={open} onClose={() => setOpen(false)}>\n <DocContent {...props} />\n </Sheet>\n </div>\n );\n}\n\ninterface PresetsDocProps {\n className?: string;\n size?: 's' | 'm' | 'l' | 'xl';\n docs?: Preset[];\n onStartUpdate: (start: string) => void;\n onEndUpdate: (end: string) => void;\n}\n\nexport function PickerDoc({docs = data, ...props}: PresetsDocProps) {\n const isMobile = useMobile();\n\n if (!Array.isArray(docs) || docs.length === 0) {\n return null;\n }\n\n if (isMobile) {\n return <MobileDoc {...props} docs={docs} />;\n }\n\n return <DesktopDoc {...props} docs={docs} />;\n}\n"]}
@@ -9,6 +9,12 @@
9
9
  .g-date-relative-range-date-picker-form_size_xl .g-date-relative-range-date-picker-form__pickers .g-text-input__label {
10
10
  width: 50px;
11
11
  }
12
+ .g-date-relative-range-date-picker-form__header {
13
+ display: flex;
14
+ align-items: center;
15
+ gap: var(--g-spacing-1);
16
+ margin-block-end: var(--g-spacing-2);
17
+ }
12
18
  .g-date-relative-range-date-picker-form__apply {
13
19
  margin-block-start: var(--g-spacing-2);
14
20
  }
@@ -1 +1 @@
1
- {"version":3,"sources":["components/RelativeRangeDatePicker/components/variables';%0A%0A$block:%20'.%23%7Bvariables.$ns%7Drelative-range-date-picker-form';%0A%0A%23%7B$block%7D%20%7B%0A%20%20%20%20&__pickers%20%7B%0A%20%20%20%20%20%20%20%20display:%20flex;%0A%20%20%20%20%20%20%20%20flex-direction:%20column;%0A%20%20%20%20%20%20%20%20gap:%20var(--g-spacing-2);%0A%0A%20%20%20%20%20%20%20%20.g-text-input__label%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20width:%2040px;%0A%0A%20%20%20%20%20%20%20%20%20%20%20%20%23%7B$block%7D_size_xl%20&%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20width:%2050px;%0A%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%7D%0A%0A%20%20%20%20&__apply%20%7B%0A%20%20%20%20%20%20%20%20margin-block-start:%20var(--g-spacing-2);%0A%20%20%20%20%7D%0A%0A%20%20%20%20&__zone%20%7B%0A%20%20%20%20%20%20%20%20margin-block:%20var(--g-spacing-2)%20calc(-1%20*%20var(--_--popup-content-padding));%0A%20%20%20%20%20%20%20%20margin-inline:%20calc(-1%20*%20var(--_--popup-content-padding));%0A%0A%20%20%20%20%20%20%20%20border-block-start:%201px%20solid%20var(--g-color-line-generic);%0A%20%20%20%20%7D%0A%0A%20%20%20%20&__presets%20%7B%0A%20%20%20%20%20%20%20%20margin-inline:%20calc(-1%20*%20var(--_--popup-content-padding));%0A%20%20%20%20%7D%0A%7D%0A"],"names":[],"mappings":"AAKI;EACI;EACA;EACA;;AAEA;EACI;;AAEA;EACI;;AAKZ;EACI;;AAGJ;EACI;EACA;EAEA;;AAGJ;EACI","sourcesContent":["@use '../../../variables';\n\n$block: '.#{variables.$ns}relative-range-date-picker-form';\n\n#{$block} {\n &__pickers {\n display: flex;\n flex-direction: column;\n gap: var(--g-spacing-2);\n\n .g-text-input__label {\n width: 40px;\n\n #{$block}_size_xl & {\n width: 50px;\n }\n }\n }\n\n &__apply {\n margin-block-start: var(--g-spacing-2);\n }\n\n &__zone {\n margin-block: var(--g-spacing-2) calc(-1 * var(--_--popup-content-padding));\n margin-inline: calc(-1 * var(--_--popup-content-padding));\n\n border-block-start: 1px solid var(--g-color-line-generic);\n }\n\n &__presets {\n margin-inline: calc(-1 * var(--_--popup-content-padding));\n }\n}\n"],"file":"PickerForm.css"}
1
+ {"version":3,"sources":["components/RelativeRangeDatePicker/components/variables';%0A%0A$block:%20'.%23%7Bvariables.$ns%7Drelative-range-date-picker-form';%0A%0A%23%7B$block%7D%20%7B%0A%20%20%20%20&__pickers%20%7B%0A%20%20%20%20%20%20%20%20display:%20flex;%0A%20%20%20%20%20%20%20%20flex-direction:%20column;%0A%20%20%20%20%20%20%20%20gap:%20var(--g-spacing-2);%0A%0A%20%20%20%20%20%20%20%20.g-text-input__label%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20width:%2040px;%0A%0A%20%20%20%20%20%20%20%20%20%20%20%20%23%7B$block%7D_size_xl%20&%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20width:%2050px;%0A%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%7D%0A%0A%20%20%20%20&__header%20%7B%0A%20%20%20%20%20%20%20%20display:%20flex;%0A%20%20%20%20%20%20%20%20align-items:%20center;%0A%20%20%20%20%20%20%20%20gap:%20var(--g-spacing-1);%0A%0A%20%20%20%20%20%20%20%20margin-block-end:%20var(--g-spacing-2);%0A%20%20%20%20%7D%0A%0A%20%20%20%20&__apply%20%7B%0A%20%20%20%20%20%20%20%20margin-block-start:%20var(--g-spacing-2);%0A%20%20%20%20%7D%0A%0A%20%20%20%20&__zone%20%7B%0A%20%20%20%20%20%20%20%20margin-block:%20var(--g-spacing-2)%20calc(-1%20*%20var(--_--popup-content-padding));%0A%20%20%20%20%20%20%20%20margin-inline:%20calc(-1%20*%20var(--_--popup-content-padding));%0A%0A%20%20%20%20%20%20%20%20border-block-start:%201px%20solid%20var(--g-color-line-generic);%0A%20%20%20%20%7D%0A%0A%20%20%20%20&__presets%20%7B%0A%20%20%20%20%20%20%20%20margin-inline:%20calc(-1%20*%20var(--_--popup-content-padding));%0A%20%20%20%20%7D%0A%7D%0A"],"names":[],"mappings":"AAKI;EACI;EACA;EACA;;AAEA;EACI;;AAEA;EACI;;AAKZ;EACI;EACA;EACA;EAEA;;AAGJ;EACI;;AAGJ;EACI;EACA;EAEA;;AAGJ;EACI","sourcesContent":["@use '../../../variables';\n\n$block: '.#{variables.$ns}relative-range-date-picker-form';\n\n#{$block} {\n &__pickers {\n display: flex;\n flex-direction: column;\n gap: var(--g-spacing-2);\n\n .g-text-input__label {\n width: 40px;\n\n #{$block}_size_xl & {\n width: 50px;\n }\n }\n }\n\n &__header {\n display: flex;\n align-items: center;\n gap: var(--g-spacing-1);\n\n margin-block-end: var(--g-spacing-2);\n }\n\n &__apply {\n margin-block-start: var(--g-spacing-2);\n }\n\n &__zone {\n margin-block: var(--g-spacing-2) calc(-1 * var(--_--popup-content-padding));\n margin-inline: calc(-1 * var(--_--popup-content-padding));\n\n border-block-start: 1px solid var(--g-color-line-generic);\n }\n\n &__presets {\n margin-inline: calc(-1 * var(--_--popup-content-padding));\n }\n}\n"],"file":"PickerForm.css"}
@@ -23,9 +23,11 @@ export interface PickerFormProps extends RelativeRangeDatePickerStateOptions, Do
23
23
  withZonesList?: boolean;
24
24
  /** Show relative range presets */
25
25
  withPresets?: boolean;
26
+ /** Show header with docs tooltip */
27
+ withHeader?: boolean;
26
28
  /** Custom preset tabs */
27
29
  presetTabs?: PresetTab[];
28
- /** Custom docs for presets, if empty array docs will be hidden */
30
+ /** Custom docs for picker, if empty array docs will be hidden */
29
31
  docs?: Preset[];
30
32
  }
31
33
  export declare function PickerForm(props: PickerFormProps & {
@@ -8,6 +8,7 @@ const cn_1 = require("../../../../utils/cn.js");
8
8
  const RelativeDatePicker_1 = require("../../../RelativeDatePicker/index.js");
9
9
  const Presets_1 = require("../Presets/Presets.js");
10
10
  const Zones_1 = require("../Zones/Zones.js");
11
+ const PickerDoc_1 = require("./PickerDoc.js");
11
12
  const i18n_1 = require("./i18n/index.js");
12
13
  const useRelativeRangeDatePickerDialogState_1 = require("./useRelativeRangeDatePickerDialogState.js");
13
14
  require("./PickerForm.css");
@@ -25,8 +26,12 @@ function PickerForm(props) {
25
26
  size: props.size,
26
27
  errorPlacement: 'inside',
27
28
  };
28
- const { isDateUnavailable } = props;
29
- return ((0, jsx_runtime_1.jsxs)("div", { className: b({ size: props.size }, props.className), style: props.style, children: [(0, jsx_runtime_1.jsxs)("div", { className: b('pickers'), children: [(0, jsx_runtime_1.jsx)(RelativeDatePicker_1.RelativeDatePicker, Object.assign({}, fieldProps, { isDateUnavailable: isDateUnavailable ? (date) => isDateUnavailable(date, 'start') : undefined, validationState: ((_a = state.startValidation) === null || _a === void 0 ? void 0 : _a.isInvalid) ? 'invalid' : undefined, errorMessage: ((_c = (_b = state.startValidation) === null || _b === void 0 ? void 0 : _b.errors) === null || _c === void 0 ? void 0 : _c.join('\n')) || (0, i18n_1.i18n)('Value is incorrect.'), placeholderValue: (_d = props.placeholderValue) === null || _d === void 0 ? void 0 : _d.startOf('day'), label: (0, i18n_1.i18n)('From'), value: state.start, onUpdate: state.setStart })), (0, jsx_runtime_1.jsx)(RelativeDatePicker_1.RelativeDatePicker, Object.assign({}, fieldProps, { isDateUnavailable: isDateUnavailable ? (date) => isDateUnavailable(date, 'end') : undefined, validationState: ((_e = state.endValidation) === null || _e === void 0 ? void 0 : _e.isInvalid) ? 'invalid' : undefined, errorMessage: ((_g = (_f = state.endValidation) === null || _f === void 0 ? void 0 : _f.errors) === null || _g === void 0 ? void 0 : _g.join('\n')) || (0, i18n_1.i18n)('Value is incorrect.'), placeholderValue: (_h = props.placeholderValue) === null || _h === void 0 ? void 0 : _h.endOf('day'), label: (0, i18n_1.i18n)('To'), value: state.end, onUpdate: state.setEnd, roundUp: true }))] }), props.withApplyButton && !props.readOnly ? ((0, jsx_runtime_1.jsx)(uikit_1.Button, { disabled: state.isInvalid, size: props.size, onClick: () => {
29
+ const { isDateUnavailable, withHeader = false } = props;
30
+ return ((0, jsx_runtime_1.jsxs)("div", { className: b({ size: props.size }, props.className), style: props.style, children: [withHeader && ((0, jsx_runtime_1.jsxs)("div", { className: b('header'), children: [(0, jsx_runtime_1.jsx)(uikit_1.Text, { variant: props.size === 'xl' ? 'subheader-3' : 'subheader-2', children: (0, i18n_1.i18n)('Select the interval') }), (0, jsx_runtime_1.jsx)(PickerDoc_1.PickerDoc, { size: props.size, docs: props.docs, onStartUpdate: (start) => {
31
+ state.setStart({ type: 'relative', value: start });
32
+ }, onEndUpdate: (end) => {
33
+ state.setEnd({ type: 'relative', value: end });
34
+ } })] })), (0, jsx_runtime_1.jsxs)("div", { className: b('pickers'), children: [(0, jsx_runtime_1.jsx)(RelativeDatePicker_1.RelativeDatePicker, Object.assign({}, fieldProps, { isDateUnavailable: isDateUnavailable ? (date) => isDateUnavailable(date, 'start') : undefined, validationState: ((_a = state.startValidation) === null || _a === void 0 ? void 0 : _a.isInvalid) ? 'invalid' : undefined, errorMessage: ((_c = (_b = state.startValidation) === null || _b === void 0 ? void 0 : _b.errors) === null || _c === void 0 ? void 0 : _c.join('\n')) || (0, i18n_1.i18n)('Value is incorrect.'), placeholderValue: (_d = props.placeholderValue) === null || _d === void 0 ? void 0 : _d.startOf('day'), label: (0, i18n_1.i18n)('From'), value: state.start, onUpdate: state.setStart })), (0, jsx_runtime_1.jsx)(RelativeDatePicker_1.RelativeDatePicker, Object.assign({}, fieldProps, { isDateUnavailable: isDateUnavailable ? (date) => isDateUnavailable(date, 'end') : undefined, validationState: ((_e = state.endValidation) === null || _e === void 0 ? void 0 : _e.isInvalid) ? 'invalid' : undefined, errorMessage: ((_g = (_f = state.endValidation) === null || _f === void 0 ? void 0 : _f.errors) === null || _g === void 0 ? void 0 : _g.join('\n')) || (0, i18n_1.i18n)('Value is incorrect.'), placeholderValue: (_h = props.placeholderValue) === null || _h === void 0 ? void 0 : _h.endOf('day'), label: (0, i18n_1.i18n)('To'), value: state.end, onUpdate: state.setEnd, roundUp: true }))] }), props.withApplyButton && !props.readOnly ? ((0, jsx_runtime_1.jsx)(uikit_1.Button, { disabled: state.isInvalid, size: props.size, onClick: () => {
30
35
  state.applyValue();
31
36
  props.onApply();
32
37
  }, 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) => {
@@ -34,6 +39,6 @@ function PickerForm(props) {
34
39
  if (!props.withApplyButton) {
35
40
  props.onApply();
36
41
  }
37
- }, 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] }));
42
+ }, minValue: props.minValue, 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] }));
38
43
  }
39
44
  //# sourceMappingURL=PickerForm.js.map