UNPKG

@amaui/ui-react

Version:
401 lines (400 loc) 31.7 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 IconMaterialEditW100_1 = __importDefault(require("@amaui/icons-material-rounded-react/IconMaterialEditW100")); const IconMaterialKeyboardArrowDownW100_1 = __importDefault(require("@amaui/icons-material-rounded-react/IconMaterialKeyboardArrowDownW100")); const IconMaterialArrowForwardIosW100_1 = __importDefault(require("@amaui/icons-material-rounded-react/IconMaterialArrowForwardIosW100")); const IconMaterialArrowBackIosNewW100_1 = __importDefault(require("@amaui/icons-material-rounded-react/IconMaterialArrowBackIosNewW100")); const IconMaterialDeleteW100_1 = __importDefault(require("@amaui/icons-material-rounded-react/IconMaterialDeleteW100")); const CalendarWeek_1 = __importDefault(require("../CalendarWeek")); const Select_1 = __importDefault(require("../Select")); const Button_1 = __importDefault(require("../Button")); const Line_1 = __importDefault(require("../Line")); const Modal_1 = __importDefault(require("../Modal")); const ModalHeader_1 = __importDefault(require("../ModalHeader")); const ModalMain_1 = __importDefault(require("../ModalMain")); const Type_1 = __importDefault(require("../Type")); const Tooltip_1 = __importDefault(require("../Tooltip")); const IconButton_1 = __importDefault(require("../IconButton")); const Label_1 = __importDefault(require("../Label")); const Slide_1 = __importDefault(require("../Slide")); const Switch_1 = __importDefault(require("../Switch")); const utils_2 = require("../utils"); const useStyle = (0, style_react_1.style)(theme => ({ root: { padding: '16px', paddingBottom: '24px', color: theme.methods.palette.color.value('primary', 10), background: theme.palette.background.default.primary, '& .amaui-Label-text': { whiteSpace: 'nowrap' } }, calendar: { padding: '12px 8px', background: theme.palette.background.default.primary }, aside: { width: 'auto', maxWidth: '100%' }, weekDay: { width: '47px', height: '47px', borderRadius: '50%' }, today: { background: theme.palette.color.primary[40], color: '#fff' }, palettePreview: { width: '17px', height: '17px', boxShadow: theme.palette.light ? '0px 1px 1px 0px rgba(0, 0, 0, 0.07), 0px 2px 1px -1px rgba(0, 0, 0, 0.04), 0px 1px 3px 0px rgba(0, 0, 0, 0.11)' : '0px 1px 1px 0px rgba(255, 255, 255, 0.21), 0px 2px 1px -1px rgba(255, 255, 255, 0.12), 0px 1px 3px 0px rgba(255, 255, 255, 0.40)', borderRadius: '50%', cursor: 'default', flex: '0 0 auto', transition: theme.methods.transitions.make('transform'), '& > *': { width: '100% !important', height: 'calc(100% + 12px) !important' }, '&:active': { transform: 'scale(0.94)' } }, dayWeekSimple: { maxWidth: 184 }, simpleTimes: { '&.amaui-Line-direction-row': { '& > *': { flex: '1 1 auto' } }, '&.amaui-Line-direction-column': { '& > *': { width: '100%' } } }, legend: { padding: '2px', alignSelf: 'center', maxWidth: '100%', overflow: 'auto hidden' }, itemLegend: { cursor: 'pointer', userSelect: 'none', opacity: 0.5, transition: theme.methods.transitions.make(['opacity', 'transform']), '&:active': { transform: 'scale(0.94)' } }, itemLegendActive: { opacity: 1 }, overflowX: { padding: '2px 0', overflow: 'auto hidden' } }), { name: 'amaui-CalendarAvailability' }); const CalendarAvailability = 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.amauiCalendarAvailability) === 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 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 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 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 Label = react_1.default.useMemo(() => { var _a; return ((_a = theme === null || theme === void 0 ? void 0 : theme.elements) === null || _a === void 0 ? void 0 : _a.Label) || Label_1.default; }, [theme]); const Switch = react_1.default.useMemo(() => { var _a; return ((_a = theme === null || theme === void 0 ? void 0 : theme.elements) === null || _a === void 0 ? void 0 : _a.Switch) || Switch_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 ModalHeader = react_1.default.useMemo(() => { var _a; return ((_a = theme === null || theme === void 0 ? void 0 : theme.elements) === null || _a === void 0 ? void 0 : _a.ModalHeader) || ModalHeader_1.default; }, [theme]); const ModalMain = react_1.default.useMemo(() => { var _a; return ((_a = theme === null || theme === void 0 ? void 0 : theme.elements) === null || _a === void 0 ? void 0 : _a.ModalMain) || ModalMain_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 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 Select = react_1.default.useMemo(() => { var _a; return ((_a = theme === null || theme === void 0 ? void 0 : theme.elements) === null || _a === void 0 ? void 0 : _a.Select) || Select_1.default; }, [theme]); const CalendarWeek = react_1.default.useMemo(() => { var _a; return ((_a = theme === null || theme === void 0 ? void 0 : theme.elements) === null || _a === void 0 ? void 0 : _a.CalendarWeek) || CalendarWeek_1.default; }, [theme]); const { name, date: date_, dateDefault, times: timesProps, events, meta, views: viewsProps = ['week', 'day', 'simple'], onUpdate, onRemove, onChangeDate: onChangeDateProps, startHeader, endHeader, startLeft, endLeft, startRight, endRight, startLeftModal, endLeftModal, startRightModal, endRightModal, Component = Line, IconEdit = IconMaterialEditW100_1.default, IconPrevious = IconMaterialArrowBackIosNewW100_1.default, IconNext = IconMaterialArrowForwardIosW100_1.default, IconRemove = IconMaterialDeleteW100_1.default, IconClose = IconMaterialKeyboardArrowDownW100_1.default, WeekProps, DayProps, IconProps, IconButtonProps, className, children } = props, other = __rest(props, ["name", "date", "dateDefault", "times", "events", "meta", "views", "onUpdate", "onRemove", "onChangeDate", "startHeader", "endHeader", "startLeft", "endLeft", "startRight", "endRight", "startLeftModal", "endLeftModal", "startRightModal", "endRightModal", "Component", "IconEdit", "IconPrevious", "IconNext", "IconRemove", "IconClose", "WeekProps", "DayProps", "IconProps", "IconButtonProps", "className", "children"]); const { classes } = useStyle(); const [now, setNow] = react_1.default.useState(new date_1.AmauiDate()); const [date, setDate] = react_1.default.useState(dateDefault || date_ || new date_1.AmauiDate()); const [view, setView] = react_1.default.useState('week'); const [displayTime, setDisplayTime] = react_1.default.useState(true); const [modal, setModal] = react_1.default.useState(); const [statuses, setStatuses] = react_1.default.useState({}); const refs = { date: react_1.default.useRef(date), displayTime: react_1.default.useRef(displayTime), interval: react_1.default.useRef(undefined), calendar: react_1.default.useRef(undefined), days: react_1.default.useRef({}), overlaping: react_1.default.useRef({}), statuses: react_1.default.useRef(statuses) }; refs.date.current = date; refs.displayTime.current = displayTime; refs.statuses.current = statuses; const times = react_1.default.useMemo(() => { if (events) { return [ { dates: { active: true, values: ((0, utils_1.is)('array', events) ? events : [events]).filter(Boolean) } } ]; } return ((0, utils_1.is)('array', timesProps) ? timesProps : [timesProps]).filter(Boolean); }, [events, timesProps]); const onStatusToggle = react_1.default.useCallback((value = 'working') => { setStatuses(previous => (Object.assign(Object.assign({}, previous), { [value]: previous[value] === undefined ? false : !previous[value] }))); }, []); const rangeShade = theme.palette.light ? 70 : 40; react_1.default.useEffect(() => { // 1 minute refs.interval.current = setInterval(() => { setNow(new date_1.AmauiDate()); }, 60 * 1e3); return () => { clearInterval(refs.interval.current); }; }, []); // Date react_1.default.useEffect(() => { if (date_ !== undefined && date_ !== date) setDate(date_); }, [date_]); const onOpen = react_1.default.useCallback((item) => { setModal(Object.assign(Object.assign({}, item), { open: true })); }, []); const onClose = react_1.default.useCallback(() => { setModal((item) => (Object.assign(Object.assign({}, item), { open: false }))); }, []); const onChangeDisplayTime = react_1.default.useCallback((valueNew) => { setDisplayTime(valueNew); }, []); const onChangeView = react_1.default.useCallback((valueNew) => { setView(valueNew); }, []); const optionsStatus = react_1.default.useMemo(() => { return [ { name: 'Working', value: 'working' }, { name: 'Not working', value: 'not-working' }, { name: 'On a break', value: 'break' }, { name: 'Scheduled', value: 'pending' }, { name: 'Rescheduled', value: 'rescheduled' }, { name: 'Cancelled', value: 'canceled' }, { name: 'Other', value: 'other' } ]; }, []); const onToday = react_1.default.useCallback(() => { const valueNew = new date_1.AmauiDate(); setDate(valueNew); if ((0, utils_1.is)('function', onChangeDateProps)) onChangeDateProps(valueNew); }, [onChangeDateProps]); const onPrevious = react_1.default.useCallback(() => { let valueNew = new date_1.AmauiDate(); setDate(previous => { valueNew = (0, date_1.remove)(1, ['week', 'simple'].includes(view) ? 'week' : view, previous); return valueNew; }); if ((0, utils_1.is)('function', onChangeDateProps)) onChangeDateProps(valueNew); }, [view, onChangeDateProps]); const onNext = react_1.default.useCallback(() => { let valueNew = new date_1.AmauiDate(); setDate(previous => { valueNew = (0, date_1.add)(1, ['week', 'simple'].includes(view) ? 'week' : view, previous); return valueNew; }); if ((0, utils_1.is)('function', onChangeDateProps)) onChangeDateProps(valueNew); }, [view, onChangeDateProps]); const getDates = react_1.default.useCallback((available) => { var _a; const values = ((_a = available.dates) === null || _a === void 0 ? void 0 : _a.values) || []; return values.map((item) => { if (item.entire) { if (item.from) { let from = new date_1.AmauiDate(item.from); let to; if (['day', 'week', 'month', 'year'].includes(item.entire)) from = (0, date_1.startOf)(from, 'day'); if (item.entire === 'minute') from = (0, date_1.startOf)(from, 'minute'); if (item.entire === 'hour') from = (0, date_1.startOf)(from, 'hour'); to = (0, date_1.endOf)(from, item.entire); item.from = from.milliseconds; item.to = to.milliseconds; } } return item; }); }, [times]); const getDatesWeek = react_1.default.useCallback((available) => { const weekFrom = (0, date_1.startOf)(date, 'week'); const weekTo = (0, date_1.endOf)(date, 'week'); return getDates(available).filter((item) => { const from = new date_1.AmauiDate(item.from); const to = new date_1.AmauiDate(item.to); return !(from.milliseconds >= weekTo.milliseconds || to.milliseconds <= weekFrom.milliseconds); }); }, [date, getDates]); const getColor = react_1.default.useCallback((item) => { let palette = theme.palette.color.neutral; if ((item === null || item === void 0 ? void 0 : item.status) === 'working') palette = theme.palette.color.success; if ((item === null || item === void 0 ? void 0 : item.status) === 'not-working') palette = theme.palette.color.info; if ((item === null || item === void 0 ? void 0 : item.status) === 'break') palette = theme.palette.color.warning; if ((item === null || item === void 0 ? void 0 : item.status) === 'pending') palette = theme.methods.color(style_react_1.colors.yellow[50]); if ((item === null || item === void 0 ? void 0 : item.status) === 'rescheduled') palette = theme.methods.color(style_react_1.colors.purple[50]); if ((item === null || item === void 0 ? void 0 : item.status) === 'canceled') palette = theme.palette.color.error; if ((item === null || item === void 0 ? void 0 : item.status) === 'other') palette = theme.palette.color.neutral; return palette[rangeShade]; }, [rangeShade, style_react_1.colors, theme]); const itemToText = react_1.default.useCallback((item) => { if (item === 'pending') return 'scheduled'; if (item === 'not-count-workout-session') return `don't count workout session`; return item; }, []); const viewOptions = react_1.default.useMemo(() => { return viewsProps === null || viewsProps === void 0 ? void 0 : viewsProps.map(item => ({ name: (0, utils_1.capitalize)(item), value: item })); }, [viewsProps]); const days = react_1.default.useMemo(() => { const weekStartDate = (0, date_1.set)(4, 'hour', (0, date_1.startOf)(date, 'week')); return Array.from({ length: 7 }).map((_, index) => (0, date_1.add)(index, 'day', weekStartDate)); }, [date]); const simpleTimesUI = () => { return ((0, jsx_runtime_1.jsx)(Line, Object.assign({ gap: 3, direction: { default: 'row', 1400: 'column' }, className: classes.simpleTimes, fullWidth: true }, { children: days.map((itemDay, index) => { const values = times.filter(item => { var _a; return (_a = item.weekly.days[index + 1]) === null || _a === void 0 ? void 0 : _a.active; }).flatMap(item => item.weekly.days[index + 1].values).filter(item => item && [undefined, true].includes(refs.statuses.current[item.status || 'working'])); values.sort((a, b) => b.from > a.from ? -1 : 1); return ((0, jsx_runtime_1.jsxs)(Line, Object.assign({ gap: 1.5, direction: 'column' }, { children: [(0, jsx_runtime_1.jsxs)(Line, Object.assign({ gap: 0, align: 'center', fullWidth: true }, { children: [(0, jsx_runtime_1.jsx)(Type, Object.assign({ version: 'h3', weight: 400 }, { children: (0, date_1.format)(itemDay, 'dd') })), (0, jsx_runtime_1.jsx)(Line, Object.assign({ align: 'center', justify: 'center', className: (0, style_react_1.classNames)([ classes.weekDay, itemDay.year === now.year && itemDay.dayYear === now.dayYear && classes.today ]) }, { children: (0, jsx_runtime_1.jsx)(Type, Object.assign({ version: 'b2', weight: 200 }, { children: (0, date_1.format)(itemDay, 'DD.MM.') })) }))] })), (0, jsx_runtime_1.jsx)(Line, Object.assign({ gap: 2, fullWidth: true }, { children: !!values.length ? values.map((itemValue, indexItem) => { const itemValueFrom = new date_1.AmauiDate(itemValue.from); const itemValueTo = new date_1.AmauiDate(itemValue.to); return ((0, jsx_runtime_1.jsxs)(Line, Object.assign({ gap: 0.5, className: classes.dayWeekSimple }, { children: [(0, jsx_runtime_1.jsxs)(Line, Object.assign({ gap: 1, direction: 'row', align: 'center' }, { children: [(0, jsx_runtime_1.jsx)(Line, { className: classes.palettePreview, style: { background: getColor(itemValue) } }), (0, jsx_runtime_1.jsxs)(Type, Object.assign({ version: 'b2', weight: 300 }, { children: [(0, date_1.format)(itemValueFrom, 'hh:mm a'), " \u2014 ", (0, date_1.format)(itemValueTo, 'hh:mm a')] }))] })), itemValue.description && ((0, jsx_runtime_1.jsx)(Type, { version: 'b2', weight: 200, whiteSpace: 'pre-wrap', className: (0, style_react_1.classNames)([ classes.timeDescription, !refs.displayTime.current && 'amaui-work-day-time' ]), dangerouslySetInnerHTML: { __html: (0, utils_1.textToInnerHTML)(itemValue.description) } }))] }), indexItem)); }) : ((0, jsx_runtime_1.jsx)(Type, Object.assign({ version: 'b2' }, { children: "No information for this day" }))) }))] }), index)); }) }))); }; const simpleExceptionsUI = () => { const items = times.flatMap(item => getDatesWeek(item)); if (!items.length) return ((0, jsx_runtime_1.jsx)(Type, Object.assign({ version: 'b1' }, { children: "No exceptions this week" }))); return (0, jsx_runtime_1.jsx)(jsx_runtime_1.Fragment, { children: items.map((itemValue, index) => { const day = (0, date_1.set)(index + 1, 'dayWeek'); const itemValueFrom = new date_1.AmauiDate(itemValue.from); const itemValueTo = new date_1.AmauiDate(itemValue.to); return ((0, jsx_runtime_1.jsxs)(Line, Object.assign({ gap: 1, direction: 'column' }, { children: [(0, jsx_runtime_1.jsxs)(Line, Object.assign({ gap: 1, direction: 'row', align: 'center', fullWidth: true }, { children: [(0, jsx_runtime_1.jsx)(Line, { className: classes.palettePreview, style: { background: getColor(itemValue) } }), (0, jsx_runtime_1.jsxs)(Line, Object.assign({ gap: 1, direction: 'row', align: 'center' }, { children: [(0, jsx_runtime_1.jsx)(Type, Object.assign({ version: 'b2', weight: 400 }, { children: (0, date_1.format)(day, 'dd') })), (0, jsx_runtime_1.jsxs)(Type, Object.assign({ version: 'b2' }, { children: [(0, date_1.format)(itemValueFrom, utils_2.formats.entire), " \u2014 ", (0, date_1.format)(itemValueTo, utils_2.formats.entire)] }))] }))] })), itemValue.description && ((0, jsx_runtime_1.jsx)(Type, { version: 'b2', weight: 200, whiteSpace: 'pre-wrap', className: (0, style_react_1.classNames)([ classes.timeDescription, !refs.displayTime.current && 'amaui-work-day-time' ]), dangerouslySetInnerHTML: { __html: (0, utils_1.textToInnerHTML)(itemValue.description) } }))] }), index)); }) }); }; const formattedDate = react_1.default.useMemo(() => { if (view === 'day') return (0, date_1.format)(date, `MMMM DD, YYYY`); if (['week', 'simple'].includes(view)) return `${(0, date_1.format)((0, date_1.startOf)(date, 'week'), `MMM DD, YYYY`)}${(0, date_1.format)((0, date_1.endOf)(date, 'week'), `MMM DD, YYYY`)}`; }, [view, date]); const legend = react_1.default.useMemo(() => { return ((0, jsx_runtime_1.jsx)(Line, Object.assign({ rowGap: 1.5, direction: 'row', align: 'center', className: classes.legend }, { children: optionsStatus.map((item, index) => ((0, jsx_runtime_1.jsxs)(Line, Object.assign({ gap: 1, direction: 'row', align: 'center', onClick: () => onStatusToggle(item.value), flexNo: true, className: (0, style_react_1.classNames)([ classes.itemLegend, [undefined, true].includes(refs.statuses.current[item.value || 'working']) && classes.itemLegendActive ]) }, { children: [(0, jsx_runtime_1.jsx)(Line, { className: classes.palettePreview, style: { background: getColor({ status: item.value }) } }), (0, jsx_runtime_1.jsx)(Type, Object.assign({ version: 'b2' }, { children: item.name }))] }), index))) }))); }, [theme, statuses, optionsStatus]); return ((0, jsx_runtime_1.jsxs)(Component, Object.assign({ ref: ref, flex: true, fullWidth: true, className: (0, style_react_1.classNames)([ (0, utils_2.staticClassName)('CalendarAvailability', theme) && [ 'amaui-CalendarAvailability-root' ], className, classes.root ]) }, other, { children: [(0, jsx_runtime_1.jsxs)(Line, Object.assign({ gap: 1, fullWidth: true, className: (0, style_react_1.classNames)([ (0, utils_2.staticClassName)('CalendarAvailability', theme) && [ 'amaui-CalendarAvailability-header' ] ]) }, { children: [startHeader, (0, jsx_runtime_1.jsxs)(Line, Object.assign({ gap: 2, direction: 'row', wrap: 'wrap', justify: 'space-between', align: 'center', fullWidth: true }, { children: [(0, jsx_runtime_1.jsxs)(Line, Object.assign({ gap: 1.5, direction: 'row', wrap: 'wrap', align: 'center', className: classes.aside }, { children: [startLeft, (0, jsx_runtime_1.jsx)(Button, Object.assign({ color: 'inherit', version: 'outlined', size: 'small', onClick: onToday, selected: now.days === date.days }, { children: "Today" })), (0, jsx_runtime_1.jsxs)(Line, Object.assign({ gap: 0, direction: 'row', align: 'center' }, { children: [(0, jsx_runtime_1.jsx)(Tooltip, Object.assign({ name: `Previous ${view}` }, { children: (0, jsx_runtime_1.jsx)(IconButton, Object.assign({ onClick: onPrevious }, IconButtonProps, { children: (0, jsx_runtime_1.jsx)(IconPrevious, { size: 'regular' }) })) })), (0, jsx_runtime_1.jsx)(Tooltip, Object.assign({ name: `Next ${view}` }, { children: (0, jsx_runtime_1.jsx)(IconButton, Object.assign({ onClick: onNext }, IconButtonProps, { children: (0, jsx_runtime_1.jsx)(IconNext, { size: 'regular' }) })) }))] })), (0, jsx_runtime_1.jsx)(Type, Object.assign({ version: 'h2', weight: 500, whiteSpace: 'nowrap' }, { children: formattedDate })), endLeft] })), (0, jsx_runtime_1.jsxs)(Line, Object.assign({ gap: 1.5, direction: 'row', align: 'center', flexNo: true, className: (0, style_react_1.classNames)([ classes.aside, classes.overflowX ]) }, { children: [startRight, ['week', 'day'].includes(view) && ((0, jsx_runtime_1.jsxs)(Label, Object.assign({ value: displayTime, onChange: onChangeDisplayTime }, { children: [(0, jsx_runtime_1.jsx)(Switch, {}), "Display time"] }))), (0, jsx_runtime_1.jsx)(Select, { name: 'View', value: view, onChange: onChangeView, options: viewOptions, size: 'small', MenuProps: { portal: true, size: 'regular' }, WrapperProps: { style: { width: 170, minWidth: 'unset' } }, style: { width: 170, minWidth: 'unset' } }), endRight] }))] })), endHeader] })), (0, jsx_runtime_1.jsxs)(Line, Object.assign({ ref: refs.calendar, gap: 2, flex: true, fullWidth: true }, { children: [view === 'simple' && ((0, jsx_runtime_1.jsx)(Line, Object.assign({ gap: 1, flex: true, fullWidth: true }, { children: (0, jsx_runtime_1.jsxs)(Line, Object.assign({ gap: 4, fullWidth: true, className: (0, style_react_1.classNames)([ (0, utils_2.staticClassName)('CalendarAvailability', theme) && [ 'amaui-CalendarAvailability-simple' ], classes.calendar ]) }, { children: [simpleTimesUI(), (0, jsx_runtime_1.jsxs)(Line, Object.assign({ gap: 1.5 }, { children: [(0, jsx_runtime_1.jsx)(Type, Object.assign({ version: 't2' }, { children: "Exceptions this week" })), (0, jsx_runtime_1.jsx)(Line, Object.assign({ gap: 1 }, { children: simpleExceptionsUI() }))] }))] })) }))), ['week', 'day'].includes(view) && ((0, jsx_runtime_1.jsx)(CalendarWeek, Object.assign({ onOpen: onOpen, date: date, displayTime: displayTime, statuses: statuses, times: times, events: events, day: view === 'day' }, WeekProps))), legend] })), times && ((0, jsx_runtime_1.jsxs)(Modal, Object.assign({ open: !!(modal === null || modal === void 0 ? void 0 : modal.open), onClose: onClose, minWidth: 'lg', TransitionComponent: Slide, size: 'small' }, { children: [(0, jsx_runtime_1.jsxs)(ModalHeader, Object.assign({ gap: 1, direction: 'row', align: 'center', justify: 'space-between', fullWidth: true }, { children: [(0, jsx_runtime_1.jsxs)(Line, Object.assign({ gap: 1, direction: 'row', align: 'center' }, { children: [startLeftModal, (0, jsx_runtime_1.jsx)(Line, { className: classes.palettePreview, style: { background: getColor(modal) } }), (0, jsx_runtime_1.jsx)(Type, Object.assign({ version: 'b2', weight: 100 }, { children: (0, utils_1.cleanValue)(itemToText(modal === null || modal === void 0 ? void 0 : modal.status), { capitalize: true }) })), endLeftModal] })), (0, jsx_runtime_1.jsxs)(Line, Object.assign({ gap: 1, direction: 'row', align: 'center' }, { children: [startRightModal, onUpdate && ((0, jsx_runtime_1.jsx)(Tooltip, Object.assign({ name: 'Update' }, { children: (0, jsx_runtime_1.jsx)(IconButton, Object.assign({ onClick: () => { onUpdate(modal === null || modal === void 0 ? void 0 : modal.object); onClose(); } }, { children: (0, jsx_runtime_1.jsx)(IconEdit, Object.assign({}, IconProps)) })) }))), onRemove && ((0, jsx_runtime_1.jsx)(Tooltip, Object.assign({ name: 'Remove' }, { children: (0, jsx_runtime_1.jsx)(IconButton, Object.assign({ onClick: () => { onRemove(modal === null || modal === void 0 ? void 0 : modal.object); onClose(); } }, { children: (0, jsx_runtime_1.jsx)(IconRemove, Object.assign({}, IconProps)) })) }))), (0, jsx_runtime_1.jsx)(Tooltip, Object.assign({ name: 'Close' }, { children: (0, jsx_runtime_1.jsx)(IconButton, Object.assign({ onClick: onClose }, { children: (0, jsx_runtime_1.jsx)(IconClose, Object.assign({}, IconProps)) })) })), endRightModal] }))] })), (0, jsx_runtime_1.jsx)(ModalMain, Object.assign({ align: 'flex-start', className: classes.modalMain }, { children: (0, jsx_runtime_1.jsxs)(Line, Object.assign({ gap: 1.5, fullWidth: true }, { children: [(0, jsx_runtime_1.jsxs)(Type, Object.assign({ version: 'l1', weight: 200 }, { children: [(0, date_1.format)(modal === null || modal === void 0 ? void 0 : modal.day, 'dd'), " ", (0, date_1.format)(new date_1.AmauiDate(modal === null || modal === void 0 ? void 0 : modal.from), (modal === null || modal === void 0 ? void 0 : modal.weekly) ? `hh:mm a` : utils_2.formats.entire), " \u2014 ", (0, date_1.format)(new date_1.AmauiDate(modal === null || modal === void 0 ? void 0 : modal.to), (modal === null || modal === void 0 ? void 0 : modal.weekly) ? `hh:mm a` : utils_2.formats.entire)] })), (modal === null || modal === void 0 ? void 0 : modal.description) && ((0, jsx_runtime_1.jsx)(Type, { version: 'b2', dangerouslySetInnerHTML: { __html: (0, utils_1.textToInnerHTML)(modal.description) } }))] })) }))] })))] }))); }); CalendarAvailability.displayName = 'amaui-CalendarAvailability'; exports.default = CalendarAvailability;