@vurilo/nepali-date-picker
Version:
Nepali Calendars, date and time pickers based on Mantine components
93 lines (92 loc) • 4.6 kB
TypeScript
import React from "react";
import { BoxProps, StylesApiProps, ElementProps, Factory } from "@mantine/core";
import { MonthLevelGroupStylesNames } from "../MonthLevelGroup";
import { YearLevelGroupStylesNames } from "../YearLevelGroup";
import { DecadeLevelGroupStylesNames } from "../DecadeLevelGroup";
import { CalendarLevel } from "../../types";
import { MonthLevelSettings } from "../MonthLevel";
import { YearLevelSettings } from "../YearLevel";
import { DecadeLevelSettings } from "../DecadeLevel";
export type CalendarStylesNames = MonthLevelGroupStylesNames | YearLevelGroupStylesNames | DecadeLevelGroupStylesNames;
export interface CalendarAriaLabels {
monthLevelControl?: string;
yearLevelControl?: string;
nextMonth?: string;
previousMonth?: string;
nextYear?: string;
previousYear?: string;
nextDecade?: string;
previousDecade?: string;
}
type OmittedSettings = "onNext" | "onPrevious" | "onLevelClick" | "withNext" | "withPrevious" | "nextDisabled" | "previousDisabled";
export interface CalendarSettings extends Omit<DecadeLevelSettings, OmittedSettings>, Omit<YearLevelSettings, OmittedSettings>, Omit<MonthLevelSettings, OmittedSettings> {
/** Initial level displayed to the user (decade, year, month), used for uncontrolled component */
defaultLevel?: CalendarLevel;
/** Current level displayed to the user (decade, year, month), used for controlled component */
level?: CalendarLevel;
/** Called when level changes */
onLevelChange?: (level: CalendarLevel) => void;
/** Called when user clicks year on decade level */
onYearSelect?: (date: Date) => void;
/** Called when user clicks month on year level */
onMonthSelect?: (date: Date) => void;
/** Called when mouse enters year control */
onYearMouseEnter?: (event: React.MouseEvent<HTMLButtonElement>, date: Date) => void;
/** Called when mouse enters month control */
onMonthMouseEnter?: (event: React.MouseEvent<HTMLButtonElement>, date: Date) => void;
}
export interface CalendarBaseProps {
__staticSelector?: string;
/** Internal Variable to check if timezones were applied by parent component */
__timezoneApplied?: boolean;
/** Prevents focus shift when buttons are clicked */
__preventFocus?: boolean;
/** Determines whether date should be updated when year control is clicked */
__updateDateOnYearSelect?: boolean;
/** Determines whether date should be updated when month control is clicked */
__updateDateOnMonthSelect?: boolean;
/** Initial date that is displayed, used for uncontrolled component */
defaultDate?: Date;
/** Date that is displayed, used for controlled component */
date?: Date;
/** Called when date changes */
onDateChange?: (date: Date) => void;
/** Number of columns to render next to each other */
numberOfColumns?: number;
/** Number of columns to scroll when user clicks next/prev buttons, defaults to numberOfColumns */
columnsToScroll?: number;
/** aria-label attributes for controls on different levels */
ariaLabels?: CalendarAriaLabels;
/** Called when next decade button is clicked */
onNextDecade?: (date: Date) => void;
/** Called when previous decade button is clicked */
onPreviousDecade?: (date: Date) => void;
/** Called when next year button is clicked */
onNextYear?: (date: Date) => void;
/** Called when previous year button is clicked */
onPreviousYear?: (date: Date) => void;
/** Called when next month button is clicked */
onNextMonth?: (date: Date) => void;
/** Called when previous month button is clicked */
onPreviousMonth?: (date: Date) => void;
isNepali?: boolean;
}
export interface CalendarProps extends BoxProps, CalendarSettings, CalendarBaseProps, StylesApiProps<CalendarFactory>, ElementProps<"div"> {
/** Max level that user can go up to (decade, year, month), defaults to decade */
maxLevel?: CalendarLevel;
/** Min level that user can go down to (decade, year, month), defaults to month */
minLevel?: CalendarLevel;
/** Determines whether days should be static, static days can be used to display month if it is not expected that user will interact with the component in any way */
static?: boolean;
}
export type CalendarFactory = Factory<{
props: CalendarProps;
ref: HTMLDivElement;
stylesNames: CalendarStylesNames;
}>;
export declare const Calendar: import("@mantine/core").MantineComponent<{
props: CalendarProps;
ref: HTMLDivElement;
stylesNames: CalendarStylesNames;
}>;
export {};