@amaui/ui-react
Version:
UI for React
401 lines (400 loc) • 31.7 kB
JavaScript
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;
;