UNPKG

@amaui/ui-react

Version:
477 lines (476 loc) 28.1 kB
"use strict"; var __rest = (this && this.__rest) || function (s, e) { var t = {}; for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0) t[p] = s[p]; if (s != null && typeof Object.getOwnPropertySymbols === "function") for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) { if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i])) t[p[i]] = s[p[i]]; } return t; }; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); const jsx_runtime_1 = require("react/jsx-runtime"); const react_1 = __importDefault(require("react")); const utils_1 = require("@amaui/utils"); const style_react_1 = require("@amaui/style-react"); const date_1 = require("@amaui/date"); const IconMaterialDateRangeW100Filled_1 = __importDefault(require("@amaui/icons-material-rounded-react/IconMaterialDateRangeW100Filled")); const IconMaterialCalendarTodayW100Filled_1 = __importDefault(require("@amaui/icons-material-rounded-react/IconMaterialCalendarTodayW100Filled")); const IconMaterialScheduleW100_1 = __importDefault(require("@amaui/icons-material-rounded-react/IconMaterialScheduleW100")); const AdvancedTextField_1 = __importDefault(require("../AdvancedTextField")); const Modal_1 = __importDefault(require("../Modal")); const Tooltip_1 = __importDefault(require("../Tooltip")); const Slide_1 = __importDefault(require("../Slide")); const Surface_1 = __importDefault(require("../Surface")); const IconButton_1 = __importDefault(require("../IconButton")); const Line_1 = __importDefault(require("../Line")); const Type_1 = __importDefault(require("../Type")); const Button_1 = __importDefault(require("../Button")); const DatePicker_1 = __importDefault(require("../DatePicker")); const TimePicker_1 = __importDefault(require("../TimePicker")); const ClickListener_1 = __importDefault(require("../ClickListener")); const useMediaQuery_1 = __importDefault(require("../useMediaQuery")); const DatePicker_2 = require("../DatePicker/DatePicker"); const utils_2 = require("../utils"); const useStyle = (0, style_react_1.style)(theme => ({ root: {}, main: { marginInline: '24px', borderRadius: theme.methods.shape.radius.value(3.5, 'px') }, heading: { width: '100%', padding: `${theme.methods.space.value(3, 'px')} ${theme.methods.space.value(3, 'px')} 0` }, middle: { width: '100%', '& .amaui-DatePicker-root, & .amaui-TimePicker-root, & .amaui-TimePicker-main': { margin: '0px' } }, footer: { width: '100%', padding: `0px ${theme.methods.space.value(1, 'px')} ${theme.methods.space.value(1.5, 'px')} ${theme.methods.space.value(1.5, 'px')}`, } }), { name: 'amaui-DateTimePicker' }); const DateTimePicker = react_1.default.forwardRef((props__, ref) => { const theme = (0, style_react_1.useAmauiTheme)(); const props = react_1.default.useMemo(() => { var _a, _b, _c, _d, _e, _f, _g, _h; return (Object.assign(Object.assign(Object.assign({}, (_d = (_c = (_b = (_a = theme === null || theme === void 0 ? void 0 : theme.ui) === null || _a === void 0 ? void 0 : _a.elements) === null || _b === void 0 ? void 0 : _b.all) === null || _c === void 0 ? void 0 : _c.props) === null || _d === void 0 ? void 0 : _d.default), (_h = (_g = (_f = (_e = theme === null || theme === void 0 ? void 0 : theme.ui) === null || _e === void 0 ? void 0 : _e.elements) === null || _f === void 0 ? void 0 : _f.amauiDateTimePicker) === null || _g === void 0 ? void 0 : _g.props) === null || _h === void 0 ? void 0 : _h.default), props__)); }, [props__]); const Line = react_1.default.useMemo(() => { var _a; return ((_a = theme === null || theme === void 0 ? void 0 : theme.elements) === null || _a === void 0 ? void 0 : _a.Line) || Line_1.default; }, [theme]); const AdvancedTextField = react_1.default.useMemo(() => { var _a; return ((_a = theme === null || theme === void 0 ? void 0 : theme.elements) === null || _a === void 0 ? void 0 : _a.AdvancedTextField) || AdvancedTextField_1.default; }, [theme]); const Modal = react_1.default.useMemo(() => { var _a; return ((_a = theme === null || theme === void 0 ? void 0 : theme.elements) === null || _a === void 0 ? void 0 : _a.Modal) || Modal_1.default; }, [theme]); const Tooltip = react_1.default.useMemo(() => { var _a; return ((_a = theme === null || theme === void 0 ? void 0 : theme.elements) === null || _a === void 0 ? void 0 : _a.Tooltip) || Tooltip_1.default; }, [theme]); const Slide = react_1.default.useMemo(() => { var _a; return ((_a = theme === null || theme === void 0 ? void 0 : theme.elements) === null || _a === void 0 ? void 0 : _a.Slide) || Slide_1.default; }, [theme]); const Surface = react_1.default.useMemo(() => { var _a; return ((_a = theme === null || theme === void 0 ? void 0 : theme.elements) === null || _a === void 0 ? void 0 : _a.Surface) || Surface_1.default; }, [theme]); const IconButton = react_1.default.useMemo(() => { var _a; return ((_a = theme === null || theme === void 0 ? void 0 : theme.elements) === null || _a === void 0 ? void 0 : _a.IconButton) || IconButton_1.default; }, [theme]); const Type = react_1.default.useMemo(() => { var _a; return ((_a = theme === null || theme === void 0 ? void 0 : theme.elements) === null || _a === void 0 ? void 0 : _a.Type) || Type_1.default; }, [theme]); const Button = react_1.default.useMemo(() => { var _a; return ((_a = theme === null || theme === void 0 ? void 0 : theme.elements) === null || _a === void 0 ? void 0 : _a.Button) || Button_1.default; }, [theme]); const DatePicker = react_1.default.useMemo(() => { var _a; return ((_a = theme === null || theme === void 0 ? void 0 : theme.elements) === null || _a === void 0 ? void 0 : _a.DatePicker) || DatePicker_1.default; }, [theme]); const TimePicker = react_1.default.useMemo(() => { var _a; return ((_a = theme === null || theme === void 0 ? void 0 : theme.elements) === null || _a === void 0 ? void 0 : _a.TimePicker) || TimePicker_1.default; }, [theme]); const ClickListener = react_1.default.useMemo(() => { var _a; return ((_a = theme === null || theme === void 0 ? void 0 : theme.elements) === null || _a === void 0 ? void 0 : _a.ClickListener) || ClickListener_1.default; }, [theme]); const { tonal = true, color = 'primary', version: version_ = 'auto', value: value_, valueDefault, onChange, label, range, now, static: static_, min, max, validate, headingText = 'Select date & time', headingTextTime, headingTextTimeRange, headingTextDate, headingTextDateRange, useHelperText: useHelperText_, format = '12', hour = true, minute = true, second = false, today, clear = true, size, placeholder: placeholder_, fullWidth, readOnly, disabled, valid: valid_, onClose: onClose_, onToday: onToday_, onClear: onClear_, onCancel: onCancel_, onOk: onOk_, Icon: Icon_ = IconMaterialDateRangeW100Filled_1.default, IconDate = IconMaterialCalendarTodayW100Filled_1.default, IconTime = IconMaterialScheduleW100_1.default, WrapperProps, ModalProps, TooltipProps, AdvancedTextFieldProps, DatePickerProps, TimePickerProps, IconButtonProps, ModeDesktopProps, ModeMobileProps, ButtonProps, PickerProps: PickerProps_, MiddleProps, MainProps, IconProps, className } = props, other = __rest(props, ["tonal", "color", "version", "value", "valueDefault", "onChange", "label", "range", "now", "static", "min", "max", "validate", "headingText", "headingTextTime", "headingTextTimeRange", "headingTextDate", "headingTextDateRange", "useHelperText", "format", "hour", "minute", "second", "today", "clear", "size", "placeholder", "fullWidth", "readOnly", "disabled", "valid", "onClose", "onToday", "onClear", "onCancel", "onOk", "Icon", "IconDate", "IconTime", "WrapperProps", "ModalProps", "TooltipProps", "AdvancedTextFieldProps", "DatePickerProps", "TimePickerProps", "IconButtonProps", "ModeDesktopProps", "ModeMobileProps", "ButtonProps", "PickerProps", "MiddleProps", "MainProps", "IconProps", "className"]); const { classes } = useStyle(); const refs = { root: react_1.default.useRef(undefined), value: react_1.default.useRef(undefined) }; const keys = react_1.default.useMemo(() => { const result = []; const items = [useHelperText_]; items.forEach(item => { if ((0, utils_1.is)('object', item)) Object.keys(item).filter(key => theme.breakpoints.media[key]).forEach(key => result.push(key)); }); return (0, utils_1.unique)(result); }, [useHelperText_]); const breakpoints = {}; keys.forEach(key => { breakpoints[key] = (0, useMediaQuery_1.default)(theme.breakpoints.media[key], { element: refs.root.current }); }); const useHelperText = (0, utils_2.valueBreakpoints)(useHelperText_, undefined, breakpoints, theme); const touch = (0, useMediaQuery_1.default)('(pointer: coarse)', { element: refs.root.current }); const [value, setValue] = react_1.default.useState(() => { const valueResult = (valueDefault !== undefined ? valueDefault : value_) || (now && (range ? [new date_1.AmauiDate(), new date_1.AmauiDate()] : [new date_1.AmauiDate()])); return ((0, utils_1.is)('array', valueResult) ? valueResult : [valueResult]).filter(Boolean); }); const [calendar, setCalendar] = react_1.default.useState(value[0]); const [open, setOpen] = react_1.default.useState(false); const [error, setError] = react_1.default.useState(false); const [tab, setTab] = react_1.default.useState('date'); refs.value.current = value; const valueToInput = react_1.default.useCallback((valueNew = refs.value.current) => { let result = ''; const [from, to] = valueNew; if (!(from || to)) return ''; const method = (item) => { let formatValue = `${(0, date_1.format)(item, 'DD')}/${(0, date_1.format)(item, 'MM')}/${(0, date_1.format)(item, 'YYYY')}`; formatValue += ' '; if (hour) { if (format === '12') formatValue += `hh`; else formatValue += `HH`; if (minute || second) formatValue += `:`; } if (minute) { formatValue += `mm`; if (second) formatValue += `:`; } if (second) formatValue += `ss`; if (format === '12') formatValue += ` a`; return (0, date_1.format)(item, formatValue); }; result += `${method(from)}`; if (range && to) result += `${DatePicker_2.SEPARATOR}${method(to)}`; return result; }, [value, format, hour, minute, second, range]); const [input, setInput] = react_1.default.useState(valueToInput()); let version = version_; if (version === 'auto') { if (touch) version = 'mobile'; else version = 'desktop'; } const onUpdateValue = (valueNew) => { setValue(valueNew); // Update input setInput(valueToInput(valueNew)); }; const errorCheck = react_1.default.useCallback((valueNew = value) => { // Error setError((valueNew || []).some((item, index) => !valid(item))); }, [value]); // Init react_1.default.useEffect(() => { // Error errorCheck(); }, []); // Value react_1.default.useEffect(() => { if (value_ !== undefined && value_ !== value) onUpdateValue((((0, utils_1.is)('array', value_) ? value_ : [value_]).filter(Boolean))); }, [value_]); const onUpdate = react_1.default.useCallback((valueNew) => { // Inner update if (!props.hasOwnProperty('value')) setValue(valueNew); if ((0, utils_1.is)('function', onChange)) onChange(!range ? valueNew[0] : valueNew); }, [onChange, range]); const onPickSwitch = react_1.default.useCallback(() => { setTab(previous => previous === 'date' ? 'time' : 'date'); }, []); // Update only internally, without using onChange // since it might be canceled // only use onChange on // input change, or ok const onPickerChange = react_1.default.useCallback((valueNew_) => { const valueNew = (0, utils_1.is)('array', valueNew_) ? valueNew_ : [valueNew_]; if (valueNew !== value) setValue(valueNew); }, [value]); const onChangeCalendar = react_1.default.useCallback((valueNew) => { if (valueNew !== calendar) setCalendar(valueNew); }, [calendar]); const textToAmauiDate = react_1.default.useCallback((valueNew) => { const [date, ...valueOther] = valueNew.split(' '); const time = valueOther.join(' '); const [valueDay, valueMonth, valueYear] = (date || '').split('/'); const [times, dayTime] = (time || '').split(' '); const valuesTime = times.split(':'); let valueTime; let amauiDate = new date_1.AmauiDate(); amauiDate = new date_1.AmauiDate(new Date(`${valueMonth}/${valueDay}/${valueYear}`)); if (hour) { valueTime = valuesTime[0]; if ((0, utils_1.is)('string', valueTime) && valueTime.startsWith('0')) valueTime = valueTime.slice(1); valueTime = +valueTime; amauiDate = (0, date_1.set)((format === '12' && dayTime === 'pm') ? valueTime + 12 : valueTime, 'hour', amauiDate); } if (minute) { valueTime = valuesTime[!hour ? 0 : 1]; if ((0, utils_1.is)('string', valueTime) && valueTime.startsWith('0')) valueTime = valueTime.slice(1); valueTime = +valueTime; amauiDate = (0, date_1.set)(valueTime, 'minute', amauiDate); } if (second) { valueTime = valuesTime[!(hour && minute) ? 0 : !hour ? 1 : 2]; if ((0, utils_1.is)('string', valueTime) && valueTime.startsWith('0')) valueTime = valueTime.slice(1); valueTime = +valueTime; amauiDate = (0, date_1.set)(valueTime, 'second', amauiDate); } return amauiDate; }, [format, hour, minute, second]); const inputToValue = react_1.default.useCallback((valueNew_ = input) => { let valueNew = valueNew_; let [from, to] = valueNew.split(DatePicker_2.SEPARATOR); from = textToAmauiDate(from); if (to) to = textToAmauiDate(to); valueNew = [from, to].filter(Boolean); return valueNew; }, [input]); const onInputChange = react_1.default.useCallback((valueNew_) => { const valueNew = inputToValue(valueNew_); const validValues = valueNew.every(item => item.valid); // Only update values if input is valid // format used to make the value if (validValues) { // Error errorCheck(valueNew); // Update value onUpdate(valueNew); // Update calendar setCalendar(valueNew[0]); } if (!valueNew_) { onUpdate([null, null]); } // Update input for free typing setInput(valueNew_); }, []); const onReset = react_1.default.useCallback(() => { var _a; let valueNew = inputToValue(); const isValid = valueNew && ((_a = valueNew === null || valueNew === void 0 ? void 0 : valueNew[0]) === null || _a === void 0 ? void 0 : _a.valid); if (isValid) { // Update value onUpdate(valueNew); } else { valueNew = []; // Update value onUpdate(valueNew); // Update input setInput(valueToInput(valueNew)); } }, [input]); const onToday = react_1.default.useCallback((event) => { const valueNew = [new date_1.AmauiDate()]; if (range) valueNew.push(new date_1.AmauiDate()); // Update value onUpdate(valueNew); // Update input setInput(valueToInput(valueNew)); onClose(event); if ((0, utils_1.is)('function', onToday_)) onToday_(event); }, [input, range, onToday_]); const onClear = react_1.default.useCallback((event) => { const valueNew = []; // Update value onUpdate(valueNew); // Update input setInput(valueToInput(valueNew)); onClose(event); if ((0, utils_1.is)('function', onClear_)) onClear_(event); }, [onClear_]); const onOk = react_1.default.useCallback((event) => { // Error errorCheck(); // Update value onUpdate(value); // Update input setInput(valueToInput(value)); onClose(event); if ((0, utils_1.is)('function', onOk_)) onOk_(event); }, [value, onOk_]); const onCancel = react_1.default.useCallback((event) => { onReset(); onClose(event); if ((0, utils_1.is)('function', onCancel_)) onCancel_(event); }, [input, onCancel_]); const onOpen = react_1.default.useCallback(() => { setOpen(previous => !previous); }, [open, version]); const onClose = react_1.default.useCallback((event) => { setOpen(false); if ((0, utils_1.is)('function', onClose_)) onClose_(event); }, [onClose_]); const valid = react_1.default.useCallback((...args) => { if ((0, utils_1.is)('function', valid_)) return valid_(...args); const amauiDate = args[0]; if (min || max || validate) { let response = true; if ((0, utils_1.is)('function', validate)) response = validate(amauiDate); if (min !== undefined) response = response && (0, date_1.is)(amauiDate, 'after or same', min); if (max !== undefined) response = response && (0, date_1.is)(amauiDate, 'before or same', max); return response; } return true; }, [valid_, min, max, validate]); const mask = [ { pattern: '[0-3]' }, (item, result, valueInput) => /^(0[0-9]|1[0-9]|2[0-9]|3[0-1]).*/.test(valueInput), '/', { pattern: '[0-1]' }, (item, result, valueInput) => /^(0[0-9]|1[0-9]|2[0-9]|3[0-1])\/(0[0-9]|1[0-2]).*/.test(valueInput), '/', { pattern: '[1-2]' }, { pattern: '[0-9]' }, { pattern: '[0-9]' }, { pattern: '[0-9]' }, ' ' ]; let placeholder = `DD/MM/YYYY `; if (hour) { if (format === '12') { mask.push({ pattern: '[0-1]' }, (item, result, valueInput) => /^[^ ]+ ([0][0-9]|1[0-2]).*/.test(valueInput)); } if (format === '24') { mask.push({ pattern: '[0-2]' }, (item, result, valueInput) => /^[^ ]+ ([01][0-9]|2[0-3]).*/.test(valueInput)); } placeholder += 'hh'; if (minute || second) { mask.push(':'); placeholder += ':'; } } if (minute) { mask.push({ pattern: '[0-5]' }, { pattern: '[0-9]' }); placeholder += 'mm'; if (second) { mask.push(':'); placeholder += ':'; } } if (second) { mask.push({ pattern: '[0-5]' }, { pattern: '[0-9]' }); placeholder += 'ss'; } if (format === '12') { mask.push(' ', { pattern: '[ap]' }, 'm'); placeholder += ' (a|p)m'; } // range if (range) { mask.push(' ', DatePicker_2.SEPARATOR_SYMBOL, ' '); // Date mask.push({ pattern: '[0-3]' }, (item, result, valueInput) => /^[^–]+– (0[0-9]|1[0-9]|2[0-9]|3[0-1]).*/.test(valueInput), '/', { pattern: '[0-1]' }, (item, result, valueInput) => /^[^–]+– (0[0-9]|1[0-9]|2[0-9]|3[0-1])\/(0[0-9]|1[0-2]).*/.test(valueInput), '/', { pattern: '[1-2]' }, { pattern: '[0-9]' }, { pattern: '[0-9]' }, { pattern: '[0-9]' }, ' '); // Time if (hour) { if (format === '12') { mask.push({ pattern: '[0-1]' }, (item, result, valueInput) => /^[^–]+– (0[0-9]|1[0-9]|2[0-9]|3[0-1])\/(0[0-9]|1[0-2])\/[1-2][0-9][0-9][0-9] ([0][0-9]|1[0-2]).*/.test(valueInput)); } if (format === '24') { mask.push({ pattern: '[0-2]' }, (item, result, valueInput) => /^[^–]+– (0[0-9]|1[0-9]|2[0-9]|3[0-1])\/(0[0-9]|1[0-2])\/[1-2][0-9][0-9][0-9] ([01][0-9]|2[0-3]).*/.test(valueInput)); } if (minute || second) { mask.push(':'); } } if (minute) { mask.push({ pattern: '[0-5]' }, { pattern: '[0-9]' }); if (second) { mask.push(':'); } } if (second) { mask.push({ pattern: '[0-5]' }, { pattern: '[0-9]' }); } if (format === '12') { mask.push(' ', { pattern: '[ap]' }, 'm'); } if (second) { mask.push({ pattern: '[0-5]' }, { pattern: '[0-9]' }); } if (format === '12') { mask.push(' ', { pattern: '[ap]' }, 'm'); } placeholder += `${DatePicker_2.SEPARATOR}${placeholder}`; } placeholder = placeholder_ || placeholder; const buttonProps = Object.assign({ tonal, color, version: 'text', size }, ButtonProps); const iconButtonProps = Object.assign({ size }, IconButtonProps); const actions = ((0, jsx_runtime_1.jsxs)(Line, Object.assign({ direction: 'row', wrap: 'wrap', align: 'center', justify: 'space-between', className: (0, style_react_1.classNames)([ (0, utils_2.staticClassName)('TimePicker', theme) && [ 'amaui-TimePicker-footer' ], classes.footer ]) }, { children: [(0, jsx_runtime_1.jsxs)(Line, Object.assign({ gap: 0, direction: 'row', align: 'center' }, { children: [(0, jsx_runtime_1.jsx)(Tooltip, Object.assign({ label: tab === 'date' ? 'Time' : 'Date' }, { children: (0, jsx_runtime_1.jsx)(IconButton, Object.assign({ tonal: tonal, color: 'inherit', onClick: onPickSwitch, "aria-label": tab === 'date' ? 'Time' : 'Date' }, iconButtonProps, { children: tab === 'date' ? (0, jsx_runtime_1.jsx)(IconTime, Object.assign({}, IconProps)) : (0, jsx_runtime_1.jsx)(IconDate, Object.assign({}, IconProps)) })) })), today && ((0, jsx_runtime_1.jsx)(Button, Object.assign({ onClick: onToday }, buttonProps, { children: "Today" }))), clear && ((0, jsx_runtime_1.jsx)(Button, Object.assign({ onClick: onClear }, buttonProps, { children: "Clear" })))] })), (0, jsx_runtime_1.jsxs)(Line, Object.assign({ gap: 0, direction: 'row', align: 'center' }, { children: [(0, jsx_runtime_1.jsx)(Button, Object.assign({ tonal: tonal, color: color, version: 'text', onClick: onCancel }, buttonProps, { children: "Cancel" })), (0, jsx_runtime_1.jsx)(Button, Object.assign({ tonal: tonal, color: color, version: 'text', onClick: onOk }, buttonProps, { children: "Ok" }))] }))] }))); const heading = (range ? (tab === 'date' ? headingTextDateRange : headingTextTimeRange) : (tab === 'date' ? headingTextDate : headingTextTime)) || headingText; const PickerProps = Object.assign(Object.assign(Object.assign({ value, onChange: onPickerChange, now, static: true, range, valid, min, max, validate, actions: false, heading: false, readOnly, disabled }, PickerProps_), (tab === 'date' && DatePickerProps)), (tab === 'time' && TimePickerProps)); const element = ((0, jsx_runtime_1.jsxs)(Surface, Object.assign({ gap: 0, direction: 'column', align: 'center', Component: Line, className: (0, style_react_1.classNames)([ (0, utils_2.staticClassName)('DateTimePicker', theme) && [ 'amaui-DateTimePicker-main' ], MainProps === null || MainProps === void 0 ? void 0 : MainProps.className, classes.main ]) }, { children: [(0, jsx_runtime_1.jsx)(Type, Object.assign({ version: 'l2', className: (0, style_react_1.classNames)([ (0, utils_2.staticClassName)('TimePicker', theme) && [ 'amaui-TimePicker-heading' ], classes.heading ]) }, { children: heading })), (0, jsx_runtime_1.jsx)(Line, Object.assign({ gap: 0, className: (0, style_react_1.classNames)([ (0, utils_2.staticClassName)('TimePicker', theme) && [ 'amaui-TimePicker-middle' ], MiddleProps === null || MiddleProps === void 0 ? void 0 : MiddleProps.className, classes.middle ]) }, { children: tab === 'date' ? ((0, jsx_runtime_1.jsx)(DatePicker, Object.assign({ calendar: calendar, onChangeCalendar: onChangeCalendar, size: size }, PickerProps))) : ((0, jsx_runtime_1.jsx)(TimePicker, Object.assign({ format: format, hour: hour, minute: minute, second: second, size: size }, PickerProps))) })), actions] }))); const moreProps = {}; if (version === 'desktop') { moreProps.end = ((0, jsx_runtime_1.jsx)(IconButton, Object.assign({ tonal: tonal, color: color, version: 'text', onClick: onOpen, "aria-label": 'Choose date and time', disabled: disabled || readOnly }, iconButtonProps, { children: (0, jsx_runtime_1.jsx)(Icon_, Object.assign({}, IconProps)) }))); } if (version === 'mobile') { if (!(readOnly || disabled)) moreProps.onClick = onOpen; } if (static_) return element; return ((0, jsx_runtime_1.jsxs)(Line, Object.assign({ gap: 0, direction: 'column', fullWidth: fullWidth }, WrapperProps, { className: (0, style_react_1.classNames)([ (0, utils_2.staticClassName)('DateTimePicker', theme) && [ 'amaui-DateTimePicker-root', `amaui-DateTimePicker-version-${version}`, `amaui-DateTimePicker-size-${size}`, WrapperProps === null || WrapperProps === void 0 ? void 0 : WrapperProps.className, range && `amaui-DateTimePicker-range`, readOnly && `amaui-DateTimePicker-read-only`, disabled && `amaui-DateTimePicker-disabled`, fullWidth && 'amaui-full-width' ], className, classes.root ]) }, { children: [(0, jsx_runtime_1.jsx)(AdvancedTextField, Object.assign({ rootRef: item => { if (ref) { if ((0, utils_1.is)('function', ref)) ref(item); else ref.current = item; } refs.root.current = item; }, tonal: tonal, color: color, version: 'outlined', label: label, mask: mask, placeholder: placeholder, value: input, onChange: onInputChange, helperText: useHelperText ? placeholder : undefined, endVerticalAlign: 'center', size: size, error: error, fullWidth: fullWidth, readOnly: readOnly, disabled: disabled }, moreProps, other, AdvancedTextFieldProps)), version === 'mobile' && ((0, jsx_runtime_1.jsx)(Modal, Object.assign({ open: open, modalWrapperSurface: false, TransitionComponent: Slide, onClose: onClose }, ModalProps, { children: element }))), version === 'desktop' && ((0, jsx_runtime_1.jsx)(Tooltip, Object.assign({ open: open, portal: true, anchorElement: refs.root.current, alignment: 'center', position: 'bottom', hover: false, focus: false, longPress: false, maxWidth: 'unset', noMargin: true, label: ((0, jsx_runtime_1.jsx)(ClickListener, Object.assign({ onClickOutside: onCancel, includeParentQueries: ['.amaui-DateTimePicker-main', '.amaui-Calendar-list'] }, { children: element }))) }, TooltipProps)))] }))); }); DateTimePicker.displayName = 'amaui-DateTimePicker'; exports.default = DateTimePicker;