@via-profit/ui-kit 0.1.8 → 0.2.1-alpha.3

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 (157) hide show
  1. package/Accordion/index.d.ts +4 -4
  2. package/Autocomplete/AutocompleteContainer.d.ts +34 -7
  3. package/Autocomplete/AutocompleteContainer.js +28 -24
  4. package/Autocomplete/AutocompleteItem.d.ts +1 -1
  5. package/Autocomplete/AutocompleteTextField.d.ts +3 -0
  6. package/Autocomplete/AutocompleteTextField.js +63 -1
  7. package/Autocomplete/OverrideMenuList.d.ts +4 -0
  8. package/Autocomplete/OverrideMenuList.js +39 -0
  9. package/Autocomplete/context.d.ts +9 -1
  10. package/Autocomplete/context.js +15 -1
  11. package/Autocomplete/index.js +9 -10
  12. package/Autocomplete2/Autocomplete2.d.ts +12 -0
  13. package/Autocomplete2/Autocomplete2.js +83 -0
  14. package/Autocomplete2/Autocomplete2TextField.d.ts +7 -0
  15. package/Autocomplete2/Autocomplete2TextField.js +39 -0
  16. package/Autocomplete2/index.d.ts +2 -0
  17. package/Autocomplete2/index.js +7 -0
  18. package/Avatar/AvatarBase.d.ts +4 -4
  19. package/Avatar/index.js +1 -1
  20. package/Badge/BadgeBase.d.ts +4 -4
  21. package/Badge/BadgeDeleteButton.js +6 -6
  22. package/Badge/BadgeOutlined.js +2 -2
  23. package/Badge/BadgeStandard.js +1 -1
  24. package/Button/ButtonBase.d.ts +3 -3
  25. package/Button/ButtonOutlined.js +1 -1
  26. package/Button/ButtonPlain.js +1 -1
  27. package/Button/ButtonStandard.js +4 -11
  28. package/Calendar/CalendarCell.js +22 -4
  29. package/Calendar/CalendarComponent.d.ts +226 -0
  30. package/Calendar/CalendarComponent.js +572 -0
  31. package/Calendar/CalendarControlButton.js +16 -9
  32. package/Calendar/CalendarDayBadge.js +1 -1
  33. package/Calendar/CalendarEmptyCell.d.ts +2 -2
  34. package/Calendar/CalendarEmptyCell.js +8 -3
  35. package/Calendar/CalendarHeading.js +2 -1
  36. package/Calendar/CalendarMonthCell.js +0 -5
  37. package/Calendar/CalendarSubheading.js +3 -2
  38. package/Calendar/CalendarWeekDayCell.d.ts +10 -0
  39. package/Calendar/CalendarWeekDayCell.js +32 -0
  40. package/Calendar/CalendarWeekDayWeekNumber.d.ts +7 -0
  41. package/Calendar/CalendarWeekDayWeekNumber.js +38 -0
  42. package/Calendar/CalendarWeekRow.d.ts +2 -2
  43. package/Calendar/CalendarWeekRow.js +2 -1
  44. package/Calendar/CalendarWeekRowButton.d.ts +13 -0
  45. package/Calendar/CalendarWeekRowButton.js +31 -0
  46. package/Calendar/CalendarYearCell.js +5 -5
  47. package/Calendar/CalendarYearsSelector.d.ts +39 -1
  48. package/Calendar/CalendarYearsSelector.js +52 -16
  49. package/Calendar/IconChevronDown.d.ts +3 -0
  50. package/Calendar/IconChevronDown.js +31 -0
  51. package/Calendar/index.d.ts +7 -220
  52. package/Calendar/index.js +19 -274
  53. package/Calendar/use-calendar.d.ts +1 -1
  54. package/Calendar/use-calendar.js +102 -155
  55. package/Color/Color.d.ts +138 -0
  56. package/Color/Color.js +324 -0
  57. package/Color/ColorGenerator.d.ts +29 -0
  58. package/Color/ColorGenerator.js +141 -0
  59. package/Color/ColorParser.d.ts +20 -0
  60. package/Color/ColorParser.js +284 -0
  61. package/Color/index.d.ts +4 -122
  62. package/Color/index.js +18 -473
  63. package/DatePicker/index.d.ts +2 -17
  64. package/DatePicker/index.js +47 -61
  65. package/DatePicker/useDatePickerFormat.js +5 -5
  66. package/ErrorBoundary/Fallback.d.ts +3 -0
  67. package/ErrorBoundary/Fallback.js +51 -0
  68. package/ErrorBoundary/RenderError.d.ts +6 -0
  69. package/ErrorBoundary/RenderError.js +80 -0
  70. package/ErrorBoundary/index.d.ts +7 -11
  71. package/ErrorBoundary/index.js +4 -51
  72. package/Highlighted/index.d.ts +3 -3
  73. package/LoadingIndicator/Spinner.d.ts +5 -3
  74. package/LoadingIndicator/Spinner.js +61 -32
  75. package/LoadingIndicator/index.d.ts +3 -3
  76. package/LoadingIndicator/index.js +15 -2
  77. package/MaskedField/index.d.ts +1 -1
  78. package/MaskedField/index.js +11 -10
  79. package/Menu/AutoHeightWrapper.d.ts +6 -0
  80. package/Menu/AutoHeightWrapper.js +43 -0
  81. package/Menu/MeasuredItem.d.ts +10 -0
  82. package/Menu/MeasuredItem.js +51 -0
  83. package/Menu/MenuContainer.d.ts +53 -20
  84. package/Menu/MenuContainer.js +18 -11
  85. package/Menu/MenuItem.d.ts +24 -7
  86. package/Menu/MenuItem.js +13 -6
  87. package/Menu/MenuList.d.ts +4 -2
  88. package/Menu/MenuList.js +26 -6
  89. package/Menu/VirtualizedItem.d.ts +22 -0
  90. package/Menu/VirtualizedItem.js +69 -0
  91. package/Menu/VirtualizedList.d.ts +18 -0
  92. package/Menu/VirtualizedList.js +28 -0
  93. package/Menu/VirtualizedListComponent.d.ts +20 -0
  94. package/Menu/VirtualizedListComponent.js +305 -0
  95. package/Menu/index.d.ts +3 -1
  96. package/Menu/index.js +4 -7
  97. package/Modal/BaseModal/RenderModal.d.ts +3 -3
  98. package/Modal/BaseModal/index.d.ts +3 -3
  99. package/Modal/ConfirmBox/index.d.ts +5 -5
  100. package/Modal/Drawer/index.d.ts +5 -5
  101. package/Modal/MessageBox/index.d.ts +5 -5
  102. package/Popper/Popper.d.ts +148 -0
  103. package/Popper/Popper.js +113 -0
  104. package/Popper/PopperContainer.d.ts +2 -0
  105. package/Popper/PopperContainer.js +3 -6
  106. package/Popper/index.d.ts +5 -22
  107. package/Popper/index.js +18 -264
  108. package/Popper/usePopprer.d.ts +110 -0
  109. package/Popper/usePopprer.js +505 -0
  110. package/Selectbox/SelectboxButton.d.ts +5 -0
  111. package/Selectbox/SelectboxButton.js +48 -8
  112. package/Selectbox/SelectboxButtonWrapper.d.ts +2 -0
  113. package/Selectbox/SelectboxButtonWrapper.js +1 -17
  114. package/Selectbox/SelectboxMenu.d.ts +12 -0
  115. package/Selectbox/SelectboxMenu.js +50 -0
  116. package/Selectbox/index.d.ts +13 -13
  117. package/Selectbox/index.js +115 -97
  118. package/Surface/index.d.ts +5 -5
  119. package/Surface/index.js +1 -1
  120. package/Swiper/Swiper.d.ts +44 -0
  121. package/Swiper/Swiper.js +139 -0
  122. package/Swiper/SwiperContainer.d.ts +7 -0
  123. package/Swiper/SwiperContainer.js +14 -0
  124. package/Swiper/SwiperSlide.d.ts +7 -0
  125. package/Swiper/SwiperSlide.js +55 -0
  126. package/Swiper/SwiperTrack.d.ts +14 -0
  127. package/Swiper/SwiperTrack.js +58 -0
  128. package/Swiper/SwiperWrapper.d.ts +14 -0
  129. package/Swiper/SwiperWrapper.js +60 -0
  130. package/Swiper/index.d.ts +7 -0
  131. package/Swiper/index.js +26 -0
  132. package/Switch/SwitchDot.js +1 -1
  133. package/Switch/SwitchTrack.js +1 -1
  134. package/Switch/index.d.ts +8 -8
  135. package/TextArea/index.d.ts +7 -7
  136. package/TextField/TextFieldContainer.d.ts +2 -2
  137. package/TextField/TextFieldContainer.js +5 -3
  138. package/TextField/TextFieldErrorText.d.ts +2 -2
  139. package/TextField/TextFieldErrorText.js +5 -4
  140. package/TextField/TextFieldIconWrapper.d.ts +3 -3
  141. package/TextField/TextFieldIconWrapper.js +5 -3
  142. package/TextField/TextFieldInput.d.ts +2 -2
  143. package/TextField/TextFieldInput.js +6 -4
  144. package/TextField/TextFieldInputWrapper.d.ts +2 -2
  145. package/TextField/TextFieldInputWrapper.js +5 -3
  146. package/TextField/TextFieldLabel.d.ts +2 -2
  147. package/TextField/TextFieldLabel.js +5 -3
  148. package/TextField/TextFieldLabelAsterisk.d.ts +2 -2
  149. package/TextField/TextFieldLabelAsterisk.js +5 -3
  150. package/TextField/index.d.ts +15 -8
  151. package/TextField/index.js +49 -22
  152. package/ThemeProvider/createTheme.js +2 -2
  153. package/package.json +1 -1
  154. package/Calendar/reducer.d.ts +0 -14
  155. package/Calendar/reducer.js +0 -26
  156. /package/Calendar/{IconChevronRight.d.ts → CalendarIconNext.d.ts} +0 -0
  157. /package/Calendar/{IconChevronRight.js → CalendarIconNext.js} +0 -0
@@ -0,0 +1,572 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || function (mod) {
19
+ if (mod && mod.__esModule) return mod;
20
+ var result = {};
21
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
22
+ __setModuleDefault(result, mod);
23
+ return result;
24
+ };
25
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
26
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
27
+ };
28
+ var __importDefault = (this && this.__importDefault) || function (mod) {
29
+ return (mod && mod.__esModule) ? mod : { "default": mod };
30
+ };
31
+ Object.defineProperty(exports, "__esModule", { value: true });
32
+ exports.CalendarComponent = void 0;
33
+ const react_1 = __importStar(require("react"));
34
+ const CalendarBody_1 = __importDefault(require("./CalendarBody"));
35
+ const CalendarCell_1 = __importDefault(require("./CalendarCell"));
36
+ const CalendarWeekDayCell_1 = __importDefault(require("./CalendarWeekDayCell"));
37
+ const CalendarEmptyCell_1 = __importDefault(require("./CalendarEmptyCell"));
38
+ const CalendarWeekRowButton_1 = __importDefault(require("./CalendarWeekRowButton"));
39
+ const CalendarWeekDayWeekNumber_1 = __importDefault(require("./CalendarWeekDayWeekNumber"));
40
+ const CalendarPaper_1 = __importDefault(require("./CalendarPaper"));
41
+ const CalendarHeader_1 = __importDefault(require("./CalendarHeader"));
42
+ const CalendarWeekRow_1 = __importDefault(require("./CalendarWeekRow"));
43
+ const CalendarDateContainer_1 = __importDefault(require("./CalendarDateContainer"));
44
+ const CalendarToolbar_1 = __importDefault(require("./CalendarToolbar"));
45
+ const CalendarYearsSelector_1 = __importDefault(require("./CalendarYearsSelector"));
46
+ const CalendarMonthsSelector_1 = __importDefault(require("./CalendarMonthsSelector"));
47
+ const CalendarMonthCell_1 = __importDefault(require("./CalendarMonthCell"));
48
+ const CalendarDayBadge_1 = __importDefault(require("./CalendarDayBadge"));
49
+ const CalendarFooter_1 = __importDefault(require("./CalendarFooter"));
50
+ const CalendarControlButton_1 = __importDefault(require("./CalendarControlButton"));
51
+ const CalendarHeading_1 = __importDefault(require("./CalendarHeading"));
52
+ const CalendarSubheading_1 = __importDefault(require("./CalendarSubheading"));
53
+ const CalendarIconPrev_1 = __importDefault(require("./CalendarIconPrev"));
54
+ const CalendarIconNext_1 = __importDefault(require("./CalendarIconNext"));
55
+ const CalendarWeekDaysBar_1 = __importDefault(require("./CalendarWeekDaysBar"));
56
+ const use_calendar_1 = require("./use-calendar");
57
+ const Swiper_1 = __importStar(require("../Swiper"));
58
+ const styled_1 = __importDefault(require("@emotion/styled"));
59
+ __exportStar(require("./use-calendar"), exports);
60
+ __exportStar(require("./CalendarWeekDaysBar"), exports);
61
+ const StyledSwiper = (0, styled_1.default)(Swiper_1.default) `
62
+ height: 100%;
63
+ `;
64
+ const isRangeValue = (value) => {
65
+ if (value instanceof Array) {
66
+ return value.every(v => v instanceof Date || v === null);
67
+ }
68
+ return false;
69
+ };
70
+ const isNotRangeValue = (value) => !isRangeValue(value);
71
+ const computeViews = (inputViews, range) => {
72
+ if (inputViews) {
73
+ return inputViews;
74
+ }
75
+ if (range) {
76
+ return ['days', 'months', 'years', 'weeks'];
77
+ }
78
+ return ['days', 'months', 'years'];
79
+ };
80
+ const computeView = (inputParams) => {
81
+ var _a;
82
+ const { inputView, inputViews, inputInitialView } = inputParams;
83
+ if (typeof inputView === 'undefined' && inputViews) {
84
+ return inputViews[0];
85
+ }
86
+ if (typeof inputView === 'undefined' && inputViews) {
87
+ return inputViews[0];
88
+ }
89
+ if (inputViews && typeof inputView === 'string') {
90
+ if (!inputViews.includes(inputView)) {
91
+ throw new Error('Property views must be contained property initialView');
92
+ }
93
+ }
94
+ if (typeof inputView === 'string') {
95
+ return inputView;
96
+ }
97
+ return (_a = inputInitialView !== null && inputInitialView !== void 0 ? inputInitialView : inputView) !== null && _a !== void 0 ? _a : 'days';
98
+ };
99
+ const computeCalendarDate = (params) => {
100
+ const { inputValue, defaultValue } = params;
101
+ const today = new Date();
102
+ if (inputValue) {
103
+ if (isRangeValue(inputValue) && inputValue[1]) {
104
+ return inputValue[1];
105
+ }
106
+ if (isRangeValue(inputValue) && inputValue[0]) {
107
+ return inputValue[0];
108
+ }
109
+ }
110
+ if (isRangeValue(defaultValue) && defaultValue && defaultValue[1]) {
111
+ return defaultValue[1];
112
+ }
113
+ if (isRangeValue(defaultValue) && defaultValue && defaultValue[0]) {
114
+ return defaultValue[0];
115
+ }
116
+ return today;
117
+ };
118
+ const CalendarComponent = react_1.default.forwardRef((props, ref) => {
119
+ var _a;
120
+ const { minDate = new Date(new Date().getFullYear() - 100, 0, 1, 0, 0, 0), maxDate = new Date(new Date().getFullYear() + 100, 0, 1, 0, 0, 0), weekStartDay = 'monday', locale = 'ru-RU', displayLeadingZero = false, onChange, badges = [], markToday, weekDayLabelFormat = 'short', accentColor = 'primary', defaultValue, value: inputValue, initialView: inputInitialView, view: inputView, views: inputViews, resetButtonLabel, todayButtonLabel, heading, subheading, footer, overrides, range = false, } = props;
121
+ /**
122
+ * Validations
123
+ */
124
+ if (range) {
125
+ if (defaultValue && isNotRangeValue(defaultValue)) {
126
+ throw new Error('The default value must be an array of dates([Date, Date])');
127
+ }
128
+ if (inputValue && isNotRangeValue(inputValue)) {
129
+ throw new Error('The value must be an array of dates([Date, Date])');
130
+ }
131
+ }
132
+ else {
133
+ if (defaultValue && isRangeValue(defaultValue)) {
134
+ throw new Error('The default value must be a Date instance');
135
+ }
136
+ if (inputValue && isRangeValue(inputValue)) {
137
+ throw new Error('The value must be a Date instance');
138
+ }
139
+ }
140
+ if (!range) {
141
+ if ((inputViews === null || inputViews === void 0 ? void 0 : inputViews.includes('weeks')) || inputView === 'weeks') {
142
+ throw new Error('The `weeks` view allowed only in range mode');
143
+ }
144
+ }
145
+ if (!inputValue && typeof onChange === 'undefined') {
146
+ throw new Error('You provided a `value` prop to a form field without an `onChange` handler. This will render a read-only field. If the field should be mutable use `defaultValue`. Otherwise, set either `onChange`.');
147
+ }
148
+ if (inputView && inputInitialView) {
149
+ throw new Error('You can not use view and initialView at the same time.');
150
+ }
151
+ /**
152
+ * Overrides
153
+ */
154
+ const overridesMap = react_1.default.useMemo(() => ({
155
+ Body: (overrides === null || overrides === void 0 ? void 0 : overrides.Body) || CalendarBody_1.default,
156
+ Cell: (overrides === null || overrides === void 0 ? void 0 : overrides.Cell) || CalendarCell_1.default,
157
+ EmptyCell: (overrides === null || overrides === void 0 ? void 0 : overrides.EmptyCell) || CalendarEmptyCell_1.default,
158
+ Paper: (overrides === null || overrides === void 0 ? void 0 : overrides.Paper) || CalendarPaper_1.default,
159
+ Header: (overrides === null || overrides === void 0 ? void 0 : overrides.Header) || CalendarHeader_1.default,
160
+ WeekRow: (overrides === null || overrides === void 0 ? void 0 : overrides.WeekRow) || CalendarWeekRow_1.default,
161
+ DateContainer: (overrides === null || overrides === void 0 ? void 0 : overrides.DateContainer) || CalendarDateContainer_1.default,
162
+ Toolbar: (overrides === null || overrides === void 0 ? void 0 : overrides.Toolbar) || CalendarToolbar_1.default,
163
+ YearsSelector: (overrides === null || overrides === void 0 ? void 0 : overrides.YearsSelector) || CalendarYearsSelector_1.default,
164
+ MonthsSelector: (overrides === null || overrides === void 0 ? void 0 : overrides.MonthsSelector) || CalendarMonthsSelector_1.default,
165
+ MonthCell: (overrides === null || overrides === void 0 ? void 0 : overrides.MonthCell) || CalendarMonthCell_1.default,
166
+ DayBadge: (overrides === null || overrides === void 0 ? void 0 : overrides.DayBadge) || CalendarDayBadge_1.default,
167
+ Footer: (overrides === null || overrides === void 0 ? void 0 : overrides.Footer) || CalendarFooter_1.default,
168
+ ControlButton: (overrides === null || overrides === void 0 ? void 0 : overrides.ControlButton) || CalendarControlButton_1.default,
169
+ Heading: (overrides === null || overrides === void 0 ? void 0 : overrides.Heading) || CalendarHeading_1.default,
170
+ Subheading: (overrides === null || overrides === void 0 ? void 0 : overrides.Subheading) || CalendarSubheading_1.default,
171
+ IconPrev: (overrides === null || overrides === void 0 ? void 0 : overrides.IconPrev) || CalendarIconPrev_1.default,
172
+ IconNext: (overrides === null || overrides === void 0 ? void 0 : overrides.IconNext) || CalendarIconNext_1.default,
173
+ WeekDaysBar: (overrides === null || overrides === void 0 ? void 0 : overrides.WeekDaysBar) || CalendarWeekDaysBar_1.default,
174
+ WeekDayCell: (overrides === null || overrides === void 0 ? void 0 : overrides.WeekDayCell) || CalendarWeekDayCell_1.default,
175
+ WeekRowButton: (overrides === null || overrides === void 0 ? void 0 : overrides.WeekRowButton) || CalendarWeekRowButton_1.default,
176
+ WeekDayWeekNumber: (overrides === null || overrides === void 0 ? void 0 : overrides.WeekDayWeekNumber) || CalendarWeekDayWeekNumber_1.default,
177
+ }), [overrides]);
178
+ const swiperRef = react_1.default.useRef(null);
179
+ /**
180
+ * Inside date value
181
+ */
182
+ const [calendarDate, setCalendarDate] = react_1.default.useState(() => computeCalendarDate({
183
+ defaultValue,
184
+ inputValue,
185
+ }));
186
+ /**
187
+ * Selected value
188
+ */
189
+ const inputValueRef = react_1.default.useRef(inputValue);
190
+ const [value, setValue] = react_1.default.useState((_a = inputValue !== null && inputValue !== void 0 ? inputValue : defaultValue) !== null && _a !== void 0 ? _a : null);
191
+ /**
192
+ * Current view mode
193
+ */
194
+ const [view, setView] = react_1.default.useState(() => computeView({
195
+ inputViews,
196
+ inputInitialView,
197
+ inputView,
198
+ }));
199
+ /**
200
+ * List of possibility views
201
+ */
202
+ const [views] = react_1.default.useState(() => computeViews(inputViews, range));
203
+ const selectView = react_1.default.useCallback((view) => {
204
+ var _a;
205
+ setView(view);
206
+ const index = views.findIndex(v => v === view);
207
+ if (index > -1) {
208
+ (_a = swiperRef.current) === null || _a === void 0 ? void 0 : _a.goToIndex(index);
209
+ }
210
+ }, [views]);
211
+ const resetVariablesRef = react_1.default.useRef({
212
+ calendarDate,
213
+ value,
214
+ view,
215
+ });
216
+ const { isSameDay, getWeeks, getDayLabel, getMonthLabel, getYearLabel, getYearsRange, getMonthsRange, } = (0, use_calendar_1.useCalendar)({
217
+ minDate,
218
+ maxDate,
219
+ weekStartDay,
220
+ locale,
221
+ displayLeadingZero,
222
+ });
223
+ const availableViewsMap = react_1.default.useMemo(() => {
224
+ const viewsMap = {
225
+ years: ['months', 'days'],
226
+ months: ['days', 'weeks'],
227
+ weeks: ['days'],
228
+ days: [],
229
+ };
230
+ const availableMap = new Map();
231
+ for (const [key, value] of Object.entries(viewsMap)) {
232
+ availableMap.set(key, [...value].filter(v => views.includes(v)));
233
+ }
234
+ const obj = Object.fromEntries(availableMap);
235
+ return Object.assign({}, obj);
236
+ }, [views]);
237
+ const getNextAvailableView = react_1.default.useCallback(() => {
238
+ const availableViews = availableViewsMap[view];
239
+ if (availableViews.length === 0) {
240
+ return null;
241
+ }
242
+ return availableViews[0];
243
+ }, [view, availableViewsMap]);
244
+ /**
245
+ * value was changed
246
+ */
247
+ react_1.default.useEffect(() => {
248
+ if (JSON.stringify(inputValue) !== JSON.stringify(inputValueRef.current)) {
249
+ inputValueRef.current = inputValue;
250
+ setValue(inputValue);
251
+ if (isRangeValue(inputValue) && inputValue && inputValue[0] instanceof Date) {
252
+ setCalendarDate(inputValue[0]);
253
+ }
254
+ else {
255
+ setCalendarDate(inputValue);
256
+ }
257
+ }
258
+ }, [inputValue]);
259
+ const handlePrevNextClick = react_1.default.useCallback((type) => () => {
260
+ const newCalendarDate = new Date(calendarDate);
261
+ if (view === 'years') {
262
+ if (type === 'prev') {
263
+ newCalendarDate.setFullYear(newCalendarDate.getFullYear() - 1);
264
+ }
265
+ else {
266
+ newCalendarDate.setFullYear(newCalendarDate.getFullYear() + 1);
267
+ }
268
+ }
269
+ if (view === 'months') {
270
+ if (type === 'prev') {
271
+ newCalendarDate.setFullYear(newCalendarDate.getFullYear() + 1);
272
+ }
273
+ else {
274
+ newCalendarDate.setFullYear(newCalendarDate.getFullYear() - 1);
275
+ }
276
+ }
277
+ if (view === 'days' || view === 'weeks') {
278
+ if (type === 'prev') {
279
+ newCalendarDate.setFullYear(newCalendarDate.getFullYear(), newCalendarDate.getMonth() - 1, 1);
280
+ }
281
+ else {
282
+ newCalendarDate.setFullYear(newCalendarDate.getFullYear(), newCalendarDate.getMonth() + 1, 1);
283
+ }
284
+ }
285
+ setCalendarDate(newCalendarDate);
286
+ }, [calendarDate, view]);
287
+ const handleCellDateClick = react_1.default.useCallback((selectedDate) => () => {
288
+ var _a;
289
+ const nextView = getNextAvailableView();
290
+ if (nextView) {
291
+ setView(nextView);
292
+ }
293
+ // Single-date mode
294
+ if (!range) {
295
+ onChange(selectedDate);
296
+ setValue(selectedDate);
297
+ return;
298
+ }
299
+ // Range-date mode
300
+ const [from, to] = (_a = value) !== null && _a !== void 0 ? _a : [];
301
+ // начало нового периода
302
+ if (from && to) {
303
+ setValue([selectedDate, null]);
304
+ onChange([selectedDate, null]);
305
+ return;
306
+ }
307
+ // если выбрана только первая дата или обе даты равны - завершение периода
308
+ if ((from && to === null) || (from && to && from.getTime() === to.getTime())) {
309
+ /// check to swap
310
+ if (selectedDate.getTime() < from.getTime()) {
311
+ onChange([selectedDate, from]);
312
+ setValue([selectedDate, from]);
313
+ }
314
+ else {
315
+ onChange([from, selectedDate]);
316
+ setValue([from, selectedDate]);
317
+ }
318
+ }
319
+ else {
320
+ // обе даты выбраны или ничего не выбрано ([Date, Date] | [null, null] | null) - начало нового периода
321
+ if ((from && to) || (from === null && to === null) || value === null) {
322
+ setValue([selectedDate, null]);
323
+ return;
324
+ }
325
+ }
326
+ }, [onChange, getNextAvailableView, range, value]);
327
+ /**
328
+ * Handle of click on year item
329
+ */
330
+ const handleYearSelected = react_1.default.useCallback((selectedYear) => () => {
331
+ const newDate = new Date(calendarDate);
332
+ newDate.setFullYear(selectedYear, 0, 1);
333
+ newDate.setHours(0, 0, 0);
334
+ setCalendarDate(newDate);
335
+ const nextView = getNextAvailableView();
336
+ if (nextView) {
337
+ selectView(nextView);
338
+ }
339
+ // if the next `view` does not exist
340
+ if (!nextView && typeof onChange === 'function') {
341
+ const a = new Date();
342
+ a.setFullYear(newDate.getFullYear(), 11, 31);
343
+ a.setHours(23, 59, 59);
344
+ const selectedValue = range ? [newDate, a] : newDate;
345
+ onChange(selectedValue);
346
+ if (!inputValue) {
347
+ setValue(selectedValue);
348
+ }
349
+ }
350
+ }, [calendarDate, getNextAvailableView, onChange, selectView, range, inputValue]);
351
+ /**
352
+ * Handle of click on month item
353
+ */
354
+ const handleMonthSelected = react_1.default.useCallback((monthIndex) => () => {
355
+ const newDate = new Date();
356
+ newDate.setFullYear(calendarDate.getFullYear(), monthIndex, 1);
357
+ newDate.setHours(0, 0, 0);
358
+ setCalendarDate(newDate);
359
+ const nextView = getNextAvailableView();
360
+ if (nextView) {
361
+ selectView(nextView);
362
+ }
363
+ // if the next `view` does not exist
364
+ if (!nextView && typeof onChange === 'function') {
365
+ const a = new Date();
366
+ a.setFullYear(newDate.getFullYear(), newDate.getMonth() + 1, 0);
367
+ a.setHours(0, 0, 0);
368
+ const selectedValue = range ? [newDate, a] : newDate;
369
+ onChange(selectedValue);
370
+ if (!inputValue) {
371
+ setValue(selectedValue);
372
+ }
373
+ }
374
+ }, [calendarDate, getNextAvailableView, onChange, selectView, inputValue, range]);
375
+ /**
376
+ * Handle click on «Reset» button
377
+ */
378
+ const handleReset = react_1.default.useCallback(() => {
379
+ setCalendarDate(resetVariablesRef.current.calendarDate);
380
+ setValue(resetVariablesRef.current.value);
381
+ selectView(resetVariablesRef.current.view);
382
+ if (typeof onChange === 'function') {
383
+ onChange(resetVariablesRef.current.value);
384
+ }
385
+ }, [onChange, selectView]);
386
+ /**
387
+ * Handle click on «Today» button
388
+ */
389
+ const handleToday = react_1.default.useCallback(() => {
390
+ const today = new Date();
391
+ today.setHours(0, 0, 0);
392
+ setCalendarDate(today);
393
+ setValue((range ? [today, today] : today));
394
+ handleCellDateClick(today)();
395
+ }, [handleCellDateClick, range]);
396
+ const handleClickWeek = react_1.default.useCallback((week) => () => {
397
+ const days = week.days;
398
+ const dates = [days[0].date, days[days.length - 1].date];
399
+ setCalendarDate(dates[0]);
400
+ /// set view
401
+ let nextView = undefined;
402
+ if (views.includes('days')) {
403
+ nextView = 'days';
404
+ }
405
+ if (nextView) {
406
+ selectView(nextView);
407
+ }
408
+ /// set value
409
+ if (range) {
410
+ setValue(dates);
411
+ if (typeof onChange === 'function') {
412
+ onChange(dates);
413
+ }
414
+ }
415
+ else {
416
+ setValue(dates[0]);
417
+ if (typeof onChange === 'function') {
418
+ onChange(dates[0]);
419
+ }
420
+ }
421
+ }, [views, range, selectView, onChange]);
422
+ const weeks = react_1.default.useMemo(() => getWeeks(calendarDate), [calendarDate, getWeeks]);
423
+ const yearsRange = react_1.default.useMemo(() => getYearsRange(minDate, maxDate), [minDate, maxDate, getYearsRange]);
424
+ const monthsRange = react_1.default.useMemo(() => getMonthsRange(minDate, maxDate), [minDate, maxDate, getMonthsRange]);
425
+ const renderViewDays = react_1.default.useCallback(() => (react_1.default.createElement(overridesMap.DateContainer, null, getWeeks(calendarDate).map(week => (react_1.default.createElement(overridesMap.WeekRow, { key: week.weekNumber }, week.days.map(day => {
426
+ if (day.date.getMonth() === calendarDate.getMonth()) {
427
+ const badge = badges.find(b => isSameDay(b.date, day.date));
428
+ let fill = false;
429
+ let isSelected = false;
430
+ if (isRangeValue(value)) {
431
+ const [from, to] = value || [];
432
+ if (from && to) {
433
+ fill =
434
+ day.date.getTime() >= from.getTime() && day.date.getTime() <= to.getTime();
435
+ }
436
+ isSelected = Boolean((from && isSameDay(from, day.date)) || (to && isSameDay(to, day.date)));
437
+ }
438
+ else if (isNotRangeValue(value)) {
439
+ isSelected = Boolean(value && isSameDay(value, day.date));
440
+ }
441
+ return (react_1.default.createElement(overridesMap.Cell, { key: day.date.getTime(), isToday: markToday && day.isToday, isDisabled: day.isDisabled, accentColor: accentColor, isSelected: isSelected, fill: fill, onClick: handleCellDateClick(day.date) },
442
+ getDayLabel(day.date),
443
+ badge && (react_1.default.createElement(overridesMap.DayBadge, { badgeContent: badge.badgeContent, isToday: day.isToday, accentColor: badge.accentColor }))));
444
+ }
445
+ return (react_1.default.createElement(overridesMap.EmptyCell, { key: day.date.getTime() }, getDayLabel(day.date)));
446
+ })))))), [
447
+ accentColor,
448
+ badges,
449
+ calendarDate,
450
+ getDayLabel,
451
+ getWeeks,
452
+ handleCellDateClick,
453
+ isSameDay,
454
+ markToday,
455
+ overridesMap,
456
+ value,
457
+ ]);
458
+ const renderViewMonths = react_1.default.useCallback(() => (react_1.default.createElement(overridesMap.MonthsSelector, null, monthsRange.map(monthIndex => {
459
+ const isSelected = calendarDate.getMonth() === monthIndex;
460
+ return (react_1.default.createElement(overridesMap.MonthCell, { key: monthIndex + monthsRange[monthIndex], accentColor: accentColor, isSelected: isSelected, onClick: handleMonthSelected(monthIndex) }, getMonthLabel(new Date(calendarDate.getFullYear(), monthIndex, 1, 0, 0, 0, 0))));
461
+ }))), [accentColor, calendarDate, getMonthLabel, handleMonthSelected, monthsRange, overridesMap]);
462
+ const renderViewYears = react_1.default.useCallback(() => (react_1.default.createElement(overridesMap.YearsSelector, { accentColor: accentColor, date: calendarDate, onChange: y => handleYearSelected(y)(), years: yearsRange, locale: locale, minDate: minDate, maxDate: maxDate })), [
463
+ accentColor,
464
+ calendarDate,
465
+ handleYearSelected,
466
+ locale,
467
+ maxDate,
468
+ minDate,
469
+ overridesMap,
470
+ yearsRange,
471
+ ]);
472
+ const renderViewWeeks = react_1.default.useCallback(() => (react_1.default.createElement(overridesMap.DateContainer, null, getWeeks(calendarDate).map(week => {
473
+ let isSelected = false;
474
+ if (isRangeValue(value)) {
475
+ const [from, to] = value || [];
476
+ if (from && to) {
477
+ if (isSameDay(from, week.days[0].date) &&
478
+ isSameDay(to, week.days[week.days.length - 1].date)) {
479
+ isSelected = true;
480
+ }
481
+ }
482
+ }
483
+ return (react_1.default.createElement(overridesMap.WeekRowButton, { key: week.weekNumber, isSelected: isSelected, onClick: handleClickWeek(week), accentColor: accentColor, week: week },
484
+ react_1.default.createElement(overridesMap.WeekDayWeekNumber, { week: week }, week.weekNumber),
485
+ week.days.map(day => {
486
+ const badge = badges.find(b => isSameDay(b.date, day.date));
487
+ const inCurrentMonth = day.date.getMonth() === calendarDate.getMonth();
488
+ return (react_1.default.createElement(overridesMap.WeekDayCell, { key: day.date.getTime(), isToday: markToday && day.isToday, inCurrentMonth: inCurrentMonth },
489
+ getDayLabel(day.date),
490
+ badge && (react_1.default.createElement(overridesMap.DayBadge, { badgeContent: badge.badgeContent, isToday: day.isToday, accentColor: badge.accentColor }))));
491
+ })));
492
+ }))), [
493
+ accentColor,
494
+ badges,
495
+ calendarDate,
496
+ getDayLabel,
497
+ getWeeks,
498
+ handleClickWeek,
499
+ isSameDay,
500
+ markToday,
501
+ overridesMap,
502
+ value,
503
+ ]);
504
+ const initialIndex = react_1.default.useMemo(() => views.findIndex(v => v === view), [views, view]);
505
+ const getActiveView = react_1.default.useCallback(() => view, [view]);
506
+ /**
507
+ * API
508
+ */
509
+ (0, react_1.useImperativeHandle)(ref, () => ({
510
+ setView: selectView,
511
+ reset: handleReset,
512
+ setValue,
513
+ setCalendarDate,
514
+ getActiveView,
515
+ }), [selectView, handleReset, getActiveView]);
516
+ return (react_1.default.createElement(overridesMap.Paper, null,
517
+ react_1.default.createElement(overridesMap.Header, null,
518
+ typeof heading !== 'undefined' && react_1.default.createElement(overridesMap.Heading, null, heading),
519
+ typeof subheading !== 'undefined' && (react_1.default.createElement(overridesMap.Subheading, null, subheading)),
520
+ react_1.default.createElement(overridesMap.Toolbar, null,
521
+ react_1.default.createElement(overridesMap.ControlButton, { iconOnly: true, onClick: handlePrevNextClick('prev'), disabled: ['months', 'years'].includes(view) },
522
+ react_1.default.createElement(overridesMap.IconPrev, null)),
523
+ react_1.default.createElement(overridesMap.ControlButton, { disabled: !views.includes('months'), onClick: () => {
524
+ if (view === 'months' && views.includes('days')) {
525
+ selectView('days');
526
+ }
527
+ if (view !== 'months' && views.includes('months')) {
528
+ selectView('months');
529
+ }
530
+ } }, getMonthLabel(calendarDate)),
531
+ react_1.default.createElement(overridesMap.ControlButton, { disabled: !views.includes('years'), onClick: () => {
532
+ if (view === 'years' && views.includes('days')) {
533
+ selectView('days');
534
+ }
535
+ if (view !== 'years' && views.includes('years')) {
536
+ selectView('years');
537
+ }
538
+ } }, getYearLabel(calendarDate)),
539
+ react_1.default.createElement(overridesMap.ControlButton, { iconOnly: true, onClick: handlePrevNextClick('next'), disabled: ['months', 'years'].includes(view) },
540
+ react_1.default.createElement(overridesMap.IconNext, null)))),
541
+ view === 'days' && (react_1.default.createElement(overridesMap.WeekDaysBar, { locale: locale, week: weeks[0], format: weekDayLabelFormat || 'short' })),
542
+ react_1.default.createElement(overridesMap.Body, null,
543
+ react_1.default.createElement(StyledSwiper, { draggable: false, ref: swiperRef, initialIndex: initialIndex }, views.map(viewName => {
544
+ let renderedView;
545
+ switch (viewName) {
546
+ case 'days':
547
+ renderedView = renderViewDays();
548
+ break;
549
+ case 'weeks':
550
+ renderedView = renderViewWeeks();
551
+ break;
552
+ case 'months':
553
+ renderedView = renderViewMonths();
554
+ break;
555
+ case 'years':
556
+ renderedView = renderViewYears();
557
+ break;
558
+ default:
559
+ renderedView = null;
560
+ break;
561
+ }
562
+ return react_1.default.createElement(Swiper_1.SwiperSlide, { key: viewName }, renderedView);
563
+ }))),
564
+ (typeof resetButtonLabel !== 'undefined' ||
565
+ typeof todayButtonLabel !== 'undefined' ||
566
+ typeof footer !== 'undefined') && (react_1.default.createElement(overridesMap.Footer, null,
567
+ typeof footer !== 'undefined' && react_1.default.createElement(react_1.default.Fragment, null, footer),
568
+ typeof todayButtonLabel !== 'undefined' && (react_1.default.createElement(overridesMap.ControlButton, { onClick: handleToday }, todayButtonLabel)),
569
+ typeof resetButtonLabel !== 'undefined' && (react_1.default.createElement(overridesMap.ControlButton, { onClick: handleReset }, resetButtonLabel))))));
570
+ });
571
+ exports.CalendarComponent = CalendarComponent;
572
+ CalendarComponent.displayName = 'CalendarComponent';
@@ -17,18 +17,25 @@ Object.defineProperty(exports, "__esModule", { value: true });
17
17
  const react_1 = __importDefault(require("react"));
18
18
  const styled_1 = __importDefault(require("@emotion/styled"));
19
19
  const Button_1 = __importDefault(require("../Button"));
20
+ const react_2 = require("@emotion/react");
20
21
  const StyledCalendarControlButton = (0, styled_1.default)(Button_1.default) `
21
- color: ${({ theme }) => theme.color.accentSecondaryContrast.toString()};
22
+ color: ${({ theme, disabled }) => disabled
23
+ ? theme.color.accentSecondaryContrast.alpha(0.2).toString()
24
+ : theme.color.accentSecondaryContrast.toString()};
22
25
  background-color: ${({ theme }) => theme.color.accentSecondaryContrast.alpha(0).toString()};
23
26
  cursor: pointer;
24
- &:hover {
25
- color: ${({ theme }) => theme.color.accentSecondaryContrast.toString()};
26
- background-color: ${({ theme }) => theme.color.accentSecondaryContrast.alpha(0.2).toString()};
27
- }
28
- &:active {
29
- color: ${({ theme }) => theme.color.accentSecondaryContrast.toString()};
30
- background-color: ${({ theme }) => theme.color.accentSecondaryContrast.alpha(0.5).toString()};
31
- }
27
+ cursor: ${({ disabled }) => (disabled ? 'default' : 'pointer')};
28
+ ${({ disabled, theme }) => !disabled &&
29
+ (0, react_2.css) `
30
+ &:hover {
31
+ color: ${theme.color.accentSecondaryContrast.toString()};
32
+ background-color: ${theme.color.accentSecondaryContrast.alpha(0.2).toString()};
33
+ }
34
+ &:active {
35
+ color: ${theme.color.accentSecondaryContrast.toString()};
36
+ background-color: ${theme.color.accentSecondaryContrast.alpha(0.5).toString()};
37
+ }
38
+ `}
32
39
  `;
33
40
  const CalendarControlButton = (props, ref) => {
34
41
  const { children, isActive } = props, restProps = __rest(props, ["children", "isActive"]);
@@ -59,7 +59,7 @@ const CalendarDayBadge = (props, ref) => {
59
59
  $backgroundColor: theme.color.accentSecondary.toString(),
60
60
  };
61
61
  }
62
- const clr = new Color_1.default(accentColor);
62
+ const clr = Color_1.default.fromString(accentColor);
63
63
  return {
64
64
  $backgroundColor: accentColor,
65
65
  $color: clr.getContrast(accentColor) > 5
@@ -1,4 +1,4 @@
1
1
  import React from 'react';
2
- export type CalendarEmptyCellProps = React.HTMLAttributes<HTMLButtonElement>;
3
- declare const _default: React.ForwardRefExoticComponent<CalendarEmptyCellProps & React.RefAttributes<HTMLButtonElement>>;
2
+ export type CalendarEmptyCellProps = React.HTMLAttributes<HTMLSpanElement>;
3
+ declare const _default: React.ForwardRefExoticComponent<CalendarEmptyCellProps & React.RefAttributes<HTMLSpanElement>>;
4
4
  export default _default;
@@ -17,13 +17,18 @@ Object.defineProperty(exports, "__esModule", { value: true });
17
17
  const react_1 = __importDefault(require("react"));
18
18
  const styled_1 = __importDefault(require("@emotion/styled"));
19
19
  const Elem = styled_1.default.span `
20
+ display: flex;
21
+ align-items: center;
22
+ justify-content: center;
20
23
  font-size: 0.8em;
21
24
  width: 3em;
22
25
  height: 3em;
26
+ margin: 0;
23
27
  min-width: 0;
24
- display: flex;
25
- align-items: center;
26
- justify-content: center;
28
+ outline: none;
29
+ position: relative;
30
+ font-weight: 400;
31
+ color: ${({ theme }) => theme.color.textSecondary.alpha(0.5).toString()};
27
32
  `;
28
33
  const CalendarEmptyCell = (props, ref) => {
29
34
  const { children } = props, restProps = __rest(props, ["children"]);
@@ -18,11 +18,12 @@ const react_1 = __importDefault(require("react"));
18
18
  const styled_1 = __importDefault(require("@emotion/styled"));
19
19
  const StyledCalendarHeading = styled_1.default.div `
20
20
  font-weight: 600;
21
- font-size: 1.6em;
21
+ font-size: 1.2em;
22
22
  margin: 0 0 0.2em 0;
23
23
  white-space: nowrap;
24
24
  text-overflow: ellipsis;
25
25
  width: 100%;
26
+ text-align: center;
26
27
  overflow: hidden;
27
28
  `;
28
29
  const CalendarHeading = (props, ref) => {