@gravity-ui/date-components 3.2.4 → 3.3.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 (172) hide show
  1. package/README.md +89 -1
  2. package/dist/cjs/components/CalendarView/Calendar.css.map +1 -1
  3. package/dist/cjs/components/CalendarView/CalendarView.js +4 -2
  4. package/dist/cjs/components/CalendarView/CalendarView.js.map +1 -1
  5. package/dist/cjs/components/CalendarView/hooks/useCalendarCellProps.js +12 -10
  6. package/dist/cjs/components/CalendarView/hooks/useCalendarCellProps.js.map +1 -1
  7. package/dist/cjs/components/CalendarView/hooks/useCalendarGridProps.js +2 -1
  8. package/dist/cjs/components/CalendarView/hooks/useCalendarGridProps.js.map +1 -1
  9. package/dist/cjs/components/CalendarView/hooks/useCalendarProps.js +19 -9
  10. package/dist/cjs/components/CalendarView/hooks/useCalendarProps.js.map +1 -1
  11. package/dist/cjs/components/CalendarView/i18n/index.d.ts +8 -0
  12. package/dist/cjs/components/DateField/DateField.js +4 -1
  13. package/dist/cjs/components/DateField/DateField.js.map +1 -1
  14. package/dist/cjs/components/DateField/i18n/index.d.ts +8 -0
  15. package/dist/cjs/components/DateField/utils.d.ts +5 -1
  16. package/dist/cjs/components/DateField/utils.js +26 -22
  17. package/dist/cjs/components/DateField/utils.js.map +1 -1
  18. package/dist/cjs/components/DatePicker/hooks/useDatePickerProps.js +6 -2
  19. package/dist/cjs/components/DatePicker/hooks/useDatePickerProps.js.map +1 -1
  20. package/dist/cjs/components/DatePicker/i18n/index.d.ts +8 -0
  21. package/dist/cjs/components/RangeDateField/RangeDateField.d.ts +1 -1
  22. package/dist/cjs/components/RangeDateField/RangeDateField.js +4 -1
  23. package/dist/cjs/components/RangeDateField/RangeDateField.js.map +1 -1
  24. package/dist/cjs/components/RangeDateSelection/RangeDateSelection.js +3 -2
  25. package/dist/cjs/components/RangeDateSelection/RangeDateSelection.js.map +1 -1
  26. package/dist/cjs/components/RangeDateSelection/components/SelectionControl/SelectionControl.js +4 -3
  27. package/dist/cjs/components/RangeDateSelection/components/SelectionControl/SelectionControl.js.map +1 -1
  28. package/dist/cjs/components/RangeDateSelection/i18n/index.d.ts +8 -0
  29. package/dist/cjs/components/RelativeDateField/RelativeDateField.js +4 -1
  30. package/dist/cjs/components/RelativeDateField/RelativeDateField.js.map +1 -1
  31. package/dist/cjs/components/RelativeDatePicker/hooks/useRelativeDatePickerProps.js +7 -3
  32. package/dist/cjs/components/RelativeDatePicker/hooks/useRelativeDatePickerProps.js.map +1 -1
  33. package/dist/cjs/components/RelativeDatePicker/i18n/index.d.ts +8 -0
  34. package/dist/cjs/components/RelativeRangeDatePicker/RelativeRangeDatePicker.js +4 -1
  35. package/dist/cjs/components/RelativeRangeDatePicker/RelativeRangeDatePicker.js.map +1 -1
  36. package/dist/cjs/components/RelativeRangeDatePicker/components/Control/Control.js +18 -3
  37. package/dist/cjs/components/RelativeRangeDatePicker/components/Control/Control.js.map +1 -1
  38. package/dist/cjs/components/RelativeRangeDatePicker/components/Control/i18n/index.d.ts +8 -0
  39. package/dist/cjs/components/RelativeRangeDatePicker/components/PickerDialog/PickerDoc.css.map +1 -1
  40. package/dist/cjs/components/RelativeRangeDatePicker/components/PickerDialog/PickerDoc.js +11 -19
  41. package/dist/cjs/components/RelativeRangeDatePicker/components/PickerDialog/PickerDoc.js.map +1 -1
  42. package/dist/cjs/components/RelativeRangeDatePicker/components/PickerDialog/PickerForm.js +4 -3
  43. package/dist/cjs/components/RelativeRangeDatePicker/components/PickerDialog/PickerForm.js.map +1 -1
  44. package/dist/cjs/components/RelativeRangeDatePicker/components/PickerDialog/i18n/index.d.ts +10 -2
  45. package/dist/cjs/components/RelativeRangeDatePicker/components/PickerDialog/useRelativeRangeDatePickerDialogState.js +6 -3
  46. package/dist/cjs/components/RelativeRangeDatePicker/components/PickerDialog/useRelativeRangeDatePickerDialogState.js.map +1 -1
  47. package/dist/cjs/components/RelativeRangeDatePicker/components/Presets/Presets.css.map +1 -1
  48. package/dist/cjs/components/RelativeRangeDatePicker/components/Presets/Presets.js +4 -2
  49. package/dist/cjs/components/RelativeRangeDatePicker/components/Presets/Presets.js.map +1 -1
  50. package/dist/cjs/components/RelativeRangeDatePicker/components/Presets/defaultPresets.d.ts +5 -1
  51. package/dist/cjs/components/RelativeRangeDatePicker/components/Presets/defaultPresets.js +31 -75
  52. package/dist/cjs/components/RelativeRangeDatePicker/components/Presets/defaultPresets.js.map +1 -1
  53. package/dist/cjs/components/RelativeRangeDatePicker/components/Presets/i18n/index.d.ts +8 -0
  54. package/dist/cjs/components/RelativeRangeDatePicker/components/Presets/utils.d.ts +5 -2
  55. package/dist/cjs/components/RelativeRangeDatePicker/components/Presets/utils.js +5 -5
  56. package/dist/cjs/components/RelativeRangeDatePicker/components/Presets/utils.js.map +1 -1
  57. package/dist/cjs/components/RelativeRangeDatePicker/components/Zones/Zones.js +3 -8
  58. package/dist/cjs/components/RelativeRangeDatePicker/components/Zones/Zones.js.map +1 -1
  59. package/dist/cjs/components/RelativeRangeDatePicker/components/Zones/i18n/index.d.ts +8 -0
  60. package/dist/cjs/components/RelativeRangeDatePicker/hooks/useRelativeRangeDatePickerState.d.ts +0 -11
  61. package/dist/cjs/components/RelativeRangeDatePicker/hooks/useRelativeRangeDatePickerState.js +5 -32
  62. package/dist/cjs/components/RelativeRangeDatePicker/hooks/useRelativeRangeDatePickerState.js.map +1 -1
  63. package/dist/cjs/components/RelativeRangeDatePicker/i18n/en.json +0 -3
  64. package/dist/cjs/components/RelativeRangeDatePicker/i18n/index.d.ts +10 -2
  65. package/dist/cjs/components/RelativeRangeDatePicker/i18n/ru.json +0 -3
  66. package/dist/cjs/components/RelativeRangeDatePicker/utils.d.ts +5 -2
  67. package/dist/cjs/components/RelativeRangeDatePicker/utils.js +5 -4
  68. package/dist/cjs/components/RelativeRangeDatePicker/utils.js.map +1 -1
  69. package/dist/cjs/components/types/helpers.d.ts +1 -0
  70. package/dist/cjs/components/types/helpers.js +3 -0
  71. package/dist/cjs/components/types/helpers.js.map +1 -0
  72. package/dist/cjs/components/types/index.d.ts +1 -0
  73. package/dist/cjs/components/types/index.js.map +1 -1
  74. package/dist/cjs/components/utils/dates.d.ts +1 -1
  75. package/dist/cjs/components/utils/dates.js +2 -2
  76. package/dist/cjs/components/utils/dates.js.map +1 -1
  77. package/dist/cjs/components/utils/validation/datePicker.d.ts +3 -1
  78. package/dist/cjs/components/utils/validation/datePicker.js +4 -4
  79. package/dist/cjs/components/utils/validation/datePicker.js.map +1 -1
  80. package/dist/cjs/components/utils/validation/i18n/en.json +6 -1
  81. package/dist/cjs/components/utils/validation/i18n/index.d.ts +10 -2
  82. package/dist/cjs/components/utils/validation/i18n/ru.json +7 -1
  83. package/dist/cjs/components/utils/validation/relativeRangeDatePicker.d.ts +15 -0
  84. package/dist/cjs/components/utils/validation/relativeRangeDatePicker.js +34 -0
  85. package/dist/cjs/components/utils/validation/relativeRangeDatePicker.js.map +1 -0
  86. package/dist/cjs/package.json +1 -1
  87. package/dist/esm/components/CalendarView/Calendar.css.map +1 -1
  88. package/dist/esm/components/CalendarView/CalendarView.js +5 -3
  89. package/dist/esm/components/CalendarView/CalendarView.js.map +1 -1
  90. package/dist/esm/components/CalendarView/hooks/useCalendarCellProps.js +12 -10
  91. package/dist/esm/components/CalendarView/hooks/useCalendarCellProps.js.map +1 -1
  92. package/dist/esm/components/CalendarView/hooks/useCalendarGridProps.js +3 -2
  93. package/dist/esm/components/CalendarView/hooks/useCalendarGridProps.js.map +1 -1
  94. package/dist/esm/components/CalendarView/hooks/useCalendarProps.js +20 -10
  95. package/dist/esm/components/CalendarView/hooks/useCalendarProps.js.map +1 -1
  96. package/dist/esm/components/CalendarView/i18n/index.d.ts +8 -0
  97. package/dist/esm/components/DateField/DateField.js +4 -1
  98. package/dist/esm/components/DateField/DateField.js.map +1 -1
  99. package/dist/esm/components/DateField/i18n/index.d.ts +8 -0
  100. package/dist/esm/components/DateField/utils.d.ts +5 -1
  101. package/dist/esm/components/DateField/utils.js +26 -22
  102. package/dist/esm/components/DateField/utils.js.map +1 -1
  103. package/dist/esm/components/DatePicker/hooks/useDatePickerProps.js +6 -2
  104. package/dist/esm/components/DatePicker/hooks/useDatePickerProps.js.map +1 -1
  105. package/dist/esm/components/DatePicker/i18n/index.d.ts +8 -0
  106. package/dist/esm/components/RangeDateField/RangeDateField.d.ts +1 -1
  107. package/dist/esm/components/RangeDateField/RangeDateField.js +4 -1
  108. package/dist/esm/components/RangeDateField/RangeDateField.js.map +1 -1
  109. package/dist/esm/components/RangeDateSelection/RangeDateSelection.js +3 -2
  110. package/dist/esm/components/RangeDateSelection/RangeDateSelection.js.map +1 -1
  111. package/dist/esm/components/RangeDateSelection/components/SelectionControl/SelectionControl.js +4 -3
  112. package/dist/esm/components/RangeDateSelection/components/SelectionControl/SelectionControl.js.map +1 -1
  113. package/dist/esm/components/RangeDateSelection/i18n/index.d.ts +8 -0
  114. package/dist/esm/components/RelativeDateField/RelativeDateField.js +4 -1
  115. package/dist/esm/components/RelativeDateField/RelativeDateField.js.map +1 -1
  116. package/dist/esm/components/RelativeDatePicker/hooks/useRelativeDatePickerProps.js +7 -3
  117. package/dist/esm/components/RelativeDatePicker/hooks/useRelativeDatePickerProps.js.map +1 -1
  118. package/dist/esm/components/RelativeDatePicker/i18n/index.d.ts +8 -0
  119. package/dist/esm/components/RelativeRangeDatePicker/RelativeRangeDatePicker.js +4 -1
  120. package/dist/esm/components/RelativeRangeDatePicker/RelativeRangeDatePicker.js.map +1 -1
  121. package/dist/esm/components/RelativeRangeDatePicker/components/Control/Control.js +18 -3
  122. package/dist/esm/components/RelativeRangeDatePicker/components/Control/Control.js.map +1 -1
  123. package/dist/esm/components/RelativeRangeDatePicker/components/Control/i18n/index.d.ts +8 -0
  124. package/dist/esm/components/RelativeRangeDatePicker/components/PickerDialog/PickerDoc.css.map +1 -1
  125. package/dist/esm/components/RelativeRangeDatePicker/components/PickerDialog/PickerDoc.js +11 -19
  126. package/dist/esm/components/RelativeRangeDatePicker/components/PickerDialog/PickerDoc.js.map +1 -1
  127. package/dist/esm/components/RelativeRangeDatePicker/components/PickerDialog/PickerForm.js +4 -3
  128. package/dist/esm/components/RelativeRangeDatePicker/components/PickerDialog/PickerForm.js.map +1 -1
  129. package/dist/esm/components/RelativeRangeDatePicker/components/PickerDialog/i18n/index.d.ts +10 -2
  130. package/dist/esm/components/RelativeRangeDatePicker/components/PickerDialog/useRelativeRangeDatePickerDialogState.js +5 -2
  131. package/dist/esm/components/RelativeRangeDatePicker/components/PickerDialog/useRelativeRangeDatePickerDialogState.js.map +1 -1
  132. package/dist/esm/components/RelativeRangeDatePicker/components/Presets/Presets.css.map +1 -1
  133. package/dist/esm/components/RelativeRangeDatePicker/components/Presets/Presets.js +4 -2
  134. package/dist/esm/components/RelativeRangeDatePicker/components/Presets/Presets.js.map +1 -1
  135. package/dist/esm/components/RelativeRangeDatePicker/components/Presets/defaultPresets.d.ts +5 -1
  136. package/dist/esm/components/RelativeRangeDatePicker/components/Presets/defaultPresets.js +30 -75
  137. package/dist/esm/components/RelativeRangeDatePicker/components/Presets/defaultPresets.js.map +1 -1
  138. package/dist/esm/components/RelativeRangeDatePicker/components/Presets/i18n/index.d.ts +8 -0
  139. package/dist/esm/components/RelativeRangeDatePicker/components/Presets/utils.d.ts +5 -2
  140. package/dist/esm/components/RelativeRangeDatePicker/components/Presets/utils.js +5 -5
  141. package/dist/esm/components/RelativeRangeDatePicker/components/Presets/utils.js.map +1 -1
  142. package/dist/esm/components/RelativeRangeDatePicker/components/Zones/Zones.js +3 -8
  143. package/dist/esm/components/RelativeRangeDatePicker/components/Zones/Zones.js.map +1 -1
  144. package/dist/esm/components/RelativeRangeDatePicker/components/Zones/i18n/index.d.ts +8 -0
  145. package/dist/esm/components/RelativeRangeDatePicker/hooks/useRelativeRangeDatePickerState.d.ts +0 -11
  146. package/dist/esm/components/RelativeRangeDatePicker/hooks/useRelativeRangeDatePickerState.js +5 -31
  147. package/dist/esm/components/RelativeRangeDatePicker/hooks/useRelativeRangeDatePickerState.js.map +1 -1
  148. package/dist/esm/components/RelativeRangeDatePicker/i18n/en.json +0 -3
  149. package/dist/esm/components/RelativeRangeDatePicker/i18n/index.d.ts +10 -2
  150. package/dist/esm/components/RelativeRangeDatePicker/i18n/ru.json +0 -3
  151. package/dist/esm/components/RelativeRangeDatePicker/utils.d.ts +5 -2
  152. package/dist/esm/components/RelativeRangeDatePicker/utils.js +5 -4
  153. package/dist/esm/components/RelativeRangeDatePicker/utils.js.map +1 -1
  154. package/dist/esm/components/types/helpers.d.ts +1 -0
  155. package/dist/esm/components/types/helpers.js +2 -0
  156. package/dist/esm/components/types/helpers.js.map +1 -0
  157. package/dist/esm/components/types/index.d.ts +1 -0
  158. package/dist/esm/components/types/index.js.map +1 -1
  159. package/dist/esm/components/utils/dates.d.ts +1 -1
  160. package/dist/esm/components/utils/dates.js +2 -2
  161. package/dist/esm/components/utils/dates.js.map +1 -1
  162. package/dist/esm/components/utils/validation/datePicker.d.ts +3 -1
  163. package/dist/esm/components/utils/validation/datePicker.js +4 -4
  164. package/dist/esm/components/utils/validation/datePicker.js.map +1 -1
  165. package/dist/esm/components/utils/validation/i18n/en.json +6 -1
  166. package/dist/esm/components/utils/validation/i18n/index.d.ts +10 -2
  167. package/dist/esm/components/utils/validation/i18n/ru.json +7 -1
  168. package/dist/esm/components/utils/validation/relativeRangeDatePicker.d.ts +15 -0
  169. package/dist/esm/components/utils/validation/relativeRangeDatePicker.js +31 -0
  170. package/dist/esm/components/utils/validation/relativeRangeDatePicker.js.map +1 -0
  171. package/dist/esm/package.json +1 -1
  172. package/package.json +27 -24
@@ -1,15 +1,18 @@
1
1
  import type { DateTime } from '@gravity-ui/date-utils';
2
+ import type { ExtractFunctionType } from "../../../types/index.js";
2
3
  import type { Preset } from "./defaultPresets.js";
3
- export declare function getPresetTitle(start: string, end: string, presets?: Preset[]): string;
4
+ import { i18n } from "./i18n/index.js";
5
+ export declare function getPresetTitle(start: string, end: string, presets?: Preset[], t?: ExtractFunctionType<typeof i18n>): import("react").ReactNode;
4
6
  export declare function filterPresets(presets: Preset[], minValue?: DateTime): Preset[];
5
7
  export interface PresetTab {
6
8
  id: string;
7
9
  title: string;
8
10
  presets: Preset[];
9
11
  }
10
- export declare function getDefaultPresetTabs({ withTime, minValue, }: {
12
+ export declare function getDefaultPresetTabs({ withTime, minValue, t, }: {
11
13
  minValue?: DateTime;
12
14
  withTime?: boolean;
15
+ t?: (key: 'Main' | 'Other') => string;
13
16
  }): PresetTab[];
14
17
  export declare function filterPresetTabs(tabs: PresetTab[], { minValue }?: {
15
18
  minValue?: DateTime;
@@ -20,7 +20,7 @@ const countUnit = {
20
20
  M: 'Last {count} month',
21
21
  y: 'Last {count} year',
22
22
  };
23
- export function getPresetTitle(start, end, presets = allPresets) {
23
+ export function getPresetTitle(start, end, presets = allPresets, t = i18n) {
24
24
  const startText = start.replace(/\s+/g, '');
25
25
  const endText = end.replace(/\s+/g, '');
26
26
  for (const preset of presets) {
@@ -34,7 +34,7 @@ export function getPresetTitle(start, end, presets = allPresets) {
34
34
  const [, count, unit] = match;
35
35
  if (isDateUnit(unit)) {
36
36
  const template = Number(count) === 1 ? oneUnit[unit] : countUnit[unit];
37
- return i18n(template, { count });
37
+ return t(template, { count });
38
38
  }
39
39
  }
40
40
  }
@@ -59,11 +59,11 @@ export function filterPresets(presets, minValue) {
59
59
  return true;
60
60
  });
61
61
  }
62
- export function getDefaultPresetTabs({ withTime, minValue, }) {
62
+ export function getDefaultPresetTabs({ withTime, minValue, t = i18n, }) {
63
63
  const tabs = [];
64
64
  const mainTab = {
65
65
  id: 'main',
66
- title: i18n('Main'),
66
+ title: t('Main'),
67
67
  presets: [],
68
68
  };
69
69
  const mainPresets = DEFAULT_DATE_PRESETS;
@@ -76,7 +76,7 @@ export function getDefaultPresetTabs({ withTime, minValue, }) {
76
76
  }
77
77
  const otherTab = {
78
78
  id: 'other',
79
- title: i18n('Other'),
79
+ title: t('Other'),
80
80
  presets: filterPresets(DEFAULT_OTHERS_PRESETS, minValue),
81
81
  };
82
82
  if (otherTab.presets.length > 0) {
@@ -1 +1 @@
1
- {"version":3,"file":"utils.js","sourceRoot":"../../../../../../src","sources":["components/RelativeRangeDatePicker/components/Presets/utils.ts"],"names":[],"mappings":"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","sourcesContent":["import {dateTimeParse} from '@gravity-ui/date-utils';\nimport type {DateTime} from '@gravity-ui/date-utils';\n\nimport {\n DEFAULT_DATE_PRESETS,\n DEFAULT_OTHERS_PRESETS,\n DEFAULT_TIME_PRESETS,\n allPresets,\n} from './defaultPresets';\nimport type {Preset} from './defaultPresets';\nimport {i18n} from './i18n';\n\nconst lastRe = /^now-(\\d+)([smhdwMy])$/;\n\nconst oneUnit = {\n s: 'Last second',\n m: 'Last minute',\n h: 'Last hour',\n d: 'Last day',\n w: 'Last week',\n M: 'Last month',\n y: 'Last year',\n} as const;\n\nconst countUnit = {\n s: 'Last {count} second',\n m: 'Last {count} minute',\n h: 'Last {count} hour',\n d: 'Last {count} day',\n w: 'Last {count} week',\n M: 'Last {count} month',\n y: 'Last {count} year',\n} as const;\n\nexport function getPresetTitle(start: string, end: string, presets: Preset[] = allPresets) {\n const startText = start.replace(/\\s+/g, '');\n const endText = end.replace(/\\s+/g, '');\n\n for (const preset of presets) {\n if (preset.from === startText && preset.to === endText) {\n return preset.title;\n }\n }\n\n if (end === 'now') {\n const match = lastRe.exec(startText);\n if (match) {\n const [, count, unit] = match;\n if (isDateUnit(unit)) {\n const template = Number(count) === 1 ? oneUnit[unit] : countUnit[unit];\n return i18n(template, {count});\n }\n }\n }\n\n return startText + ' — ' + endText;\n}\n\nfunction isDateUnit(value: string): value is 's' | 'm' | 'h' | 'd' | 'w' | 'M' | 'y' {\n return ['s', 'm', 'h', 'd', 'w', 'M', 'y'].includes(value);\n}\n\nexport function filterPresets(presets: Preset[], minValue?: DateTime) {\n return presets.filter((preset) => {\n const from = dateTimeParse(preset.from);\n const to = dateTimeParse(preset.to, {roundUp: true});\n\n if (!from || !to) {\n return false;\n }\n\n if (to.isBefore(from)) {\n return false;\n }\n\n if (minValue && from.isBefore(minValue)) {\n return false;\n }\n\n return true;\n });\n}\n\nexport interface PresetTab {\n id: string;\n title: string;\n presets: Preset[];\n}\n\nexport function getDefaultPresetTabs({\n withTime,\n minValue,\n}: {\n minValue?: DateTime;\n withTime?: boolean;\n}) {\n const tabs: PresetTab[] = [];\n\n const mainTab: PresetTab = {\n id: 'main',\n title: i18n('Main'),\n presets: [],\n };\n const mainPresets = DEFAULT_DATE_PRESETS;\n if (withTime) {\n mainPresets.unshift(...DEFAULT_TIME_PRESETS);\n }\n mainTab.presets = filterPresets(mainPresets, minValue);\n\n if (mainTab.presets.length > 0) {\n tabs.push(mainTab);\n }\n\n const otherTab: PresetTab = {\n id: 'other',\n title: i18n('Other'),\n presets: filterPresets(DEFAULT_OTHERS_PRESETS, minValue),\n };\n\n if (otherTab.presets.length > 0) {\n tabs.push(otherTab);\n }\n\n return tabs;\n}\n\nexport function filterPresetTabs(tabs: PresetTab[], {minValue}: {minValue?: DateTime} = {}) {\n return tabs.reduce<PresetTab[]>((acc, tab) => {\n const presets = filterPresets(tab.presets, minValue);\n if (presets.length) {\n acc.push({\n ...tab,\n presets,\n });\n }\n return acc;\n }, []);\n}\n"]}
1
+ {"version":3,"file":"utils.js","sourceRoot":"../../../../../../src","sources":["components/RelativeRangeDatePicker/components/Presets/utils.ts"],"names":[],"mappings":"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","sourcesContent":["import {dateTimeParse} from '@gravity-ui/date-utils';\nimport type {DateTime} from '@gravity-ui/date-utils';\n\nimport type {ExtractFunctionType} from '../../../types';\n\nimport {\n DEFAULT_DATE_PRESETS,\n DEFAULT_OTHERS_PRESETS,\n DEFAULT_TIME_PRESETS,\n allPresets,\n} from './defaultPresets';\nimport type {Preset} from './defaultPresets';\nimport {i18n} from './i18n';\n\nconst lastRe = /^now-(\\d+)([smhdwMy])$/;\n\nconst oneUnit = {\n s: 'Last second',\n m: 'Last minute',\n h: 'Last hour',\n d: 'Last day',\n w: 'Last week',\n M: 'Last month',\n y: 'Last year',\n} as const;\n\nconst countUnit = {\n s: 'Last {count} second',\n m: 'Last {count} minute',\n h: 'Last {count} hour',\n d: 'Last {count} day',\n w: 'Last {count} week',\n M: 'Last {count} month',\n y: 'Last {count} year',\n} as const;\n\nexport function getPresetTitle(\n start: string,\n end: string,\n presets: Preset[] = allPresets,\n t: ExtractFunctionType<typeof i18n> = i18n,\n) {\n const startText = start.replace(/\\s+/g, '');\n const endText = end.replace(/\\s+/g, '');\n\n for (const preset of presets) {\n if (preset.from === startText && preset.to === endText) {\n return preset.title;\n }\n }\n\n if (end === 'now') {\n const match = lastRe.exec(startText);\n if (match) {\n const [, count, unit] = match;\n if (isDateUnit(unit)) {\n const template = Number(count) === 1 ? oneUnit[unit] : countUnit[unit];\n return t(template, {count});\n }\n }\n }\n\n return startText + ' — ' + endText;\n}\n\nfunction isDateUnit(value: string): value is 's' | 'm' | 'h' | 'd' | 'w' | 'M' | 'y' {\n return ['s', 'm', 'h', 'd', 'w', 'M', 'y'].includes(value);\n}\n\nexport function filterPresets(presets: Preset[], minValue?: DateTime) {\n return presets.filter((preset) => {\n const from = dateTimeParse(preset.from);\n const to = dateTimeParse(preset.to, {roundUp: true});\n\n if (!from || !to) {\n return false;\n }\n\n if (to.isBefore(from)) {\n return false;\n }\n\n if (minValue && from.isBefore(minValue)) {\n return false;\n }\n\n return true;\n });\n}\n\nexport interface PresetTab {\n id: string;\n title: string;\n presets: Preset[];\n}\n\nexport function getDefaultPresetTabs({\n withTime,\n minValue,\n t = i18n,\n}: {\n minValue?: DateTime;\n withTime?: boolean;\n t?: (key: 'Main' | 'Other') => string;\n}) {\n const tabs: PresetTab[] = [];\n\n const mainTab: PresetTab = {\n id: 'main',\n title: t('Main'),\n presets: [],\n };\n const mainPresets = DEFAULT_DATE_PRESETS;\n if (withTime) {\n mainPresets.unshift(...DEFAULT_TIME_PRESETS);\n }\n mainTab.presets = filterPresets(mainPresets, minValue);\n\n if (mainTab.presets.length > 0) {\n tabs.push(mainTab);\n }\n\n const otherTab: PresetTab = {\n id: 'other',\n title: t('Other'),\n presets: filterPresets(DEFAULT_OTHERS_PRESETS, minValue),\n };\n\n if (otherTab.presets.length > 0) {\n tabs.push(otherTab);\n }\n\n return tabs;\n}\n\nexport function filterPresetTabs(tabs: PresetTab[], {minValue}: {minValue?: DateTime} = {}) {\n return tabs.reduce<PresetTab[]>((acc, tab) => {\n const presets = filterPresets(tab.presets, minValue);\n if (presets.length) {\n acc.push({\n ...tab,\n presets,\n });\n }\n return acc;\n }, []);\n}\n"]}
@@ -26,31 +26,26 @@ zones.unshift({
26
26
  });
27
27
  zones.unshift({
28
28
  value: 'system',
29
- get content() {
30
- return i18n('system');
31
- },
32
29
  });
33
30
  zones.unshift({
34
31
  value: 'default',
35
- get content() {
36
- return i18n('default');
37
- },
38
32
  });
39
33
  const b = block('relative-range-date-picker-zones');
40
34
  export function Zones(props) {
41
35
  const timeZone = normalizeTimeZone(props.value);
42
36
  const size = props.isMobile ? 'xl' : props.size;
37
+ const { t } = i18n.useTranslation();
43
38
  return (_jsx(Select, { disabled: props.disabled, value: [timeZone], options: zones, size: size, onUpdate: (v) => {
44
39
  const tz = v[0];
45
40
  if (tz) {
46
41
  props.onUpdate(tz);
47
42
  }
48
43
  }, width: "max", renderControl: (controlProps) => {
49
- const value = timeZone === 'system' || timeZone === 'default' ? i18n(timeZone) : timeZone;
44
+ const value = timeZone === 'system' || timeZone === 'default' ? t(timeZone) : timeZone;
50
45
  return (_jsxs(Button, { ref: controlProps.ref, onClick: controlProps.triggerProps.onClick, view: "flat-secondary", width: "max", pin: "clear-clear", size: size, disabled: props.disabled, "aria-haspopup": "listbox", "aria-expanded": controlProps.open, onKeyDown: controlProps.triggerProps.onKeyDown, className: b('control'), children: [`${value} (${getTimeZoneOffset(timeZone)})`, _jsx(Icon, { className: b('control-icon'), data: ChevronRight, size: props.isMobile ? 20 : 16 })] }));
51
46
  }, renderOption: ({ value, content }) => {
52
47
  const v = content !== null && content !== void 0 ? content : value;
53
- return (_jsxs("span", { className: b('item'), children: [_jsxs("span", { className: b('item-title'), title: value, children: [v, "\u00A0"] }), _jsx(Text, { color: "secondary", children: getTimeZoneOffset(value) })] }));
48
+ return (_jsxs("span", { className: b('item'), children: [_jsxs("span", { className: b('item-title'), title: value, children: [value === 'system' || value === 'default' ? t(value) : v, "\u00A0"] }), _jsx(Text, { color: "secondary", children: getTimeZoneOffset(value) })] }));
54
49
  }, filterable: true }));
55
50
  }
56
51
  //# sourceMappingURL=Zones.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"Zones.js","sourceRoot":"../../../../../../src","sources":["components/RelativeRangeDatePicker/components/Zones/Zones.tsx"],"names":[],"mappings":"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","sourcesContent":["'use client';\n\nimport {getTimeZonesList} from '@gravity-ui/date-utils';\nimport {ChevronRight} from '@gravity-ui/icons';\nimport {Button, Icon, Select, Text} from '@gravity-ui/uikit';\nimport type {SelectOption, SelectOptionGroup} from '@gravity-ui/uikit';\n\nimport {block} from '../../../../utils/cn';\nimport {getTimeZoneOffset, normalizeTimeZone} from '../../utils';\n\nimport {i18n} from './i18n';\n\nimport './Zones.scss';\n\nconst groups: Record<string, {label: string; options: SelectOption[]}> = {};\n\nconst zones = getTimeZonesList().reduce<(SelectOption | SelectOptionGroup)[]>((opts, value) => {\n const [groupName] = value.split('/');\n if (groupName) {\n let group = groups[groupName];\n if (!group) {\n group = {label: groupName, options: []};\n groups[groupName] = group;\n opts.push(group);\n }\n group.options.push({value});\n }\n return opts;\n}, []);\n\nzones.unshift({\n value: 'UTC',\n});\n\nzones.unshift({\n value: 'system',\n get content() {\n return i18n('system');\n },\n});\n\nzones.unshift({\n value: 'default',\n get content() {\n return i18n('default');\n },\n});\n\nconst b = block('relative-range-date-picker-zones');\n\nexport interface ZonesProps {\n value: string;\n onUpdate: (timeZone: string) => void;\n size?: 's' | 'm' | 'l' | 'xl';\n isMobile?: boolean;\n disabled?: boolean;\n}\n\nexport function Zones(props: ZonesProps) {\n const timeZone = normalizeTimeZone(props.value);\n const size = props.isMobile ? 'xl' : props.size;\n return (\n <Select\n disabled={props.disabled}\n value={[timeZone]}\n options={zones}\n size={size}\n onUpdate={(v) => {\n const tz = v[0];\n if (tz) {\n props.onUpdate(tz);\n }\n }}\n width=\"max\"\n renderControl={(controlProps) => {\n const value =\n timeZone === 'system' || timeZone === 'default' ? i18n(timeZone) : timeZone;\n return (\n <Button\n ref={controlProps.ref as React.Ref<HTMLButtonElement>}\n onClick={controlProps.triggerProps.onClick}\n view=\"flat-secondary\"\n width=\"max\"\n pin=\"clear-clear\"\n size={size}\n disabled={props.disabled}\n aria-haspopup=\"listbox\"\n aria-expanded={controlProps.open}\n onKeyDown={controlProps.triggerProps.onKeyDown}\n className={b('control')}\n >\n {`${value} (${getTimeZoneOffset(timeZone)})`}\n <Icon\n className={b('control-icon')}\n data={ChevronRight}\n size={props.isMobile ? 20 : 16}\n />\n </Button>\n );\n }}\n renderOption={({value, content}) => {\n const v = content ?? value;\n return (\n <span className={b('item')}>\n <span className={b('item-title')} title={value}>\n {v}&nbsp;\n </span>\n <Text color=\"secondary\">{getTimeZoneOffset(value)}</Text>\n </span>\n );\n }}\n filterable\n />\n );\n}\n"]}
1
+ {"version":3,"file":"Zones.js","sourceRoot":"../../../../../../src","sources":["components/RelativeRangeDatePicker/components/Zones/Zones.tsx"],"names":[],"mappings":"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","sourcesContent":["'use client';\n\nimport {getTimeZonesList} from '@gravity-ui/date-utils';\nimport {ChevronRight} from '@gravity-ui/icons';\nimport {Button, Icon, Select, Text} from '@gravity-ui/uikit';\nimport type {SelectOption, SelectOptionGroup} from '@gravity-ui/uikit';\n\nimport {block} from '../../../../utils/cn';\nimport {getTimeZoneOffset, normalizeTimeZone} from '../../utils';\n\nimport {i18n} from './i18n';\n\nimport './Zones.scss';\n\nconst groups: Record<string, {label: string; options: SelectOption[]}> = {};\n\nconst zones = getTimeZonesList().reduce<(SelectOption | SelectOptionGroup)[]>((opts, value) => {\n const [groupName] = value.split('/');\n if (groupName) {\n let group = groups[groupName];\n if (!group) {\n group = {label: groupName, options: []};\n groups[groupName] = group;\n opts.push(group);\n }\n group.options.push({value});\n }\n return opts;\n}, []);\n\nzones.unshift({\n value: 'UTC',\n});\n\nzones.unshift({\n value: 'system',\n});\n\nzones.unshift({\n value: 'default',\n});\n\nconst b = block('relative-range-date-picker-zones');\n\nexport interface ZonesProps {\n value: string;\n onUpdate: (timeZone: string) => void;\n size?: 's' | 'm' | 'l' | 'xl';\n isMobile?: boolean;\n disabled?: boolean;\n}\n\nexport function Zones(props: ZonesProps) {\n const timeZone = normalizeTimeZone(props.value);\n const size = props.isMobile ? 'xl' : props.size;\n const {t} = i18n.useTranslation();\n return (\n <Select\n disabled={props.disabled}\n value={[timeZone]}\n options={zones}\n size={size}\n onUpdate={(v) => {\n const tz = v[0];\n if (tz) {\n props.onUpdate(tz);\n }\n }}\n width=\"max\"\n renderControl={(controlProps) => {\n const value =\n timeZone === 'system' || timeZone === 'default' ? t(timeZone) : timeZone;\n return (\n <Button\n ref={controlProps.ref as React.Ref<HTMLButtonElement>}\n onClick={controlProps.triggerProps.onClick}\n view=\"flat-secondary\"\n width=\"max\"\n pin=\"clear-clear\"\n size={size}\n disabled={props.disabled}\n aria-haspopup=\"listbox\"\n aria-expanded={controlProps.open}\n onKeyDown={controlProps.triggerProps.onKeyDown}\n className={b('control')}\n >\n {`${value} (${getTimeZoneOffset(timeZone)})`}\n <Icon\n className={b('control-icon')}\n data={ChevronRight}\n size={props.isMobile ? 20 : 16}\n />\n </Button>\n );\n }}\n renderOption={({value, content}) => {\n const v = content ?? value;\n return (\n <span className={b('item')}>\n <span className={b('item-title')} title={value}>\n {value === 'system' || value === 'default' ? t(value) : v}&nbsp;\n </span>\n <Text color=\"secondary\">{getTimeZoneOffset(value)}</Text>\n </span>\n );\n }}\n filterable\n />\n );\n}\n"]}
@@ -1,4 +1,12 @@
1
1
  export declare const i18n: ((key: "default" | "system", params?: import("@gravity-ui/i18n").Params) => string) & {
2
+ Translation: import("react").ComponentType<{
3
+ children: (props: {
4
+ t: (key: "default" | "system", params?: import("@gravity-ui/i18n").Params) => string;
5
+ }) => React.ReactNode;
6
+ }>;
7
+ useTranslation: () => {
8
+ t: (key: "default" | "system", params?: import("@gravity-ui/i18n").Params) => string;
9
+ };
2
10
  keysetData: {
3
11
  "g-date-relative-range-date-picker-zones": Record<"default" | "system", import("@gravity-ui/i18n").KeyData>;
4
12
  };
@@ -25,14 +25,3 @@ export interface RelativeRangeDatePickerStateOptions {
25
25
  allowNullableValues?: boolean;
26
26
  }
27
27
  export declare function useRelativeRangeDatePickerState(props: RelativeRangeDatePickerStateOptions): RelativeRangeDatePickerState;
28
- export declare function getRangeValidationResult(value: RelativeRangeDatePickerValue | null, allowNullableValues: boolean | undefined, minValue: DateTime | undefined, maxValue: DateTime | undefined, isDateUnavailable: ((v: DateTime, endpoint: 'start' | 'end') => boolean) | undefined, timeZone: string): {
29
- isInvalid: boolean;
30
- errors: never[];
31
- startValidationResult?: undefined;
32
- endValidationResult?: undefined;
33
- } | {
34
- isInvalid: boolean;
35
- startValidationResult: import("../../utils/validation/datePicker.js").ValidationResult;
36
- endValidationResult: import("../../utils/validation/datePicker.js").ValidationResult;
37
- errors: string[];
38
- };
@@ -1,19 +1,20 @@
1
1
  import React from 'react';
2
- import { dateTimeParse } from '@gravity-ui/date-utils';
3
2
  import { useControlledState } from '@gravity-ui/uikit';
4
- import { getValidationResult } from "../../utils/validation/datePicker.js";
5
- import { i18n } from "../i18n/index.js";
3
+ import { i18n } from "../../utils/validation/i18n/index.js";
4
+ import { getRangeValidationResult } from "../../utils/validation/relativeRangeDatePicker.js";
6
5
  export function useRelativeRangeDatePickerState(props) {
7
6
  var _a, _b;
8
7
  const [value, setValue] = useControlledState(props.value, (_a = props.defaultValue) !== null && _a !== void 0 ? _a : null);
9
8
  const [timeZone, setTimeZone] = useControlledState(props.timeZone, (_b = props.defaultTimeZone) !== null && _b !== void 0 ? _b : 'default', props.onUpdateTimeZone);
10
- const validation = React.useMemo(() => getRangeValidationResult(value, props.allowNullableValues, props.minValue, props.maxValue, props.isDateUnavailable, timeZone), [
9
+ const { t } = i18n.useTranslation();
10
+ const validation = React.useMemo(() => getRangeValidationResult(value, props.allowNullableValues, props.minValue, props.maxValue, props.isDateUnavailable, timeZone, t), [
11
11
  value,
12
12
  props.allowNullableValues,
13
13
  props.isDateUnavailable,
14
14
  props.maxValue,
15
15
  props.minValue,
16
16
  timeZone,
17
+ t,
17
18
  ]);
18
19
  return Object.assign({ value,
19
20
  timeZone,
@@ -26,31 +27,4 @@ export function useRelativeRangeDatePickerState(props) {
26
27
  }
27
28
  } }, validation);
28
29
  }
29
- export function getRangeValidationResult(value, allowNullableValues, minValue, maxValue, isDateUnavailable, timeZone) {
30
- if (!value) {
31
- return { isInvalid: false, errors: [] };
32
- }
33
- const startDate = value.start ? dateTimeParse(value.start.value, { timeZone }) : null;
34
- const endDate = value.end ? dateTimeParse(value.end.value, { timeZone, roundUp: true }) : null;
35
- const startValidationResult = getValidationResult(startDate, minValue, maxValue, isDateUnavailable ? (date) => isDateUnavailable(date, 'start') : undefined, timeZone, i18n('"From"'));
36
- if (!startDate && !allowNullableValues) {
37
- startValidationResult.isInvalid = true;
38
- startValidationResult.errors.push(i18n('"From" is required.'));
39
- }
40
- const endValidationResult = getValidationResult(endDate, minValue, maxValue, isDateUnavailable ? (date) => isDateUnavailable(date, 'end') : undefined, timeZone, i18n('"To"'));
41
- if (!endDate && !allowNullableValues) {
42
- endValidationResult.isInvalid = true;
43
- endValidationResult.errors.push(i18n('"To" is required.'));
44
- }
45
- if (startDate && endDate && endDate.isBefore(startDate)) {
46
- startValidationResult.isInvalid = true;
47
- startValidationResult.errors.push(i18n(`"From" can't be after "To".`));
48
- }
49
- return {
50
- isInvalid: startValidationResult.isInvalid || endValidationResult.isInvalid,
51
- startValidationResult,
52
- endValidationResult,
53
- errors: startValidationResult.errors.concat(endValidationResult.errors),
54
- };
55
- }
56
30
  //# sourceMappingURL=useRelativeRangeDatePickerState.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"useRelativeRangeDatePickerState.js","sourceRoot":"../../../../../src","sources":["components/RelativeRangeDatePicker/hooks/useRelativeRangeDatePickerState.ts"],"names":[],"mappings":"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","sourcesContent":["import React from 'react';\n\nimport {dateTimeParse} from '@gravity-ui/date-utils';\nimport type {DateTime} from '@gravity-ui/date-utils';\nimport {useControlledState} from '@gravity-ui/uikit';\n\nimport type {Value} from '../../RelativeDatePicker';\nimport type {RangeValue} from '../../types';\nimport {getValidationResult} from '../../utils/validation/datePicker';\nimport {i18n} from '../i18n';\n\nexport type RelativeRangeDatePickerValue = RangeValue<Value | null>;\n\nexport interface RelativeRangeDatePickerState {\n value: RelativeRangeDatePickerValue | null;\n timeZone: string;\n setValue: (value: RelativeRangeDatePickerValue | null, timeZone: string) => void;\n isInvalid: boolean;\n errors: string[];\n}\n\nexport interface RelativeRangeDatePickerStateOptions {\n value?: RelativeRangeDatePickerValue | null;\n defaultValue?: RelativeRangeDatePickerValue;\n onUpdate?: (value: RelativeRangeDatePickerValue | null, timeZone: string) => void;\n timeZone?: string;\n defaultTimeZone?: string;\n onUpdateTimeZone?: (timeZone: string) => void;\n /** The minimum allowed date that a user may select. */\n minValue?: DateTime;\n /** The maximum allowed date that a user may select. */\n maxValue?: DateTime;\n /** Callback that is called for each date of the calendar. If it returns true, then the date is unavailable. */\n isDateUnavailable?: (date: DateTime, endpoint: 'start' | 'end') => boolean;\n allowNullableValues?: boolean;\n}\n\nexport function useRelativeRangeDatePickerState(\n props: RelativeRangeDatePickerStateOptions,\n): RelativeRangeDatePickerState {\n const [value, setValue] = useControlledState(props.value, props.defaultValue ?? null);\n\n const [timeZone, setTimeZone] = useControlledState(\n props.timeZone,\n props.defaultTimeZone ?? 'default',\n props.onUpdateTimeZone,\n );\n\n const validation = React.useMemo(\n () =>\n getRangeValidationResult(\n value,\n props.allowNullableValues,\n props.minValue,\n props.maxValue,\n props.isDateUnavailable,\n timeZone,\n ),\n [\n value,\n props.allowNullableValues,\n props.isDateUnavailable,\n props.maxValue,\n props.minValue,\n timeZone,\n ],\n );\n\n return {\n value,\n timeZone,\n setValue(v, tz) {\n setValue(v);\n setTimeZone(tz);\n if (value !== v || (value && timeZone !== tz)) {\n props.onUpdate?.(v, tz);\n }\n },\n ...validation,\n };\n}\n\nexport function getRangeValidationResult(\n value: RelativeRangeDatePickerValue | null,\n allowNullableValues: boolean | undefined,\n minValue: DateTime | undefined,\n maxValue: DateTime | undefined,\n isDateUnavailable: ((v: DateTime, endpoint: 'start' | 'end') => boolean) | undefined,\n timeZone: string,\n) {\n if (!value) {\n return {isInvalid: false, errors: []};\n }\n\n const startDate = value.start ? dateTimeParse(value.start.value, {timeZone}) : null;\n const endDate = value.end ? dateTimeParse(value.end.value, {timeZone, roundUp: true}) : null;\n\n const startValidationResult = getValidationResult(\n startDate,\n minValue,\n maxValue,\n isDateUnavailable ? (date) => isDateUnavailable(date, 'start') : undefined,\n timeZone,\n i18n('\"From\"'),\n );\n\n if (!startDate && !allowNullableValues) {\n startValidationResult.isInvalid = true;\n startValidationResult.errors.push(i18n('\"From\" is required.'));\n }\n\n const endValidationResult = getValidationResult(\n endDate,\n minValue,\n maxValue,\n isDateUnavailable ? (date) => isDateUnavailable(date, 'end') : undefined,\n timeZone,\n i18n('\"To\"'),\n );\n\n if (!endDate && !allowNullableValues) {\n endValidationResult.isInvalid = true;\n endValidationResult.errors.push(i18n('\"To\" is required.'));\n }\n\n if (startDate && endDate && endDate.isBefore(startDate)) {\n startValidationResult.isInvalid = true;\n startValidationResult.errors.push(i18n(`\"From\" can't be after \"To\".`));\n }\n\n return {\n isInvalid: startValidationResult.isInvalid || endValidationResult.isInvalid,\n startValidationResult,\n endValidationResult,\n errors: startValidationResult.errors.concat(endValidationResult.errors),\n };\n}\n"]}
1
+ {"version":3,"file":"useRelativeRangeDatePickerState.js","sourceRoot":"../../../../../src","sources":["components/RelativeRangeDatePicker/hooks/useRelativeRangeDatePickerState.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAG1B,OAAO,EAAC,kBAAkB,EAAC,MAAM,mBAAmB,CAAC;AAIrD,OAAO,EAAC,IAAI,EAAC,6CAAoC;AACjD,OAAO,EAAC,wBAAwB,EAAC,0DAAuD;AA4BxF,MAAM,UAAU,+BAA+B,CAC3C,KAA0C;;IAE1C,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,kBAAkB,CAAC,KAAK,CAAC,KAAK,EAAE,MAAA,KAAK,CAAC,YAAY,mCAAI,IAAI,CAAC,CAAC;IAEtF,MAAM,CAAC,QAAQ,EAAE,WAAW,CAAC,GAAG,kBAAkB,CAC9C,KAAK,CAAC,QAAQ,EACd,MAAA,KAAK,CAAC,eAAe,mCAAI,SAAS,EAClC,KAAK,CAAC,gBAAgB,CACzB,CAAC;IAEF,MAAM,EAAC,CAAC,EAAC,GAAG,IAAI,CAAC,cAAc,EAAE,CAAC;IAClC,MAAM,UAAU,GAAG,KAAK,CAAC,OAAO,CAC5B,GAAG,EAAE,CACD,wBAAwB,CACpB,KAAK,EACL,KAAK,CAAC,mBAAmB,EACzB,KAAK,CAAC,QAAQ,EACd,KAAK,CAAC,QAAQ,EACd,KAAK,CAAC,iBAAiB,EACvB,QAAQ,EACR,CAAC,CACJ,EACL;QACI,KAAK;QACL,KAAK,CAAC,mBAAmB;QACzB,KAAK,CAAC,iBAAiB;QACvB,KAAK,CAAC,QAAQ;QACd,KAAK,CAAC,QAAQ;QACd,QAAQ;QACR,CAAC;KACJ,CACJ,CAAC;IAEF,uBACI,KAAK;QACL,QAAQ;QACR,QAAQ,CAAC,CAAC,EAAE,EAAE;;YACV,QAAQ,CAAC,CAAC,CAAC,CAAC;YACZ,WAAW,CAAC,EAAE,CAAC,CAAC;YAChB,IAAI,KAAK,KAAK,CAAC,IAAI,CAAC,KAAK,IAAI,QAAQ,KAAK,EAAE,CAAC,EAAE,CAAC;gBAC5C,MAAA,KAAK,CAAC,QAAQ,sDAAG,CAAC,EAAE,EAAE,CAAC,CAAC;YAC5B,CAAC;QACL,CAAC,IACE,UAAU,EACf;AACN,CAAC","sourcesContent":["import React from 'react';\n\nimport type {DateTime} from '@gravity-ui/date-utils';\nimport {useControlledState} from '@gravity-ui/uikit';\n\nimport type {Value} from '../../RelativeDatePicker';\nimport type {RangeValue} from '../../types';\nimport {i18n} from '../../utils/validation/i18n';\nimport {getRangeValidationResult} from '../../utils/validation/relativeRangeDatePicker';\n\nexport type RelativeRangeDatePickerValue = RangeValue<Value | null>;\n\nexport interface RelativeRangeDatePickerState {\n value: RelativeRangeDatePickerValue | null;\n timeZone: string;\n setValue: (value: RelativeRangeDatePickerValue | null, timeZone: string) => void;\n isInvalid: boolean;\n errors: string[];\n}\n\nexport interface RelativeRangeDatePickerStateOptions {\n value?: RelativeRangeDatePickerValue | null;\n defaultValue?: RelativeRangeDatePickerValue;\n onUpdate?: (value: RelativeRangeDatePickerValue | null, timeZone: string) => void;\n timeZone?: string;\n defaultTimeZone?: string;\n onUpdateTimeZone?: (timeZone: string) => void;\n /** The minimum allowed date that a user may select. */\n minValue?: DateTime;\n /** The maximum allowed date that a user may select. */\n maxValue?: DateTime;\n /** Callback that is called for each date of the calendar. If it returns true, then the date is unavailable. */\n isDateUnavailable?: (date: DateTime, endpoint: 'start' | 'end') => boolean;\n allowNullableValues?: boolean;\n}\n\nexport function useRelativeRangeDatePickerState(\n props: RelativeRangeDatePickerStateOptions,\n): RelativeRangeDatePickerState {\n const [value, setValue] = useControlledState(props.value, props.defaultValue ?? null);\n\n const [timeZone, setTimeZone] = useControlledState(\n props.timeZone,\n props.defaultTimeZone ?? 'default',\n props.onUpdateTimeZone,\n );\n\n const {t} = i18n.useTranslation();\n const validation = React.useMemo(\n () =>\n getRangeValidationResult(\n value,\n props.allowNullableValues,\n props.minValue,\n props.maxValue,\n props.isDateUnavailable,\n timeZone,\n t,\n ),\n [\n value,\n props.allowNullableValues,\n props.isDateUnavailable,\n props.maxValue,\n props.minValue,\n timeZone,\n t,\n ],\n );\n\n return {\n value,\n timeZone,\n setValue(v, tz) {\n setValue(v);\n setTimeZone(tz);\n if (value !== v || (value && timeZone !== tz)) {\n props.onUpdate?.(v, tz);\n }\n },\n ...validation,\n };\n}\n"]}
@@ -1,8 +1,5 @@
1
1
  {
2
2
  "\"From\"": "\"From\"",
3
- "\"From\" is required.": "\"From\" is required.",
4
3
  "\"To\"": "\"To\"",
5
- "\"To\" is required.": "\"To\" is required.",
6
- "\"From\" can't be after \"To\".": "\"From\" can't be after \"To\".",
7
4
  "to": "to"
8
5
  }
@@ -1,5 +1,13 @@
1
- export declare const i18n: ((key: "to" | "\"From\"" | "\"From\" is required." | "\"To\"" | "\"To\" is required." | "\"From\" can't be after \"To\".", params?: import("@gravity-ui/i18n").Params) => string) & {
1
+ export declare const i18n: ((key: "to" | "\"From\"" | "\"To\"", params?: import("@gravity-ui/i18n").Params) => string) & {
2
+ Translation: import("react").ComponentType<{
3
+ children: (props: {
4
+ t: (key: "to" | "\"From\"" | "\"To\"", params?: import("@gravity-ui/i18n").Params) => string;
5
+ }) => React.ReactNode;
6
+ }>;
7
+ useTranslation: () => {
8
+ t: (key: "to" | "\"From\"" | "\"To\"", params?: import("@gravity-ui/i18n").Params) => string;
9
+ };
2
10
  keysetData: {
3
- "g-date-relative-range-date-picker": Record<"to" | "\"From\"" | "\"From\" is required." | "\"To\"" | "\"To\" is required." | "\"From\" can't be after \"To\".", import("@gravity-ui/i18n").KeyData>;
11
+ "g-date-relative-range-date-picker": Record<"to" | "\"From\"" | "\"To\"", import("@gravity-ui/i18n").KeyData>;
4
12
  };
5
13
  };
@@ -1,8 +1,5 @@
1
1
  {
2
2
  "\"From\"": "«От»",
3
- "\"From\" is required.": "«От» обязательно.",
4
3
  "\"To\"": "«До»",
5
- "\"To\" is required.": "«До» обязательно.",
6
- "\"From\" can't be after \"To\".": "«От» не может быть позже чем «До».",
7
4
  "to": "до"
8
5
  }
@@ -1,6 +1,7 @@
1
1
  import type { Value } from "../RelativeDatePicker/index.js";
2
- import type { RangeValue } from "../types/index.js";
2
+ import type { ExtractFunctionType, RangeValue } from "../types/index.js";
3
3
  import type { Preset } from "./components/Presets/defaultPresets.js";
4
+ import { i18n } from "./components/Presets/i18n/index.js";
4
5
  export declare function resolveTimeZone(timeZone: string): string;
5
6
  export declare function normalizeTimeZone(timeZone: string): string;
6
7
  export declare function getTimeZoneOffset(timeZone: string): string;
@@ -10,6 +11,8 @@ interface GetDefaultTitleArgs {
10
11
  alwaysShowAsAbsolute?: boolean;
11
12
  format?: string;
12
13
  presets?: Preset[];
14
+ presetsTranslations?: ExtractFunctionType<typeof i18n>;
15
+ lang?: string;
13
16
  }
14
- export declare function getDefaultTitle({ value, timeZone, alwaysShowAsAbsolute, format, presets, }: GetDefaultTitleArgs): string;
17
+ export declare function getDefaultTitle({ value, timeZone, alwaysShowAsAbsolute, format, presets, presetsTranslations, lang, }: GetDefaultTitleArgs): string;
15
18
  export {};
@@ -1,4 +1,5 @@
1
1
  import { dateTime, dateTimeParse } from '@gravity-ui/date-utils';
2
+ import { i18n } from "./components/Presets/i18n/index.js";
2
3
  import { getPresetTitle } from "./components/Presets/utils.js";
3
4
  export function resolveTimeZone(timeZone) {
4
5
  if (timeZone === 'default' || timeZone === 'system') {
@@ -16,7 +17,7 @@ export function normalizeTimeZone(timeZone) {
16
17
  export function getTimeZoneOffset(timeZone) {
17
18
  return `UTC ${dateTime({ timeZone }).format('Z')}`;
18
19
  }
19
- export function getDefaultTitle({ value, timeZone, alwaysShowAsAbsolute, format = 'L', presets, }) {
20
+ export function getDefaultTitle({ value, timeZone, alwaysShowAsAbsolute, format = 'L', presets, presetsTranslations = i18n, lang = 'en', }) {
20
21
  var _a, _b, _c, _d, _e, _f;
21
22
  if (!value) {
22
23
  return '';
@@ -27,19 +28,19 @@ export function getDefaultTitle({ value, timeZone, alwaysShowAsAbsolute, format
27
28
  from =
28
29
  value.start.type === 'relative' && !alwaysShowAsAbsolute
29
30
  ? value.start.value
30
- : ((_b = (_a = dateTimeParse(value.start.value, { timeZone })) === null || _a === void 0 ? void 0 : _a.format(format)) !== null && _b !== void 0 ? _b : '');
31
+ : ((_b = (_a = dateTimeParse(value.start.value, { timeZone, lang })) === null || _a === void 0 ? void 0 : _a.format(format)) !== null && _b !== void 0 ? _b : '');
31
32
  }
32
33
  let to = '';
33
34
  if (value.end) {
34
35
  to =
35
36
  value.end.type === 'relative' && !alwaysShowAsAbsolute
36
37
  ? value.end.value
37
- : ((_d = (_c = dateTimeParse(value.end.value, { timeZone, roundUp: true })) === null || _c === void 0 ? void 0 : _c.format(format)) !== null && _d !== void 0 ? _d : '');
38
+ : ((_d = (_c = dateTimeParse(value.end.value, { timeZone, roundUp: true, lang })) === null || _c === void 0 ? void 0 : _c.format(format)) !== null && _d !== void 0 ? _d : '');
38
39
  }
39
40
  if (!alwaysShowAsAbsolute &&
40
41
  ((_e = value.start) === null || _e === void 0 ? void 0 : _e.type) === 'relative' &&
41
42
  ((_f = value.end) === null || _f === void 0 ? void 0 : _f.type) === 'relative') {
42
- return `${getPresetTitle(value.start.value, value.end.value, presets)}`;
43
+ return `${getPresetTitle(value.start.value, value.end.value, presets, presetsTranslations)}`;
43
44
  }
44
45
  const delimiter = ' — ';
45
46
  return `${from}${delimiter}${to}${tz}`;
@@ -1 +1 @@
1
- {"version":3,"file":"utils.js","sourceRoot":"../../../../src","sources":["components/RelativeRangeDatePicker/utils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,QAAQ,EAAE,aAAa,EAAC,MAAM,wBAAwB,CAAC;AAM/D,OAAO,EAAC,cAAc,EAAC,sCAAmC;AAE1D,MAAM,UAAU,eAAe,CAAC,QAAgB;IAC5C,IAAI,QAAQ,KAAK,SAAS,IAAI,QAAQ,KAAK,QAAQ,EAAE,CAAC;QAClD,OAAO,QAAQ,CAAC,EAAC,QAAQ,EAAC,CAAC,CAAC,QAAQ,EAAE,CAAC;IAC3C,CAAC;IAED,OAAO,QAAQ,CAAC;AACpB,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAC,QAAgB;IAC9C,MAAM,OAAO,GAAG,QAAQ,CAAC,WAAW,EAAE,CAAC;IACvC,IAAI,OAAO,KAAK,SAAS,IAAI,OAAO,KAAK,QAAQ,EAAE,CAAC;QAChD,OAAO,OAAO,CAAC;IACnB,CAAC;IAED,OAAO,eAAe,CAAC,QAAQ,CAAC,CAAC;AACrC,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAC,QAAgB;IAC9C,OAAO,OAAO,QAAQ,CAAC,EAAC,QAAQ,EAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC;AACrD,CAAC;AASD,MAAM,UAAU,eAAe,CAAC,EAC5B,KAAK,EACL,QAAQ,EACR,oBAAoB,EACpB,MAAM,GAAG,GAAG,EACZ,OAAO,GACW;;IAClB,IAAI,CAAC,KAAK,EAAE,CAAC;QACT,OAAO,EAAE,CAAC;IACd,CAAC;IAED,MAAM,EAAE,GAAG,QAAQ,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,iBAAiB,CAAC,QAAQ,CAAC,GAAG,CAAC;IAE7E,IAAI,IAAI,GAAG,EAAE,CAAC;IACd,IAAI,KAAK,CAAC,KAAK,EAAE,CAAC;QACd,IAAI;YACA,KAAK,CAAC,KAAK,CAAC,IAAI,KAAK,UAAU,IAAI,CAAC,oBAAoB;gBACpD,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK;gBACnB,CAAC,CAAC,CAAC,MAAA,MAAA,aAAa,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,EAAE,EAAC,QAAQ,EAAC,CAAC,0CAAE,MAAM,CAAC,MAAM,CAAC,mCAAI,EAAE,CAAC,CAAC;IACnF,CAAC;IACD,IAAI,EAAE,GAAG,EAAE,CAAC;IACZ,IAAI,KAAK,CAAC,GAAG,EAAE,CAAC;QACZ,EAAE;YACE,KAAK,CAAC,GAAG,CAAC,IAAI,KAAK,UAAU,IAAI,CAAC,oBAAoB;gBAClD,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK;gBACjB,CAAC,CAAC,CAAC,MAAA,MAAA,aAAa,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,EAAE,EAAC,QAAQ,EAAE,OAAO,EAAE,IAAI,EAAC,CAAC,0CAAE,MAAM,CAAC,MAAM,CAAC,mCAAI,EAAE,CAAC,CAAC;IAChG,CAAC;IAED,IACI,CAAC,oBAAoB;QACrB,CAAA,MAAA,KAAK,CAAC,KAAK,0CAAE,IAAI,MAAK,UAAU;QAChC,CAAA,MAAA,KAAK,CAAC,GAAG,0CAAE,IAAI,MAAK,UAAU,EAChC,CAAC;QACC,OAAO,GAAG,cAAc,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,EAAE,KAAK,CAAC,GAAG,CAAC,KAAK,EAAE,OAAO,CAAC,EAAE,CAAC;IAC5E,CAAC;IAED,MAAM,SAAS,GAAG,KAAK,CAAC;IAExB,OAAO,GAAG,IAAI,GAAG,SAAS,GAAG,EAAE,GAAG,EAAE,EAAE,CAAC;AAC3C,CAAC","sourcesContent":["import {dateTime, dateTimeParse} from '@gravity-ui/date-utils';\n\nimport type {Value} from '../RelativeDatePicker';\nimport type {RangeValue} from '../types';\n\nimport type {Preset} from './components/Presets/defaultPresets';\nimport {getPresetTitle} from './components/Presets/utils';\n\nexport function resolveTimeZone(timeZone: string) {\n if (timeZone === 'default' || timeZone === 'system') {\n return dateTime({timeZone}).timeZone();\n }\n\n return timeZone;\n}\n\nexport function normalizeTimeZone(timeZone: string) {\n const lowered = timeZone.toLowerCase();\n if (lowered === 'default' || lowered === 'system') {\n return lowered;\n }\n\n return resolveTimeZone(timeZone);\n}\n\nexport function getTimeZoneOffset(timeZone: string) {\n return `UTC ${dateTime({timeZone}).format('Z')}`;\n}\n\ninterface GetDefaultTitleArgs {\n value: RangeValue<Value | null> | null;\n timeZone: string;\n alwaysShowAsAbsolute?: boolean;\n format?: string;\n presets?: Preset[];\n}\nexport function getDefaultTitle({\n value,\n timeZone,\n alwaysShowAsAbsolute,\n format = 'L',\n presets,\n}: GetDefaultTitleArgs) {\n if (!value) {\n return '';\n }\n\n const tz = timeZone === 'default' ? '' : ` (${getTimeZoneOffset(timeZone)})`;\n\n let from = '';\n if (value.start) {\n from =\n value.start.type === 'relative' && !alwaysShowAsAbsolute\n ? value.start.value\n : (dateTimeParse(value.start.value, {timeZone})?.format(format) ?? '');\n }\n let to = '';\n if (value.end) {\n to =\n value.end.type === 'relative' && !alwaysShowAsAbsolute\n ? value.end.value\n : (dateTimeParse(value.end.value, {timeZone, roundUp: true})?.format(format) ?? '');\n }\n\n if (\n !alwaysShowAsAbsolute &&\n value.start?.type === 'relative' &&\n value.end?.type === 'relative'\n ) {\n return `${getPresetTitle(value.start.value, value.end.value, presets)}`;\n }\n\n const delimiter = ' — ';\n\n return `${from}${delimiter}${to}${tz}`;\n}\n"]}
1
+ {"version":3,"file":"utils.js","sourceRoot":"../../../../src","sources":["components/RelativeRangeDatePicker/utils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,QAAQ,EAAE,aAAa,EAAC,MAAM,wBAAwB,CAAC;AAM/D,OAAO,EAAC,IAAI,EAAC,2CAAkC;AAC/C,OAAO,EAAC,cAAc,EAAC,sCAAmC;AAE1D,MAAM,UAAU,eAAe,CAAC,QAAgB;IAC5C,IAAI,QAAQ,KAAK,SAAS,IAAI,QAAQ,KAAK,QAAQ,EAAE,CAAC;QAClD,OAAO,QAAQ,CAAC,EAAC,QAAQ,EAAC,CAAC,CAAC,QAAQ,EAAE,CAAC;IAC3C,CAAC;IAED,OAAO,QAAQ,CAAC;AACpB,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAC,QAAgB;IAC9C,MAAM,OAAO,GAAG,QAAQ,CAAC,WAAW,EAAE,CAAC;IACvC,IAAI,OAAO,KAAK,SAAS,IAAI,OAAO,KAAK,QAAQ,EAAE,CAAC;QAChD,OAAO,OAAO,CAAC;IACnB,CAAC;IAED,OAAO,eAAe,CAAC,QAAQ,CAAC,CAAC;AACrC,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAC,QAAgB;IAC9C,OAAO,OAAO,QAAQ,CAAC,EAAC,QAAQ,EAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC;AACrD,CAAC;AAWD,MAAM,UAAU,eAAe,CAAC,EAC5B,KAAK,EACL,QAAQ,EACR,oBAAoB,EACpB,MAAM,GAAG,GAAG,EACZ,OAAO,EACP,mBAAmB,GAAG,IAAI,EAC1B,IAAI,GAAG,IAAI,GACO;;IAClB,IAAI,CAAC,KAAK,EAAE,CAAC;QACT,OAAO,EAAE,CAAC;IACd,CAAC;IAED,MAAM,EAAE,GAAG,QAAQ,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,iBAAiB,CAAC,QAAQ,CAAC,GAAG,CAAC;IAE7E,IAAI,IAAI,GAAG,EAAE,CAAC;IACd,IAAI,KAAK,CAAC,KAAK,EAAE,CAAC;QACd,IAAI;YACA,KAAK,CAAC,KAAK,CAAC,IAAI,KAAK,UAAU,IAAI,CAAC,oBAAoB;gBACpD,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK;gBACnB,CAAC,CAAC,CAAC,MAAA,MAAA,aAAa,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,EAAE,EAAC,QAAQ,EAAE,IAAI,EAAC,CAAC,0CAAE,MAAM,CAAC,MAAM,CAAC,mCAAI,EAAE,CAAC,CAAC;IACzF,CAAC;IACD,IAAI,EAAE,GAAG,EAAE,CAAC;IACZ,IAAI,KAAK,CAAC,GAAG,EAAE,CAAC;QACZ,EAAE;YACE,KAAK,CAAC,GAAG,CAAC,IAAI,KAAK,UAAU,IAAI,CAAC,oBAAoB;gBAClD,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK;gBACjB,CAAC,CAAC,CAAC,MAAA,MAAA,aAAa,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,EAAE,EAAC,QAAQ,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAC,CAAC,0CAAE,MAAM,CACpE,MAAM,CACT,mCAAI,EAAE,CAAC,CAAC;IACvB,CAAC;IAED,IACI,CAAC,oBAAoB;QACrB,CAAA,MAAA,KAAK,CAAC,KAAK,0CAAE,IAAI,MAAK,UAAU;QAChC,CAAA,MAAA,KAAK,CAAC,GAAG,0CAAE,IAAI,MAAK,UAAU,EAChC,CAAC;QACC,OAAO,GAAG,cAAc,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,EAAE,KAAK,CAAC,GAAG,CAAC,KAAK,EAAE,OAAO,EAAE,mBAAmB,CAAC,EAAE,CAAC;IACjG,CAAC;IAED,MAAM,SAAS,GAAG,KAAK,CAAC;IAExB,OAAO,GAAG,IAAI,GAAG,SAAS,GAAG,EAAE,GAAG,EAAE,EAAE,CAAC;AAC3C,CAAC","sourcesContent":["import {dateTime, dateTimeParse} from '@gravity-ui/date-utils';\n\nimport type {Value} from '../RelativeDatePicker';\nimport type {ExtractFunctionType, RangeValue} from '../types';\n\nimport type {Preset} from './components/Presets/defaultPresets';\nimport {i18n} from './components/Presets/i18n';\nimport {getPresetTitle} from './components/Presets/utils';\n\nexport function resolveTimeZone(timeZone: string) {\n if (timeZone === 'default' || timeZone === 'system') {\n return dateTime({timeZone}).timeZone();\n }\n\n return timeZone;\n}\n\nexport function normalizeTimeZone(timeZone: string) {\n const lowered = timeZone.toLowerCase();\n if (lowered === 'default' || lowered === 'system') {\n return lowered;\n }\n\n return resolveTimeZone(timeZone);\n}\n\nexport function getTimeZoneOffset(timeZone: string) {\n return `UTC ${dateTime({timeZone}).format('Z')}`;\n}\n\ninterface GetDefaultTitleArgs {\n value: RangeValue<Value | null> | null;\n timeZone: string;\n alwaysShowAsAbsolute?: boolean;\n format?: string;\n presets?: Preset[];\n presetsTranslations?: ExtractFunctionType<typeof i18n>;\n lang?: string;\n}\nexport function getDefaultTitle({\n value,\n timeZone,\n alwaysShowAsAbsolute,\n format = 'L',\n presets,\n presetsTranslations = i18n,\n lang = 'en',\n}: GetDefaultTitleArgs) {\n if (!value) {\n return '';\n }\n\n const tz = timeZone === 'default' ? '' : ` (${getTimeZoneOffset(timeZone)})`;\n\n let from = '';\n if (value.start) {\n from =\n value.start.type === 'relative' && !alwaysShowAsAbsolute\n ? value.start.value\n : (dateTimeParse(value.start.value, {timeZone, lang})?.format(format) ?? '');\n }\n let to = '';\n if (value.end) {\n to =\n value.end.type === 'relative' && !alwaysShowAsAbsolute\n ? value.end.value\n : (dateTimeParse(value.end.value, {timeZone, roundUp: true, lang})?.format(\n format,\n ) ?? '');\n }\n\n if (\n !alwaysShowAsAbsolute &&\n value.start?.type === 'relative' &&\n value.end?.type === 'relative'\n ) {\n return `${getPresetTitle(value.start.value, value.end.value, presets, presetsTranslations)}`;\n }\n\n const delimiter = ' — ';\n\n return `${from}${delimiter}${to}${tz}`;\n}\n"]}
@@ -0,0 +1 @@
1
+ export type ExtractFunctionType<T> = T extends (...args: infer A) => infer R ? (...args: A) => R : never;
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=helpers.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"helpers.js","sourceRoot":"../../../../src","sources":["components/types/helpers.ts"],"names":[],"mappings":"","sourcesContent":["export type ExtractFunctionType<T> = T extends (...args: infer A) => infer R\n ? (...args: A) => R\n : never;\n"]}
@@ -2,3 +2,4 @@ export type * from "./datePicker.js";
2
2
  export type * from "./inputs.js";
3
3
  export type * from "./style.js";
4
4
  export type * from "./events.js";
5
+ export type * from "./helpers.js";
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"../../../../src","sources":["components/types/index.ts"],"names":[],"mappings":"","sourcesContent":["export type * from './datePicker';\nexport type * from './inputs';\nexport type * from './style';\nexport type * from './events';\n"]}
1
+ {"version":3,"file":"index.js","sourceRoot":"../../../../src","sources":["components/types/index.ts"],"names":[],"mappings":"","sourcesContent":["export type * from './datePicker';\nexport type * from './inputs';\nexport type * from './style';\nexport type * from './events';\nexport type * from './helpers';\n"]}
@@ -8,4 +8,4 @@ export declare function createPlaceholderValue({ placeholderValue, timeZone }: P
8
8
  export declare function isInvalid(value: DateTime | null | undefined, minValue: DateTime | undefined, maxValue: DateTime | undefined): boolean;
9
9
  export declare function constrainValue(value: DateTime, minValue: DateTime | undefined, maxValue: DateTime | undefined): DateTime;
10
10
  export declare function mergeDateTime(date: DateTime, time: DateTime): DateTime;
11
- export declare function formatDateTime(date: DateTime, format: string, timezone: string): string;
11
+ export declare function formatDateTime(date: DateTime, format: string, timezone: string, lang: string): string;
@@ -32,7 +32,7 @@ export function mergeDateTime(date, time) {
32
32
  .set('minutes', time.minute())
33
33
  .set('seconds', time.second());
34
34
  }
35
- export function formatDateTime(date, format, timezone) {
36
- return dateTime({ input: date, timeZone: timezone }).format(format);
35
+ export function formatDateTime(date, format, timezone, lang) {
36
+ return dateTime({ input: date, timeZone: timezone, lang }).format(format);
37
37
  }
38
38
  //# sourceMappingURL=dates.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"dates.js","sourceRoot":"../../../../src","sources":["components/utils/dates.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,QAAQ,EAAC,MAAM,wBAAwB,CAAC;AAGhD,MAAM,UAAU,SAAS,CAAC,IAAc;IACpC,OAAO,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC;AACvC,CAAC;AAMD,MAAM,UAAU,sBAAsB,CAAC,EAAC,gBAAgB,EAAE,QAAQ,EAA0B;IACxF,OAAO,gBAAgB,aAAhB,gBAAgB,cAAhB,gBAAgB,GAAI,QAAQ,CAAC,EAAC,QAAQ,EAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;AACnE,CAAC;AAED,MAAM,UAAU,SAAS,CACrB,KAAkC,EAClC,QAA8B,EAC9B,QAA8B;IAE9B,IAAI,CAAC,KAAK,EAAE,CAAC;QACT,OAAO,KAAK,CAAC;IACjB,CAAC;IAED,IAAI,QAAQ,IAAI,KAAK,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC;QACvC,OAAO,IAAI,CAAC;IAChB,CAAC;IACD,IAAI,QAAQ,IAAI,QAAQ,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;QACvC,OAAO,IAAI,CAAC;IAChB,CAAC;IAED,OAAO,KAAK,CAAC;AACjB,CAAC;AAED,MAAM,UAAU,cAAc,CAC1B,KAAe,EACf,QAA8B,EAC9B,QAA8B;IAE9B,IAAI,QAAQ,IAAI,KAAK,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC;QACvC,OAAO,QAAQ,CAAC;IACpB,CAAC;IACD,IAAI,QAAQ,IAAI,QAAQ,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;QACvC,OAAO,QAAQ,CAAC;IACpB,CAAC;IAED,OAAO,KAAK,CAAC;AACjB,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,IAAc,EAAE,IAAc;IACxD,OAAO,IAAI;SACN,GAAG,CAAC,OAAO,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC;SACzB,GAAG,CAAC,SAAS,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC;SAC7B,GAAG,CAAC,SAAS,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC;AACvC,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,IAAc,EAAE,MAAc,EAAE,QAAgB;IAC3E,OAAO,QAAQ,CAAC,EAAC,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;AACtE,CAAC","sourcesContent":["import {dateTime} from '@gravity-ui/date-utils';\nimport type {DateTime} from '@gravity-ui/date-utils';\n\nexport function isWeekend(date: DateTime) {\n return [0, 6].includes(date.day());\n}\n\nexport interface PlaceholderValueOptions {\n placeholderValue?: DateTime;\n timeZone?: string;\n}\nexport function createPlaceholderValue({placeholderValue, timeZone}: PlaceholderValueOptions) {\n return placeholderValue ?? dateTime({timeZone}).startOf('day');\n}\n\nexport function isInvalid(\n value: DateTime | null | undefined,\n minValue: DateTime | undefined,\n maxValue: DateTime | undefined,\n) {\n if (!value) {\n return false;\n }\n\n if (minValue && value.isBefore(minValue)) {\n return true;\n }\n if (maxValue && maxValue.isBefore(value)) {\n return true;\n }\n\n return false;\n}\n\nexport function constrainValue(\n value: DateTime,\n minValue: DateTime | undefined,\n maxValue: DateTime | undefined,\n) {\n if (minValue && value.isBefore(minValue)) {\n return minValue;\n }\n if (maxValue && maxValue.isBefore(value)) {\n return maxValue;\n }\n\n return value;\n}\n\nexport function mergeDateTime(date: DateTime, time: DateTime) {\n return date\n .set('hours', time.hour())\n .set('minutes', time.minute())\n .set('seconds', time.second());\n}\n\nexport function formatDateTime(date: DateTime, format: string, timezone: string) {\n return dateTime({input: date, timeZone: timezone}).format(format);\n}\n"]}
1
+ {"version":3,"file":"dates.js","sourceRoot":"../../../../src","sources":["components/utils/dates.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,QAAQ,EAAC,MAAM,wBAAwB,CAAC;AAGhD,MAAM,UAAU,SAAS,CAAC,IAAc;IACpC,OAAO,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC;AACvC,CAAC;AAMD,MAAM,UAAU,sBAAsB,CAAC,EAAC,gBAAgB,EAAE,QAAQ,EAA0B;IACxF,OAAO,gBAAgB,aAAhB,gBAAgB,cAAhB,gBAAgB,GAAI,QAAQ,CAAC,EAAC,QAAQ,EAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;AACnE,CAAC;AAED,MAAM,UAAU,SAAS,CACrB,KAAkC,EAClC,QAA8B,EAC9B,QAA8B;IAE9B,IAAI,CAAC,KAAK,EAAE,CAAC;QACT,OAAO,KAAK,CAAC;IACjB,CAAC;IAED,IAAI,QAAQ,IAAI,KAAK,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC;QACvC,OAAO,IAAI,CAAC;IAChB,CAAC;IACD,IAAI,QAAQ,IAAI,QAAQ,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;QACvC,OAAO,IAAI,CAAC;IAChB,CAAC;IAED,OAAO,KAAK,CAAC;AACjB,CAAC;AAED,MAAM,UAAU,cAAc,CAC1B,KAAe,EACf,QAA8B,EAC9B,QAA8B;IAE9B,IAAI,QAAQ,IAAI,KAAK,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC;QACvC,OAAO,QAAQ,CAAC;IACpB,CAAC;IACD,IAAI,QAAQ,IAAI,QAAQ,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;QACvC,OAAO,QAAQ,CAAC;IACpB,CAAC;IAED,OAAO,KAAK,CAAC;AACjB,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,IAAc,EAAE,IAAc;IACxD,OAAO,IAAI;SACN,GAAG,CAAC,OAAO,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC;SACzB,GAAG,CAAC,SAAS,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC;SAC7B,GAAG,CAAC,SAAS,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC;AACvC,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,IAAc,EAAE,MAAc,EAAE,QAAgB,EAAE,IAAY;IACzF,OAAO,QAAQ,CAAC,EAAC,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,IAAI,EAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;AAC5E,CAAC","sourcesContent":["import {dateTime} from '@gravity-ui/date-utils';\nimport type {DateTime} from '@gravity-ui/date-utils';\n\nexport function isWeekend(date: DateTime) {\n return [0, 6].includes(date.day());\n}\n\nexport interface PlaceholderValueOptions {\n placeholderValue?: DateTime;\n timeZone?: string;\n}\nexport function createPlaceholderValue({placeholderValue, timeZone}: PlaceholderValueOptions) {\n return placeholderValue ?? dateTime({timeZone}).startOf('day');\n}\n\nexport function isInvalid(\n value: DateTime | null | undefined,\n minValue: DateTime | undefined,\n maxValue: DateTime | undefined,\n) {\n if (!value) {\n return false;\n }\n\n if (minValue && value.isBefore(minValue)) {\n return true;\n }\n if (maxValue && maxValue.isBefore(value)) {\n return true;\n }\n\n return false;\n}\n\nexport function constrainValue(\n value: DateTime,\n minValue: DateTime | undefined,\n maxValue: DateTime | undefined,\n) {\n if (minValue && value.isBefore(minValue)) {\n return minValue;\n }\n if (maxValue && maxValue.isBefore(value)) {\n return maxValue;\n }\n\n return value;\n}\n\nexport function mergeDateTime(date: DateTime, time: DateTime) {\n return date\n .set('hours', time.hour())\n .set('minutes', time.minute())\n .set('seconds', time.second());\n}\n\nexport function formatDateTime(date: DateTime, format: string, timezone: string, lang: string) {\n return dateTime({input: date, timeZone: timezone, lang}).format(format);\n}\n"]}
@@ -1,6 +1,8 @@
1
1
  import type { DateTime } from '@gravity-ui/date-utils';
2
+ import type { ExtractFunctionType } from "../../types/index.js";
3
+ import { i18n } from "./i18n/index.js";
2
4
  export interface ValidationResult {
3
5
  isInvalid: boolean;
4
6
  errors: string[];
5
7
  }
6
- export declare function getValidationResult(value: DateTime | null | undefined, minValue: DateTime | undefined, maxValue: DateTime | undefined, isDateUnavailable: ((v: DateTime) => boolean) | undefined, timeZone: string, valueTitle?: string): ValidationResult;
8
+ export declare function getValidationResult(value: DateTime | null | undefined, minValue: DateTime | undefined, maxValue: DateTime | undefined, isDateUnavailable: ((v: DateTime) => boolean) | undefined, timeZone: string, valueTitle?: string, t?: ExtractFunctionType<typeof i18n>): ValidationResult;
@@ -1,5 +1,5 @@
1
1
  import { i18n } from "./i18n/index.js";
2
- export function getValidationResult(value, minValue, maxValue, isDateUnavailable, timeZone, valueTitle = 'Value') {
2
+ export function getValidationResult(value, minValue, maxValue, isDateUnavailable, timeZone, valueTitle = 'Value', t = i18n) {
3
3
  const rangeOverflow = value && maxValue && maxValue.isBefore(value);
4
4
  const rangeUnderflow = value && minValue && value.isBefore(minValue);
5
5
  const isUnavailable = (value && (isDateUnavailable === null || isDateUnavailable === void 0 ? void 0 : isDateUnavailable(value))) || false;
@@ -7,19 +7,19 @@ export function getValidationResult(value, minValue, maxValue, isDateUnavailable
7
7
  const errors = [];
8
8
  if (isInvalid) {
9
9
  if (rangeUnderflow && minValue) {
10
- errors.push(i18n('Value must be {minValue} or later.', {
10
+ errors.push(t('Value must be {minValue} or later.', {
11
11
  minValue: minValue.timeZone(timeZone).format(),
12
12
  value: valueTitle,
13
13
  }));
14
14
  }
15
15
  if (rangeOverflow && maxValue) {
16
- errors.push(i18n('Value must be {maxValue} or earlier.', {
16
+ errors.push(t('Value must be {maxValue} or earlier.', {
17
17
  maxValue: maxValue.timeZone(timeZone).format(),
18
18
  value: valueTitle,
19
19
  }));
20
20
  }
21
21
  if (isUnavailable) {
22
- errors.push(i18n('Selected date unavailable.'));
22
+ errors.push(t('Selected date unavailable.'));
23
23
  }
24
24
  }
25
25
  return { isInvalid, errors };
@@ -1 +1 @@
1
- {"version":3,"file":"datePicker.js","sourceRoot":"../../../../../src","sources":["components/utils/validation/datePicker.ts"],"names":[],"mappings":"AAEA,OAAO,EAAC,IAAI,EAAC,wBAAe;AAO5B,MAAM,UAAU,mBAAmB,CAC/B,KAAkC,EAClC,QAA8B,EAC9B,QAA8B,EAC9B,iBAAyD,EACzD,QAAgB,EAChB,UAAU,GAAG,OAAO;IAEpB,MAAM,aAAa,GAAG,KAAK,IAAI,QAAQ,IAAI,QAAQ,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;IACpE,MAAM,cAAc,GAAG,KAAK,IAAI,QAAQ,IAAI,KAAK,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;IACrE,MAAM,aAAa,GAAG,CAAC,KAAK,KAAI,iBAAiB,aAAjB,iBAAiB,uBAAjB,iBAAiB,CAAG,KAAK,CAAC,CAAA,CAAC,IAAI,KAAK,CAAC;IACrE,MAAM,SAAS,GAAG,aAAa,IAAI,cAAc,IAAI,aAAa,CAAC;IACnE,MAAM,MAAM,GAAG,EAAE,CAAC;IAElB,IAAI,SAAS,EAAE,CAAC;QACZ,IAAI,cAAc,IAAI,QAAQ,EAAE,CAAC;YAC7B,MAAM,CAAC,IAAI,CACP,IAAI,CAAC,oCAAoC,EAAE;gBACvC,QAAQ,EAAE,QAAQ,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,MAAM,EAAE;gBAC9C,KAAK,EAAE,UAAU;aACpB,CAAC,CACL,CAAC;QACN,CAAC;QAED,IAAI,aAAa,IAAI,QAAQ,EAAE,CAAC;YAC5B,MAAM,CAAC,IAAI,CACP,IAAI,CAAC,sCAAsC,EAAE;gBACzC,QAAQ,EAAE,QAAQ,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,MAAM,EAAE;gBAC9C,KAAK,EAAE,UAAU;aACpB,CAAC,CACL,CAAC;QACN,CAAC;QAED,IAAI,aAAa,EAAE,CAAC;YAChB,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,4BAA4B,CAAC,CAAC,CAAC;QACpD,CAAC;IACL,CAAC;IAED,OAAO,EAAC,SAAS,EAAE,MAAM,EAAC,CAAC;AAC/B,CAAC","sourcesContent":["import type {DateTime} from '@gravity-ui/date-utils';\n\nimport {i18n} from './i18n';\n\nexport interface ValidationResult {\n isInvalid: boolean;\n errors: string[];\n}\n\nexport function getValidationResult(\n value: DateTime | null | undefined,\n minValue: DateTime | undefined,\n maxValue: DateTime | undefined,\n isDateUnavailable: ((v: DateTime) => boolean) | undefined,\n timeZone: string,\n valueTitle = 'Value',\n): ValidationResult {\n const rangeOverflow = value && maxValue && maxValue.isBefore(value);\n const rangeUnderflow = value && minValue && value.isBefore(minValue);\n const isUnavailable = (value && isDateUnavailable?.(value)) || false;\n const isInvalid = rangeOverflow || rangeUnderflow || isUnavailable;\n const errors = [];\n\n if (isInvalid) {\n if (rangeUnderflow && minValue) {\n errors.push(\n i18n('Value must be {minValue} or later.', {\n minValue: minValue.timeZone(timeZone).format(),\n value: valueTitle,\n }),\n );\n }\n\n if (rangeOverflow && maxValue) {\n errors.push(\n i18n('Value must be {maxValue} or earlier.', {\n maxValue: maxValue.timeZone(timeZone).format(),\n value: valueTitle,\n }),\n );\n }\n\n if (isUnavailable) {\n errors.push(i18n('Selected date unavailable.'));\n }\n }\n\n return {isInvalid, errors};\n}\n"]}
1
+ {"version":3,"file":"datePicker.js","sourceRoot":"../../../../../src","sources":["components/utils/validation/datePicker.ts"],"names":[],"mappings":"AAIA,OAAO,EAAC,IAAI,EAAC,wBAAe;AAO5B,MAAM,UAAU,mBAAmB,CAC/B,KAAkC,EAClC,QAA8B,EAC9B,QAA8B,EAC9B,iBAAyD,EACzD,QAAgB,EAChB,UAAU,GAAG,OAAO,EACpB,IAAsC,IAAI;IAE1C,MAAM,aAAa,GAAG,KAAK,IAAI,QAAQ,IAAI,QAAQ,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;IACpE,MAAM,cAAc,GAAG,KAAK,IAAI,QAAQ,IAAI,KAAK,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;IACrE,MAAM,aAAa,GAAG,CAAC,KAAK,KAAI,iBAAiB,aAAjB,iBAAiB,uBAAjB,iBAAiB,CAAG,KAAK,CAAC,CAAA,CAAC,IAAI,KAAK,CAAC;IACrE,MAAM,SAAS,GAAG,aAAa,IAAI,cAAc,IAAI,aAAa,CAAC;IACnE,MAAM,MAAM,GAAG,EAAE,CAAC;IAElB,IAAI,SAAS,EAAE,CAAC;QACZ,IAAI,cAAc,IAAI,QAAQ,EAAE,CAAC;YAC7B,MAAM,CAAC,IAAI,CACP,CAAC,CAAC,oCAAoC,EAAE;gBACpC,QAAQ,EAAE,QAAQ,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,MAAM,EAAE;gBAC9C,KAAK,EAAE,UAAU;aACpB,CAAC,CACL,CAAC;QACN,CAAC;QAED,IAAI,aAAa,IAAI,QAAQ,EAAE,CAAC;YAC5B,MAAM,CAAC,IAAI,CACP,CAAC,CAAC,sCAAsC,EAAE;gBACtC,QAAQ,EAAE,QAAQ,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,MAAM,EAAE;gBAC9C,KAAK,EAAE,UAAU;aACpB,CAAC,CACL,CAAC;QACN,CAAC;QAED,IAAI,aAAa,EAAE,CAAC;YAChB,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,4BAA4B,CAAC,CAAC,CAAC;QACjD,CAAC;IACL,CAAC;IAED,OAAO,EAAC,SAAS,EAAE,MAAM,EAAC,CAAC;AAC/B,CAAC","sourcesContent":["import type {DateTime} from '@gravity-ui/date-utils';\n\nimport type {ExtractFunctionType} from '../../types';\n\nimport {i18n} from './i18n';\n\nexport interface ValidationResult {\n isInvalid: boolean;\n errors: string[];\n}\n\nexport function getValidationResult(\n value: DateTime | null | undefined,\n minValue: DateTime | undefined,\n maxValue: DateTime | undefined,\n isDateUnavailable: ((v: DateTime) => boolean) | undefined,\n timeZone: string,\n valueTitle = 'Value',\n t: ExtractFunctionType<typeof i18n> = i18n,\n): ValidationResult {\n const rangeOverflow = value && maxValue && maxValue.isBefore(value);\n const rangeUnderflow = value && minValue && value.isBefore(minValue);\n const isUnavailable = (value && isDateUnavailable?.(value)) || false;\n const isInvalid = rangeOverflow || rangeUnderflow || isUnavailable;\n const errors = [];\n\n if (isInvalid) {\n if (rangeUnderflow && minValue) {\n errors.push(\n t('Value must be {minValue} or later.', {\n minValue: minValue.timeZone(timeZone).format(),\n value: valueTitle,\n }),\n );\n }\n\n if (rangeOverflow && maxValue) {\n errors.push(\n t('Value must be {maxValue} or earlier.', {\n maxValue: maxValue.timeZone(timeZone).format(),\n value: valueTitle,\n }),\n );\n }\n\n if (isUnavailable) {\n errors.push(t('Selected date unavailable.'));\n }\n }\n\n return {isInvalid, errors};\n}\n"]}
@@ -2,5 +2,10 @@
2
2
  "Value must be {minValue} or later.": "{{value}} must be {{minValue}} or later.",
3
3
  "Value must be {maxValue} or earlier.": "{{value}} must be {{maxValue}} or earlier.",
4
4
  "Selected date unavailable.": "Selected date unavailable.",
5
- "Value is required.": "{{value}} is required."
5
+ "Value is required.": "{{value}} is required.",
6
+ "\"From\"": "\"From\"",
7
+ "\"To\"": "\"To\"",
8
+ "\"From\" is required.": "\"From\" is required.",
9
+ "\"To\" is required.": "\"To\" is required.",
10
+ "\"From\" can't be after \"To\".": "\"From\" can't be after \"To\"."
6
11
  }
@@ -1,5 +1,13 @@
1
- export declare const i18n: ((key: "Selected date unavailable." | "Value must be {minValue} or later." | "Value must be {maxValue} or earlier." | "Value is required.", params?: import("@gravity-ui/i18n").Params) => string) & {
1
+ export declare const i18n: ((key: "Selected date unavailable." | "\"From\"" | "\"To\"" | "\"From\" is required." | "\"To\" is required." | "\"From\" can't be after \"To\"." | "Value must be {minValue} or later." | "Value must be {maxValue} or earlier." | "Value is required.", params?: import("@gravity-ui/i18n").Params) => string) & {
2
+ Translation: import("react").ComponentType<{
3
+ children: (props: {
4
+ t: (key: "Selected date unavailable." | "\"From\"" | "\"To\"" | "\"From\" is required." | "\"To\" is required." | "\"From\" can't be after \"To\"." | "Value must be {minValue} or later." | "Value must be {maxValue} or earlier." | "Value is required.", params?: import("@gravity-ui/i18n").Params) => string;
5
+ }) => React.ReactNode;
6
+ }>;
7
+ useTranslation: () => {
8
+ t: (key: "Selected date unavailable." | "\"From\"" | "\"To\"" | "\"From\" is required." | "\"To\" is required." | "\"From\" can't be after \"To\"." | "Value must be {minValue} or later." | "Value must be {maxValue} or earlier." | "Value is required.", params?: import("@gravity-ui/i18n").Params) => string;
9
+ };
2
10
  keysetData: {
3
- "g-date-validation": Record<"Selected date unavailable." | "Value must be {minValue} or later." | "Value must be {maxValue} or earlier." | "Value is required.", import("@gravity-ui/i18n").KeyData>;
11
+ "g-date-validation": Record<"Selected date unavailable." | "\"From\"" | "\"To\"" | "\"From\" is required." | "\"To\" is required." | "\"From\" can't be after \"To\"." | "Value must be {minValue} or later." | "Value must be {maxValue} or earlier." | "Value is required.", import("@gravity-ui/i18n").KeyData>;
4
12
  };
5
13
  };
@@ -2,5 +2,11 @@
2
2
  "Value must be {minValue} or later.": "{{value}} должно ровняться {{minValue}} или быть позже.",
3
3
  "Value must be {maxValue} or earlier.": "{{value}} должно ровняться {{maxValue}} или быть раньше.",
4
4
  "Selected date unavailable.": "Выбранная дата недоступна.",
5
- "Value is required.": "{{value}} обязательно."
5
+ "Value is required.": "{{value}} обязательно.",
6
+ "\"From\"": "«От»",
7
+ "\"To\"": "«До»",
8
+ "\"From\" is required.": "«От» обязательно.",
9
+ "\"To\"": "«До»",
10
+ "\"To\" is required.": "«До» обязательно.",
11
+ "\"From\" can't be after \"To\".": "«От» не может быть позже чем «До»."
6
12
  }
@@ -0,0 +1,15 @@
1
+ import type { DateTime } from '@gravity-ui/date-utils';
2
+ import type { RelativeRangeDatePickerValue } from "../../RelativeRangeDatePicker/index.js";
3
+ import type { ExtractFunctionType } from "../../types/index.js";
4
+ import { i18n } from "./i18n/index.js";
5
+ export declare function getRangeValidationResult(value: RelativeRangeDatePickerValue | null, allowNullableValues: boolean | undefined, minValue: DateTime | undefined, maxValue: DateTime | undefined, isDateUnavailable: ((v: DateTime, endpoint: 'start' | 'end') => boolean) | undefined, timeZone: string, t?: ExtractFunctionType<typeof i18n>): {
6
+ isInvalid: boolean;
7
+ errors: never[];
8
+ startValidationResult?: undefined;
9
+ endValidationResult?: undefined;
10
+ } | {
11
+ isInvalid: boolean;
12
+ startValidationResult: import("./datePicker.js").ValidationResult;
13
+ endValidationResult: import("./datePicker.js").ValidationResult;
14
+ errors: string[];
15
+ };