UNPKG

@nuragic/pickers

Version:

React components, that implements material design pickers for material-ui v4

800 lines (742 loc) 28.8 kB
import _objectWithoutProperties from '@babel/runtime/helpers/esm/objectWithoutProperties'; import { createElement, useRef, useMemo, useEffect, useCallback, forwardRef, memo, Fragment } from 'react'; import { bool, object, number, func, oneOf } from 'prop-types'; import { w as withDefaultProps, u as useUtils, b as useDefaultProps, a as useNow } from './dimensions-f39eca69.js'; import _extends from '@babel/runtime/helpers/esm/extends'; import clsx from 'clsx'; import Typography from '@material-ui/core/Typography'; import { makeStyles, fade, useTheme } from '@material-ui/core/styles'; import Grid from '@material-ui/core/Grid'; import IconButton from '@material-ui/core/IconButton'; import Toolbar from '@material-ui/core/Toolbar'; import { createSvgIcon } from '@material-ui/core/utils'; import _slicedToArray from '@babel/runtime/helpers/esm/slicedToArray'; import { u as useCanAutoFocus, o as onSpaceOrEnter, a as arrayIncludes, p as pipe } from './useCanAutoFocus-1eacc580.js'; import { g as getMeridiem, c as convertToMeridiem, C as Clock, a as createIsAfterIgnoreDatePart, b as convertValueToMeridiem } from './Clock-c2c3c22b.js'; import Button from '@material-ui/core/Button'; import ButtonBase from '@material-ui/core/ButtonBase'; /** * @ignore - internal component. */ var PenIcon = createSvgIcon( /*#__PURE__*/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 = createSvgIcon( /*#__PURE__*/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 = 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__*/createElement(Toolbar, { "data-mui-test": "picker-toolbar", className: clsx(classes.root, className, isLandscape && classes.toolbarLandscape) }, /*#__PURE__*/createElement(Typography, { "data-mui-test": "picker-toolbar-title", color: "inherit", variant: "overline" }, toolbarTitle), /*#__PURE__*/createElement(Grid, { container: true, justify: "space-between", className: classes.dateTitleContainer, direction: isLandscape ? landscapeDirection : 'row', alignItems: isLandscape ? 'flex-start' : 'flex-end' }, children, /*#__PURE__*/createElement(IconButton, { onClick: toggleMobileKeyboardView, className: penIconClassName, color: "inherit", "data-mui-test": "toggle-mobile-keyboard-view", "aria-label": getMobileKeyboardInputViewButtonText(isMobileKeyboardViewOpen) }, isMobileKeyboardViewOpen ? /*#__PURE__*/createElement(CalendarIcon, { color: "inherit" }) : /*#__PURE__*/createElement(PenIcon, { color: "inherit" })))); }; 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 useStyles$1 = makeStyles(function (theme) { var size = 32; var clockNumberColor = theme.palette.type === 'light' ? theme.palette.text.primary : theme.palette.text.secondary; return { root: { outline: 0, width: size, height: size, userSelect: 'none', position: 'absolute', left: "calc((100% - ".concat(size, "px) / 2)"), display: 'inline-flex', justifyContent: 'center', alignItems: 'center', borderRadius: '50%', color: clockNumberColor, '&:focused': { backgroundColor: theme.palette.background.paper } }, clockNumberSelected: { color: theme.palette.primary.contrastText }, clockNumberDisabled: { pointerEvents: 'none', color: fade(clockNumberColor, 0.2) } }; }, { name: 'MuiPickersClockNumber' }); var ClockNumber = function ClockNumber(props) { var disabled = props.disabled, getClockNumberText = props.getClockNumberText, index = props.index, isInner = props.isInner, label = props.label, onSelect = props.onSelect, selected = props.selected; var classes = useStyles$1(); var canAutoFocus = useCanAutoFocus(); var ref = useRef(null); var className = clsx(classes.root, selected && classes.clockNumberSelected, disabled && classes.clockNumberDisabled); var transformStyle = useMemo(function () { var position = positions[index]; return { transform: "translate(".concat(position[0], "px, ").concat(position[1], "px") }; }, [index]); useEffect(function () { if (canAutoFocus && selected && ref.current) { ref.current.focus(); } }, [canAutoFocus, selected]); return /*#__PURE__*/createElement(ButtonBase, { focusRipple: true, centerRipple: true, ref: ref, "aria-disabled": disabled, tabIndex: disabled ? -1 : 0, component: "span", className: className, style: transformStyle, "aria-label": getClockNumberText(label), onKeyDown: onSpaceOrEnter(function () { return onSelect('finish'); }) }, /*#__PURE__*/createElement(Typography, { variant: isInner ? 'body2' : 'body1' }, label)); }; var getHourNumbers = function getHourNumbers(_ref) { var ampm = _ref.ampm, date = _ref.date, getClockNumberText = _ref.getClockNumberText, isDisabled = _ref.isDisabled, onChange = _ref.onChange, utils = _ref.utils; var currentHours = date ? utils.getHours(date) : null; var hourNumbers = []; var startHour = ampm ? 1 : 0; var endHour = ampm ? 12 : 23; var isSelected = function isSelected(hour) { if (currentHours === null) { return false; } if (ampm) { if (hour === 12) { return currentHours === 12 || currentHours === 0; } return currentHours === hour || currentHours - 12 === hour; } return currentHours === hour; }; var _loop = function _loop(_hour) { var label = _hour.toString(); if (_hour === 0) { label = '00'; } var isInner = !ampm && (_hour === 0 || _hour > 12); hourNumbers.push( /*#__PURE__*/createElement(ClockNumber, { key: _hour, index: _hour, isInner: isInner, selected: isSelected(_hour), disabled: isDisabled(_hour), label: utils.formatNumber(label), onSelect: function onSelect() { return onChange(_hour, 'finish'); }, getClockNumberText: getClockNumberText })); }; for (var _hour = startHour; _hour <= endHour; _hour += 1) { _loop(_hour); } return hourNumbers; }; var getMinutesNumbers = function getMinutesNumbers(_ref2) { var utils = _ref2.utils, value = _ref2.value, onChange = _ref2.onChange, isDisabled = _ref2.isDisabled, getClockNumberText = _ref2.getClockNumberText; var f = utils.formatNumber; return [[5, f('05')], [10, f('10')], [15, f('15')], [20, f('20')], [25, f('25')], [30, f('30')], [35, f('35')], [40, f('40')], [45, f('45')], [50, f('50')], [55, f('55')], [0, f('00')]].map(function (_ref3, index) { var _ref4 = _slicedToArray(_ref3, 2), numberValue = _ref4[0], label = _ref4[1]; return /*#__PURE__*/createElement(ClockNumber, { key: numberValue, label: label, index: index + 1, disabled: isDisabled(numberValue), selected: numberValue === value, onSelect: function onSelect(isFinish) { return onChange(numberValue, isFinish); }, getClockNumberText: getClockNumberText }); }); }; var useStyles$2 = makeStyles(function (theme) { var textColor = theme.palette.type === 'light' ? theme.palette.primary.contrastText : theme.palette.getContrastText(theme.palette.background["default"]); return { root: { transition: theme.transitions.create('color'), color: fade(textColor, 0.54), '&$selected': { color: textColor } }, selected: {} }; }, { name: 'MuiPickersToolbarText' }); var ToolbarText = function ToolbarText(props) { var className = props.className, selected = props.selected, value = props.value, other = _objectWithoutProperties(props, ["className", "selected", "value"]); var classes = useStyles$2(); return /*#__PURE__*/createElement(Typography, _extends({ className: clsx(classes.root, className, selected && classes.selected) }, other), value); }; var useStyles$3 = makeStyles({ root: { padding: 0, minWidth: '16px', textTransform: 'none' } }, { name: 'MuiPickersToolbarButton' }); var ToolbarButton = function ToolbarButton(props) { var align = props.align, className = props.className, selected = props.selected, typographyClassName = props.typographyClassName, value = props.value, variant = props.variant, other = _objectWithoutProperties(props, ["align", "className", "selected", "typographyClassName", "value", "variant"]); var classes = useStyles$3(); return /*#__PURE__*/createElement(Button, _extends({ "data-mui-test": "toolbar-button", variant: "text", className: clsx(classes.root, className) }, other), /*#__PURE__*/createElement(ToolbarText, { align: align, className: typographyClassName, variant: variant, value: value, selected: selected })); }; ToolbarButton.displayName = 'ToolbarButton'; var muiComponentConfig = { name: 'MuiPickersTimePickerToolbar' }; var useStyles$4 = makeStyles({ separator: { outline: 0, margin: '0 4px 0 2px', cursor: 'default' }, hourMinuteLabel: { display: 'flex', justifyContent: 'flex-end', alignItems: 'flex-end' }, hourMinuteLabelLandscape: { marginTop: 'auto' }, hourMinuteLabelReverse: { flexDirection: 'row-reverse' }, ampmSelection: { display: 'flex', flexDirection: 'column', marginRight: 'auto', marginLeft: 12 }, ampmLandscape: { margin: '4px 0 auto', flexDirection: 'row', justifyContent: 'space-around', flexBasis: '100%' }, ampmLabel: { fontSize: 17 }, penIconLandscape: { marginTop: 'auto' } }, muiComponentConfig); function useMeridiemMode(date, ampm, onChange) { var utils = useUtils(); var meridiemMode = getMeridiem(date, utils); var handleMeridiemChange = useCallback(function (mode) { var timeWithMeridiem = convertToMeridiem(date, mode, Boolean(ampm), utils); onChange(timeWithMeridiem, 'partial'); }, [ampm, date, onChange, utils]); return { meridiemMode: meridiemMode, handleMeridiemChange: handleMeridiemChange }; } var clockTypographyVariant = 'h3'; var TimePickerToolbar = withDefaultProps(muiComponentConfig, function (_ref) { var ampm = _ref.ampm, ampmInClock = _ref.ampmInClock, date = _ref.date, isLandscape = _ref.isLandscape, isMobileKeyboardViewOpen = _ref.isMobileKeyboardViewOpen, onChange = _ref.onChange, openView = _ref.openView, setOpenView = _ref.setOpenView, toggleMobileKeyboardView = _ref.toggleMobileKeyboardView, _ref$toolbarTitle = _ref.toolbarTitle, toolbarTitle = _ref$toolbarTitle === void 0 ? 'SELECT TIME' : _ref$toolbarTitle, views = _ref.views, other = _objectWithoutProperties(_ref, ["ampm", "ampmInClock", "date", "isLandscape", "isMobileKeyboardViewOpen", "onChange", "openView", "setOpenView", "toggleMobileKeyboardView", "toolbarTitle", "views"]); var utils = useUtils(); var theme = useTheme(); var classes = useStyles$4(); var showAmPmControl = Boolean(ampm && !ampmInClock); var _useMeridiemMode = useMeridiemMode(date, ampm, onChange), meridiemMode = _useMeridiemMode.meridiemMode, handleMeridiemChange = _useMeridiemMode.handleMeridiemChange; var formatHours = function formatHours(time) { return ampm ? utils.format(time, 'hours12h') : utils.format(time, 'hours24h'); }; var separator = /*#__PURE__*/createElement(ToolbarText, { tabIndex: -1, value: ":", variant: clockTypographyVariant, selected: false, className: classes.separator }); return /*#__PURE__*/createElement(PickerToolbar, _extends({ landscapeDirection: "row", toolbarTitle: toolbarTitle, isLandscape: isLandscape, isMobileKeyboardViewOpen: isMobileKeyboardViewOpen, toggleMobileKeyboardView: toggleMobileKeyboardView, penIconClassName: clsx(isLandscape && classes.penIconLandscape) }, other), /*#__PURE__*/createElement("div", { className: clsx(classes.hourMinuteLabel, isLandscape && classes.hourMinuteLabelLandscape, theme.direction === 'rtl' && classes.hourMinuteLabelReverse) }, arrayIncludes(views, 'hours') && /*#__PURE__*/createElement(ToolbarButton, { "data-mui-test": "hours", tabIndex: -1, variant: clockTypographyVariant, onClick: function onClick() { return setOpenView('hours'); }, selected: openView === 'hours', value: date ? formatHours(date) : '--' }), arrayIncludes(views, ['hours', 'minutes']) && separator, arrayIncludes(views, 'minutes') && /*#__PURE__*/createElement(ToolbarButton, { "data-mui-test": "minutes", tabIndex: -1, variant: clockTypographyVariant, onClick: function onClick() { return setOpenView('minutes'); }, selected: openView === 'minutes', value: date ? utils.format(date, 'minutes') : '--' }), arrayIncludes(views, ['minutes', 'seconds']) && separator, arrayIncludes(views, 'seconds') && /*#__PURE__*/createElement(ToolbarButton, { "data-mui-test": "seconds", variant: clockTypographyVariant, onClick: function onClick() { return setOpenView('seconds'); }, selected: openView === 'seconds', value: date ? utils.format(date, 'seconds') : '--' })), showAmPmControl && /*#__PURE__*/createElement("div", { className: clsx(classes.ampmSelection, isLandscape && classes.ampmLandscape) }, /*#__PURE__*/createElement(ToolbarButton, { disableRipple: true, variant: "subtitle2", "data-mui-test": "toolbar-am-btn", selected: meridiemMode === 'am', typographyClassName: classes.ampmLabel, value: utils.getMeridiemText('am'), onClick: function onClick() { return handleMeridiemChange('am'); } }), /*#__PURE__*/createElement(ToolbarButton, { disableRipple: true, variant: "subtitle2", "data-mui-test": "toolbar-pm-btn", selected: meridiemMode === 'pm', typographyClassName: classes.ampmLabel, value: utils.getMeridiemText('pm'), onClick: function onClick() { return handleMeridiemChange('pm'); } }))); }); /** * @ignore - internal component. */ var ArrowLeftIcon = createSvgIcon( /*#__PURE__*/createElement("path", { d: "M15.41 16.59L10.83 12l4.58-4.59L14 6l-6 6 6 6 1.41-1.41z" }), 'ArrowLeft'); /** * @ignore - internal component. */ var ArrowRightIcon = createSvgIcon( /*#__PURE__*/createElement("path", { d: "M8.59 16.59L13.17 12 8.59 7.41 10 6l6 6-6 6-1.41-1.41z" }), 'ArrowRight'); var useStyles$5 = makeStyles(function (theme) { return { root: {}, iconButton: { zIndex: 1, backgroundColor: theme.palette.background.paper }, previousMonthButtonMargin: { marginRight: 24 }, hidden: { visibility: 'hidden' } }; }, { name: 'MuiPickersArrowSwitcher' }); var PureArrowSwitcher = forwardRef(function (props, ref) { var className = props.className, isLeftDisabled = props.isLeftDisabled, isLeftHidden = props.isLeftHidden, isRightDisabled = props.isRightDisabled, isRightHidden = props.isRightHidden, leftArrowButtonProps = props.leftArrowButtonProps, leftArrowButtonText = props.leftArrowButtonText, _props$leftArrowIcon = props.leftArrowIcon, leftArrowIcon = _props$leftArrowIcon === void 0 ? /*#__PURE__*/createElement(ArrowLeftIcon, null) : _props$leftArrowIcon, onLeftClick = props.onLeftClick, onRightClick = props.onRightClick, rightArrowButtonProps = props.rightArrowButtonProps, rightArrowButtonText = props.rightArrowButtonText, _props$rightArrowIcon = props.rightArrowIcon, rightArrowIcon = _props$rightArrowIcon === void 0 ? /*#__PURE__*/createElement(ArrowRightIcon, null) : _props$rightArrowIcon, text = props.text, other = _objectWithoutProperties(props, ["className", "isLeftDisabled", "isLeftHidden", "isRightDisabled", "isRightHidden", "leftArrowButtonProps", "leftArrowButtonText", "leftArrowIcon", "onLeftClick", "onRightClick", "rightArrowButtonProps", "rightArrowButtonText", "rightArrowIcon", "text"]); var classes = useStyles$5(); var theme = useTheme(); var isRtl = theme.direction === 'rtl'; return /*#__PURE__*/createElement("div", _extends({ className: clsx(classes.root, className), ref: ref }, other), /*#__PURE__*/createElement(IconButton, _extends({ "data-mui-test": "previous-arrow-button", size: "small", "aria-label": leftArrowButtonText }, leftArrowButtonProps, { disabled: isLeftDisabled, onClick: onLeftClick, className: clsx(classes.iconButton, leftArrowButtonProps === null || leftArrowButtonProps === void 0 ? void 0 : leftArrowButtonProps.className, isLeftHidden && classes.hidden, !text && classes.previousMonthButtonMargin) }), isRtl ? rightArrowIcon : leftArrowIcon), text && /*#__PURE__*/createElement(Typography, { variant: "subtitle1", display: "inline" }, text), /*#__PURE__*/createElement(IconButton, _extends({ "data-mui-test": "next-arrow-button", size: "small", "aria-label": rightArrowButtonText }, rightArrowButtonProps, { disabled: isRightDisabled, onClick: onRightClick, className: clsx(classes.iconButton, rightArrowButtonProps === null || rightArrowButtonProps === void 0 ? void 0 : rightArrowButtonProps.className, Boolean(isRightHidden) && classes.hidden) }), isRtl ? leftArrowIcon : rightArrowIcon)); }); PureArrowSwitcher.displayName = 'ArrowSwitcher'; var ArrowSwitcher = memo(PureArrowSwitcher); var muiPickersComponentConfig = { name: 'MuiPickersClockView' }; var useStyles$6 = makeStyles(function () { return { arrowSwitcher: { position: 'absolute', right: 12, top: 15 } }; }, muiPickersComponentConfig); function getMinutesAriaText(minute) { return "".concat(minute, " minutes"); } var getHoursAriaText = function getHoursAriaText(hour) { return "".concat(hour, " hours"); }; var getSecondsAriaText = function getSecondsAriaText(seconds) { return "".concat(seconds, " seconds"); }; function ClockView(props) { var _useDefaultProps = useDefaultProps(props, muiPickersComponentConfig), allowKeyboardControl = _useDefaultProps.allowKeyboardControl, ampm = _useDefaultProps.ampm, ampmInClock = _useDefaultProps.ampmInClock, date = _useDefaultProps.date, disableIgnoringDatePartForTimeValidation = _useDefaultProps.disableIgnoringDatePartForTimeValidation, _useDefaultProps$getH = _useDefaultProps.getHoursClockNumberText, getHoursClockNumberText = _useDefaultProps$getH === void 0 ? getHoursAriaText : _useDefaultProps$getH, _useDefaultProps$getM = _useDefaultProps.getMinutesClockNumberText, getMinutesClockNumberText = _useDefaultProps$getM === void 0 ? getMinutesAriaText : _useDefaultProps$getM, _useDefaultProps$getS = _useDefaultProps.getSecondsClockNumberText, getSecondsClockNumberText = _useDefaultProps$getS === void 0 ? getSecondsAriaText : _useDefaultProps$getS, leftArrowButtonProps = _useDefaultProps.leftArrowButtonProps, _useDefaultProps$left = _useDefaultProps.leftArrowButtonText, leftArrowButtonText = _useDefaultProps$left === void 0 ? 'open previous view' : _useDefaultProps$left, leftArrowIcon = _useDefaultProps.leftArrowIcon, maxTime = _useDefaultProps.maxTime, minTime = _useDefaultProps.minTime, _useDefaultProps$minu = _useDefaultProps.minutesStep, minutesStep = _useDefaultProps$minu === void 0 ? 1 : _useDefaultProps$minu, nextViewAvailable = _useDefaultProps.nextViewAvailable, onChange = _useDefaultProps.onChange, onDateChange = _useDefaultProps.onDateChange, openNextView = _useDefaultProps.openNextView, openPreviousView = _useDefaultProps.openPreviousView, previousViewAvailable = _useDefaultProps.previousViewAvailable, rightArrowButtonProps = _useDefaultProps.rightArrowButtonProps, _useDefaultProps$righ = _useDefaultProps.rightArrowButtonText, rightArrowButtonText = _useDefaultProps$righ === void 0 ? 'open next view' : _useDefaultProps$righ, rightArrowIcon = _useDefaultProps.rightArrowIcon, shouldDisableTime = _useDefaultProps.shouldDisableTime, showViewSwitcher = _useDefaultProps.showViewSwitcher, type = _useDefaultProps.type; var now = useNow(); var utils = useUtils(); var classes = useStyles$6(); var dateOrNow = date || now; var _useMeridiemMode = useMeridiemMode(dateOrNow, ampm, onDateChange), meridiemMode = _useMeridiemMode.meridiemMode, handleMeridiemChange = _useMeridiemMode.handleMeridiemChange; var isTimeDisabled = useCallback(function (rawValue, type) { if (date === null) { return false; } var validateTimeValue = function validateTimeValue(getRequestedTimePoint) { var isAfterComparingFn = createIsAfterIgnoreDatePart(Boolean(disableIgnoringDatePartForTimeValidation), utils); return Boolean(minTime && isAfterComparingFn(minTime, getRequestedTimePoint('end')) || maxTime && isAfterComparingFn(getRequestedTimePoint('start'), maxTime) || shouldDisableTime && shouldDisableTime(rawValue, type)); }; switch (type) { case 'hours': { var hoursWithMeridiem = convertValueToMeridiem(rawValue, meridiemMode, Boolean(ampm)); return validateTimeValue(function (when) { return pipe(function (currentDate) { return utils.setHours(currentDate, hoursWithMeridiem); }, function (dateWithHours) { return utils.setMinutes(dateWithHours, when === 'start' ? 0 : 59); }, function (dateWithMinutes) { return utils.setSeconds(dateWithMinutes, when === 'start' ? 0 : 59); })(date); }); } case 'minutes': return validateTimeValue(function (when) { return pipe(function (currentDate) { return utils.setMinutes(currentDate, rawValue); }, function (dateWithMinutes) { return utils.setSeconds(dateWithMinutes, when === 'start' ? 0 : 59); })(date); }); case 'seconds': return validateTimeValue(function () { return utils.setSeconds(date, rawValue); }); default: throw new Error('not supported'); } }, [ampm, date, disableIgnoringDatePartForTimeValidation, maxTime, meridiemMode, minTime, shouldDisableTime, utils]); var viewProps = useMemo(function () { switch (type) { case 'hours': { var handleHoursChange = function handleHoursChange(value, isFinish) { var valueWithMeridiem = convertValueToMeridiem(value, meridiemMode, Boolean(ampm)); onChange(utils.setHours(dateOrNow, valueWithMeridiem), isFinish); }; return { onChange: handleHoursChange, value: utils.getHours(dateOrNow), children: getHourNumbers({ date: date, utils: utils, ampm: Boolean(ampm), onChange: handleHoursChange, getClockNumberText: getHoursClockNumberText, isDisabled: function isDisabled(value) { return isTimeDisabled(value, 'hours'); } }) }; } case 'minutes': { var minutesValue = utils.getMinutes(dateOrNow); var handleMinutesChange = function handleMinutesChange(value, isFinish) { onChange(utils.setMinutes(dateOrNow, value), isFinish); }; return { value: minutesValue, onChange: handleMinutesChange, children: getMinutesNumbers({ utils: utils, value: minutesValue, onChange: handleMinutesChange, getClockNumberText: getMinutesClockNumberText, isDisabled: function isDisabled(value) { return isTimeDisabled(value, 'minutes'); } }) }; } case 'seconds': { var secondsValue = utils.getSeconds(dateOrNow); var handleSecondsChange = function handleSecondsChange(value, isFinish) { onChange(utils.setSeconds(dateOrNow, value), isFinish); }; return { value: secondsValue, onChange: handleSecondsChange, children: getMinutesNumbers({ utils: utils, value: secondsValue, onChange: handleSecondsChange, getClockNumberText: getSecondsClockNumberText, isDisabled: function isDisabled(value) { return isTimeDisabled(value, 'seconds'); } }) }; } default: throw new Error('You must provide the type for ClockView'); } }, [type, utils, date, ampm, getHoursClockNumberText, getMinutesClockNumberText, getSecondsClockNumberText, meridiemMode, onChange, dateOrNow, isTimeDisabled]); return /*#__PURE__*/createElement(Fragment, null, showViewSwitcher && /*#__PURE__*/createElement(ArrowSwitcher, { className: classes.arrowSwitcher, leftArrowButtonProps: leftArrowButtonProps, rightArrowButtonProps: rightArrowButtonProps, leftArrowButtonText: leftArrowButtonText, rightArrowButtonText: rightArrowButtonText, leftArrowIcon: leftArrowIcon, rightArrowIcon: rightArrowIcon, onLeftClick: openPreviousView, onRightClick: openNextView, isLeftDisabled: previousViewAvailable, isRightDisabled: nextViewAvailable }), /*#__PURE__*/createElement(Clock, _extends({ date: date, ampmInClock: ampmInClock // @ts-expect-error FIX ME , onDateChange: onDateChange, type: type, ampm: ampm, minutesStep: minutesStep, allowKeyboardControl: allowKeyboardControl, isTimeDisabled: isTimeDisabled, meridiemMode: meridiemMode, handleMeridiemChange: handleMeridiemChange }, viewProps))); } process.env.NODE_ENV !== "production" ? ClockView.propTypes = { ampm: bool, date: object, minutesStep: number, onChange: func.isRequired, type: oneOf(['minutes', 'hours', 'seconds']).isRequired } : void 0; ClockView.displayName = 'ClockView'; export { ArrowSwitcher as A, ClockView as C, PickerToolbar as P, ToolbarButton as T, TimePickerToolbar as a, ToolbarText as b, CalendarIcon as c, useStyles$6 as u }; //# sourceMappingURL=ClockView-cbc47796.js.map