import { Instance } from "./instance" ; import { CustomLocale , key as LocaleKey , Locale } from "./locale" ; export type DateOption = Date | string | number ; export type DateRangeLimit < D = DateOption > = { from : D ; to : D ; } ; export type DateLimit < D = DateOption > = D | DateRangeLimit < D > | ( ( date : Date ) => boolean ) ; export type Hook = ( dates : Date [ ] , currentDateString : string , self : Instance , data ? : any ) => void ; export type HookKey = "onChange" | "onClose" | "onDayCreate" | "onDestroy" | "onKeyDown" | "onMonthChange" | "onOpen" | "onParseConfig" | "onReady" | "onValueUpdate" | "onYearChange" | "onPreCalendarPosition" ; export const HOOKS = [ "onChange" , "onClose" , "onDayCreate" , "onDestroy" , "onKeyDown" , "onMonthChange" , "onOpen" , "onParseConfig" , "onReady" , "onValueUpdate" , "onYearChange" , "onPreCalendarPosition" , ] ; export type Plugin < E = { } > = ( fp : Instance & E ) => Options ; export interface BaseOptions { allowInput : boolean ; allowInvalidPreload : boolean ; altFormat : string ; altInput : boolean ; altInputClass : string ; animate : boolean ; appendTo : HTMLElement ; ariaDateFormat : string ; autoFillDefaultTime : boolean ; clickOpens : boolean ; closeOnSelect : boolean ; conjunction : string ; dateFormat : string ; defaultDate : DateOption | DateOption [ ] ; defaultHour : number ; defaultMinute : number ; defaultSeconds : number ; disable : DateLimit < DateOption > [ ] ; disableMobile : boolean ; enable : DateLimit < DateOption > [ ] ; enableSeconds : boolean ; enableTime : boolean ; errorHandler : ( e : Error ) => void ; formatDate : ( date : Date , format : string , locale : Locale ) => string ; getWeek : ( date : Date ) => string | number ; hourIncrement : number ; ignoredFocusElements : HTMLElement [ ] ; inline : boolean ; locale : LocaleKey | Partial < CustomLocale > ; maxDate : DateOption ; maxTime : DateOption ; minDate : DateOption ; minTime : DateOption ; minuteIncrement : number ; mode : "single" | "multiple" | "range" | "time" ; monthSelectorType : "dropdown" | "static" ; nextArrow : string ; noCalendar : boolean ; now ? : DateOption ; onChange : Hook | Hook [ ] ; onClose : Hook | Hook [ ] ; onDayCreate : Hook | Hook [ ] ; onDestroy : Hook | Hook [ ] ; onKeyDown : Hook | Hook [ ] ; onMonthChange : Hook | Hook [ ] ; onOpen : Hook | Hook [ ] ; onParseConfig : Hook | Hook [ ] ; onReady : Hook | Hook [ ] ; onValueUpdate : Hook | Hook [ ] ; onYearChange : Hook | Hook [ ] ; onPreCalendarPosition : Hook | Hook [ ] ; parseDate : ( date : string , format : string ) => Date ; plugins : Plugin [ ] ; position : "auto" | "above" | "below" | "auto left" | "auto center" | "auto right" | "above left" | "above center" | "above right" | "below left" | "below center" | "below right" | ( ( self : Instance , customElement : HTMLElement | undefined ) => void ) ; positionElement : Element ; prevArrow : string ; shorthandCurrentMonth : boolean ; static : boolean ; showMonths ? : number ; time_24hr : boolean ; weekNumbers : boolean ; wrap : boolean ; } export type Options = Partial < BaseOptions > ; export interface ParsedOptions { _disable : DateLimit < Date > [ ] ; _enable ? : DateLimit < Date > [ ] ; _maxDate ? : Date ; _maxTime ? : Date ; _minDate ? : Date ; _minTime ? : Date ; allowInput : boolean ; allowInvalidPreload : boolean ; altFormat : string ; altInput : boolean ; altInputClass : string ; animate : boolean ; appendTo ? : HTMLElement ; ariaDateFormat : string ; autoFillDefaultTime : boolean ; clickOpens : boolean ; closeOnSelect : boolean ; conjunction : string ; dateFormat : string ; defaultDate ? : Date | Date [ ] ; defaultHour : number ; defaultMinute : number ; defaultSeconds : number ; disable : DateLimit < Date > [ ] ; disableMobile : boolean ; enable ? : DateLimit < Date > [ ] ; enableSeconds : boolean ; enableTime : boolean ; errorHandler : ( err : Error ) => void ; formatDate ? : Options [ "formatDate" ] ; getWeek : ( date : Date ) => string | number ; hourIncrement : number ; ignoredFocusElements : HTMLElement [ ] ; inline : boolean ; locale : LocaleKey | CustomLocale ; maxDate ? : Date ; maxTime ? : Date ; minDate ? : Date ; minTime ? : Date ; minuteIncrement : number ; mode : BaseOptions [ "mode" ] ; monthSelectorType : string ; nextArrow : string ; noCalendar : boolean ; now : Date ; onChange : Hook [ ] ; onClose : Hook [ ] ; onDayCreate : Hook [ ] ; onDestroy : Hook [ ] ; onKeyDown : Hook [ ] ; onMonthChange : Hook [ ] ; onOpen : Hook [ ] ; onParseConfig : Hook [ ] ; onReady : Hook [ ] ; onValueUpdate : Hook [ ] ; onYearChange : Hook [ ] ; onPreCalendarPosition : Hook [ ] ; parseDate ? : BaseOptions [ "parseDate" ] ; plugins : Plugin [ ] ; position : BaseOptions [ "position" ] ; positionElement ? : HTMLElement ; prevArrow : string ; shorthandCurrentMonth : boolean ; showMonths : number ; static : boolean ; time_24hr : boolean ; weekNumbers : boolean ; wrap : boolean ; } export const defaults = { _disable : [ ] , allowInput : false , allowInvalidPreload : false , altFormat : "F j, Y" , altInput : false , altInputClass : "form-control input" , animate : typeof window === "object" && window . navigator . userAgent . indexOf ( "MSIE" ) === - 1 , ariaDateFormat : "F j, Y" , autoFillDefaultTime : true , clickOpens : true , closeOnSelect : true , conjunction : ", " , dateFormat : "Y-m-d" , defaultHour : 12 , defaultMinute : 0 , defaultSeconds : 0 , disable : [ ] , disableMobile : false , enableSeconds : false , enableTime : false , errorHandler : ( err ) => typeof console !== "undefined" && console . warn ( err ) , getWeek : ( givenDate ) => { const date = new Date ( givenDate . getTime ( ) ) ; date . setHours ( 0 , 0 , 0 , 0 ) ; date . setDate ( date . getDate ( ) + 3 - ( ( date . getDay ( ) + 6 ) % 7 ) ) ; var week1 = new Date ( date . getFullYear ( ) , 0 , 4 ) ; return ( 1 + Math . round ( ( ( date . getTime ( ) - week1 . getTime ( ) ) / 86400000 - 3 + ( ( week1 . getDay ( ) + 6 ) % 7 ) ) / 7 ) ) ; } , hourIncrement : 1 , ignoredFocusElements : [ ] , inline : false , locale : "default" , minuteIncrement : 5 , mode : "single" , monthSelectorType : "dropdown" , nextArrow : "<svg version='1.1' xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' viewBox='0 0 17 17'><g></g><path d='M13.207 8.472l-7.854 7.854-0.707-0.707 7.146-7.146-7.146-7.148 0.707-0.707 7.854 7.854z' /></svg>" , noCalendar : false , now : new Date ( ) , onChange : [ ] , onClose : [ ] , onDayCreate : [ ] , onDestroy : [ ] , onKeyDown : [ ] , onMonthChange : [ ] , onOpen : [ ] , onParseConfig : [ ] , onReady : [ ] , onValueUpdate : [ ] , onYearChange : [ ] , onPreCalendarPosition : [ ] , plugins : [ ] , position : "auto" , positionElement : undefined , prevArrow : "<svg version='1.1' xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' viewBox='0 0 17 17'><g></g><path d='M5.207 8.471l7.146 7.147-0.707 0.707-7.853-7.854 7.854-7.853 0.707 0.707-7.147 7.146z' /></svg>" , shorthandCurrentMonth : false , showMonths : 1 , static : false , time_24hr : false , weekNumbers : false , wrap : false , } ;