UNPKG

@lspriv/wx-calendar

Version:

微信小程序日历

245 lines (244 loc) 8.75 kB
import { Nullable } from '../utils/shared'; import { PluginService } from '../basic/service'; import type { ArrItem } from '../utils/shared'; import type { PluginConstructor, PluginKeys, PluginUse, ServicePlugins } from '../basic/service'; import type { CalendarInstance, UsePluginService, EventSchedule, DEFAULT_PLUGINS } from './component'; export interface CalendarMonth { year: number; month: number; } export interface CalendarDay extends CalendarMonth { day: number; week?: number; today?: boolean; } interface DateMark extends Partial<Pick<CalendarDay, 'year' | 'month' | 'day'>> { date?: string | number | Date | CalendarDay; } export type DateStyle = Record<string, string | number>; export interface CalendarMark extends DateMark { type: 'schedule' | 'corner' | 'festival' | 'solar'; text: string; style?: string | DateStyle; } export interface CalendarStyleMark extends DateMark { type: 'style'; style: string | DateStyle; } export type CalendarMarkTypes = CalendarMark['type'] | CalendarStyleMark['type']; export type WcMark = Pick<CalendarMark, 'text' | 'style'> & { key?: string; }; export type WcScheduleMark = WcMark; export type WcStyleMark = CalendarStyleMark['style']; export type MarkDict<T extends CalendarMarkTypes, Style, Schedule, CF> = T extends 'style' ? Style : T extends 'schedule' ? Schedule : CF; export interface WcDate extends Required<CalendarDay> { key: string; kind: 'last' | 'current' | 'next'; style: Nullable<string>; solar: Nullable<WcMark>; mark: Nullable<WcMark>; corner: Nullable<WcMark>; schedules: Array<WcScheduleMark>; } export interface WcWeek { key: string; days: Array<WcDate>; } export interface WcMonth extends Required<CalendarMonth> { key: string; count: number; weeks: Array<WcWeek>; } export interface WcAnnualMonth { key: string; year: number; month: number; weeks: number; days: number; start: number; } export interface WcDateStyle { light: string | number; dark: string | number; } export type WcAnnualDateStyle = Record<string, WcDateStyle>; export interface WcAnnualMark { rwtype?: 'rest' | 'work'; sub?: string; style?: WcAnnualDateStyle; } export type WcAnnualMarks = Map<string, WcAnnualMark>; export interface WcAnnualSub { key?: string; color: string; text: string; } export interface WcYear { key: string; year: number; subinfo?: Array<WcAnnualSub>; } export interface WcSubYear { year: number; months: Array<WcAnnualMonth>; marks: WcAnnualMarks; } export type WcFullYear = WcYear & WcSubYear; export type WcMarkDict = { [P in CalendarMarkTypes]?: MarkDict<P, Nullable<CalendarStyleMark>, Nullable<Array<CalendarMark>>, Nullable<CalendarMark>>; }; export type WcMarkMap = Map<string, WcMarkDict>; export interface WcScheduleInfo { dtStart?: Date; dtEnd?: Date; origin?: string; originKey?: string; summary?: string; description?: string; } export declare const styleParse: (style: string | DateStyle | null) => Record<string, string | number> | null; export declare const reorderStyle: (style: string | DateStyle, pick?: Array<string | RegExp>) => string; export declare const styleStringify: (style: DateStyle | null, pick?: Array<string | RegExp>) => string; export declare const themeStyle: (style?: WcDateStyle) => string | number | undefined; export declare const getAnnualMarkKey: (day: Pick<CalendarDay, "month" | "day">) => string; /** * 生成 mark key * @param id 插件内部识别id,会整体回传给插件 PLUGIN_MARK_DATA 方法 * @param pluginKey 插件 KEY */ export declare const getMarkKey: (id: string, pluginKey?: string) => string; export interface WcMarkKeyParse { plugin?: string; id: string; } /** * 解析 mark key * @param key mark key */ export declare const parseMarkKey: (key?: string) => WcMarkKeyParse | undefined; export declare const getScheduleDetail: (date: CalendarDay, schedule: WcScheduleMark, service: PluginService<DEFAULT_PLUGINS>) => EventSchedule; export declare const mergeAnnualDateStyle: (s1?: WcAnnualDateStyle, s2?: WcAnnualDateStyle) => WcAnnualDateStyle | undefined; /** * 合并两个年面板标记 */ export declare const mergeAnnualMarks: (m1?: WcAnnualMarks, m2?: WcAnnualMarks) => WcAnnualMarks | undefined; export declare const formDateByStrKey: (key: string) => CalendarDay; /** * 获取某个月份的天数 * @param mon 月份 */ export declare const getMonthDays: (mon: CalendarMonth) => number; /** * 是否闰年 * @param y 年 */ export declare const isLeapYear: (y: number) => boolean; /** * 判断两个日期是否是同一天 */ export declare const isSameDate: (d1: CalendarDay, d2: CalendarDay) => boolean; /** * 判断两个日期是否同一周 */ export declare const isSameWeek: (d1: CalendarDay, d2: CalendarDay, weekstart?: number) => boolean; /** * 是否今日 * @param date */ export declare const isToday: (date: CalendarDay) => boolean; export declare function normalDate(fuzzy: string | number | Date | CalendarDay): CalendarDay; export declare function normalDate(year: number, month: number, day: number): CalendarDay; /** * 计算与指定日期相差几天的日期 * @param date 指定日期 * @param offset 差值,单位天 */ export declare const offsetDate: (date: CalendarDay, offset: number) => CalendarDay; /** * 获取指定某年某月某天的日期,若指定天大于指定月的天数,则返回指定月最后一天 * @param year 指定年 * @param month 指定月 * @param day 指定天 */ export declare const inMonthDate: (year: number, month: number, day: number) => CalendarDay; /** * 根据指定的周首日对星期重新排序 * @param weekstart 周首日 */ export declare const sortWeeks: (weekstart: number) => string; /** * 获取指定日期所在的周 * @param date 指定日期 * @param weekstart 周首日 */ export declare const weekRange: (date: CalendarDay, weekstart?: number) => [start: Date, end: Date]; /** * 查找日期 * @param weeks 月份周数组 * @param predicate 查找条件 */ export declare const findInWeeks: (weeks: Array<WcWeek>, predicate: (value: WcDate, index: number, obj: WcDate[]) => boolean) => WcDate | undefined; /** * 查找日期index * @param weeks 月份周数组 * @param predicate 查找条件 */ export declare const findDateIndex: (weeks: Array<WcWeek>, predicate: (value: WcDate, index: number, obj: WcDate[]) => boolean) => number; /** * 获取指定日期所在月份的周索引和所在周的日期索引 * @param date 制定日期 * @param weeks 所在月份的周数组 */ export declare const getWeekDateIdx: (date: CalendarDay, weeks: Array<WcWeek>) => { wdx: number; ddx: number; }; /** * 计算两个月份相距多少个月(完全不考虑天,纯粹按月计算) * @param start 起始月 * @param end 终止月 */ export declare const monthDiff: (start: CalendarMonth, end: CalendarMonth) => number; /** * 获取指定日期与今日相距信息和所在周信息 * @param date 指定日期 * @param withWeek 周首日 */ export declare const getDateInfo: (date: CalendarDay, weekstart: number, withWeek?: boolean | number) => string; export declare const sameAnnualMarks: (m1: WcAnnualMarks, m2?: WcAnnualMarks) => boolean; export declare const fillAnnualSubs: (uk: string, year: number, subinfos?: Array<WcAnnualSub>) => WcAnnualSub[] | undefined; export declare const timestamp: (date: CalendarDay) => number; export type WxCalendarPlugins<T extends WxCalendar<any>> = T extends WxCalendar<infer R> ? R : never; interface ClearFilter { (plugin: PluginUse): boolean; } export declare class WxCalendar<T extends Array<PluginConstructor> = Array<PluginConstructor>, U extends PluginConstructor = ArrItem<T>> { /** 今天 */ static today: CalendarDay; /** 预设插件 */ private static _PLUGINS_; /** 插件服务 */ service: PluginService<T>; constructor(component: CalendarInstance, services?: Array<PluginUse<U> | U>); createMonth(mon: CalendarMonth, weekstart?: number): WcMonth; createYear(year: number, weekstart?: number): WcFullYear; static use<T extends { new (...args: any[]): any; }>(plugin: T, options?: ConstructorParameters<T>[0]): typeof WxCalendar; /** * 移除所有插件 */ static clearPlugin(): void; /** * 移除某个插件 * @param key 插件 key */ static clearPlugin<T extends PluginService = UsePluginService>(key: PluginKeys<ServicePlugins<T>>): void; /** * 移除符合条件的插件 * @param filter 过滤条件 */ static clearPlugin(filter: ClearFilter): void; } export {};