@mantine/dates
Version:
Calendars, date and time pickers based on Mantine components
130 lines (129 loc) • 5.37 kB
JavaScript
"use client";
const require_runtime = require("../../_virtual/_rolldown/runtime.cjs");
const require_to_date_string = require("../../utils/to-date-string/to-date-string.cjs");
const require_use_dates_context = require("../DatesProvider/use-dates-context.cjs");
const require_MiniCalendar_module = require("./MiniCalendar.module.cjs");
let dayjs = require("dayjs");
dayjs = require_runtime.__toESM(dayjs);
let react_jsx_runtime = require("react/jsx-runtime");
let _mantine_core = require("@mantine/core");
let _mantine_hooks = require("@mantine/hooks");
//#region packages/@mantine/dates/src/components/MiniCalendar/MiniCalendar.tsx
const defaultProps = {
size: "sm",
numberOfDays: 7,
monthLabelFormat: "MMM"
};
const varsResolver = (0, _mantine_core.createVarsResolver)((_theme, { size }) => ({ root: { "--mini-calendar-font-size": (0, _mantine_core.getSize)(size, "mantine-font-size") } }));
const MiniCalendar = (0, _mantine_core.factory)((_props) => {
const props = (0, _mantine_core.useProps)("MiniCalendar", defaultProps, _props);
const { classNames, className, style, styles, unstyled, vars, attributes, date, defaultDate, onDateChange, value, onChange, onNext, onPrevious, getDayProps, numberOfDays, size, minDate, maxDate, monthLabelFormat, nextControlProps, previousControlProps, locale, ...others } = props;
const getStyles = (0, _mantine_core.useStyles)({
name: "MiniCalendar",
classes: require_MiniCalendar_module.default,
props,
className,
style,
classNames,
styles,
unstyled,
vars,
varsResolver,
attributes
});
const _locale = require_use_dates_context.useDatesContext().getLocale(locale);
const [_date, setDate] = (0, _mantine_hooks.useUncontrolled)({
value: require_to_date_string.toDateString(date),
defaultValue: require_to_date_string.toDateString(defaultDate),
finalValue: require_to_date_string.toDateString(value) || (0, dayjs.default)().format("YYYY-MM-DD"),
onChange: onDateChange
});
const handleNext = () => {
onNext?.();
setDate(require_to_date_string.toDateString((0, dayjs.default)(_date).add(numberOfDays, "days")));
};
const handlePrevious = () => {
onPrevious?.();
setDate(require_to_date_string.toDateString((0, dayjs.default)(_date).subtract(numberOfDays, "days")));
};
const previousDisabled = minDate ? (0, dayjs.default)(_date).subtract(1, "days").isBefore((0, dayjs.default)(minDate)) : false;
const nextDisabled = maxDate ? (0, dayjs.default)(_date).add(numberOfDays, "days").isAfter((0, dayjs.default)(maxDate)) : false;
const range = Array(numberOfDays).fill(0).map((_, index) => (0, dayjs.default)(_date).add(index, "days")).map((date) => {
const disabled = minDate && date.isBefore((0, dayjs.default)(minDate), "day") || maxDate && date.isAfter((0, dayjs.default)(maxDate), "day") || false;
const dayProps = getDayProps?.(require_to_date_string.toDateString(date));
return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(_mantine_core.UnstyledButton, {
disabled,
"aria-label": date.format("YYYY-MM-DD"),
"data-disabled": disabled || void 0,
"data-selected": value && (0, dayjs.default)(date).isSame(value, "day") ? true : void 0,
...dayProps,
onClick: (event) => {
dayProps?.onClick?.(event);
onChange?.(require_to_date_string.toDateString(date));
},
...getStyles("day", {
active: !disabled,
className: dayProps?.className,
style: dayProps?.style
}),
children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
...getStyles("dayMonth"),
children: date.locale(_locale).format(monthLabelFormat)
}), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
...getStyles("dayNumber"),
children: date.date()
})]
}, date.toString());
});
return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(_mantine_core.Box, {
size,
...getStyles("root"),
...others,
children: [
/* @__PURE__ */ (0, react_jsx_runtime.jsx)(_mantine_core.UnstyledButton, {
size,
onClick: handlePrevious,
disabled: previousDisabled,
"data-disabled": previousDisabled || void 0,
"data-direction": "previous",
...previousControlProps,
...getStyles("control", {
active: !previousDisabled,
className: previousControlProps?.className,
style: previousControlProps?.style
}),
children: previousControlProps?.children || /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_mantine_core.AccordionChevron, {
"data-chevron": true,
size
})
}),
/* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
...getStyles("days"),
children: range
}),
/* @__PURE__ */ (0, react_jsx_runtime.jsx)(_mantine_core.UnstyledButton, {
size,
onClick: handleNext,
disabled: nextDisabled,
"data-disabled": nextDisabled || void 0,
"data-direction": "next",
...nextControlProps,
...getStyles("control", {
active: !nextDisabled,
className: nextControlProps?.className,
style: nextControlProps?.style
}),
children: nextControlProps?.children || /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_mantine_core.AccordionChevron, {
"data-chevron": true,
size
})
})
]
});
});
MiniCalendar.displayName = "@mantine/dates/MiniCalendar";
MiniCalendar.classes = require_MiniCalendar_module.default;
MiniCalendar.varsResolver = varsResolver;
//#endregion
exports.MiniCalendar = MiniCalendar;
//# sourceMappingURL=MiniCalendar.cjs.map