aura-glass
Version:
A comprehensive glassmorphism design system for React applications with 142+ production-ready components
242 lines (240 loc) • 6.85 kB
JavaScript
/**
* Date Adapters
* Provides adapters for different date libraries (date-fns, dayjs, luxon, etc.)
*/
/**
* Create date-fns adapter
* Requires date-fns to be installed: npm install date-fns
*/
const createDateFnsAdapter = () => {
let dateFns;
try {
// Dynamic import to avoid bundling if not used
dateFns = require('date-fns');
} catch (e) {
throw new Error('date-fns is not installed. Please install it: npm install date-fns');
}
return {
format: (date, formatStr) => {
const dateObj = typeof date === 'string' ? new Date(date) : date;
return dateFns.format(dateObj, formatStr);
},
parse: (dateStr, formatStr) => {
return dateFns.parse(dateStr, formatStr, new Date());
},
isValid: date => {
return dateFns.isValid(new Date(date));
},
addDays: (date, days) => {
return dateFns.addDays(date, days);
},
addMonths: (date, months) => {
return dateFns.addMonths(date, months);
},
addYears: (date, years) => {
return dateFns.addYears(date, years);
},
startOfDay: date => {
return dateFns.startOfDay(date);
},
startOfWeek: date => {
return dateFns.startOfWeek(date);
},
startOfMonth: date => {
return dateFns.startOfMonth(date);
},
startOfYear: date => {
return dateFns.startOfYear(date);
},
endOfDay: date => {
return dateFns.endOfDay(date);
},
endOfWeek: date => {
return dateFns.endOfWeek(date);
},
endOfMonth: date => {
return dateFns.endOfMonth(date);
},
endOfYear: date => {
return dateFns.endOfYear(date);
},
isBefore: (date, dateToCompare) => {
return dateFns.isBefore(date, dateToCompare);
},
isAfter: (date, dateToCompare) => {
return dateFns.isAfter(date, dateToCompare);
},
isSameDay: (date, dateToCompare) => {
return dateFns.isSameDay(date, dateToCompare);
},
getDaysInMonth: date => {
return dateFns.getDaysInMonth(date);
}
};
};
/**
* Create Day.js adapter
* Requires dayjs to be installed: npm install dayjs
*/
const createDayJsAdapter = () => {
let dayjs;
try {
dayjs = require('dayjs');
} catch (e) {
throw new Error('dayjs is not installed. Please install it: npm install dayjs');
}
return {
format: (date, formatStr) => {
return dayjs(date).format(formatStr);
},
parse: (dateStr, formatStr) => {
return dayjs(dateStr, formatStr).toDate();
},
isValid: date => {
return dayjs(date).isValid();
},
addDays: (date, days) => {
return dayjs(date).add(days, 'day').toDate();
},
addMonths: (date, months) => {
return dayjs(date).add(months, 'month').toDate();
},
addYears: (date, years) => {
return dayjs(date).add(years, 'year').toDate();
},
startOfDay: date => {
return dayjs(date).startOf('day').toDate();
},
startOfWeek: date => {
return dayjs(date).startOf('week').toDate();
},
startOfMonth: date => {
return dayjs(date).startOf('month').toDate();
},
startOfYear: date => {
return dayjs(date).startOf('year').toDate();
},
endOfDay: date => {
return dayjs(date).endOf('day').toDate();
},
endOfWeek: date => {
return dayjs(date).endOf('week').toDate();
},
endOfMonth: date => {
return dayjs(date).endOf('month').toDate();
},
endOfYear: date => {
return dayjs(date).endOf('year').toDate();
},
isBefore: (date, dateToCompare) => {
return dayjs(date).isBefore(dayjs(dateToCompare));
},
isAfter: (date, dateToCompare) => {
return dayjs(date).isAfter(dayjs(dateToCompare));
},
isSameDay: (date, dateToCompare) => {
return dayjs(date).isSame(dayjs(dateToCompare), 'day');
},
getDaysInMonth: date => {
return dayjs(date).daysInMonth();
}
};
};
/**
* Create native Date adapter (no dependencies)
*/
const createNativeDateAdapter = () => {
return {
format: (date, formatStr) => {
const dateObj = new Date(date);
// Simple format implementation
return dateObj.toLocaleDateString();
},
parse: (dateStr, formatStr) => {
return new Date(dateStr);
},
isValid: date => {
const d = new Date(date);
return d instanceof Date && !isNaN(d.getTime());
},
addDays: (date, days) => {
const result = new Date(date);
result.setDate(result.getDate() + days);
return result;
},
addMonths: (date, months) => {
const result = new Date(date);
result.setMonth(result.getMonth() + months);
return result;
},
addYears: (date, years) => {
const result = new Date(date);
result.setFullYear(result.getFullYear() + years);
return result;
},
startOfDay: date => {
const result = new Date(date);
result.setHours(0, 0, 0, 0);
return result;
},
startOfWeek: date => {
const result = new Date(date);
const day = result.getDay();
const diff = result.getDate() - day;
result.setDate(diff);
result.setHours(0, 0, 0, 0);
return result;
},
startOfMonth: date => {
const result = new Date(date);
result.setDate(1);
result.setHours(0, 0, 0, 0);
return result;
},
startOfYear: date => {
const result = new Date(date);
result.setMonth(0, 1);
result.setHours(0, 0, 0, 0);
return result;
},
endOfDay: date => {
const result = new Date(date);
result.setHours(23, 59, 59, 999);
return result;
},
endOfWeek: date => {
const result = new Date(date);
const day = result.getDay();
const diff = 6 - day;
result.setDate(result.getDate() + diff);
result.setHours(23, 59, 59, 999);
return result;
},
endOfMonth: date => {
const result = new Date(date);
result.setMonth(result.getMonth() + 1, 0);
result.setHours(23, 59, 59, 999);
return result;
},
endOfYear: date => {
const result = new Date(date);
result.setMonth(11, 31);
result.setHours(23, 59, 59, 999);
return result;
},
isBefore: (date, dateToCompare) => {
return date.getTime() < dateToCompare.getTime();
},
isAfter: (date, dateToCompare) => {
return date.getTime() > dateToCompare.getTime();
},
isSameDay: (date, dateToCompare) => {
return date.getFullYear() === dateToCompare.getFullYear() && date.getMonth() === dateToCompare.getMonth() && date.getDate() === dateToCompare.getDate();
},
getDaysInMonth: date => {
return new Date(date.getFullYear(), date.getMonth() + 1, 0).getDate();
}
};
};
export { createDateFnsAdapter, createDayJsAdapter, createNativeDateAdapter };
//# sourceMappingURL=dateAdapters.js.map