@docsvision/material-ui-pickers 3.2.0-beta.9 → 3.2.1-beta.1

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 (54) hide show
  1. package/DatePicker/DatePicker.d.ts +2 -2
  2. package/DatePicker/DatePicker.js +1 -1
  3. package/DatePicker/DatePickerToolbar.js +1 -1
  4. package/DateTimePicker/DateTimePicker.js +1 -1
  5. package/Picker/Picker.js +1 -1
  6. package/Picker/WrappedKeyboardPicker.js +4 -2
  7. package/Picker/WrappedPurePicker.js +4 -2
  8. package/README.md +1 -0
  9. package/Rifm/Rifm.d.ts +17 -0
  10. package/Rifm/Rifm.js +174 -0
  11. package/TimePicker/TimePicker.js +1 -1
  12. package/TimePicker/TimePickerToolbar.js +1 -1
  13. package/_helpers/text-field-helper.d.ts +2 -2
  14. package/_helpers/text-field-helper.js +62 -6
  15. package/_shared/KeyboardDateInput.js +27 -139
  16. package/_shared/ModalDialog.d.ts +2 -2
  17. package/_shared/ModalDialog.js +5 -3
  18. package/_shared/PickerToolbar.d.ts +1 -1
  19. package/_shared/PickerToolbar.js +7 -5
  20. package/_shared/PureDateInput.js +5 -3
  21. package/_shared/ToolbarButton.d.ts +2 -2
  22. package/_shared/ToolbarButton.js +4 -2
  23. package/_shared/ToolbarText.js +9 -7
  24. package/_shared/hooks/useKeyboardPickerState.js +5 -3
  25. package/_shared/hooks/useOpenState.js +1 -1
  26. package/_shared/hooks/usePickerState.js +9 -9
  27. package/constants/prop-types.js +2 -2
  28. package/dist/material-ui-pickers.esm.js +3626 -0
  29. package/dist/material-ui-pickers.esm.js.map +1 -0
  30. package/dist/material-ui-pickers.js +3651 -0
  31. package/dist/material-ui-pickers.js.map +1 -0
  32. package/dist/material-ui-pickers.umd.js +34161 -0
  33. package/dist/material-ui-pickers.umd.min.js +1 -0
  34. package/package.json +3 -4
  35. package/typings/BasePicker.d.ts +1 -1
  36. package/typings/overrides.d.ts +2 -2
  37. package/views/Calendar/Calendar.js +3 -2
  38. package/views/Calendar/CalendarHeader.d.ts +1 -1
  39. package/views/Calendar/Day.d.ts +1 -1
  40. package/views/Calendar/Day.js +5 -3
  41. package/views/Calendar/DayWrapper.js +4 -2
  42. package/views/Calendar/SlideTransition.d.ts +1 -1
  43. package/views/Clock/Clock.d.ts +1 -1
  44. package/views/Clock/ClockNumber.d.ts +1 -1
  45. package/views/Clock/ClockNumber.js +1 -1
  46. package/views/Clock/ClockPointer.d.ts +1 -1
  47. package/views/Month/Month.d.ts +1 -1
  48. package/views/Month/Month.js +5 -3
  49. package/views/Year/Year.d.ts +1 -1
  50. package/views/Year/Year.js +5 -3
  51. package/wrappers/InlineWrapper.d.ts +2 -0
  52. package/wrappers/InlineWrapper.js +5 -3
  53. package/wrappers/ModalWrapper.js +4 -2
  54. package/wrappers/Wrapper.js +4 -2
@@ -0,0 +1,3626 @@
1
+ import { __rest, __assign, __extends } from 'tslib';
2
+ import React__default, { createContext, useMemo, createElement, useContext, useCallback, cloneElement, useEffect, useLayoutEffect, useRef, Fragment, Component, useState, forwardRef, memo, useDebugValue, useReducer } from 'react';
3
+ import { func, oneOfType, object, string, element, arrayOf, bool, any, number, instanceOf, oneOf, node } from 'prop-types';
4
+ import clsx from 'clsx';
5
+ import Typography from '@material-ui/core/Typography';
6
+ import { makeStyles, fade, createStyles, withStyles, useTheme } from '@material-ui/core/styles';
7
+ import Button from '@material-ui/core/Button';
8
+ import Toolbar from '@material-ui/core/Toolbar';
9
+ import IconButton from '@material-ui/core/IconButton';
10
+ import { TransitionGroup, CSSTransition } from 'react-transition-group';
11
+ import SvgIcon from '@material-ui/core/SvgIcon';
12
+ import CircularProgress from '@material-ui/core/CircularProgress';
13
+ import { makeStyles as makeStyles$1, DialogActions as DialogActions$1, Button as Button$1, IconButton as IconButton$1, Grid } from '@material-ui/core';
14
+ import DialogActions from '@material-ui/core/DialogActions';
15
+ import DialogContent from '@material-ui/core/DialogContent';
16
+ import Dialog from '@material-ui/core/Dialog';
17
+ import Popover from '@material-ui/core/Popover';
18
+ import TextField from '@material-ui/core/TextField';
19
+ import InputAdornment from '@material-ui/core/InputAdornment';
20
+ import Tab from '@material-ui/core/Tab';
21
+ import Tabs from '@material-ui/core/Tabs';
22
+ import Paper from '@material-ui/core/Paper';
23
+
24
+ var MuiPickersContext = createContext(null);
25
+ var MuiPickersUtilsProvider = function (_a) {
26
+ var Utils = _a.utils,
27
+ children = _a.children,
28
+ locale = _a.locale,
29
+ libInstance = _a.libInstance;
30
+ var utils = useMemo(function () {
31
+ return new Utils({
32
+ locale: locale,
33
+ moment: libInstance
34
+ });
35
+ }, [Utils, libInstance, locale]);
36
+ return createElement(MuiPickersContext.Provider, {
37
+ value: utils,
38
+ children: children
39
+ });
40
+ };
41
+ process.env.NODE_ENV !== "production" ? MuiPickersUtilsProvider.propTypes = {
42
+ utils: func.isRequired,
43
+ locale: oneOfType([object, string]),
44
+ children: oneOfType([element.isRequired, arrayOf(element.isRequired)]).isRequired
45
+ } : void 0;
46
+
47
+ var checkUtils = function (utils) {
48
+ if (!utils) {
49
+ // tslint:disable-next-line
50
+ throw new Error('Can not find utils in context. You either a) forgot to wrap your component tree in MuiPickersUtilsProvider; or b) mixed named and direct file imports. Recommendation: use named imports from the module index.');
51
+ }
52
+ };
53
+ function useUtils() {
54
+ var utils = useContext(MuiPickersContext);
55
+ checkUtils(utils);
56
+ return utils;
57
+ }
58
+
59
+ var useStyles = makeStyles(function (theme) {
60
+ var textColor = theme.palette.type === 'light' ? theme.palette.primary.contrastText : theme.palette.getContrastText(theme.palette.background.default);
61
+ return {
62
+ toolbarTxt: {
63
+ color: fade(textColor, 0.54)
64
+ },
65
+ toolbarBtnSelected: {
66
+ color: textColor
67
+ }
68
+ };
69
+ }, {
70
+ name: 'MuiPickersToolbarText'
71
+ });
72
+
73
+ var ToolbarText = function (_a) {
74
+ var _b;
75
+
76
+ var selected = _a.selected,
77
+ label = _a.label,
78
+ _c = _a.className,
79
+ className = _c === void 0 ? null : _c,
80
+ other = __rest(_a, ["selected", "label", "className"]);
81
+
82
+ var classes = useStyles();
83
+ return createElement(Typography, __assign({
84
+ children: label,
85
+ className: clsx(classes.toolbarTxt, className, (_b = {}, _b[classes.toolbarBtnSelected] = selected, _b))
86
+ }, other));
87
+ };
88
+
89
+ var ToolbarButton = function (_a) {
90
+ var classes = _a.classes,
91
+ _b = _a.className,
92
+ className = _b === void 0 ? null : _b,
93
+ label = _a.label,
94
+ selected = _a.selected,
95
+ variant = _a.variant,
96
+ align = _a.align,
97
+ typographyClassName = _a.typographyClassName,
98
+ other = __rest(_a, ["classes", "className", "label", "selected", "variant", "align", "typographyClassName"]);
99
+
100
+ return createElement(Button, __assign({
101
+ variant: "text",
102
+ className: clsx(classes.toolbarBtn, className)
103
+ }, other), createElement(ToolbarText, {
104
+ align: align,
105
+ className: typographyClassName,
106
+ variant: variant,
107
+ label: label,
108
+ selected: selected
109
+ }));
110
+ };
111
+
112
+ process.env.NODE_ENV !== "production" ? ToolbarButton.propTypes = {
113
+ selected: bool.isRequired,
114
+ label: string.isRequired,
115
+ classes: any.isRequired,
116
+ className: string,
117
+ innerRef: any
118
+ } : void 0;
119
+ ToolbarButton.defaultProps = {
120
+ className: ''
121
+ };
122
+ var styles = createStyles({
123
+ toolbarBtn: {
124
+ padding: 0,
125
+ minWidth: '16px',
126
+ textTransform: 'none'
127
+ }
128
+ });
129
+ var ToolbarButton$1 = withStyles(styles, {
130
+ name: 'MuiPickersToolbarButton'
131
+ })(ToolbarButton);
132
+
133
+ var useStyles$1 = makeStyles(function (theme) {
134
+ return {
135
+ toolbar: {
136
+ display: 'flex',
137
+ flexDirection: 'row',
138
+ alignItems: 'center',
139
+ justifyContent: 'center',
140
+ height: 100,
141
+ backgroundColor: theme.palette.type === 'light' ? theme.palette.primary.main : theme.palette.background.default
142
+ },
143
+ toolbarLandscape: {
144
+ height: 'auto',
145
+ maxWidth: 150,
146
+ padding: 8,
147
+ justifyContent: 'flex-start'
148
+ }
149
+ };
150
+ }, {
151
+ name: 'MuiPickersToolbar'
152
+ });
153
+
154
+ var PickerToolbar = function (_a) {
155
+ var _b;
156
+
157
+ var children = _a.children,
158
+ isLandscape = _a.isLandscape,
159
+ _c = _a.className,
160
+ className = _c === void 0 ? null : _c,
161
+ other = __rest(_a, ["children", "isLandscape", "className"]);
162
+
163
+ var classes = useStyles$1();
164
+ return createElement(Toolbar, __assign({
165
+ className: clsx(classes.toolbar, (_b = {}, _b[classes.toolbarLandscape] = isLandscape, _b), className)
166
+ }, other), children);
167
+ };
168
+
169
+ /** Use it instead of .includes method for IE support */
170
+ function arrayIncludes(array, itemOrItems) {
171
+ if (Array.isArray(itemOrItems)) {
172
+ return itemOrItems.every(function (item) {
173
+ return array.indexOf(item) !== -1;
174
+ });
175
+ }
176
+
177
+ return array.indexOf(itemOrItems) !== -1;
178
+ }
179
+
180
+ var findClosestEnabledDate = function (_a) {
181
+ var date = _a.date,
182
+ utils = _a.utils,
183
+ minDate = _a.minDate,
184
+ maxDate = _a.maxDate,
185
+ disableFuture = _a.disableFuture,
186
+ disablePast = _a.disablePast,
187
+ shouldDisableDate = _a.shouldDisableDate;
188
+ var today = utils.startOfDay(utils.date());
189
+
190
+ if (disablePast && utils.isBefore(minDate, today)) {
191
+ minDate = today;
192
+ }
193
+
194
+ if (disableFuture && utils.isAfter(maxDate, today)) {
195
+ maxDate = today;
196
+ }
197
+
198
+ var forward = date;
199
+ var backward = date;
200
+
201
+ if (utils.isBefore(date, minDate)) {
202
+ forward = utils.date(minDate);
203
+ backward = null;
204
+ }
205
+
206
+ if (utils.isAfter(date, maxDate)) {
207
+ if (backward) {
208
+ backward = utils.date(maxDate);
209
+ }
210
+
211
+ forward = null;
212
+ }
213
+
214
+ while (forward || backward) {
215
+ if (forward && utils.isAfter(forward, maxDate)) {
216
+ forward = null;
217
+ }
218
+
219
+ if (backward && utils.isBefore(backward, minDate)) {
220
+ backward = null;
221
+ }
222
+
223
+ if (forward) {
224
+ if (!shouldDisableDate(forward)) {
225
+ return forward;
226
+ }
227
+
228
+ forward = utils.addDays(forward, 1);
229
+ }
230
+
231
+ if (backward) {
232
+ if (!shouldDisableDate(backward)) {
233
+ return backward;
234
+ }
235
+
236
+ backward = utils.addDays(backward, -1);
237
+ }
238
+ }
239
+
240
+ return null;
241
+ };
242
+ var isYearOnlyView = function (views) {
243
+ return views.length === 1 && views[0] === 'year';
244
+ };
245
+ var isYearAndMonthViews = function (views) {
246
+ return views.length === 2 && arrayIncludes(views, 'month') && arrayIncludes(views, 'year');
247
+ };
248
+ var getFormatByViews = function (views, utils) {
249
+ if (isYearOnlyView(views)) {
250
+ return utils.yearFormat;
251
+ }
252
+
253
+ if (isYearAndMonthViews(views)) {
254
+ return utils.yearMonthFormat;
255
+ }
256
+
257
+ return utils.dateFormat;
258
+ };
259
+
260
+ var useStyles$2 = makeStyles({
261
+ toolbar: {
262
+ flexDirection: 'column',
263
+ alignItems: 'flex-start'
264
+ },
265
+ toolbarLandscape: {
266
+ padding: 16
267
+ },
268
+ dateLandscape: {
269
+ marginRight: 16
270
+ }
271
+ }, {
272
+ name: 'MuiPickersDatePickerRoot'
273
+ });
274
+ var DatePickerToolbar = function (_a) {
275
+ var _b, _c;
276
+
277
+ var date = _a.date,
278
+ views = _a.views,
279
+ setOpenView = _a.setOpenView,
280
+ isLandscape = _a.isLandscape,
281
+ openView = _a.openView;
282
+ var utils = useUtils();
283
+ var classes = useStyles$2();
284
+ var isYearOnly = useMemo(function () {
285
+ return isYearOnlyView(views);
286
+ }, [views]);
287
+ var isYearAndMonth = useMemo(function () {
288
+ return isYearAndMonthViews(views);
289
+ }, [views]);
290
+ return createElement(PickerToolbar, {
291
+ isLandscape: isLandscape,
292
+ className: clsx((_b = {}, _b[classes.toolbar] = !isYearOnly, _b[classes.toolbarLandscape] = isLandscape, _b))
293
+ }, createElement(ToolbarButton$1, {
294
+ variant: isYearOnly ? 'h3' : 'subtitle1',
295
+ onClick: function () {
296
+ return setOpenView('year');
297
+ },
298
+ selected: openView === 'year',
299
+ label: utils.getYearText(date)
300
+ }), !isYearOnly && !isYearAndMonth && createElement(ToolbarButton$1, {
301
+ variant: "h4",
302
+ selected: openView === 'date',
303
+ onClick: function () {
304
+ return setOpenView('date');
305
+ },
306
+ align: isLandscape ? 'left' : 'center',
307
+ label: utils.getDatePickerHeaderText(date),
308
+ className: clsx((_c = {}, _c[classes.dateLandscape] = isLandscape, _c))
309
+ }), isYearAndMonth && createElement(ToolbarButton$1, {
310
+ variant: "h4",
311
+ onClick: function () {
312
+ return setOpenView('month');
313
+ },
314
+ selected: openView === 'month',
315
+ label: utils.getMonthText(date)
316
+ }));
317
+ };
318
+
319
+ var date = oneOfType([object, string, number, instanceOf(Date)]);
320
+ var datePickerView = oneOf(['year', 'month', 'day']);
321
+ /* eslint-disable @typescript-eslint/no-object-literal-type-assertion */
322
+
323
+ var timePickerDefaultProps = {
324
+ ampm: true,
325
+ invalidDateMessage: 'Invalid Time Format'
326
+ };
327
+ var datePickerDefaultProps = {
328
+ minDate: new Date('1900-01-01'),
329
+ maxDate: new Date('2200-01-01'),
330
+ invalidDateMessage: 'Invalid Date Format',
331
+ minDateMessage: 'Date should not be before minimal date',
332
+ maxDateMessage: 'Date should not be after maximal date',
333
+ allowKeyboardControl: true
334
+ };
335
+ var dateTimePickerDefaultProps = __assign(__assign(__assign({}, timePickerDefaultProps), datePickerDefaultProps), {
336
+ showTabs: true
337
+ });
338
+
339
+ var useStyles$3 = makeStyles(function (theme) {
340
+ return {
341
+ day: {
342
+ width: 36,
343
+ height: 36,
344
+ fontSize: theme.typography.caption.fontSize,
345
+ margin: '0 2px',
346
+ color: theme.palette.text.primary,
347
+ fontWeight: theme.typography.fontWeightMedium,
348
+ padding: 0
349
+ },
350
+ hidden: {
351
+ opacity: 0,
352
+ pointerEvents: 'none'
353
+ },
354
+ current: {
355
+ color: theme.palette.primary.main,
356
+ fontWeight: 600
357
+ },
358
+ daySelected: {
359
+ color: theme.palette.primary.contrastText,
360
+ backgroundColor: theme.palette.primary.main,
361
+ fontWeight: theme.typography.fontWeightMedium,
362
+ '&:hover': {
363
+ backgroundColor: theme.palette.primary.main
364
+ }
365
+ },
366
+ dayDisabled: {
367
+ pointerEvents: 'none',
368
+ color: theme.palette.text.hint
369
+ }
370
+ };
371
+ }, {
372
+ name: 'MuiPickersDay'
373
+ });
374
+ var Day = function (_a) {
375
+ var _b;
376
+
377
+ var children = _a.children,
378
+ disabled = _a.disabled,
379
+ hidden = _a.hidden,
380
+ current = _a.current,
381
+ selected = _a.selected,
382
+ other = __rest(_a, ["children", "disabled", "hidden", "current", "selected"]);
383
+
384
+ var classes = useStyles$3();
385
+ var className = clsx(classes.day, (_b = {}, _b[classes.hidden] = hidden, _b[classes.current] = current, _b[classes.daySelected] = selected, _b[classes.dayDisabled] = disabled, _b));
386
+ return createElement(IconButton, __assign({
387
+ className: className,
388
+ tabIndex: hidden || disabled ? -1 : 0
389
+ }, other), createElement(Typography, {
390
+ variant: "body2",
391
+ color: "inherit"
392
+ }, children));
393
+ };
394
+ Day.displayName = 'Day';
395
+ process.env.NODE_ENV !== "production" ? Day.propTypes = {
396
+ current: bool,
397
+ disabled: bool,
398
+ hidden: bool,
399
+ selected: bool
400
+ } : void 0;
401
+ Day.defaultProps = {
402
+ disabled: false,
403
+ hidden: false,
404
+ current: false,
405
+ selected: false
406
+ };
407
+
408
+ var DayWrapper = function (_a) {
409
+ var children = _a.children,
410
+ value = _a.value,
411
+ disabled = _a.disabled,
412
+ onSelect = _a.onSelect,
413
+ dayInCurrentMonth = _a.dayInCurrentMonth,
414
+ other = __rest(_a, ["children", "value", "disabled", "onSelect", "dayInCurrentMonth"]);
415
+
416
+ var handleClick = useCallback(function () {
417
+ return onSelect(value);
418
+ }, [onSelect, value]);
419
+ return createElement("div", __assign({
420
+ role: "presentation",
421
+ onClick: dayInCurrentMonth && !disabled ? handleClick : undefined,
422
+ onKeyPress: dayInCurrentMonth && !disabled ? handleClick : undefined
423
+ }, other), children);
424
+ };
425
+
426
+ var animationDuration = 350;
427
+ var useStyles$4 = makeStyles(function (theme) {
428
+ var slideTransition = theme.transitions.create('transform', {
429
+ duration: animationDuration,
430
+ easing: 'cubic-bezier(0.35, 0.8, 0.4, 1)'
431
+ });
432
+ return {
433
+ transitionContainer: {
434
+ display: 'block',
435
+ position: 'relative',
436
+ '& > *': {
437
+ position: 'absolute',
438
+ top: 0,
439
+ right: 0,
440
+ left: 0
441
+ }
442
+ },
443
+ 'slideEnter-left': {
444
+ willChange: 'transform',
445
+ transform: 'translate(100%)'
446
+ },
447
+ 'slideEnter-right': {
448
+ willChange: 'transform',
449
+ transform: 'translate(-100%)'
450
+ },
451
+ slideEnterActive: {
452
+ transform: 'translate(0%)',
453
+ transition: slideTransition
454
+ },
455
+ slideExit: {
456
+ transform: 'translate(0%)'
457
+ },
458
+ 'slideExitActiveLeft-left': {
459
+ willChange: 'transform',
460
+ transform: 'translate(-200%)',
461
+ transition: slideTransition
462
+ },
463
+ 'slideExitActiveLeft-right': {
464
+ willChange: 'transform',
465
+ transform: 'translate(200%)',
466
+ transition: slideTransition
467
+ }
468
+ };
469
+ }, {
470
+ name: 'MuiPickersSlideTransition'
471
+ });
472
+
473
+ var SlideTransition = function (_a) {
474
+ var children = _a.children,
475
+ transKey = _a.transKey,
476
+ slideDirection = _a.slideDirection,
477
+ _b = _a.className,
478
+ className = _b === void 0 ? null : _b;
479
+ var classes = useStyles$4();
480
+ var transitionClasses = {
481
+ exit: classes.slideExit,
482
+ enterActive: classes.slideEnterActive,
483
+ // @ts-ignore
484
+ enter: classes['slideEnter-' + slideDirection],
485
+ // @ts-ignore
486
+ exitActive: classes['slideExitActiveLeft-' + slideDirection]
487
+ };
488
+ return createElement(TransitionGroup, {
489
+ className: clsx(classes.transitionContainer, className),
490
+ childFactory: function (element) {
491
+ return cloneElement(element, {
492
+ classNames: transitionClasses
493
+ });
494
+ }
495
+ }, createElement(CSSTransition, {
496
+ mountOnEnter: true,
497
+ unmountOnExit: true,
498
+ key: transKey + slideDirection,
499
+ timeout: animationDuration,
500
+ classNames: transitionClasses,
501
+ children: children
502
+ }));
503
+ };
504
+
505
+ var ArrowLeftIcon = function (props) {
506
+ return React__default.createElement(SvgIcon, __assign({}, props), React__default.createElement("path", {
507
+ d: "M15.41 16.59L10.83 12l4.58-4.59L14 6l-6 6 6 6 1.41-1.41z"
508
+ }), React__default.createElement("path", {
509
+ fill: "none",
510
+ d: "M0 0h24v24H0V0z"
511
+ }));
512
+ };
513
+
514
+ var ArrowRightIcon = function (props) {
515
+ return React__default.createElement(SvgIcon, __assign({}, props), React__default.createElement("path", {
516
+ d: "M8.59 16.59L13.17 12 8.59 7.41 10 6l6 6-6 6-1.41-1.41z"
517
+ }), React__default.createElement("path", {
518
+ fill: "none",
519
+ d: "M0 0h24v24H0V0z"
520
+ }));
521
+ };
522
+
523
+ var useStyles$5 = makeStyles(function (theme) {
524
+ return {
525
+ switchHeader: {
526
+ display: 'flex',
527
+ justifyContent: 'space-between',
528
+ alignItems: 'center',
529
+ marginTop: theme.spacing(0.5),
530
+ marginBottom: theme.spacing(1)
531
+ },
532
+ transitionContainer: {
533
+ width: '100%',
534
+ overflow: 'hidden',
535
+ height: 23
536
+ },
537
+ iconButton: {
538
+ zIndex: 1,
539
+ backgroundColor: theme.palette.background.paper
540
+ },
541
+ daysHeader: {
542
+ display: 'flex',
543
+ justifyContent: 'center',
544
+ alignItems: 'center',
545
+ maxHeight: 16
546
+ },
547
+ dayLabel: {
548
+ width: 36,
549
+ margin: '0 2px',
550
+ textAlign: 'center',
551
+ color: theme.palette.text.hint
552
+ }
553
+ };
554
+ }, {
555
+ name: 'MuiPickersCalendarHeader'
556
+ });
557
+ var CalendarHeader = function (_a) {
558
+ var currentMonth = _a.currentMonth,
559
+ onMonthChange = _a.onMonthChange,
560
+ leftArrowIcon = _a.leftArrowIcon,
561
+ rightArrowIcon = _a.rightArrowIcon,
562
+ leftArrowButtonProps = _a.leftArrowButtonProps,
563
+ rightArrowButtonProps = _a.rightArrowButtonProps,
564
+ disablePrevMonth = _a.disablePrevMonth,
565
+ disableNextMonth = _a.disableNextMonth,
566
+ slideDirection = _a.slideDirection;
567
+ var utils = useUtils();
568
+ var classes = useStyles$5();
569
+ var theme = useTheme();
570
+ var rtl = theme.direction === 'rtl';
571
+
572
+ var selectNextMonth = function () {
573
+ return onMonthChange(utils.getNextMonth(currentMonth), 'left');
574
+ };
575
+
576
+ var selectPreviousMonth = function () {
577
+ return onMonthChange(utils.getPreviousMonth(currentMonth), 'right');
578
+ };
579
+
580
+ return createElement("div", null, createElement("div", {
581
+ className: classes.switchHeader
582
+ }, createElement(IconButton, __assign({}, leftArrowButtonProps, {
583
+ disabled: disablePrevMonth,
584
+ onClick: selectPreviousMonth,
585
+ className: classes.iconButton
586
+ }), rtl ? rightArrowIcon : leftArrowIcon), createElement(SlideTransition, {
587
+ slideDirection: slideDirection,
588
+ transKey: currentMonth.toString(),
589
+ className: classes.transitionContainer
590
+ }, createElement(Typography, {
591
+ align: "center",
592
+ variant: "body1"
593
+ }, utils.getCalendarHeaderText(currentMonth))), createElement(IconButton, __assign({}, rightArrowButtonProps, {
594
+ disabled: disableNextMonth,
595
+ onClick: selectNextMonth,
596
+ className: classes.iconButton
597
+ }), rtl ? leftArrowIcon : rightArrowIcon)), createElement("div", {
598
+ className: classes.daysHeader
599
+ }, utils.getWeekdays().map(function (day, index) {
600
+ return createElement(Typography, {
601
+ key: index,
602
+ variant: "caption",
603
+ className: classes.dayLabel
604
+ }, day);
605
+ })));
606
+ };
607
+ CalendarHeader.displayName = 'CalendarHeader';
608
+ process.env.NODE_ENV !== "production" ? CalendarHeader.propTypes = {
609
+ leftArrowIcon: node,
610
+ rightArrowIcon: node,
611
+ disablePrevMonth: bool,
612
+ disableNextMonth: bool
613
+ } : void 0;
614
+ CalendarHeader.defaultProps = {
615
+ leftArrowIcon: createElement(ArrowLeftIcon, null),
616
+ rightArrowIcon: createElement(ArrowRightIcon, null),
617
+ disablePrevMonth: false,
618
+ disableNextMonth: false
619
+ };
620
+
621
+ var useIsomorphicEffect = typeof window === 'undefined' ? useEffect : useLayoutEffect;
622
+ function runKeyHandler(e, keyHandlers) {
623
+ var handler = keyHandlers[e.key];
624
+
625
+ if (handler) {
626
+ handler(); // if event was handled prevent other side effects (e.g. page scroll)
627
+
628
+ e.preventDefault();
629
+ }
630
+ }
631
+ function useKeyDown(active, keyHandlers) {
632
+ var keyHandlersRef = useRef(keyHandlers);
633
+ useIsomorphicEffect(function () {
634
+ keyHandlersRef.current = keyHandlers;
635
+ });
636
+ useEffect(function () {
637
+ if (active) {
638
+ var handleKeyDown_1 = function (event) {
639
+ runKeyHandler(event, keyHandlers);
640
+ };
641
+
642
+ window.addEventListener('keydown', handleKeyDown_1);
643
+ return function () {
644
+ window.removeEventListener('keydown', handleKeyDown_1);
645
+ };
646
+ }
647
+ }, [active, keyHandlers]);
648
+ }
649
+
650
+ var withUtils = function () {
651
+ return function (Component) {
652
+ var WithUtils = function (props) {
653
+ var utils = useUtils();
654
+ return createElement(Component, __assign({
655
+ utils: utils
656
+ }, props));
657
+ };
658
+
659
+ WithUtils.displayName = "WithUtils(" + (Component.displayName || Component.name) + ")";
660
+ return WithUtils;
661
+ };
662
+ };
663
+
664
+ var KeyDownListener = function (_a) {
665
+ var onKeyDown = _a.onKeyDown;
666
+ useEffect(function () {
667
+ window.addEventListener('keydown', onKeyDown);
668
+ return function () {
669
+ window.removeEventListener('keydown', onKeyDown);
670
+ };
671
+ }, [onKeyDown]);
672
+ return null;
673
+ };
674
+
675
+ var Calendar =
676
+ /*@__PURE__*/
677
+ function (_super) {
678
+ __extends(Calendar, _super);
679
+
680
+ function Calendar() {
681
+ var _this = _super !== null && _super.apply(this, arguments) || this;
682
+
683
+ _this.state = {
684
+ slideDirection: 'left',
685
+ currentMonth: _this.props.utils.startOfMonth(_this.props.date),
686
+ loadingQueue: 0
687
+ };
688
+
689
+ _this.pushToLoadingQueue = function () {
690
+ var loadingQueue = _this.state.loadingQueue + 1;
691
+
692
+ _this.setState({
693
+ loadingQueue: loadingQueue
694
+ });
695
+ };
696
+
697
+ _this.popFromLoadingQueue = function () {
698
+ var loadingQueue = _this.state.loadingQueue;
699
+ loadingQueue = loadingQueue <= 0 ? 0 : loadingQueue - 1;
700
+
701
+ _this.setState({
702
+ loadingQueue: loadingQueue
703
+ });
704
+ };
705
+
706
+ _this.handleChangeMonth = function (newMonth, slideDirection) {
707
+ _this.setState({
708
+ currentMonth: newMonth,
709
+ slideDirection: slideDirection
710
+ });
711
+
712
+ if (_this.props.onMonthChange) {
713
+ var returnVal = _this.props.onMonthChange(newMonth);
714
+
715
+ if (returnVal) {
716
+ _this.pushToLoadingQueue();
717
+
718
+ returnVal.then(function () {
719
+ _this.popFromLoadingQueue();
720
+ });
721
+ }
722
+ }
723
+ };
724
+
725
+ _this.validateMinMaxDate = function (day) {
726
+ var _a = _this.props,
727
+ minDate = _a.minDate,
728
+ maxDate = _a.maxDate,
729
+ utils = _a.utils,
730
+ disableFuture = _a.disableFuture,
731
+ disablePast = _a.disablePast;
732
+ var now = utils.date();
733
+ var moment = utils.moment;
734
+ return Boolean(disableFuture && utils.isAfterDay(day, now) || disablePast && moment(day).isBefore(now, 'second') || minDate && utils.isBeforeDay(day, utils.date(minDate)) || maxDate && utils.isAfterDay(day, utils.date(maxDate)));
735
+ };
736
+
737
+ _this.shouldDisablePrevMonth = function () {
738
+ var _a = _this.props,
739
+ utils = _a.utils,
740
+ disablePast = _a.disablePast,
741
+ minDate = _a.minDate;
742
+ var now = utils.date();
743
+ var firstEnabledMonth = utils.startOfMonth(disablePast && utils.isAfter(now, utils.date(minDate)) ? now : utils.date(minDate));
744
+ return !utils.isBefore(firstEnabledMonth, _this.state.currentMonth);
745
+ };
746
+
747
+ _this.shouldDisableNextMonth = function () {
748
+ var _a = _this.props,
749
+ utils = _a.utils,
750
+ disableFuture = _a.disableFuture,
751
+ maxDate = _a.maxDate;
752
+ var now = utils.date();
753
+ var lastEnabledMonth = utils.startOfMonth(disableFuture && utils.isBefore(now, utils.date(maxDate)) ? now : utils.date(maxDate));
754
+ return !utils.isAfter(lastEnabledMonth, _this.state.currentMonth);
755
+ };
756
+
757
+ _this.shouldDisableDate = function (day) {
758
+ var shouldDisableDate = _this.props.shouldDisableDate;
759
+ return _this.validateMinMaxDate(day) || Boolean(shouldDisableDate && shouldDisableDate(day));
760
+ };
761
+
762
+ _this.handleDaySelect = function (day, isFinish) {
763
+ if (isFinish === void 0) {
764
+ isFinish = true;
765
+ }
766
+
767
+ var _a = _this.props,
768
+ date = _a.date,
769
+ utils = _a.utils;
770
+
771
+ _this.props.onChange(utils.mergeDateAndTime(day, date), isFinish);
772
+ };
773
+
774
+ _this.moveToDay = function (day) {
775
+ var utils = _this.props.utils;
776
+
777
+ if (day && !_this.shouldDisableDate(day)) {
778
+ if (utils.getMonth(day) !== utils.getMonth(_this.state.currentMonth)) {
779
+ _this.handleChangeMonth(utils.startOfMonth(day), 'left');
780
+ }
781
+
782
+ _this.handleDaySelect(day, false);
783
+ }
784
+ };
785
+
786
+ _this.handleKeyDown = function (event) {
787
+ var _a = _this.props,
788
+ theme = _a.theme,
789
+ date = _a.date,
790
+ utils = _a.utils;
791
+ runKeyHandler(event, {
792
+ ArrowUp: function () {
793
+ return _this.moveToDay(utils.addDays(date, -7));
794
+ },
795
+ ArrowDown: function () {
796
+ return _this.moveToDay(utils.addDays(date, 7));
797
+ },
798
+ ArrowLeft: function () {
799
+ return _this.moveToDay(utils.addDays(date, theme.direction === 'ltr' ? -1 : 1));
800
+ },
801
+ ArrowRight: function () {
802
+ return _this.moveToDay(utils.addDays(date, theme.direction === 'ltr' ? 1 : -1));
803
+ }
804
+ });
805
+ };
806
+
807
+ _this.renderWeeks = function () {
808
+ var _a = _this.props,
809
+ utils = _a.utils,
810
+ classes = _a.classes;
811
+ var weeks = utils.getWeekArray(_this.state.currentMonth);
812
+ return weeks.map(function (week) {
813
+ return createElement("div", {
814
+ key: "week-" + week[0].toString(),
815
+ className: classes.week
816
+ }, _this.renderDays(week));
817
+ });
818
+ };
819
+
820
+ _this.renderDays = function (week) {
821
+ var _a = _this.props,
822
+ date = _a.date,
823
+ renderDay = _a.renderDay,
824
+ utils = _a.utils;
825
+ var now = utils.date();
826
+ var selectedDate = utils.startOfDay(date);
827
+ var currentMonthNumber = utils.getMonth(_this.state.currentMonth);
828
+ return week.map(function (day) {
829
+ var disabled = _this.shouldDisableDate(day);
830
+
831
+ var isDayInCurrentMonth = utils.getMonth(day) === currentMonthNumber;
832
+ var dayComponent = createElement(Day, {
833
+ disabled: disabled,
834
+ current: utils.isSameDay(day, now),
835
+ hidden: !isDayInCurrentMonth,
836
+ selected: utils.isSameDay(selectedDate, day)
837
+ }, utils.getDayText(day));
838
+
839
+ if (renderDay) {
840
+ dayComponent = renderDay(day, selectedDate, isDayInCurrentMonth, dayComponent);
841
+ }
842
+
843
+ return createElement(DayWrapper, {
844
+ value: day,
845
+ key: day.toString(),
846
+ disabled: disabled,
847
+ dayInCurrentMonth: isDayInCurrentMonth,
848
+ onSelect: _this.handleDaySelect
849
+ }, dayComponent);
850
+ });
851
+ };
852
+
853
+ return _this;
854
+ }
855
+
856
+ Calendar.getDerivedStateFromProps = function (nextProps, state) {
857
+ var utils = nextProps.utils,
858
+ nextDate = nextProps.date;
859
+
860
+ if (!utils.isEqual(nextDate, state.lastDate)) {
861
+ var nextMonth = utils.getMonth(nextDate);
862
+ var lastDate = state.lastDate || nextDate;
863
+ var lastMonth = utils.getMonth(lastDate);
864
+ return {
865
+ lastDate: nextDate,
866
+ currentMonth: nextProps.utils.startOfMonth(nextDate),
867
+ // prettier-ignore
868
+ slideDirection: nextMonth === lastMonth ? state.slideDirection : utils.isAfterDay(nextDate, lastDate) ? 'left' : 'right'
869
+ };
870
+ }
871
+
872
+ return null;
873
+ };
874
+
875
+ Calendar.prototype.componentDidMount = function () {
876
+ var _a = this.props,
877
+ date = _a.date,
878
+ minDate = _a.minDate,
879
+ maxDate = _a.maxDate,
880
+ utils = _a.utils,
881
+ disablePast = _a.disablePast,
882
+ disableFuture = _a.disableFuture;
883
+
884
+ if (this.shouldDisableDate(date)) {
885
+ var closestEnabledDate = findClosestEnabledDate({
886
+ date: date,
887
+ utils: utils,
888
+ minDate: utils.date(minDate),
889
+ maxDate: utils.date(maxDate),
890
+ disablePast: Boolean(disablePast),
891
+ disableFuture: Boolean(disableFuture),
892
+ shouldDisableDate: this.shouldDisableDate
893
+ });
894
+ this.handleDaySelect(closestEnabledDate, false);
895
+ }
896
+ };
897
+
898
+ Calendar.prototype.render = function () {
899
+ var _a = this.state,
900
+ currentMonth = _a.currentMonth,
901
+ slideDirection = _a.slideDirection;
902
+ var _b = this.props,
903
+ classes = _b.classes,
904
+ allowKeyboardControl = _b.allowKeyboardControl,
905
+ leftArrowButtonProps = _b.leftArrowButtonProps,
906
+ leftArrowIcon = _b.leftArrowIcon,
907
+ rightArrowButtonProps = _b.rightArrowButtonProps,
908
+ rightArrowIcon = _b.rightArrowIcon,
909
+ loadingIndicator = _b.loadingIndicator;
910
+ var loadingElement = loadingIndicator ? loadingIndicator : createElement(CircularProgress, null);
911
+ return createElement(Fragment, null, allowKeyboardControl && createElement(KeyDownListener, {
912
+ onKeyDown: this.handleKeyDown
913
+ }), createElement(CalendarHeader, {
914
+ currentMonth: currentMonth,
915
+ slideDirection: slideDirection,
916
+ onMonthChange: this.handleChangeMonth,
917
+ leftArrowIcon: leftArrowIcon,
918
+ leftArrowButtonProps: leftArrowButtonProps,
919
+ rightArrowIcon: rightArrowIcon,
920
+ rightArrowButtonProps: rightArrowButtonProps,
921
+ disablePrevMonth: this.shouldDisablePrevMonth(),
922
+ disableNextMonth: this.shouldDisableNextMonth()
923
+ }), createElement(SlideTransition, {
924
+ slideDirection: slideDirection,
925
+ transKey: currentMonth.toString(),
926
+ className: classes.transitionContainer
927
+ }, createElement(Fragment, null, this.state.loadingQueue > 0 && createElement("div", {
928
+ className: classes.progressContainer
929
+ }, loadingElement) || createElement("div", null, this.renderWeeks()))));
930
+ };
931
+
932
+ process.env.NODE_ENV !== "production" ? Calendar.propTypes = {
933
+ renderDay: func,
934
+ shouldDisableDate: func,
935
+ allowKeyboardControl: bool
936
+ } : void 0;
937
+ Calendar.defaultProps = {
938
+ minDate: new Date('1900-01-01'),
939
+ maxDate: new Date('2200-01-01'),
940
+ disablePast: false,
941
+ disableFuture: false,
942
+ allowKeyboardControl: true
943
+ };
944
+ return Calendar;
945
+ }(Component);
946
+ var styles$1 = function (theme) {
947
+ return {
948
+ transitionContainer: {
949
+ minHeight: 36 * 6,
950
+ marginTop: theme.spacing(1.5)
951
+ },
952
+ progressContainer: {
953
+ width: '100%',
954
+ height: '100%',
955
+ display: 'flex',
956
+ justifyContent: 'center',
957
+ alignItems: 'center'
958
+ },
959
+ week: {
960
+ display: 'flex',
961
+ justifyContent: 'center'
962
+ }
963
+ };
964
+ };
965
+ var Calendar$1 = withStyles(styles$1, {
966
+ name: 'MuiPickersCalendar',
967
+ withTheme: true
968
+ })(withUtils()(Calendar));
969
+
970
+ function useViews(views, openTo, onChange) {
971
+ var _a = useState(openTo && arrayIncludes(views, openTo) ? openTo : views[0]),
972
+ openView = _a[0],
973
+ setOpenView = _a[1];
974
+
975
+ var handleChangeAndOpenNext = useCallback(function (date, isFinish) {
976
+ var nextViewToOpen = views[views.indexOf(openView) + 1];
977
+
978
+ if (isFinish && nextViewToOpen) {
979
+ // do not close picker if needs to show next view
980
+ onChange(date, false);
981
+ setOpenView(nextViewToOpen);
982
+ return;
983
+ }
984
+
985
+ onChange(date, Boolean(isFinish));
986
+ }, [onChange, openView, views]);
987
+ return {
988
+ handleChangeAndOpenNext: handleChangeAndOpenNext,
989
+ openView: openView,
990
+ setOpenView: setOpenView
991
+ };
992
+ }
993
+
994
+ var useStyles$6 = makeStyles(function (theme) {
995
+ return {
996
+ root: {
997
+ height: 40,
998
+ display: 'flex',
999
+ alignItems: 'center',
1000
+ justifyContent: 'center',
1001
+ cursor: 'pointer',
1002
+ outline: 'none',
1003
+ '&:focus': {
1004
+ color: theme.palette.primary.main,
1005
+ fontWeight: theme.typography.fontWeightMedium
1006
+ }
1007
+ },
1008
+ yearSelected: {
1009
+ margin: '10px 0',
1010
+ fontWeight: theme.typography.fontWeightMedium
1011
+ },
1012
+ yearDisabled: {
1013
+ pointerEvents: 'none',
1014
+ color: theme.palette.text.hint
1015
+ }
1016
+ };
1017
+ }, {
1018
+ name: 'MuiPickersYear'
1019
+ });
1020
+ var Year = function (_a) {
1021
+ var _b;
1022
+
1023
+ var onSelect = _a.onSelect,
1024
+ forwardedRef = _a.forwardedRef,
1025
+ value = _a.value,
1026
+ selected = _a.selected,
1027
+ disabled = _a.disabled,
1028
+ children = _a.children,
1029
+ other = __rest(_a, ["onSelect", "forwardedRef", "value", "selected", "disabled", "children"]);
1030
+
1031
+ var classes = useStyles$6();
1032
+ var handleClick = useCallback(function () {
1033
+ return onSelect(value);
1034
+ }, [onSelect, value]);
1035
+ return createElement(Typography, __assign({
1036
+ role: "button",
1037
+ component: "div",
1038
+ tabIndex: disabled ? -1 : 0,
1039
+ onClick: handleClick,
1040
+ onKeyPress: handleClick,
1041
+ color: selected ? 'primary' : undefined,
1042
+ variant: selected ? 'h5' : 'subtitle1',
1043
+ children: children,
1044
+ ref: forwardedRef,
1045
+ className: clsx(classes.root, (_b = {}, _b[classes.yearSelected] = selected, _b[classes.yearDisabled] = disabled, _b))
1046
+ }, other));
1047
+ };
1048
+ Year.displayName = 'Year';
1049
+ var Year$1 = forwardRef(function (props, ref) {
1050
+ return createElement(Year, __assign({}, props, {
1051
+ forwardedRef: ref
1052
+ }));
1053
+ });
1054
+
1055
+ var DIALOG_WIDTH = 310;
1056
+ var DIALOG_WIDTH_WIDER = 325;
1057
+ var VIEW_HEIGHT = 305;
1058
+
1059
+ var useStyles$7 = makeStyles$1(function (theme) {
1060
+ return {
1061
+ staticWrapperRoot: {
1062
+ overflow: 'hidden',
1063
+ minWidth: DIALOG_WIDTH,
1064
+ display: 'flex',
1065
+ flexDirection: 'column',
1066
+ backgroundColor: theme.palette.background.paper
1067
+ }
1068
+ };
1069
+ }, {
1070
+ name: 'MuiPickersStaticWrapper'
1071
+ });
1072
+ var StaticWrapper = function (_a) {
1073
+ var children = _a.children;
1074
+ var classes = useStyles$7();
1075
+ return createElement("div", {
1076
+ className: classes.staticWrapperRoot,
1077
+ children: children
1078
+ });
1079
+ };
1080
+
1081
+ var ModalDialog = function (_a) {
1082
+ var _b, _c;
1083
+
1084
+ var children = _a.children,
1085
+ classes = _a.classes,
1086
+ onAccept = _a.onAccept,
1087
+ onDismiss = _a.onDismiss,
1088
+ onClear = _a.onClear,
1089
+ onSetToday = _a.onSetToday,
1090
+ okLabel = _a.okLabel,
1091
+ cancelLabel = _a.cancelLabel,
1092
+ clearLabel = _a.clearLabel,
1093
+ todayLabel = _a.todayLabel,
1094
+ clearable = _a.clearable,
1095
+ showTodayButton = _a.showTodayButton,
1096
+ showTabs = _a.showTabs,
1097
+ wider = _a.wider,
1098
+ other = __rest(_a, ["children", "classes", "onAccept", "onDismiss", "onClear", "onSetToday", "okLabel", "cancelLabel", "clearLabel", "todayLabel", "clearable", "showTodayButton", "showTabs", "wider"]);
1099
+
1100
+ return createElement(Dialog, __assign({
1101
+ role: "dialog",
1102
+ onClose: onDismiss,
1103
+ classes: {
1104
+ paper: clsx(classes.dialogRoot, (_b = {}, _b[classes.dialogRootWider] = wider, _b))
1105
+ }
1106
+ }, other), createElement(DialogContent, {
1107
+ children: children,
1108
+ className: classes.dialog
1109
+ }), createElement(DialogActions, {
1110
+ classes: {
1111
+ root: clsx((_c = {}, _c[classes.withAdditionalAction] = clearable || showTodayButton, _c))
1112
+ }
1113
+ }, clearable && createElement(Button, {
1114
+ color: "primary",
1115
+ onClick: onClear
1116
+ }, clearLabel), !clearable && showTodayButton && createElement(Button, {
1117
+ color: "primary",
1118
+ onClick: onSetToday
1119
+ }, todayLabel), cancelLabel && createElement(Button, {
1120
+ color: "primary",
1121
+ onClick: onDismiss
1122
+ }, cancelLabel), okLabel && createElement(Button, {
1123
+ color: "primary",
1124
+ onClick: onAccept
1125
+ }, okLabel)));
1126
+ };
1127
+ ModalDialog.displayName = 'ModalDialog';
1128
+ var styles$2 = createStyles({
1129
+ dialogRoot: {
1130
+ minWidth: DIALOG_WIDTH
1131
+ },
1132
+ dialogRootWider: {// minWidth: DIALOG_WIDTH_WIDER,
1133
+ },
1134
+ dialog: {
1135
+ '&:first-child': {
1136
+ padding: 0
1137
+ }
1138
+ },
1139
+ withAdditionalAction: {
1140
+ // set justifyContent to default value to fix IE11 layout bug
1141
+ // see https://github.com/dmtrKovalenko/material-ui-pickers/pull/267
1142
+ justifyContent: 'flex-start',
1143
+ '& > *:first-child': {
1144
+ marginRight: 'auto'
1145
+ }
1146
+ }
1147
+ });
1148
+ var ModalDialog$1 = withStyles(styles$2, {
1149
+ name: 'MuiPickersModal'
1150
+ })(ModalDialog);
1151
+
1152
+ var ModalWrapper = function (_a) {
1153
+ var open = _a.open,
1154
+ children = _a.children,
1155
+ okLabel = _a.okLabel,
1156
+ cancelLabel = _a.cancelLabel,
1157
+ clearLabel = _a.clearLabel,
1158
+ todayLabel = _a.todayLabel,
1159
+ showTodayButton = _a.showTodayButton,
1160
+ clearable = _a.clearable,
1161
+ DialogProps = _a.DialogProps,
1162
+ showTabs = _a.showTabs,
1163
+ wider = _a.wider,
1164
+ InputComponent = _a.InputComponent,
1165
+ DateInputProps = _a.DateInputProps,
1166
+ onClear = _a.onClear,
1167
+ onAccept = _a.onAccept,
1168
+ onDismiss = _a.onDismiss,
1169
+ onSetToday = _a.onSetToday,
1170
+ other = __rest(_a, ["open", "children", "okLabel", "cancelLabel", "clearLabel", "todayLabel", "showTodayButton", "clearable", "DialogProps", "showTabs", "wider", "InputComponent", "DateInputProps", "onClear", "onAccept", "onDismiss", "onSetToday"]);
1171
+
1172
+ useKeyDown(open, {
1173
+ Enter: onAccept
1174
+ });
1175
+ return createElement(Fragment, null, createElement(InputComponent, __assign({}, other, DateInputProps)), createElement(ModalDialog$1, __assign({
1176
+ wider: wider,
1177
+ showTabs: showTabs,
1178
+ open: open,
1179
+ onClear: onClear,
1180
+ onAccept: onAccept,
1181
+ onDismiss: onDismiss,
1182
+ onSetToday: onSetToday,
1183
+ clearLabel: clearLabel,
1184
+ todayLabel: todayLabel,
1185
+ okLabel: okLabel,
1186
+ cancelLabel: cancelLabel,
1187
+ clearable: clearable,
1188
+ showTodayButton: showTodayButton,
1189
+ children: children
1190
+ }, DialogProps)));
1191
+ };
1192
+ process.env.NODE_ENV !== "production" ? ModalWrapper.propTypes = {
1193
+ okLabel: node,
1194
+ cancelLabel: node,
1195
+ clearLabel: node,
1196
+ clearable: bool,
1197
+ todayLabel: node,
1198
+ showTodayButton: bool,
1199
+ DialogProps: object
1200
+ } : void 0;
1201
+ ModalWrapper.defaultProps = {
1202
+ okLabel: 'OK',
1203
+ cancelLabel: 'Cancel',
1204
+ clearLabel: 'Clear',
1205
+ todayLabel: 'Today',
1206
+ clearable: false,
1207
+ showTodayButton: false
1208
+ };
1209
+
1210
+ var useStyles$8 = makeStyles({
1211
+ popoverPaper: {
1212
+ width: DIALOG_WIDTH,
1213
+ paddingBottom: 8
1214
+ },
1215
+ popoverPaperWider: {
1216
+ width: DIALOG_WIDTH_WIDER
1217
+ }
1218
+ }, {
1219
+ name: 'MuiPickersInlineWrapper'
1220
+ });
1221
+ var InlineWrapper = function (_a) {
1222
+ var _b;
1223
+
1224
+ var open = _a.open,
1225
+ wider = _a.wider,
1226
+ children = _a.children,
1227
+ PopoverProps = _a.PopoverProps,
1228
+ onClear = _a.onClear,
1229
+ onDismiss = _a.onDismiss,
1230
+ onSetToday = _a.onSetToday,
1231
+ onAccept = _a.onAccept,
1232
+ showTabs = _a.showTabs,
1233
+ showTodayButton = _a.showTodayButton,
1234
+ todayLabel = _a.todayLabel,
1235
+ DateInputProps = _a.DateInputProps,
1236
+ InputComponent = _a.InputComponent,
1237
+ other = __rest(_a, ["open", "wider", "children", "PopoverProps", "onClear", "onDismiss", "onSetToday", "onAccept", "showTabs", "showTodayButton", "todayLabel", "DateInputProps", "InputComponent"]);
1238
+
1239
+ var ref = useRef();
1240
+ var classes = useStyles$8();
1241
+ useKeyDown(open, {
1242
+ Enter: onAccept
1243
+ });
1244
+ return createElement(Fragment, null, createElement(InputComponent, __assign({}, other, DateInputProps, {
1245
+ inputRef: ref
1246
+ })), createElement(Popover, __assign({
1247
+ open: open,
1248
+ onClose: onDismiss,
1249
+ anchorEl: ref.current,
1250
+ classes: {
1251
+ paper: clsx(classes.popoverPaper, (_b = {}, _b[classes.popoverPaperWider] = wider, _b))
1252
+ },
1253
+ anchorOrigin: {
1254
+ vertical: 'bottom',
1255
+ horizontal: 'center'
1256
+ },
1257
+ transformOrigin: {
1258
+ vertical: 'top',
1259
+ horizontal: 'center'
1260
+ },
1261
+ children: children
1262
+ }, PopoverProps)));
1263
+ };
1264
+ process.env.NODE_ENV !== "production" ? InlineWrapper.propTypes = {
1265
+ onOpen: func,
1266
+ onClose: func,
1267
+ PopoverProps: object
1268
+ } : void 0;
1269
+
1270
+ function getWrapperFromVariant(variant) {
1271
+ switch (variant) {
1272
+ case 'inline':
1273
+ return InlineWrapper;
1274
+
1275
+ case 'static':
1276
+ return StaticWrapper;
1277
+
1278
+ default:
1279
+ return ModalWrapper;
1280
+ }
1281
+ }
1282
+ var VariantContext = createContext(null);
1283
+ var Wrapper = function (_a) {
1284
+ var variant = _a.variant,
1285
+ props = __rest(_a, ["variant"]);
1286
+
1287
+ var Component = getWrapperFromVariant(variant);
1288
+ return createElement(VariantContext.Provider, {
1289
+ value: variant || 'dialog'
1290
+ }, createElement(Component, __assign({}, props)));
1291
+ };
1292
+
1293
+ var useStyles$9 = makeStyles({
1294
+ container: {
1295
+ height: 300,
1296
+ overflowY: 'auto'
1297
+ }
1298
+ }, {
1299
+ name: 'MuiPickersYearSelection'
1300
+ });
1301
+ var YearSelection = function (_a) {
1302
+ var date = _a.date,
1303
+ onChange = _a.onChange,
1304
+ onYearChange = _a.onYearChange,
1305
+ minDate = _a.minDate,
1306
+ maxDate = _a.maxDate,
1307
+ disablePast = _a.disablePast,
1308
+ disableFuture = _a.disableFuture,
1309
+ animateYearScrolling = _a.animateYearScrolling;
1310
+ var utils = useUtils();
1311
+ var classes = useStyles$9();
1312
+ var currentVariant = useContext(VariantContext);
1313
+ var selectedYearRef = useRef(null);
1314
+ useEffect(function () {
1315
+ if (selectedYearRef.current && selectedYearRef.current.scrollIntoView) {
1316
+ selectedYearRef.current.scrollIntoView({
1317
+ block: currentVariant === 'static' ? 'nearest' : 'center',
1318
+ behavior: animateYearScrolling ? 'smooth' : 'auto'
1319
+ });
1320
+ }
1321
+ }, []); // eslint-disable-line
1322
+
1323
+ var currentYear = utils.getYear(date);
1324
+ var onYearSelect = useCallback(function (year) {
1325
+ var newDate = utils.setYear(date, year);
1326
+
1327
+ if (onYearChange) {
1328
+ onYearChange(newDate);
1329
+ }
1330
+
1331
+ onChange(newDate, true);
1332
+ }, [date, onChange, onYearChange, utils]);
1333
+ return createElement("div", {
1334
+ className: classes.container
1335
+ }, utils.getYearRange(minDate, maxDate).map(function (year) {
1336
+ var yearNumber = utils.getYear(year);
1337
+ var selected = yearNumber === currentYear;
1338
+ return createElement(Year$1, {
1339
+ key: utils.getYearText(year),
1340
+ selected: selected,
1341
+ value: yearNumber,
1342
+ onSelect: onYearSelect,
1343
+ ref: selected ? selectedYearRef : undefined,
1344
+ disabled: Boolean(disablePast && utils.isBeforeYear(year, utils.date()) || disableFuture && utils.isAfterYear(year, utils.date()))
1345
+ }, utils.getYearText(year));
1346
+ }));
1347
+ };
1348
+
1349
+ var ClockType;
1350
+
1351
+ (function (ClockType) {
1352
+ ClockType["HOURS"] = "hours";
1353
+ ClockType["MINUTES"] = "minutes";
1354
+ ClockType["SECONDS"] = "seconds";
1355
+ })(ClockType || (ClockType = {}));
1356
+
1357
+ var ClockType$1 = ClockType;
1358
+
1359
+ var ClockPointer =
1360
+ /*@__PURE__*/
1361
+ function (_super) {
1362
+ __extends(ClockPointer, _super);
1363
+
1364
+ function ClockPointer() {
1365
+ var _this = _super !== null && _super.apply(this, arguments) || this;
1366
+
1367
+ _this.state = {
1368
+ toAnimateTransform: false,
1369
+ previousType: undefined
1370
+ };
1371
+
1372
+ _this.getAngleStyle = function () {
1373
+ var _a = _this.props,
1374
+ value = _a.value,
1375
+ isInner = _a.isInner,
1376
+ type = _a.type;
1377
+ var max = type === ClockType$1.HOURS ? 12 : 60;
1378
+ var angle = 360 / max * value;
1379
+
1380
+ if (type === ClockType$1.HOURS && value > 12) {
1381
+ angle -= 360; // round up angle to max 360 degrees
1382
+ }
1383
+
1384
+ return {
1385
+ height: isInner ? '26%' : '40%',
1386
+ transform: "rotateZ(" + angle + "deg)"
1387
+ };
1388
+ };
1389
+
1390
+ return _this;
1391
+ }
1392
+
1393
+ ClockPointer.prototype.render = function () {
1394
+ var _a, _b;
1395
+
1396
+ var _c = this.props,
1397
+ classes = _c.classes,
1398
+ hasSelected = _c.hasSelected;
1399
+ return createElement("div", {
1400
+ style: this.getAngleStyle(),
1401
+ className: clsx(classes.pointer, (_a = {}, _a[classes.animateTransform] = this.state.toAnimateTransform, _a))
1402
+ }, createElement("div", {
1403
+ className: clsx(classes.thumb, (_b = {}, _b[classes.noPoint] = hasSelected, _b))
1404
+ }));
1405
+ };
1406
+
1407
+ ClockPointer.getDerivedStateFromProps = function (nextProps, state) {
1408
+ if (nextProps.type !== state.previousType) {
1409
+ return {
1410
+ toAnimateTransform: true,
1411
+ previousType: nextProps.type
1412
+ };
1413
+ }
1414
+
1415
+ return {
1416
+ toAnimateTransform: false,
1417
+ previousType: nextProps.type
1418
+ };
1419
+ };
1420
+
1421
+ return ClockPointer;
1422
+ }(Component);
1423
+ var styles$3 = function (theme) {
1424
+ return createStyles({
1425
+ pointer: {
1426
+ width: 2,
1427
+ backgroundColor: theme.palette.primary.main,
1428
+ position: 'absolute',
1429
+ left: 'calc(50% - 1px)',
1430
+ bottom: '50%',
1431
+ transformOrigin: 'center bottom 0px'
1432
+ },
1433
+ animateTransform: {
1434
+ transition: theme.transitions.create(['transform', 'height'])
1435
+ },
1436
+ thumb: {
1437
+ width: 4,
1438
+ height: 4,
1439
+ backgroundColor: theme.palette.primary.contrastText,
1440
+ borderRadius: '100%',
1441
+ position: 'absolute',
1442
+ top: -21,
1443
+ left: -15,
1444
+ border: "14px solid " + theme.palette.primary.main,
1445
+ boxSizing: 'content-box'
1446
+ },
1447
+ noPoint: {
1448
+ backgroundColor: theme.palette.primary.main
1449
+ }
1450
+ });
1451
+ };
1452
+ var ClockPointer$1 = withStyles(styles$3, {
1453
+ name: 'MuiPickersClockPointer'
1454
+ })(ClockPointer);
1455
+
1456
+ var center = {
1457
+ x: 260 / 2,
1458
+ y: 260 / 2
1459
+ };
1460
+ var basePoint = {
1461
+ x: center.x,
1462
+ y: 0
1463
+ };
1464
+ var cx = basePoint.x - center.x;
1465
+ var cy = basePoint.y - center.y;
1466
+
1467
+ var rad2deg = function (rad) {
1468
+ return rad * 57.29577951308232;
1469
+ };
1470
+
1471
+ var getAngleValue = function (step, offsetX, offsetY) {
1472
+ var x = offsetX - center.x;
1473
+ var y = offsetY - center.y;
1474
+ var atan = Math.atan2(cx, cy) - Math.atan2(x, y);
1475
+ var deg = rad2deg(atan);
1476
+ deg = Math.round(deg / step) * step;
1477
+ deg %= 360;
1478
+ var value = Math.floor(deg / step) || 0;
1479
+ var delta = Math.pow(x, 2) + Math.pow(y, 2);
1480
+ var distance = Math.sqrt(delta);
1481
+ return {
1482
+ value: value,
1483
+ distance: distance
1484
+ };
1485
+ };
1486
+
1487
+ var getHours = function (offsetX, offsetY, ampm) {
1488
+ var _a = getAngleValue(30, offsetX, offsetY),
1489
+ value = _a.value,
1490
+ distance = _a.distance;
1491
+
1492
+ value = value || 12;
1493
+
1494
+ if (!ampm) {
1495
+ if (distance < 90) {
1496
+ value += 12;
1497
+ value %= 24;
1498
+ }
1499
+ } else {
1500
+ value %= 12;
1501
+ }
1502
+
1503
+ return value;
1504
+ };
1505
+ var getMinutes = function (offsetX, offsetY, step) {
1506
+ if (step === void 0) {
1507
+ step = 1;
1508
+ }
1509
+
1510
+ var angleStep = step * 6;
1511
+ var value = getAngleValue(angleStep, offsetX, offsetY).value;
1512
+ value = value * step % 60;
1513
+ return value;
1514
+ };
1515
+ var getMeridiem = function (date, utils) {
1516
+ return utils.getHours(date) >= 12 ? 'pm' : 'am';
1517
+ };
1518
+ var convertToMeridiem = function (time, meridiem, ampm, utils) {
1519
+ if (ampm) {
1520
+ var currentMeridiem = utils.getHours(time) >= 12 ? 'pm' : 'am';
1521
+
1522
+ if (currentMeridiem !== meridiem) {
1523
+ var hours = meridiem === 'am' ? utils.getHours(time) - 12 : utils.getHours(time) + 12;
1524
+ return utils.setHours(time, hours);
1525
+ }
1526
+ }
1527
+
1528
+ return time;
1529
+ };
1530
+
1531
+ var Clock =
1532
+ /*@__PURE__*/
1533
+ function (_super) {
1534
+ __extends(Clock, _super);
1535
+
1536
+ function Clock() {
1537
+ var _this = _super !== null && _super.apply(this, arguments) || this;
1538
+
1539
+ _this.isMoving = false;
1540
+
1541
+ _this.handleTouchMove = function (e) {
1542
+ _this.isMoving = true;
1543
+
1544
+ _this.setTime(e);
1545
+ };
1546
+
1547
+ _this.handleTouchEnd = function (e) {
1548
+ if (_this.isMoving) {
1549
+ _this.setTime(e, true);
1550
+
1551
+ _this.isMoving = false;
1552
+ }
1553
+ };
1554
+
1555
+ _this.handleMove = function (e) {
1556
+ e.preventDefault();
1557
+ e.stopPropagation(); // MouseEvent.which is deprecated, but MouseEvent.buttons is not supported in Safari
1558
+
1559
+ var isButtonPressed = typeof e.buttons === 'undefined' ? e.nativeEvent.which === 1 : e.buttons === 1;
1560
+
1561
+ if (isButtonPressed) {
1562
+ _this.setTime(e.nativeEvent, false);
1563
+ }
1564
+ };
1565
+
1566
+ _this.handleMouseUp = function (e) {
1567
+ if (_this.isMoving) {
1568
+ _this.isMoving = false;
1569
+ }
1570
+
1571
+ _this.setTime(e.nativeEvent, true);
1572
+ };
1573
+
1574
+ _this.hasSelected = function () {
1575
+ var _a = _this.props,
1576
+ type = _a.type,
1577
+ value = _a.value;
1578
+
1579
+ if (type === ClockType$1.HOURS) {
1580
+ return true;
1581
+ }
1582
+
1583
+ return value % 5 === 0;
1584
+ };
1585
+
1586
+ return _this;
1587
+ }
1588
+
1589
+ Clock.prototype.setTime = function (e, isFinish) {
1590
+ if (isFinish === void 0) {
1591
+ isFinish = false;
1592
+ }
1593
+
1594
+ var offsetX = e.offsetX,
1595
+ offsetY = e.offsetY;
1596
+
1597
+ if (typeof offsetX === 'undefined') {
1598
+ var rect = e.target.getBoundingClientRect();
1599
+ offsetX = e.changedTouches[0].clientX - rect.left;
1600
+ offsetY = e.changedTouches[0].clientY - rect.top;
1601
+ }
1602
+
1603
+ var value = this.props.type === ClockType$1.SECONDS || this.props.type === ClockType$1.MINUTES ? getMinutes(offsetX, offsetY, this.props.minutesStep) : getHours(offsetX, offsetY, Boolean(this.props.ampm));
1604
+ this.props.onChange(value, isFinish);
1605
+ };
1606
+
1607
+ Clock.prototype.render = function () {
1608
+ var _a = this.props,
1609
+ classes = _a.classes,
1610
+ value = _a.value,
1611
+ children = _a.children,
1612
+ type = _a.type,
1613
+ ampm = _a.ampm;
1614
+ var isPointerInner = !ampm && type === ClockType$1.HOURS && (value < 1 || value > 12);
1615
+ return createElement("div", {
1616
+ className: classes.container
1617
+ }, createElement("div", {
1618
+ className: classes.clock
1619
+ }, createElement("div", {
1620
+ role: "menu",
1621
+ tabIndex: -1,
1622
+ className: classes.squareMask,
1623
+ onTouchMove: this.handleTouchMove,
1624
+ onTouchEnd: this.handleTouchEnd,
1625
+ onMouseUp: this.handleMouseUp,
1626
+ onMouseMove: this.handleMove
1627
+ }), createElement("div", {
1628
+ className: classes.pin
1629
+ }), createElement(ClockPointer$1, {
1630
+ type: type,
1631
+ value: value,
1632
+ isInner: isPointerInner,
1633
+ hasSelected: this.hasSelected()
1634
+ }), children));
1635
+ };
1636
+
1637
+ process.env.NODE_ENV !== "production" ? Clock.propTypes = {
1638
+ type: oneOf(Object.keys(ClockType$1).map(function (key) {
1639
+ return ClockType$1[key];
1640
+ })).isRequired,
1641
+ value: number.isRequired,
1642
+ onChange: func.isRequired,
1643
+ children: arrayOf(node).isRequired,
1644
+ ampm: bool,
1645
+ minutesStep: number,
1646
+ innerRef: any
1647
+ } : void 0;
1648
+ Clock.defaultProps = {
1649
+ ampm: false,
1650
+ minutesStep: 1
1651
+ };
1652
+ return Clock;
1653
+ }(Component);
1654
+ var styles$4 = function (theme) {
1655
+ return createStyles({
1656
+ container: {
1657
+ display: 'flex',
1658
+ justifyContent: 'center',
1659
+ alignItems: 'flex-end',
1660
+ margin: theme.spacing(2) + "px 0 " + theme.spacing(1) + "px"
1661
+ },
1662
+ clock: {
1663
+ backgroundColor: 'rgba(0,0,0,.07)',
1664
+ borderRadius: '50%',
1665
+ height: 260,
1666
+ width: 260,
1667
+ position: 'relative',
1668
+ pointerEvents: 'none',
1669
+ zIndex: 1
1670
+ },
1671
+ squareMask: {
1672
+ width: '100%',
1673
+ height: '100%',
1674
+ position: 'absolute',
1675
+ pointerEvents: 'auto',
1676
+ outline: 'none',
1677
+ touchActions: 'none',
1678
+ userSelect: 'none',
1679
+ '&:active': {
1680
+ cursor: 'move'
1681
+ }
1682
+ },
1683
+ pin: {
1684
+ width: 6,
1685
+ height: 6,
1686
+ borderRadius: '50%',
1687
+ backgroundColor: theme.palette.primary.main,
1688
+ position: 'absolute',
1689
+ top: '50%',
1690
+ left: '50%',
1691
+ transform: 'translate(-50%, -50%)'
1692
+ }
1693
+ });
1694
+ };
1695
+ var Clock$1 = withStyles(styles$4, {
1696
+ name: 'MuiPickersClock'
1697
+ })(Clock);
1698
+
1699
+ var positions = {
1700
+ 0: [0, 40],
1701
+ 1: [55, 19.6],
1702
+ 2: [94.4, 59.5],
1703
+ 3: [109, 114],
1704
+ 4: [94.4, 168.5],
1705
+ 5: [54.5, 208.4],
1706
+ 6: [0, 223],
1707
+ 7: [-54.5, 208.4],
1708
+ 8: [-94.4, 168.5],
1709
+ 9: [-109, 114],
1710
+ 10: [-94.4, 59.5],
1711
+ 11: [-54.5, 19.6],
1712
+ 12: [0, 5],
1713
+ 13: [36.9, 49.9],
1714
+ 14: [64, 77],
1715
+ 15: [74, 114],
1716
+ 16: [64, 151],
1717
+ 17: [37, 178],
1718
+ 18: [0, 188],
1719
+ 19: [-37, 178],
1720
+ 20: [-64, 151],
1721
+ 21: [-74, 114],
1722
+ 22: [-64, 77],
1723
+ 23: [-37, 50]
1724
+ };
1725
+ var useStyles$a = makeStyles(function (theme) {
1726
+ var size = theme.spacing(4);
1727
+ return {
1728
+ clockNumber: {
1729
+ width: size,
1730
+ height: 32,
1731
+ userSelect: 'none',
1732
+ position: 'absolute',
1733
+ left: "calc(50% - " + size / 2 + "px)",
1734
+ display: 'inline-flex',
1735
+ justifyContent: 'center',
1736
+ alignItems: 'center',
1737
+ borderRadius: '50%',
1738
+ color: theme.palette.type === 'light' ? theme.palette.text.primary : theme.palette.text.hint
1739
+ },
1740
+ clockNumberSelected: {
1741
+ color: theme.palette.primary.contrastText
1742
+ }
1743
+ };
1744
+ }, {
1745
+ name: 'MuiPickersClockNumber'
1746
+ });
1747
+ var ClockNumber = function (_a) {
1748
+ var _b;
1749
+
1750
+ var selected = _a.selected,
1751
+ label = _a.label,
1752
+ index = _a.index,
1753
+ isInner = _a.isInner;
1754
+ var classes = useStyles$a();
1755
+ var className = clsx(classes.clockNumber, (_b = {}, _b[classes.clockNumberSelected] = selected, _b));
1756
+ var transformStyle = useMemo(function () {
1757
+ var position = positions[index];
1758
+ return {
1759
+ transform: "translate(" + position[0] + "px, " + position[1] + "px"
1760
+ };
1761
+ }, [index]);
1762
+ return createElement(Typography, {
1763
+ component: "span",
1764
+ className: className,
1765
+ variant: isInner ? 'body2' : 'body1',
1766
+ style: transformStyle,
1767
+ children: label
1768
+ });
1769
+ };
1770
+
1771
+ var getHourNumbers = function (_a) {
1772
+ var ampm = _a.ampm,
1773
+ utils = _a.utils,
1774
+ date = _a.date;
1775
+ var currentHours = utils.getHours(date);
1776
+ var hourNumbers = [];
1777
+ var startHour = ampm ? 1 : 0;
1778
+ var endHour = ampm ? 12 : 23;
1779
+
1780
+ var isSelected = function (hour) {
1781
+ if (ampm) {
1782
+ if (hour === 12) {
1783
+ return currentHours === 12 || currentHours === 0;
1784
+ }
1785
+
1786
+ return currentHours === hour || currentHours - 12 === hour;
1787
+ }
1788
+
1789
+ return currentHours === hour;
1790
+ };
1791
+
1792
+ for (var hour = startHour; hour <= endHour; hour += 1) {
1793
+ var label = hour.toString();
1794
+
1795
+ if (hour === 0) {
1796
+ label = '00';
1797
+ }
1798
+
1799
+ var props = {
1800
+ index: hour,
1801
+ label: utils.formatNumber(label),
1802
+ selected: isSelected(hour),
1803
+ isInner: !ampm && (hour === 0 || hour > 12)
1804
+ };
1805
+ hourNumbers.push(createElement(ClockNumber, __assign({
1806
+ key: hour
1807
+ }, props)));
1808
+ }
1809
+
1810
+ return hourNumbers;
1811
+ };
1812
+ var getMinutesNumbers = function (_a) {
1813
+ var value = _a.value,
1814
+ utils = _a.utils;
1815
+ var f = utils.formatNumber;
1816
+ return [createElement(ClockNumber, {
1817
+ label: f('00'),
1818
+ selected: value === 0,
1819
+ index: 12,
1820
+ key: 12
1821
+ }), createElement(ClockNumber, {
1822
+ label: f('05'),
1823
+ selected: value === 5,
1824
+ index: 1,
1825
+ key: 1
1826
+ }), createElement(ClockNumber, {
1827
+ label: f('10'),
1828
+ selected: value === 10,
1829
+ index: 2,
1830
+ key: 2
1831
+ }), createElement(ClockNumber, {
1832
+ label: f('15'),
1833
+ selected: value === 15,
1834
+ index: 3,
1835
+ key: 3
1836
+ }), createElement(ClockNumber, {
1837
+ label: f('20'),
1838
+ selected: value === 20,
1839
+ index: 4,
1840
+ key: 4
1841
+ }), createElement(ClockNumber, {
1842
+ label: f('25'),
1843
+ selected: value === 25,
1844
+ index: 5,
1845
+ key: 5
1846
+ }), createElement(ClockNumber, {
1847
+ label: f('30'),
1848
+ selected: value === 30,
1849
+ index: 6,
1850
+ key: 6
1851
+ }), createElement(ClockNumber, {
1852
+ label: f('35'),
1853
+ selected: value === 35,
1854
+ index: 7,
1855
+ key: 7
1856
+ }), createElement(ClockNumber, {
1857
+ label: f('40'),
1858
+ selected: value === 40,
1859
+ index: 8,
1860
+ key: 8
1861
+ }), createElement(ClockNumber, {
1862
+ label: f('45'),
1863
+ selected: value === 45,
1864
+ index: 9,
1865
+ key: 9
1866
+ }), createElement(ClockNumber, {
1867
+ label: f('50'),
1868
+ selected: value === 50,
1869
+ index: 10,
1870
+ key: 10
1871
+ }), createElement(ClockNumber, {
1872
+ label: f('55'),
1873
+ selected: value === 55,
1874
+ index: 11,
1875
+ key: 11
1876
+ })];
1877
+ };
1878
+
1879
+ var TimePickerView = function (_a) {
1880
+ var type = _a.type,
1881
+ onHourChange = _a.onHourChange,
1882
+ onMinutesChange = _a.onMinutesChange,
1883
+ onSecondsChange = _a.onSecondsChange,
1884
+ ampm = _a.ampm,
1885
+ date = _a.date,
1886
+ minutesStep = _a.minutesStep;
1887
+ var utils = useUtils();
1888
+ var viewProps = useMemo(function () {
1889
+ switch (type) {
1890
+ case ClockType$1.HOURS:
1891
+ return {
1892
+ value: utils.getHours(date),
1893
+ children: getHourNumbers({
1894
+ date: date,
1895
+ utils: utils,
1896
+ ampm: Boolean(ampm)
1897
+ }),
1898
+ onChange: function (value, isFinish) {
1899
+ var currentMeridiem = getMeridiem(date, utils);
1900
+ var updatedTimeWithMeridiem = convertToMeridiem(utils.setHours(date, value), currentMeridiem, Boolean(ampm), utils);
1901
+ onHourChange(updatedTimeWithMeridiem, isFinish);
1902
+ }
1903
+ };
1904
+
1905
+ case ClockType$1.MINUTES:
1906
+ var minutesValue = utils.getMinutes(date);
1907
+ return {
1908
+ value: minutesValue,
1909
+ children: getMinutesNumbers({
1910
+ value: minutesValue,
1911
+ utils: utils
1912
+ }),
1913
+ onChange: function (value, isFinish) {
1914
+ var updatedTime = utils.setMinutes(date, value);
1915
+ onMinutesChange(updatedTime, isFinish);
1916
+ }
1917
+ };
1918
+
1919
+ case ClockType$1.SECONDS:
1920
+ var secondsValue = utils.getSeconds(date);
1921
+ return {
1922
+ value: secondsValue,
1923
+ children: getMinutesNumbers({
1924
+ value: secondsValue,
1925
+ utils: utils
1926
+ }),
1927
+ onChange: function (value, isFinish) {
1928
+ var updatedTime = utils.setSeconds(date, value);
1929
+ onSecondsChange(updatedTime, isFinish);
1930
+ }
1931
+ };
1932
+
1933
+ default:
1934
+ throw new Error('You must provide the type for TimePickerView');
1935
+ }
1936
+ }, [ampm, date, onHourChange, onMinutesChange, onSecondsChange, type, utils]);
1937
+ return createElement(Clock$1, __assign({
1938
+ type: type,
1939
+ ampm: ampm,
1940
+ minutesStep: minutesStep
1941
+ }, viewProps));
1942
+ };
1943
+ TimePickerView.displayName = 'TimePickerView';
1944
+ process.env.NODE_ENV !== "production" ? TimePickerView.propTypes = {
1945
+ date: object.isRequired,
1946
+ onHourChange: func.isRequired,
1947
+ onMinutesChange: func.isRequired,
1948
+ onSecondsChange: func.isRequired,
1949
+ ampm: bool,
1950
+ minutesStep: number,
1951
+ type: oneOf(Object.keys(ClockType$1).map(function (key) {
1952
+ return ClockType$1[key];
1953
+ })).isRequired
1954
+ } : void 0;
1955
+ TimePickerView.defaultProps = {
1956
+ ampm: true,
1957
+ minutesStep: 1
1958
+ };
1959
+ var ClockView = memo(TimePickerView);
1960
+
1961
+ var useStyles$b = makeStyles(function (theme) {
1962
+ return {
1963
+ root: {
1964
+ flex: '1 0 33.33%',
1965
+ display: 'flex',
1966
+ alignItems: 'center',
1967
+ justifyContent: 'center',
1968
+ cursor: 'pointer',
1969
+ outline: 'none',
1970
+ height: 75,
1971
+ transition: theme.transitions.create('font-size', {
1972
+ duration: '100ms'
1973
+ }),
1974
+ '&:focus': {
1975
+ color: theme.palette.primary.main,
1976
+ fontWeight: theme.typography.fontWeightMedium
1977
+ }
1978
+ },
1979
+ monthSelected: {
1980
+ color: theme.palette.primary.main,
1981
+ fontWeight: theme.typography.fontWeightMedium
1982
+ },
1983
+ monthDisabled: {
1984
+ pointerEvents: 'none',
1985
+ color: theme.palette.text.hint
1986
+ }
1987
+ };
1988
+ }, {
1989
+ name: 'MuiPickersMonth'
1990
+ });
1991
+ var Month = function (_a) {
1992
+ var _b;
1993
+
1994
+ var selected = _a.selected,
1995
+ onSelect = _a.onSelect,
1996
+ disabled = _a.disabled,
1997
+ value = _a.value,
1998
+ children = _a.children,
1999
+ other = __rest(_a, ["selected", "onSelect", "disabled", "value", "children"]);
2000
+
2001
+ var classes = useStyles$b();
2002
+ var handleSelection = useCallback(function () {
2003
+ onSelect(value);
2004
+ }, [onSelect, value]);
2005
+ return createElement(Typography, __assign({
2006
+ role: "button",
2007
+ component: "div",
2008
+ className: clsx(classes.root, (_b = {}, _b[classes.monthSelected] = selected, _b[classes.monthDisabled] = disabled, _b)),
2009
+ tabIndex: disabled ? -1 : 0,
2010
+ onClick: handleSelection,
2011
+ onKeyPress: handleSelection,
2012
+ color: selected ? 'primary' : undefined,
2013
+ variant: selected ? 'h5' : 'subtitle1',
2014
+ children: children
2015
+ }, other));
2016
+ };
2017
+ Month.displayName = 'Month';
2018
+
2019
+ var useStyles$c = makeStyles({
2020
+ container: {
2021
+ width: 310,
2022
+ display: 'flex',
2023
+ flexWrap: 'wrap',
2024
+ alignContent: 'stretch'
2025
+ }
2026
+ }, {
2027
+ name: 'MuiPickersMonthSelection'
2028
+ });
2029
+ var MonthSelection = function (_a) {
2030
+ var disablePast = _a.disablePast,
2031
+ disableFuture = _a.disableFuture,
2032
+ minDate = _a.minDate,
2033
+ maxDate = _a.maxDate,
2034
+ date = _a.date,
2035
+ onMonthChange = _a.onMonthChange,
2036
+ onChange = _a.onChange;
2037
+ var utils = useUtils();
2038
+ var classes = useStyles$c();
2039
+ var currentMonth = utils.getMonth(date);
2040
+
2041
+ var shouldDisableMonth = function (month) {
2042
+ var now = utils.date();
2043
+ var utilMinDate = utils.date(minDate);
2044
+ var utilMaxDate = utils.date(maxDate);
2045
+ var firstEnabledMonth = utils.startOfMonth(disablePast && utils.isAfter(now, utilMinDate) ? now : utilMinDate);
2046
+ var lastEnabledMonth = utils.startOfMonth(disableFuture && utils.isBefore(now, utilMaxDate) ? now : utilMaxDate);
2047
+ var isBeforeFirstEnabled = utils.isBefore(month, firstEnabledMonth);
2048
+ var isAfterLastEnabled = utils.isAfter(month, lastEnabledMonth);
2049
+ return isBeforeFirstEnabled || isAfterLastEnabled;
2050
+ };
2051
+
2052
+ var onMonthSelect = useCallback(function (month) {
2053
+ var newDate = utils.setMonth(date, month);
2054
+ onChange(newDate, true);
2055
+
2056
+ if (onMonthChange) {
2057
+ onMonthChange(newDate);
2058
+ }
2059
+ }, [date, onChange, onMonthChange, utils]);
2060
+ return createElement("div", {
2061
+ className: classes.container
2062
+ }, utils.getMonthArray(date).map(function (month) {
2063
+ var monthNumber = utils.getMonth(month);
2064
+ var monthText = utils.format(month, 'MMM');
2065
+ return createElement(Month, {
2066
+ key: monthText,
2067
+ value: monthNumber,
2068
+ selected: monthNumber === currentMonth,
2069
+ onSelect: onMonthSelect,
2070
+ disabled: shouldDisableMonth(month)
2071
+ }, monthText);
2072
+ }));
2073
+ };
2074
+
2075
+ var getOrientation = function () {
2076
+ return typeof window !== 'undefined' && window.screen && window.screen.orientation && Math.abs(window.screen.orientation.angle) === 90 ? 'landscape' : 'portrait';
2077
+ };
2078
+
2079
+ function useIsLandscape(customOrientation) {
2080
+ var _a = useState(getOrientation()),
2081
+ orientation = _a[0],
2082
+ setOrientation = _a[1];
2083
+
2084
+ var eventHandler = useCallback(function () {
2085
+ return setOrientation(getOrientation());
2086
+ }, []);
2087
+ useIsomorphicEffect(function () {
2088
+ window.addEventListener('orientationchange', eventHandler);
2089
+ return function () {
2090
+ return window.removeEventListener('orientationchange', eventHandler);
2091
+ };
2092
+ }, [eventHandler]);
2093
+ var orientationToUse = customOrientation || orientation;
2094
+ return orientationToUse === 'landscape';
2095
+ }
2096
+
2097
+ var viewsMap = {
2098
+ year: YearSelection,
2099
+ month: MonthSelection,
2100
+ date: Calendar$1,
2101
+ hours: TimePickerView,
2102
+ minutes: TimePickerView,
2103
+ seconds: TimePickerView
2104
+ };
2105
+ var useStyles$d = makeStyles({
2106
+ container: {
2107
+ display: 'flex',
2108
+ flexDirection: 'column'
2109
+ },
2110
+ containerLandscape: {
2111
+ flexDirection: 'row'
2112
+ },
2113
+ pickerView: {
2114
+ overflowX: 'hidden',
2115
+ minHeight: VIEW_HEIGHT,
2116
+ minWidth: DIALOG_WIDTH,
2117
+ maxWidth: DIALOG_WIDTH_WIDER,
2118
+ display: 'flex',
2119
+ flexDirection: 'column',
2120
+ justifyContent: 'center'
2121
+ },
2122
+ pickerViewLandscape: {
2123
+ padding: '0 8px'
2124
+ }
2125
+ }, {
2126
+ name: 'MuiPickersBasePicker'
2127
+ });
2128
+ var useButtonsStyles = makeStyles({
2129
+ root: {
2130
+ minWidth: 32
2131
+ }
2132
+ }, {
2133
+ name: 'MuiButtonBase'
2134
+ });
2135
+ var useDialogActionsStyles = makeStyles({
2136
+ withAdditionalAction: {}
2137
+ });
2138
+ var Picker = function (props) {
2139
+ var _a, _b, _c;
2140
+
2141
+ var date = props.date,
2142
+ ampm = props.ampm,
2143
+ views = props.views,
2144
+ disableToolbar = props.disableToolbar,
2145
+ disablePast = props.disablePast,
2146
+ disableFuture = props.disableFuture,
2147
+ hideTabs = props.hideTabs,
2148
+ onChange = props.onChange,
2149
+ openTo = props.openTo,
2150
+ minutesStep = props.minutesStep,
2151
+ dateRangeIcon = props.dateRangeIcon,
2152
+ timeIcon = props.timeIcon,
2153
+ unparsedMinDate = props.minDate,
2154
+ unparsedMaxDate = props.maxDate,
2155
+ animateYearScrolling = props.animateYearScrolling,
2156
+ leftArrowIcon = props.leftArrowIcon,
2157
+ rightArrowIcon = props.rightArrowIcon,
2158
+ renderDay = props.renderDay,
2159
+ shouldDisableDate = props.shouldDisableDate,
2160
+ allowKeyboardControl = props.allowKeyboardControl,
2161
+ onMonthChange = props.onMonthChange,
2162
+ onYearChange = props.onYearChange,
2163
+ leftArrowButtonProps = props.leftArrowButtonProps,
2164
+ rightArrowButtonProps = props.rightArrowButtonProps,
2165
+ ToolbarComponent = props.ToolbarComponent,
2166
+ loadingIndicator = props.loadingIndicator,
2167
+ orientation = props.orientation,
2168
+ showActionsBar = props.showActionsBar,
2169
+ onSetToday = props.onSetToday,
2170
+ showTodayButton = props.showTodayButton,
2171
+ todayLabel = props.todayLabel,
2172
+ onSetShift = props.onSetShift,
2173
+ showShiftButtons = props.showShiftButtons,
2174
+ setShiftFunction = props.setShiftFunction,
2175
+ shiftButtonValues = props.shiftButtonValues;
2176
+ var utils = useUtils();
2177
+ var classes = useStyles$d();
2178
+ var buttonClasses = useButtonsStyles();
2179
+ var dialogActionsClasses = useDialogActionsStyles();
2180
+ var isLandscape = useIsLandscape(orientation);
2181
+
2182
+ var _d = useViews(views, openTo, onChange),
2183
+ openView = _d.openView,
2184
+ setOpenView = _d.setOpenView,
2185
+ handleChangeAndOpenNext = _d.handleChangeAndOpenNext;
2186
+
2187
+ var minDate = useMemo(function () {
2188
+ return utils.date(unparsedMinDate);
2189
+ }, [unparsedMinDate, utils]);
2190
+ var maxDate = useMemo(function () {
2191
+ return utils.date(unparsedMaxDate);
2192
+ }, [unparsedMaxDate, utils]);
2193
+ var shiftButtons = new Array();
2194
+
2195
+ if (showShiftButtons && setShiftFunction && onSetShift && shiftButtonValues) {
2196
+ var _loop_1 = function (key) {
2197
+ shiftButtons.push(createElement(Button$1, {
2198
+ color: "primary",
2199
+ onClick: function () {
2200
+ return onSetShift(setShiftFunction(parseInt(key)));
2201
+ },
2202
+ key: shiftButtonValues[key]
2203
+ }, parseInt(key) > 0 ? '+' : '', shiftButtonValues[key]));
2204
+ };
2205
+
2206
+ for (var key in shiftButtonValues) {
2207
+ _loop_1(key);
2208
+ }
2209
+ }
2210
+
2211
+ return createElement("div", {
2212
+ className: clsx(classes.container, (_a = {}, _a[classes.containerLandscape] = isLandscape, _a))
2213
+ }, !disableToolbar && createElement(ToolbarComponent, __assign({
2214
+ date: date,
2215
+ onChange: onChange,
2216
+ setOpenView: setOpenView,
2217
+ openView: openView,
2218
+ hideTabs: hideTabs,
2219
+ dateRangeIcon: dateRangeIcon,
2220
+ timeIcon: timeIcon,
2221
+ isLandscape: isLandscape
2222
+ }, props)), createElement("div", {
2223
+ className: clsx(classes.pickerView, (_b = {}, _b[classes.pickerViewLandscape] = isLandscape, _b))
2224
+ }, openView === 'year' && createElement(YearSelection, {
2225
+ date: date,
2226
+ onChange: handleChangeAndOpenNext,
2227
+ minDate: minDate,
2228
+ maxDate: maxDate,
2229
+ disablePast: disablePast,
2230
+ disableFuture: disableFuture,
2231
+ onYearChange: onYearChange,
2232
+ animateYearScrolling: animateYearScrolling
2233
+ }), openView === 'month' && createElement(MonthSelection, {
2234
+ date: date,
2235
+ onChange: handleChangeAndOpenNext,
2236
+ minDate: minDate,
2237
+ maxDate: maxDate,
2238
+ disablePast: disablePast,
2239
+ disableFuture: disableFuture,
2240
+ onMonthChange: onMonthChange
2241
+ }), openView === 'date' && createElement(Calendar$1, {
2242
+ date: date,
2243
+ onChange: handleChangeAndOpenNext,
2244
+ onMonthChange: onMonthChange,
2245
+ disablePast: disablePast,
2246
+ disableFuture: disableFuture,
2247
+ minDate: minDate,
2248
+ maxDate: maxDate,
2249
+ leftArrowIcon: leftArrowIcon,
2250
+ leftArrowButtonProps: leftArrowButtonProps,
2251
+ rightArrowIcon: rightArrowIcon,
2252
+ rightArrowButtonProps: rightArrowButtonProps,
2253
+ renderDay: renderDay,
2254
+ shouldDisableDate: shouldDisableDate,
2255
+ allowKeyboardControl: allowKeyboardControl,
2256
+ loadingIndicator: loadingIndicator
2257
+ }), (openView === 'hours' || openView === 'minutes' || openView === 'seconds') && createElement(TimePickerView, {
2258
+ date: date,
2259
+ ampm: ampm,
2260
+ type: openView,
2261
+ minutesStep: minutesStep,
2262
+ onHourChange: handleChangeAndOpenNext,
2263
+ onMinutesChange: handleChangeAndOpenNext,
2264
+ onSecondsChange: handleChangeAndOpenNext
2265
+ })), showActionsBar && createElement(DialogActions$1, {
2266
+ classes: {
2267
+ root: clsx((_c = {}, _c[dialogActionsClasses.withAdditionalAction] = showTodayButton, _c))
2268
+ }
2269
+ }, showTodayButton && createElement(Button$1, {
2270
+ color: "primary",
2271
+ onClick: onSetToday,
2272
+ key: "today"
2273
+ }, todayLabel), showShiftButtons && setShiftFunction && shiftButtons));
2274
+ };
2275
+ Picker.defaultProps = __assign(__assign({}, datePickerDefaultProps), {
2276
+ views: Object.keys(viewsMap)
2277
+ });
2278
+
2279
+ function useOpenState(_a) {
2280
+ var _b;
2281
+
2282
+ var open = _a.open,
2283
+ onOpen = _a.onOpen,
2284
+ onClose = _a.onClose;
2285
+ var setIsOpenState = null;
2286
+
2287
+ if (open === undefined || open === null) {
2288
+ // The component is uncontrolled, so we need to give it its own state.
2289
+ _b = useState(false), open = _b[0], setIsOpenState = _b[1];
2290
+ } // prettier-ignore
2291
+
2292
+
2293
+ var setIsOpen = useCallback(function (newIsOpen) {
2294
+ setIsOpenState && setIsOpenState(newIsOpen);
2295
+ return newIsOpen ? onOpen && onOpen() : onClose && onClose();
2296
+ }, [onOpen, onClose, setIsOpenState]);
2297
+ return {
2298
+ isOpen: open,
2299
+ setIsOpen: setIsOpen
2300
+ };
2301
+ }
2302
+
2303
+ var getDisplayDate = function (value, format, utils, isEmpty, _a) {
2304
+ var invalidLabel = _a.invalidLabel,
2305
+ emptyLabel = _a.emptyLabel,
2306
+ labelFunc = _a.labelFunc;
2307
+ var date = utils.date(value);
2308
+
2309
+ if (labelFunc) {
2310
+ return labelFunc(isEmpty ? null : date, invalidLabel);
2311
+ }
2312
+
2313
+ if (isEmpty) {
2314
+ return emptyLabel || '';
2315
+ }
2316
+
2317
+ return utils.isValid(date) ? utils.format(date, format) : invalidLabel;
2318
+ };
2319
+
2320
+ var getComparisonMaxDate = function (utils, strictCompareDates, date) {
2321
+ if (strictCompareDates) {
2322
+ return date;
2323
+ }
2324
+
2325
+ return utils.endOfDay(date);
2326
+ };
2327
+
2328
+ var getComparisonMinDate = function (utils, strictCompareDates, date) {
2329
+ if (strictCompareDates) {
2330
+ return date;
2331
+ }
2332
+
2333
+ return utils.startOfDay(date);
2334
+ };
2335
+
2336
+ var validate = function (value, utils, _a // DateTimePicker doesn't support
2337
+ ) {
2338
+ var maxDate = _a.maxDate,
2339
+ minDate = _a.minDate,
2340
+ disablePast = _a.disablePast,
2341
+ disableFuture = _a.disableFuture,
2342
+ maxDateMessage = _a.maxDateMessage,
2343
+ minDateMessage = _a.minDateMessage,
2344
+ invalidDateMessage = _a.invalidDateMessage,
2345
+ strictCompareDates = _a.strictCompareDates;
2346
+ var parsedValue = utils.date(value); // if null - do not show error
2347
+
2348
+ if (value === null) {
2349
+ return '';
2350
+ }
2351
+
2352
+ if (!utils.isValid(value)) {
2353
+ return invalidDateMessage;
2354
+ }
2355
+
2356
+ if (maxDate && utils.isAfter(parsedValue, getComparisonMaxDate(utils, !!strictCompareDates, utils.date(maxDate)))) {
2357
+ return maxDateMessage;
2358
+ }
2359
+
2360
+ if (disableFuture && utils.isAfter(parsedValue, getComparisonMaxDate(utils, !!strictCompareDates, utils.date()))) {
2361
+ return maxDateMessage;
2362
+ }
2363
+
2364
+ if (minDate && utils.isBefore(parsedValue, getComparisonMinDate(utils, !!strictCompareDates, utils.date(minDate)))) {
2365
+ return minDateMessage;
2366
+ }
2367
+
2368
+ if (disablePast && utils.isBefore(parsedValue, getComparisonMinDate(utils, !!strictCompareDates, utils.date()))) {
2369
+ return minDateMessage;
2370
+ }
2371
+
2372
+ return '';
2373
+ };
2374
+ function pick12hOr24hFormat(userFormat, ampm, formats) {
2375
+ if (ampm === void 0) {
2376
+ ampm = true;
2377
+ }
2378
+
2379
+ if (userFormat) {
2380
+ return userFormat;
2381
+ }
2382
+
2383
+ return ampm ? formats['12h'] : formats['24h'];
2384
+ }
2385
+ function makeMaskFromFormat(format, numberMaskChar) {
2386
+ return format.replace(/[a-z]/gi, numberMaskChar);
2387
+ }
2388
+ var maskedDateFormatter = function (mask, numberMaskChar) {
2389
+ return function (value, oldValue, currentCaretPosition) {
2390
+ var refuse = /[^\d\w_]+/gi;
2391
+
2392
+ if (!value || value === '') {
2393
+ return value;
2394
+ }
2395
+
2396
+ if (!oldValue) {
2397
+ oldValue = '';
2398
+ }
2399
+
2400
+ if (value == oldValue) {
2401
+ return value;
2402
+ }
2403
+
2404
+ if (value.length < oldValue.length && currentCaretPosition != null) {
2405
+ value = value.slice(0, currentCaretPosition) + '_' + value.slice(currentCaretPosition, oldValue.length);
2406
+ }
2407
+
2408
+ var refusedOldValue = oldValue.replace(refuse, '');
2409
+ var refusedNewValue = value.replace(refuse, '');
2410
+ var refusedMaskSymbols = mask.replace(refuse, '');
2411
+ var minLength = refusedOldValue.length > refusedNewValue.length ? refusedNewValue.length : refusedOldValue.length;
2412
+ var startPos = 0;
2413
+ var endPosShift = 0;
2414
+
2415
+ while (startPos < minLength) {
2416
+ if (refusedNewValue[startPos] == refusedOldValue[startPos]) {
2417
+ startPos++;
2418
+ } else {
2419
+ break;
2420
+ }
2421
+ }
2422
+
2423
+ while (endPosShift < minLength && startPos < refusedNewValue.length - endPosShift && startPos < refusedOldValue.length - endPosShift) {
2424
+ if (refusedNewValue[refusedNewValue.length - endPosShift - 1] == refusedOldValue[refusedOldValue.length - endPosShift - 1]) {
2425
+ endPosShift++;
2426
+ } else {
2427
+ break;
2428
+ }
2429
+ }
2430
+
2431
+ var endStartPos = refusedNewValue.length - endPosShift;
2432
+ endStartPos = endStartPos < startPos ? startPos : endStartPos;
2433
+ var firstPart = refusedNewValue.slice(0, startPos);
2434
+ var addedPart = refusedNewValue.slice(startPos, endStartPos);
2435
+ var endPart = refusedNewValue.slice(endStartPos, refusedNewValue.length);
2436
+ var maxSymbolsInEnd = refusedMaskSymbols.length - firstPart.length - addedPart.length;
2437
+
2438
+ while (maxSymbolsInEnd > endPart.length) {
2439
+ addedPart += numberMaskChar;
2440
+ maxSymbolsInEnd--;
2441
+ }
2442
+
2443
+ var entireRefusedString = firstPart + addedPart + endPart.slice(endPart.length - maxSymbolsInEnd, endPart.length); // Do nothing ?...
2444
+
2445
+ entireRefusedString = entireRefusedString.slice(0, refusedMaskSymbols.length);
2446
+ var i = 0;
2447
+ var n = 0;
2448
+ var result = '';
2449
+
2450
+ while (i < mask.length) {
2451
+ var maskChar = mask[i];
2452
+
2453
+ if (maskChar === numberMaskChar && n < entireRefusedString.length) {
2454
+ var parsedChar = entireRefusedString[n];
2455
+ result += parsedChar;
2456
+ n += 1;
2457
+ } else {
2458
+ result += maskChar;
2459
+ }
2460
+
2461
+ i += 1;
2462
+ }
2463
+
2464
+ return result;
2465
+ };
2466
+ };
2467
+
2468
+ var useValueToDate = function (utils, _a) {
2469
+ var value = _a.value,
2470
+ initialFocusedDate = _a.initialFocusedDate;
2471
+ var nowRef = useRef(utils.date());
2472
+ var date = utils.date(value || initialFocusedDate || nowRef.current);
2473
+ return date && utils.isValid(date) ? date : nowRef.current;
2474
+ };
2475
+
2476
+ function useDateValues(props, options) {
2477
+ var utils = useUtils();
2478
+ var date = useValueToDate(utils, props);
2479
+ var format = props.format || options.getDefaultFormat();
2480
+ return {
2481
+ date: date,
2482
+ format: format
2483
+ };
2484
+ }
2485
+
2486
+ function usePickerState(props, options) {
2487
+ var autoOk = props.autoOk,
2488
+ disabled = props.disabled,
2489
+ onAccept = props.onAccept,
2490
+ onChange = props.onChange,
2491
+ onError = props.onError,
2492
+ value = props.value,
2493
+ variant = props.variant;
2494
+ var utils = useUtils();
2495
+
2496
+ var _a = useOpenState(props),
2497
+ isOpen = _a.isOpen,
2498
+ setIsOpen = _a.setIsOpen;
2499
+
2500
+ var _b = useDateValues(props, options),
2501
+ date = _b.date,
2502
+ format = _b.format;
2503
+
2504
+ var _c = useState(date),
2505
+ pickerDate = _c[0],
2506
+ setPickerDate = _c[1];
2507
+
2508
+ useEffect(function () {
2509
+ // if value was changed in closed state - treat it as accepted
2510
+ if (!isOpen && !utils.isEqual(pickerDate, date)) {
2511
+ setPickerDate(date);
2512
+ }
2513
+ }, [date, isOpen, pickerDate, utils]);
2514
+ var acceptDate = useCallback(function (acceptedDate) {
2515
+ setIsOpen(false);
2516
+ onChange(acceptedDate);
2517
+
2518
+ if (onAccept) {
2519
+ onAccept(acceptedDate);
2520
+ }
2521
+ }, [onAccept, onChange, setIsOpen]);
2522
+ var wrapperProps = useMemo(function () {
2523
+ return {
2524
+ format: format,
2525
+ open: isOpen,
2526
+ onClear: function () {
2527
+ return acceptDate(null);
2528
+ },
2529
+ onAccept: function () {
2530
+ return acceptDate(pickerDate);
2531
+ },
2532
+ onSetToday: function () {
2533
+ return setPickerDate(utils.date());
2534
+ },
2535
+ onDismiss: function () {
2536
+ setIsOpen(false);
2537
+ }
2538
+ };
2539
+ }, [acceptDate, format, isOpen, pickerDate, setIsOpen, utils]);
2540
+ var pickerProps = useMemo(function () {
2541
+ return {
2542
+ date: pickerDate,
2543
+ onChange: function (newDate, isFinish) {
2544
+ if (isFinish === void 0) {
2545
+ isFinish = true;
2546
+ }
2547
+
2548
+ setPickerDate(newDate);
2549
+
2550
+ if (isFinish && autoOk) {
2551
+ acceptDate(newDate);
2552
+ } else if (variant === 'inline' || variant === 'static') {
2553
+ onChange(newDate);
2554
+ }
2555
+ },
2556
+ onSetToday: function () {
2557
+ var newDate = utils.date();
2558
+ setPickerDate(newDate);
2559
+
2560
+ if (autoOk) {
2561
+ acceptDate(newDate);
2562
+ } else if (variant === 'inline' || variant === 'static') {
2563
+ onChange(newDate);
2564
+ }
2565
+ },
2566
+ onSetShift: function (shiftDate) {
2567
+ var newDate = utils.date(shiftDate);
2568
+
2569
+ if (autoOk) {
2570
+ acceptDate(newDate);
2571
+ } else if (variant === 'inline' || variant === 'static') {
2572
+ onChange(newDate);
2573
+ }
2574
+ }
2575
+ };
2576
+ }, [acceptDate, autoOk, onChange, pickerDate, variant]);
2577
+ var validationError = validate(value, utils, props);
2578
+ useEffect(function () {
2579
+ if (validationError && onError) {
2580
+ onError(validationError, value);
2581
+ }
2582
+ }, [onError, validationError, value]);
2583
+ var inputValue = getDisplayDate(date, format, utils, value === null, props);
2584
+ var inputProps = useMemo(function () {
2585
+ return {
2586
+ inputValue: inputValue,
2587
+ validationError: validationError,
2588
+ onClick: function () {
2589
+ return !disabled && setIsOpen(true);
2590
+ }
2591
+ };
2592
+ }, [disabled, inputValue, setIsOpen, validationError]);
2593
+ var pickerState = {
2594
+ pickerProps: pickerProps,
2595
+ inputProps: inputProps,
2596
+ wrapperProps: wrapperProps
2597
+ };
2598
+ useDebugValue(pickerState);
2599
+ return pickerState;
2600
+ }
2601
+
2602
+ var PureDateInput = function (_a) {
2603
+ var inputValue = _a.inputValue,
2604
+ inputVariant = _a.inputVariant,
2605
+ validationError = _a.validationError,
2606
+ InputProps = _a.InputProps,
2607
+ _b = _a.TextFieldComponent,
2608
+ TextFieldComponent = _b === void 0 ? TextField : _b,
2609
+ other = __rest(_a, ["inputValue", "inputVariant", "validationError", "InputProps", "TextFieldComponent"]);
2610
+
2611
+ var PureDateInputProps = useMemo(function () {
2612
+ return __assign(__assign({}, InputProps), {
2613
+ readOnly: true
2614
+ });
2615
+ }, [InputProps]);
2616
+ return createElement(TextFieldComponent, __assign({
2617
+ error: Boolean(validationError),
2618
+ helperText: validationError
2619
+ }, other, {
2620
+ // do not overridable
2621
+ value: inputValue,
2622
+ variant: inputVariant,
2623
+ InputProps: PureDateInputProps
2624
+ }));
2625
+ };
2626
+ PureDateInput.displayName = 'PureDateInput';
2627
+
2628
+ function makePurePicker(_a) {
2629
+ var useOptions = _a.useOptions,
2630
+ getCustomProps = _a.getCustomProps,
2631
+ DefaultToolbarComponent = _a.DefaultToolbarComponent;
2632
+
2633
+ function WrappedPurePicker(props) {
2634
+ var allowKeyboardControl = props.allowKeyboardControl,
2635
+ ampm = props.ampm,
2636
+ hideTabs = props.hideTabs,
2637
+ animateYearScrolling = props.animateYearScrolling,
2638
+ autoOk = props.autoOk,
2639
+ disableFuture = props.disableFuture,
2640
+ disablePast = props.disablePast,
2641
+ format = props.format,
2642
+ forwardedRef = props.forwardedRef,
2643
+ initialFocusedDate = props.initialFocusedDate,
2644
+ invalidDateMessage = props.invalidDateMessage,
2645
+ labelFunc = props.labelFunc,
2646
+ leftArrowIcon = props.leftArrowIcon,
2647
+ leftArrowButtonProps = props.leftArrowButtonProps,
2648
+ maxDate = props.maxDate,
2649
+ maxDateMessage = props.maxDateMessage,
2650
+ minDate = props.minDate,
2651
+ onOpen = props.onOpen,
2652
+ onClose = props.onClose,
2653
+ minDateMessage = props.minDateMessage,
2654
+ strictCompareDates = props.strictCompareDates,
2655
+ minutesStep = props.minutesStep,
2656
+ onAccept = props.onAccept,
2657
+ onChange = props.onChange,
2658
+ onMonthChange = props.onMonthChange,
2659
+ onYearChange = props.onYearChange,
2660
+ renderDay = props.renderDay,
2661
+ views = props.views,
2662
+ openTo = props.openTo,
2663
+ rightArrowIcon = props.rightArrowIcon,
2664
+ rightArrowButtonProps = props.rightArrowButtonProps,
2665
+ shouldDisableDate = props.shouldDisableDate,
2666
+ dateRangeIcon = props.dateRangeIcon,
2667
+ emptyLabel = props.emptyLabel,
2668
+ invalidLabel = props.invalidLabel,
2669
+ timeIcon = props.timeIcon,
2670
+ value = props.value,
2671
+ variant = props.variant,
2672
+ orientation = props.orientation,
2673
+ disableToolbar = props.disableToolbar,
2674
+ loadingIndicator = props.loadingIndicator,
2675
+ _a = props.ToolbarComponent,
2676
+ ToolbarComponent = _a === void 0 ? DefaultToolbarComponent : _a,
2677
+ showActionsBar = props.showActionsBar,
2678
+ showTodayButton = props.showTodayButton,
2679
+ todayLabel = props.todayLabel,
2680
+ showShiftButtons = props.showShiftButtons,
2681
+ setShiftFunction = props.setShiftFunction,
2682
+ shiftButtonValues = props.shiftButtonValues,
2683
+ other = __rest(props, ["allowKeyboardControl", "ampm", "hideTabs", "animateYearScrolling", "autoOk", "disableFuture", "disablePast", "format", "forwardedRef", "initialFocusedDate", "invalidDateMessage", "labelFunc", "leftArrowIcon", "leftArrowButtonProps", "maxDate", "maxDateMessage", "minDate", "onOpen", "onClose", "minDateMessage", "strictCompareDates", "minutesStep", "onAccept", "onChange", "onMonthChange", "onYearChange", "renderDay", "views", "openTo", "rightArrowIcon", "rightArrowButtonProps", "shouldDisableDate", "dateRangeIcon", "emptyLabel", "invalidLabel", "timeIcon", "value", "variant", "orientation", "disableToolbar", "loadingIndicator", "ToolbarComponent", "showActionsBar", "showTodayButton", "todayLabel", "showShiftButtons", "setShiftFunction", "shiftButtonValues"]);
2684
+
2685
+ var injectedProps = getCustomProps ? getCustomProps(props) : {};
2686
+ var options = useOptions(props);
2687
+
2688
+ var _b = usePickerState(props, options),
2689
+ pickerProps = _b.pickerProps,
2690
+ inputProps = _b.inputProps,
2691
+ wrapperProps = _b.wrapperProps;
2692
+
2693
+ return createElement(Wrapper, __assign({
2694
+ variant: variant,
2695
+ InputComponent: PureDateInput,
2696
+ DateInputProps: inputProps,
2697
+ showTodayButton: showTodayButton,
2698
+ todayLabel: todayLabel
2699
+ }, wrapperProps, injectedProps, other), createElement(Picker, __assign({}, pickerProps, {
2700
+ orientation: orientation,
2701
+ disableToolbar: disableToolbar,
2702
+ ToolbarComponent: ToolbarComponent,
2703
+ hideTabs: hideTabs,
2704
+ ampm: ampm,
2705
+ views: views,
2706
+ openTo: openTo,
2707
+ allowKeyboardControl: allowKeyboardControl,
2708
+ minutesStep: minutesStep,
2709
+ animateYearScrolling: animateYearScrolling,
2710
+ disableFuture: disableFuture,
2711
+ disablePast: disablePast,
2712
+ leftArrowIcon: leftArrowIcon,
2713
+ leftArrowButtonProps: leftArrowButtonProps,
2714
+ maxDate: maxDate,
2715
+ minDate: minDate,
2716
+ strictCompareDates: strictCompareDates,
2717
+ onMonthChange: onMonthChange,
2718
+ onYearChange: onYearChange,
2719
+ renderDay: renderDay,
2720
+ dateRangeIcon: dateRangeIcon,
2721
+ timeIcon: timeIcon,
2722
+ rightArrowIcon: rightArrowIcon,
2723
+ rightArrowButtonProps: rightArrowButtonProps,
2724
+ shouldDisableDate: shouldDisableDate,
2725
+ loadingIndicator: loadingIndicator,
2726
+ showActionsBar: showActionsBar,
2727
+ showTodayButton: showTodayButton,
2728
+ todayLabel: todayLabel,
2729
+ showShiftButtons: showShiftButtons,
2730
+ setShiftFunction: setShiftFunction,
2731
+ shiftButtonValues: shiftButtonValues
2732
+ })));
2733
+ }
2734
+
2735
+ return WrappedPurePicker;
2736
+ }
2737
+
2738
+ var KeyboardIcon = function (props) {
2739
+ return React__default.createElement(SvgIcon, __assign({}, props), React__default.createElement("path", {
2740
+ d: "M17 12h-5v5h5v-5zM16 1v2H8V1H6v2H5c-1.11 0-1.99.9-1.99 2L3 19c0 1.1.89 2 2 2h14c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2h-1V1h-2zm3 18H5V8h14v11z"
2741
+ }), React__default.createElement("path", {
2742
+ fill: "none",
2743
+ d: "M0 0h24v24H0z"
2744
+ }));
2745
+ };
2746
+
2747
+ var Rifm = function (props) {
2748
+ var _a = useReducer(function (c) {
2749
+ return c + 1;
2750
+ }, 0),
2751
+ refresh = _a[1];
2752
+
2753
+ var valueRef = useRef(null);
2754
+ var replace = props.replace,
2755
+ maskChar = props.maskChar;
2756
+
2757
+ var _b = useState({
2758
+ value: ''
2759
+ }),
2760
+ previousValue = _b[0],
2761
+ setPreviousValue = _b[1];
2762
+
2763
+ var userValue = replace ? replace(props.format(props.value, previousValue.value)) : props.format(props.value, previousValue.value);
2764
+ var currentPreviousValue = previousValue.value; // state of delete button see comments below about inputType support
2765
+
2766
+ var isDeleleteButtonDownRef = useRef(false);
2767
+
2768
+ var onChange = function (evt) {
2769
+ var eventValue = evt.target.value;
2770
+ var selectionStart = evt.target.selectionStart;
2771
+ valueRef.current = [eventValue, evt.target, eventValue.length > userValue.length, isDeleleteButtonDownRef.current, selectionStart, userValue === props.format(eventValue, currentPreviousValue, selectionStart), props.value]; // The main trick is to update underlying input with non formatted value (= eventValue)
2772
+ // that allows us to calculate right cursor position after formatting (see getCursorPosition)
2773
+ // then we format new value and call props.onChange with masked/formatted value
2774
+ // and finally we are able to set cursor position into right place
2775
+
2776
+ refresh(null);
2777
+ }; // React prints warn on server in non production mode about useLayoutEffect usage
2778
+ // in both cases it's noop
2779
+
2780
+
2781
+ if (typeof window !== 'undefined') {
2782
+ useLayoutEffect(function () {
2783
+ if (valueRef.current == null) return;
2784
+ var _a = valueRef.current,
2785
+ eventValue = _a[0],
2786
+ input = _a[1],
2787
+ isSizeIncreaseOperation = _a[2],
2788
+ isDeleleteButtonDown = _a[3],
2789
+ selectionStart = _a[4],
2790
+ // No operation means that value itself hasn't been changed, BTW cursor, selection etc can be changed
2791
+ isNoOperation = _a[5],
2792
+ valueAtChange = _a[6];
2793
+ valueRef.current = null; // A calendar selection can replace the controlled value in the same React batch as an
2794
+ // input event from the mask. In that case the event describes an obsolete value and must
2795
+ // not overwrite the date selected in the calendar.
2796
+
2797
+ if (props.value !== valueAtChange) {
2798
+ refresh(null);
2799
+ return;
2800
+ } // this usually occurs on deleting special symbols like ' here 123'123.00
2801
+ // in case of isDeleleteButtonDown cursor should move differently vs backspace
2802
+
2803
+
2804
+ var deleteWasNoOp = isDeleleteButtonDown && isNoOperation; // Create string from only accepted symbols
2805
+
2806
+ var clean = function (str) {
2807
+ return (str.match(props.accept || /\d|\w/g) || []).join('');
2808
+ };
2809
+
2810
+ var valueBeforeSelectionStart = clean(eventValue.substr(0, input.selectionStart)); // trying to find cursor position in formatted value having knowledge about valueBeforeSelectionStart
2811
+ // This works because we assume that format doesn't change the order of accepted symbols.
2812
+ // Imagine we have formatter which adds ' symbol between numbers, and by default we refuse all non numeric symbols
2813
+ // for example we had input = 1'2|'4 (| means cursor position) then user entered '3' symbol
2814
+ // inputValue = 1'23'|4 so valueBeforeSelectionStart = 123 and formatted value = 1'2'3'4
2815
+ // calling getCursorPosition("1'2'3'4") will give us position after 3, 1'2'3|'4
2816
+ // so for formatting just this function to determine cursor position after formatting is enough
2817
+ // with masking we need to do some additional checks see `mask` below
2818
+
2819
+ var getCursorPosition = function (val) {
2820
+ var start = 0;
2821
+ var cleanPos = 0;
2822
+
2823
+ for (var i = 0; i !== valueBeforeSelectionStart.length; ++i) {
2824
+ var newPos = val.indexOf(valueBeforeSelectionStart[i], start) + 1;
2825
+ var newCleanPos = clean(val).indexOf(valueBeforeSelectionStart[i], cleanPos) + 1; // this skips position change if accepted symbols order was broken
2826
+ // For example fixes edge case with fixed point numbers:
2827
+ // You have '0|.00', then press 1, it becomes 01|.00 and after format 1.00, this breaks our assumption
2828
+ // that order of accepted symbols is not changed after format,
2829
+ // so here we don't update start position if other accepted symbols was inbetween current and new position
2830
+
2831
+ if (newCleanPos - cleanPos > 1) {
2832
+ newPos = start;
2833
+ newCleanPos = cleanPos;
2834
+ }
2835
+
2836
+ cleanPos = Math.max(newCleanPos, cleanPos);
2837
+ start = Math.max(start, newPos);
2838
+ }
2839
+
2840
+ return start;
2841
+ }; //let start = getCursorPosition(eventValue);
2842
+ // // Masking part, for masks if size of mask is above some value
2843
+ // // we need to replace symbols instead of do nothing as like in format
2844
+ // if (props.mask === true && isSizeIncreaseOperation && !isNoOperation) {
2845
+ // const c = clean(eventValue.substr(start))[0];
2846
+ // start = eventValue.indexOf(c, start);
2847
+ // eventValue = `${eventValue.substr(0, start)}${eventValue.substr(
2848
+ // start + 1
2849
+ // )}`;
2850
+ // }
2851
+
2852
+
2853
+ var formattedValue = props.format(eventValue, currentPreviousValue, selectionStart);
2854
+ var replacedValue = replace ? replace(formattedValue) : formattedValue;
2855
+ var start = getCursorPosition(formattedValue);
2856
+ var inputCharPosition = start - 1;
2857
+
2858
+ if (inputCharPosition > -1) {
2859
+ if (props.letterPosition && props.letterPosition > -1 && replacedValue[inputCharPosition].match(/[a-zA-Z]/) && (inputCharPosition < props.letterPosition || inputCharPosition > props.letterPosition + 1)) {
2860
+ replacedValue = currentPreviousValue;
2861
+ } else if (props.letterPosition && props.letterPosition > -1 && replacedValue[inputCharPosition].match(/\d/) && inputCharPosition >= props.letterPosition && inputCharPosition <= props.letterPosition + 1) {
2862
+ replacedValue = currentPreviousValue;
2863
+ }
2864
+ }
2865
+
2866
+ if (userValue === replacedValue) {
2867
+ // if nothing changed for formatted value, just refresh so userValue will be used at render
2868
+ refresh(null);
2869
+ } else {
2870
+ props.onChange(replacedValue);
2871
+ }
2872
+
2873
+ return function () {
2874
+ // Visually improves working with masked values,
2875
+ // like cursor jumping over refused symbols
2876
+ // as an example date mask: was "5|1-24-3" then user pressed "6"
2877
+ // it becomes "56-|12-43" with this code, and "56|-12-43" without
2878
+ if (props.mask != null && (isSizeIncreaseOperation || isDeleleteButtonDown && !deleteWasNoOp)) {
2879
+ while (formattedValue[start] && clean(formattedValue[start]) === '' && formattedValue[start] != maskChar) {
2880
+ start += 1;
2881
+ }
2882
+ } //input.selectionStart = input.selectionEnd = start + (deleteWasNoOp ? 1 : 0);
2883
+
2884
+ };
2885
+ });
2886
+ }
2887
+
2888
+ useEffect(function () {
2889
+ // until https://developer.mozilla.org/en-US/docs/Web/API/InputEvent/inputType will be supported
2890
+ // by all major browsers (now supported by: +chrome, +safari, ?edge, !firefox)
2891
+ // there is no way I found to distinguish in onChange
2892
+ // backspace or delete was called in some situations
2893
+ // firefox track https://bugzilla.mozilla.org/show_bug.cgi?id=1447239
2894
+ var handleKeyDown = function (evt) {
2895
+ if (evt.code === 'Delete') {
2896
+ isDeleleteButtonDownRef.current = true;
2897
+ }
2898
+ };
2899
+
2900
+ var handleKeyUp = function (evt) {
2901
+ if (evt.code === 'Delete') {
2902
+ isDeleleteButtonDownRef.current = false;
2903
+ }
2904
+ };
2905
+
2906
+ document.addEventListener('keydown', handleKeyDown);
2907
+ document.addEventListener('keyup', handleKeyUp);
2908
+ return function () {
2909
+ document.removeEventListener('keydown', handleKeyDown);
2910
+ document.removeEventListener('keyup', handleKeyUp);
2911
+ };
2912
+ }, []);
2913
+ var value = valueRef.current != null ? valueRef.current[0] : userValue; // value = props.format(value, currentPreviousValue);
2914
+
2915
+ previousValue.value = value;
2916
+ return props.children({
2917
+ value: value,
2918
+ onChange: onChange
2919
+ });
2920
+ };
2921
+
2922
+ var KeyboardDateInput = function (_a) {
2923
+ var inputValue = _a.inputValue,
2924
+ _b = _a.showErrorOnBlur,
2925
+ showErrorOnBlur = _b === void 0 ? false : _b,
2926
+ inputVariant = _a.inputVariant,
2927
+ validationError = _a.validationError,
2928
+ KeyboardButtonProps = _a.KeyboardButtonProps,
2929
+ InputAdornmentProps = _a.InputAdornmentProps,
2930
+ onClick = _a.onClick,
2931
+ onChange = _a.onChange,
2932
+ onBlur = _a.onBlur,
2933
+ onFocus = _a.onFocus,
2934
+ InputProps = _a.InputProps,
2935
+ mask = _a.mask,
2936
+ _c = _a.maskChar,
2937
+ maskChar = _c === void 0 ? '_' : _c,
2938
+ _d = _a.refuse,
2939
+ format = _a.format,
2940
+ keyboardIcon = _a.keyboardIcon,
2941
+ disabled = _a.disabled,
2942
+ rifmFormatter = _a.rifmFormatter,
2943
+ _e = _a.TextFieldComponent,
2944
+ TextFieldComponent = _e === void 0 ? TextField : _e,
2945
+ other = __rest(_a, ["inputValue", "showErrorOnBlur", "inputVariant", "validationError", "KeyboardButtonProps", "InputAdornmentProps", "onClick", "onChange", "onBlur", "onFocus", "InputProps", "mask", "maskChar", "refuse", "format", "keyboardIcon", "disabled", "rifmFormatter", "TextFieldComponent"]);
2946
+
2947
+ var inputMask = mask || makeMaskFromFormat(format, maskChar);
2948
+ var letterPosition = format.indexOf('a'); // prettier-ignore
2949
+
2950
+ var formatter = useCallback(maskedDateFormatter(inputMask, maskChar), [mask, maskChar]);
2951
+ var position = InputAdornmentProps && InputAdornmentProps.position ? InputAdornmentProps.position : 'end';
2952
+
2953
+ var handleChange = function (text) {
2954
+ var finalString = text === '' || text === inputMask ? null : text;
2955
+ onChange(finalString);
2956
+ };
2957
+
2958
+ var replace = function (text) {
2959
+ return text;
2960
+ };
2961
+
2962
+ var _f = useState(showErrorOnBlur ? true : false),
2963
+ showErrorFlag = _f[0],
2964
+ handleBlur = _f[1];
2965
+
2966
+ return createElement(Rifm, {
2967
+ value: inputValue,
2968
+ onChange: handleChange,
2969
+ format: rifmFormatter || formatter,
2970
+ replace: replace,
2971
+ mask: true,
2972
+ maskChar: maskChar,
2973
+ letterPosition: letterPosition
2974
+ }, function (_a) {
2975
+ var _b;
2976
+
2977
+ var onChange = _a.onChange,
2978
+ value = _a.value;
2979
+ return createElement(TextFieldComponent, __assign({
2980
+ disabled: disabled,
2981
+ error: Boolean(validationError) && !showErrorFlag,
2982
+ helperText: !showErrorFlag && validationError
2983
+ }, other, {
2984
+ value: value,
2985
+ onChange: onChange,
2986
+ // onInput={changeInputStringValue}
2987
+ // onKeyUp={handleKeyUp}
2988
+ // onMouseUp={handleClick}
2989
+ onBlur: function () {
2990
+ if (onBlur) {
2991
+ onBlur();
2992
+ }
2993
+
2994
+ if (showErrorOnBlur) {
2995
+ handleBlur(false);
2996
+ }
2997
+ },
2998
+ onFocus: function (ev) {
2999
+ if (onFocus) {
3000
+ onFocus(ev);
3001
+ }
3002
+
3003
+ if (showErrorOnBlur) {
3004
+ handleBlur(true);
3005
+ }
3006
+ },
3007
+ variant: inputVariant,
3008
+ InputProps: __assign(__assign({}, InputProps), (_b = {}, _b[position + "Adornment"] = createElement(InputAdornment, __assign({
3009
+ position: position
3010
+ }, InputAdornmentProps), createElement(IconButton$1, __assign({
3011
+ disabled: disabled
3012
+ }, KeyboardButtonProps, {
3013
+ onClick: onClick
3014
+ }), keyboardIcon)), _b))
3015
+ }));
3016
+ });
3017
+ };
3018
+
3019
+ KeyboardDateInput.defaultProps = {
3020
+ keyboardIcon: createElement(KeyboardIcon, null)
3021
+ };
3022
+
3023
+ function parseInputString(value, utils, format) {
3024
+ try {
3025
+ return utils.parse(value, format);
3026
+ } catch (_a) {
3027
+ return null;
3028
+ }
3029
+ }
3030
+
3031
+ function useKeyboardPickerState(props, options) {
3032
+ var _a = props.format,
3033
+ format = _a === void 0 ? options.getDefaultFormat() : _a,
3034
+ inputValue = props.inputValue,
3035
+ onChange = props.onChange,
3036
+ value = props.value;
3037
+ var utils = useUtils();
3038
+ var displayDate = getDisplayDate(value, format, utils, value === null, props);
3039
+
3040
+ var _b = useState(displayDate),
3041
+ innerInputValue = _b[0],
3042
+ setInnerInputValue = _b[1];
3043
+
3044
+ var dateValue = inputValue ? parseInputString(inputValue, utils, format) : value;
3045
+ useEffect(function () {
3046
+ if (value === null || utils.isValid(value)) {
3047
+ setInnerInputValue(displayDate);
3048
+ }
3049
+ }, [displayDate, setInnerInputValue, utils, value]);
3050
+ var handleKeyboardChange = useCallback(function (date) {
3051
+ var formattedValue = date === null ? null : utils.format(date, format);
3052
+ setInnerInputValue(formattedValue || '');
3053
+ onChange(date, formattedValue);
3054
+ }, [format, onChange, utils]);
3055
+
3056
+ var _c = usePickerState(__assign(__assign({}, props), {
3057
+ value: dateValue,
3058
+ onChange: handleKeyboardChange
3059
+ }), options),
3060
+ innerInputProps = _c.inputProps,
3061
+ wrapperProps = _c.wrapperProps,
3062
+ pickerProps = _c.pickerProps;
3063
+
3064
+ var inputProps = useMemo(function () {
3065
+ return __assign(__assign({}, innerInputProps), {
3066
+ format: wrapperProps.format,
3067
+ inputValue: inputValue || innerInputValue,
3068
+ onChange: function (value) {
3069
+ setInnerInputValue(value || '');
3070
+ var date = value === null ? null : utils.parse(value, wrapperProps.format);
3071
+ onChange(date, value);
3072
+ }
3073
+ });
3074
+ }, [innerInputProps, innerInputValue, inputValue, onChange, utils, wrapperProps.format]);
3075
+ return {
3076
+ inputProps: inputProps,
3077
+ wrapperProps: wrapperProps,
3078
+ pickerProps: pickerProps
3079
+ };
3080
+ }
3081
+
3082
+ // TODO investigate how to reduce duplications
3083
+
3084
+ function makeKeyboardPicker(_a) {
3085
+ var useOptions = _a.useOptions,
3086
+ getCustomProps = _a.getCustomProps,
3087
+ DefaultToolbarComponent = _a.DefaultToolbarComponent;
3088
+
3089
+ function WrappedKeyboardPicker(props) {
3090
+ var allowKeyboardControl = props.allowKeyboardControl,
3091
+ ampm = props.ampm,
3092
+ hideTabs = props.hideTabs,
3093
+ animateYearScrolling = props.animateYearScrolling,
3094
+ autoOk = props.autoOk,
3095
+ disableFuture = props.disableFuture,
3096
+ disablePast = props.disablePast,
3097
+ format = props.format,
3098
+ forwardedRef = props.forwardedRef,
3099
+ initialFocusedDate = props.initialFocusedDate,
3100
+ invalidDateMessage = props.invalidDateMessage,
3101
+ labelFunc = props.labelFunc,
3102
+ leftArrowIcon = props.leftArrowIcon,
3103
+ leftArrowButtonProps = props.leftArrowButtonProps,
3104
+ maxDate = props.maxDate,
3105
+ maxDateMessage = props.maxDateMessage,
3106
+ minDate = props.minDate,
3107
+ onOpen = props.onOpen,
3108
+ onClose = props.onClose,
3109
+ minDateMessage = props.minDateMessage,
3110
+ strictCompareDates = props.strictCompareDates,
3111
+ minutesStep = props.minutesStep,
3112
+ onAccept = props.onAccept,
3113
+ onChange = props.onChange,
3114
+ onMonthChange = props.onMonthChange,
3115
+ onYearChange = props.onYearChange,
3116
+ renderDay = props.renderDay,
3117
+ views = props.views,
3118
+ openTo = props.openTo,
3119
+ rightArrowIcon = props.rightArrowIcon,
3120
+ rightArrowButtonProps = props.rightArrowButtonProps,
3121
+ shouldDisableDate = props.shouldDisableDate,
3122
+ value = props.value,
3123
+ dateRangeIcon = props.dateRangeIcon,
3124
+ emptyLabel = props.emptyLabel,
3125
+ invalidLabel = props.invalidLabel,
3126
+ timeIcon = props.timeIcon,
3127
+ orientation = props.orientation,
3128
+ variant = props.variant,
3129
+ disableToolbar = props.disableToolbar,
3130
+ loadingIndicator = props.loadingIndicator,
3131
+ showActionsBar = props.showActionsBar,
3132
+ showTodayButton = props.showTodayButton,
3133
+ todayLabel = props.todayLabel,
3134
+ _a = props.ToolbarComponent,
3135
+ ToolbarComponent = _a === void 0 ? DefaultToolbarComponent : _a,
3136
+ showShiftButtons = props.showShiftButtons,
3137
+ setShiftFunction = props.setShiftFunction,
3138
+ shiftButtonValues = props.shiftButtonValues,
3139
+ other = __rest(props, ["allowKeyboardControl", "ampm", "hideTabs", "animateYearScrolling", "autoOk", "disableFuture", "disablePast", "format", "forwardedRef", "initialFocusedDate", "invalidDateMessage", "labelFunc", "leftArrowIcon", "leftArrowButtonProps", "maxDate", "maxDateMessage", "minDate", "onOpen", "onClose", "minDateMessage", "strictCompareDates", "minutesStep", "onAccept", "onChange", "onMonthChange", "onYearChange", "renderDay", "views", "openTo", "rightArrowIcon", "rightArrowButtonProps", "shouldDisableDate", "value", "dateRangeIcon", "emptyLabel", "invalidLabel", "timeIcon", "orientation", "variant", "disableToolbar", "loadingIndicator", "showActionsBar", "showTodayButton", "todayLabel", "ToolbarComponent", "showShiftButtons", "setShiftFunction", "shiftButtonValues"]);
3140
+
3141
+ var injectedProps = getCustomProps ? getCustomProps(props) : {};
3142
+ var options = useOptions(props);
3143
+
3144
+ var _b = useKeyboardPickerState(props, options),
3145
+ pickerProps = _b.pickerProps,
3146
+ inputProps = _b.inputProps,
3147
+ wrapperProps = _b.wrapperProps;
3148
+
3149
+ return createElement(Wrapper, __assign({
3150
+ variant: variant,
3151
+ InputComponent: KeyboardDateInput,
3152
+ DateInputProps: inputProps
3153
+ }, injectedProps, wrapperProps, other), createElement(Picker, __assign({}, pickerProps, {
3154
+ ToolbarComponent: ToolbarComponent,
3155
+ disableToolbar: disableToolbar,
3156
+ hideTabs: hideTabs,
3157
+ orientation: orientation,
3158
+ showActionsBar: showActionsBar,
3159
+ showTodayButton: showTodayButton,
3160
+ todayLabel: todayLabel,
3161
+ ampm: ampm,
3162
+ views: views,
3163
+ openTo: openTo,
3164
+ allowKeyboardControl: allowKeyboardControl,
3165
+ minutesStep: minutesStep,
3166
+ animateYearScrolling: animateYearScrolling,
3167
+ disableFuture: disableFuture,
3168
+ disablePast: disablePast,
3169
+ leftArrowIcon: leftArrowIcon,
3170
+ leftArrowButtonProps: leftArrowButtonProps,
3171
+ maxDate: maxDate,
3172
+ minDate: minDate,
3173
+ strictCompareDates: strictCompareDates,
3174
+ onMonthChange: onMonthChange,
3175
+ onYearChange: onYearChange,
3176
+ renderDay: renderDay,
3177
+ dateRangeIcon: dateRangeIcon,
3178
+ timeIcon: timeIcon,
3179
+ rightArrowIcon: rightArrowIcon,
3180
+ rightArrowButtonProps: rightArrowButtonProps,
3181
+ shouldDisableDate: shouldDisableDate,
3182
+ loadingIndicator: loadingIndicator,
3183
+ showShiftButtons: showShiftButtons,
3184
+ setShiftFunction: setShiftFunction,
3185
+ shiftButtonValues: shiftButtonValues
3186
+ })));
3187
+ }
3188
+
3189
+ return WrappedKeyboardPicker;
3190
+ }
3191
+
3192
+ var defaultProps = __assign(__assign({}, datePickerDefaultProps), {
3193
+ openTo: 'date',
3194
+ views: ['year', 'date'],
3195
+ showActionsBar: false,
3196
+ todayLabel: 'TODAY'
3197
+ });
3198
+
3199
+ function useOptions(props) {
3200
+ var utils = useUtils();
3201
+ return {
3202
+ getDefaultFormat: function () {
3203
+ return getFormatByViews(props.views, utils);
3204
+ }
3205
+ };
3206
+ }
3207
+
3208
+ var DatePicker = makePurePicker({
3209
+ useOptions: useOptions,
3210
+ DefaultToolbarComponent: DatePickerToolbar
3211
+ });
3212
+ var KeyboardDatePicker = makeKeyboardPicker({
3213
+ useOptions: useOptions,
3214
+ DefaultToolbarComponent: DatePickerToolbar
3215
+ });
3216
+ DatePicker.defaultProps = defaultProps;
3217
+ KeyboardDatePicker.defaultProps = defaultProps;
3218
+
3219
+ var useStyles$e = makeStyles({
3220
+ toolbarLandscape: {
3221
+ flexWrap: 'wrap'
3222
+ },
3223
+ toolbarAmpmLeftPadding: {
3224
+ paddingLeft: 50
3225
+ },
3226
+ separator: {
3227
+ margin: '0 4px 0 2px',
3228
+ cursor: 'default'
3229
+ },
3230
+ hourMinuteLabel: {
3231
+ display: 'flex',
3232
+ justifyContent: 'flex-end',
3233
+ alignItems: 'flex-end'
3234
+ },
3235
+ hourMinuteLabelLandscape: {
3236
+ marginTop: 'auto'
3237
+ },
3238
+ hourMinuteLabelReverse: {
3239
+ flexDirection: 'row-reverse'
3240
+ },
3241
+ ampmSelection: {
3242
+ marginLeft: 20,
3243
+ marginRight: -20,
3244
+ display: 'flex',
3245
+ flexDirection: 'column'
3246
+ },
3247
+ ampmLandscape: {
3248
+ margin: '4px 0 auto',
3249
+ flexDirection: 'row',
3250
+ justifyContent: 'space-around',
3251
+ flexBasis: '100%'
3252
+ },
3253
+ ampmSelectionWithSeconds: {
3254
+ marginLeft: 15,
3255
+ marginRight: 10
3256
+ },
3257
+ ampmLabel: {
3258
+ fontSize: 18
3259
+ }
3260
+ }, {
3261
+ name: 'MuiPickersTimePickerToolbar'
3262
+ });
3263
+ function useMeridiemMode(date, ampm, onChange) {
3264
+ var utils = useUtils();
3265
+ var meridiemMode = getMeridiem(date, utils);
3266
+ var handleMeridiemChange = useCallback(function (mode) {
3267
+ var timeWithMeridiem = convertToMeridiem(date, mode, Boolean(ampm), utils);
3268
+ onChange(timeWithMeridiem, false);
3269
+ }, [ampm, date, onChange, utils]);
3270
+ return {
3271
+ meridiemMode: meridiemMode,
3272
+ handleMeridiemChange: handleMeridiemChange
3273
+ };
3274
+ }
3275
+
3276
+ var TimePickerToolbar = function (_a) {
3277
+ var _b, _c, _d;
3278
+
3279
+ var date = _a.date,
3280
+ views = _a.views,
3281
+ ampm = _a.ampm,
3282
+ openView = _a.openView,
3283
+ onChange = _a.onChange,
3284
+ isLandscape = _a.isLandscape,
3285
+ setOpenView = _a.setOpenView;
3286
+ var utils = useUtils();
3287
+ var theme = useTheme();
3288
+ var classes = useStyles$e();
3289
+
3290
+ var _e = useMeridiemMode(date, ampm, onChange),
3291
+ meridiemMode = _e.meridiemMode,
3292
+ handleMeridiemChange = _e.handleMeridiemChange;
3293
+
3294
+ var clockTypographyVariant = isLandscape ? 'h3' : 'h2';
3295
+ return createElement(PickerToolbar, {
3296
+ isLandscape: isLandscape,
3297
+ className: clsx((_b = {}, _b[classes.toolbarLandscape] = isLandscape, _b[classes.toolbarAmpmLeftPadding] = ampm && !isLandscape, _b))
3298
+ }, createElement("div", {
3299
+ className: clsx(classes.hourMinuteLabel, (_c = {}, _c[classes.hourMinuteLabelLandscape] = isLandscape, _c[classes.hourMinuteLabelReverse] = theme.direction === 'rtl', _c))
3300
+ }, arrayIncludes(views, 'hours') && createElement(ToolbarButton$1, {
3301
+ variant: clockTypographyVariant,
3302
+ onClick: function () {
3303
+ return setOpenView(ClockType$1.HOURS);
3304
+ },
3305
+ selected: openView === ClockType$1.HOURS,
3306
+ label: utils.getHourText(date, Boolean(ampm))
3307
+ }), arrayIncludes(views, ['hours', 'minutes']) && createElement(ToolbarText, {
3308
+ label: ":",
3309
+ variant: clockTypographyVariant,
3310
+ selected: false,
3311
+ className: classes.separator
3312
+ }), arrayIncludes(views, 'minutes') && createElement(ToolbarButton$1, {
3313
+ variant: clockTypographyVariant,
3314
+ onClick: function () {
3315
+ return setOpenView(ClockType$1.MINUTES);
3316
+ },
3317
+ selected: openView === ClockType$1.MINUTES,
3318
+ label: utils.getMinuteText(date)
3319
+ }), arrayIncludes(views, ['minutes', 'seconds']) && createElement(ToolbarText, {
3320
+ variant: "h2",
3321
+ label: ":",
3322
+ selected: false,
3323
+ className: classes.separator
3324
+ }), arrayIncludes(views, 'seconds') && createElement(ToolbarButton$1, {
3325
+ variant: "h2",
3326
+ onClick: function () {
3327
+ return setOpenView(ClockType$1.SECONDS);
3328
+ },
3329
+ selected: openView === ClockType$1.SECONDS,
3330
+ label: utils.getSecondText(date)
3331
+ })), ampm && createElement("div", {
3332
+ className: clsx(classes.ampmSelection, (_d = {}, _d[classes.ampmLandscape] = isLandscape, _d[classes.ampmSelectionWithSeconds] = arrayIncludes(views, 'seconds'), _d))
3333
+ }, createElement(ToolbarButton$1, {
3334
+ disableRipple: true,
3335
+ variant: "subtitle1",
3336
+ selected: meridiemMode === 'am',
3337
+ typographyClassName: classes.ampmLabel,
3338
+ label: utils.getMeridiemText('am'),
3339
+ onClick: function () {
3340
+ return handleMeridiemChange('am');
3341
+ }
3342
+ }), createElement(ToolbarButton$1, {
3343
+ disableRipple: true,
3344
+ variant: "subtitle1",
3345
+ selected: meridiemMode === 'pm',
3346
+ typographyClassName: classes.ampmLabel,
3347
+ label: utils.getMeridiemText('pm'),
3348
+ onClick: function () {
3349
+ return handleMeridiemChange('pm');
3350
+ }
3351
+ })));
3352
+ };
3353
+
3354
+ var defaultProps$1 = __assign(__assign({}, timePickerDefaultProps), {
3355
+ openTo: 'hours',
3356
+ views: ['hours', 'minutes']
3357
+ });
3358
+
3359
+ function useOptions$1(props) {
3360
+ var utils = useUtils();
3361
+ return {
3362
+ getDefaultFormat: function () {
3363
+ return pick12hOr24hFormat(props.format, props.ampm, {
3364
+ '12h': utils.time12hFormat,
3365
+ '24h': utils.time24hFormat
3366
+ });
3367
+ }
3368
+ };
3369
+ }
3370
+
3371
+ var TimePicker = makePurePicker({
3372
+ useOptions: useOptions$1,
3373
+ DefaultToolbarComponent: TimePickerToolbar
3374
+ });
3375
+ var KeyboardTimePicker = makeKeyboardPicker({
3376
+ useOptions: useOptions$1,
3377
+ DefaultToolbarComponent: TimePickerToolbar,
3378
+ getCustomProps: function (props) {
3379
+ return {
3380
+ refuse: props.ampm ? /[^\dap]+/gi : /[^\d]+/gi
3381
+ };
3382
+ }
3383
+ });
3384
+ TimePicker.defaultProps = defaultProps$1;
3385
+ KeyboardTimePicker.defaultProps = defaultProps$1;
3386
+
3387
+ var TimeIcon = function (props) {
3388
+ return React__default.createElement(SvgIcon, __assign({}, props), React__default.createElement("path", {
3389
+ d: "M11.99 2C6.47 2 2 6.48 2 12s4.47 10 9.99 10C17.52 22 22 17.52 22 12S17.52 2 11.99 2zM12 20c-4.42 0-8-3.58-8-8s3.58-8 8-8 8 3.58 8 8-3.58 8-8 8z"
3390
+ }), React__default.createElement("path", {
3391
+ fill: "none",
3392
+ d: "M0 0h24v24H0z"
3393
+ }), React__default.createElement("path", {
3394
+ d: "M12.5 7H11v6l5.25 3.15.75-1.23-4.5-2.67z"
3395
+ }));
3396
+ };
3397
+
3398
+ var DateRangeIcon = function (props) {
3399
+ return React__default.createElement(SvgIcon, __assign({}, props), React__default.createElement("path", {
3400
+ d: "M9 11H7v2h2v-2zm4 0h-2v2h2v-2zm4 0h-2v2h2v-2zm2-7h-1V2h-2v2H8V2H6v2H5c-1.11 0-1.99.9-1.99 2L3 20c0 1.1.89 2 2 2h14c1.1 0 2-.9 2-2V6c0-1.1-.9-2-2-2zm0 16H5V9h14v11z"
3401
+ }), React__default.createElement("path", {
3402
+ fill: "none",
3403
+ d: "M0 0h24v24H0z"
3404
+ }));
3405
+ };
3406
+
3407
+ var viewToTabIndex = function (openView) {
3408
+ if (openView === 'date' || openView === 'year') {
3409
+ return 'date';
3410
+ }
3411
+
3412
+ return 'time';
3413
+ };
3414
+
3415
+ var tabIndexToView = function (tab) {
3416
+ if (tab === 'date') {
3417
+ return 'date';
3418
+ }
3419
+
3420
+ return 'hours';
3421
+ };
3422
+
3423
+ var useStyles$f = makeStyles(function (theme) {
3424
+ // prettier-ignore
3425
+ var tabsBackground = theme.palette.type === 'light' ? theme.palette.primary.main : theme.palette.background.default;
3426
+ return {
3427
+ tabs: {
3428
+ color: theme.palette.getContrastText(tabsBackground),
3429
+ backgroundColor: tabsBackground
3430
+ }
3431
+ };
3432
+ }, {
3433
+ name: 'MuiPickerDTTabs'
3434
+ });
3435
+ var DateTimePickerTabs = function (_a) {
3436
+ var view = _a.view,
3437
+ onChange = _a.onChange,
3438
+ dateRangeIcon = _a.dateRangeIcon,
3439
+ timeIcon = _a.timeIcon;
3440
+ var classes = useStyles$f();
3441
+ var theme = useTheme();
3442
+ var indicatorColor = theme.palette.type === 'light' ? 'secondary' : 'primary';
3443
+
3444
+ var handleChange = function (e, value) {
3445
+ if (value !== viewToTabIndex(view)) {
3446
+ onChange(tabIndexToView(value));
3447
+ }
3448
+ };
3449
+
3450
+ return createElement(Paper, null, createElement(Tabs, {
3451
+ variant: "fullWidth",
3452
+ value: viewToTabIndex(view),
3453
+ onChange: handleChange,
3454
+ className: classes.tabs,
3455
+ indicatorColor: indicatorColor
3456
+ }, createElement(Tab, {
3457
+ value: "date",
3458
+ icon: createElement(Fragment, null, dateRangeIcon)
3459
+ }), createElement(Tab, {
3460
+ value: "time",
3461
+ icon: createElement(Fragment, null, timeIcon)
3462
+ })));
3463
+ };
3464
+ DateTimePickerTabs.defaultProps = {
3465
+ dateRangeIcon: createElement(DateRangeIcon, null),
3466
+ timeIcon: createElement(TimeIcon, null)
3467
+ };
3468
+
3469
+ var useStyles$g = makeStyles(function (_) {
3470
+ return {
3471
+ toolbar: {
3472
+ paddingLeft: 16,
3473
+ paddingRight: 16,
3474
+ justifyContent: 'space-around'
3475
+ },
3476
+ separator: {
3477
+ margin: '0 4px 0 2px',
3478
+ cursor: 'default'
3479
+ }
3480
+ };
3481
+ }, {
3482
+ name: 'MuiPickerDTToolbar'
3483
+ });
3484
+ var DateTimePickerToolbar = function (_a) {
3485
+ var date = _a.date,
3486
+ openView = _a.openView,
3487
+ setOpenView = _a.setOpenView,
3488
+ ampm = _a.ampm,
3489
+ hideTabs = _a.hideTabs,
3490
+ dateRangeIcon = _a.dateRangeIcon,
3491
+ timeIcon = _a.timeIcon,
3492
+ onChange = _a.onChange;
3493
+ var utils = useUtils();
3494
+ var classes = useStyles$g();
3495
+ var showTabs = !hideTabs && typeof window !== 'undefined' && window.innerHeight > 667;
3496
+
3497
+ var _b = useMeridiemMode(date, ampm, onChange),
3498
+ meridiemMode = _b.meridiemMode,
3499
+ handleMeridiemChange = _b.handleMeridiemChange;
3500
+
3501
+ var theme = useTheme();
3502
+ var rtl = theme.direction === 'rtl';
3503
+ return createElement(Fragment, null, createElement(PickerToolbar, {
3504
+ isLandscape: false,
3505
+ className: classes.toolbar
3506
+ }, createElement(Grid, {
3507
+ container: true,
3508
+ justify: "center",
3509
+ wrap: "nowrap"
3510
+ }, createElement(Grid, {
3511
+ item: true,
3512
+ container: true,
3513
+ xs: 5,
3514
+ justify: "flex-start",
3515
+ direction: "column"
3516
+ }, createElement("div", null, createElement(ToolbarButton$1, {
3517
+ variant: "subtitle1",
3518
+ onClick: function () {
3519
+ return setOpenView('year');
3520
+ },
3521
+ selected: openView === 'year',
3522
+ label: utils.getYearText(date)
3523
+ })), createElement("div", null, createElement(ToolbarButton$1, {
3524
+ variant: "h4",
3525
+ onClick: function () {
3526
+ return setOpenView('date');
3527
+ },
3528
+ selected: openView === 'date',
3529
+ label: utils.getDateTimePickerHeaderText(date)
3530
+ }))), createElement(Grid, {
3531
+ item: true,
3532
+ container: true,
3533
+ xs: 6,
3534
+ justify: "center",
3535
+ alignItems: "flex-end",
3536
+ direction: rtl ? 'row-reverse' : 'row'
3537
+ }, createElement(ToolbarButton$1, {
3538
+ variant: "h3",
3539
+ onClick: function () {
3540
+ return setOpenView('hours');
3541
+ },
3542
+ selected: openView === 'hours',
3543
+ label: utils.getHourText(date, ampm)
3544
+ }), createElement(ToolbarText, {
3545
+ variant: "h3",
3546
+ label: ":",
3547
+ className: classes.separator
3548
+ }), createElement(ToolbarButton$1, {
3549
+ variant: "h3",
3550
+ onClick: function () {
3551
+ return setOpenView('minutes');
3552
+ },
3553
+ selected: openView === 'minutes',
3554
+ label: utils.getMinuteText(date)
3555
+ })), ampm && createElement(Grid, {
3556
+ item: true,
3557
+ container: true,
3558
+ xs: 1,
3559
+ direction: "column",
3560
+ justify: "flex-end"
3561
+ }, createElement(ToolbarButton$1, {
3562
+ variant: "subtitle1",
3563
+ selected: meridiemMode === 'am',
3564
+ label: utils.getMeridiemText('am'),
3565
+ onClick: function () {
3566
+ return handleMeridiemChange('am');
3567
+ }
3568
+ }), createElement(ToolbarButton$1, {
3569
+ variant: "subtitle1",
3570
+ selected: meridiemMode === 'pm',
3571
+ label: utils.getMeridiemText('pm'),
3572
+ onClick: function () {
3573
+ return handleMeridiemChange('pm');
3574
+ }
3575
+ })))), showTabs && createElement(DateTimePickerTabs, {
3576
+ dateRangeIcon: dateRangeIcon,
3577
+ timeIcon: timeIcon,
3578
+ view: openView,
3579
+ onChange: setOpenView
3580
+ }));
3581
+ };
3582
+
3583
+ var defaultProps$2 = __assign(__assign({}, dateTimePickerDefaultProps), {
3584
+ showActionsBar: false,
3585
+ todayLabel: 'TODAY',
3586
+ wider: true,
3587
+ orientation: 'portrait',
3588
+ openTo: 'date',
3589
+ views: ['year', 'date', 'hours', 'minutes']
3590
+ });
3591
+
3592
+ function useOptions$2(props) {
3593
+ var utils = useUtils();
3594
+
3595
+ if (props.orientation !== 'portrait') {
3596
+ throw new Error('We are not supporting custom orientation for DateTimePicker yet :(');
3597
+ }
3598
+
3599
+ return {
3600
+ getDefaultFormat: function () {
3601
+ return pick12hOr24hFormat(props.format, props.ampm, {
3602
+ '12h': utils.dateTime12hFormat,
3603
+ '24h': utils.dateTime24hFormat
3604
+ });
3605
+ }
3606
+ };
3607
+ }
3608
+
3609
+ var DateTimePicker = makePurePicker({
3610
+ useOptions: useOptions$2,
3611
+ DefaultToolbarComponent: DateTimePickerToolbar
3612
+ });
3613
+ var KeyboardDateTimePicker = makeKeyboardPicker({
3614
+ useOptions: useOptions$2,
3615
+ DefaultToolbarComponent: DateTimePickerToolbar,
3616
+ getCustomProps: function (props) {
3617
+ return {
3618
+ refuse: props.ampm ? /[^\dap]+/gi : /[^\d]+/gi
3619
+ };
3620
+ }
3621
+ });
3622
+ DateTimePicker.defaultProps = defaultProps$2;
3623
+ KeyboardDateTimePicker.defaultProps = defaultProps$2;
3624
+
3625
+ export { Calendar$1 as Calendar, Clock$1 as Clock, DatePicker, DateTimePicker, Day, KeyboardDatePicker, KeyboardDateTimePicker, KeyboardTimePicker, MuiPickersContext, MuiPickersUtilsProvider, Picker, TimePicker, ClockView as TimePickerView, makeKeyboardPicker, makePurePicker, useKeyboardPickerState, usePickerState, useUtils, validate };
3626
+ //# sourceMappingURL=material-ui-pickers.esm.js.map