@ailuracode/alpine-calendar 0.1.1 → 0.1.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.d.ts +1 -1
- package/dist/index.js +6 -3
- package/dist/index.js.map +1 -1
- package/package.json +2 -2
package/dist/index.d.ts
CHANGED
|
@@ -98,7 +98,7 @@ type CalendarMagic = (options?: CalendarOptions) => CalendarInstance;
|
|
|
98
98
|
/** Creates an independent calendar logic instance backed by date-fns. */
|
|
99
99
|
declare function createCalendar(options?: CalendarOptions): CalendarInstance;
|
|
100
100
|
/** Builds callable `$calendar` magic that returns independent calendar instances. */
|
|
101
|
-
declare function createCalendarMagic(): CalendarMagic;
|
|
101
|
+
declare function createCalendarMagic(Alpine?: Pick<AlpineType.Alpine, "reactive">): CalendarMagic;
|
|
102
102
|
/** Alpine.js calendar plugin. Registers callable magic `$calendar`. */
|
|
103
103
|
declare function calendarPlugin(Alpine: AlpineType.Alpine): void;
|
|
104
104
|
declare global {
|
package/dist/index.js
CHANGED
|
@@ -343,11 +343,14 @@ function createCalendar(options = {}) {
|
|
|
343
343
|
};
|
|
344
344
|
return calendar;
|
|
345
345
|
}
|
|
346
|
-
function createCalendarMagic() {
|
|
347
|
-
return (options) =>
|
|
346
|
+
function createCalendarMagic(Alpine) {
|
|
347
|
+
return (options) => {
|
|
348
|
+
const instance = createCalendar(options);
|
|
349
|
+
return Alpine ? Alpine.reactive(instance) : instance;
|
|
350
|
+
};
|
|
348
351
|
}
|
|
349
352
|
function calendarPlugin(Alpine) {
|
|
350
|
-
Alpine.magic("calendar", () => createCalendarMagic());
|
|
353
|
+
Alpine.magic("calendar", () => createCalendarMagic(Alpine));
|
|
351
354
|
}
|
|
352
355
|
export {
|
|
353
356
|
createCalendar,
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/index.ts","../src/context.ts","../src/matchers.ts"],"sourcesContent":["import type AlpineType from \"alpinejs\";\nimport type { Day, Locale } from \"date-fns\";\nimport {\n addDays,\n addMonths,\n eachDayOfInterval,\n endOfMonth,\n endOfWeek,\n format,\n isBefore,\n isSameDay,\n isSameMonth,\n isToday as isTodayDate,\n isWithinInterval,\n startOfDay,\n startOfMonth,\n startOfWeek,\n subMonths,\n} from \"date-fns\";\nimport {\n type CalendarDateFnsOptions,\n type ResolvedDateFnsContext,\n resolveDateFnsContext,\n} from \"./context.js\";\nimport {\n type CalendarDateAfterMatcher,\n type CalendarDateBeforeMatcher,\n type CalendarDateIntervalMatcher,\n type CalendarDateOnlyMatcher,\n type CalendarDateRangeMatcher,\n type CalendarDayOfWeekMatcher,\n type CalendarMatcher,\n type CalendarMatcherFn,\n isDateDisabledByRules,\n matchesCalendarMatcher,\n normalizeMatchers,\n} from \"./matchers.js\";\n\nexport type CalendarMode = \"single\" | \"range\" | \"multiple\";\n\nexport type CalendarDateRange = {\n from?: Date;\n to?: Date;\n};\n\nexport type CalendarSelection = Date | Date[] | CalendarDateRange | null;\n\nexport type {\n CalendarDateAfterMatcher,\n CalendarDateBeforeMatcher,\n CalendarDateFnsOptions,\n CalendarDateIntervalMatcher,\n CalendarDateOnlyMatcher,\n CalendarDateRangeMatcher,\n CalendarDayOfWeekMatcher,\n CalendarMatcher,\n CalendarMatcherFn,\n ResolvedDateFnsContext,\n};\n\nexport { matchesCalendarMatcher, normalizeMatchers };\n\nexport interface CalendarOptions {\n locale?: Locale;\n weekStartsOn?: Day;\n minDate?: Date;\n maxDate?: Date;\n mode?: CalendarMode;\n month?: Date;\n selected?: CalendarSelection;\n disabled?: CalendarMatcher | CalendarMatcher[];\n dateFns?: CalendarDateFnsOptions;\n}\n\nexport interface CalendarDay {\n date: Date;\n isCurrentMonth: boolean;\n isToday: boolean;\n isSelected: boolean;\n isDisabled: boolean;\n isRangeStart: boolean;\n isRangeEnd: boolean;\n isInRange: boolean;\n}\n\nexport interface CalendarInstance {\n month: Date;\n mode: CalendarMode;\n selected: CalendarSelection;\n locale: Locale;\n weekStartsOn: Day;\n dateFns: ResolvedDateFnsContext;\n readonly weeks: CalendarDay[][];\n readonly weekdayLabels: string[];\n prevMonth(): void;\n nextMonth(): void;\n goToMonth(date: Date): void;\n goToToday(): void;\n select(date: Date | null): void;\n clear(): void;\n matches(date: Date, matcher: CalendarMatcher): boolean;\n isSelected(date: Date): boolean;\n isDisabled(date: Date): boolean;\n isToday(date: Date): boolean;\n isSameMonth(date: Date, month?: Date): boolean;\n isInRange(date: Date): boolean;\n isRangeStart(date: Date): boolean;\n isRangeEnd(date: Date): boolean;\n format(date: Date, pattern: string): string;\n formatMonth(month?: Date): string;\n formatYear(month?: Date): string;\n}\n\nexport type CalendarMagic = (options?: CalendarOptions) => CalendarInstance;\n\ntype ResolvedCalendarConfig = {\n context: ResolvedDateFnsContext;\n minDate?: Date;\n maxDate?: Date;\n mode: CalendarMode;\n month: Date;\n selected: CalendarSelection;\n disabled: CalendarMatcher[];\n};\n\nfunction normalizeDate(date: Date, context: ResolvedDateFnsContext): Date {\n return startOfDay(date, context);\n}\n\nfunction normalizeRange(\n range: CalendarDateRange,\n context: ResolvedDateFnsContext\n): CalendarDateRange {\n return {\n from: range.from ? normalizeDate(range.from, context) : undefined,\n to: range.to ? normalizeDate(range.to, context) : undefined,\n };\n}\n\nfunction normalizeSelection(\n selection: CalendarSelection,\n mode: CalendarMode,\n context: ResolvedDateFnsContext\n): CalendarSelection {\n if (selection === null) {\n return null;\n }\n\n if (mode === \"single\") {\n return selection instanceof Date ? normalizeDate(selection, context) : null;\n }\n\n if (mode === \"multiple\") {\n if (!Array.isArray(selection)) {\n return [];\n }\n\n return selection.map((date) => normalizeDate(date, context));\n }\n\n if (typeof selection === \"object\" && !Array.isArray(selection) && !(selection instanceof Date)) {\n return normalizeRange(selection, context);\n }\n\n return null;\n}\n\nfunction resolveConfig(options: CalendarOptions = {}): ResolvedCalendarConfig {\n const context = resolveDateFnsContext(options);\n\n return {\n context,\n minDate: options.minDate ? normalizeDate(options.minDate, context) : undefined,\n maxDate: options.maxDate ? normalizeDate(options.maxDate, context) : undefined,\n mode: options.mode ?? \"single\",\n month: startOfMonth(options.month ?? new Date(), context),\n selected: normalizeSelection(options.selected ?? null, options.mode ?? \"single\", context),\n disabled: normalizeMatchers(options.disabled),\n };\n}\n\nfunction getMonthDays(month: Date, context: ResolvedDateFnsContext): Date[] {\n const start = startOfWeek(startOfMonth(month, context), context);\n const end = endOfWeek(endOfMonth(month, context), context);\n\n return eachDayOfInterval({ start, end }, context);\n}\n\nfunction chunkWeeks(days: Date[]): Date[][] {\n const weeks: Date[][] = [];\n\n for (let index = 0; index < days.length; index += 7) {\n weeks.push(days.slice(index, index + 7));\n }\n\n return weeks;\n}\n\nfunction getWeekdayLabels(context: ResolvedDateFnsContext): string[] {\n const start = startOfWeek(new Date(), context);\n\n return Array.from({ length: 7 }, (_, index) =>\n format(addDays(start, index, context), \"EEEEEE\", context)\n );\n}\n\nfunction selectSingleDate(calendar: CalendarInstance, day: Date): void {\n calendar.selected = day;\n}\n\nfunction selectMultipleDate(calendar: CalendarInstance, day: Date): void {\n const current = Array.isArray(calendar.selected) ? [...calendar.selected] : [];\n const existingIndex = current.findIndex((value) => isSameDay(value, day, calendar.dateFns));\n\n if (existingIndex >= 0) {\n current.splice(existingIndex, 1);\n } else {\n current.push(day);\n }\n\n calendar.selected = current;\n}\n\nfunction selectRangeDate(calendar: CalendarInstance, day: Date): void {\n const range = (calendar.selected as CalendarDateRange | null) ?? {};\n\n if (!range.from || (range.from && range.to)) {\n calendar.selected = { from: day, to: undefined };\n return;\n }\n\n if (isSameDay(day, range.from, calendar.dateFns)) {\n return;\n }\n\n if (isBefore(day, range.from)) {\n calendar.selected = { from: day, to: range.from };\n return;\n }\n\n calendar.selected = { from: range.from, to: day };\n}\n\nfunction isSingleSelected(\n selected: CalendarSelection,\n day: Date,\n context: ResolvedDateFnsContext\n): boolean {\n return selected instanceof Date ? isSameDay(selected, day, context) : false;\n}\n\nfunction isMultipleSelected(\n selected: CalendarSelection,\n day: Date,\n context: ResolvedDateFnsContext\n): boolean {\n return Array.isArray(selected) ? selected.some((value) => isSameDay(value, day, context)) : false;\n}\n\nfunction isRangeEndpointSelected(\n selected: CalendarSelection,\n day: Date,\n context: ResolvedDateFnsContext\n): boolean {\n const range = selected as CalendarDateRange | null;\n\n if (!range) {\n return false;\n }\n\n return (\n (range.from ? isSameDay(range.from, day, context) : false) ||\n (range.to ? isSameDay(range.to, day, context) : false)\n );\n}\n\n/** Creates an independent calendar logic instance backed by date-fns. */\nexport function createCalendar(options: CalendarOptions = {}): CalendarInstance {\n const config = resolveConfig(options);\n\n const calendar: CalendarInstance = {\n month: config.month,\n mode: config.mode,\n selected: config.selected,\n locale: config.context.locale,\n weekStartsOn: config.context.weekStartsOn,\n dateFns: config.context,\n\n get weeks() {\n const days = getMonthDays(this.month, this.dateFns);\n\n return chunkWeeks(days).map((week) =>\n week.map((date) => ({\n date,\n isCurrentMonth: isSameMonth(date, this.month, this.dateFns),\n isToday: isTodayDate(date, this.dateFns),\n isSelected: this.isSelected(date),\n isDisabled: this.isDisabled(date),\n isRangeStart: this.isRangeStart(date),\n isRangeEnd: this.isRangeEnd(date),\n isInRange: this.isInRange(date),\n }))\n );\n },\n\n get weekdayLabels() {\n return getWeekdayLabels(this.dateFns);\n },\n\n prevMonth() {\n this.month = subMonths(this.month, 1, this.dateFns);\n },\n\n nextMonth() {\n this.month = addMonths(this.month, 1, this.dateFns);\n },\n\n goToMonth(date: Date) {\n this.month = startOfMonth(date, this.dateFns);\n },\n\n goToToday() {\n this.goToMonth(new Date());\n },\n\n select(date: Date | null) {\n if (date === null) {\n this.clear();\n return;\n }\n\n const day = normalizeDate(date, this.dateFns);\n\n if (this.isDisabled(day)) {\n return;\n }\n\n if (this.mode === \"single\") {\n selectSingleDate(this, day);\n return;\n }\n\n if (this.mode === \"multiple\") {\n selectMultipleDate(this, day);\n return;\n }\n\n selectRangeDate(this, day);\n },\n\n clear() {\n this.selected = this.mode === \"multiple\" ? [] : null;\n },\n\n matches(date: Date, matcher: CalendarMatcher) {\n return matchesCalendarMatcher(date, matcher, this.dateFns);\n },\n\n isSelected(date: Date) {\n const day = normalizeDate(date, this.dateFns);\n\n if (this.mode === \"single\") {\n return isSingleSelected(this.selected, day, this.dateFns);\n }\n\n if (this.mode === \"multiple\") {\n return isMultipleSelected(this.selected, day, this.dateFns);\n }\n\n return isRangeEndpointSelected(this.selected, day, this.dateFns);\n },\n\n isDisabled(date: Date) {\n return isDateDisabledByRules(\n date,\n config.minDate,\n config.maxDate,\n config.disabled,\n this.dateFns\n );\n },\n\n isToday(date: Date) {\n return isTodayDate(date, this.dateFns);\n },\n\n isSameMonth(date: Date, month?: Date) {\n return isSameMonth(date, month ?? calendar.month, calendar.dateFns);\n },\n\n isInRange(date: Date) {\n if (this.mode !== \"range\") {\n return false;\n }\n\n const range = this.selected as CalendarDateRange | null;\n\n if (!(range?.from && range.to)) {\n return false;\n }\n\n const day = normalizeDate(date, this.dateFns);\n\n return (\n isWithinInterval(day, { start: range.from, end: range.to }, this.dateFns) &&\n !isSameDay(day, range.from, this.dateFns) &&\n !isSameDay(day, range.to, this.dateFns)\n );\n },\n\n isRangeStart(date: Date) {\n const range = this.selected as CalendarDateRange | null;\n return range?.from ? isSameDay(date, range.from, this.dateFns) : false;\n },\n\n isRangeEnd(date: Date) {\n const range = this.selected as CalendarDateRange | null;\n return range?.to ? isSameDay(date, range.to, this.dateFns) : false;\n },\n\n format(date: Date, pattern: string) {\n return format(date, pattern, this.dateFns);\n },\n\n formatMonth(month?: Date) {\n const value = month ?? calendar.month;\n return format(value, \"LLLL yyyy\", calendar.dateFns);\n },\n\n formatYear(month?: Date) {\n const value = month ?? calendar.month;\n return format(value, \"yyyy\", calendar.dateFns);\n },\n };\n\n return calendar;\n}\n\n/** Builds callable `$calendar` magic that returns independent calendar instances. */\nexport function createCalendarMagic(): CalendarMagic {\n return (options?: CalendarOptions) => createCalendar(options);\n}\n\n/** Alpine.js calendar plugin. Registers callable magic `$calendar`. */\nexport default function calendarPlugin(Alpine: AlpineType.Alpine): void {\n Alpine.magic(\"calendar\", () => createCalendarMagic());\n}\n\ndeclare global {\n namespace Alpine {\n interface Magics<T> {\n $calendar: CalendarMagic;\n }\n }\n}\n","import type {\n ContextOptions,\n Day,\n FirstWeekContainsDateOptions,\n FormatOptions,\n Locale,\n WeekOptions,\n} from \"date-fns\";\nimport { enUS } from \"date-fns/locale\";\n\nexport type CalendarDateFnsOptions = ContextOptions<Date> &\n WeekOptions &\n FirstWeekContainsDateOptions &\n Pick<FormatOptions, \"useAdditionalWeekYearTokens\" | \"useAdditionalDayOfYearTokens\"> & {\n locale?: Locale;\n };\n\nexport type ResolvedDateFnsContext = CalendarDateFnsOptions & {\n locale: Locale;\n weekStartsOn: Day;\n};\n\ntype DateFnsOptionInput = {\n locale?: Locale;\n weekStartsOn?: Day;\n dateFns?: CalendarDateFnsOptions;\n};\n\nexport function resolveDateFnsContext(options: DateFnsOptionInput = {}): ResolvedDateFnsContext {\n const dateFns = options.dateFns ?? {};\n\n return {\n ...dateFns,\n locale: options.locale ?? dateFns.locale ?? enUS,\n weekStartsOn: options.weekStartsOn ?? dateFns.weekStartsOn ?? 0,\n };\n}\n","import type { Day } from \"date-fns\";\nimport { getDay, isAfter, isBefore, isSameDay, isWithinInterval, startOfDay } from \"date-fns\";\nimport type { ResolvedDateFnsContext } from \"./context.js\";\n\nexport type CalendarDateRangeMatcher = {\n from: Date;\n to: Date;\n};\n\n/** Disables dates strictly before `before` (exclusive). */\nexport type CalendarDateBeforeMatcher = {\n before: Date;\n};\n\n/** Disables dates strictly after `after` (exclusive). */\nexport type CalendarDateAfterMatcher = {\n after: Date;\n};\n\n/** Disables dates strictly between `after` and `before` (exclusive endpoints). */\nexport type CalendarDateIntervalMatcher = {\n before: Date;\n after: Date;\n};\n\n/** Disables dates outside the inclusive `only` range. */\nexport type CalendarDateOnlyMatcher = {\n only: CalendarDateRangeMatcher;\n};\n\nexport type CalendarDayOfWeekMatcher = {\n dayOfWeek: Day | Day[];\n};\n\nexport type CalendarMatcherFn = (date: Date) => boolean;\n\nexport type CalendarMatcher =\n | boolean\n | Date\n | Date[]\n | CalendarDateRangeMatcher\n | CalendarDateBeforeMatcher\n | CalendarDateAfterMatcher\n | CalendarDateIntervalMatcher\n | CalendarDateOnlyMatcher\n | CalendarDayOfWeekMatcher\n | CalendarMatcherFn;\n\nfunction normalizeMatcherDate(date: Date, context: ResolvedDateFnsContext): Date {\n return startOfDay(date, context);\n}\n\nfunction isInclusiveRangeMatcher(matcher: CalendarMatcher): matcher is CalendarDateRangeMatcher {\n return (\n typeof matcher === \"object\" &&\n matcher !== null &&\n !Array.isArray(matcher) &&\n !(matcher instanceof Date) &&\n \"from\" in matcher &&\n \"to\" in matcher &&\n !(\"only\" in matcher)\n );\n}\n\nfunction isDateIntervalMatcher(matcher: CalendarMatcher): matcher is CalendarDateIntervalMatcher {\n return (\n typeof matcher === \"object\" &&\n matcher !== null &&\n !Array.isArray(matcher) &&\n !(matcher instanceof Date) &&\n \"before\" in matcher &&\n \"after\" in matcher\n );\n}\n\nfunction isDateBeforeMatcher(matcher: CalendarMatcher): matcher is CalendarDateBeforeMatcher {\n return (\n typeof matcher === \"object\" &&\n matcher !== null &&\n !Array.isArray(matcher) &&\n !(matcher instanceof Date) &&\n \"before\" in matcher &&\n !(\"after\" in matcher)\n );\n}\n\nfunction isDateAfterMatcher(matcher: CalendarMatcher): matcher is CalendarDateAfterMatcher {\n return (\n typeof matcher === \"object\" &&\n matcher !== null &&\n !Array.isArray(matcher) &&\n !(matcher instanceof Date) &&\n \"after\" in matcher &&\n !(\"before\" in matcher)\n );\n}\n\nfunction isDateOnlyMatcher(matcher: CalendarMatcher): matcher is CalendarDateOnlyMatcher {\n return (\n typeof matcher === \"object\" &&\n matcher !== null &&\n !Array.isArray(matcher) &&\n !(matcher instanceof Date) &&\n \"only\" in matcher\n );\n}\n\nfunction isDayOfWeekMatcher(matcher: CalendarMatcher): matcher is CalendarDayOfWeekMatcher {\n return (\n typeof matcher === \"object\" &&\n matcher !== null &&\n !Array.isArray(matcher) &&\n !(matcher instanceof Date) &&\n \"dayOfWeek\" in matcher\n );\n}\n\nfunction matchesInclusiveRange(\n day: Date,\n matcher: CalendarDateRangeMatcher,\n context: ResolvedDateFnsContext\n): boolean {\n const from = normalizeMatcherDate(matcher.from, context);\n const to = normalizeMatcherDate(matcher.to, context);\n\n return isWithinInterval(day, { start: from, end: to }, context);\n}\n\nfunction matchesDateOnly(\n day: Date,\n matcher: CalendarDateOnlyMatcher,\n context: ResolvedDateFnsContext\n): boolean {\n const from = normalizeMatcherDate(matcher.only.from, context);\n const to = normalizeMatcherDate(matcher.only.to, context);\n\n return isBefore(day, from) || isAfter(day, to);\n}\n\nfunction matchesDayOfWeek(day: Date, matcher: CalendarDayOfWeekMatcher): boolean {\n const days = Array.isArray(matcher.dayOfWeek) ? matcher.dayOfWeek : [matcher.dayOfWeek];\n\n return days.includes(getDay(day) as Day);\n}\n\nexport function normalizeMatchers(\n disabled?: CalendarMatcher | CalendarMatcher[]\n): CalendarMatcher[] {\n if (disabled === undefined) {\n return [];\n }\n\n return Array.isArray(disabled) ? disabled : [disabled];\n}\n\n/** Returns `true` when the date matches the matcher. */\nexport function matchesCalendarMatcher(\n date: Date,\n matcher: CalendarMatcher,\n context: ResolvedDateFnsContext\n): boolean {\n const day = normalizeMatcherDate(date, context);\n\n if (typeof matcher === \"boolean\") {\n return matcher;\n }\n\n if (matcher instanceof Date) {\n return isSameDay(day, matcher, context);\n }\n\n if (Array.isArray(matcher)) {\n return matcher.some((value) => isSameDay(day, value, context));\n }\n\n if (typeof matcher === \"function\") {\n return matcher(day);\n }\n\n if (isDateOnlyMatcher(matcher)) {\n return matchesDateOnly(day, matcher, context);\n }\n\n if (isInclusiveRangeMatcher(matcher)) {\n return matchesInclusiveRange(day, matcher, context);\n }\n\n if (isDateIntervalMatcher(matcher)) {\n const before = normalizeMatcherDate(matcher.before, context);\n const after = normalizeMatcherDate(matcher.after, context);\n\n return isAfter(day, after) && isBefore(day, before);\n }\n\n if (isDateBeforeMatcher(matcher)) {\n return isBefore(day, normalizeMatcherDate(matcher.before, context));\n }\n\n if (isDateAfterMatcher(matcher)) {\n return isAfter(day, normalizeMatcherDate(matcher.after, context));\n }\n\n if (isDayOfWeekMatcher(matcher)) {\n return matchesDayOfWeek(day, matcher);\n }\n\n return false;\n}\n\nexport function matchesAnyCalendarMatcher(\n date: Date,\n matchers: CalendarMatcher[],\n context: ResolvedDateFnsContext\n): boolean {\n return matchers.some((matcher) => matchesCalendarMatcher(date, matcher, context));\n}\n\nexport function isDateDisabledByRules(\n date: Date,\n minDate: Date | undefined,\n maxDate: Date | undefined,\n matchers: CalendarMatcher[],\n context: ResolvedDateFnsContext\n): boolean {\n const day = normalizeMatcherDate(date, context);\n\n if (minDate && isBefore(day, minDate)) {\n return true;\n }\n\n if (maxDate && isAfter(day, maxDate)) {\n return true;\n }\n\n return matchesAnyCalendarMatcher(day, matchers, context);\n}\n"],"mappings":"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","names":["isBefore","isSameDay","isWithinInterval","startOfDay","startOfDay","isSameDay","isBefore","isWithinInterval"]}
|
|
1
|
+
{"version":3,"sources":["../src/index.ts","../src/context.ts","../src/matchers.ts"],"sourcesContent":["import type AlpineType from \"alpinejs\";\nimport type { Day, Locale } from \"date-fns\";\nimport {\n addDays,\n addMonths,\n eachDayOfInterval,\n endOfMonth,\n endOfWeek,\n format,\n isBefore,\n isSameDay,\n isSameMonth,\n isToday as isTodayDate,\n isWithinInterval,\n startOfDay,\n startOfMonth,\n startOfWeek,\n subMonths,\n} from \"date-fns\";\nimport {\n type CalendarDateFnsOptions,\n type ResolvedDateFnsContext,\n resolveDateFnsContext,\n} from \"./context.js\";\nimport {\n type CalendarDateAfterMatcher,\n type CalendarDateBeforeMatcher,\n type CalendarDateIntervalMatcher,\n type CalendarDateOnlyMatcher,\n type CalendarDateRangeMatcher,\n type CalendarDayOfWeekMatcher,\n type CalendarMatcher,\n type CalendarMatcherFn,\n isDateDisabledByRules,\n matchesCalendarMatcher,\n normalizeMatchers,\n} from \"./matchers.js\";\n\nexport type CalendarMode = \"single\" | \"range\" | \"multiple\";\n\nexport type CalendarDateRange = {\n from?: Date;\n to?: Date;\n};\n\nexport type CalendarSelection = Date | Date[] | CalendarDateRange | null;\n\nexport type {\n CalendarDateAfterMatcher,\n CalendarDateBeforeMatcher,\n CalendarDateFnsOptions,\n CalendarDateIntervalMatcher,\n CalendarDateOnlyMatcher,\n CalendarDateRangeMatcher,\n CalendarDayOfWeekMatcher,\n CalendarMatcher,\n CalendarMatcherFn,\n ResolvedDateFnsContext,\n};\n\nexport { matchesCalendarMatcher, normalizeMatchers };\n\nexport interface CalendarOptions {\n locale?: Locale;\n weekStartsOn?: Day;\n minDate?: Date;\n maxDate?: Date;\n mode?: CalendarMode;\n month?: Date;\n selected?: CalendarSelection;\n disabled?: CalendarMatcher | CalendarMatcher[];\n dateFns?: CalendarDateFnsOptions;\n}\n\nexport interface CalendarDay {\n date: Date;\n isCurrentMonth: boolean;\n isToday: boolean;\n isSelected: boolean;\n isDisabled: boolean;\n isRangeStart: boolean;\n isRangeEnd: boolean;\n isInRange: boolean;\n}\n\nexport interface CalendarInstance {\n month: Date;\n mode: CalendarMode;\n selected: CalendarSelection;\n locale: Locale;\n weekStartsOn: Day;\n dateFns: ResolvedDateFnsContext;\n readonly weeks: CalendarDay[][];\n readonly weekdayLabels: string[];\n prevMonth(): void;\n nextMonth(): void;\n goToMonth(date: Date): void;\n goToToday(): void;\n select(date: Date | null): void;\n clear(): void;\n matches(date: Date, matcher: CalendarMatcher): boolean;\n isSelected(date: Date): boolean;\n isDisabled(date: Date): boolean;\n isToday(date: Date): boolean;\n isSameMonth(date: Date, month?: Date): boolean;\n isInRange(date: Date): boolean;\n isRangeStart(date: Date): boolean;\n isRangeEnd(date: Date): boolean;\n format(date: Date, pattern: string): string;\n formatMonth(month?: Date): string;\n formatYear(month?: Date): string;\n}\n\nexport type CalendarMagic = (options?: CalendarOptions) => CalendarInstance;\n\ntype ResolvedCalendarConfig = {\n context: ResolvedDateFnsContext;\n minDate?: Date;\n maxDate?: Date;\n mode: CalendarMode;\n month: Date;\n selected: CalendarSelection;\n disabled: CalendarMatcher[];\n};\n\nfunction normalizeDate(date: Date, context: ResolvedDateFnsContext): Date {\n return startOfDay(date, context);\n}\n\nfunction normalizeRange(\n range: CalendarDateRange,\n context: ResolvedDateFnsContext\n): CalendarDateRange {\n return {\n from: range.from ? normalizeDate(range.from, context) : undefined,\n to: range.to ? normalizeDate(range.to, context) : undefined,\n };\n}\n\nfunction normalizeSelection(\n selection: CalendarSelection,\n mode: CalendarMode,\n context: ResolvedDateFnsContext\n): CalendarSelection {\n if (selection === null) {\n return null;\n }\n\n if (mode === \"single\") {\n return selection instanceof Date ? normalizeDate(selection, context) : null;\n }\n\n if (mode === \"multiple\") {\n if (!Array.isArray(selection)) {\n return [];\n }\n\n return selection.map((date) => normalizeDate(date, context));\n }\n\n if (typeof selection === \"object\" && !Array.isArray(selection) && !(selection instanceof Date)) {\n return normalizeRange(selection, context);\n }\n\n return null;\n}\n\nfunction resolveConfig(options: CalendarOptions = {}): ResolvedCalendarConfig {\n const context = resolveDateFnsContext(options);\n\n return {\n context,\n minDate: options.minDate ? normalizeDate(options.minDate, context) : undefined,\n maxDate: options.maxDate ? normalizeDate(options.maxDate, context) : undefined,\n mode: options.mode ?? \"single\",\n month: startOfMonth(options.month ?? new Date(), context),\n selected: normalizeSelection(options.selected ?? null, options.mode ?? \"single\", context),\n disabled: normalizeMatchers(options.disabled),\n };\n}\n\nfunction getMonthDays(month: Date, context: ResolvedDateFnsContext): Date[] {\n const start = startOfWeek(startOfMonth(month, context), context);\n const end = endOfWeek(endOfMonth(month, context), context);\n\n return eachDayOfInterval({ start, end }, context);\n}\n\nfunction chunkWeeks(days: Date[]): Date[][] {\n const weeks: Date[][] = [];\n\n for (let index = 0; index < days.length; index += 7) {\n weeks.push(days.slice(index, index + 7));\n }\n\n return weeks;\n}\n\nfunction getWeekdayLabels(context: ResolvedDateFnsContext): string[] {\n const start = startOfWeek(new Date(), context);\n\n return Array.from({ length: 7 }, (_, index) =>\n format(addDays(start, index, context), \"EEEEEE\", context)\n );\n}\n\nfunction selectSingleDate(calendar: CalendarInstance, day: Date): void {\n calendar.selected = day;\n}\n\nfunction selectMultipleDate(calendar: CalendarInstance, day: Date): void {\n const current = Array.isArray(calendar.selected) ? [...calendar.selected] : [];\n const existingIndex = current.findIndex((value) => isSameDay(value, day, calendar.dateFns));\n\n if (existingIndex >= 0) {\n current.splice(existingIndex, 1);\n } else {\n current.push(day);\n }\n\n calendar.selected = current;\n}\n\nfunction selectRangeDate(calendar: CalendarInstance, day: Date): void {\n const range = (calendar.selected as CalendarDateRange | null) ?? {};\n\n if (!range.from || (range.from && range.to)) {\n calendar.selected = { from: day, to: undefined };\n return;\n }\n\n if (isSameDay(day, range.from, calendar.dateFns)) {\n return;\n }\n\n if (isBefore(day, range.from)) {\n calendar.selected = { from: day, to: range.from };\n return;\n }\n\n calendar.selected = { from: range.from, to: day };\n}\n\nfunction isSingleSelected(\n selected: CalendarSelection,\n day: Date,\n context: ResolvedDateFnsContext\n): boolean {\n return selected instanceof Date ? isSameDay(selected, day, context) : false;\n}\n\nfunction isMultipleSelected(\n selected: CalendarSelection,\n day: Date,\n context: ResolvedDateFnsContext\n): boolean {\n return Array.isArray(selected) ? selected.some((value) => isSameDay(value, day, context)) : false;\n}\n\nfunction isRangeEndpointSelected(\n selected: CalendarSelection,\n day: Date,\n context: ResolvedDateFnsContext\n): boolean {\n const range = selected as CalendarDateRange | null;\n\n if (!range) {\n return false;\n }\n\n return (\n (range.from ? isSameDay(range.from, day, context) : false) ||\n (range.to ? isSameDay(range.to, day, context) : false)\n );\n}\n\n/** Creates an independent calendar logic instance backed by date-fns. */\nexport function createCalendar(options: CalendarOptions = {}): CalendarInstance {\n const config = resolveConfig(options);\n\n const calendar: CalendarInstance = {\n month: config.month,\n mode: config.mode,\n selected: config.selected,\n locale: config.context.locale,\n weekStartsOn: config.context.weekStartsOn,\n dateFns: config.context,\n\n get weeks() {\n const days = getMonthDays(this.month, this.dateFns);\n\n return chunkWeeks(days).map((week) =>\n week.map((date) => ({\n date,\n isCurrentMonth: isSameMonth(date, this.month, this.dateFns),\n isToday: isTodayDate(date, this.dateFns),\n isSelected: this.isSelected(date),\n isDisabled: this.isDisabled(date),\n isRangeStart: this.isRangeStart(date),\n isRangeEnd: this.isRangeEnd(date),\n isInRange: this.isInRange(date),\n }))\n );\n },\n\n get weekdayLabels() {\n return getWeekdayLabels(this.dateFns);\n },\n\n prevMonth() {\n this.month = subMonths(this.month, 1, this.dateFns);\n },\n\n nextMonth() {\n this.month = addMonths(this.month, 1, this.dateFns);\n },\n\n goToMonth(date: Date) {\n this.month = startOfMonth(date, this.dateFns);\n },\n\n goToToday() {\n this.goToMonth(new Date());\n },\n\n select(date: Date | null) {\n if (date === null) {\n this.clear();\n return;\n }\n\n const day = normalizeDate(date, this.dateFns);\n\n if (this.isDisabled(day)) {\n return;\n }\n\n if (this.mode === \"single\") {\n selectSingleDate(this, day);\n return;\n }\n\n if (this.mode === \"multiple\") {\n selectMultipleDate(this, day);\n return;\n }\n\n selectRangeDate(this, day);\n },\n\n clear() {\n this.selected = this.mode === \"multiple\" ? [] : null;\n },\n\n matches(date: Date, matcher: CalendarMatcher) {\n return matchesCalendarMatcher(date, matcher, this.dateFns);\n },\n\n isSelected(date: Date) {\n const day = normalizeDate(date, this.dateFns);\n\n if (this.mode === \"single\") {\n return isSingleSelected(this.selected, day, this.dateFns);\n }\n\n if (this.mode === \"multiple\") {\n return isMultipleSelected(this.selected, day, this.dateFns);\n }\n\n return isRangeEndpointSelected(this.selected, day, this.dateFns);\n },\n\n isDisabled(date: Date) {\n return isDateDisabledByRules(\n date,\n config.minDate,\n config.maxDate,\n config.disabled,\n this.dateFns\n );\n },\n\n isToday(date: Date) {\n return isTodayDate(date, this.dateFns);\n },\n\n isSameMonth(date: Date, month?: Date) {\n return isSameMonth(date, month ?? calendar.month, calendar.dateFns);\n },\n\n isInRange(date: Date) {\n if (this.mode !== \"range\") {\n return false;\n }\n\n const range = this.selected as CalendarDateRange | null;\n\n if (!(range?.from && range.to)) {\n return false;\n }\n\n const day = normalizeDate(date, this.dateFns);\n\n return (\n isWithinInterval(day, { start: range.from, end: range.to }, this.dateFns) &&\n !isSameDay(day, range.from, this.dateFns) &&\n !isSameDay(day, range.to, this.dateFns)\n );\n },\n\n isRangeStart(date: Date) {\n const range = this.selected as CalendarDateRange | null;\n return range?.from ? isSameDay(date, range.from, this.dateFns) : false;\n },\n\n isRangeEnd(date: Date) {\n const range = this.selected as CalendarDateRange | null;\n return range?.to ? isSameDay(date, range.to, this.dateFns) : false;\n },\n\n format(date: Date, pattern: string) {\n return format(date, pattern, this.dateFns);\n },\n\n formatMonth(month?: Date) {\n const value = month ?? calendar.month;\n return format(value, \"LLLL yyyy\", calendar.dateFns);\n },\n\n formatYear(month?: Date) {\n const value = month ?? calendar.month;\n return format(value, \"yyyy\", calendar.dateFns);\n },\n };\n\n return calendar;\n}\n\n/** Builds callable `$calendar` magic that returns independent calendar instances. */\nexport function createCalendarMagic(Alpine?: Pick<AlpineType.Alpine, \"reactive\">): CalendarMagic {\n return (options?: CalendarOptions) => {\n const instance = createCalendar(options);\n return Alpine ? Alpine.reactive(instance) : instance;\n };\n}\n\n/** Alpine.js calendar plugin. Registers callable magic `$calendar`. */\nexport default function calendarPlugin(Alpine: AlpineType.Alpine): void {\n Alpine.magic(\"calendar\", () => createCalendarMagic(Alpine));\n}\n\ndeclare global {\n namespace Alpine {\n interface Magics<T> {\n $calendar: CalendarMagic;\n }\n }\n}\n","import type {\n ContextOptions,\n Day,\n FirstWeekContainsDateOptions,\n FormatOptions,\n Locale,\n WeekOptions,\n} from \"date-fns\";\nimport { enUS } from \"date-fns/locale\";\n\nexport type CalendarDateFnsOptions = ContextOptions<Date> &\n WeekOptions &\n FirstWeekContainsDateOptions &\n Pick<FormatOptions, \"useAdditionalWeekYearTokens\" | \"useAdditionalDayOfYearTokens\"> & {\n locale?: Locale;\n };\n\nexport type ResolvedDateFnsContext = CalendarDateFnsOptions & {\n locale: Locale;\n weekStartsOn: Day;\n};\n\ntype DateFnsOptionInput = {\n locale?: Locale;\n weekStartsOn?: Day;\n dateFns?: CalendarDateFnsOptions;\n};\n\nexport function resolveDateFnsContext(options: DateFnsOptionInput = {}): ResolvedDateFnsContext {\n const dateFns = options.dateFns ?? {};\n\n return {\n ...dateFns,\n locale: options.locale ?? dateFns.locale ?? enUS,\n weekStartsOn: options.weekStartsOn ?? dateFns.weekStartsOn ?? 0,\n };\n}\n","import type { Day } from \"date-fns\";\nimport { getDay, isAfter, isBefore, isSameDay, isWithinInterval, startOfDay } from \"date-fns\";\nimport type { ResolvedDateFnsContext } from \"./context.js\";\n\nexport type CalendarDateRangeMatcher = {\n from: Date;\n to: Date;\n};\n\n/** Disables dates strictly before `before` (exclusive). */\nexport type CalendarDateBeforeMatcher = {\n before: Date;\n};\n\n/** Disables dates strictly after `after` (exclusive). */\nexport type CalendarDateAfterMatcher = {\n after: Date;\n};\n\n/** Disables dates strictly between `after` and `before` (exclusive endpoints). */\nexport type CalendarDateIntervalMatcher = {\n before: Date;\n after: Date;\n};\n\n/** Disables dates outside the inclusive `only` range. */\nexport type CalendarDateOnlyMatcher = {\n only: CalendarDateRangeMatcher;\n};\n\nexport type CalendarDayOfWeekMatcher = {\n dayOfWeek: Day | Day[];\n};\n\nexport type CalendarMatcherFn = (date: Date) => boolean;\n\nexport type CalendarMatcher =\n | boolean\n | Date\n | Date[]\n | CalendarDateRangeMatcher\n | CalendarDateBeforeMatcher\n | CalendarDateAfterMatcher\n | CalendarDateIntervalMatcher\n | CalendarDateOnlyMatcher\n | CalendarDayOfWeekMatcher\n | CalendarMatcherFn;\n\nfunction normalizeMatcherDate(date: Date, context: ResolvedDateFnsContext): Date {\n return startOfDay(date, context);\n}\n\nfunction isInclusiveRangeMatcher(matcher: CalendarMatcher): matcher is CalendarDateRangeMatcher {\n return (\n typeof matcher === \"object\" &&\n matcher !== null &&\n !Array.isArray(matcher) &&\n !(matcher instanceof Date) &&\n \"from\" in matcher &&\n \"to\" in matcher &&\n !(\"only\" in matcher)\n );\n}\n\nfunction isDateIntervalMatcher(matcher: CalendarMatcher): matcher is CalendarDateIntervalMatcher {\n return (\n typeof matcher === \"object\" &&\n matcher !== null &&\n !Array.isArray(matcher) &&\n !(matcher instanceof Date) &&\n \"before\" in matcher &&\n \"after\" in matcher\n );\n}\n\nfunction isDateBeforeMatcher(matcher: CalendarMatcher): matcher is CalendarDateBeforeMatcher {\n return (\n typeof matcher === \"object\" &&\n matcher !== null &&\n !Array.isArray(matcher) &&\n !(matcher instanceof Date) &&\n \"before\" in matcher &&\n !(\"after\" in matcher)\n );\n}\n\nfunction isDateAfterMatcher(matcher: CalendarMatcher): matcher is CalendarDateAfterMatcher {\n return (\n typeof matcher === \"object\" &&\n matcher !== null &&\n !Array.isArray(matcher) &&\n !(matcher instanceof Date) &&\n \"after\" in matcher &&\n !(\"before\" in matcher)\n );\n}\n\nfunction isDateOnlyMatcher(matcher: CalendarMatcher): matcher is CalendarDateOnlyMatcher {\n return (\n typeof matcher === \"object\" &&\n matcher !== null &&\n !Array.isArray(matcher) &&\n !(matcher instanceof Date) &&\n \"only\" in matcher\n );\n}\n\nfunction isDayOfWeekMatcher(matcher: CalendarMatcher): matcher is CalendarDayOfWeekMatcher {\n return (\n typeof matcher === \"object\" &&\n matcher !== null &&\n !Array.isArray(matcher) &&\n !(matcher instanceof Date) &&\n \"dayOfWeek\" in matcher\n );\n}\n\nfunction matchesInclusiveRange(\n day: Date,\n matcher: CalendarDateRangeMatcher,\n context: ResolvedDateFnsContext\n): boolean {\n const from = normalizeMatcherDate(matcher.from, context);\n const to = normalizeMatcherDate(matcher.to, context);\n\n return isWithinInterval(day, { start: from, end: to }, context);\n}\n\nfunction matchesDateOnly(\n day: Date,\n matcher: CalendarDateOnlyMatcher,\n context: ResolvedDateFnsContext\n): boolean {\n const from = normalizeMatcherDate(matcher.only.from, context);\n const to = normalizeMatcherDate(matcher.only.to, context);\n\n return isBefore(day, from) || isAfter(day, to);\n}\n\nfunction matchesDayOfWeek(day: Date, matcher: CalendarDayOfWeekMatcher): boolean {\n const days = Array.isArray(matcher.dayOfWeek) ? matcher.dayOfWeek : [matcher.dayOfWeek];\n\n return days.includes(getDay(day) as Day);\n}\n\nexport function normalizeMatchers(\n disabled?: CalendarMatcher | CalendarMatcher[]\n): CalendarMatcher[] {\n if (disabled === undefined) {\n return [];\n }\n\n return Array.isArray(disabled) ? disabled : [disabled];\n}\n\n/** Returns `true` when the date matches the matcher. */\nexport function matchesCalendarMatcher(\n date: Date,\n matcher: CalendarMatcher,\n context: ResolvedDateFnsContext\n): boolean {\n const day = normalizeMatcherDate(date, context);\n\n if (typeof matcher === \"boolean\") {\n return matcher;\n }\n\n if (matcher instanceof Date) {\n return isSameDay(day, matcher, context);\n }\n\n if (Array.isArray(matcher)) {\n return matcher.some((value) => isSameDay(day, value, context));\n }\n\n if (typeof matcher === \"function\") {\n return matcher(day);\n }\n\n if (isDateOnlyMatcher(matcher)) {\n return matchesDateOnly(day, matcher, context);\n }\n\n if (isInclusiveRangeMatcher(matcher)) {\n return matchesInclusiveRange(day, matcher, context);\n }\n\n if (isDateIntervalMatcher(matcher)) {\n const before = normalizeMatcherDate(matcher.before, context);\n const after = normalizeMatcherDate(matcher.after, context);\n\n return isAfter(day, after) && isBefore(day, before);\n }\n\n if (isDateBeforeMatcher(matcher)) {\n return isBefore(day, normalizeMatcherDate(matcher.before, context));\n }\n\n if (isDateAfterMatcher(matcher)) {\n return isAfter(day, normalizeMatcherDate(matcher.after, context));\n }\n\n if (isDayOfWeekMatcher(matcher)) {\n return matchesDayOfWeek(day, matcher);\n }\n\n return false;\n}\n\nexport function matchesAnyCalendarMatcher(\n date: Date,\n matchers: CalendarMatcher[],\n context: ResolvedDateFnsContext\n): boolean {\n return matchers.some((matcher) => matchesCalendarMatcher(date, matcher, context));\n}\n\nexport function isDateDisabledByRules(\n date: Date,\n minDate: Date | undefined,\n maxDate: Date | undefined,\n matchers: CalendarMatcher[],\n context: ResolvedDateFnsContext\n): boolean {\n const day = normalizeMatcherDate(date, context);\n\n if (minDate && isBefore(day, minDate)) {\n return true;\n }\n\n if (maxDate && isAfter(day, maxDate)) {\n return true;\n }\n\n return matchesAnyCalendarMatcher(day, matchers, context);\n}\n"],"mappings":"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","names":["isBefore","isSameDay","isWithinInterval","startOfDay","startOfDay","isSameDay","isBefore","isWithinInterval"]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@ailuracode/alpine-calendar",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.2",
|
|
4
4
|
"description": "Alpine.js calendar date logic powered by date-fns",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"license": "MIT",
|
|
@@ -54,6 +54,6 @@
|
|
|
54
54
|
],
|
|
55
55
|
"scripts": {
|
|
56
56
|
"build": "tsup src/index.ts --format esm --dts --clean --sourcemap --out-dir dist && cp src/global.d.ts dist/global.d.ts",
|
|
57
|
-
"test": "vitest run --config ../../vitest.config.
|
|
57
|
+
"test": "vitest run --config ../../vitest.config.ts test"
|
|
58
58
|
}
|
|
59
59
|
}
|