@crescender/calendar
Version:
A comprehensive TypeScript calendar library with musician-specific capabilities, architected for client/server separation.
247 lines (244 loc) • 5.42 kB
JavaScript
var __defProp = Object.defineProperty;
var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
// src/shared/utils.ts
function formatDateAustralian(date) {
const months = [
"Jan",
"Feb",
"Mar",
"Apr",
"May",
"Jun",
"Jul",
"Aug",
"Sep",
"Oct",
"Nov",
"Dec"
];
const day = date.getUTCDate().toString().padStart(2, "0");
const month = months[date.getUTCMonth()];
const year = date.getUTCFullYear();
return `${day}/${month}/${year}`;
}
__name(formatDateAustralian, "formatDateAustralian");
function getDurationMinutes(start, end) {
return Math.round((end.getTime() - start.getTime()) / (1e3 * 60));
}
__name(getDurationMinutes, "getDurationMinutes");
function isSameDay(date1, date2) {
return date1.toDateString() === date2.toDateString();
}
__name(isSameDay, "isSameDay");
function getStartOfWeek(date) {
const result = new Date(date);
const day = result.getDay();
const diff = result.getDate() - day + (day === 0 ? -6 : 1);
result.setDate(diff);
result.setHours(0, 0, 0, 0);
return result;
}
__name(getStartOfWeek, "getStartOfWeek");
function getEndOfWeek(date) {
const result = new Date(date);
const day = result.getDay();
const diff = result.getDate() - day + (day === 0 ? 0 : 7);
result.setDate(diff);
result.setHours(23, 59, 59, 999);
return result;
}
__name(getEndOfWeek, "getEndOfWeek");
function isValidEmail(email) {
const emailRegex = /^[^\s@]+@[^\s@]+\.[^\s@]+$/;
return emailRegex.test(email);
}
__name(isValidEmail, "isValidEmail");
function isValidPhone(phone) {
const phoneRegex = /^(\+61|0)[2-9]\d{8}$/;
return phoneRegex.test(phone.replace(/\s/g, ""));
}
__name(isValidPhone, "isValidPhone");
function generateTempId() {
return `temp_${Date.now()}_${Math.random().toString(36).substr(2, 9)}`;
}
__name(generateTempId, "generateTempId");
// src/shared/constants.ts
var DEFAULT_CURRENCY = "AUD";
var MAX_EVENT_DURATION_HOURS = 24;
var MAX_RECURRENCE_OCCURRENCES = 365;
var DEFAULT_EVENT_DURATION_MINUTES = 60;
var MAX_LENGTHS = {
EVENT_TITLE: 200,
EVENT_DESCRIPTION: 1e3,
CALENDAR_NAME: 100,
CALENDAR_DESCRIPTION: 500,
VENUE_NAME: 200,
VENUE_ADDRESS: 300,
VENUE_CITY: 100,
CONTACT_NAME: 200,
CONTACT_ROLE: 100,
NOTES: 1e3,
INCOME_DESCRIPTION: 200,
EXPENSE_DESCRIPTION: 200,
RECEIPT_PATH: 500
};
var DATE_FORMATS = {
AUSTRALIAN: "DD/MM/YYYY",
AMERICAN: "MM/DD/YYYY",
ISO: "YYYY-MM-DD"
};
var TIME_FORMATS = {
TWELVE_HOUR: "12h",
TWENTY_FOUR_HOUR: "24h"
};
var CALENDAR_VIEWS = {
DAY: "day",
WEEK: "week",
MONTH: "month",
LIST: "list"
};
var DEFAULT_START_OF_WEEK = 1;
var AUSTRALIAN_STATES = {
NSW: "New South Wales",
VIC: "Victoria",
QLD: "Queensland",
WA: "Western Australia",
SA: "South Australia",
TAS: "Tasmania",
ACT: "Australian Capital Territory",
NT: "Northern Territory"
};
var CURRENCIES = {
AUD: "Australian Dollar",
USD: "US Dollar",
EUR: "Euro",
GBP: "British Pound",
CAD: "Canadian Dollar",
NZD: "New Zealand Dollar"
};
var VALIDATION_PATTERNS = {
EMAIL: /^[^\s@]+@[^\s@]+\.[^\s@]+$/,
PHONE_AU: /^(\+61|0)[2-478](?:[ -]?[0-9]){8}$/,
CURRENCY_CODE: /^[A-Z]{3}$/,
HEX_COLOR: /^#[0-9A-F]{6}$/i,
URL: /^https?:\/\/.+/
};
var API_CONFIG = {
DEFAULT_PAGE_SIZE: 20,
MAX_PAGE_SIZE: 100,
REQUEST_TIMEOUT: 3e4,
RETRY_ATTEMPTS: 3
};
var FILE_UPLOAD = {
MAX_SIZE_MB: 10,
ALLOWED_TYPES: [
"image/jpeg",
"image/png",
"image/gif",
"application/pdf"
],
ALLOWED_EXTENSIONS: [
".jpg",
".jpeg",
".png",
".gif",
".pdf"
]
};
// src/shared/enums.ts
var EVENT_TYPES = {
GIG: "gig",
LESSON: "lesson",
AUDITION: "audition",
PRACTICE: "practice",
REHEARSAL: "rehearsal",
RECORDING: "recording",
MEETING: "meeting"
};
var PAYMENT_STATUS = {
PENDING: "Pending",
PAID: "Paid",
OVERDUE: "Overdue",
CANCELLED: "Cancelled"
};
var EVENT_STATUS = {
CONFIRMED: "Confirmed",
TENTATIVE: "Tentative",
CANCELLED: "Cancelled",
COMPLETED: "Completed"
};
var CALENDAR_TYPES = {
INDIVIDUAL: "individual",
GROUP: "group",
SHARED: "shared"
};
var STUDENT_LEVELS = {
BEGINNER: "Beginner",
INTERMEDIATE: "Intermediate",
ADVANCED: "Advanced",
PROFESSIONAL: "Professional"
};
var DIFFICULTY_LEVELS = {
EASY: "Easy",
MEDIUM: "Medium",
HARD: "Hard",
EXPERT: "Expert"
};
var GENRES = {
CLASSICAL: "Classical",
JAZZ: "Jazz",
ROCK: "Rock",
POP: "Pop",
BLUES: "Blues",
COUNTRY: "Country",
FOLK: "Folk",
ELECTRONIC: "Electronic",
WORLD: "World Music",
OTHER: "Other"
};
var INSTRUMENTS = {
PIANO: "Piano",
GUITAR: "Guitar",
VIOLIN: "Violin",
DRUMS: "Drums",
BASS: "Bass",
SAXOPHONE: "Saxophone",
TRUMPET: "Trumpet",
FLUTE: "Flute",
CELLO: "Cello",
VOICE: "Voice",
OTHER: "Other"
};
export {
API_CONFIG,
AUSTRALIAN_STATES,
CALENDAR_TYPES,
CALENDAR_VIEWS,
CURRENCIES,
DATE_FORMATS,
DEFAULT_CURRENCY,
DEFAULT_EVENT_DURATION_MINUTES,
DEFAULT_START_OF_WEEK,
DIFFICULTY_LEVELS,
EVENT_STATUS,
EVENT_TYPES,
FILE_UPLOAD,
GENRES,
INSTRUMENTS,
MAX_EVENT_DURATION_HOURS,
MAX_LENGTHS,
MAX_RECURRENCE_OCCURRENCES,
PAYMENT_STATUS,
STUDENT_LEVELS,
TIME_FORMATS,
VALIDATION_PATTERNS,
formatDateAustralian,
generateTempId,
getDurationMinutes,
getEndOfWeek,
getStartOfWeek,
isSameDay,
isValidEmail,
isValidPhone
};
//# sourceMappingURL=index.mjs.map