UNPKG

@crescender/calendar

Version:

A comprehensive TypeScript calendar library with musician-specific capabilities, architected for client/server separation.

301 lines (297 loc) 7.62 kB
"use strict"; var __defProp = Object.defineProperty; var __getOwnPropDesc = Object.getOwnPropertyDescriptor; var __getOwnPropNames = Object.getOwnPropertyNames; var __hasOwnProp = Object.prototype.hasOwnProperty; var __name = (target, value) => __defProp(target, "name", { value, configurable: true }); var __export = (target, all) => { for (var name in all) __defProp(target, name, { get: all[name], enumerable: true }); }; var __copyProps = (to, from, except, desc) => { if (from && typeof from === "object" || typeof from === "function") { for (let key of __getOwnPropNames(from)) if (!__hasOwnProp.call(to, key) && key !== except) __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); } return to; }; var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); // src/index.ts var src_exports = {}; __export(src_exports, { API_CONFIG: () => API_CONFIG, AUSTRALIAN_STATES: () => AUSTRALIAN_STATES, CALENDAR_TYPES: () => CALENDAR_TYPES, CALENDAR_VIEWS: () => CALENDAR_VIEWS, CURRENCIES: () => CURRENCIES, DATE_FORMATS: () => DATE_FORMATS, DEFAULT_CURRENCY: () => DEFAULT_CURRENCY, DEFAULT_EVENT_DURATION_MINUTES: () => DEFAULT_EVENT_DURATION_MINUTES, DEFAULT_START_OF_WEEK: () => DEFAULT_START_OF_WEEK, DIFFICULTY_LEVELS: () => DIFFICULTY_LEVELS, EVENT_STATUS: () => EVENT_STATUS, EVENT_TYPES: () => EVENT_TYPES, FILE_UPLOAD: () => FILE_UPLOAD, GENRES: () => GENRES, INSTRUMENTS: () => INSTRUMENTS, MAX_EVENT_DURATION_HOURS: () => MAX_EVENT_DURATION_HOURS, MAX_LENGTHS: () => MAX_LENGTHS, MAX_RECURRENCE_OCCURRENCES: () => MAX_RECURRENCE_OCCURRENCES, PAYMENT_STATUS: () => PAYMENT_STATUS, STUDENT_LEVELS: () => STUDENT_LEVELS, TIME_FORMATS: () => TIME_FORMATS, VALIDATION_PATTERNS: () => VALIDATION_PATTERNS, formatDateAustralian: () => formatDateAustralian, generateTempId: () => generateTempId, getDurationMinutes: () => getDurationMinutes, getEndOfWeek: () => getEndOfWeek, getStartOfWeek: () => getStartOfWeek, isSameDay: () => isSameDay, isValidEmail: () => isValidEmail, isValidPhone: () => isValidPhone }); module.exports = __toCommonJS(src_exports); // 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" }; // Annotate the CommonJS export names for ESM import in node: 0 && (module.exports = { 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.js.map