Skip to content

Instantly share code, notes, and snippets.

@rosskevin
Created October 17, 2018 13:48
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save rosskevin/79d726d2b11a419db6649ab63bf79652 to your computer and use it in GitHub Desktop.
Save rosskevin/79d726d2b11a419db6649ab63bf79652 to your computer and use it in GitHub Desktop.
material-ui-pickers.esm
import { __extends, __rest, __assign } from 'tslib';
import { func, oneOfType, object, string, element, arrayOf, bool, node, oneOf, number, instanceOf, any, shape } from 'prop-types';
import { createContext, createElement, Component, forwardRef, Fragment, PureComponent } from 'react';
import MaskedInput from 'react-text-mask';
import Icon from '@material-ui/core/Icon';
import IconButton from '@material-ui/core/IconButton';
import InputAdornment from '@material-ui/core/InputAdornment';
import TextField from '@material-ui/core/TextField';
import Button from '@material-ui/core/Button';
import Dialog from '@material-ui/core/Dialog';
import DialogActions from '@material-ui/core/DialogActions';
import DialogContent from '@material-ui/core/DialogContent';
import withStyles from '@material-ui/core/styles/withStyles';
import classnames from 'classnames';
import EventListener from 'react-event-listener';
import * as keycode_ from 'keycode';
import createStyles from '@material-ui/core/styles/createStyles';
import Toolbar from '@material-ui/core/Toolbar';
import Typography from '@material-ui/core/Typography';
import { CSSTransition, TransitionGroup } from 'react-transition-group';
import { findDOMNode } from 'react-dom';
import Popover from '@material-ui/core/Popover';
import Paper from '@material-ui/core/Paper';
import withTheme from '@material-ui/core/styles/withTheme';
import Tab from '@material-ui/core/Tab';
import Tabs from '@material-ui/core/Tabs';
var _a = createContext(null), Consumer = _a.Consumer, Provider = _a.Provider;
var MuiPickersContextConsumer = Consumer;
var MuiPickersUtilsProvider = /** @class */ (function (_super) {
__extends(MuiPickersUtilsProvider, _super);
function MuiPickersUtilsProvider() {
var _this = _super !== null && _super.apply(this, arguments) || this;
_this.state = {
utils: null,
};
return _this;
}
MuiPickersUtilsProvider.getDerivedStateFromProps = function (_a) {
var Utils = _a.utils, locale = _a.locale, moment = _a.moment;
return {
utils: new Utils({ locale: locale, moment: moment }),
};
};
MuiPickersUtilsProvider.prototype.render = function () {
return createElement(Provider, { value: this.state.utils, children: this.props.children });
};
MuiPickersUtilsProvider.propTypes = {
utils: func.isRequired,
locale: oneOfType([object, string]),
children: oneOfType([
element.isRequired,
arrayOf(element.isRequired),
]).isRequired,
moment: func,
};
MuiPickersUtilsProvider.defaultProps = {
locale: undefined,
moment: undefined,
};
return MuiPickersUtilsProvider;
}(Component));
var checkUtils = function (utils) {
if (!utils) {
// tslint:disable-next-line
throw new Error('Can not find utils in context. You likely forgot to wrap your component tree in MuiPickersUtilsProvider or mixed imports from core module and paths.');
}
};
var WithUtils = function () { return function (Component$$1) {
var withUtils = function (props) { return (createElement(MuiPickersContextConsumer, null, function (utils) {
checkUtils(utils);
return createElement(Component$$1, __assign({ utils: utils }, props));
})); };
withUtils.displayName = "WithUtils(" + (Component$$1.displayName ||
Component$$1.name) + ")";
return withUtils;
}; };
var getInitialDate = function (_a) {
var utils = _a.utils, value = _a.value, initialFocusedDate = _a.initialFocusedDate;
var initialDate = value || initialFocusedDate || utils.date();
var date = utils.date(initialDate);
return utils.isValid(date) ? date : utils.date();
};
var BasePicker = /** @class */ (function (_super) {
__extends(BasePicker, _super);
function BasePicker() {
var _this = _super !== null && _super.apply(this, arguments) || this;
_this.state = {
date: getInitialDate(_this.props),
isAccepted: false,
};
_this.changeDate = function (date, callback) {
return _this.setState({ date: date }, callback);
};
_this.handleAcceptedChange = function (isAccepted, callback) {
return _this.setState({ isAccepted: isAccepted }, callback);
};
_this.handleClear = function () { return _this.props.onChange(null); };
_this.handleAccept = function () { return _this.props.onChange(_this.state.date); };
_this.handleSetTodayDate = function () {
return _this.handleChange(_this.props.utils.date(), false);
};
_this.handleTextFieldChange = function (date) {
var onChange = _this.props.onChange;
if (date === null) {
onChange(null);
}
else {
_this.changeDate(date, function () { return onChange(date); });
}
};
_this.pick12hOr24hFormat = function (default12hFormat, default24hFormat) {
var _a = _this.props, format = _a.format, ampm = _a.ampm;
if (format) {
return format;
}
return ampm ? default12hFormat : default24hFormat;
};
_this.handleChange = function (newDate, isFinish) {
if (isFinish === void 0) { isFinish = true; }
var _a = _this.props, autoOk = _a.autoOk, onChange = _a.onChange;
_this.changeDate(newDate, function () {
if (isFinish && autoOk) {
onChange(newDate);
// pass down accept true, and make it false in the next tick
_this.handleAcceptedChange(true, function () { return _this.handleAcceptedChange(false); });
}
});
};
_this.handleDismiss = function () {
_this.setState({ date: getInitialDate(_this.props) });
};
return _this;
}
BasePicker.prototype.componentDidUpdate = function (prevProps) {
var _a = this.props, utils = _a.utils, value = _a.value;
if (prevProps.value !== value || prevProps.utils.locale !== utils.locale) {
this.changeDate(getInitialDate(this.props));
}
};
BasePicker.prototype.render = function () {
return this.props.children(__assign({}, this.state, { utils: this.props.utils, changeDate: this.changeDate, handleAcceptedChange: this.handleAcceptedChange, handleClear: this.handleClear, handleAccept: this.handleAccept, handleDismiss: this.handleDismiss, handleSetTodayDate: this.handleSetTodayDate, handleTextFieldChange: this.handleTextFieldChange, pick12hOr24hFormat: this.pick12hOr24hFormat, handleChange: this.handleChange }));
};
return BasePicker;
}(Component));
var BasePicker$1 = WithUtils()(BasePicker);
var date = oneOfType([
object,
string,
number,
instanceOf(Date),
]);
var DomainPropTypes = { date: date };
var Input = /** @class */ (function (_super) {
__extends(Input, _super);
function Input() {
return _super !== null && _super.apply(this, arguments) || this;
}
Input.prototype.render = function () {
var _a = this.props, inputRef = _a.inputRef, rest = __rest(_a, ["inputRef"]);
return this.props.mask ? (createElement(MaskedInput, __assign({}, rest, { ref: inputRef }))) : (createElement("input", __assign({}, rest, { ref: inputRef })));
};
Input.propTypes = {
mask: any,
inputRef: func.isRequired,
};
Input.defaultProps = {
mask: undefined,
};
return Input;
}(PureComponent));
var getDisplayDate = function (_a) {
var utils = _a.utils, value = _a.value, format = _a.format, invalidLabel = _a.invalidLabel, emptyLabel = _a.emptyLabel, labelFunc = _a.labelFunc;
var isEmpty = value === null;
var date = utils.date(value);
if (labelFunc) {
return labelFunc(isEmpty ? null : date, invalidLabel);
}
if (isEmpty) {
return emptyLabel;
}
return utils.isValid(date) ? utils.format(date, format) : invalidLabel;
};
var getError = function (value, props) {
var utils = props.utils, maxDate = props.maxDate, minDate = props.minDate, disablePast = props.disablePast, disableFuture = props.disableFuture, maxDateMessage = props.maxDateMessage, minDateMessage = props.minDateMessage, invalidDateMessage = props.invalidDateMessage;
if (!utils.isValid(value)) {
// if null - do not show error
if (utils.isNull(value)) {
return '';
}
return invalidDateMessage;
}
if ((maxDate && utils.isAfter(value, utils.endOfDay(utils.date(maxDate)))) ||
(disableFuture && utils.isAfter(value, utils.endOfDay(utils.date())))) {
return maxDateMessage;
}
if ((minDate && utils.isBefore(value, utils.startOfDay(utils.date(minDate)))) ||
(disablePast && utils.isBefore(value, utils.startOfDay(utils.date())))) {
return minDateMessage;
}
return '';
};
var DateTextField = /** @class */ (function (_super) {
__extends(DateTextField, _super);
function DateTextField() {
var _this = _super !== null && _super.apply(this, arguments) || this;
_this.state = DateTextField.updateState(_this.props);
_this.commitUpdates = function (value) {
var _a = _this.props, clearable = _a.clearable, onClear = _a.onClear, utils = _a.utils, format = _a.format, onError = _a.onError;
if (value === '') {
if (_this.props.value === null) {
_this.setState(DateTextField.updateState(_this.props));
}
else if (clearable && onClear) {
onClear();
}
return;
}
var oldValue = utils.date(_this.state.value);
var newValue = utils.parse(value, format);
var error = getError(newValue, _this.props);
_this.setState({
error: error,
displayValue: value,
value: error ? newValue : oldValue,
}, function () {
if (!error && !utils.isEqual(newValue, oldValue)) {
_this.props.onChange(newValue);
}
if (error && onError) {
onError(newValue, error);
}
});
};
_this.handleBlur = function (e) {
if (_this.props.keyboard) {
e.preventDefault();
e.stopPropagation();
_this.commitUpdates(e.target.value);
if (_this.props.onBlur) {
_this.props.onBlur(e);
}
}
};
_this.handleChange = function (e) {
var _a = _this.props, utils = _a.utils, format = _a.format, onInputChange = _a.onInputChange;
var parsedValue = utils.parse(e.target.value, format);
if (onInputChange) {
onInputChange(e);
}
_this.setState({
displayValue: e.target.value,
error: getError(parsedValue, _this.props),
});
};
_this.handleFocus = function (e) {
e.stopPropagation();
e.preventDefault();
if (!_this.props.keyboard) {
_this.openPicker(e);
}
};
_this.handleKeyPress = function (e) {
if (e.key === 'Enter') {
if (!_this.props.disableOpenOnEnter) {
_this.openPicker(e);
}
else {
// @ts-ignore TODO check me
_this.commitUpdates(e.target.value);
}
}
};
_this.openPicker = function (e) {
var _a = _this.props, disabled = _a.disabled, onClick = _a.onClick;
if (!disabled) {
onClick(e);
}
};
return _this;
}
DateTextField.prototype.componentDidUpdate = function (prevProps) {
if (!this.props.utils.isEqual(this.props.value, prevProps.value) ||
prevProps.format !== this.props.format ||
prevProps.maxDate !== this.props.maxDate ||
prevProps.minDate !== this.props.minDate ||
prevProps.emptyLabel !== this.props.emptyLabel ||
prevProps.utils !== this.props.utils) {
/* eslint-disable-next-line react/no-did-update-set-state */
this.setState(DateTextField.updateState(this.props));
}
};
DateTextField.prototype.render = function () {
var _a = this.props, adornmentPosition = _a.adornmentPosition, clearable = _a.clearable, disabled = _a.disabled, disableFuture = _a.disableFuture, disableOpenOnEnter = _a.disableOpenOnEnter, disablePast = _a.disablePast, emptyLabel = _a.emptyLabel, format = _a.format, InputAdornmentProps = _a.InputAdornmentProps, InputProps = _a.InputProps, invalidDateMessage = _a.invalidDateMessage, invalidLabel = _a.invalidLabel, keyboard = _a.keyboard, keyboardIcon = _a.keyboardIcon, labelFunc = _a.labelFunc, mask = _a.mask, maxDate = _a.maxDate, maxDateMessage = _a.maxDateMessage, minDate = _a.minDate, minDateMessage = _a.minDateMessage, onBlur = _a.onBlur, onClear = _a.onClear, onClick = _a.onClick, pipe = _a.pipe, TextFieldComponent = _a.TextFieldComponent, utils = _a.utils, value = _a.value, onInputChange = _a.onInputChange, other = __rest(_a, ["adornmentPosition", "clearable", "disabled", "disableFuture", "disableOpenOnEnter", "disablePast", "emptyLabel", "format", "InputAdornmentProps", "InputProps", "invalidDateMessage", "invalidLabel", "keyboard", "keyboardIcon", "labelFunc", "mask", "maxDate", "maxDateMessage", "minDate", "minDateMessage", "onBlur", "onClear", "onClick", "pipe", "TextFieldComponent", "utils", "value", "onInputChange"]);
var _b = this.state, displayValue = _b.displayValue, error = _b.error;
var localInputProps = {
inputComponent: Input,
inputProps: {
mask: !keyboard ? null : mask,
pipe: !keyboard ? null : pipe,
readOnly: !keyboard,
},
};
if (keyboard) {
localInputProps[adornmentPosition + "Adornment"] = (createElement(InputAdornment, __assign({ position: adornmentPosition }, InputAdornmentProps),
createElement(IconButton, { disabled: disabled, onClick: this.openPicker },
createElement(Icon, null,
" ",
keyboardIcon,
" "))));
}
var Component$$1 = TextFieldComponent;
var inputProps = __assign({}, localInputProps, InputProps);
return (createElement(Component$$1, __assign({ onClick: this.handleFocus, error: !!error, helperText: error, onKeyPress: this.handleKeyPress, onBlur: this.handleBlur, disabled: disabled, value: displayValue }, other, { onError: undefined, onChange: this.handleChange, InputProps: inputProps })));
};
DateTextField.propTypes = {
value: oneOfType([
object,
string,
number,
instanceOf(Date),
]),
minDate: DomainPropTypes.date,
maxDate: DomainPropTypes.date,
disablePast: bool,
disableFuture: bool,
format: string,
onBlur: func,
onChange: func.isRequired,
onClear: func,
onClick: func.isRequired,
clearable: bool,
utils: object.isRequired,
disabled: bool,
InputProps: shape({}),
/** Input mask, used in keyboard mode read more <a href="https://github.com/text-mask/text-mask/blob/master/componentDocumentation.md#readme">here</a> */
mask: any,
/** Error message, shown if date is less then minimal date */
minDateMessage: node,
/** Error message, shown if date is more then maximal date */
maxDateMessage: node,
/** Message displaying in text field, if date is invalid (doesn't work in keyboard mode) */
invalidLabel: string,
/** Message displaying in text field, if null passed (doesn't work in keyboard mode) */
emptyLabel: string,
/** Dynamic label generation function [(date: Date, invalidLabel: string) => string] */
labelFunc: func,
/** On/off manual keyboard input mode */
keyboard: bool,
/** Icon displayed for open picker button in keyboard mode */
keyboardIcon: node,
/** enables/disable automatic opening of the picker when the user clicks enter */
disableOpenOnEnter: bool,
/** Message, appearing when date cannot be parsed */
invalidDateMessage: node,
/** Component that should replace the default Material-UI TextField */
TextFieldComponent: oneOfType([string, func]),
/** Props to pass to keyboard input adornment */
InputAdornmentProps: object,
/** Specifies position of keyboard button adornment */
adornmentPosition: oneOf(['start', 'end']),
/**
* Callback firing when date that applied in the keyboard is invalid
* [(error: string) => void]
*/
onError: func,
/** Callback firing on change input in keyboard mode [(e: Event) => void] */
onInputChange: func,
pipe: func,
};
DateTextField.defaultProps = {
disabled: false,
invalidLabel: 'Unknown',
emptyLabel: '',
value: new Date(),
labelFunc: undefined,
format: undefined,
InputProps: undefined,
keyboard: false,
mask: undefined,
keyboardIcon: 'event',
disableOpenOnEnter: false,
invalidDateMessage: 'Invalid Date Format',
clearable: false,
onBlur: undefined,
onClear: undefined,
disablePast: false,
disableFuture: false,
onError: undefined,
onInputChange: undefined,
minDate: '1900-01-01',
maxDate: '2100-01-01',
minDateMessage: 'Date should not be before minimal date',
maxDateMessage: 'Date should not be after maximal date',
TextFieldComponent: TextField,
InputAdornmentProps: {},
adornmentPosition: 'end',
pipe: undefined,
};
DateTextField.updateState = function (props) { return ({
value: props.value,
displayValue: getDisplayDate(props),
error: getError(props.utils.date(props.value), props),
}); };
return DateTextField;
}(PureComponent));
// @ts-ignore ts requires to duplicate proptypes of textfield
var DateTextField$1 = WithUtils()(DateTextField);
var dialogWidth = 310;
var dialogHeight = 405;
var styles = {
dialogRoot: {
minWidth: dialogWidth,
minHeight: dialogHeight,
},
dialog: {
width: dialogWidth,
minHeight: dialogHeight,
overflow: 'hidden',
'&:first-child': {
padding: 0,
},
},
dialogActions: {
// set justifyContent to default value to fix IE11 layout bug
// see https://github.com/dmtrKovalenko/material-ui-pickers/pull/267
justifyContent: 'flex-start',
},
clearableDialogAction: {
'&:first-child': {
marginRight: 'auto',
},
},
todayDialogAction: {
'&:first-child': {
marginRight: 'auto',
},
},
dialogAction: {
// empty but may be needed for override
},
};
var ModalDialog = function (_a) {
var children = _a.children, classes = _a.classes, onKeyDown = _a.onKeyDown, onAccept = _a.onAccept, onDismiss = _a.onDismiss, onClear = _a.onClear, onSetToday = _a.onSetToday, okLabel = _a.okLabel, cancelLabel = _a.cancelLabel, clearLabel = _a.clearLabel, todayLabel = _a.todayLabel, dialogContentClassName = _a.dialogContentClassName, clearable = _a.clearable, showTodayButton = _a.showTodayButton, other = __rest(_a, ["children", "classes", "onKeyDown", "onAccept", "onDismiss", "onClear", "onSetToday", "okLabel", "cancelLabel", "clearLabel", "todayLabel", "dialogContentClassName", "clearable", "showTodayButton"]);
var _b;
return (createElement(Dialog, __assign({ onClose: onDismiss, classes: { paper: classes.dialogRoot } }, other),
createElement(EventListener, { target: "window", onKeyDown: onKeyDown }),
createElement(DialogContent, { className: classnames(classes.dialog, dialogContentClassName) }, children),
createElement(DialogActions, { classes: {
root: clearable || showTodayButton ? classes.dialogActions : undefined,
action: classnames(classes.dialogAction, (_b = {},
_b[classes.clearableDialogAction] = clearable,
_b[classes.todayDialogAction] = !clearable && showTodayButton,
_b)),
} },
clearable && (createElement(Button, { color: "primary", onClick: onClear }, clearLabel)),
!clearable &&
showTodayButton && (createElement(Button, { color: "primary", onClick: onSetToday }, todayLabel)),
createElement(Button, { color: "primary", onClick: onDismiss }, cancelLabel),
createElement(Button, { color: "primary", onClick: onAccept }, okLabel))));
};
ModalDialog.displayName = 'ModalDialog';
ModalDialog.propTypes = {
children: node.isRequired,
onKeyDown: func.isRequired,
onAccept: func.isRequired,
onDismiss: func.isRequired,
onClear: func.isRequired,
classes: object.isRequired,
dialogContentClassName: string,
okLabel: node.isRequired,
cancelLabel: node.isRequired,
clearLabel: node.isRequired,
clearable: bool.isRequired,
todayLabel: node.isRequired,
showTodayButton: bool.isRequired,
onSetToday: func.isRequired,
};
ModalDialog.defaultProps = {
dialogContentClassName: '',
};
var ModalDialog$1 = withStyles(styles, { name: 'MuiPickersModal' })(ModalDialog);
// Workaround to work with synthetic imports both for jest and rollup
// https://github.com/rollup/rollup/issues/670
// https://github.com/kulshekhar/ts-jest/issues/146
var keycode = keycode_;
var ModalWrapper = /** @class */ (function (_super) {
__extends(ModalWrapper, _super);
function ModalWrapper() {
var _this = _super !== null && _super.apply(this, arguments) || this;
_this.state = {
open: false,
};
_this.handleKeyDown = function (event) {
switch (keycode(event)) {
case 'enter':
_this.handleAccept();
break;
default:
// if keycode is not handled, stop execution
return;
}
// if event was handled prevent other side effects
event.preventDefault();
};
_this.handleSetTodayDate = function () {
if (_this.props.onSetToday) {
_this.props.onSetToday();
}
};
_this.open = function () {
_this.setState({ open: true });
if (_this.props.onOpen) {
_this.props.onOpen();
}
};
_this.close = function () {
_this.setState({ open: false });
if (_this.props.onClose) {
_this.props.onClose();
}
};
_this.handleAccept = function () {
_this.close();
if (_this.props.onAccept) {
_this.props.onAccept();
}
};
_this.handleDismiss = function () {
_this.close();
if (_this.props.onDismiss) {
_this.props.onDismiss();
}
};
_this.handleClear = function () {
_this.close();
if (_this.props.onClear) {
_this.props.onClear();
}
};
return _this;
}
ModalWrapper.getDerivedStateFromProps = function (nextProps) {
// only if accept = true close the dialog
if (nextProps.isAccepted) {
return {
open: false,
};
}
return null;
};
ModalWrapper.prototype.render = function () {
var _a = this.props, value = _a.value, format = _a.format, children = _a.children, dialogContentClassName = _a.dialogContentClassName, onAccept = _a.onAccept, onDismiss = _a.onDismiss, invalidLabel = _a.invalidLabel, labelFunc = _a.labelFunc, okLabel = _a.okLabel, cancelLabel = _a.cancelLabel, clearLabel = _a.clearLabel, clearable = _a.clearable, todayLabel = _a.todayLabel, showTodayButton = _a.showTodayButton, onOpen = _a.onOpen, onClose = _a.onClose, onSetToday = _a.onSetToday, isAccepted = _a.isAccepted, DialogProps = _a.DialogProps, other = __rest(_a, ["value", "format", "children", "dialogContentClassName", "onAccept", "onDismiss", "invalidLabel", "labelFunc", "okLabel", "cancelLabel", "clearLabel", "clearable", "todayLabel", "showTodayButton", "onOpen", "onClose", "onSetToday", "isAccepted", "DialogProps"]);
return (createElement(Fragment, null,
createElement(DateTextField$1, __assign({ value: value, format: format, onClick: this.open,
// onFocus={this.togglePicker} <- Currently not properly works with .blur() on TextField
invalidLabel: invalidLabel, labelFunc: labelFunc, clearable: clearable }, other)),
createElement(ModalDialog$1, __assign({ open: this.state.open, onKeyDown: this.handleKeyDown, onClear: this.handleClear, onAccept: this.handleAccept, onDismiss: this.handleDismiss, onSetToday: this.handleSetTodayDate, dialogContentClassName: dialogContentClassName, clearLabel: clearLabel, todayLabel: todayLabel, okLabel: okLabel, cancelLabel: cancelLabel, clearable: clearable, showTodayButton: showTodayButton, children: children }, DialogProps))));
};
ModalWrapper.propTypes = {
/** "OK" label message */
okLabel: node,
/** "Cancel" label message */
cancelLabel: node,
/** "Clear" label message */
clearLabel: node,
/** If true clear button will be displayed */
clearable: bool,
/** "Today" label message */
todayLabel: string,
/**
* If true today button will be displayed
* <b>Note*</b> that clear button has higher priority
*/
showTodayButton: bool,
/** On open callback [(e: Event) => void] */
onOpen: func,
/** On close callback [(e: Event) => void] */
format: string,
/** Dialog props passed to material-ui Dialog */
DialogProps: object,
value: DomainPropTypes.date,
invalidLabel: node,
labelFunc: func,
onClose: func,
onAccept: func,
onDismiss: func,
onClear: func,
onSetToday: func,
children: node.isRequired,
dialogContentClassName: string,
isAccepted: bool.isRequired,
};
ModalWrapper.defaultProps = {
dialogContentClassName: '',
invalidLabel: undefined,
value: new Date(),
labelFunc: undefined,
okLabel: 'OK',
cancelLabel: 'Cancel',
clearLabel: 'Clear',
todayLabel: 'Today',
clearable: false,
showTodayButton: false,
format: undefined,
onAccept: undefined,
onDismiss: undefined,
onClear: undefined,
onOpen: undefined,
onClose: undefined,
onSetToday: undefined,
DialogProps: undefined,
isAccepted: false,
};
return ModalWrapper;
}(PureComponent));
var PickerToolbar = function (_a) {
var children = _a.children, className = _a.className, classes = _a.classes, other = __rest(_a, ["children", "className", "classes"]);
return (createElement(Toolbar, __assign({ className: classnames(classes.toolbar, className) }, other), children));
};
PickerToolbar.propTypes = {
children: arrayOf(node).isRequired,
className: string,
classes: any.isRequired,
innerRef: any,
};
PickerToolbar.defaultProps = {
className: '',
};
var styles$1 = function (theme) {
return createStyles({
toolbar: {
display: 'flex',
flexDirection: 'column',
alignItems: 'flex-start',
justifyContent: 'center',
height: 100,
backgroundColor: theme.palette.type === 'light'
? theme.palette.primary.main
: theme.palette.background.default,
},
});
};
var PickerToolbar$1 = withStyles(styles$1, { name: 'MuiPickersToolbar' })(PickerToolbar);
var ToolbarButton = function (_a) {
var classes = _a.classes, selected = _a.selected, label = _a.label, className = _a.className, other = __rest(_a, ["classes", "selected", "label", "className"]);
var _b;
return (createElement(Typography, __assign({ className: classnames(classes.toolbarBtn, className, (_b = {},
_b[classes.toolbarBtnSelected] = selected,
_b)) }, other), label));
};
ToolbarButton.propTypes = {
selected: bool.isRequired,
label: string.isRequired,
classes: any.isRequired,
className: string,
innerRef: any,
};
ToolbarButton.defaultProps = {
className: '',
};
var styles$2 = function (theme) { return ({
toolbarBtn: {
cursor: 'pointer',
color: 'rgba(255, 255, 255, 0.54)',
},
toolbarBtnSelected: {
color: theme.palette.common.white,
},
}); };
var ToolbarButton$1 = withStyles(styles$2, { name: 'MuiPickersToolbarButton' })(ToolbarButton);
var findClosestEnabledDate = function (_a) {
var date = _a.date, utils = _a.utils, minDate = _a.minDate, maxDate = _a.maxDate, disableFuture = _a.disableFuture, disablePast = _a.disablePast, shouldDisableDate = _a.shouldDisableDate;
var today = utils.startOfDay(utils.date());
minDate = minDate && utils.date(minDate);
maxDate = maxDate && utils.date(maxDate);
if (disablePast && utils.isBefore(minDate, today)) {
minDate = today;
}
if (disableFuture && utils.isAfter(maxDate, today)) {
maxDate = today;
}
var forward = utils.date(date);
var backward = utils.date(date);
if (utils.isBefore(date, minDate)) {
forward = minDate;
backward = null;
}
if (utils.isAfter(date, maxDate)) {
if (backward) {
backward = maxDate;
}
forward = null;
}
while (forward || backward) {
if (forward && utils.isAfter(forward, maxDate)) {
forward = null;
}
if (backward && utils.isBefore(backward, minDate)) {
backward = null;
}
if (forward) {
if (!shouldDisableDate(forward)) {
return forward;
}
forward = utils.addDays(forward, 1);
}
if (backward) {
if (!shouldDisableDate(backward)) {
return backward;
}
backward = utils.addDays(backward, -1);
}
}
return null;
};
var animationDuration = 350;
var SlideTransition = function (_a) {
var classes = _a.classes, className = _a.className, children = _a.children, transKey = _a.transKey, slideDirection = _a.slideDirection;
return (createElement(TransitionGroup, { className: classnames(classes.transitionContainer, className) },
createElement(CSSTransition, { key: transKey, mountOnEnter: true, unmountOnExit: true, timeout: animationDuration, children: children, classNames: {
enter: classes["slideEnter-" + slideDirection],
enterActive: classes.slideEnterActive,
exit: classes.slideExit,
exitActive: classes["slideExitActiveLeft-" + slideDirection],
} })));
};
SlideTransition.propTypes = {
classes: shape({}).isRequired,
children: node.isRequired,
className: string,
slideDirection: oneOf(['left', 'right']).isRequired,
transKey: string.isRequired,
innerRef: any,
};
SlideTransition.defaultProps = {
className: undefined,
};
var styles$3 = function (theme) {
var slideTransition = theme.transitions.create('transform', {
duration: animationDuration,
easing: 'cubic-bezier(0.35, 0.8, 0.4, 1)',
});
return createStyles({
transitionContainer: {
display: 'block',
position: 'relative',
'& > *': {
position: 'absolute',
top: 0,
right: 0,
left: 0,
},
},
'slideEnter-left': {
willChange: 'transform',
transform: 'translate(100%)',
},
'slideEnter-right': {
willChange: 'transform',
transform: 'translate(-100%)',
},
slideEnterActive: {
transform: 'translate(0%)',
transition: slideTransition,
},
slideExit: {
transform: 'translate(0%)',
},
'slideExitActiveLeft-left': {
willChange: 'transform',
transform: 'translate(-100%)',
transition: slideTransition,
},
'slideExitActiveLeft-right': {
willChange: 'transform',
transform: 'translate(100%)',
transition: slideTransition,
},
});
};
var SlideTransition$1 = withStyles(styles$3, {
name: 'MuiPickersSlideTransition',
})(SlideTransition);
var CalendarHeader = function (_a) {
var classes = _a.classes, theme = _a.theme, currentMonth = _a.currentMonth, onMonthChange = _a.onMonthChange, leftArrowIcon = _a.leftArrowIcon, rightArrowIcon = _a.rightArrowIcon, disablePrevMonth = _a.disablePrevMonth, disableNextMonth = _a.disableNextMonth, utils = _a.utils, slideDirection = _a.slideDirection;
var rtl = theme.direction === 'rtl';
var selectNextMonth = function () {
return onMonthChange(utils.getNextMonth(currentMonth), 'left');
};
var selectPreviousMonth = function () {
return onMonthChange(utils.getPreviousMonth(currentMonth), 'right');
};
return (createElement("div", null,
createElement("div", { className: classes.switchHeader },
createElement(IconButton, { disabled: disablePrevMonth, onClick: selectPreviousMonth, className: classes.iconButton },
createElement(Icon, null, rtl ? rightArrowIcon : leftArrowIcon)),
createElement(SlideTransition$1, { slideDirection: slideDirection, transKey: currentMonth.toString(), className: classes.transitionContainer },
createElement(Typography, { align: "center", variant: "body2" }, utils.getCalendarHeaderText(currentMonth))),
createElement(IconButton, { disabled: disableNextMonth, onClick: selectNextMonth, className: classes.iconButton },
createElement(Icon, null, rtl ? leftArrowIcon : rightArrowIcon))),
createElement("div", { className: classes.daysHeader }, utils.getWeekdays().map(function (day, index) { return (createElement(Typography, { key: index, variant: "caption", className: classes.dayLabel }, day)); }))));
};
CalendarHeader.propTypes = {
currentMonth: object.isRequired,
onMonthChange: func.isRequired,
classes: object.isRequired,
theme: object.isRequired,
leftArrowIcon: node,
rightArrowIcon: node,
disablePrevMonth: bool,
disableNextMonth: bool,
utils: object.isRequired,
slideDirection: oneOf(['right', 'left']).isRequired,
innerRef: any,
};
CalendarHeader.defaultProps = {
leftArrowIcon: 'keyboard_arrow_left',
rightArrowIcon: 'keyboard_arrow_right',
disablePrevMonth: false,
disableNextMonth: false,
};
var styles$4 = function (theme) {
return createStyles({
switchHeader: {
display: 'flex',
justifyContent: 'space-between',
alignItems: 'center',
marginTop: theme.spacing.unit / 2,
marginBottom: theme.spacing.unit,
},
transitionContainer: {
width: '100%',
height: 20,
},
iconButton: {
zIndex: 2,
backgroundColor: theme.palette.background.paper,
'& > *': {
// label
backgroundColor: theme.palette.background.paper,
'& > *': {
// icon
zIndex: 1,
overflow: 'visible',
},
},
},
daysHeader: {
display: 'flex',
justifyContent: 'center',
alignItems: 'center',
maxHeight: 16,
},
dayLabel: {
width: 36,
margin: '0 2px',
textAlign: 'center',
color: theme.palette.text.hint,
},
});
};
var CalendarHeader$1 = withStyles(styles$4, {
withTheme: true,
name: 'MuiPickersCalendarHeader',
})(WithUtils()(CalendarHeader));
var Day = /** @class */ (function (_super) {
__extends(Day, _super);
function Day() {
return _super !== null && _super.apply(this, arguments) || this;
}
Day.prototype.render = function () {
var _a;
var _b = this.props, children = _b.children, classes = _b.classes, disabled = _b.disabled, hidden = _b.hidden, current = _b.current, selected = _b.selected, other = __rest(_b, ["children", "classes", "disabled", "hidden", "current", "selected"]);
var className = classnames(classes.day, (_a = {},
_a[classes.hidden] = hidden,
_a[classes.current] = current,
_a[classes.selected] = selected,
_a[classes.disabled] = disabled,
_a));
return (createElement(IconButton, __assign({ className: className, tabIndex: hidden || disabled ? -1 : 0 }, other), children));
};
Day.propTypes = {
children: node.isRequired,
classes: object.isRequired,
current: bool,
disabled: bool,
hidden: bool,
selected: bool,
innerRef: any,
};
Day.defaultProps = {
disabled: false,
hidden: false,
current: false,
selected: false,
};
return Day;
}(PureComponent));
var styles$5 = function (theme) {
return createStyles({
day: {
width: 36,
height: 36,
fontSize: theme.typography.caption.fontSize,
margin: '0 2px',
color: theme.palette.text.primary,
fontWeight: theme.typography.fontWeightMedium,
padding: 0,
},
hidden: {
opacity: 0,
pointerEvents: 'none',
},
current: {
color: theme.palette.primary.main,
fontWeight: 600,
},
selected: {
color: theme.palette.common.white,
backgroundColor: theme.palette.primary.main,
fontWeight: theme.typography.fontWeightMedium,
'&:hover': {
backgroundColor: theme.palette.primary.main,
},
},
disabled: {
pointerEvents: 'none',
color: theme.palette.text.hint,
},
});
};
var Day$1 = withStyles(styles$5, { name: 'MuiPickersDay' })(Day);
var DayWrapper = /** @class */ (function (_super) {
__extends(DayWrapper, _super);
function DayWrapper() {
var _this = _super !== null && _super.apply(this, arguments) || this;
_this.handleClick = function () {
_this.props.onSelect(_this.props.value);
};
return _this;
}
DayWrapper.prototype.render = function () {
var _a = this.props, children = _a.children, value = _a.value, dayInCurrentMonth = _a.dayInCurrentMonth, disabled = _a.disabled, onSelect = _a.onSelect, other = __rest(_a, ["children", "value", "dayInCurrentMonth", "disabled", "onSelect"]);
return (createElement("div", __assign({ onClick: dayInCurrentMonth && !disabled ? this.handleClick : undefined, onKeyPress: dayInCurrentMonth && !disabled ? this.handleClick : undefined, role: "presentation" }, other), children));
};
DayWrapper.propTypes = {
children: node.isRequired,
dayInCurrentMonth: bool,
disabled: bool,
onSelect: func.isRequired,
value: any.isRequired,
};
DayWrapper.defaultProps = {
dayInCurrentMonth: true,
disabled: false,
};
return DayWrapper;
}(PureComponent));
// Workaround to work with synthetic imports both for jest and rollup
// https://github.com/rollup/rollup/issues/670
// https://github.com/kulshekhar/ts-jest/issues/146
var keycode$1 = keycode_;
var Calendar = /** @class */ (function (_super) {
__extends(Calendar, _super);
function Calendar() {
var _this = _super !== null && _super.apply(this, arguments) || this;
_this.state = {
slideDirection: 'left',
currentMonth: _this.props.utils.getStartOfMonth(_this.props.date),
};
_this.onDateSelect = function (day, isFinish) {
if (isFinish === void 0) { isFinish = true; }
var _a = _this.props, date = _a.date, utils = _a.utils;
_this.props.onChange(utils.mergeDateAndTime(day, date), isFinish);
};
_this.handleChangeMonth = function (newMonth, slideDirection) {
_this.setState({ currentMonth: newMonth, slideDirection: slideDirection });
};
_this.validateMinMaxDate = function (day) {
var _a = _this.props, minDate = _a.minDate, maxDate = _a.maxDate, utils = _a.utils;
return ((minDate && utils.isBeforeDay(day, utils.date(minDate))) ||
(maxDate && utils.isAfterDay(day, utils.date(maxDate))));
};
_this.shouldDisablePrevMonth = function () {
var _a = _this.props, utils = _a.utils, disablePast = _a.disablePast, minDate = _a.minDate;
var now = utils.date();
return !utils.isBefore(utils.getStartOfMonth(disablePast && utils.isAfter(now, minDate) ? now : utils.date(minDate)), _this.state.currentMonth);
};
_this.shouldDisableNextMonth = function () {
var _a = _this.props, utils = _a.utils, disableFuture = _a.disableFuture, maxDate = _a.maxDate;
var now = utils.date();
return !utils.isAfter(utils.getStartOfMonth(disableFuture && utils.isBefore(now, maxDate)
? now
: utils.date(maxDate)), _this.state.currentMonth);
};
_this.shouldDisableDate = function (day) {
var _a = _this.props, disablePast = _a.disablePast, disableFuture = _a.disableFuture, shouldDisableDate = _a.shouldDisableDate, utils = _a.utils;
return Boolean((disableFuture && utils.isAfterDay(day, utils.date())) ||
(disablePast && utils.isBeforeDay(day, utils.date())) ||
_this.validateMinMaxDate(day) ||
(shouldDisableDate && shouldDisableDate(day)));
};
_this.moveToDay = function (day) {
if (day && !_this.shouldDisableDate(day)) {
_this.onDateSelect(day, false);
}
};
_this.handleKeyDown = function (event) {
var _a = _this.props, theme = _a.theme, date = _a.date, utils = _a.utils;
switch (keycode$1(event)) {
case 'up':
_this.moveToDay(utils.addDays(date, -7));
break;
case 'down':
_this.moveToDay(utils.addDays(date, 7));
break;
case 'left':
theme.direction === 'ltr'
? _this.moveToDay(utils.addDays(date, -1))
: _this.moveToDay(utils.addDays(date, 1));
break;
case 'right':
theme.direction === 'ltr'
? _this.moveToDay(utils.addDays(date, 1))
: _this.moveToDay(utils.addDays(date, -1));
break;
default:
// if keycode is not handled, stop execution
return;
}
// if event was handled prevent other side effects (e.g. page scroll)
event.preventDefault();
};
_this.renderWeeks = function () {
var utils = _this.props.utils;
var currentMonth = _this.state.currentMonth;
var weeks = utils.getWeekArray(currentMonth);
return weeks.map(function (week) { return (createElement("div", { key: "week-" + week[0].toString(), className: _this.props.classes.week }, _this.renderDays(week))); });
};
_this.renderDays = function (week) {
var _a = _this.props, date = _a.date, renderDay = _a.renderDay, utils = _a.utils;
var selectedDate = utils.startOfDay(date);
var currentMonthNumber = utils.getMonth(_this.state.currentMonth);
var now = utils.date();
return week.map(function (day) {
var disabled = _this.shouldDisableDate(day);
var dayInCurrentMonth = utils.getMonth(day) === currentMonthNumber;
var dayComponent = (createElement(Day$1, { current: utils.isSameDay(day, now), hidden: !dayInCurrentMonth, disabled: disabled, selected: utils.isSameDay(selectedDate, day) }, utils.getDayText(day)));
if (renderDay) {
dayComponent = renderDay(day, selectedDate, dayInCurrentMonth, dayComponent);
}
return (createElement(DayWrapper, { key: day.toString(), value: day, dayInCurrentMonth: dayInCurrentMonth, disabled: disabled, onSelect: _this.onDateSelect }, dayComponent));
});
};
return _this;
}
Calendar.getDerivedStateFromProps = function (nextProps, state) {
if (!nextProps.utils.isEqual(nextProps.date, state.lastDate)) {
return {
lastDate: nextProps.date,
currentMonth: nextProps.utils.getStartOfMonth(nextProps.date),
};
}
return null;
};
Calendar.prototype.componentDidMount = function () {
var _a = this.props, date = _a.date, minDate = _a.minDate, maxDate = _a.maxDate, utils = _a.utils, disableFuture = _a.disableFuture, disablePast = _a.disablePast;
if (this.shouldDisableDate(date)) {
this.onDateSelect(findClosestEnabledDate({
date: date,
utils: utils,
minDate: minDate,
maxDate: maxDate,
disablePast: Boolean(disablePast),
disableFuture: Boolean(disablePast),
shouldDisableDate: this.shouldDisableDate,
}), false);
}
};
Calendar.prototype.render = function () {
var _a = this.state, currentMonth = _a.currentMonth, slideDirection = _a.slideDirection;
var _b = this.props, classes = _b.classes, utils = _b.utils, allowKeyboardControl = _b.allowKeyboardControl;
return (createElement(Fragment, null,
allowKeyboardControl && (createElement(EventListener, { target: "window", onKeyDown: this.handleKeyDown })),
createElement(CalendarHeader$1, { slideDirection: slideDirection, currentMonth: currentMonth, onMonthChange: this.handleChangeMonth, leftArrowIcon: this.props.leftArrowIcon, rightArrowIcon: this.props.rightArrowIcon, disablePrevMonth: this.shouldDisablePrevMonth(), disableNextMonth: this.shouldDisableNextMonth() }),
createElement(SlideTransition$1, { slideDirection: slideDirection, transKey: currentMonth.toString(), className: classes.transitionContainer },
createElement("div", {
// @ts-ignore Autofocus required for getting work keyboard navigation feature
autoFocus: true }, this.renderWeeks()))));
};
Calendar.propTypes = {
date: object.isRequired,
minDate: DomainPropTypes.date,
maxDate: DomainPropTypes.date,
classes: object.isRequired,
onChange: func.isRequired,
disablePast: bool,
disableFuture: bool,
leftArrowIcon: node,
rightArrowIcon: node,
renderDay: func,
theme: object.isRequired,
shouldDisableDate: func,
utils: object.isRequired,
allowKeyboardControl: bool,
innerRef: any,
};
Calendar.defaultProps = {
minDate: '1900-01-01',
maxDate: '2100-01-01',
disablePast: false,
disableFuture: false,
leftArrowIcon: undefined,
rightArrowIcon: undefined,
renderDay: undefined,
allowKeyboardControl: false,
shouldDisableDate: function () { return false; },
};
return Calendar;
}(Component));
var styles$6 = function (theme) { return ({
transitionContainer: {
minHeight: 36 * 6,
marginTop: theme.spacing.unit * 1.5,
},
week: {
display: 'flex',
justifyContent: 'center',
},
}); };
var Calendar$1 = withStyles(styles$6, {
name: 'MuiPickersCalendar',
withTheme: true,
})(WithUtils()(Calendar));
var Year = /** @class */ (function (_super) {
__extends(Year, _super);
function Year() {
var _this = _super !== null && _super.apply(this, arguments) || this;
_this.handleClick = function () {
_this.props.onSelect(_this.props.value);
};
return _this;
}
Year.prototype.render = function () {
var _a;
var _b = this.props, classes = _b.classes, selected = _b.selected, disabled = _b.disabled, value = _b.value, children = _b.children, other = __rest(_b, ["classes", "selected", "disabled", "value", "children"]);
return (createElement(Typography, __assign({ role: "button", component: "div", className: classnames(classes.root, (_a = {},
_a[classes.selected] = selected,
_a[classes.disabled] = disabled,
_a)), tabIndex: disabled ? -1 : 0, onClick: this.handleClick, onKeyPress: this.handleClick, color: selected ? 'primary' : 'default', variant: selected ? 'h5' : 'subtitle1' }, other), children));
};
Year.propTypes = {
children: node.isRequired,
classes: object.isRequired,
disabled: bool,
onSelect: func.isRequired,
selected: bool,
value: any.isRequired,
innerRef: any,
};
Year.defaultProps = {
selected: false,
disabled: false,
};
return Year;
}(PureComponent));
var styles$7 = function (theme) {
return createStyles({
root: {
height: theme.spacing.unit * 5,
display: 'flex',
alignItems: 'center',
justifyContent: 'center',
cursor: 'pointer',
outline: 'none',
'&:focus': {
color: theme.palette.primary.main,
fontWeight: theme.typography.fontWeightMedium,
},
},
selected: {
margin: '10px 0',
fontWeight: theme.typography.fontWeightMedium,
},
disabled: {
pointerEvents: 'none',
color: theme.palette.text.hint,
},
});
};
var Year$1 = withStyles(styles$7, { name: 'MuiPickersYear' })(Year);
var YearSelection = /** @class */ (function (_super) {
__extends(YearSelection, _super);
function YearSelection() {
var _this = _super !== null && _super.apply(this, arguments) || this;
_this.selectedYearRef = undefined;
_this.getSelectedYearRef = function (ref) {
_this.selectedYearRef = ref;
};
_this.scrollToCurrentYear = function (domNode) {
var animateYearScrolling = _this.props.animateYearScrolling;
var currentYearElement = findDOMNode(domNode);
if (currentYearElement && currentYearElement.scrollIntoView) {
if (animateYearScrolling) {
setTimeout(function () { return currentYearElement.scrollIntoView({ behavior: 'smooth' }); }, 100);
}
else {
currentYearElement.scrollIntoView();
}
}
};
_this.componentDidMount = function () {
if (_this.selectedYearRef) {
_this.scrollToCurrentYear(_this.selectedYearRef);
}
};
_this.onYearSelect = function (year) {
var _a = _this.props, date = _a.date, onChange = _a.onChange, utils = _a.utils;
var newDate = utils.setYear(date, year);
onChange(newDate);
};
return _this;
}
YearSelection.prototype.render = function () {
var _this = this;
var _a = this.props, minDate = _a.minDate, maxDate = _a.maxDate, date = _a.date, classes = _a.classes, disablePast = _a.disablePast, disableFuture = _a.disableFuture, utils = _a.utils;
var currentYear = utils.getYear(date);
return (createElement("div", { className: classes.container }, utils.getYearRange(minDate, maxDate).map(function (year) {
var yearNumber = utils.getYear(year);
var selected = yearNumber === currentYear;
return (createElement(Year$1, { key: utils.getYearText(year), selected: selected, value: yearNumber, onSelect: _this.onYearSelect,
// @ts-ignore
ref: selected ? _this.getSelectedYearRef : undefined, disabled: (disablePast && utils.isBeforeYear(year, utils.date())) ||
(disableFuture && utils.isAfterYear(year, utils.date())) }, utils.getYearText(year)));
})));
};
YearSelection.propTypes = {
date: shape({}).isRequired,
minDate: DomainPropTypes.date,
maxDate: DomainPropTypes.date,
classes: object.isRequired,
onChange: func.isRequired,
disablePast: bool,
disableFuture: bool,
animateYearScrolling: bool,
utils: object.isRequired,
innerRef: any,
};
YearSelection.defaultProps = {
animateYearScrolling: false,
};
return YearSelection;
}(PureComponent));
var styles$8 = createStyles({
container: {
maxHeight: 300,
overflowY: 'auto',
justifyContent: 'center',
},
});
var YearSelection$1 = withStyles(styles$8, { name: 'MuiPickersYearSelection' })(WithUtils()(YearSelection));
var DatePicker = /** @class */ (function (_super) {
__extends(DatePicker, _super);
function DatePicker() {
var _this = _super !== null && _super.apply(this, arguments) || this;
_this.state = {
showYearSelection: Boolean(_this.props.openToYearSelection),
};
_this.handleYearSelect = function (date) {
_this.props.onChange(date, false);
_this.openCalendar();
};
_this.openYearSelection = function () {
_this.setState({ showYearSelection: true });
};
_this.openCalendar = function () {
_this.setState({ showYearSelection: false });
};
return _this;
}
Object.defineProperty(DatePicker.prototype, "date", {
get: function () {
return this.props.utils.startOfDay(this.props.date);
},
enumerable: true,
configurable: true
});
Object.defineProperty(DatePicker.prototype, "minDate", {
get: function () {
return this.props.utils.date(this.props.minDate);
},
enumerable: true,
configurable: true
});
Object.defineProperty(DatePicker.prototype, "maxDate", {
get: function () {
return this.props.utils.date(this.props.maxDate);
},
enumerable: true,
configurable: true
});
DatePicker.prototype.render = function () {
var showYearSelection = this.state.showYearSelection;
var _a = this.props, disablePast = _a.disablePast, disableFuture = _a.disableFuture, onChange = _a.onChange, animateYearScrolling = _a.animateYearScrolling, leftArrowIcon = _a.leftArrowIcon, rightArrowIcon = _a.rightArrowIcon, renderDay = _a.renderDay, utils = _a.utils, shouldDisableDate = _a.shouldDisableDate, allowKeyboardControl = _a.allowKeyboardControl;
return (createElement(Fragment, null,
createElement(PickerToolbar$1, null,
createElement(ToolbarButton$1, { variant: "subtitle1", onClick: this.openYearSelection, selected: showYearSelection, label: utils.getYearText(this.date) }),
createElement(ToolbarButton$1, { variant: "h4", onClick: this.openCalendar, selected: !showYearSelection, label: utils.getDatePickerHeaderText(this.date) })),
this.props.children,
showYearSelection ? (createElement(YearSelection$1, { date: this.date, onChange: this.handleYearSelect, minDate: this.minDate, maxDate: this.maxDate, disablePast: disablePast, disableFuture: disableFuture, animateYearScrolling: animateYearScrolling })) : (createElement(Calendar$1, { date: this.date, onChange: onChange, disablePast: disablePast, disableFuture: disableFuture, minDate: this.minDate, maxDate: this.maxDate, leftArrowIcon: leftArrowIcon, rightArrowIcon: rightArrowIcon, renderDay: renderDay, shouldDisableDate: shouldDisableDate, allowKeyboardControl: allowKeyboardControl }))));
};
DatePicker.propTypes = {
date: object.isRequired,
minDate: DomainPropTypes.date,
maxDate: DomainPropTypes.date,
onChange: func.isRequired,
disablePast: bool,
disableFuture: bool,
animateYearScrolling: bool,
openToYearSelection: bool,
children: node,
leftArrowIcon: node,
rightArrowIcon: node,
renderDay: func,
utils: object.isRequired,
shouldDisableDate: func,
allowKeyboardControl: bool,
initialFocusedDate: DomainPropTypes.date,
};
DatePicker.defaultProps = {
minDate: '1900-01-01',
maxDate: '2100-01-01',
disablePast: false,
disableFuture: false,
allowKeyboardControl: false,
animateYearScrolling: undefined,
openToYearSelection: false,
children: null,
leftArrowIcon: undefined,
rightArrowIcon: undefined,
renderDay: undefined,
shouldDisableDate: undefined,
};
return DatePicker;
}(PureComponent));
var DatePicker$1 = WithUtils()(DatePicker);
var DatePickerModal = function (props) {
var allowKeyboardControl = props.allowKeyboardControl, animateYearScrolling = props.animateYearScrolling, autoOk = props.autoOk, disableFuture = props.disableFuture, disablePast = props.disablePast, format = props.format, forwardedRef = props.forwardedRef, labelFunc = props.labelFunc, leftArrowIcon = props.leftArrowIcon, maxDate = props.maxDate, minDate = props.minDate, initialFocusedDate = props.initialFocusedDate, onChange = props.onChange, openToYearSelection = props.openToYearSelection, renderDay = props.renderDay, rightArrowIcon = props.rightArrowIcon, shouldDisableDate = props.shouldDisableDate, value = props.value, other = __rest(props, ["allowKeyboardControl", "animateYearScrolling", "autoOk", "disableFuture", "disablePast", "format", "forwardedRef", "labelFunc", "leftArrowIcon", "maxDate", "minDate", "initialFocusedDate", "onChange", "openToYearSelection", "renderDay", "rightArrowIcon", "shouldDisableDate", "value"]);
return (createElement(BasePicker$1, __assign({}, props), function (_a) {
var date = _a.date, utils = _a.utils, handleAccept = _a.handleAccept, handleChange = _a.handleChange, handleClear = _a.handleClear, handleDismiss = _a.handleDismiss, handleSetTodayDate = _a.handleSetTodayDate, handleTextFieldChange = _a.handleTextFieldChange, isAccepted = _a.isAccepted;
return (createElement(ModalWrapper, __assign({ disableFuture: disableFuture, disablePast: disablePast, format: format || utils.dateFormat, labelFunc: labelFunc, maxDate: maxDate, minDate: minDate, onAccept: handleAccept, onChange: handleTextFieldChange, onClear: handleClear, onDismiss: handleDismiss, onSetToday: handleSetTodayDate, ref: forwardedRef, value: value, isAccepted: isAccepted }, other),
createElement(DatePicker$1, { date: date, allowKeyboardControl: allowKeyboardControl, animateYearScrolling: animateYearScrolling, disableFuture: disableFuture, disablePast: disablePast, leftArrowIcon: leftArrowIcon, maxDate: maxDate, minDate: minDate, onChange: handleChange, openToYearSelection: openToYearSelection, renderDay: renderDay, rightArrowIcon: rightArrowIcon, shouldDisableDate: shouldDisableDate })));
}));
};
DatePickerModal.propTypes = {
/** Datepicker value */
value: DomainPropTypes.date,
/** Min selectable date */
minDate: DomainPropTypes.date,
/** Max selectable date */
maxDate: DomainPropTypes.date,
/** Initial focused date when calendar opens, if no value is provided */
initialFocusedDate: DomainPropTypes.date,
/** Date format string for input */
format: string,
/** Callback firing when date accepted [(date: Date) => void] */
onChange: func.isRequired,
/** Auto accept date on selection */
autoOk: bool,
/** Disable past dates */
disablePast: bool,
/** Disable future dates */
disableFuture: bool,
/** To animate scrolling to current year (with scrollIntoView) */
animateYearScrolling: bool,
/** Open datepicker from year selection */
openToYearSelection: bool,
/**
* Allow to specify dynamic label for text field
* [(date: Date, invalidLabel: string) => string]
*/
labelFunc: func,
/** Left arrow icon */
leftArrowIcon: node,
/** Right arrow icon */
rightArrowIcon: node,
/**
* Custom renderer for day
* [(date: Date, nowSelectedDate: Date, isInCurrentMonth: boolean) => ReactElement]
*/
renderDay: func,
/** Disable specific date [(date: Date) => boolean] */
shouldDisableDate: func,
/** Enables keyboard listener for moving between days in calendar */
allowKeyboardControl: bool,
forwardedRef: oneOfType([func, object]),
};
DatePickerModal.defaultProps = {
value: new Date(),
format: undefined,
autoOk: false,
minDate: '1900-01-01',
maxDate: '2100-01-01',
initialFocusedDate: undefined,
disableFuture: false,
disablePast: false,
animateYearScrolling: false,
openToYearSelection: false,
allowKeyboardControl: true,
leftArrowIcon: 'keyboard_arrow_left',
rightArrowIcon: 'keyboard_arrow_right',
renderDay: undefined,
labelFunc: undefined,
shouldDisableDate: undefined,
forwardedRef: undefined,
};
var DatePickerModal$1 = forwardRef(function (props, ref) { return (createElement(DatePickerModal, __assign({}, props, { forwardedRef: ref }))); });
// Workaround to work with synthetic imports both for jest and rollup
// https://github.com/rollup/rollup/issues/670
// https://github.com/kulshekhar/ts-jest/issues/146
var keycode$2 = keycode_;
var InlineWrapper = /** @class */ (function (_super) {
__extends(InlineWrapper, _super);
function InlineWrapper() {
var _this = _super !== null && _super.apply(this, arguments) || this;
_this.state = {
anchorEl: null,
};
_this.open = function (e) {
_this.setState({ anchorEl: e.currentTarget });
if (_this.props.onOpen) {
_this.props.onOpen();
}
};
_this.close = function () {
_this.setState({ anchorEl: null });
if (_this.props.onClose) {
_this.props.onClose();
}
};
_this.handleKeyDown = function (event) {
switch (keycode$2(event)) {
case 'enter': {
_this.props.handleAccept();
_this.close();
break;
}
default:
// if keycode is not handled, stop execution
return;
}
// if event was handled prevent other side effects
event.preventDefault();
};
return _this;
}
InlineWrapper.getDerivedStateFromProps = function (nextProps) {
// only if accept = true close the popover
if (nextProps.isAccepted) {
return {
anchorEl: null,
};
}
return null;
};
InlineWrapper.prototype.render = function () {
var _a = this.props, value = _a.value, format = _a.format, children = _a.children, onOpen = _a.onOpen, onClose = _a.onClose, PopoverProps = _a.PopoverProps, isAccepted = _a.isAccepted, keyboard = _a.keyboard, onlyCalendar = _a.onlyCalendar, classes = _a.classes, handleAccept = _a.handleAccept, other = __rest(_a, ["value", "format", "children", "onOpen", "onClose", "PopoverProps", "isAccepted", "keyboard", "onlyCalendar", "classes", "handleAccept"]);
var isOpen = Boolean(this.state.anchorEl);
return (createElement(Fragment, null,
isOpen && (createElement(EventListener, { target: "window", onKeyDown: this.handleKeyDown })),
createElement(DateTextField$1, __assign({ value: value, format: format, onClick: this.open, keyboard: keyboard }, other)),
createElement(Popover, __assign({ id: "picker-popover", open: isOpen, anchorEl: this.state.anchorEl, onClose: this.close, classes: {
paper: classes.popoverPaper,
}, anchorOrigin: {
vertical: 'bottom',
horizontal: keyboard ? 'right' : 'center',
}, transformOrigin: {
vertical: 'top',
horizontal: keyboard ? 'right' : 'center',
}, children: children }, PopoverProps))));
};
InlineWrapper.propTypes = {
/** Show only calendar for datepicker in popover mode */
onlyCalendar: bool,
/** Picker value */
value: DomainPropTypes.date,
/** On open callback [(e: Event) => void] */
onOpen: func,
/** On close callback [(e: Event) => void] */
onClose: func,
/** Format string */
format: string,
/** Dialog props passed to material-ui Dialog */
PopoverProps: object,
labelFunc: func,
onClear: func,
isAccepted: bool,
handleAccept: func.isRequired,
children: node.isRequired,
keyboard: bool,
classes: object.isRequired,
innerRef: any,
};
InlineWrapper.defaultProps = {
value: new Date(),
labelFunc: undefined,
onlyCalendar: false,
format: undefined,
onClear: undefined,
onOpen: undefined,
onClose: undefined,
PopoverProps: undefined,
isAccepted: false,
keyboard: undefined,
};
return InlineWrapper;
}(PureComponent));
var styles$9 = {
popoverPaper: {
maxWidth: 310,
minWidth: 290,
paddingBottom: 8,
},
};
// @ts-ignore
var InlineWrapper$1 = withStyles(styles$9)(InlineWrapper);
var DatePickerInline = function (props) {
var allowKeyboardControl = props.allowKeyboardControl, animateYearScrolling = props.animateYearScrolling, disableFuture = props.disableFuture, disablePast = props.disablePast, format = props.format, forwardedRef = props.forwardedRef, labelFunc = props.labelFunc, leftArrowIcon = props.leftArrowIcon, maxDate = props.maxDate, minDate = props.minDate, initialFocusedDate = props.initialFocusedDate, onChange = props.onChange, openToYearSelection = props.openToYearSelection, renderDay = props.renderDay, rightArrowIcon = props.rightArrowIcon, shouldDisableDate = props.shouldDisableDate, value = props.value, autoOk = props.autoOk, onlyCalendar = props.onlyCalendar, other = __rest(props, ["allowKeyboardControl", "animateYearScrolling", "disableFuture", "disablePast", "format", "forwardedRef", "labelFunc", "leftArrowIcon", "maxDate", "minDate", "initialFocusedDate", "onChange", "openToYearSelection", "renderDay", "rightArrowIcon", "shouldDisableDate", "value", "autoOk", "onlyCalendar"]);
var ComponentToShow = onlyCalendar ? Calendar$1 : DatePicker$1;
return (createElement(BasePicker$1, __assign({}, props, { autoOk: true }), function (_a) {
var date = _a.date, utils = _a.utils, isAccepted = _a.isAccepted, handleChange = _a.handleChange, handleTextFieldChange = _a.handleTextFieldChange, handleAccept = _a.handleAccept;
return (createElement(InlineWrapper$1, __assign({ disableFuture: disableFuture, disablePast: disablePast, format: format || utils.dateFormat, labelFunc: labelFunc, maxDate: maxDate, minDate: minDate, onChange: handleTextFieldChange, innerRef: forwardedRef, value: value, isAccepted: isAccepted, handleAccept: handleAccept }, other),
createElement(ComponentToShow, { date: date, allowKeyboardControl: allowKeyboardControl, animateYearScrolling: animateYearScrolling, disableFuture: disableFuture, disablePast: disablePast, leftArrowIcon: leftArrowIcon, maxDate: maxDate, minDate: minDate, onChange: handleChange, openToYearSelection: openToYearSelection, renderDay: renderDay, rightArrowIcon: rightArrowIcon, shouldDisableDate: shouldDisableDate })));
}));
};
DatePickerInline.propTypes = {
onlyCalendar: bool,
value: DomainPropTypes.date,
minDate: DomainPropTypes.date,
maxDate: DomainPropTypes.date,
initialFocusedDate: DomainPropTypes.date,
format: string,
onChange: func.isRequired,
disablePast: bool,
disableFuture: bool,
animateYearScrolling: bool,
openToYearSelection: bool,
labelFunc: func,
leftArrowIcon: node,
rightArrowIcon: node,
renderDay: func,
shouldDisableDate: func,
allowKeyboardControl: bool,
forwardedRef: oneOfType([func, object]),
autoOk: bool,
};
DatePickerInline.defaultProps = {
value: new Date(),
format: undefined,
minDate: '1900-01-01',
maxDate: '2100-01-01',
initialFocusedDate: undefined,
disableFuture: false,
disablePast: false,
animateYearScrolling: false,
openToYearSelection: false,
allowKeyboardControl: true,
leftArrowIcon: 'keyboard_arrow_left',
rightArrowIcon: 'keyboard_arrow_right',
renderDay: undefined,
labelFunc: undefined,
shouldDisableDate: undefined,
forwardedRef: undefined,
autoOk: undefined,
onlyCalendar: false,
};
var DatePickerInline$1 = forwardRef(function (props, ref) { return (createElement(DatePickerInline, __assign({}, props, { forwardedRef: ref }))); });
var center = {
x: 260 / 2,
y: 260 / 2,
};
var basePoint = {
x: center.x,
y: 0,
};
var cx = basePoint.x - center.x;
var cy = basePoint.y - center.y;
var rad2deg = function (rad) { return rad * 57.29577951308232; };
var getAngleValue = function (step, offsetX, offsetY) {
var x = offsetX - center.x;
var y = offsetY - center.y;
var atan = Math.atan2(cx, cy) - Math.atan2(x, y);
var deg = rad2deg(atan);
deg = Math.round(deg / step) * step;
deg %= 360;
var value = Math.floor(deg / step) || 0;
var delta = Math.pow(x, 2) + Math.pow(y, 2);
var distance = Math.sqrt(delta);
return { value: value, distance: distance };
};
var getHours = function (offsetX, offsetY, ampm) {
// tslint:disable-next-line
var _a = getAngleValue(30, offsetX, offsetY), value = _a.value, distance = _a.distance;
value = value || 12;
if (!ampm) {
if (distance < 90) {
value += 12;
value %= 24;
}
}
else {
value %= 12;
}
return value;
};
var getMinutes = function (offsetX, offsetY, step) {
if (step === void 0) { step = 6; }
var value = getAngleValue(step, offsetX, offsetY).value;
return value;
};
var convertToMeridiem = function (time, meridiem, ampm, utils) {
if (ampm) {
var currentMeridiem = utils.getHours(time) >= 12 ? 'pm' : 'am';
if (currentMeridiem !== meridiem) {
var hours = meridiem === 'am'
? utils.getHours(time) - 12
: utils.getHours(time) + 12;
return utils.setHours(time, hours);
}
}
return time;
};
var ClockType;
(function (ClockType) {
ClockType["HOURS"] = "hours";
ClockType["MINUTES"] = "minutes";
ClockType["SECONDS"] = "seconds";
})(ClockType || (ClockType = {}));
var ClockType$1 = ClockType;
var ClockPointer = /** @class */ (function (_super) {
__extends(ClockPointer, _super);
function ClockPointer() {
var _this = _super !== null && _super.apply(this, arguments) || this;
_this.state = {
toAnimateTransform: false,
previousType: undefined,
};
_this.getAngleStyle = function () {
var _a = _this.props, value = _a.value, isInner = _a.isInner, type = _a.type;
var max = type === ClockType$1.HOURS ? 12 : 60;
var angle = (360 / max) * value;
if (type === ClockType$1.HOURS && value > 12) {
angle -= 360; // round up angle to max 360 degrees
}
return {
height: isInner ? '26%' : '40%',
transform: "rotateZ(" + angle + "deg)",
};
};
return _this;
}
ClockPointer.prototype.render = function () {
var _a, _b;
var _c = this.props, classes = _c.classes, hasSelected = _c.hasSelected;
return (createElement("div", { style: this.getAngleStyle(), className: classnames(classes.pointer, (_a = {},
_a[classes.animateTransform] = this.state.toAnimateTransform,
_a)) },
createElement("div", { className: classnames(classes.thumb, (_b = {},
_b[classes.noPoint] = hasSelected,
_b)) })));
};
ClockPointer.propTypes = {
classes: object.isRequired,
value: number.isRequired,
hasSelected: bool.isRequired,
isInner: bool.isRequired,
innerRef: any,
type: oneOf(Object.keys(ClockType$1).map(function (key) { return ClockType$1[key]; }))
.isRequired,
};
ClockPointer.getDerivedStateFromProps = function (nextProps, state) {
if (nextProps.type !== state.previousType) {
return {
toAnimateTransform: true,
previousType: nextProps.type,
};
}
return {
toAnimateTransform: false,
previousType: nextProps.type,
};
};
return ClockPointer;
}(Component));
var styles$a = function (theme) {
return createStyles({
pointer: {
width: 2,
backgroundColor: theme.palette.primary.main,
position: 'absolute',
left: 'calc(50% - 1px)',
bottom: '50%',
transformOrigin: 'center bottom 0px',
},
animateTransform: {
transition: theme.transitions.create(['transform', 'height']),
},
thumb: {
width: 4,
height: 4,
backgroundColor: theme.palette.common.white,
borderRadius: '100%',
position: 'absolute',
top: -21,
left: -15,
border: "14px solid " + theme.palette.primary.main,
boxSizing: 'content-box',
},
noPoint: {
backgroundColor: theme.palette.primary.main,
},
});
};
var ClockPointer$1 = withStyles(styles$a, {
name: 'MuiPickersClockPointer',
})(ClockPointer);
var Clock = /** @class */ (function (_super) {
__extends(Clock, _super);
function Clock() {
var _this = _super !== null && _super.apply(this, arguments) || this;
_this.isMoving = false;
_this.handleTouchMove = function (e) {
_this.isMoving = true;
_this.setTime(e);
};
_this.handleTouchEnd = function (e) {
if (_this.isMoving) {
_this.setTime(e, true);
_this.isMoving = false;
}
};
_this.handleMove = function (e) {
e.preventDefault();
e.stopPropagation();
// MouseEvent.which is deprecated, but MouseEvent.buttons is not supported in Safari
var isButtonPressed = typeof e.buttons === 'undefined'
? e.nativeEvent.which === 1
: e.buttons === 1;
if (isButtonPressed) {
_this.setTime(e.nativeEvent, false);
}
};
_this.handleMouseUp = function (e) {
if (_this.isMoving) {
_this.isMoving = false;
}
_this.setTime(e.nativeEvent, true);
};
_this.hasSelected = function () {
var _a = _this.props, type = _a.type, value = _a.value;
if (type === ClockType$1.HOURS) {
return true;
}
return value % 5 === 0;
};
return _this;
}
Clock.prototype.setTime = function (e, isFinish) {
if (isFinish === void 0) { isFinish = false; }
var offsetX = e.offsetX, offsetY = e.offsetY;
if (typeof offsetX === 'undefined') {
var rect = e.target.getBoundingClientRect();
offsetX = e.changedTouches[0].clientX - rect.left;
offsetY = e.changedTouches[0].clientY - rect.top;
}
var value = this.props.type === ClockType$1.SECONDS ||
this.props.type === ClockType$1.MINUTES
? getMinutes(offsetX, offsetY)
: getHours(offsetX, offsetY, Boolean(this.props.ampm));
this.props.onChange(value, isFinish);
};
Clock.prototype.render = function () {
var _a = this.props, classes = _a.classes, value = _a.value, children = _a.children, type = _a.type, ampm = _a.ampm;
var isPointerInner = !ampm && type === ClockType$1.HOURS && (value < 1 || value > 12);
return (createElement("div", { className: classes.container },
createElement("div", { className: classes.clock },
createElement("div", { role: "menu", tabIndex: -1, className: classes.squareMask, onTouchMove: this.handleTouchMove, onTouchEnd: this.handleTouchEnd, onMouseUp: this.handleMouseUp, onMouseMove: this.handleMove }),
createElement("div", { className: classes.pin }),
createElement(ClockPointer$1, { type: type, value: value, isInner: isPointerInner, hasSelected: this.hasSelected() }),
children)));
};
Clock.propTypes = {
type: oneOf(Object.keys(ClockType$1).map(function (key) { return ClockType$1[key]; }))
.isRequired,
classes: object.isRequired,
value: number.isRequired,
onChange: func.isRequired,
children: arrayOf(node).isRequired,
ampm: bool,
innerRef: any,
};
Clock.defaultProps = {
ampm: false,
};
return Clock;
}(Component));
var styles$b = function (theme) {
return createStyles({
container: {
display: 'flex',
justifyContent: 'center',
alignItems: 'flex-end',
margin: theme.spacing.unit * 4 + "px 0 " + theme.spacing.unit + "px",
},
clock: {
backgroundColor: 'rgba(0,0,0,.07)',
borderRadius: '50%',
height: 260,
width: 260,
position: 'relative',
pointerEvents: 'none',
zIndex: 1,
},
squareMask: {
width: '100%',
height: '100%',
position: 'absolute',
pointerEvents: 'auto',
outline: 'none',
touchActions: 'none',
userSelect: 'none',
'&:active': {
cursor: 'move',
},
},
pin: {
width: 6,
height: 6,
borderRadius: '50%',
backgroundColor: theme.palette.primary.main,
position: 'absolute',
top: '50%',
left: '50%',
transform: 'translate(-50%, -50%)',
},
});
};
var Clock$1 = withStyles(styles$b, {
name: 'MuiPickersClock',
})(Clock);
var positions = {
0: [0, 40],
1: [55, 19.6],
2: [94.4, 59.5],
3: [109, 114],
4: [94.4, 168.5],
5: [54.5, 208.4],
6: [0, 223],
7: [-54.5, 208.4],
8: [-94.4, 168.5],
9: [-109, 114],
10: [-94.4, 59.5],
11: [-54.5, 19.6],
12: [0, 5],
13: [36.9, 49.9],
14: [64, 77],
15: [74, 114],
16: [64, 151],
17: [37, 178],
18: [0, 188],
19: [-37, 178],
20: [-64, 151],
21: [-74, 114],
22: [-64, 77],
23: [-37, 50],
};
var ClockNumber = /** @class */ (function (_super) {
__extends(ClockNumber, _super);
function ClockNumber() {
var _this = _super !== null && _super.apply(this, arguments) || this;
_this.getTransformStyle = function (index) {
var position = positions[index];
return {
transform: "translate(" + position[0] + "px, " + position[1] + "px",
};
};
return _this;
}
ClockNumber.prototype.render = function () {
var _a;
var _b = this.props, selected = _b.selected, label = _b.label, index = _b.index, classes = _b.classes, isInner = _b.isInner;
var className = classnames(classes.clockNumber, (_a = {},
_a[classes.selected] = selected,
_a));
return (createElement(Typography, { variant: isInner ? 'body2' : 'subtitle1', component: "span", className: className, style: this.getTransformStyle(index) }, label));
};
ClockNumber.propTypes = {
index: number.isRequired,
label: string.isRequired,
selected: bool.isRequired,
classes: object.isRequired,
isInner: bool,
innerRef: any,
};
ClockNumber.defaultProps = {
isInner: false,
};
return ClockNumber;
}(Component));
var styles$c = function (theme) {
var size = theme.spacing.unit * 4;
return createStyles({
clockNumber: {
width: size,
height: size,
userSelect: 'none',
position: 'absolute',
left: "calc(50% - " + size / 2 + "px)",
display: 'inline-flex',
justifyContent: 'center',
alignItems: 'center',
borderRadius: '50%',
color: theme.palette.type === 'light'
? theme.palette.text.primary
: theme.palette.text.hint,
},
selected: {
color: theme.palette.common.white,
},
});
};
var ClockNumber$1 = withStyles(styles$c, {
name: 'MuiPickersClockNumber',
})(ClockNumber);
var getHourNumbers = function (_a) {
var ampm = _a.ampm, utils = _a.utils, date = _a.date;
var currentHours = utils.getHours(date);
var hourNumbers = [];
var startHour = ampm ? 1 : 0;
var endHour = ampm ? 12 : 23;
var isSelected = function (hour) {
if (ampm) {
if (hour === 12) {
return currentHours === 12 || currentHours === 0;
}
return currentHours === hour || currentHours - 12 === hour;
}
return currentHours === hour;
};
for (var hour = startHour; hour <= endHour; hour += 1) {
var label = hour.toString();
if (hour === 0) {
label = '00';
}
var props = {
index: hour,
label: utils.formatNumber(label),
selected: isSelected(hour),
isInner: !ampm && (hour === 0 || hour > 12),
};
hourNumbers.push(createElement(ClockNumber$1, __assign({ key: hour }, props)));
}
return hourNumbers;
};
var getMinutesNumbers = function (_a) {
var value = _a.value, utils = _a.utils;
var f = utils.formatNumber;
return [
createElement(ClockNumber$1, { label: f('00'), selected: value === 0, index: 12, key: 12 }),
createElement(ClockNumber$1, { label: f('05'), selected: value === 5, index: 1, key: 1 }),
createElement(ClockNumber$1, { label: f('10'), selected: value === 10, index: 2, key: 2 }),
createElement(ClockNumber$1, { label: f('15'), selected: value === 15, index: 3, key: 3 }),
createElement(ClockNumber$1, { label: f('20'), selected: value === 20, index: 4, key: 4 }),
createElement(ClockNumber$1, { label: f('25'), selected: value === 25, index: 5, key: 5 }),
createElement(ClockNumber$1, { label: f('30'), selected: value === 30, index: 6, key: 6 }),
createElement(ClockNumber$1, { label: f('35'), selected: value === 35, index: 7, key: 7 }),
createElement(ClockNumber$1, { label: f('40'), selected: value === 40, index: 8, key: 8 }),
createElement(ClockNumber$1, { label: f('45'), selected: value === 45, index: 9, key: 9 }),
createElement(ClockNumber$1, { label: f('50'), selected: value === 50, index: 10, key: 10 }),
createElement(ClockNumber$1, { label: f('55'), selected: value === 55, index: 11, key: 11 }),
];
};
var TimePickerView = /** @class */ (function (_super) {
__extends(TimePickerView, _super);
function TimePickerView() {
var _this = _super !== null && _super.apply(this, arguments) || this;
_this.getViewProps = function () {
var _a = _this.props, type = _a.type, ampm = _a.ampm, date = _a.date, utils = _a.utils;
switch (type) {
case ClockType$1.HOURS:
return {
value: utils.getHours(date),
children: getHourNumbers({ date: date, ampm: Boolean(ampm), utils: utils }),
onChange: _this.handleHourChange,
};
case ClockType$1.MINUTES:
var minutesValue = utils.getMinutes(date);
return {
value: minutesValue,
children: getMinutesNumbers({ value: minutesValue, utils: utils }),
onChange: _this.handleMinutesChange,
};
case ClockType$1.SECONDS:
var secondsValue = utils.getSeconds(date);
return {
value: secondsValue,
children: getMinutesNumbers({ value: secondsValue, utils: utils }),
onChange: _this.handleSecondsChange,
};
default:
throw new Error('You must provide the type for TimePickerView');
}
};
_this.handleHourChange = function (hours, isFinish) {
var _a = _this.props, date = _a.date, utils = _a.utils;
var updatedTime = utils.setHours(date, hours);
_this.props.onHourChange(updatedTime, isFinish);
};
_this.handleMinutesChange = function (minutes, isFinish) {
var _a = _this.props, date = _a.date, utils = _a.utils;
var updatedTime = utils.setMinutes(date, minutes);
_this.props.onMinutesChange(updatedTime, isFinish);
};
_this.handleSecondsChange = function (seconds, isFinish) {
var _a = _this.props, date = _a.date, utils = _a.utils;
var updatedTime = utils.setSeconds(date, seconds);
_this.props.onSecondsChange(updatedTime, isFinish);
};
return _this;
}
TimePickerView.prototype.render = function () {
var _a = this.props, ampm = _a.ampm, type = _a.type;
var viewProps = this.getViewProps();
return createElement(Clock$1, __assign({ type: type, ampm: ampm }, viewProps));
};
TimePickerView.propTypes = {
date: object.isRequired,
onHourChange: func.isRequired,
onMinutesChange: func.isRequired,
onSecondsChange: func.isRequired,
utils: object.isRequired,
ampm: bool,
type: oneOf(Object.keys(ClockType$1).map(function (key) { return ClockType$1[key]; }))
.isRequired,
};
TimePickerView.defaultProps = {
ampm: true,
};
return TimePickerView;
}(PureComponent));
var TimePickerView$1 = WithUtils()(TimePickerView);
var TimePicker = /** @class */ (function (_super) {
__extends(TimePicker, _super);
function TimePicker() {
var _this = _super !== null && _super.apply(this, arguments) || this;
_this.state = {
openView: ClockType$1.HOURS,
meridiemMode: _this.props.utils.getHours(_this.props.date) >= 12 ? 'pm' : 'am',
};
_this.setMeridiemMode = function (mode) { return function () {
_this.setState({ meridiemMode: mode }, function () {
return _this.handleChange({
time: _this.props.date,
isFinish: false,
openMinutes: false,
openSeconds: false,
});
});
}; };
_this.handleChange = function (_a) {
var time = _a.time, isFinish = _a.isFinish, openMinutes = _a.openMinutes, openSeconds = _a.openSeconds;
var withMeridiem = convertToMeridiem(time, _this.state.meridiemMode, Boolean(_this.props.ampm), _this.props.utils);
if (isFinish) {
if (!openMinutes && !openSeconds) {
_this.props.onChange(withMeridiem, isFinish);
return;
}
if (openMinutes) {
_this.openMinutesView();
}
if (openSeconds) {
_this.openSecondsView();
}
}
_this.props.onChange(withMeridiem, false);
};
_this.handleHourChange = function (time, isFinish) {
_this.handleChange({
time: time,
isFinish: isFinish,
openMinutes: true,
openSeconds: false,
});
};
_this.handleMinutesChange = function (time, isFinish) {
_this.handleChange({
time: time,
isFinish: isFinish,
openMinutes: false,
openSeconds: Boolean(_this.props.seconds),
});
};
_this.handleSecondsChange = function (time, isFinish) {
_this.handleChange({
time: time,
isFinish: isFinish,
openMinutes: false,
openSeconds: false,
});
};
_this.openSecondsView = function () {
_this.setState({ openView: ClockType$1.SECONDS });
};
_this.openMinutesView = function () {
_this.setState({ openView: ClockType$1.MINUTES });
};
_this.openHourView = function () {
_this.setState({ openView: ClockType$1.HOURS });
};
return _this;
}
TimePicker.prototype.render = function () {
var _a;
var _b = this.props, classes = _b.classes, theme = _b.theme, date = _b.date, utils = _b.utils, ampm = _b.ampm, seconds = _b.seconds;
var _c = this.state, meridiemMode = _c.meridiemMode, openView = _c.openView;
var rtl = theme.direction === 'rtl';
var hourMinuteClassName = rtl
? classes.hourMinuteLabelReverse
: classes.hourMinuteLabel;
return (createElement(Fragment, null,
createElement(PickerToolbar$1, { className: classnames(classes.toolbar, (_a = {},
_a[classes.toolbarLeftPadding] = ampm,
_a)) },
createElement("div", { className: hourMinuteClassName },
createElement(ToolbarButton$1, { variant: "h2", onClick: this.openHourView, selected: openView === ClockType$1.HOURS, label: utils.getHourText(date, Boolean(ampm)) }),
createElement(ToolbarButton$1, { variant: "h2", label: ":", selected: false, className: classes.separator }),
createElement(ToolbarButton$1, { variant: "h2", onClick: this.openMinutesView, selected: openView === ClockType$1.MINUTES, label: utils.getMinuteText(date) }),
seconds && (createElement(Fragment, null,
createElement(ToolbarButton$1, { variant: "h2", label: ":", selected: false, className: classes.separator }),
createElement(ToolbarButton$1, { variant: "h2", onClick: this.openSecondsView, selected: openView === ClockType$1.SECONDS, label: utils.getSecondText(date) })))),
ampm && (createElement("div", { className: seconds
? classes.ampmSelectionWithSeconds
: classes.ampmSelection },
createElement(ToolbarButton$1, { className: classes.ampmLabel, selected: meridiemMode === 'am', variant: "subtitle1", label: utils.getMeridiemText('am'), onClick: this.setMeridiemMode('am') }),
createElement(ToolbarButton$1, { className: classes.ampmLabel, selected: meridiemMode === 'pm', variant: "subtitle1", label: utils.getMeridiemText('pm'), onClick: this.setMeridiemMode('pm') })))),
this.props.children,
createElement(TimePickerView$1, { date: date, type: this.state.openView, ampm: ampm, onHourChange: this.handleHourChange, onMinutesChange: this.handleMinutesChange, onSecondsChange: this.handleSecondsChange })));
};
TimePicker.propTypes = {
date: object.isRequired,
onChange: func.isRequired,
classes: object.isRequired,
theme: object.isRequired,
children: node,
utils: object.isRequired,
ampm: bool,
seconds: bool,
innerRef: any,
};
TimePicker.defaultProps = {
children: null,
ampm: true,
seconds: false,
};
return TimePicker;
}(Component));
var styles$d = function () {
return createStyles({
toolbar: {
flexDirection: 'row',
alignItems: 'center',
},
toolbarLeftPadding: {
paddingLeft: 50,
},
separator: {
margin: '0 4px 0 2px',
cursor: 'default',
},
ampmSelection: {
marginLeft: 20,
marginRight: -20,
},
ampmSelectionWithSeconds: {
marginLeft: 15,
marginRight: 10,
},
ampmLabel: {
fontSize: 18,
},
hourMinuteLabel: {
display: 'flex',
justifyContent: 'flex-end',
alignItems: 'flex-end',
},
hourMinuteLabelReverse: {
display: 'flex',
justifyContent: 'flex-end',
alignItems: 'flex-end',
flexDirection: 'row-reverse',
},
});
};
var TimePicker$1 = withStyles(styles$d, {
withTheme: true,
name: 'MuiPickersTimePicker',
})(WithUtils()(TimePicker));
var TimePickerModal = function (props) {
var value = props.value, format = props.format, autoOk = props.autoOk, onChange = props.onChange, ampm = props.ampm, forwardedRef = props.forwardedRef, seconds = props.seconds, other = __rest(props, ["value", "format", "autoOk", "onChange", "ampm", "forwardedRef", "seconds"]);
return (createElement(BasePicker$1, __assign({}, props), function (_a) {
var date = _a.date, utils = _a.utils, handleAccept = _a.handleAccept, handleChange = _a.handleChange, handleClear = _a.handleClear, handleDismiss = _a.handleDismiss, handleSetTodayDate = _a.handleSetTodayDate, handleTextFieldChange = _a.handleTextFieldChange, isAccepted = _a.isAccepted, pick12hOr24hFormat = _a.pick12hOr24hFormat;
return (createElement(ModalWrapper, __assign({ ref: forwardedRef, value: value, onClear: handleClear, onAccept: handleAccept, onChange: handleTextFieldChange, onDismiss: handleDismiss, onSetToday: handleSetTodayDate, isAccepted: isAccepted, format: pick12hOr24hFormat(utils.time12hFormat, utils.time24hFormat) }, other),
createElement(TimePicker$1, { date: date, onChange: handleChange, ampm: ampm, seconds: seconds })));
}));
};
TimePickerModal.propTypes = {
/** DateTimepicker value */
value: DomainPropTypes.date,
/** Date format string for input */
format: string,
/** Callback firing when date accepted [(date: Date) => void] */
onChange: func.isRequired,
/** Auto accept date on minute selection */
autoOk: bool,
/** 12h/24h view for hour selection clock */
ampm: bool,
/** Show the seconds view */
seconds: bool,
forwardedRef: oneOfType([func, object]),
};
TimePickerModal.defaultProps = {
value: new Date(),
format: undefined,
autoOk: false,
ampm: true,
forwardedRef: undefined,
seconds: false,
};
var TimePickerModal$1 = forwardRef(function (props, ref) { return (createElement(TimePickerModal, __assign({}, props, { forwardedRef: ref }))); });
var TimePickerInline = function (props) {
var value = props.value, format = props.format, onChange = props.onChange, ampm = props.ampm, forwardedRef = props.forwardedRef, seconds = props.seconds, other = __rest(props, ["value", "format", "onChange", "ampm", "forwardedRef", "seconds"]);
return (createElement(BasePicker$1, __assign({}, props, { autoOk: true }), function (_a) {
var date = _a.date, utils = _a.utils, handleChange = _a.handleChange, handleTextFieldChange = _a.handleTextFieldChange, isAccepted = _a.isAccepted, pick12hOr24hFormat = _a.pick12hOr24hFormat, handleAccept = _a.handleAccept;
return (createElement(InlineWrapper$1, __assign({ innerRef: forwardedRef, value: value, onChange: handleTextFieldChange, isAccepted: isAccepted, handleAccept: handleAccept, format: pick12hOr24hFormat(utils.time12hFormat, utils.time24hFormat) }, other),
createElement(TimePicker$1, { date: date, onChange: handleChange, ampm: ampm, seconds: seconds })));
}));
};
TimePickerInline.propTypes = {
value: DomainPropTypes.date,
format: string,
onChange: func.isRequired,
ampm: bool,
seconds: bool,
forwardedRef: oneOfType([func, object]),
};
TimePickerInline.defaultProps = {
ampm: true,
value: new Date(),
format: undefined,
forwardedRef: undefined,
seconds: false,
};
var TimePickerInline$1 = forwardRef(function (props, ref) { return (createElement(TimePickerInline, __assign({}, props, { forwardedRef: ref }))); });
var DateTimePickerView;
(function (DateTimePickerView) {
DateTimePickerView["YEAR"] = "year";
DateTimePickerView["DATE"] = "date";
DateTimePickerView["HOUR"] = "hours";
DateTimePickerView["MINUTES"] = "minutes";
})(DateTimePickerView || (DateTimePickerView = {}));
var DateTimePickerView$1 = DateTimePickerView;
var DateTimePickerHeader = function (props) {
var date = props.date, classes = props.classes, openView = props.openView, meridiemMode = props.meridiemMode, onOpenViewChange = props.onOpenViewChange, setMeridiemMode = props.setMeridiemMode, theme = props.theme, utils = props.utils, ampm = props.ampm;
var changeOpenView = function (view) { return function () {
return onOpenViewChange(view);
}; };
var rtl = theme.direction === 'rtl';
var hourMinuteClassName = rtl
? classes.hourMinuteLabelReverse
: classes.hourMinuteLabel;
return (createElement(PickerToolbar$1, { className: classes.toolbar },
createElement("div", { className: classes.dateHeader },
createElement(ToolbarButton$1, { variant: "subtitle1", onClick: changeOpenView(DateTimePickerView$1.YEAR), selected: openView === DateTimePickerView$1.YEAR, label: utils.getYearText(date) }),
createElement(ToolbarButton$1, { variant: "h4", onClick: changeOpenView(DateTimePickerView$1.DATE), selected: openView === DateTimePickerView$1.DATE, label: utils.getDateTimePickerHeaderText(date) })),
createElement("div", { className: classes.timeHeader },
createElement("div", { className: hourMinuteClassName },
createElement(ToolbarButton$1, { variant: "h3", onClick: changeOpenView(DateTimePickerView$1.HOUR), selected: openView === DateTimePickerView$1.HOUR, label: utils.getHourText(date, ampm) }),
createElement(ToolbarButton$1, { variant: "h3", label: ":", selected: false, className: classes.separator }),
createElement(ToolbarButton$1, { variant: "h3", onClick: changeOpenView(DateTimePickerView$1.MINUTES), selected: openView === DateTimePickerView$1.MINUTES, label: utils.getMinuteText(date) })),
ampm && (createElement("div", { className: classes.ampmSelection },
createElement(ToolbarButton$1, { className: classes.ampmLabel, selected: meridiemMode === 'am', variant: "subtitle1", label: utils.getMeridiemText('am'), onClick: setMeridiemMode('am') }),
createElement(ToolbarButton$1, { className: classes.ampmLabel, selected: meridiemMode === 'pm', variant: "subtitle1", label: utils.getMeridiemText('pm'), onClick: setMeridiemMode('pm') }))))));
};
DateTimePickerHeader.propTypes = {
date: object.isRequired,
classes: object.isRequired,
theme: object.isRequired,
meridiemMode: string.isRequired,
openView: string.isRequired,
onOpenViewChange: func.isRequired,
setMeridiemMode: func.isRequired,
utils: object.isRequired,
ampm: bool,
innerRef: any,
};
DateTimePickerHeader.defaultProps = {
ampm: true,
};
var styles$e = function () {
return createStyles({
toolbar: {
flexDirection: 'row',
alignItems: 'center',
paddingLeft: 16,
paddingRight: 16,
justifyContent: 'space-around',
},
separator: {
margin: '0 4px 0 2px',
cursor: 'default',
},
ampmSelection: {
marginLeft: 10,
marginRight: -10,
},
ampmLabel: {
fontSize: 18,
},
hourMinuteLabel: {
display: 'flex',
justifyContent: 'flex-end',
alignItems: 'flex-end',
},
hourMinuteLabelReverse: {
display: 'flex',
justifyContent: 'flex-end',
alignItems: 'flex-end',
flexDirection: 'row-reverse',
},
dateHeader: {
height: 65,
},
timeHeader: {
height: 65,
display: 'flex',
justifyContent: 'flex-end',
alignItems: 'flex-end',
},
});
};
var DatetimePickerHeader = withStyles(styles$e, { withTheme: true })(WithUtils()(DateTimePickerHeader));
var viewToTabIndex = function (openView) {
if (openView === DateTimePickerView$1.DATE ||
openView === DateTimePickerView$1.YEAR) {
return 'date';
}
return 'time';
};
var tabIndexToView = function (tab) {
if (tab === 'date') {
return DateTimePickerView$1.DATE;
}
return DateTimePickerView$1.HOUR;
};
var DateTimePickerTabs = function (props) {
var view = props.view, onChange = props.onChange, classes = props.classes, theme = props.theme, dateRangeIcon = props.dateRangeIcon, timeIcon = props.timeIcon;
var indicatorColor = theme.palette.type === 'light' ? 'secondary' : 'primary';
var handleChange = function (e, value) {
if (value !== viewToTabIndex(view)) {
onChange(tabIndexToView(value));
}
};
return (createElement(Paper, null,
createElement(Tabs, { fullWidth: true, value: viewToTabIndex(view), onChange: handleChange, className: classes.tabs, indicatorColor: indicatorColor },
createElement(Tab, { value: "date", icon: createElement(Icon, null, dateRangeIcon) }),
createElement(Tab, { value: "time", icon: createElement(Icon, null, timeIcon) }))));
};
DateTimePickerTabs.propTypes = {
view: string.isRequired,
onChange: func.isRequired,
classes: object.isRequired,
theme: object.isRequired,
dateRangeIcon: node.isRequired,
timeIcon: node.isRequired,
};
var styles$f = function (theme) { return ({
tabs: {
color: theme.palette.common.white,
backgroundColor: theme.palette.type === 'light'
? theme.palette.primary.main
: theme.palette.background.default,
},
}); };
var DateTimePickerTabs$1 = withTheme()(withStyles(styles$f, { name: 'MuiPickerDTTabs' })(DateTimePickerTabs));
var DateTimePickerView$2 = function (_a) {
var selected = _a.selected, children = _a.children, classes = _a.classes;
if (!selected) {
return null;
}
return createElement("div", { className: classes.view }, children);
};
DateTimePickerView$2.propTypes = {
selected: bool.isRequired,
children: node.isRequired,
classes: object.isRequired,
};
var styles$g = createStyles({
view: {
zIndex: 1,
position: 'absolute',
left: 0,
right: 0,
},
});
var View = withStyles(styles$g, { name: 'MuiPickerDTPickerView ' })(DateTimePickerView$2);
var DateTimePicker = /** @class */ (function (_super) {
__extends(DateTimePicker, _super);
function DateTimePicker() {
var _this = _super !== null && _super.apply(this, arguments) || this;
_this.state = {
openView: _this.props.openTo,
meridiemMode: _this.props.utils.getHours(_this.props.date) >= 12 ? 'pm' : 'am',
};
_this.onChange = function (time, isFinish, nextView) {
if (isFinish === void 0) { isFinish = true; }
_this.handleChange(time);
if (isFinish && _this.props.autoSubmit) {
_this.handleViewChange(nextView);
}
};
_this.setMeridiemMode = function (mode) { return function () {
_this.setState({ meridiemMode: mode }, function () {
return _this.handleChange(_this.props.date, false);
});
}; };
_this.handleViewChange = function (view) {
_this.setState({ openView: view });
};
_this.handleChange = function (time, isFinish) {
if (isFinish === void 0) { isFinish = false; }
var withMeridiem = convertToMeridiem(time, _this.state.meridiemMode, Boolean(_this.props.ampm), _this.props.utils);
_this.props.onChange(withMeridiem, isFinish);
};
_this.handleYearChange = function (date) {
_this.onChange(date, false, DateTimePickerView$1.DATE);
};
_this.handleDayChange = function (date, isFinish) {
_this.onChange(date, isFinish, DateTimePickerView$1.HOUR);
};
_this.handleHourChange = function (time, isFinish) {
_this.onChange(time, isFinish, DateTimePickerView$1.MINUTES);
};
return _this;
}
DateTimePicker.prototype.render = function () {
var _a = this.state, openView = _a.openView, meridiemMode = _a.meridiemMode;
var _b = this.props, date = _b.date, minDate = _b.minDate, maxDate = _b.maxDate, showTabs = _b.showTabs, disablePast = _b.disablePast, disableFuture = _b.disableFuture, leftArrowIcon = _b.leftArrowIcon, rightArrowIcon = _b.rightArrowIcon, dateRangeIcon = _b.dateRangeIcon, timeIcon = _b.timeIcon, renderDay = _b.renderDay, ampm = _b.ampm, shouldDisableDate = _b.shouldDisableDate, animateYearScrolling = _b.animateYearScrolling, classes = _b.classes, allowKeyboardControl = _b.allowKeyboardControl, ViewContainerComponent = _b.ViewContainerComponent;
var Container = ViewContainerComponent;
var ViewContainerComponentProps = typeof ViewContainerComponent === 'string'
? {}
: { openView: openView, onChange: this.onChange };
return (createElement(Fragment, null,
createElement(DatetimePickerHeader, { date: date, openView: openView, meridiemMode: meridiemMode, setMeridiemMode: this.setMeridiemMode, onOpenViewChange: this.handleViewChange, ampm: ampm }),
showTabs && (createElement(DateTimePickerTabs$1, { view: openView, onChange: this.handleViewChange, dateRangeIcon: dateRangeIcon, timeIcon: timeIcon })),
createElement(Container, __assign({ className: classes.viewContainer }, ViewContainerComponentProps),
createElement(View, { selected: openView === DateTimePickerView$1.YEAR },
createElement(YearSelection$1, { date: date, minDate: minDate, maxDate: maxDate, onChange: this.handleYearChange, disablePast: disablePast, disableFuture: disableFuture, animateYearScrolling: animateYearScrolling })),
createElement(View, { selected: openView === DateTimePickerView$1.DATE },
createElement(Calendar$1, { allowKeyboardControl: allowKeyboardControl, date: date, minDate: minDate, maxDate: maxDate, onChange: this.handleDayChange, disablePast: disablePast, disableFuture: disableFuture, leftArrowIcon: leftArrowIcon, rightArrowIcon: rightArrowIcon, renderDay: renderDay, shouldDisableDate: shouldDisableDate })),
createElement(View, { selected: openView === DateTimePickerView$1.HOUR ||
openView === DateTimePickerView$1.MINUTES },
createElement(TimePickerView$1, { date: date, type: openView, onHourChange: this.handleHourChange, onMinutesChange: this.handleChange, onSecondsChange: this.handleChange, ampm: ampm })))));
};
DateTimePicker.propTypes = {
allowKeyboardControl: bool,
ampm: bool,
animateYearScrolling: bool,
autoSubmit: bool,
classes: object.isRequired,
date: object.isRequired,
initialFocusedDate: any,
innerRef: any,
dateRangeIcon: node,
disableFuture: bool,
disablePast: bool,
leftArrowIcon: node,
maxDate: DomainPropTypes.date.isRequired,
minDate: DomainPropTypes.date.isRequired,
onChange: func.isRequired,
openTo: oneOf(Object.keys(DateTimePickerView$1).map(function (key) { return DateTimePickerView$1[key]; })).isRequired,
renderDay: func,
rightArrowIcon: node,
shouldDisableDate: func,
showTabs: bool,
timeIcon: node,
utils: object.isRequired,
ViewContainerComponent: oneOfType([
string,
func,
object,
]),
};
DateTimePicker.defaultProps = {
allowKeyboardControl: false,
ampm: true,
animateYearScrolling: false,
autoSubmit: true,
dateRangeIcon: undefined,
disableFuture: false,
disablePast: false,
leftArrowIcon: undefined,
renderDay: undefined,
rightArrowIcon: undefined,
shouldDisableDate: undefined,
showTabs: true,
timeIcon: undefined,
ViewContainerComponent: 'div',
};
return DateTimePicker;
}(Component));
var styles$h = createStyles({
viewContainer: {
minHeight: 300,
position: 'relative',
},
});
var DateTimePicker$1 = withStyles(styles$h, {
name: 'MuiPickersDateTimePicker',
})(WithUtils()(DateTimePicker));
var DateTimePickerModal = function (props) {
var value = props.value, format = props.format, autoOk = props.autoOk, openTo = props.openTo, minDate = props.minDate, maxDate = props.maxDate, initialFocusedDate = props.initialFocusedDate, showTabs = props.showTabs, autoSubmit = props.autoSubmit, disablePast = props.disablePast, disableFuture = props.disableFuture, leftArrowIcon = props.leftArrowIcon, rightArrowIcon = props.rightArrowIcon, dateRangeIcon = props.dateRangeIcon, timeIcon = props.timeIcon, renderDay = props.renderDay, ampm = props.ampm, shouldDisableDate = props.shouldDisableDate, animateYearScrolling = props.animateYearScrolling, forwardedRef = props.forwardedRef, allowKeyboardControl = props.allowKeyboardControl, other = __rest(props, ["value", "format", "autoOk", "openTo", "minDate", "maxDate", "initialFocusedDate", "showTabs", "autoSubmit", "disablePast", "disableFuture", "leftArrowIcon", "rightArrowIcon", "dateRangeIcon", "timeIcon", "renderDay", "ampm", "shouldDisableDate", "animateYearScrolling", "forwardedRef", "allowKeyboardControl"]);
return (createElement(BasePicker$1, __assign({}, props), function (_a) {
var date = _a.date, utils = _a.utils, handleAccept = _a.handleAccept, handleChange = _a.handleChange, handleClear = _a.handleClear, handleDismiss = _a.handleDismiss, handleSetTodayDate = _a.handleSetTodayDate, handleTextFieldChange = _a.handleTextFieldChange, isAccepted = _a.isAccepted, pick12hOr24hFormat = _a.pick12hOr24hFormat;
return (createElement(ModalWrapper, __assign({ ref: forwardedRef, disableFuture: disableFuture, disablePast: disablePast, maxDate: maxDate, minDate: minDate, onAccept: handleAccept, onChange: handleTextFieldChange, onClear: handleClear, onDismiss: handleDismiss, onSetToday: handleSetTodayDate, value: value, isAccepted: isAccepted, format: pick12hOr24hFormat(utils.dateTime12hFormat, utils.dateTime24hFormat) }, other),
createElement(DateTimePicker$1, { allowKeyboardControl: allowKeyboardControl, ampm: ampm, animateYearScrolling: animateYearScrolling, autoSubmit: autoSubmit, date: date, dateRangeIcon: dateRangeIcon, disableFuture: disableFuture, disablePast: disablePast, leftArrowIcon: leftArrowIcon, maxDate: maxDate, minDate: minDate, onChange: handleChange, openTo: openTo, renderDay: renderDay, rightArrowIcon: rightArrowIcon, shouldDisableDate: shouldDisableDate, showTabs: showTabs, timeIcon: timeIcon })));
}));
};
DateTimePickerModal.propTypes = {
/** Date-time picker value */
value: DomainPropTypes.date,
/** Date format string for input */
format: string,
/** Callback firing when date accepted [(date: Date) => void] */
onChange: func.isRequired,
/** Auto accept date on minute selection */
autoOk: bool,
/** Move to the next part of date on select (year -> date -> hour -> minute) */
autoSubmit: bool,
/** Disable future dates */
disableFuture: bool,
/** Disable past dates */
disablePast: bool,
/** Min selectable date */
minDate: DomainPropTypes.date,
/** Max selectable date */
maxDate: DomainPropTypes.date,
/** Initial focused date when calendar opens, if no value is provided */
initialFocusedDate: DomainPropTypes.date,
/** Show date/time tabs */
showTabs: bool,
/** Left arrow icon */
leftArrowIcon: node,
/** Right arrow icon */
rightArrowIcon: node,
/** Date tab icon */
dateRangeIcon: node,
/** Time tab icon */
timeIcon: node,
/**
* Custom renderer for day
* [(date: Date, nowSelectedDate: Date, isInCurrentMonth: boolean) => ReactElement]
*/
renderDay: func,
/** 12h/24h view for hour selection clock */
ampm: bool,
/** Disable specific date [(date: Date) => boolean] */
shouldDisableDate: func,
/** Enable animated scrolling to current year */
animateYearScrolling: bool,
/** Open directly to particular view */
openTo: oneOf(['year', 'date', 'hour', 'minutes']),
/** Enables keyboard listener for moving between days in calendar */
allowKeyboardControl: bool,
forwardedRef: oneOfType([func, object]),
};
DateTimePickerModal.defaultProps = {
value: new Date(),
format: undefined,
autoOk: false,
autoSubmit: true,
openTo: 'date',
disableFuture: false,
disablePast: false,
minDate: '1900-01-01',
maxDate: '2100-01-01',
initialFocusedDate: undefined,
showTabs: true,
leftArrowIcon: 'keyboard_arrow_left',
rightArrowIcon: 'keyboard_arrow_right',
dateRangeIcon: 'date_range',
timeIcon: 'access_time',
renderDay: undefined,
ampm: true,
shouldDisableDate: undefined,
animateYearScrolling: false,
forwardedRef: undefined,
allowKeyboardControl: true,
};
var DateTimePickerModal$1 = forwardRef(function (props, ref) { return (createElement(DateTimePickerModal, __assign({}, props, { forwardedRef: ref }))); });
var DateTimePickerInline = function (props) {
var value = props.value, format = props.format, autoOk = props.autoOk, openTo = props.openTo, minDate = props.minDate, maxDate = props.maxDate, initialFocusedDate = props.initialFocusedDate, showTabs = props.showTabs, autoSubmit = props.autoSubmit, disablePast = props.disablePast, disableFuture = props.disableFuture, leftArrowIcon = props.leftArrowIcon, rightArrowIcon = props.rightArrowIcon, dateRangeIcon = props.dateRangeIcon, timeIcon = props.timeIcon, renderDay = props.renderDay, ampm = props.ampm, shouldDisableDate = props.shouldDisableDate, animateYearScrolling = props.animateYearScrolling, forwardedRef = props.forwardedRef, allowKeyboardControl = props.allowKeyboardControl, other = __rest(props, ["value", "format", "autoOk", "openTo", "minDate", "maxDate", "initialFocusedDate", "showTabs", "autoSubmit", "disablePast", "disableFuture", "leftArrowIcon", "rightArrowIcon", "dateRangeIcon", "timeIcon", "renderDay", "ampm", "shouldDisableDate", "animateYearScrolling", "forwardedRef", "allowKeyboardControl"]);
return (createElement(BasePicker$1, __assign({}, props, { autoOk: true }), function (_a) {
var date = _a.date, utils = _a.utils, handleChange = _a.handleChange, handleTextFieldChange = _a.handleTextFieldChange, isAccepted = _a.isAccepted, pick12hOr24hFormat = _a.pick12hOr24hFormat, handleAccept = _a.handleAccept;
return (createElement(InlineWrapper$1, __assign({ innerRef: forwardedRef, disableFuture: disableFuture, disablePast: disablePast, maxDate: maxDate, minDate: minDate, onChange: handleTextFieldChange, value: value, isAccepted: isAccepted, handleAccept: handleAccept, format: pick12hOr24hFormat(utils.dateTime12hFormat, utils.dateTime24hFormat) }, other),
createElement(DateTimePicker$1, { allowKeyboardControl: allowKeyboardControl, ampm: ampm, animateYearScrolling: animateYearScrolling, autoSubmit: autoSubmit, date: date, dateRangeIcon: dateRangeIcon, disableFuture: disableFuture, disablePast: disablePast, leftArrowIcon: leftArrowIcon, maxDate: maxDate, minDate: minDate, onChange: handleChange, openTo: openTo, renderDay: renderDay, rightArrowIcon: rightArrowIcon, shouldDisableDate: shouldDisableDate, showTabs: showTabs, timeIcon: timeIcon })));
}));
};
DateTimePickerInline.propTypes = {
value: DomainPropTypes.date,
format: string,
onChange: func.isRequired,
autoOk: bool,
autoSubmit: bool,
disableFuture: bool,
disablePast: bool,
minDate: DomainPropTypes.date,
maxDate: DomainPropTypes.date,
initialFocusedDate: DomainPropTypes.date,
showTabs: bool,
leftArrowIcon: node,
rightArrowIcon: node,
dateRangeIcon: node,
timeIcon: node,
renderDay: func,
ampm: bool,
shouldDisableDate: func,
animateYearScrolling: bool,
openTo: oneOf(['year', 'date', 'hour', 'minutes']),
allowKeyboardControl: bool,
forwardedRef: oneOfType([func, object]),
};
DateTimePickerInline.defaultProps = {
value: new Date(),
format: undefined,
autoOk: false,
autoSubmit: true,
openTo: 'date',
disableFuture: false,
disablePast: false,
minDate: '1900-01-01',
maxDate: '2100-01-01',
initialFocusedDate: undefined,
showTabs: true,
leftArrowIcon: 'keyboard_arrow_left',
rightArrowIcon: 'keyboard_arrow_right',
dateRangeIcon: 'date_range',
timeIcon: 'access_time',
renderDay: undefined,
ampm: true,
shouldDisableDate: undefined,
animateYearScrolling: false,
forwardedRef: undefined,
allowKeyboardControl: true,
};
var DateTimePickerInline$1 = forwardRef(function (props, ref) { return (createElement(DateTimePickerInline, __assign({}, props, { forwardedRef: ref }))); });
export { DatePickerModal$1 as DatePicker, DatePickerInline$1 as InlineDatePicker, TimePickerModal$1 as TimePicker, TimePickerInline$1 as InlineTimePicker, DateTimePickerModal$1 as DateTimePicker, DateTimePickerInline$1 as InlineDateTimePicker, MuiPickersUtilsProvider };
//# sourceMappingURL=material-ui-pickers.esm.js.map
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment