@mantine/dates
Version:
Calendars, date and time pickers based on Mantine components
111 lines (110 loc) • 3.81 kB
JavaScript
"use client";
import { useDatesState } from "../../hooks/use-dates-state/use-dates-state.mjs";
import { Calendar } from "../Calendar/Calendar.mjs";
import { pickCalendarProps } from "../Calendar/pick-calendar-levels-props/pick-calendar-levels-props.mjs";
import MonthPicker_module_default from "./MonthPicker.module.mjs";
import { useRef } from "react";
import { jsx, jsxs } from "react/jsx-runtime";
import { Box, UnstyledButton, createVarsResolver, factory, getFontSize, useProps, useResolvedStylesApi, useStyles } from "@mantine/core";
//#region packages/@mantine/dates/src/components/MonthPicker/MonthPicker.tsx
const varsResolver = createVarsResolver((_, { size }) => ({ monthPickerRoot: { "--preset-font-size": getFontSize(size) } }));
const defaultProps = { type: "default" };
const MonthPicker = factory((_props) => {
const props = useProps("MonthPicker", defaultProps, _props);
const { classNames, styles, vars, type, defaultValue, value, onChange, __staticSelector, getMonthControlProps, allowSingleDateInRange, allowDeselect, onMouseLeave, onMonthSelect, __updateDateOnMonthSelect, __onPresetSelect, __stopPropagation, presets, className, style, unstyled, size, attributes, onLevelChange, ...rest } = props;
const { calendarProps, others } = pickCalendarProps(rest);
const setDateRef = useRef(null);
const setLevelRef = useRef(null);
const getStyles = useStyles({
name: __staticSelector || "MonthPicker",
classes: MonthPicker_module_default,
props,
className,
style,
classNames,
styles,
unstyled,
attributes,
rootSelector: presets ? "monthPickerRoot" : void 0,
varsResolver,
vars
});
const { onDateChange, onRootMouseLeave, onHoveredDateChange, getControlProps, setValue } = useDatesState({
type,
level: "month",
allowDeselect,
allowSingleDateInRange,
value,
defaultValue,
onChange,
onMouseLeave
});
const { resolvedClassNames, resolvedStyles } = useResolvedStylesApi({
classNames,
styles,
props
});
const calendar = /* @__PURE__ */ jsx(Calendar, {
classNames: resolvedClassNames,
styles: resolvedStyles,
size,
...calendarProps,
...!presets ? others : {},
minLevel: "year",
__updateDateOnMonthSelect: __updateDateOnMonthSelect ?? false,
__staticSelector: __staticSelector || "MonthPicker",
onMouseLeave: onRootMouseLeave,
onMonthMouseEnter: (_event, date) => onHoveredDateChange(date),
onMonthSelect: (date) => {
onDateChange(date);
onMonthSelect?.(date);
},
getMonthControlProps: (date) => ({
...getControlProps(date),
...getMonthControlProps?.(date)
}),
onLevelChange,
__setDateRef: setDateRef,
__setLevelRef: setLevelRef,
__stopPropagation,
attributes,
...!presets ? {
className,
style
} : {}
});
if (!presets) return calendar;
const handlePresetSelect = (val) => {
const _val = Array.isArray(val) ? val[0] : val;
if (_val !== void 0) {
setDateRef.current?.(_val);
setLevelRef.current?.("year");
__onPresetSelect ? __onPresetSelect(val) : setValue(val);
}
};
const presetButtons = presets.map((preset, index) => /* @__PURE__ */ jsx(UnstyledButton, {
...getStyles("presetButton"),
onClick: () => handlePresetSelect(preset.value),
onMouseDown: (event) => event.preventDefault(),
"data-mantine-stop-propagation": __stopPropagation || void 0,
children: preset.label
}, index));
return /* @__PURE__ */ jsxs(Box, {
...getStyles("monthPickerRoot"),
size,
...others,
children: [/* @__PURE__ */ jsx("div", {
...getStyles("presetsList"),
children: presetButtons
}), calendar]
});
});
MonthPicker.classes = {
...Calendar.classes,
...MonthPicker_module_default
};
MonthPicker.varsResolver = varsResolver;
MonthPicker.displayName = "@mantine/dates/MonthPicker";
//#endregion
export { MonthPicker };
//# sourceMappingURL=MonthPicker.mjs.map