@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,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 {};
@@ -5,6 +5,7 @@ exports.normalizeTimeZone = normalizeTimeZone;
5
5
  exports.getTimeZoneOffset = getTimeZoneOffset;
6
6
  exports.getDefaultTitle = getDefaultTitle;
7
7
  const date_utils_1 = require("@gravity-ui/date-utils");
8
+ const i18n_1 = require("./components/Presets/i18n/index.js");
8
9
  const utils_1 = require("./components/Presets/utils.js");
9
10
  function resolveTimeZone(timeZone) {
10
11
  if (timeZone === 'default' || timeZone === 'system') {
@@ -22,7 +23,7 @@ function normalizeTimeZone(timeZone) {
22
23
  function getTimeZoneOffset(timeZone) {
23
24
  return `UTC ${(0, date_utils_1.dateTime)({ timeZone }).format('Z')}`;
24
25
  }
25
- function getDefaultTitle({ value, timeZone, alwaysShowAsAbsolute, format = 'L', presets, }) {
26
+ function getDefaultTitle({ value, timeZone, alwaysShowAsAbsolute, format = 'L', presets, presetsTranslations = i18n_1.i18n, lang = 'en', }) {
26
27
  var _a, _b, _c, _d, _e, _f;
27
28
  if (!value) {
28
29
  return '';
@@ -33,19 +34,19 @@ function getDefaultTitle({ value, timeZone, alwaysShowAsAbsolute, format = 'L',
33
34
  from =
34
35
  value.start.type === 'relative' && !alwaysShowAsAbsolute
35
36
  ? value.start.value
36
- : ((_b = (_a = (0, date_utils_1.dateTimeParse)(value.start.value, { timeZone })) === null || _a === void 0 ? void 0 : _a.format(format)) !== null && _b !== void 0 ? _b : '');
37
+ : ((_b = (_a = (0, date_utils_1.dateTimeParse)(value.start.value, { timeZone, lang })) === null || _a === void 0 ? void 0 : _a.format(format)) !== null && _b !== void 0 ? _b : '');
37
38
  }
38
39
  let to = '';
39
40
  if (value.end) {
40
41
  to =
41
42
  value.end.type === 'relative' && !alwaysShowAsAbsolute
42
43
  ? value.end.value
43
- : ((_d = (_c = (0, date_utils_1.dateTimeParse)(value.end.value, { timeZone, roundUp: true })) === null || _c === void 0 ? void 0 : _c.format(format)) !== null && _d !== void 0 ? _d : '');
44
+ : ((_d = (_c = (0, date_utils_1.dateTimeParse)(value.end.value, { timeZone, roundUp: true, lang })) === null || _c === void 0 ? void 0 : _c.format(format)) !== null && _d !== void 0 ? _d : '');
44
45
  }
45
46
  if (!alwaysShowAsAbsolute &&
46
47
  ((_e = value.start) === null || _e === void 0 ? void 0 : _e.type) === 'relative' &&
47
48
  ((_f = value.end) === null || _f === void 0 ? void 0 : _f.type) === 'relative') {
48
- return `${(0, utils_1.getPresetTitle)(value.start.value, value.end.value, presets)}`;
49
+ return `${(0, utils_1.getPresetTitle)(value.start.value, value.end.value, presets, presetsTranslations)}`;
49
50
  }
50
51
  const delimiter = ' — ';
51
52
  return `${from}${delimiter}${to}${tz}`;
@@ -1 +1 @@
1
- {"version":3,"file":"utils.js","sourceRoot":"../../../../src","sources":["components/RelativeRangeDatePicker/utils.ts"],"names":[],"mappings":";;AAQA,0CAMC;AAED,8CAOC;AAED,8CAEC;AASD,0CAuCC;AA3ED,uDAA+D;AAM/D,yDAA0D;AAE1D,SAAgB,eAAe,CAAC,QAAgB;IAC5C,IAAI,QAAQ,KAAK,SAAS,IAAI,QAAQ,KAAK,QAAQ,EAAE,CAAC;QAClD,OAAO,IAAA,qBAAQ,EAAC,EAAC,QAAQ,EAAC,CAAC,CAAC,QAAQ,EAAE,CAAC;IAC3C,CAAC;IAED,OAAO,QAAQ,CAAC;AACpB,CAAC;AAED,SAAgB,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,SAAgB,iBAAiB,CAAC,QAAgB;IAC9C,OAAO,OAAO,IAAA,qBAAQ,EAAC,EAAC,QAAQ,EAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC;AACrD,CAAC;AASD,SAAgB,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,IAAA,0BAAa,EAAC,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,IAAA,0BAAa,EAAC,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,IAAA,sBAAc,EAAC,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":";;AASA,0CAMC;AAED,8CAOC;AAED,8CAEC;AAWD,0CA2CC;AAlFD,uDAA+D;AAM/D,6DAA+C;AAC/C,yDAA0D;AAE1D,SAAgB,eAAe,CAAC,QAAgB;IAC5C,IAAI,QAAQ,KAAK,SAAS,IAAI,QAAQ,KAAK,QAAQ,EAAE,CAAC;QAClD,OAAO,IAAA,qBAAQ,EAAC,EAAC,QAAQ,EAAC,CAAC,CAAC,QAAQ,EAAE,CAAC;IAC3C,CAAC;IAED,OAAO,QAAQ,CAAC;AACpB,CAAC;AAED,SAAgB,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,SAAgB,iBAAiB,CAAC,QAAgB;IAC9C,OAAO,OAAO,IAAA,qBAAQ,EAAC,EAAC,QAAQ,EAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC;AACrD,CAAC;AAWD,SAAgB,eAAe,CAAC,EAC5B,KAAK,EACL,QAAQ,EACR,oBAAoB,EACpB,MAAM,GAAG,GAAG,EACZ,OAAO,EACP,mBAAmB,GAAG,WAAI,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,IAAA,0BAAa,EAAC,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,IAAA,0BAAa,EAAC,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,IAAA,sBAAc,EAAC,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,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# 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;
@@ -40,7 +40,7 @@ function mergeDateTime(date, time) {
40
40
  .set('minutes', time.minute())
41
41
  .set('seconds', time.second());
42
42
  }
43
- function formatDateTime(date, format, timezone) {
44
- return (0, date_utils_1.dateTime)({ input: date, timeZone: timezone }).format(format);
43
+ function formatDateTime(date, format, timezone, lang) {
44
+ return (0, date_utils_1.dateTime)({ input: date, timeZone: timezone, lang }).format(format);
45
45
  }
46
46
  //# sourceMappingURL=dates.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"dates.js","sourceRoot":"../../../../src","sources":["components/utils/dates.ts"],"names":[],"mappings":";;AAGA,8BAEC;AAMD,wDAEC;AAED,8BAiBC;AAED,wCAaC;AAED,sCAKC;AAED,wCAEC;AA1DD,uDAAgD;AAGhD,SAAgB,SAAS,CAAC,IAAc;IACpC,OAAO,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC;AACvC,CAAC;AAMD,SAAgB,sBAAsB,CAAC,EAAC,gBAAgB,EAAE,QAAQ,EAA0B;IACxF,OAAO,gBAAgB,aAAhB,gBAAgB,cAAhB,gBAAgB,GAAI,IAAA,qBAAQ,EAAC,EAAC,QAAQ,EAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;AACnE,CAAC;AAED,SAAgB,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,SAAgB,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,SAAgB,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,SAAgB,cAAc,CAAC,IAAc,EAAE,MAAc,EAAE,QAAgB;IAC3E,OAAO,IAAA,qBAAQ,EAAC,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":";;AAGA,8BAEC;AAMD,wDAEC;AAED,8BAiBC;AAED,wCAaC;AAED,sCAKC;AAED,wCAEC;AA1DD,uDAAgD;AAGhD,SAAgB,SAAS,CAAC,IAAc;IACpC,OAAO,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC;AACvC,CAAC;AAMD,SAAgB,sBAAsB,CAAC,EAAC,gBAAgB,EAAE,QAAQ,EAA0B;IACxF,OAAO,gBAAgB,aAAhB,gBAAgB,cAAhB,gBAAgB,GAAI,IAAA,qBAAQ,EAAC,EAAC,QAAQ,EAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;AACnE,CAAC;AAED,SAAgB,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,SAAgB,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,SAAgB,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,SAAgB,cAAc,CAAC,IAAc,EAAE,MAAc,EAAE,QAAgB,EAAE,IAAY;IACzF,OAAO,IAAA,qBAAQ,EAAC,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;
@@ -2,7 +2,7 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.getValidationResult = getValidationResult;
4
4
  const i18n_1 = require("./i18n/index.js");
5
- function getValidationResult(value, minValue, maxValue, isDateUnavailable, timeZone, valueTitle = 'Value') {
5
+ function getValidationResult(value, minValue, maxValue, isDateUnavailable, timeZone, valueTitle = 'Value', t = i18n_1.i18n) {
6
6
  const rangeOverflow = value && maxValue && maxValue.isBefore(value);
7
7
  const rangeUnderflow = value && minValue && value.isBefore(minValue);
8
8
  const isUnavailable = (value && (isDateUnavailable === null || isDateUnavailable === void 0 ? void 0 : isDateUnavailable(value))) || false;
@@ -10,19 +10,19 @@ function getValidationResult(value, minValue, maxValue, isDateUnavailable, timeZ
10
10
  const errors = [];
11
11
  if (isInvalid) {
12
12
  if (rangeUnderflow && minValue) {
13
- errors.push((0, i18n_1.i18n)('Value must be {minValue} or later.', {
13
+ errors.push(t('Value must be {minValue} or later.', {
14
14
  minValue: minValue.timeZone(timeZone).format(),
15
15
  value: valueTitle,
16
16
  }));
17
17
  }
18
18
  if (rangeOverflow && maxValue) {
19
- errors.push((0, i18n_1.i18n)('Value must be {maxValue} or earlier.', {
19
+ errors.push(t('Value must be {maxValue} or earlier.', {
20
20
  maxValue: maxValue.timeZone(timeZone).format(),
21
21
  value: valueTitle,
22
22
  }));
23
23
  }
24
24
  if (isUnavailable) {
25
- errors.push((0, i18n_1.i18n)('Selected date unavailable.'));
25
+ errors.push(t('Selected date unavailable.'));
26
26
  }
27
27
  }
28
28
  return { isInvalid, errors };
@@ -1 +1 @@
1
- {"version":3,"file":"datePicker.js","sourceRoot":"../../../../../src","sources":["components/utils/validation/datePicker.ts"],"names":[],"mappings":";;AASA,kDAuCC;AA9CD,0CAA4B;AAO5B,SAAgB,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,IAAA,WAAI,EAAC,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,IAAA,WAAI,EAAC,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,IAAA,WAAI,EAAC,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":";;AAWA,kDAwCC;AA/CD,0CAA4B;AAO5B,SAAgB,mBAAmB,CAC/B,KAAkC,EAClC,QAA8B,EAC9B,QAA8B,EAC9B,iBAAyD,EACzD,QAAgB,EAChB,UAAU,GAAG,OAAO,EACpB,IAAsC,WAAI;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
+ };
@@ -0,0 +1,34 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.getRangeValidationResult = getRangeValidationResult;
4
+ const date_utils_1 = require("@gravity-ui/date-utils");
5
+ const datePicker_1 = require("./datePicker.js");
6
+ const i18n_1 = require("./i18n/index.js");
7
+ function getRangeValidationResult(value, allowNullableValues, minValue, maxValue, isDateUnavailable, timeZone, t = i18n_1.i18n) {
8
+ if (!value) {
9
+ return { isInvalid: false, errors: [] };
10
+ }
11
+ const startDate = value.start ? (0, date_utils_1.dateTimeParse)(value.start.value, { timeZone }) : null;
12
+ const endDate = value.end ? (0, date_utils_1.dateTimeParse)(value.end.value, { timeZone, roundUp: true }) : null;
13
+ const startValidationResult = (0, datePicker_1.getValidationResult)(startDate, minValue, maxValue, isDateUnavailable ? (date) => isDateUnavailable(date, 'start') : undefined, timeZone, t('"From"'), t);
14
+ if (!startDate && !allowNullableValues) {
15
+ startValidationResult.isInvalid = true;
16
+ startValidationResult.errors.push(t('"From" is required.'));
17
+ }
18
+ const endValidationResult = (0, datePicker_1.getValidationResult)(endDate, minValue, maxValue, isDateUnavailable ? (date) => isDateUnavailable(date, 'end') : undefined, timeZone, t('"To"'), t);
19
+ if (!endDate && !allowNullableValues) {
20
+ endValidationResult.isInvalid = true;
21
+ endValidationResult.errors.push(t('"To" is required.'));
22
+ }
23
+ if (startDate && endDate && endDate.isBefore(startDate)) {
24
+ startValidationResult.isInvalid = true;
25
+ startValidationResult.errors.push(t(`"From" can't be after "To".`));
26
+ }
27
+ return {
28
+ isInvalid: startValidationResult.isInvalid || endValidationResult.isInvalid,
29
+ startValidationResult,
30
+ endValidationResult,
31
+ errors: startValidationResult.errors.concat(endValidationResult.errors),
32
+ };
33
+ }
34
+ //# sourceMappingURL=relativeRangeDatePicker.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"relativeRangeDatePicker.js","sourceRoot":"../../../../../src","sources":["components/utils/validation/relativeRangeDatePicker.ts"],"names":[],"mappings":";;AASA,4DAyDC;AAlED,uDAAqD;AAMrD,gDAAiD;AACjD,0CAA4B;AAE5B,SAAgB,wBAAwB,CACpC,KAA0C,EAC1C,mBAAwC,EACxC,QAA8B,EAC9B,QAA8B,EAC9B,iBAAoF,EACpF,QAAgB,EAChB,IAAsC,WAAI;IAE1C,IAAI,CAAC,KAAK,EAAE,CAAC;QACT,OAAO,EAAC,SAAS,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE,EAAC,CAAC;IAC1C,CAAC;IAED,MAAM,SAAS,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,IAAA,0BAAa,EAAC,KAAK,CAAC,KAAK,CAAC,KAAK,EAAE,EAAC,QAAQ,EAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;IACpF,MAAM,OAAO,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,IAAA,0BAAa,EAAC,KAAK,CAAC,GAAG,CAAC,KAAK,EAAE,EAAC,QAAQ,EAAE,OAAO,EAAE,IAAI,EAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;IAE7F,MAAM,qBAAqB,GAAG,IAAA,gCAAmB,EAC7C,SAAS,EACT,QAAQ,EACR,QAAQ,EACR,iBAAiB,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,iBAAiB,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,SAAS,EAC1E,QAAQ,EACR,CAAC,CAAC,QAAQ,CAAC,EACX,CAAC,CACJ,CAAC;IAEF,IAAI,CAAC,SAAS,IAAI,CAAC,mBAAmB,EAAE,CAAC;QACrC,qBAAqB,CAAC,SAAS,GAAG,IAAI,CAAC;QACvC,qBAAqB,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC;IAChE,CAAC;IAED,MAAM,mBAAmB,GAAG,IAAA,gCAAmB,EAC3C,OAAO,EACP,QAAQ,EACR,QAAQ,EACR,iBAAiB,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,iBAAiB,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS,EACxE,QAAQ,EACR,CAAC,CAAC,MAAM,CAAC,EACT,CAAC,CACJ,CAAC;IAEF,IAAI,CAAC,OAAO,IAAI,CAAC,mBAAmB,EAAE,CAAC;QACnC,mBAAmB,CAAC,SAAS,GAAG,IAAI,CAAC;QACrC,mBAAmB,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,mBAAmB,CAAC,CAAC,CAAC;IAC5D,CAAC;IAED,IAAI,SAAS,IAAI,OAAO,IAAI,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE,CAAC;QACtD,qBAAqB,CAAC,SAAS,GAAG,IAAI,CAAC;QACvC,qBAAqB,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,6BAA6B,CAAC,CAAC,CAAC;IACxE,CAAC;IAED,OAAO;QACH,SAAS,EAAE,qBAAqB,CAAC,SAAS,IAAI,mBAAmB,CAAC,SAAS;QAC3E,qBAAqB;QACrB,mBAAmB;QACnB,MAAM,EAAE,qBAAqB,CAAC,MAAM,CAAC,MAAM,CAAC,mBAAmB,CAAC,MAAM,CAAC;KAC1E,CAAC;AACN,CAAC","sourcesContent":["import {dateTimeParse} from '@gravity-ui/date-utils';\nimport type {DateTime} from '@gravity-ui/date-utils';\n\nimport type {RelativeRangeDatePickerValue} from '../../RelativeRangeDatePicker';\nimport type {ExtractFunctionType} from '../../types';\n\nimport {getValidationResult} from './datePicker';\nimport {i18n} from './i18n';\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 t: ExtractFunctionType<typeof i18n> = i18n,\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 t('\"From\"'),\n t,\n );\n\n if (!startDate && !allowNullableValues) {\n startValidationResult.isInvalid = true;\n startValidationResult.errors.push(t('\"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 t('\"To\"'),\n t,\n );\n\n if (!endDate && !allowNullableValues) {\n endValidationResult.isInvalid = true;\n endValidationResult.errors.push(t('\"To\" is required.'));\n }\n\n if (startDate && endDate && endDate.isBefore(startDate)) {\n startValidationResult.isInvalid = true;\n startValidationResult.errors.push(t(`\"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 +1 @@
1
- {"type":"commonjs","version":"3.2.4","sideEffects":["*.css","*.scss"]}
1
+ {"type":"commonjs","version":"3.3.0","sideEffects":["*.css","*.scss"]}
@@ -1 +1 @@
1
- {"version":3,"sources":["components/CalendarView/Calendar.scss","home/runner/work/date-components/date-components/node_modules/@gravity-ui/uikit/styles/mixins.scss"],"names":[],"mappings":"AAKA;EACI;EACA;EACA;EAEA;AAAA;AAAA;AAAA;EAIA;AAAA;AAAA;AAAA;EAKA;EAEA;;AAEA;EACI;;AAGJ;EACI;ECkJJ;EACA;EACA;EACA;;ADhJA;EACI;EAEA;;AAGJ;EACI;;AAGJ;EACI;;AAGJ;EACI;;AAGJ;EACI;EAEA;EAEA;EACA;EAEA;;AAGJ;EACI;EACA;EACA;EAEA;EACA;EAEA;EACA;EACA;EACA;;AAEA;EACI;IACI;;EAEJ;IACI;;;AAIR;EACI;IACI;;EAEJ;IACI;;;AAIR;EACI;IACI;IAEA;;EAEJ;IACI;IAEA;;;AAIR;EACI;IACI;IAEA;;EAEJ;IACI;IAEA;;;AAIR;EACI;IACI;IAEA;;EAEJ;IACI;IAEA;;;AAIR;EACI;IACI;IAEA;;EAEJ;IACI;IAEA;;;AAIR;EACI;EACA;;AAEA;EACI;;AAIR;EACI;EACA;;AAEA;EACI;;AAIR;EACI;;AAEA;EACI;;AAEJ;EACI;;AAIR;EACI;;AAEA;EACI;;AAEJ;EACI;;AAIR;EACI;IACI;;;AAKZ;EACI;EACA;;AAEA;EAGI;EAEA;;AAGJ;EACI;;AAIR;EACI;EACA;EACA;EACA;;AAGJ;EACI;EACA;EACA;EAEA;EACA;;AAEA;EACI;;AAIR;EACI;EAEA;EACA;EACA;EAEA;EACA;EAEA;EACA;EAEA;EACA;;AAEA;EACI;;AAGJ;EACI;;AAGJ;EACI;;AAGJ;EACI;;AAGJ;EAEI;;AAGJ;EACI;;AAGJ;EACI;EAEA;;AAGJ;EACI;EACA;EAEA;EAEA;EACA;EAEA;EAEA;EACA;EAEA;;AAGJ;EACI;EACA;EAEA;;AAGJ;EACI;EACA;EAEA;EACA","sourcesContent":["@use '@gravity-ui/uikit/styles/mixins';\n@use '../variables';\n\n$block: '.#{variables.$ns}calendar';\n\n#{$block} {\n --_--calendar-padding: var(--g-date-calendar-padding, 8px);\n --_--calendar-day-size: var(--g-date-calendar-day-size, 28px);\n --_--calendar-days-gap: var(--g-date-calendar-days-gap, 2px);\n\n --_--calendar-width: calc(\n 7 * var(--_--calendar-day-size) + 6 * var(--_--calendar-days-gap) + 2 *\n var(--_--calendar-padding)\n );\n --_--calendar-grid-height: calc(\n 7 * var(--_--calendar-day-size) + 5 * var(--_--calendar-days-gap) +\n var(--_--calendar-padding)\n );\n\n display: inline-block;\n\n width: var(--_--calendar-width);\n\n &_size_l {\n --g-date-calendar-day-size: 36px;\n }\n\n &_size_xl {\n --g-date-calendar-day-size: 42px;\n\n @include mixins.text-body-2();\n }\n\n &__header {\n display: flex;\n\n padding: var(--_--calendar-padding) var(--_--calendar-padding) 0;\n }\n\n &__years-label {\n color: var(--g-color-text-secondary);\n }\n\n &__controls {\n margin-inline-start: auto;\n }\n\n &__control-icon {\n transform: scaleX(var(--g-flow-direction));\n }\n\n &__grid {\n position: relative;\n\n overflow: hidden;\n\n width: 100%;\n height: var(--_--calendar-grid-height);\n\n user-select: none;\n }\n\n &__content {\n position: absolute;\n inset-block-start: 0;\n inset-inline-start: 0;\n\n display: grid;\n grid-template-rows: var(--_--calendar-day-size) 1fr;\n\n box-sizing: border-box;\n width: 100%;\n height: 100%;\n padding: 0 var(--_--calendar-padding) var(--_--calendar-padding);\n\n @keyframes calendar-forward {\n from {\n transform: translateX(0);\n }\n to {\n transform: translateX(100%);\n }\n }\n\n @keyframes calendar-backward {\n from {\n transform: translateX(0);\n }\n to {\n transform: translateX(-100%);\n }\n }\n\n @keyframes calendar-zoom-in-showing {\n from {\n opacity: 0;\n\n transform: scale(2);\n }\n to {\n opacity: 1;\n\n transform: scale(1);\n }\n }\n\n @keyframes calendar-zoom-in-hiding {\n from {\n opacity: 1;\n\n transform: scale(1);\n }\n to {\n opacity: 0;\n\n transform: scale(0);\n }\n }\n\n @keyframes calendar-zoom-out-showing {\n from {\n opacity: 0;\n\n transform: scale(0);\n }\n to {\n opacity: 1;\n\n transform: scale(1);\n }\n }\n\n @keyframes calendar-zoom-out-hiding {\n from {\n opacity: 1;\n\n transform: scale(1);\n }\n to {\n opacity: 0;\n\n transform: scale(2);\n }\n }\n\n &_animation_forward {\n transform: translateX(-100%);\n animation: calendar-forward 0.25s ease forwards;\n\n &#{$block}__current-state {\n inset-inline-start: calc(var(--g-flow-direction) * -100%);\n }\n }\n\n &_animation_backward {\n transform: translateX(0);\n animation: calendar-backward 0.25s ease forwards;\n\n &#{$block}__current-state {\n inset-inline-start: calc(var(--g-flow-direction) * 100%);\n }\n }\n\n &_animation_zoom-in {\n transform: scale();\n\n &#{$block}__previous-state {\n animation: calendar-zoom-in-hiding 0.25s ease forwards;\n }\n &#{$block}__current-state {\n animation: calendar-zoom-in-showing 0.25s ease forwards;\n }\n }\n\n &_animation_zoom-out {\n transform: scale();\n\n &#{$block}__current-state {\n animation: calendar-zoom-out-showing 0.25s ease forwards;\n }\n &#{$block}__previous-state {\n animation: calendar-zoom-out-hiding 0.25s ease forwards;\n }\n }\n\n @media screen and (prefers-reduced-motion: reduce), (update: slow) {\n &[class] {\n animation-duration: 0.001ms;\n }\n }\n }\n\n &__grid-rowgroup {\n display: grid;\n gap: var(--_--calendar-days-gap);\n\n &_mode_months,\n &_mode_quarters,\n &_mode_years {\n grid-row: 1 / -1;\n\n padding: 12px 0 0;\n }\n\n &-header {\n align-self: center;\n }\n }\n\n &__grid-row {\n display: grid;\n grid-auto-columns: 1fr;\n grid-auto-flow: column;\n gap: var(--_--calendar-days-gap);\n }\n\n &__weekday {\n display: flex;\n justify-content: center;\n align-items: center;\n\n width: 100%;\n height: 100%;\n\n &_weekend {\n color: var(--g-color-text-danger);\n }\n }\n\n &__button {\n position: relative;\n\n display: flex;\n justify-content: center;\n align-items: center;\n\n width: 100%;\n height: 100%;\n\n font-weight: var(--g-text-subheader-font-weight);\n cursor: pointer;\n\n border-radius: 4px;\n outline: none;\n\n &:focus {\n box-shadow: 0 0 0 2px var(--g-color-line-misc);\n }\n\n &:focus:not(:focus-visible) {\n box-shadow: none;\n }\n\n &:hover {\n background-color: var(--g-color-base-generic);\n }\n\n &_selected[class] {\n background-color: var(--g-color-base-selection);\n }\n\n &_selected#{&}_selection-start,\n &_selected#{&}_selection-end {\n background-color: var(--g-color-base-brand);\n }\n\n &_weekend {\n color: var(--g-color-text-danger);\n }\n\n &_out-of-boundary {\n font-weight: var(--g-text-body-font-weight);\n\n opacity: 0.6;\n }\n\n &_current::before {\n position: absolute;\n inset-block-start: 50%;\n\n display: block;\n\n width: 4px;\n height: 4px;\n\n content: '';\n\n border-radius: 50%;\n background-color: currentColor;\n\n transform: translateY(8px);\n }\n\n &_disabled {\n font-weight: var(--g-text-body-font-weight);\n pointer-events: none;\n\n opacity: 0.6;\n }\n\n &_unavailable:not(&_disabled) {\n font-weight: var(--g-text-body-font-weight);\n cursor: default;\n\n opacity: 0.5;\n background-color: var(--g-color-base-generic);\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 link-reset() {\n color: inherit;\n text-decoration: inherit;\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);\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":"Calendar.css"}
1
+ {"version":3,"sources":["components/CalendarView/Calendar.scss","home/runner/work/date-components/date-components/node_modules/@gravity-ui/uikit/styles/mixins.scss"],"names":[],"mappings":"AAKA;EACI;EACA;EACA;EAEA;AAAA;AAAA;AAAA;EAIA;AAAA;AAAA;AAAA;EAKA;EAEA;;AAEA;EACI;;AAGJ;EACI;ECkJJ;EACA;EACA;EACA;;ADhJA;EACI;EAEA;;AAGJ;EACI;;AAGJ;EACI;;AAGJ;EACI;;AAGJ;EACI;EAEA;EAEA;EACA;EAEA;;AAGJ;EACI;EACA;EACA;EAEA;EACA;EAEA;EACA;EACA;EACA;;AAEA;EACI;IACI;;EAEJ;IACI;;;AAIR;EACI;IACI;;EAEJ;IACI;;;AAIR;EACI;IACI;IAEA;;EAEJ;IACI;IAEA;;;AAIR;EACI;IACI;IAEA;;EAEJ;IACI;IAEA;;;AAIR;EACI;IACI;IAEA;;EAEJ;IACI;IAEA;;;AAIR;EACI;IACI;IAEA;;EAEJ;IACI;IAEA;;;AAIR;EACI;EACA;;AAEA;EACI;;AAIR;EACI;EACA;;AAEA;EACI;;AAIR;EACI;;AAEA;EACI;;AAEJ;EACI;;AAIR;EACI;;AAEA;EACI;;AAEJ;EACI;;AAIR;EACI;IACI;;;AAKZ;EACI;EACA;;AAEA;EAGI;EAEA;;AAGJ;EACI;;AAIR;EACI;EACA;EACA;EACA;;AAGJ;EACI;EACA;EACA;EAEA;EACA;;AAEA;EACI;;AAIR;EACI;EAEA;EACA;EACA;EAEA;EACA;EAEA;EACA;EAEA;EACA;;AAEA;EACI;;AAGJ;EACI;;AAGJ;EACI;;AAGJ;EACI;;AAGJ;EAEI;;AAGJ;EACI;;AAGJ;EACI;EAEA;;AAGJ;EACI;EACA;EAEA;EAEA;EACA;EAEA;EAEA;EACA;EAEA;;AAGJ;EACI;EACA;EAEA;;AAGJ;EACI;EACA;EAEA;EACA","sourcesContent":["@use '@gravity-ui/uikit/styles/mixins';\n@use '../variables';\n\n$block: '.#{variables.$ns}calendar';\n\n#{$block} {\n --_--calendar-padding: var(--g-date-calendar-padding, 8px);\n --_--calendar-day-size: var(--g-date-calendar-day-size, 28px);\n --_--calendar-days-gap: var(--g-date-calendar-days-gap, 2px);\n\n --_--calendar-width: calc(\n 7 * var(--_--calendar-day-size) + 6 * var(--_--calendar-days-gap) + 2 *\n var(--_--calendar-padding)\n );\n --_--calendar-grid-height: calc(\n 7 * var(--_--calendar-day-size) + 5 * var(--_--calendar-days-gap) +\n var(--_--calendar-padding)\n );\n\n display: inline-block;\n\n width: var(--_--calendar-width);\n\n &_size_l {\n --g-date-calendar-day-size: 36px;\n }\n\n &_size_xl {\n --g-date-calendar-day-size: 42px;\n\n @include mixins.text-body-2();\n }\n\n &__header {\n display: flex;\n\n padding: var(--_--calendar-padding) var(--_--calendar-padding) 0;\n }\n\n &__years-label {\n color: var(--g-color-text-secondary);\n }\n\n &__controls {\n margin-inline-start: auto;\n }\n\n &__control-icon {\n transform: scaleX(var(--g-flow-direction));\n }\n\n &__grid {\n position: relative;\n\n overflow: hidden;\n\n width: 100%;\n height: var(--_--calendar-grid-height);\n\n user-select: none;\n }\n\n &__content {\n position: absolute;\n inset-block-start: 0;\n inset-inline-start: 0;\n\n display: grid;\n grid-template-rows: var(--_--calendar-day-size) 1fr;\n\n box-sizing: border-box;\n width: 100%;\n height: 100%;\n padding: 0 var(--_--calendar-padding) var(--_--calendar-padding);\n\n @keyframes calendar-forward {\n from {\n transform: translateX(0);\n }\n to {\n transform: translateX(100%);\n }\n }\n\n @keyframes calendar-backward {\n from {\n transform: translateX(0);\n }\n to {\n transform: translateX(-100%);\n }\n }\n\n @keyframes calendar-zoom-in-showing {\n from {\n opacity: 0;\n\n transform: scale(2);\n }\n to {\n opacity: 1;\n\n transform: scale(1);\n }\n }\n\n @keyframes calendar-zoom-in-hiding {\n from {\n opacity: 1;\n\n transform: scale(1);\n }\n to {\n opacity: 0;\n\n transform: scale(0);\n }\n }\n\n @keyframes calendar-zoom-out-showing {\n from {\n opacity: 0;\n\n transform: scale(0);\n }\n to {\n opacity: 1;\n\n transform: scale(1);\n }\n }\n\n @keyframes calendar-zoom-out-hiding {\n from {\n opacity: 1;\n\n transform: scale(1);\n }\n to {\n opacity: 0;\n\n transform: scale(2);\n }\n }\n\n &_animation_forward {\n transform: translateX(-100%);\n animation: calendar-forward 0.25s ease forwards;\n\n &#{$block}__current-state {\n inset-inline-start: calc(var(--g-flow-direction) * -100%);\n }\n }\n\n &_animation_backward {\n transform: translateX(0);\n animation: calendar-backward 0.25s ease forwards;\n\n &#{$block}__current-state {\n inset-inline-start: calc(var(--g-flow-direction) * 100%);\n }\n }\n\n &_animation_zoom-in {\n transform: scale();\n\n &#{$block}__previous-state {\n animation: calendar-zoom-in-hiding 0.25s ease forwards;\n }\n &#{$block}__current-state {\n animation: calendar-zoom-in-showing 0.25s ease forwards;\n }\n }\n\n &_animation_zoom-out {\n transform: scale();\n\n &#{$block}__current-state {\n animation: calendar-zoom-out-showing 0.25s ease forwards;\n }\n &#{$block}__previous-state {\n animation: calendar-zoom-out-hiding 0.25s ease forwards;\n }\n }\n\n @media screen and (prefers-reduced-motion: reduce), (update: slow) {\n &[class] {\n animation-duration: 0.001ms;\n }\n }\n }\n\n &__grid-rowgroup {\n display: grid;\n gap: var(--_--calendar-days-gap);\n\n &_mode_months,\n &_mode_quarters,\n &_mode_years {\n grid-row: 1 / -1;\n\n padding: 12px 0 0;\n }\n\n &-header {\n align-self: center;\n }\n }\n\n &__grid-row {\n display: grid;\n grid-auto-columns: 1fr;\n grid-auto-flow: column;\n gap: var(--_--calendar-days-gap);\n }\n\n &__weekday {\n display: flex;\n justify-content: center;\n align-items: center;\n\n width: 100%;\n height: 100%;\n\n &_weekend {\n color: var(--g-color-text-danger);\n }\n }\n\n &__button {\n position: relative;\n\n display: flex;\n justify-content: center;\n align-items: center;\n\n width: 100%;\n height: 100%;\n\n font-weight: var(--g-text-subheader-font-weight);\n cursor: pointer;\n\n border-radius: 4px;\n outline: none;\n\n &:focus {\n box-shadow: 0 0 0 2px var(--g-color-line-misc);\n }\n\n &:focus:not(:focus-visible) {\n box-shadow: none;\n }\n\n &:hover {\n background-color: var(--g-color-base-generic);\n }\n\n &_selected[class] {\n background-color: var(--g-color-base-selection);\n }\n\n &_selected#{&}_selection-start,\n &_selected#{&}_selection-end {\n background-color: var(--g-color-base-brand);\n }\n\n &_weekend {\n color: var(--g-color-text-danger);\n }\n\n &_out-of-boundary {\n font-weight: var(--g-text-body-font-weight);\n\n opacity: 0.6;\n }\n\n &_current::before {\n position: absolute;\n inset-block-start: 50%;\n\n display: block;\n\n width: 4px;\n height: 4px;\n\n content: '';\n\n border-radius: 50%;\n background-color: currentColor;\n\n transform: translateY(8px);\n }\n\n &_disabled {\n font-weight: var(--g-text-body-font-weight);\n pointer-events: none;\n\n opacity: 0.6;\n }\n\n &_unavailable:not(&_disabled) {\n font-weight: var(--g-text-body-font-weight);\n cursor: default;\n\n opacity: 0.5;\n background-color: var(--g-color-base-generic);\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 link-reset() {\n color: inherit;\n text-decoration: inherit;\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);\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 @at-root #{get-pin-selector(#{$block}_pin_round-round, $selector, $append)} {\n border-radius: $radius;\n }\n\n @at-root #{get-pin-selector(#{$block}_pin_brick-brick, $selector, $append)} {\n border-radius: 0;\n }\n\n @at-root #{get-pin-selector(#{$block}_pin_clear-clear, $selector, $append)} {\n border-radius: 0;\n border-inline: 0;\n }\n\n @at-root #{get-pin-selector(#{$block}_pin_circle-circle, $selector, $append)} {\n border-radius: 100px;\n }\n\n @at-root #{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 @at-root #{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 @at-root #{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 @at-root #{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 @at-root #{get-pin-selector(#{$block}_pin_brick-clear, $selector, $append)} {\n border-radius: 0;\n border-inline-end: 0;\n }\n\n @at-root #{get-pin-selector(#{$block}_pin_clear-brick, $selector, $append)} {\n border-radius: 0;\n border-inline-start: 0;\n }\n\n @at-root #{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 @at-root #{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 @at-root #{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 @at-root #{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 @media (prefers-reduced-motion: reduce) {\n animation: none;\n }\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":"Calendar.css"}
@@ -2,7 +2,7 @@
2
2
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
3
  import React from 'react';
4
4
  import { ChevronLeft, ChevronRight } from '@gravity-ui/icons';
5
- import { ArrowToggle, Button } from '@gravity-ui/uikit';
5
+ import { ArrowToggle, Button, useLang } from '@gravity-ui/uikit';
6
6
  import { block } from "../../utils/cn.js";
7
7
  import { formatDateTime } from "../utils/dates.js";
8
8
  import { useCalendarCellProps } from "./hooks/useCalendarCellProps.js";
@@ -56,15 +56,17 @@ function Content({ className, state, animation, onAnimationEnd }) {
56
56
  }
57
57
  function Weekdays({ state }) {
58
58
  const weekdays = getWeekDays(state);
59
+ const { lang } = useLang();
59
60
  return (_jsx("div", { className: b('grid-row'), role: "row", children: weekdays.map((date) => {
60
- return (_jsx("div", { className: b('weekday', { weekend: state.isWeekend(date) }), role: "columnheader", "aria-label": formatDateTime(date, 'dddd', state.timeZone), children: formatDateTime(date, 'dd', state.timeZone) }, date.day()));
61
+ return (_jsx("div", { className: b('weekday', { weekend: state.isWeekend(date) }), role: "columnheader", "aria-label": formatDateTime(date, 'dddd', state.timeZone, lang), children: formatDateTime(date, 'dd', state.timeZone, lang) }, date.day()));
61
62
  }) }));
62
63
  }
63
64
  function CalendarGridCells({ state }) {
64
65
  const rowsInPeriod = state.mode === 'days' ? 6 : 4;
65
66
  const columnsInRow = state.mode === 'days' ? 7 : 3 + (state.mode === 'quarters' ? 1 : 0);
66
67
  const days = getDaysInPeriod(state);
67
- return (_jsx("div", { className: b('grid-rowgroup', { mode: state.mode }), role: "rowgroup", children: [...new Array(rowsInPeriod).keys()].map((rowIndex) => (_jsxs("div", { className: b('grid-row'), role: "row", children: [state.mode === 'quarters' ? (_jsx("span", { role: "rowheader", className: b('grid-rowgroup-header'), children: formatDateTime(days[rowIndex * columnsInRow], 'YYYY', state.timeZone) })) : null, days
68
+ const { lang } = useLang();
69
+ return (_jsx("div", { className: b('grid-rowgroup', { mode: state.mode }), role: "rowgroup", children: [...new Array(rowsInPeriod).keys()].map((rowIndex) => (_jsxs("div", { className: b('grid-row'), role: "row", children: [state.mode === 'quarters' ? (_jsx("span", { role: "rowheader", className: b('grid-rowgroup-header'), children: formatDateTime(days[rowIndex * columnsInRow], 'YYYY', state.timeZone, lang) })) : null, days
68
70
  .slice(rowIndex * columnsInRow, (rowIndex + 1) * columnsInRow)
69
71
  .map((date) => {
70
72
  return _jsx(CalendarCell, { date: date, state: state }, date.unix());
@@ -1 +1 @@
1
- {"version":3,"file":"CalendarView.js","sourceRoot":"../../../../src","sources":["components/CalendarView/CalendarView.tsx"],"names":[],"mappings":"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","sourcesContent":["'use client';\n\nimport React from 'react';\n\nimport type {DateTime} from '@gravity-ui/date-utils';\nimport {ChevronLeft, ChevronRight} from '@gravity-ui/icons';\nimport {ArrowToggle, Button} from '@gravity-ui/uikit';\n\nimport {block} from '../../utils/cn';\nimport type {AccessibilityProps, DomProps, FocusEvents, StyleProps} from '../types';\nimport {formatDateTime} from '../utils/dates';\n\nimport type {RangeCalendarState} from './hooks/types';\nimport {useCalendarCellProps} from './hooks/useCalendarCellProps';\nimport {useCalendarGridProps} from './hooks/useCalendarGridProps';\nimport {useCalendarProps} from './hooks/useCalendarProps';\nimport type {CalendarState} from './hooks/useCalendarState';\nimport {calendarLayouts, getDaysInPeriod, getWeekDays} from './utils';\n\nimport './Calendar.scss';\n\nconst b = block('calendar');\n\nexport type CalendarSize = 'm' | 'l' | 'xl';\n\nexport interface CalendarInstance {\n focus: () => void;\n}\n\nexport interface CalendarViewProps extends DomProps, StyleProps, FocusEvents, AccessibilityProps {\n state: CalendarState | RangeCalendarState;\n /**\n * The size of the element.\n * @default m\n */\n size?: CalendarSize;\n}\nexport const CalendarView = React.forwardRef<CalendarInstance, CalendarViewProps>(function Calendar(\n props: CalendarViewProps,\n ref,\n) {\n const {state} = props;\n const {calendarProps, modeButtonProps, nextButtonProps, previousButtonProps} = useCalendarProps(\n props,\n state,\n );\n\n React.useImperativeHandle(ref, () => ({\n focus() {\n state.setFocused(true);\n },\n }));\n\n return (\n <div\n {...calendarProps}\n className={b({size: props.size}, props.className)}\n style={props.style}\n >\n <div className={b('header')}>\n <Button {...modeButtonProps} view=\"flat\" size={props.size}>\n {state.availableModes.indexOf(state.mode) + 1 ===\n state.availableModes.length ? (\n <span key=\"label\" className={b('mode-label', b(`years-label`))}>\n {modeButtonProps.children}\n </span>\n ) : (\n [\n <span key=\"label\" className={b('mode-label')}>\n {modeButtonProps.children}\n </span>,\n <Button.Icon key=\"icon\">\n <ArrowToggle direction=\"bottom\" />\n </Button.Icon>,\n ]\n )}\n </Button>\n <div className={b('controls')}>\n <Button {...previousButtonProps} view=\"flat\" size={props.size}>\n <Button.Icon>\n <ChevronLeft className={b('control-icon')} />\n </Button.Icon>\n </Button>\n <Button {...nextButtonProps} view=\"flat\" size={props.size}>\n <Button.Icon>\n <ChevronRight className={b('control-icon')} />\n </Button.Icon>\n </Button>\n </div>\n </div>\n <CalendarGrid state={state} />\n </div>\n );\n});\n\ninterface CalendarGridProps {\n state: CalendarState | RangeCalendarState;\n}\nfunction CalendarGrid({state}: CalendarGridProps) {\n const [prevState, setPrevState] = React.useState(() => ({...state, isFocused: false}));\n\n const modeChanged = state.mode !== prevState.mode;\n const startDateChanged = !state.startDate.isSame(prevState.startDate, 'days');\n\n let animation;\n if (modeChanged) {\n if (calendarLayouts.indexOf(prevState.mode) > calendarLayouts.indexOf(state.mode)) {\n animation = 'zoom-out';\n } else {\n animation = 'zoom-in';\n }\n } else if (startDateChanged) {\n if (state.startDate.isBefore(prevState.startDate)) {\n animation = 'forward';\n } else {\n animation = 'backward';\n }\n }\n\n const {gridProps} = useCalendarGridProps(state);\n\n return (\n <div className={b('grid')} {...gridProps}>\n {animation && (\n <Content className={b('previous-state')} state={prevState} animation={animation} />\n )}\n <Content\n key=\"current\"\n className={b('current-state')}\n state={state}\n animation={animation}\n onAnimationEnd={() => {\n setPrevState({...state, isFocused: false});\n }}\n />\n </div>\n );\n}\n\ninterface ContentProps {\n className?: string;\n animation?: string;\n onAnimationEnd?: () => void;\n state: CalendarState | RangeCalendarState;\n}\nfunction Content({className, state, animation, onAnimationEnd}: ContentProps) {\n return (\n <div\n className={b('content', {animation}, className)}\n onAnimationEnd={onAnimationEnd}\n role=\"presentation\"\n >\n {state.mode === 'days' && <Weekdays state={state} />}\n <CalendarGridCells state={state} />\n </div>\n );\n}\n\ninterface WeekdaysProps {\n state: CalendarState | RangeCalendarState;\n}\nfunction Weekdays({state}: WeekdaysProps) {\n const weekdays = getWeekDays(state);\n\n return (\n <div className={b('grid-row')} role=\"row\">\n {weekdays.map((date) => {\n return (\n <div\n key={date.day()}\n className={b('weekday', {weekend: state.isWeekend(date)})}\n role=\"columnheader\"\n aria-label={formatDateTime(date, 'dddd', state.timeZone)}\n >\n {formatDateTime(date, 'dd', state.timeZone)}\n </div>\n );\n })}\n </div>\n );\n}\n\ninterface CalendarGridProps {\n state: CalendarState | RangeCalendarState;\n}\nfunction CalendarGridCells({state}: CalendarGridProps) {\n const rowsInPeriod = state.mode === 'days' ? 6 : 4;\n const columnsInRow = state.mode === 'days' ? 7 : 3 + (state.mode === 'quarters' ? 1 : 0);\n const days = getDaysInPeriod(state);\n return (\n <div className={b('grid-rowgroup', {mode: state.mode})} role=\"rowgroup\">\n {[...new Array(rowsInPeriod).keys()].map((rowIndex) => (\n <div key={rowIndex} className={b('grid-row')} role=\"row\">\n {state.mode === 'quarters' ? (\n <span role=\"rowheader\" className={b('grid-rowgroup-header')}>\n {formatDateTime(days[rowIndex * columnsInRow], 'YYYY', state.timeZone)}\n </span>\n ) : null}\n {days\n .slice(rowIndex * columnsInRow, (rowIndex + 1) * columnsInRow)\n .map((date) => {\n return <CalendarCell key={date.unix()} date={date} state={state} />;\n })}\n </div>\n ))}\n </div>\n );\n}\n\ninterface CalendarCellProps {\n date: DateTime;\n state: CalendarState | RangeCalendarState;\n}\nfunction CalendarCell({date, state}: CalendarCellProps) {\n const {\n cellProps,\n buttonProps,\n formattedDate,\n isDisabled,\n isSelected,\n isRangeSelection,\n isSelectionStart,\n isSelectionEnd,\n isOutsideCurrentRange,\n isUnavailable,\n isCurrent,\n isWeekend,\n } = useCalendarCellProps(date, state);\n\n return (\n <div {...cellProps}>\n <div\n {...buttonProps}\n className={b('button', {\n disabled: isDisabled,\n selected: isSelected,\n 'range-selection': isRangeSelection,\n 'selection-start': isSelectionStart,\n 'selection-end': isSelectionEnd,\n 'out-of-boundary': isOutsideCurrentRange,\n unavailable: isUnavailable,\n current: isCurrent,\n weekend: isWeekend,\n })}\n >\n {formattedDate}\n </div>\n </div>\n );\n}\n"]}
1
+ {"version":3,"file":"CalendarView.js","sourceRoot":"../../../../src","sources":["components/CalendarView/CalendarView.tsx"],"names":[],"mappings":"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","sourcesContent":["'use client';\n\nimport React from 'react';\n\nimport type {DateTime} from '@gravity-ui/date-utils';\nimport {ChevronLeft, ChevronRight} from '@gravity-ui/icons';\nimport {ArrowToggle, Button, useLang} from '@gravity-ui/uikit';\n\nimport {block} from '../../utils/cn';\nimport type {AccessibilityProps, DomProps, FocusEvents, StyleProps} from '../types';\nimport {formatDateTime} from '../utils/dates';\n\nimport type {RangeCalendarState} from './hooks/types';\nimport {useCalendarCellProps} from './hooks/useCalendarCellProps';\nimport {useCalendarGridProps} from './hooks/useCalendarGridProps';\nimport {useCalendarProps} from './hooks/useCalendarProps';\nimport type {CalendarState} from './hooks/useCalendarState';\nimport {calendarLayouts, getDaysInPeriod, getWeekDays} from './utils';\n\nimport './Calendar.scss';\n\nconst b = block('calendar');\n\nexport type CalendarSize = 'm' | 'l' | 'xl';\n\nexport interface CalendarInstance {\n focus: () => void;\n}\n\nexport interface CalendarViewProps extends DomProps, StyleProps, FocusEvents, AccessibilityProps {\n state: CalendarState | RangeCalendarState;\n /**\n * The size of the element.\n * @default m\n */\n size?: CalendarSize;\n}\nexport const CalendarView = React.forwardRef<CalendarInstance, CalendarViewProps>(function Calendar(\n props: CalendarViewProps,\n ref,\n) {\n const {state} = props;\n const {calendarProps, modeButtonProps, nextButtonProps, previousButtonProps} = useCalendarProps(\n props,\n state,\n );\n\n React.useImperativeHandle(ref, () => ({\n focus() {\n state.setFocused(true);\n },\n }));\n\n return (\n <div\n {...calendarProps}\n className={b({size: props.size}, props.className)}\n style={props.style}\n >\n <div className={b('header')}>\n <Button {...modeButtonProps} view=\"flat\" size={props.size}>\n {state.availableModes.indexOf(state.mode) + 1 ===\n state.availableModes.length ? (\n <span key=\"label\" className={b('mode-label', b(`years-label`))}>\n {modeButtonProps.children}\n </span>\n ) : (\n [\n <span key=\"label\" className={b('mode-label')}>\n {modeButtonProps.children}\n </span>,\n <Button.Icon key=\"icon\">\n <ArrowToggle direction=\"bottom\" />\n </Button.Icon>,\n ]\n )}\n </Button>\n <div className={b('controls')}>\n <Button {...previousButtonProps} view=\"flat\" size={props.size}>\n <Button.Icon>\n <ChevronLeft className={b('control-icon')} />\n </Button.Icon>\n </Button>\n <Button {...nextButtonProps} view=\"flat\" size={props.size}>\n <Button.Icon>\n <ChevronRight className={b('control-icon')} />\n </Button.Icon>\n </Button>\n </div>\n </div>\n <CalendarGrid state={state} />\n </div>\n );\n});\n\ninterface CalendarGridProps {\n state: CalendarState | RangeCalendarState;\n}\nfunction CalendarGrid({state}: CalendarGridProps) {\n const [prevState, setPrevState] = React.useState(() => ({...state, isFocused: false}));\n\n const modeChanged = state.mode !== prevState.mode;\n const startDateChanged = !state.startDate.isSame(prevState.startDate, 'days');\n\n let animation;\n if (modeChanged) {\n if (calendarLayouts.indexOf(prevState.mode) > calendarLayouts.indexOf(state.mode)) {\n animation = 'zoom-out';\n } else {\n animation = 'zoom-in';\n }\n } else if (startDateChanged) {\n if (state.startDate.isBefore(prevState.startDate)) {\n animation = 'forward';\n } else {\n animation = 'backward';\n }\n }\n\n const {gridProps} = useCalendarGridProps(state);\n\n return (\n <div className={b('grid')} {...gridProps}>\n {animation && (\n <Content className={b('previous-state')} state={prevState} animation={animation} />\n )}\n <Content\n key=\"current\"\n className={b('current-state')}\n state={state}\n animation={animation}\n onAnimationEnd={() => {\n setPrevState({...state, isFocused: false});\n }}\n />\n </div>\n );\n}\n\ninterface ContentProps {\n className?: string;\n animation?: string;\n onAnimationEnd?: () => void;\n state: CalendarState | RangeCalendarState;\n}\nfunction Content({className, state, animation, onAnimationEnd}: ContentProps) {\n return (\n <div\n className={b('content', {animation}, className)}\n onAnimationEnd={onAnimationEnd}\n role=\"presentation\"\n >\n {state.mode === 'days' && <Weekdays state={state} />}\n <CalendarGridCells state={state} />\n </div>\n );\n}\n\ninterface WeekdaysProps {\n state: CalendarState | RangeCalendarState;\n}\nfunction Weekdays({state}: WeekdaysProps) {\n const weekdays = getWeekDays(state);\n const {lang} = useLang();\n\n return (\n <div className={b('grid-row')} role=\"row\">\n {weekdays.map((date) => {\n return (\n <div\n key={date.day()}\n className={b('weekday', {weekend: state.isWeekend(date)})}\n role=\"columnheader\"\n aria-label={formatDateTime(date, 'dddd', state.timeZone, lang)}\n >\n {formatDateTime(date, 'dd', state.timeZone, lang)}\n </div>\n );\n })}\n </div>\n );\n}\n\ninterface CalendarGridProps {\n state: CalendarState | RangeCalendarState;\n}\nfunction CalendarGridCells({state}: CalendarGridProps) {\n const rowsInPeriod = state.mode === 'days' ? 6 : 4;\n const columnsInRow = state.mode === 'days' ? 7 : 3 + (state.mode === 'quarters' ? 1 : 0);\n const days = getDaysInPeriod(state);\n const {lang} = useLang();\n return (\n <div className={b('grid-rowgroup', {mode: state.mode})} role=\"rowgroup\">\n {[...new Array(rowsInPeriod).keys()].map((rowIndex) => (\n <div key={rowIndex} className={b('grid-row')} role=\"row\">\n {state.mode === 'quarters' ? (\n <span role=\"rowheader\" className={b('grid-rowgroup-header')}>\n {formatDateTime(\n days[rowIndex * columnsInRow],\n 'YYYY',\n state.timeZone,\n lang,\n )}\n </span>\n ) : null}\n {days\n .slice(rowIndex * columnsInRow, (rowIndex + 1) * columnsInRow)\n .map((date) => {\n return <CalendarCell key={date.unix()} date={date} state={state} />;\n })}\n </div>\n ))}\n </div>\n );\n}\n\ninterface CalendarCellProps {\n date: DateTime;\n state: CalendarState | RangeCalendarState;\n}\nfunction CalendarCell({date, state}: CalendarCellProps) {\n const {\n cellProps,\n buttonProps,\n formattedDate,\n isDisabled,\n isSelected,\n isRangeSelection,\n isSelectionStart,\n isSelectionEnd,\n isOutsideCurrentRange,\n isUnavailable,\n isCurrent,\n isWeekend,\n } = useCalendarCellProps(date, state);\n\n return (\n <div {...cellProps}>\n <div\n {...buttonProps}\n className={b('button', {\n disabled: isDisabled,\n selected: isSelected,\n 'range-selection': isRangeSelection,\n 'selection-start': isSelectionStart,\n 'selection-end': isSelectionEnd,\n 'out-of-boundary': isOutsideCurrentRange,\n unavailable: isUnavailable,\n current: isCurrent,\n weekend: isWeekend,\n })}\n >\n {formattedDate}\n </div>\n </div>\n );\n}\n"]}