ph-material-pickers
Version:
React components, that implements material design pickers for material-ui v4
1,291 lines (1,158 loc) • 214 kB
JavaScript
'use strict';
Object.defineProperty(exports, '__esModule', { value: true });
function _interopDefault (ex) { return (ex && (typeof ex === 'object') && 'default' in ex) ? ex['default'] : ex; }
var _defineProperty = _interopDefault(require('@babel/runtime/helpers/defineProperty'));
var _objectWithoutProperties = _interopDefault(require('@babel/runtime/helpers/objectWithoutProperties'));
var React = require('react');
var React__default = _interopDefault(React);
var PropTypes = require('prop-types');
var _extends = _interopDefault(require('@babel/runtime/helpers/extends'));
var clsx = _interopDefault(require('clsx'));
var Typography = _interopDefault(require('@material-ui/core/Typography'));
var styles$1 = require('@material-ui/core/styles');
var Grid = _interopDefault(require('@material-ui/core/Grid'));
var IconButton = _interopDefault(require('@material-ui/core/IconButton'));
var Toolbar = _interopDefault(require('@material-ui/core/Toolbar'));
var utils = require('@material-ui/core/utils');
var getThemeProps = _interopDefault(require('@material-ui/styles/getThemeProps'));
var _slicedToArray = _interopDefault(require('@babel/runtime/helpers/slicedToArray'));
var _typeof = _interopDefault(require('@babel/runtime/helpers/typeof'));
var useMediaQuery = _interopDefault(require('@material-ui/core/useMediaQuery'));
var Button = _interopDefault(require('@material-ui/core/Button'));
var DialogActions = _interopDefault(require('@material-ui/core/DialogActions'));
var DialogContent = _interopDefault(require('@material-ui/core/DialogContent'));
var Dialog = _interopDefault(require('@material-ui/core/Dialog'));
var InputAdornment = _interopDefault(require('@material-ui/core/InputAdornment'));
var rifm = require('rifm');
var Grow = _interopDefault(require('@material-ui/core/Grow'));
var Paper = _interopDefault(require('@material-ui/core/Paper'));
var Popper = _interopDefault(require('@material-ui/core/Popper'));
var TrapFocus = _interopDefault(require('@material-ui/core/Unstable_TrapFocus'));
var _classCallCheck = _interopDefault(require('@babel/runtime/helpers/classCallCheck'));
var _createClass = _interopDefault(require('@babel/runtime/helpers/createClass'));
var _inherits = _interopDefault(require('@babel/runtime/helpers/inherits'));
var _possibleConstructorReturn = _interopDefault(require('@babel/runtime/helpers/possibleConstructorReturn'));
var _getPrototypeOf = _interopDefault(require('@babel/runtime/helpers/getPrototypeOf'));
var ButtonBase = _interopDefault(require('@material-ui/core/ButtonBase'));
var reactTransitionGroup = require('react-transition-group');
var Tab = _interopDefault(require('@material-ui/core/Tab'));
var Tabs = _interopDefault(require('@material-ui/core/Tabs'));
var MuiPickersAdapterContext = React.createContext(null);
var LocalizationProvider = function LocalizationProvider(props) {
var children = props.children,
Utils = props.dateAdapter,
dateFormats = props.dateFormats,
dateLibInstance = props.dateLibInstance,
locale = props.locale;
var utils = React.useMemo(function () {
return new Utils({
locale: locale,
formats: dateFormats,
instance: dateLibInstance
});
}, [Utils, locale, dateFormats, dateLibInstance]);
return /*#__PURE__*/React.createElement(MuiPickersAdapterContext.Provider, {
value: utils
}, children);
};
process.env.NODE_ENV !== "production" ? LocalizationProvider.propTypes = {
dateAdapter: PropTypes.func.isRequired,
locale: PropTypes.oneOfType([PropTypes.object, PropTypes.string]),
/**
* Your component tree.
*/
children: PropTypes.node
} : void 0;
// TODO uncomment when syntax will be allowed by next babel
function checkUtils(utils)
/* :asserts utils is MuiPickersAdapter */
{
if (!utils) {
throw new Error('Can not find utils in context. It looks like you forgot to wrap your component in LocalizationProvider, or pass dateAdapter prop directly.');
}
}
function useUtils() {
var utils = React.useContext(MuiPickersAdapterContext);
checkUtils(utils);
return utils;
}
function useNow() {
var utils = useUtils();
var now = React.useRef(utils.date());
return now.current;
}
/**
* @ignore - internal component.
*/
var PenIcon = utils.createSvgIcon( /*#__PURE__*/React.createElement("path", {
d: "M3 17.25V21h3.75L17.81 9.94l-3.75-3.75L3 17.25zM20.71 7.04c.39-.39.39-1.02 0-1.41l-2.34-2.34a.9959.9959 0 00-1.41 0l-1.83 1.83 3.75 3.75 1.83-1.83z"
}), 'Pen');
/**
* @ignore - internal component.
*/
var CalendarIcon = utils.createSvgIcon( /*#__PURE__*/React.createElement("path", {
d: "M17 12h-5v5h5v-5zM16 1v2H8V1H6v2H5c-1.11 0-1.99.9-1.99 2L3 19c0 1.1.89 2 2 2h14c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2h-1V1h-2zm3 18H5V8h14v11z"
}), 'Calendar');
var useStyles = styles$1.makeStyles(function (theme) {
var toolbarBackground = theme.palette.type === 'light' ? theme.palette.primary.main : theme.palette.background["default"];
return {
root: {
display: 'flex',
flexDirection: 'column',
alignItems: 'flex-start',
justifyContent: 'space-between',
paddingTop: 16,
paddingBottom: 16,
backgroundColor: toolbarBackground,
color: theme.palette.getContrastText(toolbarBackground)
},
toolbarLandscape: {
height: 'auto',
maxWidth: 160,
padding: 16,
justifyContent: 'flex-start',
flexWrap: 'wrap'
},
dateTitleContainer: {
flex: 1
}
};
}, {
name: 'MuiPickersToolbar'
});
function defaultGetKeyboardInputSwitchingButtonText(isKeyboardInputOpen) {
return isKeyboardInputOpen ? 'text input view is open, go to calendar view' : 'calendar view is open, go to text input view';
}
var PickerToolbar = function PickerToolbar(_ref) {
var children = _ref.children,
className = _ref.className,
_ref$getMobileKeyboar = _ref.getMobileKeyboardInputViewButtonText,
getMobileKeyboardInputViewButtonText = _ref$getMobileKeyboar === void 0 ? defaultGetKeyboardInputSwitchingButtonText : _ref$getMobileKeyboar,
isLandscape = _ref.isLandscape,
isMobileKeyboardViewOpen = _ref.isMobileKeyboardViewOpen,
_ref$landscapeDirecti = _ref.landscapeDirection,
landscapeDirection = _ref$landscapeDirecti === void 0 ? 'column' : _ref$landscapeDirecti,
penIconClassName = _ref.penIconClassName,
toggleMobileKeyboardView = _ref.toggleMobileKeyboardView,
toolbarTitle = _ref.toolbarTitle;
var classes = useStyles();
return /*#__PURE__*/React.createElement(Toolbar, {
"data-mui-test": "picker-toolbar",
className: clsx(classes.root, className, isLandscape && classes.toolbarLandscape)
}, /*#__PURE__*/React.createElement(Typography, {
"data-mui-test": "picker-toolbar-title",
color: "inherit",
variant: "overline"
}, toolbarTitle), /*#__PURE__*/React.createElement(Grid, {
container: true,
justifyContent: "space-between",
className: classes.dateTitleContainer,
direction: isLandscape ? landscapeDirection : 'row',
alignItems: isLandscape ? 'flex-start' : 'flex-end'
}, children, /*#__PURE__*/React.createElement(IconButton, {
onClick: toggleMobileKeyboardView,
className: penIconClassName,
color: "inherit",
"data-mui-test": "toggle-mobile-keyboard-view",
"aria-label": getMobileKeyboardInputViewButtonText(isMobileKeyboardViewOpen)
}, isMobileKeyboardViewOpen ? /*#__PURE__*/React.createElement(CalendarIcon, {
color: "inherit"
}) : /*#__PURE__*/React.createElement(PenIcon, {
color: "inherit"
}))));
};
function useDefaultProps(props, _ref) {
var name = _ref.name;
var theme = styles$1.useTheme();
return getThemeProps({
props: props,
theme: theme,
name: name
});
}
function withDefaultProps(componentConfig, Component) {
var componentName = componentConfig.name.replace('Mui', '');
var WithDefaultProps = function WithDefaultProps(props) {
Component.displayName = componentName;
var propsWithDefault = useDefaultProps(props, componentConfig);
return /*#__PURE__*/React.createElement(Component, propsWithDefault);
};
WithDefaultProps.displayName = "WithDefaultProps(".concat(componentName, ")");
return WithDefaultProps;
}
/* Use it instead of .includes method for IE support */
function arrayIncludes(array, itemOrItems) {
if (Array.isArray(itemOrItems)) {
return itemOrItems.every(function (item) {
return array.indexOf(item) !== -1;
});
}
return array.indexOf(itemOrItems) !== -1;
}
var onSpaceOrEnter = function onSpaceOrEnter(innerFn, onFocus) {
return function (event) {
if (event.key === 'Enter' || event.key === ' ') {
innerFn(); // prevent any side effects
event.preventDefault();
event.stopPropagation();
}
if (onFocus) {
onFocus(event);
}
};
};
/* Quick untyped helper to improve function composition readability */
var pipe = function pipe() {
for (var _len = arguments.length, fns = new Array(_len), _key = 0; _key < _len; _key++) {
fns[_key] = arguments[_key];
}
return fns.reduceRight(function (prevFn, nextFn) {
return function () {
return nextFn(prevFn.apply(void 0, arguments));
};
}, function (value) {
return value;
});
};
var executeInTheNextEventLoopTick = function executeInTheNextEventLoopTick(fn) {
setTimeout(fn, 0);
};
function createDelegatedEventHandler(fn, onEvent) {
return function (event) {
fn(event);
if (onEvent) {
onEvent(event);
}
};
}
function mergeRefs(refs) {
return function (value) {
refs.forEach(function (ref) {
if (typeof ref === 'function') {
ref(value);
} else if (_typeof(ref) === 'object' && ref != null) {
// @ts-ignore .current is not a readonly, hold on ts
ref.current = value;
}
});
};
}
var findClosestEnabledDate = function findClosestEnabledDate(_ref) {
var date = _ref.date,
utils = _ref.utils,
minDate = _ref.minDate,
maxDate = _ref.maxDate,
disableFuture = _ref.disableFuture,
disablePast = _ref.disablePast,
shouldDisableDate = _ref.shouldDisableDate;
var today = utils.startOfDay(utils.date());
if (disablePast && utils.isBefore(minDate, today)) {
minDate = today;
}
if (disableFuture && utils.isAfter(maxDate, today)) {
maxDate = today;
}
var forward = date;
var backward = date;
if (utils.isBefore(date, minDate)) {
forward = utils.date(minDate);
backward = null;
}
if (utils.isAfter(date, maxDate)) {
if (backward) {
backward = utils.date(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);
}
} // fallback to today if no enabled days
return utils.date();
};
var isYearOnlyView = function isYearOnlyView(views) {
return views.length === 1 && views[0] === 'year';
};
var isYearAndMonthViews = function isYearAndMonthViews(views) {
return views.length === 2 && arrayIncludes(views, 'month') && arrayIncludes(views, 'year');
};
var getFormatAndMaskByViews = function getFormatAndMaskByViews(views, utils) {
if (isYearOnlyView(views)) {
return {
mask: '____',
inputFormat: utils.formats.year
};
}
if (isYearAndMonthViews(views)) {
return {
disableMaskedInput: true,
inputFormat: utils.formats.monthAndYear
};
}
return {
mask: '__/__/____',
inputFormat: utils.formats.keyboardDate
};
};
function parsePickerInputValue(utils, _ref2) {
var value = _ref2.value;
var parsedValue = utils.date(value);
return utils.isValid(parsedValue) ? parsedValue : null;
}
function parseRangeInputValue(utils, _ref3) {
var _ref3$value = _ref3.value,
value = _ref3$value === void 0 ? [null, null] : _ref3$value;
return value.map(function (date) {
return !utils.isValid(date) || date === null ? null : utils.startOfDay(utils.date(date));
});
}
var isRangeValid = function isRangeValid(utils, range) {
return Boolean(range && range[0] && range[1] && utils.isBefore(range[0], range[1]));
};
var isWithinRange = function isWithinRange(utils, day, range) {
return isRangeValid(utils, range) && utils.isWithinRange(day, range);
};
var isStartOfRange = function isStartOfRange(utils, day, range) {
return isRangeValid(utils, range) && utils.isSameDay(day, range[0]);
};
var isEndOfRange = function isEndOfRange(utils, day, range) {
return isRangeValid(utils, range) && utils.isSameDay(day, range[1]);
};
var validateDate = function validateDate(utils, value, _ref4) {
var minDate = _ref4.minDate,
maxDate = _ref4.maxDate,
disableFuture = _ref4.disableFuture,
shouldDisableDate = _ref4.shouldDisableDate,
disablePast = _ref4.disablePast;
var now = utils.date();
var date = utils.date(value);
if (value === null) {
return null;
}
switch (true) {
case !utils.isValid(value):
return 'invalidDate';
case Boolean(shouldDisableDate && shouldDisableDate(date)):
return 'shouldDisableDate';
case Boolean(disableFuture && utils.isAfterDay(date, now)):
return 'disableFuture';
case Boolean(disablePast && utils.isBeforeDay(date, now)):
return 'disablePast';
case Boolean(minDate && utils.isBeforeDay(date, minDate)):
return 'minDate';
case Boolean(maxDate && utils.isAfterDay(date, maxDate)):
return 'maxDate';
default:
return null;
}
};
var validateDateRange = function validateDateRange(utils, value, dateValidationProps) {
var _value = _slicedToArray(value, 2),
start = _value[0],
end = _value[1]; // for partial input
if (start === null || end === null) {
return [null, null];
}
var dateValidations = [validateDate(utils, start, dateValidationProps), validateDate(utils, end, dateValidationProps)];
if (dateValidations[0] || dateValidations[1]) {
return dateValidations;
}
if (!isRangeValid(utils, [utils.date(start), utils.date(end)])) {
return ['invalidRange', 'invalidRange'];
}
return [null, null];
};
var muiPickersComponentConfig = {
name: 'MuiPickersDatePickerToolbar'
};
var useStyles$1 = styles$1.makeStyles({
root: {},
dateTitleLandscape: {
margin: 'auto 16px auto auto'
},
penIcon: {
position: 'relative',
top: 4
}
}, muiPickersComponentConfig);
var DatePickerToolbar = withDefaultProps(muiPickersComponentConfig, function (_ref) {
var date = _ref.date,
views = _ref.views,
isLandscape = _ref.isLandscape,
isMobileKeyboardViewOpen = _ref.isMobileKeyboardViewOpen,
toggleMobileKeyboardView = _ref.toggleMobileKeyboardView,
toolbarFormat = _ref.toolbarFormat,
onChange = _ref.onChange,
_ref$toolbarPlacehold = _ref.toolbarPlaceholder,
toolbarPlaceholder = _ref$toolbarPlacehold === void 0 ? '––' : _ref$toolbarPlacehold,
_ref$toolbarTitle = _ref.toolbarTitle,
toolbarTitle = _ref$toolbarTitle === void 0 ? 'SELECT DATE' : _ref$toolbarTitle,
other = _objectWithoutProperties(_ref, ["date", "views", "isLandscape", "isMobileKeyboardViewOpen", "toggleMobileKeyboardView", "toolbarFormat", "onChange", "toolbarPlaceholder", "toolbarTitle"]);
var utils = useUtils();
var classes = useStyles$1();
var dateText = React.useMemo(function () {
if (!date) {
return toolbarPlaceholder;
}
if (toolbarFormat) {
return utils.formatByString(date, toolbarFormat);
}
if (isYearOnlyView(views)) {
return utils.format(date, 'year');
}
if (isYearAndMonthViews(views)) {
return utils.format(date, 'month');
} // Little localization hack (Google is doing the same for android native pickers):
// For english localization it is convenient to include weekday into the date "Mon, Jun 1"
// For other locales using strings like "June 1", without weekday
return /en/.test(utils.getCurrentLocaleCode()) ? utils.format(date, 'normalDateWithWeekday') : utils.format(date, 'normalDate');
}, [date, toolbarFormat, toolbarPlaceholder, utils, views]);
return /*#__PURE__*/React.createElement(PickerToolbar, _extends({
className: classes.root,
toolbarTitle: toolbarTitle,
isMobileKeyboardViewOpen: isMobileKeyboardViewOpen,
toggleMobileKeyboardView: toggleMobileKeyboardView,
isLandscape: isLandscape,
penIconClassName: classes.penIcon
}, other), /*#__PURE__*/React.createElement(Typography, {
variant: "h4",
"data-mui-test": "datepicker-toolbar-date",
align: isLandscape ? 'left' : 'center',
className: clsx(isLandscape && classes.dateTitleLandscape)
}, dateText));
});
var DIALOG_WIDTH = 320;
var DIALOG_WIDTH_WIDER = 325;
var VIEW_HEIGHT = 358;
var DAY_SIZE = 36;
var DAY_MARGIN = 2;
var IS_TOUCH_DEVICE_MEDIA = '@media (pointer: fine)';
function getTextFieldAriaText(rawValue, utils) {
return rawValue && utils.isValid(utils.date(rawValue)) ? "Choose date, selected date is ".concat(utils.format(utils.date(rawValue), 'fullDate')) : 'Choose date';
}
var getDisplayDate = function getDisplayDate(utils, value, inputFormat) {
var date = utils.date(value);
var isEmpty = value === null;
if (isEmpty) {
return '';
}
return utils.isValid(date) ? utils.formatByString(date, inputFormat) : '';
};
function pick12hOr24hFormat(userFormat, ampm, formats) {
if (userFormat) {
return userFormat;
}
if (typeof ampm === 'undefined') {
return formats.localized;
}
return ampm ? formats['12h'] : formats['24h'];
}
var MASK_USER_INPUT_SYMBOL = '_';
var staticDateWith2DigitTokens = new Date('2019-11-21T22:30:00.000');
var staticDateWith1DigitTokens = new Date('2019-01-01T09:00:00.000');
function checkMaskIsValidForCurrentFormat(mask, format, acceptRegex, utils) {
var formattedDateWith1Digit = utils.formatByString(utils.date(staticDateWith1DigitTokens), format);
var inferredFormatPatternWith1Digits = formattedDateWith1Digit.replace(acceptRegex, MASK_USER_INPUT_SYMBOL);
var inferredFormatPatternWith2Digits = utils.formatByString(utils.date(staticDateWith2DigitTokens), format).replace(acceptRegex, '_');
var isMaskValid = inferredFormatPatternWith2Digits === mask && inferredFormatPatternWith1Digits === mask; // @ts-ignore Ignore this warning for luxon because it is appearing mostly always (related to the formats structure of luxon itself)
if (!isMaskValid && utils.lib !== 'luxon' && process.env.NODE_ENV !== 'production') {
console.warn("The mask \"".concat(mask, "\" you passed is not valid for the format used ").concat(format, ". Falling down to uncontrolled not-masked input."));
}
return isMaskValid;
}
var maskedDateFormatter = function maskedDateFormatter(mask, acceptRegexp) {
return function (value) {
return value.split('').map(function (_char, i) {
acceptRegexp.lastIndex = 0;
if (i > mask.length - 1) {
return '';
}
var maskChar = mask[i];
var nextMaskChar = mask[i + 1];
var acceptedChar = acceptRegexp.test(_char) ? _char : '';
var formattedChar = maskChar === MASK_USER_INPUT_SYMBOL ? acceptedChar : maskChar + acceptedChar;
if (i === value.length - 1 && nextMaskChar && nextMaskChar !== MASK_USER_INPUT_SYMBOL) {
// when cursor at the end of mask part (e.g. month) prerender next symbol "21" -> "21/"
return formattedChar ? formattedChar + nextMaskChar : '';
}
return formattedChar;
}).join('');
};
};
function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }
function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }
var PureDateInput = function PureDateInput(_ref) {
var containerRef = _ref.containerRef,
disabled = _ref.disabled,
forwardedRef = _ref.forwardedRef,
_ref$getOpenDialogAri = _ref.getOpenDialogAriaText,
getOpenDialogAriaText = _ref$getOpenDialogAri === void 0 ? getTextFieldAriaText : _ref$getOpenDialogAri,
inputFormat = _ref.inputFormat,
InputProps = _ref.InputProps,
label = _ref.label,
onOpen = _ref.openPicker,
rawValue = _ref.rawValue,
renderInput = _ref.renderInput,
_ref$TextFieldProps = _ref.TextFieldProps,
TextFieldProps = _ref$TextFieldProps === void 0 ? {} : _ref$TextFieldProps,
validationError = _ref.validationError;
var utils = useUtils();
var PureDateInputProps = React.useMemo(function () {
return _objectSpread(_objectSpread({}, InputProps), {}, {
readOnly: true
});
}, [InputProps]);
var inputValue = getDisplayDate(utils, rawValue, inputFormat);
return renderInput(_objectSpread({
label: label,
disabled: disabled,
ref: containerRef,
inputRef: forwardedRef,
error: validationError,
InputProps: PureDateInputProps,
inputProps: {
disabled: disabled,
'aria-readonly': true,
'aria-label': getOpenDialogAriaText(rawValue, utils),
value: inputValue,
onClick: onOpen,
onKeyDown: onSpaceOrEnter(onOpen)
}
}, TextFieldProps));
};
process.env.NODE_ENV !== "production" ? PureDateInput.propTypes = {
acceptRegex: PropTypes.instanceOf(RegExp),
getOpenDialogAriaText: PropTypes.func,
mask: PropTypes.string,
OpenPickerButtonProps: PropTypes.object,
openPickerIcon: PropTypes.node,
renderInput: PropTypes.func.isRequired,
rifmFormatter: PropTypes.func
} : void 0;
// consider getting rid from wrapper variant
var WrapperVariantContext = React.createContext(null);
var IsStaticVariantContext = React.createContext(false);
function ownKeys$1(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }
function _objectSpread$1(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys$1(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys$1(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }
var useStyles$2 = styles$1.makeStyles({
dialogRoot: {
minWidth: DIALOG_WIDTH
},
dialogRootWider: {
minWidth: DIALOG_WIDTH_WIDER
},
dialogContainer: {
'&:focus > $dialogRoot': {
outline: 'auto',
'@media (pointer:coarse)': {
outline: 0
}
}
},
dialog: {
'&:first-child': {
padding: 0
}
},
dialogAction: {// requested for overrides
},
withAdditionalAction: {
// set justifyContent to default value to fix IE11 layout bug
// see https://github.com/mui-org/material-ui-pickers/pull/267
justifyContent: 'flex-start',
'& > *:first-child': {
marginRight: 'auto'
}
}
}, {
name: 'MuiPickersModalDialog'
});
var PickersModalDialog = function PickersModalDialog(props) {
var _props$cancelText = props.cancelText,
cancelText = _props$cancelText === void 0 ? 'Cancel' : _props$cancelText,
children = props.children,
MuiDialogClasses = props.classes,
_props$clearable = props.clearable,
clearable = _props$clearable === void 0 ? false : _props$clearable,
_props$clearText = props.clearText,
clearText = _props$clearText === void 0 ? 'Clear' : _props$clearText,
_props$okText = props.okText,
okText = _props$okText === void 0 ? 'OK' : _props$okText,
onAccept = props.onAccept,
onClear = props.onClear,
onDismiss = props.onDismiss,
onSetToday = props.onSetToday,
showTabs = props.showTabs,
_props$showTodayButto = props.showTodayButton,
showTodayButton = _props$showTodayButto === void 0 ? false : _props$showTodayButto,
_props$todayText = props.todayText,
todayText = _props$todayText === void 0 ? 'Today' : _props$todayText,
wider = props.wider,
other = _objectWithoutProperties(props, ["cancelText", "children", "classes", "clearable", "clearText", "okText", "onAccept", "onClear", "onDismiss", "onSetToday", "showTabs", "showTodayButton", "todayText", "wider"]);
var classes = useStyles$2();
return /*#__PURE__*/React.createElement(Dialog, _extends({
onClose: onDismiss,
classes: _objectSpread$1({
container: classes.dialogContainer,
paper: clsx(classes.dialogRoot, wider && classes.dialogRootWider)
}, MuiDialogClasses)
}, other), /*#__PURE__*/React.createElement(DialogContent, {
className: classes.dialog
}, children), /*#__PURE__*/React.createElement(DialogActions, {
className: clsx(classes.dialogAction, (clearable || showTodayButton) && classes.withAdditionalAction)
}, clearable && /*#__PURE__*/React.createElement(Button, {
"data-mui-test": "clear-action-button",
color: "primary",
onClick: onClear
}, clearText), showTodayButton && /*#__PURE__*/React.createElement(Button, {
"data-mui-test": "today-action-button",
color: "primary",
onClick: onSetToday
}, todayText), cancelText && /*#__PURE__*/React.createElement(Button, {
color: "primary",
onClick: onDismiss
}, cancelText), okText && /*#__PURE__*/React.createElement(Button, {
color: "primary",
onClick: onAccept
}, okText)));
};
var MobileWrapper = function MobileWrapper(props) {
var cancelText = props.cancelText,
children = props.children,
clearable = props.clearable,
clearText = props.clearText,
DateInputProps = props.DateInputProps,
DialogProps = props.DialogProps,
displayStaticWrapperAs = props.displayStaticWrapperAs,
KeyboardDateInputComponent = props.KeyboardDateInputComponent,
okText = props.okText,
onAccept = props.onAccept,
onClear = props.onClear,
onDismiss = props.onDismiss,
onSetToday = props.onSetToday,
open = props.open,
PopperProps = props.PopperProps,
_props$PureDateInputC = props.PureDateInputComponent,
PureDateInputComponent = _props$PureDateInputC === void 0 ? PureDateInput : _props$PureDateInputC,
showTabs = props.showTabs,
showTodayButton = props.showTodayButton,
todayText = props.todayText,
wider = props.wider,
other = _objectWithoutProperties(props, ["cancelText", "children", "clearable", "clearText", "DateInputProps", "DialogProps", "displayStaticWrapperAs", "KeyboardDateInputComponent", "okText", "onAccept", "onClear", "onDismiss", "onSetToday", "open", "PopperProps", "PureDateInputComponent", "showTabs", "showTodayButton", "todayText", "wider"]);
return /*#__PURE__*/React.createElement(WrapperVariantContext.Provider, {
value: "mobile"
}, /*#__PURE__*/React.createElement(PureDateInputComponent, _extends({}, other, DateInputProps)), /*#__PURE__*/React.createElement(PickersModalDialog, _extends({
wider: wider,
showTabs: showTabs,
open: open,
onClear: onClear,
onAccept: onAccept,
onDismiss: onDismiss,
onSetToday: onSetToday,
clearText: clearText,
todayText: todayText,
okText: okText,
cancelText: cancelText,
clearable: clearable,
showTodayButton: showTodayButton,
"data-mui-test": "mobile-wrapper-dialog"
}, DialogProps), children));
};
process.env.NODE_ENV !== "production" ? MobileWrapper.propTypes = {
cancelText: PropTypes.node,
clearable: PropTypes.bool,
clearText: PropTypes.node,
DialogProps: PropTypes.object,
okText: PropTypes.node,
showTodayButton: PropTypes.bool,
todayText: PropTypes.node
} : void 0;
function ownKeys$2(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }
function _objectSpread$2(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys$2(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys$2(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }
function useMaskedInput(_ref) {
var _ref$acceptRegex = _ref.acceptRegex,
acceptRegex = _ref$acceptRegex === void 0 ? /[\d]/gi : _ref$acceptRegex,
disabled = _ref.disabled,
disableMaskedInput = _ref.disableMaskedInput,
ignoreInvalidInputs = _ref.ignoreInvalidInputs,
inputFormat = _ref.inputFormat,
inputProps = _ref.inputProps,
label = _ref.label,
mask = _ref.mask,
onChange = _ref.onChange,
rawValue = _ref.rawValue,
readOnly = _ref.readOnly,
rifmFormatter = _ref.rifmFormatter,
TextFieldProps = _ref.TextFieldProps,
validationError = _ref.validationError;
var utils = useUtils();
var isFocusedRef = React.useRef(false);
var getInputValue = React.useCallback(function () {
return getDisplayDate(utils, rawValue, inputFormat);
}, [inputFormat, rawValue, utils]);
var formatHelperText = utils.getFormatHelperText(inputFormat);
var _React$useState = React.useState(getInputValue()),
_React$useState2 = _slicedToArray(_React$useState, 2),
innerInputValue = _React$useState2[0],
setInnerInputValue = _React$useState2[1];
var shouldUseMaskedInput = React.useMemo(function () {
// formatting of dates is a quite slow thing, so do not make useless .format calls
if (!mask || disableMaskedInput) {
return false;
}
return checkMaskIsValidForCurrentFormat(mask, inputFormat, acceptRegex, utils);
}, [acceptRegex, disableMaskedInput, inputFormat, mask, utils]);
var formatter = React.useMemo(function () {
return shouldUseMaskedInput && mask ? maskedDateFormatter(mask, acceptRegex) : function (st) {
return st;
};
}, [acceptRegex, mask, shouldUseMaskedInput]);
React.useEffect(function () {
// We do not need to update the input value on keystroke
// Because library formatters can change inputs from 12/12/2 to 12/12/0002
if ((rawValue === null || utils.isValid(rawValue)) && !isFocusedRef.current) {
setInnerInputValue(getInputValue());
}
}, [utils, getInputValue, rawValue]);
var handleChange = function handleChange(text) {
var finalString = text === '' || text === mask ? '' : text;
setInnerInputValue(finalString);
var date = finalString === null ? null : utils.parse(finalString, inputFormat);
if (ignoreInvalidInputs && !utils.isValid(date)) {
return;
}
onChange(date, finalString || undefined);
};
var rifmProps = rifm.useRifm({
value: innerInputValue,
onChange: handleChange,
format: rifmFormatter || formatter
});
var inputStateArgs = shouldUseMaskedInput ? rifmProps : {
value: innerInputValue,
onChange: function onChange(event) {
handleChange(event.currentTarget.value);
}
};
return _objectSpread$2({
label: label,
disabled: disabled,
error: validationError,
helperText: formatHelperText,
inputProps: _objectSpread$2(_objectSpread$2(_objectSpread$2({}, inputStateArgs), {}, {
disabled: disabled,
// make spreading in custom input easier
placeholder: formatHelperText,
readOnly: readOnly,
type: shouldUseMaskedInput ? 'tel' : 'text'
}, inputProps), {}, {
onFocus: createDelegatedEventHandler(function () {
isFocusedRef.current = true;
}, inputProps === null || inputProps === void 0 ? void 0 : inputProps.onFocus),
onBlur: createDelegatedEventHandler(function () {
isFocusedRef.current = false;
}, inputProps === null || inputProps === void 0 ? void 0 : inputProps.onBlur)
})
}, TextFieldProps);
}
function ownKeys$3(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }
function _objectSpread$3(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys$3(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys$3(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }
var KeyboardDateInput = function KeyboardDateInput(_ref) {
var containerRef = _ref.containerRef,
_ref$inputRef = _ref.inputRef,
inputRef = _ref$inputRef === void 0 ? null : _ref$inputRef,
_ref$forwardedRef = _ref.forwardedRef,
forwardedRef = _ref$forwardedRef === void 0 ? null : _ref$forwardedRef,
hideOpenPickerButton = _ref.disableOpenPicker,
_ref$getOpenDialogAri = _ref.getOpenDialogAriaText,
getOpenDialogAriaText = _ref$getOpenDialogAri === void 0 ? getTextFieldAriaText : _ref$getOpenDialogAri,
InputAdornmentProps = _ref.InputAdornmentProps,
InputProps = _ref.InputProps,
onOpen = _ref.openPicker,
OpenPickerButtonProps = _ref.OpenPickerButtonProps,
_ref$openPickerIcon = _ref.openPickerIcon,
openPickerIcon = _ref$openPickerIcon === void 0 ? /*#__PURE__*/React.createElement(CalendarIcon, null) : _ref$openPickerIcon,
renderInput = _ref.renderInput,
other = _objectWithoutProperties(_ref, ["containerRef", "inputRef", "forwardedRef", "disableOpenPicker", "getOpenDialogAriaText", "InputAdornmentProps", "InputProps", "openPicker", "OpenPickerButtonProps", "openPickerIcon", "renderInput"]);
var utils$1 = useUtils();
var inputRefHandle = utils.useForkRef(inputRef, forwardedRef);
var textFieldProps = useMaskedInput(other);
var adornmentPosition = (InputAdornmentProps === null || InputAdornmentProps === void 0 ? void 0 : InputAdornmentProps.position) || 'end';
return renderInput(_objectSpread$3(_objectSpread$3({
ref: containerRef,
inputRef: inputRefHandle
}, textFieldProps), {}, {
InputProps: _objectSpread$3(_objectSpread$3({}, InputProps), {}, _defineProperty({}, "".concat(adornmentPosition, "Adornment"), hideOpenPickerButton ? undefined : /*#__PURE__*/React.createElement(InputAdornment, _extends({
position: adornmentPosition
}, InputAdornmentProps), /*#__PURE__*/React.createElement(IconButton, _extends({
edge: adornmentPosition,
"data-mui-test": "open-picker-from-keyboard",
disabled: other.disabled,
"aria-label": getOpenDialogAriaText(other.rawValue, utils$1)
}, OpenPickerButtonProps, {
onClick: onOpen
}), openPickerIcon))))
}));
};
process.env.NODE_ENV !== "production" ? KeyboardDateInput.propTypes = {
acceptRegex: PropTypes.instanceOf(RegExp),
getOpenDialogAriaText: PropTypes.func,
mask: PropTypes.string,
OpenPickerButtonProps: PropTypes.object,
openPickerIcon: PropTypes.node,
renderInput: PropTypes.func.isRequired,
rifmFormatter: PropTypes.func
} : void 0;
var useIsomorphicEffect = typeof window === 'undefined' ? React.useEffect : React.useLayoutEffect;
function runKeyHandler(event, keyHandlers) {
var handler = keyHandlers[event.keyCode];
if (handler) {
handler(); // if event was handled prevent other side effects (e.g. page scroll)
event.preventDefault();
}
}
function useGlobalKeyDown(active, keyHandlers) {
var keyHandlersRef = React.useRef(keyHandlers);
keyHandlersRef.current = keyHandlers;
useIsomorphicEffect(function () {
if (active) {
var handleKeyDown = function handleKeyDown(event) {
runKeyHandler(event, keyHandlersRef.current);
};
window.addEventListener('keydown', handleKeyDown);
return function () {
window.removeEventListener('keydown', handleKeyDown);
};
}
return undefined;
}, [active]);
}
var keycode = {
ArrowUp: 38,
ArrowDown: 40,
ArrowLeft: 37,
ArrowRight: 39,
Enter: 13,
Home: 36,
End: 35,
PageUp: 33,
PageDown: 34,
Esc: 27
};
var useStyles$3 = styles$1.makeStyles(function (theme) {
return {
root: {
zIndex: theme.zIndex.modal
},
paper: {
transformOrigin: 'top center',
'&:focus': _defineProperty({}, IS_TOUCH_DEVICE_MEDIA, {
outline: 0
})
},
topTransition: {
transformOrigin: 'bottom center'
}
};
}, {
name: 'MuiPickersPopper'
});
var PickersPopper = function PickersPopper(props) {
var anchorEl = props.anchorEl,
children = props.children,
_props$innerRef = props.innerRef,
innerRef = _props$innerRef === void 0 ? null : _props$innerRef,
onClose = props.onClose,
onOpen = props.onOpen,
open = props.open,
PopperProps = props.PopperProps,
role = props.role,
_props$TransitionComp = props.TransitionComponent,
TransitionComponent = _props$TransitionComp === void 0 ? Grow : _props$TransitionComp,
TrapFocusProps = props.TrapFocusProps;
var classes = useStyles$3();
var paperRef = React.useRef(null);
var handlePopperRef = utils.useForkRef(paperRef, innerRef);
var lastFocusedElementRef = React.useRef(null);
var popperOptions = React.useMemo(function () {
return {
onCreate: onOpen
};
}, [onOpen]);
useGlobalKeyDown(open, _defineProperty({}, keycode.Esc, onClose));
React.useEffect(function () {
if (role === 'tooltip') {
return;
}
if (open) {
lastFocusedElementRef.current = document.activeElement;
} else if (lastFocusedElementRef.current && lastFocusedElementRef.current instanceof HTMLElement) {
lastFocusedElementRef.current.focus();
}
}, [open, role]);
var handleBlur = function handleBlur() {
if (!open) {
return;
} // document.activeElement is updating on the next tick after `blur` called
executeInTheNextEventLoopTick(function () {
var _paperRef$current;
if ((_paperRef$current = paperRef.current) === null || _paperRef$current === void 0 ? void 0 : _paperRef$current.contains(document.activeElement)) {
return;
}
onClose();
});
};
return /*#__PURE__*/React.createElement(Popper, _extends({
transition: true,
role: role,
open: open,
anchorEl: anchorEl,
className: clsx(classes.root, PopperProps === null || PopperProps === void 0 ? void 0 : PopperProps.className),
popperOptions: popperOptions
}, PopperProps), function (_ref) {
var TransitionProps = _ref.TransitionProps,
placement = _ref.placement;
return /*#__PURE__*/React.createElement(TrapFocus, _extends({
open: open,
disableAutoFocus: true,
disableEnforceFocus: role === 'tooltip',
isEnabled: function isEnabled() {
return true;
},
getDoc: function getDoc() {
var _paperRef$current$own, _paperRef$current2;
return (_paperRef$current$own = (_paperRef$current2 = paperRef.current) === null || _paperRef$current2 === void 0 ? void 0 : _paperRef$current2.ownerDocument) !== null && _paperRef$current$own !== void 0 ? _paperRef$current$own : document;
}
}, TrapFocusProps), /*#__PURE__*/React.createElement(TransitionComponent, TransitionProps, /*#__PURE__*/React.createElement(Paper, {
tabIndex: -1,
elevation: 8,
ref: handlePopperRef,
className: clsx(classes.paper, placement === 'top' && classes.topTransition),
onBlur: handleBlur
}, children)));
});
};
var CanAutoFocusContext = React.createContext(true);
var useCanAutoFocus = function useCanAutoFocus() {
return React.useContext(CanAutoFocusContext);
};
function useAutoFocusControl(open) {
var _React$useState = React.useState(false),
_React$useState2 = _slicedToArray(_React$useState, 2),
canAutoFocus = _React$useState2[0],
setCanAutoFocus = _React$useState2[1];
React.useEffect(function () {
if (!open) {
setCanAutoFocus(false);
}
}, [open]);
return {
canAutoFocus: canAutoFocus,
onOpen: React.useCallback(function () {
return setCanAutoFocus(true);
}, [])
};
}
var DesktopWrapper = function DesktopWrapper(props) {
var children = props.children,
DateInputProps = props.DateInputProps,
_props$KeyboardDateIn = props.KeyboardDateInputComponent,
KeyboardDateInputComponent = _props$KeyboardDateIn === void 0 ? KeyboardDateInput : _props$KeyboardDateIn,
onDismiss = props.onDismiss,
open = props.open,
PopperProps = props.PopperProps,
TransitionComponent = props.TransitionComponent;
var inputRef = React.useRef(null);
var _useAutoFocusControl = useAutoFocusControl(open),
canAutoFocus = _useAutoFocusControl.canAutoFocus,
onOpen = _useAutoFocusControl.onOpen;
return /*#__PURE__*/React.createElement(WrapperVariantContext.Provider, {
value: "desktop"
}, /*#__PURE__*/React.createElement(CanAutoFocusContext.Provider, {
value: canAutoFocus
}, /*#__PURE__*/React.createElement(KeyboardDateInputComponent, _extends({}, DateInputProps, {
inputRef: inputRef
})), /*#__PURE__*/React.createElement(PickersPopper, {
role: "dialog",
open: open,
anchorEl: inputRef.current,
TransitionComponent: TransitionComponent,
PopperProps: PopperProps,
onClose: onDismiss,
onOpen: onOpen
}, children)));
};
process.env.NODE_ENV !== "production" ? DesktopWrapper.propTypes = {
onOpen: PropTypes.func,
onClose: PropTypes.func
} : void 0;
var DesktopTooltipWrapper = function DesktopTooltipWrapper(props) {
var open = props.open,
children = props.children,
PopperProps = props.PopperProps,
onDismiss = props.onDismiss,
DateInputProps = props.DateInputProps,
TransitionComponent = props.TransitionComponent,
_props$KeyboardDateIn = props.KeyboardDateInputComponent,
KeyboardDateInputComponent = _props$KeyboardDateIn === void 0 ? KeyboardDateInput : _props$KeyboardDateIn;
var inputRef = React.useRef(null);
var popperRef = React.useRef(null);
var _useAutoFocusControl = useAutoFocusControl(open),
canAutoFocus = _useAutoFocusControl.canAutoFocus,
onOpen = _useAutoFocusControl.onOpen;
var handleBlur = function handleBlur() {
executeInTheNextEventLoopTick(function () {
var _inputRef$current, _popperRef$current;
if (((_inputRef$current = inputRef.current) === null || _inputRef$current === void 0 ? void 0 : _inputRef$current.contains(document.activeElement)) || ((_popperRef$current = popperRef.current) === null || _popperRef$current === void 0 ? void 0 : _popperRef$current.contains(document.activeElement))) {
return;
}
onDismiss();
});
};
return /*#__PURE__*/React.createElement(WrapperVariantContext.Provider, {
value: "desktop"
}, /*#__PURE__*/React.createElement(CanAutoFocusContext.Provider, {
value: canAutoFocus
}, /*#__PURE__*/React.createElement(KeyboardDateInputComponent, _extends({}, DateInputProps, {
containerRef: inputRef,
onBlur: handleBlur
})), /*#__PURE__*/React.createElement(PickersPopper, {
role: "tooltip",
open: open,
innerRef: popperRef,
anchorEl: inputRef.current,
TransitionComponent: TransitionComponent,
PopperProps: PopperProps,
onBlur: handleBlur,
onClose: onDismiss,
onOpen: onOpen
}, children)));
};
var makeResponsiveWrapper = function makeResponsiveWrapper(DesktopWrapperComponent, MobileWrapperComponent) {
var ResponsiveWrapper = function ResponsiveWrapper(_ref) {
var cancelText = _ref.cancelText,
clearable = _ref.clearable,
clearText = _ref.clearText,
_ref$desktopModeMedia = _ref.desktopModeMediaQuery,
desktopModeMediaQuery = _ref$desktopModeMedia === void 0 ? IS_TOUCH_DEVICE_MEDIA : _ref$desktopModeMedia,
DialogProps = _ref.DialogProps,
displayStaticWrapperAs = _ref.displayStaticWrapperAs,
okText = _ref.okText,
PopperProps = _ref.PopperProps,
showTodayButton = _ref.showTodayButton,
todayText = _ref.todayText,
TransitionComponent = _ref.TransitionComponent,
other = _objectWithoutProperties(_ref, ["cancelText", "clearable", "clearText", "desktopModeMediaQuery", "DialogProps", "displayStaticWrapperAs", "okText", "PopperProps", "showTodayButton", "todayText", "TransitionComponent"]);
var isDesktop = useMediaQuery(desktopModeMediaQuery);
return isDesktop ? /*#__PURE__*/React.createElement(DesktopWrapperComponent, _extends({
PopperProps: PopperProps,
TransitionComponent: TransitionComponent
}, other)) : /*#__PURE__*/React.createElement(MobileWrapperComponent, _extends({
okText: okText,
cancelText: cancelText,
clearText: clearText,
todayText: todayText,
showTodayButton: showTodayButton,
clearable: clearable,
DialogProps: DialogProps
}, other));
};
return ResponsiveWrapper;
};
var ResponsiveWrapper = makeResponsiveWrapper(DesktopWrapper, MobileWrapper);
var ResponsiveTooltipWrapper = makeResponsiveWrapper(DesktopTooltipWrapper, MobileWrapper);
function useParsedDate(possiblyUnparsedValue) {
var utils = useUtils();
return React.useMemo(function () {
return typeof possiblyUnparsedValue === 'undefined' ? undefined : utils.date(possiblyUnparsedValue);
}, [possiblyUnparsedValue, utils]);
}
function useNextMonthDisabled(month, _ref) {
var disableFuture = _ref.disableFuture,
maxDate = _ref.maxDate;
var utils = useUtils();
return React.useMemo(function () {
var now = utils.date();
var lastEnabledMonth = utils.startOfMonth(disableFuture && utils.isBefore(now, maxDate) ? now : maxDate);
return !utils.isAfter(lastEnabledMonth, month);
}, [disableFuture, maxDate, month, utils]);
}
function usePreviousMonthDisabled(month, _ref2) {
var disablePast = _ref2.disablePast,
minDate = _ref2.minDate;
var utils = useUtils();
return React.useMemo(function () {
var now = utils.date();
var firstEnabledMonth = utils.startOfMonth(disablePast && utils.isAfter(now, minDate) ? now : minDate);
return !utils.isBefore(firstEnabledMonth, month);
}, [disablePast, minDate, month, utils]);
}
var useStyles$4 = styles$1.makeStyles(function (theme) {
return {
root: {
overflow: 'hidden',
minWidth: DIALOG_WIDTH,
display: 'flex',
flexDirection: 'column',
backgroundColor: theme.palette.background.paper
}
};
}, {
name: 'MuiPickersStaticWrapper'
});
var StaticWrapper = function StaticWrapper(props) {
var _props$displayStaticW = props.displayStaticWrapperAs,
displayStaticWrapperAs = _props$displayStaticW === void 0 ? 'static' : _props$displayStaticW,
children = props.children;
var classes = useStyles$4();
var isStatic = true;
return /*#__PURE__*/React.createElement(IsStaticVariantContext.Provider, {
value: isStatic
}, /*#__PURE__*/React.createElement(WrapperVariantContext.Provider, {
value: displayStaticWrapperAs
}, /*#__PURE__*/React.createElement("div", {
className: classes.root
}, children)));
};
var defaultIsSameError = function defaultIsSameError(a, b) {
return a === b;
};
function makeValidationHook(validateFn) {
var _ref = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {},
defaultValidationError = _ref.defaultValidationError,
_ref$isSameError = _ref.isSameError,
isSameError = _ref$isSameError === void 0 ? defaultIsSameError : _ref$isSameError;
return function (value, props) {
var utils = useUtils();
var previousValidationErrorRef = React.useRef(defaultValidationError || null);
var validationError = validateFn(utils, value, props);
React.useEffect(function () {
if (props.onError && !isSameError(validationError, previousValidationErrorRef.current)) {
props.onError(validationError, value);
}
previousValidationErrorRef.current = validationError;
}, [previousValidationErrorRef, props, validationError, value]);
return validationError;
};
}
var date = PropTypes.oneOfType([PropTypes.object, PropTypes.string, PropTypes.number, PropTypes.instanceOf(Date)]);
var datePickerView = PropTypes.oneOf(['year', 'month', 'day']);
var defaultMinDate = new Date('1900-01-01');
var defaultMaxDate = new Date('2099-12-31');
functi