To use a specific date library (like Moment.js, Luxon, or native JS Date) with the picker, you must extend the DateTimeAdapter<T> abstract class. You need to implement methods for extracting date components (year, month, day, etc.), performing arithmetic (addCalendarDays, etc.), and formatting/parsing.
// Abstract signature of the class you must extend
export abstract class DateTimeAdapter<T> {
// ... abstract methods to implement ...
abstract getYear(date: T): number;
abstract getMonth(date: T): number;
abstract getDay(date: T): number;
abstract getDate(date: T): number;
abstract getHours(date: T): number;
abstract getMinutes(date: T): number;
abstract getSeconds(date: T): number;
abstract getTime(date: T): number;
abstract getNumDaysInMonth(date: T): number;
abstract differenceInCalendarDays(dateLeft: T, dateRight: T): number;
abstract getYearName(date: T): string;
abstract getMonthNames(style: 'long' | 'short' | 'narrow'): string[];
abstract getDayOfWeekNames(style: 'long' | 'short' | 'narrow'): string[];
abstract getDateNames(): string[];
abstract toIso8601(date: T): string;
abstract isEqual(dateLeft: T, dateRight: T): boolean;
abstract isSameDay(dateLeft: T, dateRight: T): boolean;
abstract isValid(date: T): boolean;
abstract invalid(): T;
abstract isDateInstance(obj: any): boolean;
abstract addCalendarYears(date: T, amount: number): T;
abstract addCalendarMonths(date: T, amount: number): T;
abstract addCalendarDays(date: T, amount: number): T;
abstract setHours(date: T, amount: number): T;
abstract setMinutes(date: T, amount: number): T;
abstract setSeconds(date: T, amount: number): T;
abstract createDate(year: number, month: number, date: number): T;
abstract createDate(year: number, month: number, date: number, hours: number, minutes: number, seconds: number): T;
abstract clone(date: T): T;
abstract now(): T;
abstract format(date: T, displayFormat: any): string;
abstract parse(value: any, parseFormat: any): T | null;
}