///
declare namespace Pickadate {
// KlassOptions shared between date and time pickers
interface KlassOptions {
// The element states
input?: string | undefined; // default 'picker__input'
active?: string | undefined; // default 'picker__input--active'
// The root picker and states
picker?: string | undefined; // default 'picker' or 'picker picker--time'
opened?: string | undefined; // default 'picker--opened'
focused?: string | undefined; // default 'picker--focused'
// The picker holder
holder?: string | undefined; // default 'picker__holder'
// The picker frame, wrapper, and box
frame?: string | undefined; // default 'picker__frame'
wrap?: string | undefined; // default 'picker__wrap'
box?: string | undefined; // default 'picker__box'
// Day/Time states
disabled?: string | undefined; // default 'picker__day--disabled' or 'picker__list-item--disabled'
selected?: string | undefined; // default 'picker__day--selected' or 'picker__list-item--selected'
highlighted?: string | undefined; // default 'picker__day--highlighted' or 'picker__list-item--highlighted'
now?: string | undefined; // default 'picker__day--today' or 'picker__list-item--now'
// Clear button
buttonClear?: string | undefined; // default 'picker__button--clear'
}
interface DateKlassOptions extends KlassOptions {
// The picker header
header?: string | undefined; // default 'picker__header'
// Month navigation
navPrev?: string | undefined; // default 'picker__nav--prev'
navNext?: string | undefined; // default 'picker__nav--next'
navDisabled?: string | undefined; // default 'picker__nav--disabled'
// Month & year labels
month?: string | undefined; // default 'picker__month'
year?: string | undefined; // default 'picker__year'
// Month & year dropdowns
selectMonth?: string | undefined; // default 'picker__select--month'
selectYear?: string | undefined; // default 'picker__select--year'
// Table of dates
table?: string | undefined; // default 'picker__table'
// Weekday labels
weekdays?: string | undefined; // default 'picker__weekday'
// Day states
day?: string | undefined; // default 'picker__day'
infocus?: string | undefined; // default 'picker__day--infocus'
outfocus?: string | undefined; // default 'picker__day--outfocus'
// The picker footer
footer?: string | undefined; // default 'picker__footer'
// Today & close buttons
buttonClose?: string | undefined; // default 'picker__button--close'
buttonToday?: string | undefined; // default 'picker__button--today'
}
interface TimeKlassOptions extends KlassOptions {
// The root picker
picker?: string | undefined; // default 'picker picker--time'
// List of times
list?: string | undefined; // default 'picker__list'
listItem?: string | undefined; // default 'picker__list-item'
// Time states
viewset?: string | undefined; // default 'picker__list-item--viewset'
}
// options shared between date and time pickers
interface Options {
/**
* Set the clear button text.
* Defaults to 'Clear'
*/
clear?: string | undefined;
/**
* The human-friendly display format.
* Escape any "rule" characters with an exclamation mark (!).
* Defaults to 'd mmmm, yyyy'
*/
format?: string | undefined;
/**
* An alternate format to submit to the server.
* Defaults to undefined.
*/
formatSubmit?: string | undefined;
/**
* An optional name prefix for the new hidden input element used
* when a custom human-friendly display format is specified.
* Defaults to undefined.
*/
hiddenPrefix?: string | undefined;
/**
* An optional name suffix for the new hidden input element used
* when a custom human-friendly display format is specified.
* Defaults to '_submit'
*/
hiddenSuffix?: string | undefined;
/**
* A majority of the time, the value that needs to be sent to the server
* is just the hidden value and not the visible one. To make this happen,
* use the hiddenName option. This essentially nullifies the hiddenPrefix
* and hiddenSuffix, strips the name attribute from the source input, and
* then sets it as the name of the hidden input. Defaults to undefined.
*/
hiddenName?: boolean | undefined;
/**
* By default, typing into the input is disabled by giving it a readOnly
* attribute. Setting the editable option to true allows the input field
* to be edited directly.
*/
editable?: boolean | undefined;
/**
* Specify where to insert the picker's root element by passing any
* valid CSS selector to this option. Defaults to undefined.
*/
container?: string | JQuery | undefined;
/**
* The hidden input container.
* Defaults to undefined.
*/
containerHidden?: string | undefined;
/**
* Whether or not to close the picker when a date is selected.
* Defaults to `true`.
*/
closeOnSelect?: boolean | undefined;
/**
* Whether or not to close the picker when the "clear" button is pressed.
* Defaults to `true`.
*/
closeOnClear?: boolean | undefined;
// Events
onStart?: ((event: any) => void) | undefined;
onRender?: ((event: any) => void) | undefined;
onOpen?: ((event: any) => void) | undefined;
onClose?: ((event: any) => void) | undefined;
onSet?: ((event: any) => void) | undefined;
onStop?: ((event: any) => void) | undefined;
}
type MinOrMaxDateOption = Date | [number, number, number] | number | boolean;
type MinOrMaxTimeOption = Date | [number, number] | number | boolean;
export interface DateOptions extends Options {
// Strings and translations
monthsFull?: string[] | undefined; // default 'January' through 'December'
monthsShort?: string[] | undefined; // default 'Jan' through 'Dec'
weekdaysFull?: string[] | undefined; // default 'Sunday' through 'Saturday'
weekdaysShort?: string[] | undefined; // default 'Sun' through 'Sat'
showMonthsShort?: boolean | undefined;
showWeekdaysFull?: boolean | undefined;
// Buttons
today?: string | undefined; // default 'Today'
close?: string | undefined; // default 'Close'
// Accessibility labels
labelMonthNext?: string | undefined; // default 'Next month'
labelMonthPrev?: string | undefined; // default 'Previous month'
labelMonthSelect?: string | undefined; // default 'Select a month'
labelYearSelect?: string | undefined; // default 'Select a year'
/**
* True enables the dropdown selector and false replaces it with text.
* You can also specify the number of years to show in the dropdown
* using an even integer - half before and half after the year in focus.
* If true the value will default to 10.
*/
selectYears?: boolean | number | undefined;
/**
* True enables the dropdown selector and false replaces it with text
*/
selectMonths?: boolean | undefined;
/**
* The first day of the week can be set to either Sunday or Monday.
* True or 1 sets it as Monday and false or 0 as Sunday.
*/
firstDay?: boolean | number | undefined;
/**
* Set the minimum selectable date on the picker. Accepts a Date object,
* array formatted as [YEAR, MONTH, DATE], a positive or negative integer
* for a date relative to today, or a boolean (`true` sets it to today,
* `false` removes any limit).
*/
min?: MinOrMaxDateOption | undefined;
/**
* Set the maximum selectable date on the picker.
* Accepts the same values as the `min` property.
*/
max?: MinOrMaxDateOption | undefined;
/**
* Disable a specific or arbitrary set of dates selectable on the
* picker. Accepts an array of Date objects, arrays formatted as
* [YEAR, MONTH, DATE], integers representing days of the week
* (from 1 to 7), or objects with a range of dates. Switch to a
* whitelist by setting `true` as the first item in the collection.
* Enable dates that fall within a range of disabled dates by
* adding an `inverted` parameter to the item within the collection.
*/
disable?: any[] | undefined;
// Classes
klass?: DateKlassOptions | undefined;
}
export interface TimeOptions extends Options {
/**
* The formatLabel option is unique. It can contain HTML and it can
* also be a function if you want to create the label during run-time.
*/
formatLabel?: string | ((time: TimeItem) => string) | undefined;
/**
* Choose the interval in minutes between each time in the list.
* Default is 30.
*/
interval?: number | undefined;
/**
* Set the minimum selectable time on the picker. Accepts a Date object,
* array formatted as [HOUR, MINUTE], a positive or negative integer
* for a time relative to now, or a boolean (`true` sets it to now, and
* `false` removes any limit).
*/
min?: MinOrMaxTimeOption | undefined;
/**
* Set the maximum selectable time on the picker.
* Accepts the same values as the `min` property.
*/
max?: MinOrMaxTimeOption | undefined;
/**
* Disable a specific or arbitrary set of times selectable on the picker.
* Accepts an array of Date objects, arrays formatted as [HOUR, MINUTE],
* integers representing hours (from 0 to 23), or objects with a range of
* times. Switch to a whitelist by setting `true` as the first item in the
* collection. Enable times that fall within a range of disabled times by
* adding an `inverted` parameter to the item within the collection.
*/
disable?: any[] | undefined;
// Classes
klass?: TimeKlassOptions | undefined;
}
interface Item {
/**
* The "pick" value used for comparisons.
*/
pick: number;
}
export interface DateItem extends Item {
/**
* The full year.
*/
year: number;
/**
* The month with zero-as-index.
*/
month: number;
/**
* The date of the month.
*/
date: number;
/**
* The day of the week with zero-as-index.
*/
day: number;
/**
* The underlying JavaScript Date object.
*/
obj: Date;
}
export interface TimeItem extends Item {
/**
* Hour of the day from 0 to 23.
*/
hour: number;
/**
* The minutes of the hour from 0 to 59 (based on the interval).
*/
mins: number;
}
export interface CallbackObject {
open?: (() => void) | undefined;
close?: (() => void) | undefined;
render?: (() => void) | undefined;
start?: (() => void) | undefined;
stop?: (() => void) | undefined;
set?: ((thingSet: any) => void) | undefined;
}
export interface SetObject {
clear?: any;
select?: any;
highlight?: any;
view?: any;
min?: any;
max?: any;
disable?: any;
enable?: any;
}
export interface TimeSetObject extends SetObject {
/**
* Choose the minutes interval between each time in the list.
* Defaults to 30.
*/
interval?: number | undefined;
}
export interface SetOptions {
/**
* By default, any callbacks bound with the on method will be fired
* when its relevant thing is set. To silently set a thing, pass an
* options object with the muted parameter set to true.
*/
muted?: boolean | undefined;
format?: string | undefined;
}
interface Picker {
/**
* The picker's relative input element wrapped as a jQuery object.
*/
$node: JQuery;
/**
* The picker's relative root holder element wrapped as a jQuery object.
*/
$root: JQuery;
/**
* This is the picker’s relative hidden element, which is undefined if
* there’s no formatSubmit option. There should be no reason to use this
* – it's mostly for internal use. If you have a valid reason for using
* this, please mention it in the issues.
*/
_hidden: HTMLInputElement;
open(withoutFocus?: boolean): TPickerObject;
close(withFocus?: boolean): TPickerObject;
/**
* Rebuild the picker.
*/
start(): TPickerObject;
/**
* Destroy the picker.
*/
stop(): TPickerObject;
/**
* Refresh the picker box after adding something to the holder.
* By default, only the "face" of the picker (i.e. the box element)
* has it’s contents re-rendered. To render the entire picker from
* the root up, pass true as the first argument.
*/
render(entirePicker?: boolean): TPickerObject;
/**
* Clear the value in the picker's input element.
*/
clear(): TPickerObject;
/**
* Short for picker.get('value')
*/
get(): string;
/**
* Get the properties, objects, and states that make up the current
* state of the picker.
*/
get(thing: string): any;
/**
* Returns the string value of the picker's input element.
*/
get(thing: "value"): string;
/**
* Returns the item object that is visually selected.
*/
get(thing: "select"): TItemObject;
/**
* Returns the item object that is visually highlighted.
*/
get(thing: "highlight"): TItemObject;
/**
* Returns the item object that sets the current view.
*/
get(thing: "view"): TItemObject;
/**
* Returns the item object that limits the picker's lower range.
*/
get(thing: "min"): TItemObject;
/**
* Returns the item object that limits the picker's upper range.
*/
get(thing: "max"): TItemObject;
/**
* Returns a boolean value of whether the picker is open or not.
*/
get(thing: "open"): boolean;
/**
* Returns a boolean value of whether the picker has started or not.
*/
get(thing: "start"): boolean;
/**
* Returns a unique 9-digit integer that is the ID of the picker.
*/
get(thing: "id"): number;
/**
* Returns an array of items that determine which item objects to
* disable on the picker.
*/
get(thing: "disable"): any[];
/**
* Returns a formatted string for the item object specified by `thing`
*/
get(thing: string, format: string): string;
/**
* Set the properties, objects, and states to change the state of the picker.
*/
set(thing: string, value?: any, options?: SetOptions): TPickerObject;
set(things: TOptions, options?: SetOptions): TPickerObject;
/**
* Bind callbacks to get fired off when the relative picker method is called.
*/
on(methodName: string, callback: (data?: any) => void): TPickerObject;
/**
* Bind multiple callbacks at once to get fired off when the relative
* picker method is called.
*/
on(callbackObject: CallbackObject): TPickerObject;
/**
* Unbind callbacks that are bound using the on method.
*/
off(...methodName: string[]): TPickerObject;
/**
* Trigger callbacks that have been queued up using the the on method.
*/
trigger(event: string, data?: any): TPickerObject;
}
export interface DatePicker extends Picker {}
export interface TimePicker extends Picker {}
interface Pickadate {
defaults: DateOptions;
/**
* Access the API object on an initialized date picker element.
*/
(keyword: "picker"): Pickadate.DatePicker;
(objectName: "$node"): JQuery;
(objectName: "$root"): JQuery;
(objectName: "_hidden"): HTMLInputElement;
/**
* Invoke API methods after date picker initialization.
*/
(methodName: string, ...arguments: any[]): any;
/**
* Initialize a date picker.
*/
(options?: Pickadate.DateOptions): JQuery;
}
interface Pickatime {
defaults: TimeOptions;
/**
* Access the API object on an initialized time picker element.
*/
(keyword: "picker"): Pickadate.TimePicker;
(objectName: "$node"): JQuery;
(objectName: "$root"): JQuery;
(objectName: "_hidden"): HTMLInputElement;
/**
* Invoke API methods after time picker initialization.
*/
(methodName: string, ...arguments: any[]): any;
/**
* Initialize a time picker.
*/
(options?: Pickadate.TimeOptions): JQuery;
}
}
interface JQuery {
pickadate: Pickadate.Pickadate;
pickatime: Pickadate.Pickatime;
}