@gravity-ui/date-components 3.4.0 → 3.4.2

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 (62) hide show
  1. package/README.md +5 -6
  2. package/dist/cjs/components/Calendar/Calendar.js.map +1 -1
  3. package/dist/cjs/components/CalendarView/hooks/useCalendarState.js.map +1 -1
  4. package/dist/cjs/components/DateField/hooks/useDateFieldProps.js.map +1 -1
  5. package/dist/cjs/components/DateField/hooks/useDateFieldState.js +5 -3
  6. package/dist/cjs/components/DateField/hooks/useDateFieldState.js.map +1 -1
  7. package/dist/cjs/components/DateField/utils.js +7 -7
  8. package/dist/cjs/components/DateField/utils.js.map +1 -1
  9. package/dist/cjs/components/DatePicker/DatePicker.js.map +1 -1
  10. package/dist/cjs/components/DatePicker/hooks/datePickerStateFactory.js.map +1 -1
  11. package/dist/cjs/components/RangeDateField/hooks/useRangeDateFieldState.js +9 -3
  12. package/dist/cjs/components/RangeDateField/hooks/useRangeDateFieldState.js.map +1 -1
  13. package/dist/cjs/components/RangeDateSelection/RangeDateSelection.js.map +1 -1
  14. package/dist/cjs/components/RelativeDateField/RelativeDateField.js.map +1 -1
  15. package/dist/cjs/components/RelativeDatePicker/RelativeDatePicker.js.map +1 -1
  16. package/dist/cjs/components/RelativeRangeDatePicker/RelativeRangeDatePicker.css +1 -1
  17. package/dist/cjs/components/RelativeRangeDatePicker/components/PickerDialog/PickerDoc.js +8 -6
  18. package/dist/cjs/components/RelativeRangeDatePicker/components/PickerDialog/PickerDoc.js.map +1 -1
  19. package/dist/cjs/components/RelativeRangeDatePicker/components/Presets/Presets.js +2 -1
  20. package/dist/cjs/components/RelativeRangeDatePicker/components/Presets/Presets.js.map +1 -1
  21. package/dist/cjs/components/RelativeRangeDatePicker/components/Presets/defaultPresets.d.ts +10 -8
  22. package/dist/cjs/components/RelativeRangeDatePicker/components/Presets/defaultPresets.js +25 -32
  23. package/dist/cjs/components/RelativeRangeDatePicker/components/Presets/defaultPresets.js.map +1 -1
  24. package/dist/cjs/components/RelativeRangeDatePicker/components/Presets/utils.d.ts +1 -1
  25. package/dist/cjs/components/RelativeRangeDatePicker/components/Presets/utils.js +1 -1
  26. package/dist/cjs/components/RelativeRangeDatePicker/components/Presets/utils.js.map +1 -1
  27. package/dist/cjs/components/RelativeRangeDatePicker/types.js.map +1 -1
  28. package/dist/cjs/components/RelativeRangeDatePicker/utils.js +1 -1
  29. package/dist/cjs/components/RelativeRangeDatePicker/utils.js.map +1 -1
  30. package/dist/cjs/components/types/inputs.js.map +1 -1
  31. package/dist/cjs/package.json +1 -1
  32. package/dist/esm/components/Calendar/Calendar.js.map +1 -1
  33. package/dist/esm/components/CalendarView/hooks/useCalendarState.js.map +1 -1
  34. package/dist/esm/components/DateField/hooks/useDateFieldProps.js.map +1 -1
  35. package/dist/esm/components/DateField/hooks/useDateFieldState.js +6 -4
  36. package/dist/esm/components/DateField/hooks/useDateFieldState.js.map +1 -1
  37. package/dist/esm/components/DateField/utils.js +7 -7
  38. package/dist/esm/components/DateField/utils.js.map +1 -1
  39. package/dist/esm/components/DatePicker/DatePicker.js.map +1 -1
  40. package/dist/esm/components/DatePicker/hooks/datePickerStateFactory.js.map +1 -1
  41. package/dist/esm/components/RangeDateField/hooks/useRangeDateFieldState.js +10 -4
  42. package/dist/esm/components/RangeDateField/hooks/useRangeDateFieldState.js.map +1 -1
  43. package/dist/esm/components/RangeDateSelection/RangeDateSelection.js.map +1 -1
  44. package/dist/esm/components/RelativeDateField/RelativeDateField.js.map +1 -1
  45. package/dist/esm/components/RelativeDatePicker/RelativeDatePicker.js.map +1 -1
  46. package/dist/esm/components/RelativeRangeDatePicker/RelativeRangeDatePicker.css +1 -1
  47. package/dist/esm/components/RelativeRangeDatePicker/components/PickerDialog/PickerDoc.js +8 -6
  48. package/dist/esm/components/RelativeRangeDatePicker/components/PickerDialog/PickerDoc.js.map +1 -1
  49. package/dist/esm/components/RelativeRangeDatePicker/components/Presets/Presets.js +2 -1
  50. package/dist/esm/components/RelativeRangeDatePicker/components/Presets/Presets.js.map +1 -1
  51. package/dist/esm/components/RelativeRangeDatePicker/components/Presets/defaultPresets.d.ts +10 -8
  52. package/dist/esm/components/RelativeRangeDatePicker/components/Presets/defaultPresets.js +25 -31
  53. package/dist/esm/components/RelativeRangeDatePicker/components/Presets/defaultPresets.js.map +1 -1
  54. package/dist/esm/components/RelativeRangeDatePicker/components/Presets/utils.d.ts +1 -1
  55. package/dist/esm/components/RelativeRangeDatePicker/components/Presets/utils.js +1 -1
  56. package/dist/esm/components/RelativeRangeDatePicker/components/Presets/utils.js.map +1 -1
  57. package/dist/esm/components/RelativeRangeDatePicker/types.js.map +1 -1
  58. package/dist/esm/components/RelativeRangeDatePicker/utils.js +1 -1
  59. package/dist/esm/components/RelativeRangeDatePicker/utils.js.map +1 -1
  60. package/dist/esm/components/types/inputs.js.map +1 -1
  61. package/dist/esm/package.json +1 -1
  62. package/package.json +43 -41
@@ -1,142 +1,135 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.allPresets = exports.DEFAULT_OTHERS_PRESETS = exports.DEFAULT_TIME_PRESETS = exports.DEFAULT_DATE_PRESETS = void 0;
4
- exports.PresetTitle = PresetTitle;
5
- const jsx_runtime_1 = require("react/jsx-runtime");
6
- const i18n_1 = require("./i18n/index.js");
7
- function PresetTitle({ title, }) {
8
- const { t } = i18n_1.i18n.useTranslation();
9
- return t(title);
10
- }
11
4
  exports.DEFAULT_DATE_PRESETS = [
12
5
  {
13
6
  from: 'now-1d',
14
7
  to: 'now',
15
- title: (0, jsx_runtime_1.jsx)(PresetTitle, { title: "Last day" }),
8
+ title: 'Last day',
16
9
  },
17
10
  {
18
11
  from: 'now-3d',
19
12
  to: 'now',
20
- title: (0, jsx_runtime_1.jsx)(PresetTitle, { title: "Last 3 days" }),
13
+ title: 'Last 3 days',
21
14
  },
22
15
  {
23
16
  from: 'now-1w',
24
17
  to: 'now',
25
- title: (0, jsx_runtime_1.jsx)(PresetTitle, { title: "Last week" }),
18
+ title: 'Last week',
26
19
  },
27
20
  {
28
21
  from: 'now-1M',
29
22
  to: 'now',
30
- title: (0, jsx_runtime_1.jsx)(PresetTitle, { title: "Last month" }),
23
+ title: 'Last month',
31
24
  },
32
25
  {
33
26
  from: 'now-3M',
34
27
  to: 'now',
35
- title: (0, jsx_runtime_1.jsx)(PresetTitle, { title: "Last 3 months" }),
28
+ title: 'Last 3 months',
36
29
  },
37
30
  {
38
31
  from: 'now-6M',
39
32
  to: 'now',
40
- title: (0, jsx_runtime_1.jsx)(PresetTitle, { title: "Last 6 months" }),
33
+ title: 'Last 6 months',
41
34
  },
42
35
  {
43
36
  from: 'now-1y',
44
37
  to: 'now',
45
- title: (0, jsx_runtime_1.jsx)(PresetTitle, { title: "Last year" }),
38
+ title: 'Last year',
46
39
  },
47
40
  {
48
41
  from: 'now-3y',
49
42
  to: 'now',
50
- title: (0, jsx_runtime_1.jsx)(PresetTitle, { title: "Last 3 years" }),
43
+ title: 'Last 3 years',
51
44
  },
52
45
  ];
53
46
  exports.DEFAULT_TIME_PRESETS = [
54
47
  {
55
48
  from: 'now-5m',
56
49
  to: 'now',
57
- title: (0, jsx_runtime_1.jsx)(PresetTitle, { title: "Last 5 minutes" }),
50
+ title: 'Last 5 minutes',
58
51
  },
59
52
  {
60
53
  from: 'now-15m',
61
54
  to: 'now',
62
- title: (0, jsx_runtime_1.jsx)(PresetTitle, { title: "Last 15 minutes" }),
55
+ title: 'Last 15 minutes',
63
56
  },
64
57
  {
65
58
  from: 'now-30m',
66
59
  to: 'now',
67
- title: (0, jsx_runtime_1.jsx)(PresetTitle, { title: "Last 30 minutes" }),
60
+ title: 'Last 30 minutes',
68
61
  },
69
62
  {
70
63
  from: 'now-1h',
71
64
  to: 'now',
72
- title: (0, jsx_runtime_1.jsx)(PresetTitle, { title: "Last hour" }),
65
+ title: 'Last hour',
73
66
  },
74
67
  {
75
68
  from: 'now-3h',
76
69
  to: 'now',
77
- title: (0, jsx_runtime_1.jsx)(PresetTitle, { title: "Last 3 hours" }),
70
+ title: 'Last 3 hours',
78
71
  },
79
72
  {
80
73
  from: 'now-6h',
81
74
  to: 'now',
82
- title: (0, jsx_runtime_1.jsx)(PresetTitle, { title: "Last 6 hours" }),
75
+ title: 'Last 6 hours',
83
76
  },
84
77
  {
85
78
  from: 'now-12h',
86
79
  to: 'now',
87
- title: (0, jsx_runtime_1.jsx)(PresetTitle, { title: "Last 12 hours" }),
80
+ title: 'Last 12 hours',
88
81
  },
89
82
  ];
90
83
  exports.DEFAULT_OTHERS_PRESETS = [
91
84
  {
92
85
  from: 'now/d',
93
86
  to: 'now/d',
94
- title: (0, jsx_runtime_1.jsx)(PresetTitle, { title: "Today" }),
87
+ title: 'Today',
95
88
  },
96
89
  {
97
90
  from: 'now-1d/d',
98
91
  to: 'now-1d/d',
99
- title: (0, jsx_runtime_1.jsx)(PresetTitle, { title: "Yesterday" }),
92
+ title: 'Yesterday',
100
93
  },
101
94
  {
102
95
  from: 'now-2d/d',
103
96
  to: 'now-2d/d',
104
- title: (0, jsx_runtime_1.jsx)(PresetTitle, { title: "Day before yesterday" }),
97
+ title: 'Day before yesterday',
105
98
  },
106
99
  {
107
100
  from: 'now/w',
108
101
  to: 'now/w',
109
- title: (0, jsx_runtime_1.jsx)(PresetTitle, { title: "This week" }),
102
+ title: 'This week',
110
103
  },
111
104
  {
112
105
  from: 'now/M',
113
106
  to: 'now/M',
114
- title: (0, jsx_runtime_1.jsx)(PresetTitle, { title: "This month" }),
107
+ title: 'This month',
115
108
  },
116
109
  {
117
110
  from: 'now/y',
118
111
  to: 'now/y',
119
- title: (0, jsx_runtime_1.jsx)(PresetTitle, { title: "This year" }),
112
+ title: 'This year',
120
113
  },
121
114
  {
122
115
  from: 'now/d',
123
116
  to: 'now',
124
- title: (0, jsx_runtime_1.jsx)(PresetTitle, { title: "From start of day" }),
117
+ title: 'From start of day',
125
118
  },
126
119
  {
127
120
  from: 'now/w',
128
121
  to: 'now',
129
- title: (0, jsx_runtime_1.jsx)(PresetTitle, { title: "From start of week" }),
122
+ title: 'From start of week',
130
123
  },
131
124
  {
132
125
  from: 'now/M',
133
126
  to: 'now',
134
- title: (0, jsx_runtime_1.jsx)(PresetTitle, { title: "From start of month" }),
127
+ title: 'From start of month',
135
128
  },
136
129
  {
137
130
  from: 'now/y',
138
131
  to: 'now',
139
- title: (0, jsx_runtime_1.jsx)(PresetTitle, { title: "From start of year" }),
132
+ title: 'From start of year',
140
133
  },
141
134
  ];
142
135
  exports.allPresets = exports.DEFAULT_TIME_PRESETS.concat(exports.DEFAULT_DATE_PRESETS, exports.DEFAULT_OTHERS_PRESETS);
@@ -1 +1 @@
1
- {"version":3,"file":"defaultPresets.js","sourceRoot":"../../../../../../src","sources":["components/RelativeRangeDatePicker/components/Presets/defaultPresets.tsx"],"names":[],"mappings":"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","sourcesContent":["import {i18n} from './i18n';\n\nexport interface Preset {\n from: string;\n to: string;\n title: React.ReactNode;\n}\n\nexport function PresetTitle({\n title,\n}: {\n title: keyof (typeof i18n.keysetData)['g-date-relative-range-date-picker-presets'];\n}) {\n const {t} = i18n.useTranslation();\n return t(title);\n}\n\nexport const DEFAULT_DATE_PRESETS: Preset[] = [\n {\n from: 'now-1d',\n to: 'now',\n title: <PresetTitle title=\"Last day\" />,\n },\n {\n from: 'now-3d',\n to: 'now',\n title: <PresetTitle title=\"Last 3 days\" />,\n },\n {\n from: 'now-1w',\n to: 'now',\n title: <PresetTitle title=\"Last week\" />,\n },\n {\n from: 'now-1M',\n to: 'now',\n title: <PresetTitle title=\"Last month\" />,\n },\n {\n from: 'now-3M',\n to: 'now',\n title: <PresetTitle title=\"Last 3 months\" />,\n },\n {\n from: 'now-6M',\n to: 'now',\n title: <PresetTitle title=\"Last 6 months\" />,\n },\n {\n from: 'now-1y',\n to: 'now',\n title: <PresetTitle title=\"Last year\" />,\n },\n {\n from: 'now-3y',\n to: 'now',\n title: <PresetTitle title=\"Last 3 years\" />,\n },\n];\n\nexport const DEFAULT_TIME_PRESETS: Preset[] = [\n {\n from: 'now-5m',\n to: 'now',\n title: <PresetTitle title=\"Last 5 minutes\" />,\n },\n {\n from: 'now-15m',\n to: 'now',\n title: <PresetTitle title=\"Last 15 minutes\" />,\n },\n {\n from: 'now-30m',\n to: 'now',\n title: <PresetTitle title=\"Last 30 minutes\" />,\n },\n {\n from: 'now-1h',\n to: 'now',\n title: <PresetTitle title=\"Last hour\" />,\n },\n {\n from: 'now-3h',\n to: 'now',\n title: <PresetTitle title=\"Last 3 hours\" />,\n },\n {\n from: 'now-6h',\n to: 'now',\n title: <PresetTitle title=\"Last 6 hours\" />,\n },\n {\n from: 'now-12h',\n to: 'now',\n title: <PresetTitle title=\"Last 12 hours\" />,\n },\n];\n\nexport const DEFAULT_OTHERS_PRESETS: Preset[] = [\n {\n from: 'now/d',\n to: 'now/d',\n title: <PresetTitle title=\"Today\" />,\n },\n {\n from: 'now-1d/d',\n to: 'now-1d/d',\n title: <PresetTitle title=\"Yesterday\" />,\n },\n {\n from: 'now-2d/d',\n to: 'now-2d/d',\n title: <PresetTitle title=\"Day before yesterday\" />,\n },\n {\n from: 'now/w',\n to: 'now/w',\n title: <PresetTitle title=\"This week\" />,\n },\n {\n from: 'now/M',\n to: 'now/M',\n title: <PresetTitle title=\"This month\" />,\n },\n {\n from: 'now/y',\n to: 'now/y',\n title: <PresetTitle title=\"This year\" />,\n },\n {\n from: 'now/d',\n to: 'now',\n title: <PresetTitle title=\"From start of day\" />,\n },\n {\n from: 'now/w',\n to: 'now',\n title: <PresetTitle title=\"From start of week\" />,\n },\n {\n from: 'now/M',\n to: 'now',\n title: <PresetTitle title=\"From start of month\" />,\n },\n {\n from: 'now/y',\n to: 'now',\n title: <PresetTitle title=\"From start of year\" />,\n },\n];\n\nexport const allPresets = DEFAULT_TIME_PRESETS.concat(DEFAULT_DATE_PRESETS, DEFAULT_OTHERS_PRESETS);\n"]}
1
+ {"version":3,"file":"defaultPresets.js","sourceRoot":"../../../../../../src","sources":["components/RelativeRangeDatePicker/components/Presets/defaultPresets.tsx"],"names":[],"mappings":";;;AAca,QAAA,oBAAoB,GAAoB;IACjD;QACI,IAAI,EAAE,QAAQ;QACd,EAAE,EAAE,KAAK;QACT,KAAK,EAAE,UAAU;KACpB;IACD;QACI,IAAI,EAAE,QAAQ;QACd,EAAE,EAAE,KAAK;QACT,KAAK,EAAE,aAAa;KACvB;IACD;QACI,IAAI,EAAE,QAAQ;QACd,EAAE,EAAE,KAAK;QACT,KAAK,EAAE,WAAW;KACrB;IACD;QACI,IAAI,EAAE,QAAQ;QACd,EAAE,EAAE,KAAK;QACT,KAAK,EAAE,YAAY;KACtB;IACD;QACI,IAAI,EAAE,QAAQ;QACd,EAAE,EAAE,KAAK;QACT,KAAK,EAAE,eAAe;KACzB;IACD;QACI,IAAI,EAAE,QAAQ;QACd,EAAE,EAAE,KAAK;QACT,KAAK,EAAE,eAAe;KACzB;IACD;QACI,IAAI,EAAE,QAAQ;QACd,EAAE,EAAE,KAAK;QACT,KAAK,EAAE,WAAW;KACrB;IACD;QACI,IAAI,EAAE,QAAQ;QACd,EAAE,EAAE,KAAK;QACT,KAAK,EAAE,cAAc;KACxB;CACJ,CAAC;AAEW,QAAA,oBAAoB,GAAoB;IACjD;QACI,IAAI,EAAE,QAAQ;QACd,EAAE,EAAE,KAAK;QACT,KAAK,EAAE,gBAAgB;KAC1B;IACD;QACI,IAAI,EAAE,SAAS;QACf,EAAE,EAAE,KAAK;QACT,KAAK,EAAE,iBAAiB;KAC3B;IACD;QACI,IAAI,EAAE,SAAS;QACf,EAAE,EAAE,KAAK;QACT,KAAK,EAAE,iBAAiB;KAC3B;IACD;QACI,IAAI,EAAE,QAAQ;QACd,EAAE,EAAE,KAAK;QACT,KAAK,EAAE,WAAW;KACrB;IACD;QACI,IAAI,EAAE,QAAQ;QACd,EAAE,EAAE,KAAK;QACT,KAAK,EAAE,cAAc;KACxB;IACD;QACI,IAAI,EAAE,QAAQ;QACd,EAAE,EAAE,KAAK;QACT,KAAK,EAAE,cAAc;KACxB;IACD;QACI,IAAI,EAAE,SAAS;QACf,EAAE,EAAE,KAAK;QACT,KAAK,EAAE,eAAe;KACzB;CACJ,CAAC;AAEW,QAAA,sBAAsB,GAAoB;IACnD;QACI,IAAI,EAAE,OAAO;QACb,EAAE,EAAE,OAAO;QACX,KAAK,EAAE,OAAO;KACjB;IACD;QACI,IAAI,EAAE,UAAU;QAChB,EAAE,EAAE,UAAU;QACd,KAAK,EAAE,WAAW;KACrB;IACD;QACI,IAAI,EAAE,UAAU;QAChB,EAAE,EAAE,UAAU;QACd,KAAK,EAAE,sBAAsB;KAChC;IACD;QACI,IAAI,EAAE,OAAO;QACb,EAAE,EAAE,OAAO;QACX,KAAK,EAAE,WAAW;KACrB;IACD;QACI,IAAI,EAAE,OAAO;QACb,EAAE,EAAE,OAAO;QACX,KAAK,EAAE,YAAY;KACtB;IACD;QACI,IAAI,EAAE,OAAO;QACb,EAAE,EAAE,OAAO;QACX,KAAK,EAAE,WAAW;KACrB;IACD;QACI,IAAI,EAAE,OAAO;QACb,EAAE,EAAE,KAAK;QACT,KAAK,EAAE,mBAAmB;KAC7B;IACD;QACI,IAAI,EAAE,OAAO;QACb,EAAE,EAAE,KAAK;QACT,KAAK,EAAE,oBAAoB;KAC9B;IACD;QACI,IAAI,EAAE,OAAO;QACb,EAAE,EAAE,KAAK;QACT,KAAK,EAAE,qBAAqB;KAC/B;IACD;QACI,IAAI,EAAE,OAAO;QACb,EAAE,EAAE,KAAK;QACT,KAAK,EAAE,oBAAoB;KAC9B;CACJ,CAAC;AAEW,QAAA,UAAU,GAAG,4BAAoB,CAAC,MAAM,CAAC,4BAAoB,EAAE,8BAAsB,CAAC,CAAC","sourcesContent":["import type {i18n} from './i18n';\n\nexport interface Preset {\n from: string;\n to: string;\n title: string;\n}\n\nexport interface DefaultPreset {\n from: string;\n to: string;\n title: keyof (typeof i18n.keysetData)['g-date-relative-range-date-picker-presets'];\n}\n\nexport const DEFAULT_DATE_PRESETS: DefaultPreset[] = [\n {\n from: 'now-1d',\n to: 'now',\n title: 'Last day',\n },\n {\n from: 'now-3d',\n to: 'now',\n title: 'Last 3 days',\n },\n {\n from: 'now-1w',\n to: 'now',\n title: 'Last week',\n },\n {\n from: 'now-1M',\n to: 'now',\n title: 'Last month',\n },\n {\n from: 'now-3M',\n to: 'now',\n title: 'Last 3 months',\n },\n {\n from: 'now-6M',\n to: 'now',\n title: 'Last 6 months',\n },\n {\n from: 'now-1y',\n to: 'now',\n title: 'Last year',\n },\n {\n from: 'now-3y',\n to: 'now',\n title: 'Last 3 years',\n },\n];\n\nexport const DEFAULT_TIME_PRESETS: DefaultPreset[] = [\n {\n from: 'now-5m',\n to: 'now',\n title: 'Last 5 minutes',\n },\n {\n from: 'now-15m',\n to: 'now',\n title: 'Last 15 minutes',\n },\n {\n from: 'now-30m',\n to: 'now',\n title: 'Last 30 minutes',\n },\n {\n from: 'now-1h',\n to: 'now',\n title: 'Last hour',\n },\n {\n from: 'now-3h',\n to: 'now',\n title: 'Last 3 hours',\n },\n {\n from: 'now-6h',\n to: 'now',\n title: 'Last 6 hours',\n },\n {\n from: 'now-12h',\n to: 'now',\n title: 'Last 12 hours',\n },\n];\n\nexport const DEFAULT_OTHERS_PRESETS: DefaultPreset[] = [\n {\n from: 'now/d',\n to: 'now/d',\n title: 'Today',\n },\n {\n from: 'now-1d/d',\n to: 'now-1d/d',\n title: 'Yesterday',\n },\n {\n from: 'now-2d/d',\n to: 'now-2d/d',\n title: 'Day before yesterday',\n },\n {\n from: 'now/w',\n to: 'now/w',\n title: 'This week',\n },\n {\n from: 'now/M',\n to: 'now/M',\n title: 'This month',\n },\n {\n from: 'now/y',\n to: 'now/y',\n title: 'This year',\n },\n {\n from: 'now/d',\n to: 'now',\n title: 'From start of day',\n },\n {\n from: 'now/w',\n to: 'now',\n title: 'From start of week',\n },\n {\n from: 'now/M',\n to: 'now',\n title: 'From start of month',\n },\n {\n from: 'now/y',\n to: 'now',\n title: 'From start of year',\n },\n];\n\nexport const allPresets = DEFAULT_TIME_PRESETS.concat(DEFAULT_DATE_PRESETS, DEFAULT_OTHERS_PRESETS);\n"]}
@@ -2,7 +2,7 @@ import type { DateTime } from '@gravity-ui/date-utils';
2
2
  import type { ExtractFunctionType } from "../../../types/index.js";
3
3
  import type { Preset } from "./defaultPresets.js";
4
4
  import { i18n } from "./i18n/index.js";
5
- export declare function getPresetTitle(start: string, end: string, presets?: Preset[], t?: ExtractFunctionType<typeof i18n>): import("react").ReactNode;
5
+ export declare function getPresetTitle(start: string, end: string, presets?: Preset[], t?: ExtractFunctionType<typeof i18n>): string;
6
6
  export declare function filterPresets(presets: Preset[], minValue?: DateTime): Preset[];
7
7
  export interface PresetTab {
8
8
  id: string;
@@ -31,7 +31,7 @@ function getPresetTitle(start, end, presets = defaultPresets_1.allPresets, t = i
31
31
  const endText = end.replace(/\s+/g, '');
32
32
  for (const preset of presets) {
33
33
  if (preset.from === startText && preset.to === endText) {
34
- return preset.title;
34
+ return t(preset.title);
35
35
  }
36
36
  }
37
37
  if (end === 'now') {
@@ -1 +1 @@
1
- {"version":3,"file":"utils.js","sourceRoot":"../../../../../../src","sources":["components/RelativeRangeDatePicker/components/Presets/utils.ts"],"names":[],"mappings":"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","sourcesContent":["import {dateTimeParse} from '@gravity-ui/date-utils';\nimport type {DateTime} from '@gravity-ui/date-utils';\n\nimport type {ExtractFunctionType} from '../../../types';\n\nimport {\n DEFAULT_DATE_PRESETS,\n DEFAULT_OTHERS_PRESETS,\n DEFAULT_TIME_PRESETS,\n allPresets,\n} from './defaultPresets';\nimport type {Preset} from './defaultPresets';\nimport {i18n} from './i18n';\n\nconst lastRe = /^now-(\\d+)([smhdwMy])$/;\n\nconst oneUnit = {\n s: 'Last second',\n m: 'Last minute',\n h: 'Last hour',\n d: 'Last day',\n w: 'Last week',\n M: 'Last month',\n y: 'Last year',\n} as const;\n\nconst countUnit = {\n s: 'Last {count} second',\n m: 'Last {count} minute',\n h: 'Last {count} hour',\n d: 'Last {count} day',\n w: 'Last {count} week',\n M: 'Last {count} month',\n y: 'Last {count} year',\n} as const;\n\nexport function getPresetTitle(\n start: string,\n end: string,\n presets: Preset[] = allPresets,\n t: ExtractFunctionType<typeof i18n> = i18n,\n) {\n const startText = start.replace(/\\s+/g, '');\n const endText = end.replace(/\\s+/g, '');\n\n for (const preset of presets) {\n if (preset.from === startText && preset.to === endText) {\n return preset.title;\n }\n }\n\n if (end === 'now') {\n const match = lastRe.exec(startText);\n if (match) {\n const [, count, unit] = match;\n if (isDateUnit(unit)) {\n const template = Number(count) === 1 ? oneUnit[unit] : countUnit[unit];\n return t(template, {count});\n }\n }\n }\n\n return startText + ' — ' + endText;\n}\n\nfunction isDateUnit(value: string): value is 's' | 'm' | 'h' | 'd' | 'w' | 'M' | 'y' {\n return ['s', 'm', 'h', 'd', 'w', 'M', 'y'].includes(value);\n}\n\nexport function filterPresets(presets: Preset[], minValue?: DateTime) {\n return presets.filter((preset) => {\n const from = dateTimeParse(preset.from);\n const to = dateTimeParse(preset.to, {roundUp: true});\n\n if (!from || !to) {\n return false;\n }\n\n if (to.isBefore(from)) {\n return false;\n }\n\n if (minValue && from.isBefore(minValue)) {\n return false;\n }\n\n return true;\n });\n}\n\nexport interface PresetTab {\n id: string;\n title: string;\n presets: Preset[];\n}\n\nexport function getDefaultPresetTabs({\n withTime,\n minValue,\n t = i18n,\n}: {\n minValue?: DateTime;\n withTime?: boolean;\n t?: (key: 'Main' | 'Other') => string;\n}) {\n const tabs: PresetTab[] = [];\n\n const mainTab: PresetTab = {\n id: 'main',\n title: t('Main'),\n presets: [],\n };\n const mainPresets = DEFAULT_DATE_PRESETS;\n if (withTime) {\n mainPresets.unshift(...DEFAULT_TIME_PRESETS);\n }\n mainTab.presets = filterPresets(mainPresets, minValue);\n\n if (mainTab.presets.length > 0) {\n tabs.push(mainTab);\n }\n\n const otherTab: PresetTab = {\n id: 'other',\n title: t('Other'),\n presets: filterPresets(DEFAULT_OTHERS_PRESETS, minValue),\n };\n\n if (otherTab.presets.length > 0) {\n tabs.push(otherTab);\n }\n\n return tabs;\n}\n\nexport function filterPresetTabs(tabs: PresetTab[], {minValue}: {minValue?: DateTime} = {}) {\n return tabs.reduce<PresetTab[]>((acc, tab) => {\n const presets = filterPresets(tab.presets, minValue);\n if (presets.length) {\n acc.push({\n ...tab,\n presets,\n });\n }\n return acc;\n }, []);\n}\n"]}
1
+ {"version":3,"file":"utils.js","sourceRoot":"../../../../../../src","sources":["components/RelativeRangeDatePicker/components/Presets/utils.ts"],"names":[],"mappings":"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","sourcesContent":["import {dateTimeParse} from '@gravity-ui/date-utils';\nimport type {DateTime} from '@gravity-ui/date-utils';\n\nimport type {ExtractFunctionType} from '../../../types';\n\nimport {\n DEFAULT_DATE_PRESETS,\n DEFAULT_OTHERS_PRESETS,\n DEFAULT_TIME_PRESETS,\n allPresets,\n} from './defaultPresets';\nimport type {Preset} from './defaultPresets';\nimport {i18n} from './i18n';\n\nconst lastRe = /^now-(\\d+)([smhdwMy])$/;\n\nconst oneUnit = {\n s: 'Last second',\n m: 'Last minute',\n h: 'Last hour',\n d: 'Last day',\n w: 'Last week',\n M: 'Last month',\n y: 'Last year',\n} as const;\n\nconst countUnit = {\n s: 'Last {count} second',\n m: 'Last {count} minute',\n h: 'Last {count} hour',\n d: 'Last {count} day',\n w: 'Last {count} week',\n M: 'Last {count} month',\n y: 'Last {count} year',\n} as const;\n\nexport function getPresetTitle(\n start: string,\n end: string,\n presets: Preset[] = allPresets,\n t: ExtractFunctionType<typeof i18n> = i18n,\n): string {\n const startText = start.replace(/\\s+/g, '');\n const endText = end.replace(/\\s+/g, '');\n\n for (const preset of presets) {\n if (preset.from === startText && preset.to === endText) {\n return t(preset.title as any);\n }\n }\n\n if (end === 'now') {\n const match = lastRe.exec(startText);\n if (match) {\n const [, count, unit] = match;\n if (isDateUnit(unit)) {\n const template = Number(count) === 1 ? oneUnit[unit] : countUnit[unit];\n return t(template, {count});\n }\n }\n }\n\n return startText + ' — ' + endText;\n}\n\nfunction isDateUnit(value: string): value is 's' | 'm' | 'h' | 'd' | 'w' | 'M' | 'y' {\n return ['s', 'm', 'h', 'd', 'w', 'M', 'y'].includes(value);\n}\n\nexport function filterPresets(presets: Preset[], minValue?: DateTime) {\n return presets.filter((preset) => {\n const from = dateTimeParse(preset.from);\n const to = dateTimeParse(preset.to, {roundUp: true});\n\n if (!from || !to) {\n return false;\n }\n\n if (to.isBefore(from)) {\n return false;\n }\n\n if (minValue && from.isBefore(minValue)) {\n return false;\n }\n\n return true;\n });\n}\n\nexport interface PresetTab {\n id: string;\n title: string;\n presets: Preset[];\n}\n\nexport function getDefaultPresetTabs({\n withTime,\n minValue,\n t = i18n,\n}: {\n minValue?: DateTime;\n withTime?: boolean;\n t?: (key: 'Main' | 'Other') => string;\n}) {\n const tabs: PresetTab[] = [];\n\n const mainTab: PresetTab = {\n id: 'main',\n title: t('Main'),\n presets: [],\n };\n const mainPresets = DEFAULT_DATE_PRESETS;\n if (withTime) {\n mainPresets.unshift(...DEFAULT_TIME_PRESETS);\n }\n mainTab.presets = filterPresets(mainPresets, minValue);\n\n if (mainTab.presets.length > 0) {\n tabs.push(mainTab);\n }\n\n const otherTab: PresetTab = {\n id: 'other',\n title: t('Other'),\n presets: filterPresets(DEFAULT_OTHERS_PRESETS, minValue),\n };\n\n if (otherTab.presets.length > 0) {\n tabs.push(otherTab);\n }\n\n return tabs;\n}\n\nexport function filterPresetTabs(tabs: PresetTab[], {minValue}: {minValue?: DateTime} = {}) {\n return tabs.reduce<PresetTab[]>((acc, tab) => {\n const presets = filterPresets(tab.presets, minValue);\n if (presets.length) {\n acc.push({\n ...tab,\n presets,\n });\n }\n return acc;\n }, []);\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"types.js","sourceRoot":"../../../../src","sources":["components/RelativeRangeDatePicker/types.ts"],"names":[],"mappings":"","sourcesContent":["import type {DateTime} from '@gravity-ui/date-utils';\n\nimport type {Value} from '../RelativeDatePicker';\nimport type {\n AccessibilityProps,\n DomProps,\n FocusableProps,\n InputBase,\n InputDOMProps,\n PopupStyleProps,\n RangeValue,\n StyleProps,\n TextInputProps,\n Validation,\n} from '../types';\n\nimport type {Preset} from './components/Presets/defaultPresets';\nimport type {PresetTab} from './components/Presets/utils';\nimport type {\n RelativeRangeDatePickerStateOptions,\n RelativeRangeDatePickerValue,\n} from './hooks/useRelativeRangeDatePickerState';\n\nexport type RelativeRangeDatePickerTriggerProps = Pick<\n React.AllHTMLAttributes<HTMLElement>,\n | 'id'\n | 'role'\n | 'aria-controls'\n | 'aria-haspopup'\n | 'aria-expanded'\n | 'aria-label'\n | 'aria-labelledby'\n | 'aria-describedby'\n | 'aria-details'\n | 'onClick'\n | 'onKeyDown'\n | 'disabled'\n | 'readOnly'\n>;\n\nexport interface RelativeRangeDatePickerRenderControlProps {\n ref: React.Ref<HTMLElement>;\n value: RelativeRangeDatePickerValue | null;\n title: string;\n errorMessage?: React.ReactNode;\n validationState?: 'invalid';\n open: boolean;\n setOpen: (open: boolean) => void;\n triggerProps: RelativeRangeDatePickerTriggerProps;\n}\n\nexport interface RelativeRangeDatePickerProps\n extends RelativeRangeDatePickerStateOptions,\n DomProps,\n AccessibilityProps,\n InputBase,\n InputDOMProps,\n TextInputProps,\n Validation,\n FocusableProps,\n StyleProps,\n PopupStyleProps {\n /** Format of the date when rendered in the input. [Available formats](https://day.js.org/docs/en/display/format) */\n format?: string;\n /** A placeholder date that controls the default values of each segment when the user first interacts with them. Defaults to today's date at midnight. */\n placeholderValue?: DateTime;\n /** Apply changes with button */\n withApplyButton?: boolean;\n /** Show time zone selector */\n withZonesList?: boolean;\n /** Show relative range presets */\n withPresets?: boolean;\n /** Apply presets immediately */\n applyPresetsImmediately?: boolean;\n /** Show header with docs tooltip */\n withHeader?: boolean;\n /** Custom preset tabs */\n presetTabs?: PresetTab[];\n /** Custom docs for picker, if empty array docs will be hidden */\n docs?: Preset[];\n /** Show selected relative values as absolute dates */\n alwaysShowAsAbsolute?: boolean;\n /** */\n getRangeTitle?: (value: RangeValue<Value | null> | null, timeZone: string) => string;\n /** Handler that is called when the popup's open state changes. */\n onOpenChange?: (open: boolean) => void;\n /** Used to render control. */\n renderControl?: (props: RelativeRangeDatePickerRenderControlProps) => React.ReactElement;\n}\n"]}
1
+ {"version":3,"file":"types.js","sourceRoot":"../../../../src","sources":["components/RelativeRangeDatePicker/types.ts"],"names":[],"mappings":"","sourcesContent":["import type {DateTime} from '@gravity-ui/date-utils';\n\nimport type {Value} from '../RelativeDatePicker';\nimport type {\n AccessibilityProps,\n DomProps,\n FocusableProps,\n InputBase,\n InputDOMProps,\n PopupStyleProps,\n RangeValue,\n StyleProps,\n TextInputProps,\n Validation,\n} from '../types';\n\nimport type {Preset} from './components/Presets/defaultPresets';\nimport type {PresetTab} from './components/Presets/utils';\nimport type {\n RelativeRangeDatePickerStateOptions,\n RelativeRangeDatePickerValue,\n} from './hooks/useRelativeRangeDatePickerState';\n\nexport type RelativeRangeDatePickerTriggerProps = Pick<\n React.AllHTMLAttributes<HTMLElement>,\n | 'id'\n | 'role'\n | 'aria-controls'\n | 'aria-haspopup'\n | 'aria-expanded'\n | 'aria-label'\n | 'aria-labelledby'\n | 'aria-describedby'\n | 'aria-details'\n | 'onClick'\n | 'onKeyDown'\n | 'disabled'\n | 'readOnly'\n>;\n\nexport interface RelativeRangeDatePickerRenderControlProps {\n ref: React.Ref<HTMLElement>;\n value: RelativeRangeDatePickerValue | null;\n title: string;\n errorMessage?: React.ReactNode;\n validationState?: 'invalid';\n open: boolean;\n setOpen: (open: boolean) => void;\n triggerProps: RelativeRangeDatePickerTriggerProps;\n}\n\nexport interface RelativeRangeDatePickerProps\n extends\n RelativeRangeDatePickerStateOptions,\n DomProps,\n AccessibilityProps,\n InputBase,\n InputDOMProps,\n TextInputProps,\n Validation,\n FocusableProps,\n StyleProps,\n PopupStyleProps {\n /** Format of the date when rendered in the input. [Available formats](https://day.js.org/docs/en/display/format) */\n format?: string;\n /** A placeholder date that controls the default values of each segment when the user first interacts with them. Defaults to today's date at midnight. */\n placeholderValue?: DateTime;\n /** Apply changes with button */\n withApplyButton?: boolean;\n /** Show time zone selector */\n withZonesList?: boolean;\n /** Show relative range presets */\n withPresets?: boolean;\n /** Apply presets immediately */\n applyPresetsImmediately?: boolean;\n /** Show header with docs tooltip */\n withHeader?: boolean;\n /** Custom preset tabs */\n presetTabs?: PresetTab[];\n /** Custom docs for picker, if empty array docs will be hidden */\n docs?: Preset[];\n /** Show selected relative values as absolute dates */\n alwaysShowAsAbsolute?: boolean;\n /** */\n getRangeTitle?: (value: RangeValue<Value | null> | null, timeZone: string) => string;\n /** Handler that is called when the popup's open state changes. */\n onOpenChange?: (open: boolean) => void;\n /** Used to render control. */\n renderControl?: (props: RelativeRangeDatePickerRenderControlProps) => React.ReactElement;\n}\n"]}
@@ -46,7 +46,7 @@ function getDefaultTitle({ value, timeZone, alwaysShowAsAbsolute, format = 'L',
46
46
  if (!alwaysShowAsAbsolute &&
47
47
  ((_e = value.start) === null || _e === void 0 ? void 0 : _e.type) === 'relative' &&
48
48
  ((_f = value.end) === null || _f === void 0 ? void 0 : _f.type) === 'relative') {
49
- return `${(0, utils_1.getPresetTitle)(value.start.value, value.end.value, presets, presetsTranslations)}`;
49
+ return (0, utils_1.getPresetTitle)(value.start.value, value.end.value, presets, presetsTranslations);
50
50
  }
51
51
  const delimiter = ' — ';
52
52
  return `${from}${delimiter}${to}${tz}`;
@@ -1 +1 @@
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"]}
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,IAAA,sBAAc,EAAC,KAAK,CAAC,KAAK,CAAC,KAAK,EAAE,KAAK,CAAC,GAAG,CAAC,KAAK,EAAE,OAAO,EAAE,mBAAmB,CAAC,CAAC;IAC5F,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): string {\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"]}
@@ -1 +1 @@
1
- {"version":3,"file":"inputs.js","sourceRoot":"../../../../src","sources":["components/types/inputs.ts"],"names":[],"mappings":"","sourcesContent":["import type {\n TextInputProps as TextInputBaseProps,\n TextInputPin,\n TextInputSize,\n TextInputView,\n} from '@gravity-ui/uikit';\n\nexport type ValidationState = 'invalid';\n\nexport interface AccessibilityProps {\n /** Defines a string value that labels the current element. */\n 'aria-label'?: string;\n /** Identifies the element (or elements) that labels the current element. */\n 'aria-labelledby'?: string;\n /** Identifies the element (or elements) that describes the object. */\n 'aria-describedby'?: string;\n /** Identifies the element (or elements) that provide a detailed, extended description for the object. */\n 'aria-details'?: string;\n}\n\nexport interface ValueBase<T, C = T> {\n /** The current value (controlled). */\n value?: T;\n /** The default value (uncontrolled). */\n defaultValue?: T;\n /** Handler that is called when the value changes. */\n onUpdate?: (value: C) => void;\n}\n\nexport interface Validation\n extends Pick<TextInputBaseProps, 'validationState' | 'errorMessage' | 'errorPlacement'> {}\n\nexport interface DomProps {\n /** The element's unique identifier. */\n id?: string;\n}\n\nexport interface InputDOMProps {\n /**\n * The name of the input element, used when submitting an HTML form.\n */\n name?: string;\n /**\n * The id of a form element in the same document. If this attribute is not set,\n * the input element is associated with its ancestor form element, if any.\n */\n form?: string;\n}\nexport interface InputBase {\n /**\n * Whether the field is disabled.\n * @default false\n */\n disabled?: boolean;\n /**\n * Whether the calendar value is immutable.\n * @default false\n */\n readOnly?: boolean;\n}\n\nexport interface TextInputProps {\n /** The size of the element */\n size?: TextInputSize;\n /**\n * Corner rounding\n * @default 'round-round'\n */\n pin?: TextInputPin;\n /** Control view */\n view?: TextInputView;\n /** Inner field label */\n label?: TextInputBaseProps['label'];\n /** Text that appears in the field when it has no value set */\n placeholder?: string;\n /**\n * Show clear button\n * @default false\n */\n hasClear?: boolean;\n}\n\nexport interface TextInputExtendProps {\n /**\n * User`s node rendered before label and input\n */\n startContent?: TextInputBaseProps['startContent'];\n /**\n * User`s node rendered after input and clear button\n */\n endContent?: TextInputBaseProps['endContent'];\n}\n\nexport interface RangeValue<T> {\n /** The start value of the range. */\n start: T;\n /** The end value of the range. */\n end: T;\n}\n"]}
1
+ {"version":3,"file":"inputs.js","sourceRoot":"../../../../src","sources":["components/types/inputs.ts"],"names":[],"mappings":"","sourcesContent":["import type {\n TextInputProps as TextInputBaseProps,\n TextInputPin,\n TextInputSize,\n TextInputView,\n} from '@gravity-ui/uikit';\n\nexport type ValidationState = 'invalid';\n\nexport interface AccessibilityProps {\n /** Defines a string value that labels the current element. */\n 'aria-label'?: string;\n /** Identifies the element (or elements) that labels the current element. */\n 'aria-labelledby'?: string;\n /** Identifies the element (or elements) that describes the object. */\n 'aria-describedby'?: string;\n /** Identifies the element (or elements) that provide a detailed, extended description for the object. */\n 'aria-details'?: string;\n}\n\nexport interface ValueBase<T, C = T> {\n /** The current value (controlled). */\n value?: T;\n /** The default value (uncontrolled). */\n defaultValue?: T;\n /** Handler that is called when the value changes. */\n onUpdate?: (value: C) => void;\n}\n\nexport interface Validation extends Pick<\n TextInputBaseProps,\n 'validationState' | 'errorMessage' | 'errorPlacement'\n> {}\n\nexport interface DomProps {\n /** The element's unique identifier. */\n id?: string;\n}\n\nexport interface InputDOMProps {\n /**\n * The name of the input element, used when submitting an HTML form.\n */\n name?: string;\n /**\n * The id of a form element in the same document. If this attribute is not set,\n * the input element is associated with its ancestor form element, if any.\n */\n form?: string;\n}\nexport interface InputBase {\n /**\n * Whether the field is disabled.\n * @default false\n */\n disabled?: boolean;\n /**\n * Whether the calendar value is immutable.\n * @default false\n */\n readOnly?: boolean;\n}\n\nexport interface TextInputProps {\n /** The size of the element */\n size?: TextInputSize;\n /**\n * Corner rounding\n * @default 'round-round'\n */\n pin?: TextInputPin;\n /** Control view */\n view?: TextInputView;\n /** Inner field label */\n label?: TextInputBaseProps['label'];\n /** Text that appears in the field when it has no value set */\n placeholder?: string;\n /**\n * Show clear button\n * @default false\n */\n hasClear?: boolean;\n}\n\nexport interface TextInputExtendProps {\n /**\n * User`s node rendered before label and input\n */\n startContent?: TextInputBaseProps['startContent'];\n /**\n * User`s node rendered after input and clear button\n */\n endContent?: TextInputBaseProps['endContent'];\n}\n\nexport interface RangeValue<T> {\n /** The start value of the range. */\n start: T;\n /** The end value of the range. */\n end: T;\n}\n"]}
@@ -1 +1 @@
1
- {"type":"commonjs","version":"3.4.0","sideEffects":["*.css","*.scss"]}
1
+ {"type":"commonjs","version":"3.4.2","sideEffects":["*.css","*.scss"]}
@@ -1 +1 @@
1
- {"version":3,"file":"Calendar.js","sourceRoot":"../../../../src","sources":["components/Calendar/Calendar.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAC;;AAEb,OAAO,KAAK,MAAM,OAAO,CAAC;AAI1B,OAAO,EAAC,YAAY,EAAC,wCAAqC;AAE1D,OAAO,EAAC,gBAAgB,EAAC,kDAA+C;AAIxE,sCAAuC;AAcvC,MAAM,CAAC,MAAM,QAAQ,GAAG,KAAK,CAAC,UAAU,CAAkC,SAAS,QAAQ,CACvF,KAAoB,EACpB,GAAG;IAEH,MAAM,KAAK,GAAG,gBAAgB,CAAC,KAAK,CAAC,CAAC;IAEtC,OAAO,KAAC,YAAY,kBAAC,GAAG,EAAE,GAAG,IAAM,KAAK,IAAE,KAAK,EAAE,KAAK,IAAI,CAAC;AAC/D,CAAC,CAAC,CAAC","sourcesContent":["'use client';\n\nimport React from 'react';\n\nimport type {DateTime} from '@gravity-ui/date-utils';\n\nimport {CalendarView} from '../CalendarView/CalendarView';\nimport type {CalendarInstance, CalendarSize} from '../CalendarView/CalendarView';\nimport {useCalendarState} from '../CalendarView/hooks/useCalendarState';\nimport type {CalendarStateOptions} from '../CalendarView/hooks/useCalendarState';\nimport type {AccessibilityProps, DomProps, FocusEvents, StyleProps} from '../types';\n\nimport '../CalendarView/Calendar.scss';\n\nexport interface CalendarProps<T = DateTime>\n extends CalendarStateOptions<T>,\n DomProps,\n StyleProps,\n FocusEvents,\n AccessibilityProps {\n /**\n * The size of the element.\n * @default m\n */\n size?: CalendarSize;\n}\nexport const Calendar = React.forwardRef<CalendarInstance, CalendarProps>(function Calendar(\n props: CalendarProps,\n ref,\n) {\n const state = useCalendarState(props);\n\n return <CalendarView ref={ref} {...props} state={state} />;\n});\n"]}
1
+ {"version":3,"file":"Calendar.js","sourceRoot":"../../../../src","sources":["components/Calendar/Calendar.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAC;;AAEb,OAAO,KAAK,MAAM,OAAO,CAAC;AAI1B,OAAO,EAAC,YAAY,EAAC,wCAAqC;AAE1D,OAAO,EAAC,gBAAgB,EAAC,kDAA+C;AAIxE,sCAAuC;AAUvC,MAAM,CAAC,MAAM,QAAQ,GAAG,KAAK,CAAC,UAAU,CAAkC,SAAS,QAAQ,CACvF,KAAoB,EACpB,GAAG;IAEH,MAAM,KAAK,GAAG,gBAAgB,CAAC,KAAK,CAAC,CAAC;IAEtC,OAAO,KAAC,YAAY,kBAAC,GAAG,EAAE,GAAG,IAAM,KAAK,IAAE,KAAK,EAAE,KAAK,IAAI,CAAC;AAC/D,CAAC,CAAC,CAAC","sourcesContent":["'use client';\n\nimport React from 'react';\n\nimport type {DateTime} from '@gravity-ui/date-utils';\n\nimport {CalendarView} from '../CalendarView/CalendarView';\nimport type {CalendarInstance, CalendarSize} from '../CalendarView/CalendarView';\nimport {useCalendarState} from '../CalendarView/hooks/useCalendarState';\nimport type {CalendarStateOptions} from '../CalendarView/hooks/useCalendarState';\nimport type {AccessibilityProps, DomProps, FocusEvents, StyleProps} from '../types';\n\nimport '../CalendarView/Calendar.scss';\n\nexport interface CalendarProps<T = DateTime>\n extends CalendarStateOptions<T>, DomProps, StyleProps, FocusEvents, AccessibilityProps {\n /**\n * The size of the element.\n * @default m\n */\n size?: CalendarSize;\n}\nexport const Calendar = React.forwardRef<CalendarInstance, CalendarProps>(function Calendar(\n props: CalendarProps,\n ref,\n) {\n const state = useCalendarState(props);\n\n return <CalendarView ref={ref} {...props} state={state} />;\n});\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"useCalendarState.js","sourceRoot":"../../../../../src","sources":["components/CalendarView/hooks/useCalendarState.ts"],"names":[],"mappings":"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","sourcesContent":["import React from 'react';\n\nimport {dateTime} from '@gravity-ui/date-utils';\nimport type {DateTime} from '@gravity-ui/date-utils';\nimport {useControlledState} from '@gravity-ui/uikit';\n\nimport type {ValueBase} from '../../types';\nimport {constrainValue, createPlaceholderValue, isWeekend, mergeDateTime} from '../../utils/dates';\nimport {useDefaultTimeZone} from '../../utils/useDefaultTimeZone';\nimport {calendarLayouts} from '../utils';\n\nimport type {CalendarLayout, CalendarState, CalendarStateOptionsBase} from './types';\n\nexport interface CalendarStateOptions<T = DateTime>\n extends ValueBase<T | null, T>,\n CalendarStateOptionsBase {}\n\nexport type {CalendarState} from './types';\n\nconst defaultModes: Record<CalendarLayout, boolean> = {\n days: true,\n months: true,\n quarters: false,\n years: true,\n};\nexport function useCalendarState(props: CalendarStateOptions): CalendarState {\n const {disabled, readOnly, modes = defaultModes} = props;\n const [value, setValue] = useControlledState(\n props.value,\n props.defaultValue ?? null,\n props.onUpdate,\n );\n const availableModes = calendarLayouts.filter((l) => modes[l]);\n const minMode = availableModes[0] || 'days';\n\n const [mode, setMode] = useControlledState(\n props.mode,\n props.defaultMode ?? minMode,\n props.onUpdateMode,\n );\n\n const currentMode = mode && availableModes.includes(mode) ? mode : minMode;\n\n const inputTimeZone = useDefaultTimeZone(\n props.value || props.defaultValue || props.focusedValue || props.defaultFocusedValue,\n );\n const timeZone = props.timeZone || inputTimeZone;\n\n const minValue = React.useMemo(\n () => (props.minValue ? props.minValue.timeZone(timeZone) : undefined),\n [timeZone, props.minValue],\n );\n\n const maxValue = React.useMemo(\n () => (props.maxValue ? props.maxValue.timeZone(timeZone) : undefined),\n [timeZone, props.maxValue],\n );\n\n const focusedValue = React.useMemo(() => {\n if (!props.focusedValue) {\n return props.focusedValue;\n }\n return constrainValue(props.focusedValue.timeZone(timeZone), minValue, maxValue);\n }, [props.focusedValue, minValue, maxValue, timeZone]);\n\n const defaultFocusedValue = React.useMemo(() => {\n const defaultValue =\n (props.defaultFocusedValue ? props.defaultFocusedValue : value)?.timeZone(timeZone) ||\n createPlaceholderValue({timeZone}).startOf(minMode);\n return constrainValue(defaultValue, minValue, maxValue);\n }, [maxValue, minValue, props.defaultFocusedValue, timeZone, value, minMode]);\n const [focusedDateInner, setFocusedDate] = useControlledState(\n focusedValue,\n defaultFocusedValue,\n (date: DateTime) => {\n props.onFocusUpdate?.(date.timeZone(inputTimeZone));\n },\n );\n\n const focusedDate =\n focusedDateInner?.timeZone(timeZone) ??\n constrainValue(createPlaceholderValue({timeZone}), minValue, maxValue);\n\n if (isInvalid(focusedDate, minValue, maxValue)) {\n // If the focused date was moved to an invalid value, it can't be focused, so constrain it.\n setFocusedDate(constrainValue(focusedDate, minValue, maxValue));\n }\n\n function focusCell(date: DateTime) {\n setFocusedDate(constrainValue(date.startOf(currentMode), minValue, maxValue));\n }\n\n const [isFocused, setFocused] = React.useState(props.autoFocus || false);\n\n const startDate = getStartDate(focusedDate, currentMode);\n const endDate = getEndDate(focusedDate, currentMode);\n\n return {\n disabled,\n readOnly,\n value,\n setValue(date: DateTime) {\n if (!disabled && !readOnly) {\n let newValue = constrainValue(date, minValue, maxValue);\n if (this.isCellUnavailable(newValue)) {\n return;\n }\n if (value) {\n // If there is a date already selected, then we want to keep its time\n newValue = mergeDateTime(newValue, value.timeZone(timeZone));\n }\n setValue(newValue.timeZone(inputTimeZone));\n }\n },\n timeZone,\n selectDate(date: DateTime, force = false) {\n if (!disabled) {\n if (!readOnly && (force || this.mode === minMode)) {\n this.setValue(date.startOf(minMode));\n if (force && currentMode !== minMode) {\n setMode(minMode);\n }\n } else {\n this.zoomIn();\n }\n }\n },\n minValue,\n maxValue,\n focusedDate,\n startDate,\n endDate,\n setFocusedDate(date: DateTime) {\n focusCell(date);\n setFocused(true);\n },\n focusNextCell() {\n focusCell(focusedDate.add(1, this.mode));\n },\n focusPreviousCell() {\n focusCell(focusedDate.subtract(1, this.mode));\n },\n focusNextRow() {\n if (this.mode === 'days') {\n focusCell(focusedDate.add(1, 'week'));\n } else if (this.mode === 'quarters') {\n focusCell(focusedDate.add(1, 'years'));\n } else {\n focusCell(focusedDate.add(3, this.mode));\n }\n },\n focusPreviousRow() {\n if (this.mode === 'days') {\n focusCell(focusedDate.subtract(1, 'week'));\n } else if (this.mode === 'quarters') {\n focusCell(focusedDate.subtract(1, 'years'));\n } else {\n focusCell(focusedDate.subtract(3, this.mode));\n }\n },\n focusNextPage(larger?: boolean) {\n if (this.mode === 'days') {\n focusCell(focusedDate.add({months: larger ? 12 : 1}));\n } else if (this.mode === 'quarters') {\n focusCell(focusedDate.add(4, 'years'));\n } else {\n focusCell(focusedDate.add(12, this.mode));\n }\n },\n focusPreviousPage(larger?: boolean) {\n if (this.mode === 'days') {\n focusCell(focusedDate.subtract({months: larger ? 12 : 1}));\n } else if (this.mode === 'quarters') {\n focusCell(focusedDate.subtract(4, 'years'));\n } else {\n focusCell(focusedDate.subtract(12, this.mode));\n }\n },\n focusSectionStart() {\n focusCell(getStartDate(focusedDate, this.mode));\n },\n focusSectionEnd() {\n focusCell(getEndDate(focusedDate, this.mode));\n },\n zoomIn() {\n const nextMode = availableModes[availableModes.indexOf(this.mode) - 1];\n if (nextMode) {\n this.setMode(nextMode);\n }\n },\n zoomOut() {\n const nextMode = availableModes[availableModes.indexOf(this.mode) + 1];\n if (nextMode) {\n this.setMode(nextMode);\n }\n },\n selectFocusedDate() {\n this.selectDate(focusedDate, true);\n },\n isFocused,\n setFocused,\n isInvalid(date: DateTime) {\n return isInvalid(date, this.minValue, this.maxValue, this.mode);\n },\n isPreviousPageInvalid() {\n const prev = this.startDate.subtract(1, 'day');\n return this.isInvalid(prev);\n },\n isNextPageInvalid() {\n const next = this.endDate.endOf(this.mode).add(1, 'day');\n return this.isInvalid(next);\n },\n isSelected(date: DateTime) {\n return Boolean(\n value &&\n date.isSame(value.timeZone(timeZone), currentMode) &&\n !this.isCellDisabled(date),\n );\n },\n isCellUnavailable(date: DateTime) {\n if (this.mode === minMode) {\n return Boolean(props.isDateUnavailable && props.isDateUnavailable(date));\n } else {\n return false;\n }\n },\n isCellFocused(date: DateTime) {\n return this.isFocused && focusedDate && date.isSame(focusedDate, currentMode);\n },\n isCellDisabled(date: DateTime) {\n return this.disabled || this.isInvalid(date);\n },\n isWeekend(date: DateTime) {\n if (this.mode !== 'days') {\n return false;\n }\n if (typeof props.isWeekend === 'function') {\n return props.isWeekend(date);\n }\n return isWeekend(date);\n },\n isCurrent(date: DateTime) {\n return dateTime({timeZone}).isSame(date, this.mode);\n },\n mode: currentMode,\n setMode,\n availableModes,\n };\n}\n\nfunction getStartDate(date: DateTime, mode: CalendarLayout) {\n if (mode === 'days') {\n return date.startOf('month');\n }\n\n if (mode === 'months') {\n return date.startOf('year');\n }\n\n if (mode === 'quarters') {\n const year = Math.floor(date.year() / 4) * 4;\n return date.startOf('year').set('year', year);\n }\n\n const year = Math.floor(date.year() / 12) * 12;\n return date.startOf('year').set('year', year);\n}\n\nfunction getEndDate(date: DateTime, mode: CalendarLayout) {\n if (mode === 'days') {\n return date.endOf('month').startOf('day');\n }\n\n if (mode === 'months') {\n return date.endOf('year').startOf('month');\n }\n\n const startDate = getStartDate(date, mode);\n if (mode === 'quarters') {\n return startDate.add(15, 'quarters');\n }\n\n return startDate.add({[mode]: 11});\n}\n\nfunction isInvalid(\n date: DateTime,\n minValue?: DateTime,\n maxValue?: DateTime,\n mode: CalendarLayout = 'days',\n) {\n const constrainedDate = constrainValue(date, minValue, maxValue);\n return !constrainedDate.isSame(date, mode);\n}\n"]}
1
+ {"version":3,"file":"useCalendarState.js","sourceRoot":"../../../../../src","sources":["components/CalendarView/hooks/useCalendarState.ts"],"names":[],"mappings":"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","sourcesContent":["import React from 'react';\n\nimport {dateTime} from '@gravity-ui/date-utils';\nimport type {DateTime} from '@gravity-ui/date-utils';\nimport {useControlledState} from '@gravity-ui/uikit';\n\nimport type {ValueBase} from '../../types';\nimport {constrainValue, createPlaceholderValue, isWeekend, mergeDateTime} from '../../utils/dates';\nimport {useDefaultTimeZone} from '../../utils/useDefaultTimeZone';\nimport {calendarLayouts} from '../utils';\n\nimport type {CalendarLayout, CalendarState, CalendarStateOptionsBase} from './types';\n\nexport interface CalendarStateOptions<T = DateTime>\n extends ValueBase<T | null, T>, CalendarStateOptionsBase {}\n\nexport type {CalendarState} from './types';\n\nconst defaultModes: Record<CalendarLayout, boolean> = {\n days: true,\n months: true,\n quarters: false,\n years: true,\n};\nexport function useCalendarState(props: CalendarStateOptions): CalendarState {\n const {disabled, readOnly, modes = defaultModes} = props;\n const [value, setValue] = useControlledState(\n props.value,\n props.defaultValue ?? null,\n props.onUpdate,\n );\n const availableModes = calendarLayouts.filter((l) => modes[l]);\n const minMode = availableModes[0] || 'days';\n\n const [mode, setMode] = useControlledState(\n props.mode,\n props.defaultMode ?? minMode,\n props.onUpdateMode,\n );\n\n const currentMode = mode && availableModes.includes(mode) ? mode : minMode;\n\n const inputTimeZone = useDefaultTimeZone(\n props.value || props.defaultValue || props.focusedValue || props.defaultFocusedValue,\n );\n const timeZone = props.timeZone || inputTimeZone;\n\n const minValue = React.useMemo(\n () => (props.minValue ? props.minValue.timeZone(timeZone) : undefined),\n [timeZone, props.minValue],\n );\n\n const maxValue = React.useMemo(\n () => (props.maxValue ? props.maxValue.timeZone(timeZone) : undefined),\n [timeZone, props.maxValue],\n );\n\n const focusedValue = React.useMemo(() => {\n if (!props.focusedValue) {\n return props.focusedValue;\n }\n return constrainValue(props.focusedValue.timeZone(timeZone), minValue, maxValue);\n }, [props.focusedValue, minValue, maxValue, timeZone]);\n\n const defaultFocusedValue = React.useMemo(() => {\n const defaultValue =\n (props.defaultFocusedValue ? props.defaultFocusedValue : value)?.timeZone(timeZone) ||\n createPlaceholderValue({timeZone}).startOf(minMode);\n return constrainValue(defaultValue, minValue, maxValue);\n }, [maxValue, minValue, props.defaultFocusedValue, timeZone, value, minMode]);\n const [focusedDateInner, setFocusedDate] = useControlledState(\n focusedValue,\n defaultFocusedValue,\n (date: DateTime) => {\n props.onFocusUpdate?.(date.timeZone(inputTimeZone));\n },\n );\n\n const focusedDate =\n focusedDateInner?.timeZone(timeZone) ??\n constrainValue(createPlaceholderValue({timeZone}), minValue, maxValue);\n\n if (isInvalid(focusedDate, minValue, maxValue)) {\n // If the focused date was moved to an invalid value, it can't be focused, so constrain it.\n setFocusedDate(constrainValue(focusedDate, minValue, maxValue));\n }\n\n function focusCell(date: DateTime) {\n setFocusedDate(constrainValue(date.startOf(currentMode), minValue, maxValue));\n }\n\n const [isFocused, setFocused] = React.useState(props.autoFocus || false);\n\n const startDate = getStartDate(focusedDate, currentMode);\n const endDate = getEndDate(focusedDate, currentMode);\n\n return {\n disabled,\n readOnly,\n value,\n setValue(date: DateTime) {\n if (!disabled && !readOnly) {\n let newValue = constrainValue(date, minValue, maxValue);\n if (this.isCellUnavailable(newValue)) {\n return;\n }\n if (value) {\n // If there is a date already selected, then we want to keep its time\n newValue = mergeDateTime(newValue, value.timeZone(timeZone));\n }\n setValue(newValue.timeZone(inputTimeZone));\n }\n },\n timeZone,\n selectDate(date: DateTime, force = false) {\n if (!disabled) {\n if (!readOnly && (force || this.mode === minMode)) {\n this.setValue(date.startOf(minMode));\n if (force && currentMode !== minMode) {\n setMode(minMode);\n }\n } else {\n this.zoomIn();\n }\n }\n },\n minValue,\n maxValue,\n focusedDate,\n startDate,\n endDate,\n setFocusedDate(date: DateTime) {\n focusCell(date);\n setFocused(true);\n },\n focusNextCell() {\n focusCell(focusedDate.add(1, this.mode));\n },\n focusPreviousCell() {\n focusCell(focusedDate.subtract(1, this.mode));\n },\n focusNextRow() {\n if (this.mode === 'days') {\n focusCell(focusedDate.add(1, 'week'));\n } else if (this.mode === 'quarters') {\n focusCell(focusedDate.add(1, 'years'));\n } else {\n focusCell(focusedDate.add(3, this.mode));\n }\n },\n focusPreviousRow() {\n if (this.mode === 'days') {\n focusCell(focusedDate.subtract(1, 'week'));\n } else if (this.mode === 'quarters') {\n focusCell(focusedDate.subtract(1, 'years'));\n } else {\n focusCell(focusedDate.subtract(3, this.mode));\n }\n },\n focusNextPage(larger?: boolean) {\n if (this.mode === 'days') {\n focusCell(focusedDate.add({months: larger ? 12 : 1}));\n } else if (this.mode === 'quarters') {\n focusCell(focusedDate.add(4, 'years'));\n } else {\n focusCell(focusedDate.add(12, this.mode));\n }\n },\n focusPreviousPage(larger?: boolean) {\n if (this.mode === 'days') {\n focusCell(focusedDate.subtract({months: larger ? 12 : 1}));\n } else if (this.mode === 'quarters') {\n focusCell(focusedDate.subtract(4, 'years'));\n } else {\n focusCell(focusedDate.subtract(12, this.mode));\n }\n },\n focusSectionStart() {\n focusCell(getStartDate(focusedDate, this.mode));\n },\n focusSectionEnd() {\n focusCell(getEndDate(focusedDate, this.mode));\n },\n zoomIn() {\n const nextMode = availableModes[availableModes.indexOf(this.mode) - 1];\n if (nextMode) {\n this.setMode(nextMode);\n }\n },\n zoomOut() {\n const nextMode = availableModes[availableModes.indexOf(this.mode) + 1];\n if (nextMode) {\n this.setMode(nextMode);\n }\n },\n selectFocusedDate() {\n this.selectDate(focusedDate, true);\n },\n isFocused,\n setFocused,\n isInvalid(date: DateTime) {\n return isInvalid(date, this.minValue, this.maxValue, this.mode);\n },\n isPreviousPageInvalid() {\n const prev = this.startDate.subtract(1, 'day');\n return this.isInvalid(prev);\n },\n isNextPageInvalid() {\n const next = this.endDate.endOf(this.mode).add(1, 'day');\n return this.isInvalid(next);\n },\n isSelected(date: DateTime) {\n return Boolean(\n value &&\n date.isSame(value.timeZone(timeZone), currentMode) &&\n !this.isCellDisabled(date),\n );\n },\n isCellUnavailable(date: DateTime) {\n if (this.mode === minMode) {\n return Boolean(props.isDateUnavailable && props.isDateUnavailable(date));\n } else {\n return false;\n }\n },\n isCellFocused(date: DateTime) {\n return this.isFocused && focusedDate && date.isSame(focusedDate, currentMode);\n },\n isCellDisabled(date: DateTime) {\n return this.disabled || this.isInvalid(date);\n },\n isWeekend(date: DateTime) {\n if (this.mode !== 'days') {\n return false;\n }\n if (typeof props.isWeekend === 'function') {\n return props.isWeekend(date);\n }\n return isWeekend(date);\n },\n isCurrent(date: DateTime) {\n return dateTime({timeZone}).isSame(date, this.mode);\n },\n mode: currentMode,\n setMode,\n availableModes,\n };\n}\n\nfunction getStartDate(date: DateTime, mode: CalendarLayout) {\n if (mode === 'days') {\n return date.startOf('month');\n }\n\n if (mode === 'months') {\n return date.startOf('year');\n }\n\n if (mode === 'quarters') {\n const year = Math.floor(date.year() / 4) * 4;\n return date.startOf('year').set('year', year);\n }\n\n const year = Math.floor(date.year() / 12) * 12;\n return date.startOf('year').set('year', year);\n}\n\nfunction getEndDate(date: DateTime, mode: CalendarLayout) {\n if (mode === 'days') {\n return date.endOf('month').startOf('day');\n }\n\n if (mode === 'months') {\n return date.endOf('year').startOf('month');\n }\n\n const startDate = getStartDate(date, mode);\n if (mode === 'quarters') {\n return startDate.add(15, 'quarters');\n }\n\n return startDate.add({[mode]: 11});\n}\n\nfunction isInvalid(\n date: DateTime,\n minValue?: DateTime,\n maxValue?: DateTime,\n mode: CalendarLayout = 'days',\n) {\n const constrainedDate = constrainValue(date, minValue, maxValue);\n return !constrainedDate.isSame(date, mode);\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"useDateFieldProps.js","sourceRoot":"../../../../../src","sources":["components/DateField/hooks/useDateFieldProps.ts"],"names":[],"mappings":"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","sourcesContent":["import React from 'react';\n\nimport type {DateTime} from '@gravity-ui/date-utils';\nimport type {TextInputProps} from '@gravity-ui/uikit';\n\nimport type {\n AccessibilityProps,\n DateFieldBase,\n TextInputProps as DateFieldTextInputProps,\n DomProps,\n FocusableProps,\n InputDOMProps,\n KeyboardEvents,\n StyleProps,\n TextInputExtendProps,\n} from '../../types';\nimport {cleanString} from '../utils';\n\nimport type {DateFieldState} from './useBaseDateFieldState';\n\nexport interface DateFieldProps<T = DateTime>\n extends DateFieldBase<T>,\n DateFieldTextInputProps,\n TextInputExtendProps,\n DomProps,\n InputDOMProps,\n FocusableProps,\n KeyboardEvents,\n StyleProps,\n AccessibilityProps {}\n\nexport function useDateFieldProps<T = DateTime>(\n state: DateFieldState<T>,\n props: DateFieldProps<T>,\n): {inputProps: TextInputProps} {\n const inputRef = React.useRef<HTMLInputElement>(null);\n\n const [, setInnerState] = React.useState({});\n\n function setSelectedSections(section: 'all' | number) {\n state.setSelectedSections(section);\n setInnerState({});\n }\n\n React.useLayoutEffect(() => {\n const inputElement = inputRef.current;\n if (!inputElement) {\n return;\n }\n\n if (state.selectedSectionIndexes === null) {\n if (inputElement.scrollLeft) {\n // Ensure that input content is not marked as selected.\n // setting selection range to 0 causes issues in Safari.\n // https://bugs.webkit.org/show_bug.cgi?id=224425\n inputElement.scrollLeft = 0;\n }\n return;\n }\n\n const firstSelectedSection = state.sections[state.selectedSectionIndexes.startIndex];\n const lastSelectedSection = state.sections[state.selectedSectionIndexes.endIndex];\n if (firstSelectedSection && lastSelectedSection) {\n const selectionStart = firstSelectedSection.start;\n const selectionEnd = lastSelectedSection.end;\n\n if (\n selectionStart !== inputElement.selectionStart ||\n selectionEnd !== inputElement.selectionEnd\n ) {\n inputElement.setSelectionRange(selectionStart, selectionEnd);\n }\n }\n });\n\n function syncSelectionFromDOM() {\n state.focusSectionInPosition(inputRef.current?.selectionStart ?? 0);\n setInnerState({});\n }\n\n const inputMode = React.useMemo(() => {\n if (!state.selectedSectionIndexes) {\n return 'text';\n }\n\n const activeSection = state.sections[state.selectedSectionIndexes.startIndex];\n if (!activeSection || activeSection.contentType === 'letter') {\n return 'text';\n }\n\n return 'tel';\n }, [state.selectedSectionIndexes, state.sections]);\n\n return {\n inputProps: {\n value: state.text,\n view: props.view,\n size: props.size,\n disabled: state.disabled,\n hasClear: !state.readOnly && !state.isEmpty && props.hasClear,\n placeholder: props.placeholder,\n id: props.id,\n label: props.label,\n startContent: props.startContent,\n endContent: props.endContent,\n pin: props.pin,\n autoFocus: props.autoFocus,\n controlRef: inputRef,\n autoComplete: 'off',\n type: 'text',\n validationState: state.validationState,\n errorMessage: props.errorMessage,\n errorPlacement: props.errorPlacement,\n onUpdate(value) {\n if (!value) {\n state.clearAll();\n }\n },\n onFocus(e) {\n props.onFocus?.(e);\n\n if (state.selectedSectionIndexes !== null) {\n return;\n }\n const input = e.target;\n const isAutofocus = !inputRef.current;\n setTimeout(() => {\n if (!input || input !== inputRef.current) {\n return;\n }\n if (isAutofocus) {\n state.focusSectionInPosition(0);\n } else if (\n // avoid selecting all sections when focusing empty field without value\n input.value.length &&\n Number(input.selectionEnd) - Number(input.selectionStart) ===\n input.value.length\n ) {\n setSelectedSections('all');\n } else {\n syncSelectionFromDOM();\n }\n });\n },\n onBlur(e) {\n props.onBlur?.(e);\n setSelectedSections(-1);\n },\n onKeyDown(e) {\n props.onKeyDown?.(e);\n\n if (e.key === 'ArrowLeft') {\n e.preventDefault();\n state.focusPreviousSection();\n } else if (e.key === 'ArrowRight') {\n e.preventDefault();\n state.focusNextSection();\n } else if (e.key === 'Home') {\n e.preventDefault();\n state.decrementToMin();\n } else if (e.key === 'End') {\n e.preventDefault();\n state.incrementToMax();\n } else if (e.key === 'ArrowUp' && !e.altKey) {\n e.preventDefault();\n state.increment();\n } else if (e.key === 'ArrowDown' && !e.altKey) {\n e.preventDefault();\n state.decrement();\n } else if (e.key === 'PageUp') {\n e.preventDefault();\n state.incrementPage();\n } else if (e.key === 'PageDown') {\n e.preventDefault();\n state.decrementPage();\n } else if (e.key === 'Backspace' || e.key === 'Delete') {\n e.preventDefault();\n state.clearSection();\n } else if (e.key === 'a' && (e['ctrlKey'] || e['metaKey'])) {\n e.preventDefault();\n setSelectedSections('all');\n }\n },\n onKeyUp: props.onKeyUp,\n controlProps: {\n 'aria-label': props['aria-label'] || undefined,\n 'aria-labelledby': props['aria-labelledby'] || undefined,\n 'aria-describedby': props['aria-describedby'] || undefined,\n 'aria-details': props['aria-details'] || undefined,\n 'aria-disabled': state.disabled || undefined,\n readOnly: state.readOnly,\n inputMode,\n onClick() {\n syncSelectionFromDOM();\n },\n onMouseUp(e: React.MouseEvent) {\n e.preventDefault();\n },\n onBeforeInput(e) {\n e.preventDefault();\n const key = e.data;\n if (key !== undefined && key !== null) {\n state.onInput(key);\n }\n },\n onPaste(e: React.ClipboardEvent) {\n e.preventDefault();\n if (state.readOnly) {\n return;\n }\n\n const pastedValue = cleanString(e.clipboardData.getData('text'));\n if (\n state.selectedSectionIndexes &&\n state.selectedSectionIndexes.startIndex ===\n state.selectedSectionIndexes.endIndex\n ) {\n const activeSection =\n state.sections[state.selectedSectionIndexes.startIndex];\n\n const digitsOnly = /^\\d+$/.test(pastedValue);\n const lettersOnly = /^[a-zA-Z]+$/.test(pastedValue);\n\n const isValidValue = Boolean(\n activeSection &&\n ((activeSection.contentType === 'digit' && digitsOnly) ||\n (activeSection.contentType === 'letter' && lettersOnly)),\n );\n if (isValidValue) {\n state.onInput(pastedValue);\n return;\n }\n if (digitsOnly || lettersOnly) {\n return;\n }\n }\n\n state.setValueFromString(pastedValue);\n },\n },\n },\n };\n}\n"]}
1
+ {"version":3,"file":"useDateFieldProps.js","sourceRoot":"../../../../../src","sources":["components/DateField/hooks/useDateFieldProps.ts"],"names":[],"mappings":"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","sourcesContent":["import React from 'react';\n\nimport type {DateTime} from '@gravity-ui/date-utils';\nimport type {TextInputProps} from '@gravity-ui/uikit';\n\nimport type {\n AccessibilityProps,\n DateFieldBase,\n TextInputProps as DateFieldTextInputProps,\n DomProps,\n FocusableProps,\n InputDOMProps,\n KeyboardEvents,\n StyleProps,\n TextInputExtendProps,\n} from '../../types';\nimport {cleanString} from '../utils';\n\nimport type {DateFieldState} from './useBaseDateFieldState';\n\nexport interface DateFieldProps<T = DateTime>\n extends\n DateFieldBase<T>,\n DateFieldTextInputProps,\n TextInputExtendProps,\n DomProps,\n InputDOMProps,\n FocusableProps,\n KeyboardEvents,\n StyleProps,\n AccessibilityProps {}\n\nexport function useDateFieldProps<T = DateTime>(\n state: DateFieldState<T>,\n props: DateFieldProps<T>,\n): {inputProps: TextInputProps} {\n const inputRef = React.useRef<HTMLInputElement>(null);\n\n const [, setInnerState] = React.useState({});\n\n function setSelectedSections(section: 'all' | number) {\n state.setSelectedSections(section);\n setInnerState({});\n }\n\n React.useLayoutEffect(() => {\n const inputElement = inputRef.current;\n if (!inputElement) {\n return;\n }\n\n if (state.selectedSectionIndexes === null) {\n if (inputElement.scrollLeft) {\n // Ensure that input content is not marked as selected.\n // setting selection range to 0 causes issues in Safari.\n // https://bugs.webkit.org/show_bug.cgi?id=224425\n inputElement.scrollLeft = 0;\n }\n return;\n }\n\n const firstSelectedSection = state.sections[state.selectedSectionIndexes.startIndex];\n const lastSelectedSection = state.sections[state.selectedSectionIndexes.endIndex];\n if (firstSelectedSection && lastSelectedSection) {\n const selectionStart = firstSelectedSection.start;\n const selectionEnd = lastSelectedSection.end;\n\n if (\n selectionStart !== inputElement.selectionStart ||\n selectionEnd !== inputElement.selectionEnd\n ) {\n inputElement.setSelectionRange(selectionStart, selectionEnd);\n }\n }\n });\n\n function syncSelectionFromDOM() {\n state.focusSectionInPosition(inputRef.current?.selectionStart ?? 0);\n setInnerState({});\n }\n\n const inputMode = React.useMemo(() => {\n if (!state.selectedSectionIndexes) {\n return 'text';\n }\n\n const activeSection = state.sections[state.selectedSectionIndexes.startIndex];\n if (!activeSection || activeSection.contentType === 'letter') {\n return 'text';\n }\n\n return 'tel';\n }, [state.selectedSectionIndexes, state.sections]);\n\n return {\n inputProps: {\n value: state.text,\n view: props.view,\n size: props.size,\n disabled: state.disabled,\n hasClear: !state.readOnly && !state.isEmpty && props.hasClear,\n placeholder: props.placeholder,\n id: props.id,\n label: props.label,\n startContent: props.startContent,\n endContent: props.endContent,\n pin: props.pin,\n autoFocus: props.autoFocus,\n controlRef: inputRef,\n autoComplete: 'off',\n type: 'text',\n validationState: state.validationState,\n errorMessage: props.errorMessage,\n errorPlacement: props.errorPlacement,\n onUpdate(value) {\n if (!value) {\n state.clearAll();\n }\n },\n onFocus(e) {\n props.onFocus?.(e);\n\n if (state.selectedSectionIndexes !== null) {\n return;\n }\n const input = e.target;\n const isAutofocus = !inputRef.current;\n setTimeout(() => {\n if (!input || input !== inputRef.current) {\n return;\n }\n if (isAutofocus) {\n state.focusSectionInPosition(0);\n } else if (\n // avoid selecting all sections when focusing empty field without value\n input.value.length &&\n Number(input.selectionEnd) - Number(input.selectionStart) ===\n input.value.length\n ) {\n setSelectedSections('all');\n } else {\n syncSelectionFromDOM();\n }\n });\n },\n onBlur(e) {\n props.onBlur?.(e);\n setSelectedSections(-1);\n },\n onKeyDown(e) {\n props.onKeyDown?.(e);\n\n if (e.key === 'ArrowLeft') {\n e.preventDefault();\n state.focusPreviousSection();\n } else if (e.key === 'ArrowRight') {\n e.preventDefault();\n state.focusNextSection();\n } else if (e.key === 'Home') {\n e.preventDefault();\n state.decrementToMin();\n } else if (e.key === 'End') {\n e.preventDefault();\n state.incrementToMax();\n } else if (e.key === 'ArrowUp' && !e.altKey) {\n e.preventDefault();\n state.increment();\n } else if (e.key === 'ArrowDown' && !e.altKey) {\n e.preventDefault();\n state.decrement();\n } else if (e.key === 'PageUp') {\n e.preventDefault();\n state.incrementPage();\n } else if (e.key === 'PageDown') {\n e.preventDefault();\n state.decrementPage();\n } else if (e.key === 'Backspace' || e.key === 'Delete') {\n e.preventDefault();\n state.clearSection();\n } else if (e.key === 'a' && (e['ctrlKey'] || e['metaKey'])) {\n e.preventDefault();\n setSelectedSections('all');\n }\n },\n onKeyUp: props.onKeyUp,\n controlProps: {\n 'aria-label': props['aria-label'] || undefined,\n 'aria-labelledby': props['aria-labelledby'] || undefined,\n 'aria-describedby': props['aria-describedby'] || undefined,\n 'aria-details': props['aria-details'] || undefined,\n 'aria-disabled': state.disabled || undefined,\n readOnly: state.readOnly,\n inputMode,\n onClick() {\n syncSelectionFromDOM();\n },\n onMouseUp(e: React.MouseEvent) {\n e.preventDefault();\n },\n onBeforeInput(e) {\n e.preventDefault();\n const key = e.data;\n if (key !== undefined && key !== null) {\n state.onInput(key);\n }\n },\n onPaste(e: React.ClipboardEvent) {\n e.preventDefault();\n if (state.readOnly) {\n return;\n }\n\n const pastedValue = cleanString(e.clipboardData.getData('text'));\n if (\n state.selectedSectionIndexes &&\n state.selectedSectionIndexes.startIndex ===\n state.selectedSectionIndexes.endIndex\n ) {\n const activeSection =\n state.sections[state.selectedSectionIndexes.startIndex];\n\n const digitsOnly = /^\\d+$/.test(pastedValue);\n const lettersOnly = /^[a-zA-Z]+$/.test(pastedValue);\n\n const isValidValue = Boolean(\n activeSection &&\n ((activeSection.contentType === 'digit' && digitsOnly) ||\n (activeSection.contentType === 'letter' && lettersOnly)),\n );\n if (isValidValue) {\n state.onInput(pastedValue);\n return;\n }\n if (digitsOnly || lettersOnly) {\n return;\n }\n }\n\n state.setValueFromString(pastedValue);\n },\n },\n },\n };\n}\n"]}
@@ -1,5 +1,5 @@
1
1
  import React from 'react';
2
- import { useControlledState } from '@gravity-ui/uikit';
2
+ import { useControlledState, useLang } from '@gravity-ui/uikit';
3
3
  import { createPlaceholderValue, isInvalid } from "../../utils/dates.js";
4
4
  import { useDefaultTimeZone } from "../../utils/useDefaultTimeZone.js";
5
5
  import { addSegment, adjustDateToFormat, getEditableSections, getFormatInfo, isAllSegmentsValid, markValidSection, parseDateFromString, setSegment, useFormatSections, } from "../utils.js";
@@ -39,9 +39,10 @@ export function useDateFieldState(props) {
39
39
  timeZone,
40
40
  }));
41
41
  }
42
+ const { lang } = useLang();
42
43
  const displayValue = value && value.isValid() && isAllSegmentsValid(allSegments, validSegments)
43
- ? value.timeZone(timeZone)
44
- : placeholderDate.timeZone(timeZone);
44
+ ? value.timeZone(timeZone).locale(lang)
45
+ : placeholderDate.timeZone(timeZone).locale(lang);
45
46
  const sectionsState = useSectionsState(sections, displayValue, validSegments);
46
47
  const [selectedSections, setSelectedSections] = React.useState(-1);
47
48
  const selectedSectionIndexes = React.useMemo(() => {
@@ -178,7 +179,8 @@ function useSectionsState(sections, value, validSegments) {
178
179
  if (sections !== state.sections ||
179
180
  validSegments !== state.validSegments ||
180
181
  !value.isSame(state.value) ||
181
- value.timeZone() !== state.value.timeZone()) {
182
+ value.timeZone() !== state.value.timeZone() ||
183
+ value.locale() !== state.value.locale()) {
182
184
  setState({
183
185
  value,
184
186
  sections,