mglon-schedule 0.0.4

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.
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mglon-schedule.mjs","sources":["../../../projects/mglon-schedule/src/lib/features/resource/resource-view/resource-view.ts","../../../projects/mglon-schedule/src/lib/features/resource/resource-view/resource-view.html","../../../projects/mglon-schedule/src/lib/core/models/event.model.ts","../../../projects/mglon-schedule/src/lib/shared/helpers/calendar.helpers.ts","../../../projects/mglon-schedule/src/lib/shared/helpers/color.helpers.ts","../../../projects/mglon-schedule/src/lib/features/week/week-header/week-header.ts","../../../projects/mglon-schedule/src/lib/features/week/week-header/week-header.html","../../../projects/mglon-schedule/src/lib/features/week/time-slot/time-slot.ts","../../../projects/mglon-schedule/src/lib/features/week/time-slot/time-slot.html","../../../projects/mglon-schedule/src/lib/core/background-selection/selection/selection.ts","../../../projects/mglon-schedule/src/lib/core/background-selection/selection/selection.html","../../../projects/mglon-schedule/src/lib/core/config/default-schedule-config.ts","../../../projects/mglon-schedule/src/lib/core/models/ui-config.ts","../../../projects/mglon-schedule/src/lib/core/store/calendar.store.ts","../../../projects/mglon-schedule/src/lib/core/background-selection/selectable/selectable.abstract.ts","../../../projects/mglon-schedule/src/lib/core/background-selection/selectable/selectable.directive.ts","../../../projects/mglon-schedule/src/lib/features/week/week-grid/week-grid.ts","../../../projects/mglon-schedule/src/lib/features/week/week-grid/week-grid.html","../../../projects/mglon-schedule/src/lib/features/week/week-view/week-view.ts","../../../projects/mglon-schedule/src/lib/features/week/week-view/week-view.html","../../../projects/mglon-schedule/src/lib/shared/components/icon/icon-set.ts","../../../projects/mglon-schedule/src/lib/shared/components/icon/icon.ts","../../../projects/mglon-schedule/src/lib/shared/components/buttons/button/button.ts","../../../projects/mglon-schedule/src/lib/shared/components/buttons/icon-button/icon-button.ts","../../../projects/mglon-schedule/src/lib/shared/components/buttons/button-group/button-group.ts","../../../projects/mglon-schedule/src/lib/shared/components/buttons/button-group/button-group.html","../../../projects/mglon-schedule/src/lib/features/schedule/header-schedule/header-schedule.ts","../../../projects/mglon-schedule/src/lib/features/schedule/header-schedule/header-schedule.html","../../../projects/mglon-schedule/src/lib/features/month/month-header/month-header.ts","../../../projects/mglon-schedule/src/lib/features/month/month-header/month-header.html","../../../projects/mglon-schedule/src/lib/features/month/month-day-indicator/month-day-indicator.ts","../../../projects/mglon-schedule/src/lib/features/month/month-day-indicator/month-day-indicator.html","../../../projects/mglon-schedule/src/lib/features/month/month-cell/month-cell.ts","../../../projects/mglon-schedule/src/lib/features/month/month-cell/month-cell.html","../../../projects/mglon-schedule/src/lib/shared/directives/zigzag.directive.ts","../../../projects/mglon-schedule/src/lib/shared/directives/resizable.directive.ts","../../../projects/mglon-schedule/src/lib/features/month/directives/month-recurrence.directive.ts","../../../projects/mglon-schedule/src/lib/features/month/directives/all-day.directive.ts","../../../projects/mglon-schedule/src/lib/features/month/month-slot/month-slot.ts","../../../projects/mglon-schedule/src/lib/features/month/month-slot/month-slot.html","../../../projects/mglon-schedule/src/lib/features/month/month-week-events-container/month-week-events-container.ts","../../../projects/mglon-schedule/src/lib/features/month/month-week-events-container/month-week-events-container.html","../../../projects/mglon-schedule/src/lib/core/adapters/event-renderer.adapter.ts","../../../projects/mglon-schedule/src/lib/core/rendering/slicers/month/slot-config.ts","../../../projects/mglon-schedule/src/lib/core/rendering/slicers/month/event-date-range.ts","../../../projects/mglon-schedule/src/lib/core/rendering/slicers/month/slot-type.ts","../../../projects/mglon-schedule/src/lib/core/rendering/slicers/month/slot-positioning.ts","../../../projects/mglon-schedule/src/lib/core/rendering/slicers/month/month-event-slicer.ts","../../../projects/mglon-schedule/src/lib/core/rendering/slicers/month/slot-visibility.ts","../../../projects/mglon-schedule/src/lib/core/rendering/slicers/month/index.ts","../../../projects/mglon-schedule/src/lib/features/month/month-week/month-week.ts","../../../projects/mglon-schedule/src/lib/features/month/month-week/month-week.html","../../../projects/mglon-schedule/src/lib/shared/directives/resize-observer.directive.ts","../../../projects/mglon-schedule/src/lib/features/month/month-grid/month-grid.ts","../../../projects/mglon-schedule/src/lib/features/month/month-grid/month-grid.html","../../../projects/mglon-schedule/src/lib/features/month/month-view/month-view.ts","../../../projects/mglon-schedule/src/lib/features/month/month-view/month-view.html","../../../projects/mglon-schedule/src/lib/shared/components/avatar/avatar.ts","../../../projects/mglon-schedule/src/lib/shared/components/avatar/avatar.html","../../../projects/mglon-schedule/src/lib/features/schedule/resource-item-schedule/resource-item-schedule.ts","../../../projects/mglon-schedule/src/lib/features/schedule/resource-item-schedule/resource-item-schedule.html","../../../projects/mglon-schedule/src/lib/features/schedule/resource-list-schedule/resource-list-schedule.ts","../../../projects/mglon-schedule/src/lib/features/schedule/resource-list-schedule/resource-list-schedule.html","../../../projects/mglon-schedule/src/lib/features/schedule/sidebar-schedule/sidebar-schedule.ts","../../../projects/mglon-schedule/src/lib/features/schedule/sidebar-schedule/sidebar-schedule.html","../../../projects/mglon-schedule/src/lib/features/schedule/schedule/schedule.ts","../../../projects/mglon-schedule/src/lib/features/schedule/schedule/schedule.html","../../../projects/mglon-schedule/src/lib/features/resource-events/resource-events.ts","../../../projects/mglon-schedule/src/lib/features/event/event/event.ts","../../../projects/mglon-schedule/src/lib/shared/helpers/recurrent-events.helpers.ts","../../../projects/mglon-schedule/src/lib/features/event/recurrent-event/recurrent-event.ts","../../../projects/mglon-schedule/src/lib/shared/components/buttons/fab-button/fab-button.ts","../../../projects/mglon-schedule/src/public-api.ts","../../../projects/mglon-schedule/src/mglon-schedule.ts"],"sourcesContent":["import { Component } from '@angular/core';\n\n@Component({\n selector: 'mglon-resource-view',\n imports: [],\n templateUrl: './resource-view.html',\n styleUrl: './resource-view.scss',\n})\nexport class ResourceView {\n\n}\n","<div class=\"ngx-cal-resource-view\">\n <!-- Header: Time/Dates (Sticky Top) -->\n <div class=\"ngx-cal-resource-view__header\">\n <div class=\"ngx-cal-resource-view__corner\"></div> <!-- Empty corner above sidebar -->\n <div class=\"ngx-cal-resource-view__time-track\">\n <!-- Mock items for now -->\n <div class=\"ngx-cal-resource-view__time-cell\">08:00</div>\n <div class=\"ngx-cal-resource-view__time-cell\">09:00</div>\n <div class=\"ngx-cal-resource-view__time-cell\">10:00</div>\n <div class=\"ngx-cal-resource-view__time-cell\">11:00</div>\n <div class=\"ngx-cal-resource-view__time-cell\">12:00</div>\n <div class=\"ngx-cal-resource-view__time-cell\">13:00</div>\n <div class=\"ngx-cal-resource-view__time-cell\">14:00</div>\n </div>\n </div>\n\n <!-- Body: Sidebar + Grid -->\n <div class=\"ngx-cal-resource-view__body\">\n <!-- Sidebar: Resources (Sticky Left) -->\n <div class=\"ngx-cal-resource-view__sidebar\">\n <div class=\"ngx-cal-resource-view__resource-cell\">Resource A</div>\n <div class=\"ngx-cal-resource-view__resource-cell\">Resource B</div>\n <div class=\"ngx-cal-resource-view__resource-cell\">Resource C</div>\n <div class=\"ngx-cal-resource-view__resource-cell\">Resource D</div>\n <div class=\"ngx-cal-resource-view__resource-cell\">Resource E</div>\n </div>\n\n <!-- Main Grid -->\n <div class=\"ngx-cal-resource-view__grid\">\n <!-- Rows corresponding to resources -->\n <div class=\"ngx-cal-resource-view__row\">\n <div class=\"ngx-cal-resource-view__cell\"></div>\n <div class=\"ngx-cal-resource-view__cell\"></div>\n <div class=\"ngx-cal-resource-view__cell\"></div>\n <div class=\"ngx-cal-resource-view__cell\"></div>\n <div class=\"ngx-cal-resource-view__cell\"></div>\n <div class=\"ngx-cal-resource-view__cell\"></div>\n <div class=\"ngx-cal-resource-view__cell\"></div>\n </div>\n <div class=\"ngx-cal-resource-view__row\">\n <div class=\"ngx-cal-resource-view__cell\"></div>\n <div class=\"ngx-cal-resource-view__cell\"></div>\n <div class=\"ngx-cal-resource-view__cell\"></div>\n <div class=\"ngx-cal-resource-view__cell\"></div>\n <div class=\"ngx-cal-resource-view__cell\"></div>\n <div class=\"ngx-cal-resource-view__cell\"></div>\n <div class=\"ngx-cal-resource-view__cell\"></div>\n </div>\n <div class=\"ngx-cal-resource-view__row\">\n <div class=\"ngx-cal-resource-view__cell\"></div>\n <div class=\"ngx-cal-resource-view__cell\"></div>\n <div class=\"ngx-cal-resource-view__cell\"></div>\n <div class=\"ngx-cal-resource-view__cell\"></div>\n <div class=\"ngx-cal-resource-view__cell\"></div>\n <div class=\"ngx-cal-resource-view__cell\"></div>\n <div class=\"ngx-cal-resource-view__cell\"></div>\n </div>\n <div class=\"ngx-cal-resource-view__row\">\n <div class=\"ngx-cal-resource-view__cell\"></div>\n <div class=\"ngx-cal-resource-view__cell\"></div>\n <div class=\"ngx-cal-resource-view__cell\"></div>\n <div class=\"ngx-cal-resource-view__cell\"></div>\n <div class=\"ngx-cal-resource-view__cell\"></div>\n <div class=\"ngx-cal-resource-view__cell\"></div>\n <div class=\"ngx-cal-resource-view__cell\"></div>\n </div>\n <div class=\"ngx-cal-resource-view__row\">\n <div class=\"ngx-cal-resource-view__cell\"></div>\n <div class=\"ngx-cal-resource-view__cell\"></div>\n <div class=\"ngx-cal-resource-view__cell\"></div>\n <div class=\"ngx-cal-resource-view__cell\"></div>\n <div class=\"ngx-cal-resource-view__cell\"></div>\n <div class=\"ngx-cal-resource-view__cell\"></div>\n <div class=\"ngx-cal-resource-view__cell\"></div>\n </div>\n </div>\n </div>\n</div>","/**\n * Base interface for all event types in the scheduler.\n * Provides common properties shared across all event variations.\n */\nexport interface EventBase {\n /** Unique identifier for the event */\n id: string;\n\n /** Foreign key: ID of the resource this event belongs to (optional) */\n resourceId?: string;\n\n /** Display title of the event */\n title: string;\n\n /** Additional description or notes for the event */\n description?: string;\n\n /** Tags for filtering and styling */\n tags?: string[];\n\n /** Event color (overrides resource color if set) */\n color?: string;\n\n /** If true, the event cannot be edited */\n isReadOnly?: boolean;\n\n /** If true, the event is visually blocked (e.g., maintenance) */\n isBlocked?: boolean;\n\n /** If true, the event lasts the whole day or multiple days (minimalist design) */\n isAllDay?: boolean;\n\n /** Flexible user-defined data */\n metadata?: any;\n}\n\n/**\n * Interface for regular time-based events\n */\nexport interface Event extends EventBase {\n /** Start date and time of the event */\n start: Date;\n\n /** End date and time of the event */\n end: Date;\n\n /** Event type discriminator */\n type: 'event';\n\n /** If true, this is an instance generated from a RecurrentEventModel */\n isRecurrenceInstance?: boolean;\n\n /** ID of the parent RecurrentEventModel */\n parentRecurrenceId?: string;\n\n /** Original date of occurrence from the recurrence rule */\n recurrenceDate?: Date;\n}\n\n/**\n * Interface for all-day events\n */\nexport interface AllDayEvent extends EventBase {\n /** \n * Date for the all-day event\n * For multi-day events, this represents the start date\n */\n date: Date;\n\n /**\n * Optional end date for multi-day all-day events\n * If not provided, the event is a single-day event\n */\n endDate?: Date;\n\n /** Event type discriminator */\n type: 'all-day';\n}\n\n/**\n * Recurrence types supported by the scheduler\n */\nexport type RecurrenceType = 'daily' | 'weekly' | 'monthly' | 'yearly';\n\n/**\n * Days of the week for recurrence rules\n */\nexport type DayOfWeek = 'Sun' | 'Mon' | 'Tue' | 'Wed' | 'Thu' | 'Fri' | 'Sat';\n\n/**\n * Recurrence rule configuration compatible with RFC 5545 (iCalendar)\n * \n * @example\n * // Every Monday for 10 weeks\n * { type: 'weekly', interval: 1, byDay: ['Mon'], count: 10 }\n * \n * // Last Friday of each month until end of year\n * { type: 'monthly', interval: 1, byDay: ['Fri'], bySetPos: [-1], until: new Date('2025-12-31') }\n * \n * @important At least one of `count` or `until` must be defined to prevent infinite recurrences\n * @important `count` and `until` are mutually exclusive - only one should be set\n */\nexport interface RecurrenceRule {\n /** Type of recurrence pattern */\n type: RecurrenceType;\n\n /** \n * Interval between occurrences (e.g., 2 = every 2 days/weeks)\n * @minimum 1\n * @default 1\n */\n interval: number;\n\n /** \n * Number of occurrences before stopping\n * Mutually exclusive with `until` - only one should be defined\n * @minimum 1\n * @example 10 // Event repeats 10 times\n */\n count?: number;\n\n /** \n * End date for the recurrence pattern\n * Mutually exclusive with `count` - only one should be defined\n * @example new Date('2025-12-31') // Event repeats until Dec 31, 2025\n */\n until?: Date;\n\n /** \n * Days of the week for weekly/monthly recurrence\n * @example ['Mon', 'Wed', 'Fri'] // Every Monday, Wednesday, and Friday\n */\n byDay?: DayOfWeek[];\n\n /** \n * Months for yearly recurrence (1-12)\n * @example [1, 6, 12] // January, June, and December\n */\n byMonth?: number[];\n\n /** \n * Days of the month for monthly recurrence (1-31, or negative for end of month)\n * @example [1, 15] // 1st and 15th of each month\n * @example [-1] // Last day of the month\n */\n byMonthDay?: number[];\n\n /** \n * Position in the set (positive or negative)\n * Used with byDay to specify nth occurrence\n * @example [-1] // Last occurrence (e.g., last Friday of month)\n * @example [1, 3] // First and third occurrence\n */\n bySetPos?: number[];\n\n /** \n * First day of the week for weekly recurrences\n * Affects calculations when using bySetPos with weekly patterns\n * @default 'Mon'\n * @example 'Sun' // Week starts on Sunday\n */\n weekStart?: DayOfWeek;\n\n /** \n * Hours of the day for the recurrence (0-23)\n * Advanced: For events that repeat multiple times per day\n * @example [9, 14, 18] // 9am, 2pm, and 6pm each day\n */\n byHour?: number[];\n\n /** \n * Minutes of the hour for the recurrence (0-59)\n * Advanced: For precise timing control\n * @example [0, 30] // On the hour and half-hour\n */\n byMinute?: number[];\n}\n\n/**\n * Interface for recurring events\n */\nexport interface RecurrentEventModel extends EventBase {\n /** Start date and time of the first occurrence */\n start: Date;\n\n /** End date and time of the first occurrence */\n end: Date;\n\n /** Recurrence rule defining the pattern */\n recurrenceRule: RecurrenceRule;\n\n /** Specific dates to exclude from the recurrence pattern */\n recurrenceExceptions?: Date[];\n\n /** Event type discriminator */\n type: 'recurrent';\n}\n\n/**\n * Union type representing any event type\n */\nexport type AnyEvent = Event | AllDayEvent | RecurrentEventModel;\n\n/**\n * Type guard to check if an event is a regular Event\n */\nexport function isEvent(event: AnyEvent): event is Event {\n return event.type === 'event';\n}\n\n/**\n * Type guard to check if an event is an AllDayEvent\n */\nexport function isAllDayEvent(event: AnyEvent): event is AllDayEvent {\n return event.type === 'all-day';\n}\n\n/**\n * Type guard to check if an event is a RecurrentEvent\n */\nexport function isRecurrentEvent(event: AnyEvent): event is RecurrentEventModel {\n return event.type === 'recurrent';\n}","import {\n startOfMonth,\n endOfMonth,\n startOfWeek,\n endOfWeek,\n eachDayOfInterval,\n isSameMonth,\n areIntervalsOverlapping,\n startOfDay,\n endOfDay\n} from 'date-fns';\nimport { ViewMode } from '../../core/models/config-schedule';\nimport { AnyEvent, isAllDayEvent, isEvent, isRecurrentEvent } from '../../core/models/event.model';\nimport { DateRange } from '../../core/models/date-range.model';\n\n// ============================================================================\n// MONTH VIEW - Interfaces & Functions\n// ============================================================================\n\n/** Represents a single day cell in the month grid */\nexport interface CalendarDay {\n date: Date;\n day: number;\n isCurrentMonth: boolean;\n isPreviousMonth: boolean;\n isNextMonth: boolean;\n}\n\n/** Represents a week row in the month grid */\nexport interface CalendarWeek {\n days: CalendarDay[];\n}\n\n/**\n * Generates a complete month calendar grid with padding days from adjacent months.\n * Always starts on Sunday and includes complete weeks (5-6 weeks total).\n *\n * @example\n * getMonthCalendarGrid(new Date(2024, 0, 15)) // January 2024\n * // Returns 5 weeks: Dec 31, 2023 → Feb 3, 2024\n */\nexport function getMonthCalendarGrid(date: Date): CalendarWeek[] {\n const monthStart = startOfMonth(date);\n const monthEnd = endOfMonth(date);\n const calendarStart = startOfWeek(monthStart, { weekStartsOn: 0 });\n const calendarEnd = endOfWeek(monthEnd, { weekStartsOn: 0 });\n\n const allDays = eachDayOfInterval({ start: calendarStart, end: calendarEnd });\n\n const calendarDays: CalendarDay[] = allDays.map(day => ({\n date: day,\n day: day.getDate(),\n isCurrentMonth: isSameMonth(day, date),\n isPreviousMonth: day < monthStart,\n isNextMonth: day > monthEnd,\n }));\n\n const weeks: CalendarWeek[] = [];\n for (let i = 0; i < calendarDays.length; i += 7) {\n weeks.push({ days: calendarDays.slice(i, i + 7) });\n }\n\n return weeks;\n}\n\n// ============================================================================\n// WEEK VIEW - Interfaces & Functions\n// ============================================================================\n\nconst DAY_NAMES = ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'] as const;\n\n/** Represents a single day in the week view header */\nexport interface WeekDay {\n date: Date;\n dayOfWeek: number; // 0-6 (Sunday-Saturday)\n dayName: string; // 'Sun', 'Mon', etc.\n dayNumber: number; // 1-31\n isToday: boolean;\n}\n\n/** Represents a 30-minute time slot in the week/day grid */\nexport interface TimeSlot {\n date: Date;\n hour: number; // 0-23\n minute: number; // 0 or 30\n dayOfWeek: number; // 0-6 (Sunday-Saturday)\n isToday: boolean;\n timeLabel: string; // \"09:00\", \"09:30\"\n}\n\n/**\n * Generates the 7 days of the week containing the given date.\n * Week starts on Sunday.\n *\n * @example\n * getWeekDays(new Date(2024, 0, 15)) // Monday, Jan 15\n * // Returns: Sun Jan 14 → Sat Jan 20\n */\nexport function getWeekDays(date: Date): WeekDay[] {\n const weekStart = startOfWeek(date, { weekStartsOn: 0 });\n const weekEnd = endOfWeek(date, { weekStartsOn: 0 });\n const days = eachDayOfInterval({ start: weekStart, end: weekEnd });\n\n const today = new Date();\n today.setHours(0, 0, 0, 0);\n\n return days.map(day => {\n const dayDate = new Date(day);\n dayDate.setHours(0, 0, 0, 0);\n\n return {\n date: dayDate,\n dayOfWeek: day.getDay(),\n dayName: DAY_NAMES[day.getDay()],\n dayNumber: day.getDate(),\n isToday: dayDate.getTime() === today.getTime()\n };\n });\n}\n\n/**\n * Generates a 2D matrix of time slots for a week.\n * Each day contains 48 slots (24h × 2 = 30-minute intervals).\n *\n * @returns TimeSlot[7 days][48 slots per day]\n */\nexport function getWeekTimeSlots(date: Date): TimeSlot[][] {\n const weekDays = getWeekDays(date);\n const today = new Date();\n today.setHours(0, 0, 0, 0);\n\n return weekDays.map(weekDay => {\n const slots: TimeSlot[] = [];\n\n for (let hour = 0; hour < 24; hour++) {\n for (let minute = 0; minute < 60; minute += 30) {\n const slotDate = new Date(weekDay.date);\n slotDate.setHours(hour, minute, 0, 0);\n\n slots.push({\n date: slotDate,\n hour,\n minute,\n dayOfWeek: weekDay.dayOfWeek,\n isToday: weekDay.isToday,\n timeLabel: `${hour.toString().padStart(2, '0')}:${minute.toString().padStart(2, '0')}`\n });\n }\n }\n\n return slots;\n });\n}\n\n// ============================================================================\n// VIEW RANGE - Functions for calculating visible date ranges\n// ============================================================================\n\n/**\n * Calculates the visible date range based on view mode.\n * Used to filter which events should be displayed.\n */\nexport function getViewRange(date: Date, viewMode: ViewMode): DateRange {\n const normalizedDate = new Date(date);\n normalizedDate.setHours(0, 0, 0, 0);\n\n switch (viewMode) {\n case 'month': {\n const monthStart = startOfMonth(normalizedDate);\n const monthEnd = endOfMonth(normalizedDate);\n return {\n start: startOfWeek(monthStart, { weekStartsOn: 0 }),\n end: endOfWeek(monthEnd, { weekStartsOn: 0 })\n };\n }\n\n case 'week': {\n return {\n start: startOfWeek(normalizedDate, { weekStartsOn: 0 }),\n end: endOfWeek(normalizedDate, { weekStartsOn: 0 })\n };\n }\n\n case 'day':\n case 'resource': {\n const endOfDay = new Date(normalizedDate);\n endOfDay.setHours(23, 59, 59, 999);\n return { start: normalizedDate, end: endOfDay };\n }\n\n case 'list': {\n return {\n start: startOfMonth(normalizedDate),\n end: endOfMonth(normalizedDate)\n };\n }\n\n default:\n return { start: normalizedDate, end: normalizedDate };\n }\n}\n\n// ============================================================================\n// EVENT FILTERING - Functions to check event visibility\n// ============================================================================\n\n/**\n * Checks if an event overlaps with a given date range.\n * Handles standard events, all-day events, and recurrent events.\n */\nexport function isEventInRange(event: AnyEvent, range: DateRange): boolean {\n if (isEvent(event) || isRecurrentEvent(event)) {\n return event.start <= range.end && event.end >= range.start;\n }\n\n if (isAllDayEvent(event)) {\n const eventStart = startOfDay(event.date);\n const eventEnd = event.endDate ? endOfDay(event.endDate) : endOfDay(event.date);\n\n return eventStart <= range.end && eventEnd >= range.start;\n }\n\n return false;\n}\n","/**\n * Color manipulation utilities for dynamic theming\n */\n\n/**\n * Converts hex color to RGB\n */\nexport function hexToRgb(hex: string): { r: number; g: number; b: number } | null {\n const result = /^#?([a-f\\d]{2})([a-f\\d]{2})([a-f\\d]{2})$/i.exec(hex);\n return result ? {\n r: parseInt(result[1], 16),\n g: parseInt(result[2], 16),\n b: parseInt(result[3], 16)\n } : null;\n}\n\n/**\n * Converts RGB to hex\n */\nexport function rgbToHex(r: number, g: number, b: number): string {\n return \"#\" + [r, g, b].map(x => {\n const hex = Math.round(x).toString(16);\n return hex.length === 1 ? \"0\" + hex : hex;\n }).join('');\n}\n\n/**\n * Converts RGB to HSL\n */\nexport function rgbToHsl(r: number, g: number, b: number): { h: number; s: number; l: number } {\n r /= 255;\n g /= 255;\n b /= 255;\n\n const max = Math.max(r, g, b);\n const min = Math.min(r, g, b);\n let h = 0;\n let s = 0;\n const l = (max + min) / 2;\n\n if (max !== min) {\n const d = max - min;\n s = l > 0.5 ? d / (2 - max - min) : d / (max + min);\n\n switch (max) {\n case r: h = ((g - b) / d + (g < b ? 6 : 0)) / 6; break;\n case g: h = ((b - r) / d + 2) / 6; break;\n case b: h = ((r - g) / d + 4) / 6; break;\n }\n }\n\n return { h: h * 360, s: s * 100, l: l * 100 };\n}\n\n/**\n * Converts HSL to RGB\n */\nexport function hslToRgb(h: number, s: number, l: number): { r: number; g: number; b: number } {\n h /= 360;\n s /= 100;\n l /= 100;\n\n let r, g, b;\n\n if (s === 0) {\n r = g = b = l;\n } else {\n const hue2rgb = (p: number, q: number, t: number) => {\n if (t < 0) t += 1;\n if (t > 1) t -= 1;\n if (t < 1 / 6) return p + (q - p) * 6 * t;\n if (t < 1 / 2) return q;\n if (t < 2 / 3) return p + (q - p) * (2 / 3 - t) * 6;\n return p;\n };\n\n const q = l < 0.5 ? l * (1 + s) : l + s - l * s;\n const p = 2 * l - q;\n\n r = hue2rgb(p, q, h + 1 / 3);\n g = hue2rgb(p, q, h);\n b = hue2rgb(p, q, h - 1 / 3);\n }\n\n return { r: r * 255, g: g * 255, b: b * 255 };\n}\n\n/**\n * Calculate relative luminance (WCAG formula)\n */\nexport function getLuminance(r: number, g: number, b: number): number {\n const [rs, gs, bs] = [r, g, b].map(c => {\n c = c / 255;\n return c <= 0.03928 ? c / 12.92 : Math.pow((c + 0.055) / 1.055, 2.4);\n });\n return 0.2126 * rs + 0.7152 * gs + 0.0722 * bs;\n}\n\n/**\n * Calculate contrast ratio between two colors\n */\nexport function getContrastRatio(rgb1: { r: number; g: number; b: number }, rgb2: { r: number; g: number; b: number }): number {\n const lum1 = getLuminance(rgb1.r, rgb1.g, rgb1.b);\n const lum2 = getLuminance(rgb2.r, rgb2.g, rgb2.b);\n const lighter = Math.max(lum1, lum2);\n const darker = Math.min(lum1, lum2);\n return (lighter + 0.05) / (darker + 0.05);\n}\n\n/**\n * Generates a hover color (darker variant)\n * If the base color is already dark, it slightly lightens instead\n */\nexport function getHoverColor(baseColor: string): string {\n const rgb = hexToRgb(baseColor);\n if (!rgb) return baseColor;\n\n const hsl = rgbToHsl(rgb.r, rgb.g, rgb.b);\n\n // If color is very dark (L < 20%), lighten it\n // Otherwise, darken it\n if (hsl.l < 20) {\n hsl.l = Math.min(100, hsl.l + 15);\n hsl.s = Math.min(100, hsl.s + 10);\n } else {\n hsl.l = Math.max(0, hsl.l - 12);\n hsl.s = Math.min(100, hsl.s + 8);\n }\n\n const newRgb = hslToRgb(hsl.h, hsl.s, hsl.l);\n return rgbToHex(newRgb.r, newRgb.g, newRgb.b);\n}\n\n/**\n * Generates a very light background variant (almost white)\n */\nexport function getLightBackgroundColor(baseColor: string): string {\n const rgb = hexToRgb(baseColor);\n if (!rgb) return '#f5f5f5';\n\n const hsl = rgbToHsl(rgb.r, rgb.g, rgb.b);\n\n // Keep the hue, reduce saturation, increase lightness to 95-97%\n hsl.s = Math.min(30, hsl.s * 0.3);\n hsl.l = 96;\n\n const newRgb = hslToRgb(hsl.h, hsl.s, hsl.l);\n return rgbToHex(newRgb.r, newRgb.g, newRgb.b);\n}\n\n/**\n * Generates optimal text color (white or dark) for contrast\n * Returns white for dark backgrounds, dark for light backgrounds\n */\nexport function getTextColor(backgroundColor: string): string {\n const rgb = hexToRgb(backgroundColor);\n if (!rgb) return '#000000';\n\n // Calculate luminance\n const luminance = getLuminance(rgb.r, rgb.g, rgb.b);\n\n // If background is light (luminance > 0.5), use dark text\n // Otherwise use white text\n if (luminance > 0.5) {\n // For very light backgrounds, use a dark gray/color-tinted text\n const hsl = rgbToHsl(rgb.r, rgb.g, rgb.b);\n // Keep hue, high saturation, low lightness\n const textHsl = { h: hsl.h, s: Math.min(60, hsl.s * 0.8), l: 25 };\n const textRgb = hslToRgb(textHsl.h, textHsl.s, textHsl.l);\n return rgbToHex(textRgb.r, textRgb.g, textRgb.b);\n } else {\n return '#ffffff';\n }\n}\n\n/**\n * Complete color scheme generator with multiple adaptive variants\n */\nexport interface ColorVariant {\n base: string;\n hover: string;\n text: string;\n textHover: string;\n}\n\nexport interface AdaptiveColorScheme {\n vivid: ColorVariant;\n pastel: ColorVariant;\n dark: ColorVariant;\n raw: ColorVariant; // Exactly the input color, but with derived variants\n}\n\n/**\n * Generates a full adaptive color scheme based on a single input color.\n * It detects the Nature of the input (Vivid, Pastel, Dark) and preserves it,\n * but also provides a \"raw\" variant using the color exactly as provided.\n */\nexport function generateAdaptiveColorScheme(baseColor: string): AdaptiveColorScheme {\n const rgb = hexToRgb(baseColor);\n if (!rgb) {\n const fallback = '#1a73e8';\n return generateAdaptiveColorScheme(fallback);\n }\n\n const { h, s, l } = rgbToHsl(rgb.r, rgb.g, rgb.b);\n\n // 1. Determine the \"Nature\" of the input color\n let type: 'pastel' | 'dark' | 'vivid';\n if (l > 80) type = 'pastel';\n else if (l < 20) type = 'dark'; // Only extremely dark colors are \"Dark\"\n else type = 'vivid';\n\n // 2. Generate variants, keeping the input for its detected category\n const variants: AdaptiveColorScheme = {} as any;\n\n // Raw (Always use original input)\n variants.raw = generateVariant(h, s, l);\n\n // Vivid\n if (type === 'vivid') {\n variants.vivid = variants.raw;\n } else {\n variants.vivid = generateVariant(h, Math.max(s, 70), 50); // Boost to vivid\n }\n\n // Pastel\n if (type === 'pastel') {\n variants.pastel = generateVariant(h, s, l); // Use original\n } else {\n // Soften: high lightness, moderate saturation\n variants.pastel = generateVariant(h, Math.min(s, 65), 92);\n }\n\n // Dark\n if (type === 'dark') {\n variants.dark = generateVariant(h, s, l); // Use original\n } else {\n // Deepen: low lightness, moderate saturation\n variants.dark = generateVariant(h, Math.min(s, 60), 25);\n }\n\n return variants;\n}\n\n/**\n * Internal helper to generate a specific variant with its hover and text colors\n */\nfunction generateVariant(h: number, s: number, l: number): ColorVariant {\n const base = hslToHex(h, s, l);\n\n // Hover: slightly more saturated and darker (or lighter if base is very dark)\n const hoverL = l > 20 ? Math.max(0, l - 8) : l + 15;\n const hoverS = Math.min(100, s + 5);\n const hover = hslToHex(h, hoverS, hoverL);\n\n return {\n base,\n hover,\n text: getTextColor(base),\n textHover: getTextColor(hover)\n };\n}\n\n/**\n * Simple HSL to Hex bridge\n */\nfunction hslToHex(h: number, s: number, l: number): string {\n const rgb = hslToRgb(h, s, l);\n return rgbToHex(rgb.r, rgb.g, rgb.b);\n}\n\n/**\n * Resolves the effective color for an event\n */\nexport function getEventColor(\n event: { color?: string; resourceId?: string },\n getResource: (id: string) => { color?: string } | undefined,\n defaultColor: string\n): string {\n if (event.color) return event.color;\n if (event.resourceId) {\n const resource = getResource(event.resourceId);\n if (resource?.color) return resource.color;\n }\n return defaultColor;\n}\n","import { Component, input, computed } from '@angular/core';\nimport { getWeekDays, WeekDay } from '../../../shared/helpers';\n\n/**\n * Header component for the week view displaying the 7 days of the week.\n * \n * Shows day names and numbers in a sticky header that remains visible\n * when scrolling through time slots.\n * \n * Features:\n * - Sticky positioning\n * - Highlights today\n * - Shows day name (Sun, Mon, etc.) and day number\n * \n * @example\n * ```html\n * <mglon-week-header [currentDate]=\"selectedDate\"></mglon-week-header>\n * ```\n */\n@Component({\n selector: 'mglon-week-header',\n standalone: true,\n imports: [],\n templateUrl: './week-header.html',\n styleUrl: './week-header.scss',\n})\nexport class WeekHeader {\n /**\n * The date to display the week for.\n * Can be any date within the target week.\n */\n readonly currentDate = input<Date>(new Date());\n\n /**\n * Computed array of the 7 days in the week\n */\n readonly weekDays = computed<WeekDay[]>(() => {\n return getWeekDays(this.currentDate());\n });\n}\n","<div class=\"mglon-week-header\">\n <!-- Time column spacer -->\n <div class=\"mglon-week-header__time-column\"></div>\n\n <!-- Day columns -->\n @for (day of weekDays(); track day.date.getTime()) {\n <div class=\"mglon-week-header__day\" [class.mglon-week-header__day--today]=\"day.isToday\">\n <div class=\"mglon-week-header__day-name\">{{ day.dayName }}</div>\n <div class=\"mglon-week-header__day-number\">\n <span>{{ day.dayNumber }}</span>\n </div>\n </div>\n }\n</div>","import { Component, input } from '@angular/core';\nimport { TimeSlot } from '../../../shared/helpers';\n\n/**\n * Component representing a single 30-minute time slot in the week view.\n * \n * Displays the time label (e.g., \"09:00\") only for the first column (time gutter).\n * Each slot has a minimum height of 50px and can contain events.\n * \n * @example\n * ```html\n * <mglon-time-slot \n * [slot]=\"timeSlot\" \n * [showTimeLabel]=\"true\">\n * </mglon-time-slot>\n * ```\n */\n@Component({\n selector: 'mglon-time-slot',\n standalone: true,\n imports: [],\n templateUrl: './time-slot.html',\n styleUrl: './time-slot.scss',\n})\nexport class TimeSlotComponent {\n /**\n * The time slot data to display\n */\n readonly slot = input.required<TimeSlot>();\n\n /**\n * Whether to show the time label (only true for first column - time gutter)\n */\n readonly showTimeLabel = input<boolean>(false);\n}\n","<div class=\"mglon-time-slot\" [class.mglon-time-slot--hour]=\"slot().minute === 0\"\n [class.mglon-time-slot--today]=\"slot().isToday\">\n @if (showTimeLabel()) {\n <span class=\"mglon-time-slot__time-label\">{{ slot().timeLabel }}</span>\n }\n</div>","import { Component, input, computed } from '@angular/core';\nimport { CommonModule } from '@angular/common';\n\n/**\n * Represents the corners of a selection rectangle\n */\nexport interface SelectionCorner {\n top: number;\n left: number;\n bottom: number;\n right: number;\n}\n\n@Component({\n selector: 'mglon-selection',\n standalone: true,\n imports: [CommonModule],\n templateUrl: './selection.html',\n styleUrl: './selection.scss',\n})\nexport class Selection {\n // Input for the selection corners (null means no selection)\n readonly selection = input<SelectionCorner | null>(null);\n\n // Input to control visibility (only show while actively selecting)\n readonly isSelecting = input<boolean>(false);\n\n // Computed style for the indicator based on selection corners\n readonly indicatorStyle = computed(() => {\n const sel = this.selection();\n const selecting = this.isSelecting();\n\n if (!sel || !selecting) {\n return { display: 'none' };\n }\n\n return {\n top: `${sel.top}px`,\n left: `${sel.left}px`,\n width: `${sel.right - sel.left}px`,\n height: `${sel.bottom - sel.top}px`,\n display: 'block'\n };\n });\n}\n","<div class=\"mglon-selection__container\">\n <span class=\"mglon-selection__indicator\" [ngStyle]=\"indicatorStyle()\"></span>\n</div>","import { SchedulerConfig } from '../models/config-schedule'\n\nexport const CELL_HEADER_HEIGHT = 24\n\n/** Height of each event slot row in pixels */\nexport const SLOT_HEIGHT = 20\n\n/** Vertical gap between event slots in pixels */\nexport const SLOT_GAP = 2\n\n/** Default number of visible event rows in month view */\nexport const DEFAULT_VISIBLE_EVENT_ROWS = 3\n\nexport const DEFAULT_CONFIG: SchedulerConfig = {\n initialDate: new Date(),\n initialView: 'month',\n views: ['month', 'week', 'day', 'resource'],\n slotDuration: 30,\n dayStartHour: 0,\n dayEndHour: 23,\n resourceSidebarWidth: 200,\n allowOverlaps: true,\n locale: 'en',\n weekStartsOn: 0,\n theme: 'theme-light', // Asumimos un tema claro por defecto\n height: '100%',\n visibleEventRows: DEFAULT_VISIBLE_EVENT_ROWS,\n backgroundSelection: true,\n showNowIndicator: true,\n editable: true,\n resizableEvents: true,\n showSidebar: true\n}\n\nexport const DEFAULT_RESOURCE_INPUTS = {\n tags: [] as string[],\n isReadOnly: false,\n isBlocked: false,\n isActive: true,\n resizableEvents: true\n};\n\nexport const DEFAULT_EVENT_INPUTS = {\n color: '#3788d8',\n allDay: false,\n description: '',\n data: null as any,\n};\n","/**\n * UI Configuration Types\n * \n * Type definitions organized by functional areas (Header, Sidebar, Grid)\n * for controlling the visual appearance of schedule components.\n */\n\n/**\n * Border radius levels based on design system\n */\nexport type BorderRadius = 'none' | 'sm' | 'md' | 'lg' | 'full';\n\n/**\n * Density variants for spacing and sizing\n */\nexport type Density = 'compact' | 'comfortable';\n\n/**\n * Appearance styles for components\n */\nexport type Appearance = 'solid' | 'outline' | 'ghost';\n\n// =============================================================================\n// HEADER CONFIGURATION\n// =============================================================================\n\n/**\n * Configuration for button group component in header (view switcher)\n */\nexport interface ButtonGroupConfig {\n /**\n * Visual appearance style\n * @default 'solid'\n */\n appearance: Appearance;\n\n /**\n * Border radius for button group\n * @default 'md'\n */\n rounded: BorderRadius;\n\n /**\n * Density/spacing for buttons\n * @default 'comfortable'\n */\n density: Density;\n}\n\n/**\n * Configuration for icon buttons in header (navigation, add button)\n */\nexport interface IconButtonConfig {\n /**\n * Border radius for icon buttons\n * @default 'md'\n */\n rounded: BorderRadius;\n}\n\n/**\n * Configuration for Today button in header\n */\nexport interface TodayButtonConfig {\n /**\n * Border radius for Today button\n * @default 'md'\n */\n rounded: BorderRadius;\n\n /**\n * Visual appearance style\n * @default 'ghost'\n */\n appearance: Appearance;\n}\n\n/**\n * Complete configuration for header area\n */\nexport interface HeaderUIConfig {\n /**\n * View switcher button group configuration\n */\n buttonGroup: ButtonGroupConfig;\n\n /**\n * Icon buttons (prev/next/add) configuration\n */\n iconButtons: IconButtonConfig;\n\n /**\n * Today button configuration\n */\n todayButton: TodayButtonConfig;\n}\n\n// =============================================================================\n// SIDEBAR CONFIGURATION\n// =============================================================================\n\n/**\n * Configuration for resource items in sidebar\n */\nexport interface ResourceItemConfig {\n /**\n * Border radius for resource items\n * @default 'sm'\n */\n rounded: BorderRadius;\n\n /**\n * Density/spacing for resource items\n * @default 'comfortable'\n */\n density: Density;\n}\n\n/**\n * Complete configuration for sidebar area\n */\nexport interface SidebarUIConfig {\n /**\n * Resource list item configuration\n */\n resourceItems: ResourceItemConfig;\n\n /**\n * Background color for sidebar container\n * @default '#ffffff' or 'var(--bg-color)'\n */\n background?: string;\n\n /**\n * Border radius for sidebar container\n * @default 'none'\n */\n rounded?: BorderRadius;\n}\n\n// =============================================================================\n// GRID CONFIGURATION\n// =============================================================================\n\n/** Event slot specific radius options */\nexport type EventSlotRadius = 'none' | 'sm' | 'full'\n\n/** Overflow indicator specific radius options */\nexport type IndicatorRadius = 'none' | 'sm' | 'md' | 'full'\n\n/** Overflow indicator appearance options */\nexport type IndicatorAppearance = 'ghost' | 'outline' | 'solid'\n\n/**\n * Configuration for event slots in grids\n */\nexport interface EventSlotConfig {\n /**\n * Border radius for event slots\n * @default 'sm'\n */\n rounded: EventSlotRadius;\n\n /**\n * Default color for event slots if not specified by event or resource\n * @default undefined (falls back to primary style)\n */\n color?: string;\n}\n\n/**\n * Configuration for overflow indicator (+N more)\n */\nexport interface OverflowIndicatorConfig {\n /**\n * Border radius for indicator\n * @default 'sm'\n */\n rounded: IndicatorRadius\n\n /**\n * Visual appearance style\n * @default 'ghost'\n */\n appearance: IndicatorAppearance\n}\n\n/**\n * Complete configuration for grid area\n */\nexport interface GridUIConfig {\n /**\n * Event slot styling\n */\n eventSlots: EventSlotConfig\n\n /**\n * Overflow indicator (+N more) styling\n */\n overflowIndicator: OverflowIndicatorConfig\n\n /**\n * Whether to automatically generate vivid/pastel variants for events.\n * If true, regular events use vivid colors and recurrent events use pastel variants.\n * If false, colors are used exactly as provided (with derived contrast text).\n * @default true\n */\n useDynamicColors: boolean;\n}\n\n\n// =============================================================================\n// ROOT CONFIGURATION\n// =============================================================================\n\n/**\n * Complete UI configuration for the schedule\n * Organized by functional area for better discoverability\n */\nexport interface UIConfig {\n /**\n * Header area configuration (button-group, navigation, today button)\n */\n header: HeaderUIConfig;\n\n /**\n * Sidebar area configuration (resource items)\n */\n sidebar: SidebarUIConfig;\n\n /**\n * Grid area configuration (event slots, overflow indicators)\n */\n grid: GridUIConfig;\n}\n\n/**\n * Default UI configuration\n */\nexport const DEFAULT_UI_CONFIG: UIConfig = {\n header: {\n buttonGroup: {\n appearance: 'solid',\n rounded: 'md',\n density: 'comfortable'\n },\n iconButtons: {\n rounded: 'md'\n },\n todayButton: {\n rounded: 'md',\n appearance: 'ghost'\n }\n },\n sidebar: {\n resourceItems: {\n rounded: 'sm',\n density: 'comfortable'\n }\n },\n grid: {\n eventSlots: {\n rounded: 'sm'\n },\n overflowIndicator: {\n rounded: 'sm',\n appearance: 'ghost'\n },\n useDynamicColors: true\n }\n} as const\n","import { computed } from '@angular/core'\nimport { patchState, signalStore, withComputed, withMethods, withState } from '@ngrx/signals'\nimport {\n DEFAULT_CONFIG,\n CELL_HEADER_HEIGHT,\n SLOT_HEIGHT,\n SLOT_GAP,\n DEFAULT_VISIBLE_EVENT_ROWS\n} from '../config/default-schedule-config'\nimport { SchedulerConfig, ViewMode } from '../models/config-schedule'\nimport { UIConfig, DEFAULT_UI_CONFIG, HeaderUIConfig, SidebarUIConfig, GridUIConfig } from '../models/ui-config'\nimport { ResizeSide } from '../../shared/directives/resizable.directive'\nimport { ResourceModel } from '../models/resource.model'\nimport { AnyEvent, isRecurrentEvent } from '../models/event.model'\nimport { getViewRange, isEventInRange } from '../../shared/helpers/calendar.helpers'\nimport { expandRecurrentEvent } from '../../shared/helpers/recurrent-events.helpers'\nimport { addDays, differenceInCalendarDays, startOfDay } from 'date-fns'\nimport { Subject } from 'rxjs'\nimport { InteractionEvent, InteractionType } from '../models/interaction.model'\n\ninterface CalendarState {\n currentDate: Date;\n viewMode: ViewMode;\n config: SchedulerConfig;\n uiConfig: UIConfig;\n\n /**\n * Map of events, where the key is the event ID and the value is the event object.\n * This is used to store and access events by their ID.\n */\n events: Map<string, AnyEvent>;\n\n /**\n * Map of resources, where the key is the resource ID and the value is the resource object.\n * This is used to store and access resources by their ID.\n */\n resources: Map<string, ResourceModel>;\n\n /**\n * Height of a week row container in pixels.\n * Used to calculate how many event slots can fit in a week row.\n */\n weekRowHeight: number\n\n /**\n * Index of the currently expanded week (0-5), or null if no week is expanded.\n * Only one week can be expanded at a time.\n */\n expandedWeekIndex: number | null;\n\n /**\n * Current drag and drop state\n */\n dragState: {\n eventId: string | null;\n grabDate: Date | null;\n hoverDate: Date | null;\n };\n\n /**\n * Current resize state\n */\n resizeState: {\n eventId: string | null;\n side: ResizeSide | null;\n hoverDate: Date | null;\n };\n\n /**\n * Current active interaction to prevent conflicts (mutex)\n */\n interactionMode: 'none' | 'dragging' | 'selecting' | 'resizing';\n\n /**\n * ID of the event currently being hovered by the mouse\n */\n hoveredEventId: string | null;\n}\n\nconst initialCalendarState: CalendarState = {\n currentDate: new Date(),\n viewMode: 'month',\n config: DEFAULT_CONFIG,\n uiConfig: DEFAULT_UI_CONFIG,\n\n events: new Map<string, AnyEvent>(),\n resources: new Map<string, ResourceModel>(),\n weekRowHeight: 0,\n expandedWeekIndex: null,\n dragState: {\n eventId: null,\n grabDate: null,\n hoverDate: null\n },\n resizeState: {\n eventId: null,\n side: null,\n hoverDate: null\n },\n interactionMode: 'none',\n hoveredEventId: null\n};\n\nexport const CalendarStore = signalStore(\n { providedIn: 'root' },\n withState(initialCalendarState),\n withComputed(({ resources, events, currentDate, viewMode, config }) => ({\n // Date & View Computeds\n viewDate: computed(() => currentDate()),\n currentView: computed(() => viewMode()),\n viewRange: computed(() => getViewRange(currentDate(), viewMode())),\n formattedDate: computed(() => {\n const date = currentDate();\n return new Intl.DateTimeFormat(config().locale, {\n month: 'long',\n year: 'numeric',\n day: viewMode() === 'day' ? 'numeric' : undefined\n }).format(date);\n }),\n\n // Resource Computeds\n allResources: computed(() => Array.from(resources().values())),\n resourceCount: computed(() => resources().size),\n activeResources: computed(() =>\n Array.from(resources().values()).filter(r => r.isActive !== false)\n ),\n inactiveResources: computed(() =>\n Array.from(resources().values()).filter(r => r.isActive === false)\n ),\n\n // Event Computeds\n allEvents: computed(() => Array.from(events().values())),\n eventCount: computed(() => events().size),\n currentViewEvents: computed(() => {\n const range = getViewRange(currentDate(), viewMode());\n const resMap = resources();\n\n return Array.from(events().values()).filter(event => {\n // Exclude 'recurrent' templates from rendering.\n // Their expanded instances ('event' type) will be included instead.\n if (event.type === 'recurrent') return false;\n\n const inRange = isEventInRange(event, range);\n if (!inRange) return false;\n\n if (event.resourceId) {\n const res = resMap.get(event.resourceId);\n return res?.isActive !== false;\n }\n\n return true;\n });\n }),\n\n /**\n * Minimum height for a week row in month view.\n * Calculated from: CELL_HEADER_HEIGHT + (n * SLOT_HEIGHT) + ((n-1) * SLOT_GAP)\n * where n = visibleEventRows from config.\n */\n minWeekRowHeight: computed(() => {\n const rows = config().visibleEventRows ?? DEFAULT_VISIBLE_EVENT_ROWS\n // Formula: header + (rows * slot height) + (rows * slot gap)\n // The last gap serves as bottom padding for the row.\n return CELL_HEADER_HEIGHT + (rows * SLOT_HEIGHT) + (rows * SLOT_GAP)\n })\n })),\n withMethods((store) => {\n const interaction$ = new Subject<InteractionEvent>();\n\n return {\n /** Returns the observable stream of all event interactions */\n getInteractions() {\n return interaction$.asObservable();\n },\n\n /** Dispatches a new interaction event to all subscribers */\n dispatchInteraction(type: InteractionType, eventId: string, payload: any) {\n interaction$.next({ type, eventId, payload });\n },\n\n // --- Navigation & View Methods ---\n setDate(date: Date) {\n patchState(store, { currentDate: date });\n },\n changeView(view: ViewMode) {\n patchState(store, { viewMode: view });\n },\n updateConfig(config: Partial<SchedulerConfig>) {\n patchState(store, (state) => ({\n config: { ...state.config, ...config },\n currentDate: config.initialDate ? new Date(config.initialDate) : state.currentDate,\n viewMode: config.initialView || state.viewMode\n }));\n\n if (config.resources) {\n this.registerResources(config.resources);\n }\n },\n next() {\n const mode = store.viewMode();\n const current = new Date(store.currentDate());\n switch (mode) {\n case 'day':\n case 'resource':\n current.setDate(current.getDate() + 1);\n break;\n case 'week':\n current.setDate(current.getDate() + 7);\n break;\n case 'month':\n current.setMonth(current.getMonth() + 1);\n break;\n }\n patchState(store, { currentDate: current });\n },\n prev() {\n const mode = store.viewMode();\n const current = new Date(store.currentDate());\n switch (mode) {\n case 'day':\n case 'resource':\n current.setDate(current.getDate() - 1);\n break;\n case 'week':\n current.setDate(current.getDate() - 7);\n break;\n case 'month':\n current.setMonth(current.getMonth() - 1);\n break;\n }\n patchState(store, { currentDate: current });\n },\n today() {\n patchState(store, { currentDate: new Date() });\n },\n\n // --- Resource Methods ---\n registerResources(resources: ResourceModel[]) {\n patchState(store, (state) => {\n const newMap = new Map(state.resources);\n resources.forEach(r => newMap.set(r.id, r));\n return { resources: newMap };\n });\n },\n registerResource(resource: ResourceModel) {\n patchState(store, (state) => {\n const newMap = new Map(state.resources);\n newMap.set(resource.id, resource);\n return { resources: newMap };\n });\n },\n updateResource(id: string, partial: Partial<ResourceModel>) {\n patchState(store, (state) => {\n const resource = state.resources.get(id);\n if (!resource) return state;\n const newMap = new Map(state.resources);\n newMap.set(id, { ...resource, ...partial });\n return { resources: newMap };\n });\n },\n unregisterResource(id: string) {\n patchState(store, (state) => {\n const newMap = new Map(state.resources);\n newMap.delete(id);\n return { resources: newMap };\n });\n },\n getResource(id: string): ResourceModel | undefined {\n return store.resources().get(id);\n },\n toggleResource(id: string) {\n const resource = store.resources().get(id);\n if (resource) {\n this.updateResource(id, { isActive: resource.isActive === false });\n }\n },\n showResource(id: string) {\n this.updateResource(id, { isActive: true });\n },\n hideResource(id: string) {\n this.updateResource(id, { isActive: false });\n },\n\n // --- Event Methods ---\n setEvents(events: AnyEvent[]) {\n const eventsMap = new Map<string, AnyEvent>();\n events.forEach(e => eventsMap.set(e.id, e));\n patchState(store, { events: eventsMap });\n },\n registerEvent(event: AnyEvent) {\n patchState(store, (state) => {\n const newMap = new Map(state.events);\n newMap.set(event.id, event);\n return { events: newMap };\n });\n },\n updateEvent(id: string, partial: Partial<AnyEvent>) {\n patchState(store, (state) => {\n const event = state.events.get(id);\n if (!event) return state;\n const newMap = new Map(state.events);\n newMap.set(id, { ...event, ...partial } as AnyEvent);\n return { events: newMap };\n });\n },\n unregisterEvent(id: string) {\n patchState(store, (state) => {\n const newMap = new Map(state.events);\n newMap.delete(id);\n return { events: newMap };\n });\n },\n getEvent(id: string): AnyEvent | undefined {\n return store.events().get(id);\n },\n getEventsByResource(resourceId: string): AnyEvent[] {\n return Array.from(store.events().values()).filter(event => event.resourceId === resourceId);\n },\n\n clear(): void {\n patchState(store, {\n events: new Map(),\n resources: new Map(),\n });\n },\n\n setUIConfig(config: {\n header?: Partial<HeaderUIConfig>;\n sidebar?: Partial<SidebarUIConfig>;\n grid?: Partial<GridUIConfig>;\n }) {\n patchState(store, (state) => ({\n uiConfig: {\n header: config.header\n ? {\n buttonGroup: config.header.buttonGroup\n ? { ...state.uiConfig.header.buttonGroup, ...config.header.buttonGroup }\n : state.uiConfig.header.buttonGroup,\n iconButtons: config.header.iconButtons\n ? { ...state.uiConfig.header.iconButtons, ...config.header.iconButtons }\n : state.uiConfig.header.iconButtons,\n todayButton: config.header.todayButton\n ? { ...state.uiConfig.header.todayButton, ...config.header.todayButton }\n : state.uiConfig.header.todayButton\n }\n : state.uiConfig.header,\n sidebar: config.sidebar\n ? {\n resourceItems: config.sidebar.resourceItems\n ? { ...state.uiConfig.sidebar.resourceItems, ...config.sidebar.resourceItems }\n : state.uiConfig.sidebar.resourceItems,\n background: config.sidebar.background !== undefined\n ? config.sidebar.background\n : state.uiConfig.sidebar.background,\n rounded: config.sidebar.rounded !== undefined\n ? config.sidebar.rounded\n : state.uiConfig.sidebar.rounded\n }\n : state.uiConfig.sidebar,\n grid: config.grid\n ? {\n eventSlots: config.grid.eventSlots\n ? { ...state.uiConfig.grid.eventSlots, ...config.grid.eventSlots }\n : state.uiConfig.grid.eventSlots,\n overflowIndicator: config.grid.overflowIndicator\n ? { ...state.uiConfig.grid.overflowIndicator, ...config.grid.overflowIndicator }\n : state.uiConfig.grid.overflowIndicator,\n useDynamicColors: config.grid.useDynamicColors !== undefined\n ? config.grid.useDynamicColors\n : state.uiConfig.grid.useDynamicColors\n }\n : state.uiConfig.grid\n }\n }));\n },\n\n /**\n * Sets the height of a week row container.\n * Called once from the first week's ResizeObserver.\n */\n setWeekRowHeight(height: number) {\n patchState(store, { weekRowHeight: height })\n },\n\n /**\n * Toggles expansion of a week. Only one week can be expanded at a time.\n * If the same week is toggled twice, it collapses.\n * @param weekIndex - The index of the week to toggle (0-5)\n */\n toggleWeekExpansion(weekIndex: number) {\n const current = store.expandedWeekIndex()\n patchState(store, {\n expandedWeekIndex: current === weekIndex ? null : weekIndex\n })\n },\n\n // --- Drag & Drop Methods ---\n setDragStart(eventId: string, grabDate: Date) {\n patchState(store, {\n dragState: {\n eventId,\n grabDate,\n hoverDate: null\n }\n })\n },\n setDragHover(date: Date) {\n patchState(store, (state) => ({\n dragState: {\n ...state.dragState,\n hoverDate: date\n }\n }))\n },\n clearDragState() {\n patchState(store, {\n dragState: {\n eventId: null,\n grabDate: null,\n hoverDate: null\n }\n })\n },\n\n /**\n * Updates the position of the currently dragged event based on the hover date.\n * Calculates the offset between the original grab date and the new hover date.\n */\n updateDraggedEventPosition() {\n const { eventId, grabDate, hoverDate } = store.dragState()\n if (!eventId || !grabDate || !hoverDate) return\n\n const event = store.events().get(eventId)\n if (!event) return\n\n const offset = differenceInCalendarDays(hoverDate, grabDate)\n if (offset === 0) return\n\n if (event.type === 'all-day') {\n const partial: any = {\n date: addDays(event.date, offset)\n }\n if (event.endDate) {\n partial.endDate = addDays(event.endDate, offset)\n }\n this.updateEvent(eventId, partial)\n } else {\n const partial: any = {\n start: addDays(event.start, offset),\n end: addDays(event.end, offset)\n }\n this.updateEvent(eventId, partial)\n }\n\n // Update the grab date to the new hover date to maintain the relative \"grabbed\" point\n patchState(store, (state) => ({\n dragState: {\n ...state.dragState,\n grabDate: hoverDate\n }\n }))\n },\n\n // --- Resizing Methods ---\n setResizeStart(eventId: string, side: ResizeSide) {\n patchState(store, {\n resizeState: {\n eventId,\n side,\n hoverDate: null\n }\n })\n },\n setResizeHover(date: Date) {\n patchState(store, (state) => ({\n resizeState: {\n ...state.resizeState,\n hoverDate: date\n }\n }))\n },\n clearResizeState() {\n patchState(store, {\n resizeState: {\n eventId: null,\n side: null,\n hoverDate: null\n }\n })\n },\n\n /**\n * Updates the start or end date of the currently resized event based on the hover date.\n */\n updateResizedEvent() {\n const { eventId, side, hoverDate } = store.resizeState()\n if (!eventId || !side || !hoverDate) return\n\n const event = store.events().get(eventId)\n if (!event) return\n\n const normalizedHover = startOfDay(hoverDate)\n\n if (event.type === 'all-day') {\n const partial: any = {}\n const eventDate = startOfDay(event.date)\n const currentEnd = event.endDate ? startOfDay(event.endDate) : eventDate\n\n if (side === 'left') {\n // Cannot exceed the current end date\n partial.date = normalizedHover > currentEnd ? currentEnd : normalizedHover\n } else if (side === 'right') {\n // Cannot be before the current start date\n partial.endDate = normalizedHover < eventDate ? eventDate : normalizedHover\n }\n this.updateEvent(eventId, partial)\n } else {\n const partial: any = {}\n if (side === 'left') {\n // Cannot exceed end time\n partial.start = hoverDate > event.end ? event.end : hoverDate\n } else if (side === 'right') {\n // Cannot be before start time\n partial.end = hoverDate < event.start ? event.start : hoverDate\n }\n this.updateEvent(eventId, partial)\n }\n },\n\n // --- Interaction Mutex ---\n setInteractionMode(mode: 'none' | 'dragging' | 'selecting' | 'resizing') {\n patchState(store, { interactionMode: mode })\n },\n\n // --- Hover State Methods ---\n setHoveredEvent(eventId: string | null) {\n patchState(store, { hoveredEventId: eventId })\n }\n }\n })\n);\n","export abstract class Selectable {\n /**\n * Traduce una coordenada visual (relativa al contenedor) a una fecha.\n */\n abstract getDateFromPoint(x: number, y: number): { date: Date, resourceId?: string } | null;\n}","import { Directive, ElementRef, inject, PLATFORM_ID, output, signal, HostListener, Input } from '@angular/core';\nimport { isPlatformBrowser } from '@angular/common';\nimport { Selectable } from './selectable.abstract';\nimport { SelectionCorner } from '../selection/selection';\nimport { CalendarStore } from '../../store/calendar.store';\n\n/**\n * Result of a selection operation containing start and end dates/resources\n */\nexport interface SelectionResult {\n start: { date: Date; resourceId?: string } | null;\n end: { date: Date; resourceId?: string } | null;\n}\n\n/**\n * Coordinates relative to a container element\n */\ninterface RelativeCoordinates {\n x: number;\n y: number;\n}\n\n/**\n * Directive that enables mouse-based selection on calendar views.\n * \n * Works with components that implement the Selectable interface to translate\n * visual coordinates into dates/resources. Handles all mouse interaction logic\n * and emits selection events.\n * \n * @example\n * ```html\n * <div [mglonSelectable]=\"this\"\n * (selectionStart)=\"onStart($event)\"\n * (selectionChange)=\"onChange($event)\"\n * (selectionEnd)=\"onEnd($event)\">\n * </div>\n * ```\n */\n@Directive({\n selector: '[mglonSelectable]',\n standalone: true\n})\nexport class SelectableDirective {\n private readonly elementRef = inject(ElementRef);\n private readonly platformId = inject(PLATFORM_ID);\n private readonly store = inject(CalendarStore);\n\n /**\n * The component that implements Selectable interface.\n * Provides the getDateFromPoint() method to translate coordinates to dates.\n */\n @Input('mglonSelectable') selectable: Selectable | null = null;\n\n /**\n * Emitted when user starts a selection (mousedown)\n */\n readonly selectionStart = output<SelectionResult>();\n\n /**\n * Emitted when selection changes (mousemove while selecting)\n */\n readonly selectionChange = output<SelectionResult>();\n\n /**\n * Emitted when selection ends (mouseup)\n */\n readonly selectionEnd = output<SelectionResult>();\n\n /**\n * Current selection rectangle coordinates (relative to container)\n */\n readonly selection = signal<SelectionCorner | null>(null);\n\n /**\n * Whether user is currently selecting (mouse button is down)\n */\n readonly isSelecting = signal<boolean>(false);\n\n /** Starting point of the selection */\n private startPoint: RelativeCoordinates | null = null;\n\n /** Date/resource data at the starting point */\n private startData: { date: Date; resourceId?: string } | null = null;\n\n /** Date/resource data at the current cursor position */\n private currentData: { date: Date; resourceId?: string } | null = null;\n\n /**\n * Handles mousedown event to initiate selection\n */\n @HostListener('mousedown', ['$event'])\n onMouseDown(event: MouseEvent): void {\n if (!this.canSelect() || this.store.interactionMode() !== 'none') return;\n\n this.store.setInteractionMode('selecting');\n const coords = this.getRelativeCoordinates(event);\n this.startSelection(coords, event.clientX, event.clientY);\n }\n\n /**\n * Handles mousemove event to update selection\n */\n @HostListener('mousemove', ['$event'])\n onMouseMove(event: MouseEvent): void {\n if (!this.isSelecting() || !this.startPoint || !this.canSelect()) return;\n\n const coords = this.getRelativeCoordinates(event);\n this.updateSelection(coords, event.clientX, event.clientY);\n }\n\n /**\n * Handles mouseup event to complete selection\n */\n @HostListener('mouseup', ['$event'])\n onMouseUp(event: MouseEvent): void {\n if (!this.isSelecting() || !this.canSelect()) return;\n\n this.store.setInteractionMode('none');\n this.endSelection();\n }\n\n /**\n * Checks if selection is possible (browser platform and selectable is set)\n */\n private canSelect(): boolean {\n return isPlatformBrowser(this.platformId) && !!this.selectable;\n }\n\n /**\n * Converts mouse event coordinates to coordinates relative to the container\n * Takes into account scroll position for scrollable containers.\n * \n * @param event - Mouse event with clientX/clientY\n * @returns Coordinates relative to the container's top-left corner (including scroll)\n */\n private getRelativeCoordinates(event: MouseEvent): RelativeCoordinates {\n const containerElement = this.elementRef.nativeElement as HTMLElement;\n const rect = containerElement.getBoundingClientRect();\n\n return {\n x: event.clientX - rect.left + containerElement.scrollLeft,\n y: event.clientY - rect.top + containerElement.scrollTop\n };\n }\n\n /**\n * Initiates a new selection\n * \n * @param coords - Relative coordinates where selection started\n * @param absoluteX - Absolute X coordinate (for element detection)\n * @param absoluteY - Absolute Y coordinate (for element detection)\n */\n private startSelection(coords: RelativeCoordinates, absoluteX: number, absoluteY: number): void {\n this.isSelecting.set(true);\n this.startPoint = coords;\n\n // Get the date/resource from the starting point\n if (!this.selectable) return;\n this.startData = this.selectable.getDateFromPoint(coords.x, coords.y);\n this.currentData = this.startData;\n\n // Initialize selection rectangle at a single point\n this.selection.set({\n top: coords.y,\n left: coords.x,\n bottom: coords.y,\n right: coords.x\n });\n\n // Emit selection start event\n this.selectionStart.emit({\n start: this.startData,\n end: this.currentData\n });\n }\n\n /**\n * Updates an ongoing selection\n * \n * @param coords - Current relative coordinates\n * @param absoluteX - Absolute X coordinate (for element detection)\n * @param absoluteY - Absolute Y coordinate (for element detection)\n */\n private updateSelection(coords: RelativeCoordinates, absoluteX: number, absoluteY: number): void {\n if (!this.startPoint) return;\n\n // Calculate selection rectangle (supports dragging in any direction)\n const rect = this.calculateSelectionRectangle(this.startPoint, coords);\n this.selection.set(rect);\n\n // Get the date/resource from the current point\n if (!this.selectable) return;\n this.currentData = this.selectable.getDateFromPoint(coords.x, coords.y);\n\n // Emit selection change event\n this.selectionChange.emit({\n start: this.startData,\n end: this.currentData\n });\n }\n\n /**\n * Completes the current selection\n */\n private endSelection(): void {\n this.isSelecting.set(false);\n\n // Emit final selection event\n this.selectionEnd.emit({\n start: this.startData,\n end: this.currentData\n });\n\n // Clear selection state\n this.clearSelection();\n }\n\n /**\n * Calculates the selection rectangle from start and end points.\n * Handles dragging in any direction by using min/max.\n * \n * @param start - Starting point coordinates\n * @param end - Ending point coordinates\n * @returns Selection rectangle with top, left, bottom, right\n */\n private calculateSelectionRectangle(\n start: RelativeCoordinates,\n end: RelativeCoordinates\n ): SelectionCorner {\n return {\n top: Math.min(start.y, end.y),\n left: Math.min(start.x, end.x),\n bottom: Math.max(start.y, end.y),\n right: Math.max(start.x, end.x)\n };\n }\n\n /**\n * Clears all selection state\n */\n private clearSelection(): void {\n this.selection.set(null);\n this.startPoint = null;\n this.startData = null;\n this.currentData = null;\n }\n}\n","import { Component, input, computed, viewChild, ElementRef, inject, output } from '@angular/core';\nimport { getWeekTimeSlots, getWeekDays, TimeSlot, WeekDay } from '../../../shared/helpers';\nimport { TimeSlotComponent } from '../time-slot/time-slot';\nimport { Selection } from '../../../core/background-selection/selection/selection';\nimport { CalendarStore } from '../../../core/store/calendar.store';\nimport { Selectable, SelectableDirective, SelectionResult } from '../../../core/background-selection/selectable';\n\n/**\n * Week grid component displaying time slots for 7 days.\n * \n * Implements the Selectable interface to enable time-based selection.\n * Displays a scrollable grid of 30-minute time slots (48 per day).\n * \n * Features:\n * - 7 columns (days) × 48 rows (time slots)\n * - Scrollable container\n * - Mouse-based time selection\n * - 50px minimum height per slot\n * \n * @example\n * ```html\n * <mglon-week-grid \n * [currentDate]=\"selectedDate\"\n * (selectionEnd)=\"onTimeRangeSelected($event)\">\n * </mglon-week-grid>\n * ```\n */\n@Component({\n selector: 'mglon-week-grid',\n standalone: true,\n imports: [TimeSlotComponent, Selection, SelectableDirective],\n templateUrl: './week-grid.html',\n styleUrl: './week-grid.scss',\n})\nexport class WeekGrid implements Selectable {\n private readonly elementRef = inject(ElementRef);\n private readonly store = inject(CalendarStore);\n\n readonly backgroundSelection = computed(() => this.store.config().backgroundSelection ?? true);\n readonly showNowIndicator = computed(() => this.store.config().showNowIndicator ?? true);\n\n /**\n * Reference to the SelectableDirective instance\n */\n readonly selectableDirective = viewChild(SelectableDirective);\n\n /**\n * The date to display the week for\n */\n readonly currentDate = input<Date>(new Date());\n\n /**\n * Selection events\n */\n readonly selectionStart = output<SelectionResult>();\n readonly selectionChange = output<SelectionResult>();\n readonly selectionEnd = output<SelectionResult>();\n\n /**\n * Computed 2D array of time slots [days][slots]\n */\n readonly timeSlots = computed<TimeSlot[][]>(() => {\n return getWeekTimeSlots(this.currentDate());\n });\n\n /**\n * Computed array of week days for column headers\n */\n readonly weekDays = computed<WeekDay[]>(() => {\n return getWeekDays(this.currentDate());\n });\n\n /**\n * Computed index of today's column (-1 if today is not in this week)\n */\n readonly todayColumnIndex = computed<number>(() => {\n const days = this.weekDays();\n return days.findIndex(day => day.isToday);\n });\n\n /**\n * Slot height in pixels (matches CSS min-height)\n */\n private readonly SLOT_HEIGHT = 50;\n\n /**\n * Time column width in pixels (matches CSS grid-template-columns)\n */\n private readonly TIME_COLUMN_WIDTH = 60;\n\n /**\n * Calculates the left position for the today indicator line\n * @returns Position in pixels from the left edge\n */\n getTodayIndicatorPosition(): number {\n const index = this.todayColumnIndex();\n if (index === -1) return 0;\n\n const gridElement = this.elementRef.nativeElement as HTMLElement;\n if (!gridElement) return 0;\n\n const gridRect = gridElement.getBoundingClientRect();\n const dayColumnWidth = (gridRect.width - this.TIME_COLUMN_WIDTH - 8) / 7; // -8 for scrollbar\n\n // Position at the center of the column\n return this.TIME_COLUMN_WIDTH + (dayColumnWidth * index) + (dayColumnWidth / 2);\n }\n\n /**\n * Implements Selectable.getDateFromPoint()\n * \n * Translates visual coordinates into a specific date and time.\n * \n * Algorithm:\n * 1. Convert relative coordinates to absolute\n * 2. Determine which day column (0-6)\n * 3. Determine which time slot row (0-47)\n * 4. Calculate exact time (hour + minute)\n * 5. Return Date object with specific date and time\n * \n * @param x - X coordinate relative to the grid container\n * @param y - Y coordinate relative to the grid container\n * @returns Object with date property (including time), or null if invalid\n */\n getDateFromPoint(x: number, y: number): { date: Date } | null {\n const gridElement = this.elementRef.nativeElement as HTMLElement;\n if (!gridElement) return null;\n\n // Account for time column\n const adjustedX = x - this.TIME_COLUMN_WIDTH;\n if (adjustedX < 0) return null; // Clicked on time column\n\n // Calculate which day column (0-6)\n const gridRect = gridElement.getBoundingClientRect();\n const dayColumnWidth = (gridRect.width - this.TIME_COLUMN_WIDTH) / 7;\n const dayIndex = Math.floor(adjustedX / dayColumnWidth);\n\n if (dayIndex < 0 || dayIndex > 6) return null;\n\n // Calculate which time slot (0-47)\n const slotIndex = Math.floor(y / this.SLOT_HEIGHT);\n if (slotIndex < 0 || slotIndex > 47) return null;\n\n // Get the time slot\n const timeSlots = this.timeSlots();\n if (!timeSlots[dayIndex] || !timeSlots[dayIndex][slotIndex]) return null;\n\n return { date: timeSlots[dayIndex][slotIndex].date };\n }\n\n /**\n * Handles selection start event\n */\n onSelectionStart(result: SelectionResult): void {\n this.selectionStart.emit(result);\n }\n\n /**\n * Handles selection change event\n */\n onSelectionChange(result: SelectionResult): void {\n this.selectionChange.emit(result);\n }\n\n /**\n * Handles selection end event\n */\n onSelectionEnd(result: SelectionResult): void {\n this.selectionEnd.emit(result);\n }\n}\n","<div class=\"mglon-week-grid\" [mglonSelectable]=\"backgroundSelection() ? this : null\"\n (selectionStart)=\"onSelectionStart($event)\" (selectionChange)=\"onSelectionChange($event)\"\n (selectionEnd)=\"onSelectionEnd($event)\">\n\n <!-- Time column -->\n <div class=\"mglon-week-grid__time-column\">\n @for (slot of timeSlots()[0]; track slot.date.getTime()) {\n <mglon-time-slot [slot]=\"slot\" [showTimeLabel]=\"true\"></mglon-time-slot>\n }\n </div>\n\n <!-- Day columns -->\n @for (daySlots of timeSlots(); track $index) {\n <div class=\"mglon-week-grid__day-column\">\n @for (slot of daySlots; track slot.date.getTime()) {\n <mglon-time-slot [slot]=\"slot\"></mglon-time-slot>\n }\n </div>\n }\n\n <!-- Selection overlay -->\n @if (selectableDirective() && backgroundSelection()) {\n <mglon-selection [selection]=\"selectableDirective()!.selection()\"\n [isSelecting]=\"selectableDirective()!.isSelecting()\">\n </mglon-selection>\n }\n\n <!-- Today indicator line -->\n @if (todayColumnIndex() !== -1 && showNowIndicator()) {\n <div class=\"mglon-week-grid__today-indicator\" [style.left.px]=\"getTodayIndicatorPosition()\">\n </div>\n }\n\n <!-- Events Overlay -->\n <div class=\"mglon-week-grid__events-overlay\">\n <ng-content></ng-content>\n </div>\n</div>","import { Component, inject, computed, viewChild, ElementRef, afterNextRender, output } from '@angular/core';\nimport { trigger, transition, style, animate } from '@angular/animations';\nimport { WeekHeader } from '../week-header/week-header';\nimport { WeekGrid } from '../week-grid/week-grid';\nimport { CalendarStore } from '../../../core/store/calendar.store';\nimport { SelectionResult } from '../../../core/background-selection/selectable/selectable.directive';\n\n/**\n * Week view container component.\n */\n@Component({\n selector: 'mglon-week-view',\n standalone: true,\n imports: [WeekHeader, WeekGrid],\n templateUrl: './week-view.html',\n styleUrl: './week-view.scss',\n animations: [\n trigger('weekTransition', [\n transition('* => *', [\n style({ opacity: 0, transform: 'translateX({{ direction }}%)' }),\n animate('500ms ease-out', style({ opacity: 1, transform: 'translateX(0)' }))\n ], { params: { direction: 0 } })\n ])\n ]\n})\nexport class WeekView {\n readonly store = inject(CalendarStore);\n\n // ============================================\n // OUTPUT EVENTS\n // ============================================\n\n /** Emitted when selection starts */\n readonly selectionStart = output<SelectionResult>();\n\n /** Emitted while selecting */\n readonly selectionChange = output<SelectionResult>();\n\n /** Emitted when selection ends */\n readonly selectionEnd = output<SelectionResult>();\n\n // Get week grid element reference\n readonly gridElement = viewChild(WeekGrid, { read: ElementRef });\n\n readonly animationState = computed(() => {\n const date = this.store.currentDate();\n return this.getWeekNumber(date);\n });\n\n constructor() {\n afterNextRender(() => {\n // Logic for grid sizing can remain if needed for the grid itself, \n // but let's see if we can simplify it.\n });\n }\n\n private getWeekNumber(date: Date): number {\n const firstDayOfYear = new Date(date.getFullYear(), 0, 1);\n const pastDaysOfYear = (date.getTime() - firstDayOfYear.getTime()) / 86400000;\n return Math.ceil((pastDaysOfYear + firstDayOfYear.getDay() + 1) / 7);\n }\n}\n\n","<div class=\"mglon-week-view\" [@weekTransition]=\"animationState()\">\n <mglon-week-header [currentDate]=\"store.currentDate()\"></mglon-week-header>\n <mglon-week-grid [currentDate]=\"store.currentDate()\" (selectionStart)=\"selectionStart.emit($event)\"\n (selectionChange)=\"selectionChange.emit($event)\" (selectionEnd)=\"selectionEnd.emit($event)\">\n </mglon-week-grid>\n</div>","export type IconName =\n 'chevron-left' |\n 'chevron-right' |\n 'chevron-down' |\n 'chevron-up' |\n 'clock' |\n 'calendar-month' |\n 'calendar-week' |\n 'calendar-day' |\n 'add' |\n 'cycle' |\n 'dot'\n\nexport const ICONS: Record<IconName, string> = {\n 'chevron-left': `\n <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" fill=\"currentColor\">\n <path fill-rule=\"evenodd\" d=\"M7.72 12.53a.75.75 0 010-1.06l7.5-7.5a.75.75 0 111.06 1.06L9.31 12l6.97 6.97a.75.75 0 11-1.06 1.06l-7.5-7.5z\" clip-rule=\"evenodd\" />\n </svg>`,\n 'chevron-right': `\n <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" fill=\"currentColor\">\n <path fill-rule=\"evenodd\" d=\"M16.28 11.47a.75.75 0 010 1.06l-7.5 7.5a.75.75 0 01-1.06-1.06L14.69 12 7.72 5.03a.75.75 0 011.06-1.06l7.5 7.5z\" clip-rule=\"evenodd\" />\n </svg>`,\n 'chevron-down': `\n <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" fill=\"currentColor\">\n <path fill-rule=\"evenodd\" d=\"M12.53 16.28a.75.75 0 01-1.06 0l-7.5-7.5a.75.75 0 011.06-1.06L12 14.69l6.97-6.97a.75.75 0 111.06 1.06l-7.5 7.5z\" clip-rule=\"evenodd\" />\n </svg>`,\n 'chevron-up': `\n <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" fill=\"currentColor\">\n <path fill-rule=\"evenodd\" d=\"M11.47 7.72a.75.75 0 011.06 0l7.5 7.5a.75.75 0 11-1.06 1.06L12 9.31l-6.97 6.97a.75.75 0 01-1.06-1.06l7.5-7.5z\" clip-rule=\"evenodd\" />\n </svg>`,\n\n 'clock': `\n <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" fill=\"currentColor\">\n <path fill-rule=\"evenodd\" d=\"M12 2.25c-5.385 0-9.75 4.365-9.75 9.75s4.365 9.75 9.75 9.75 9.75-4.365 9.75-9.75S17.385 2.25 12 2.25zM12.75 6a.75.75 0 00-1.5 0v6c0 .414.336.75.75.75h4.5a.75.75 0 000-1.5h-3.75V6z\" clip-rule=\"evenodd\" />\n </svg>`,\n 'calendar-month': `\n <svg xmlns=\"http://www.w3.org/2000/svg\" height=\"24px\" viewBox=\"0 -960 960 960\" width=\"24px\" fill=\"#1f1f1f\"><path d=\"M200-80q-33 0-56.5-23.5T120-160v-560q0-33 23.5-56.5T200-800h40v-80h80v80h320v-80h80v80h40q33 0 56.5 23.5T840-720v560q0 33-23.5 56.5T760-80H200Zm0-80h560v-400H200v400Zm0-480h560v-80H200v80Zm0 0v-80 80Zm280 240q-17 0-28.5-11.5T440-440q0-17 11.5-28.5T480-480q17 0 28.5 11.5T520-440q0 17-11.5 28.5T480-400Zm-160 0q-17 0-28.5-11.5T280-440q0-17 11.5-28.5T320-480q17 0 28.5 11.5T360-440q0 17-11.5 28.5T320-400Zm320 0q-17 0-28.5-11.5T600-440q0-17 11.5-28.5T640-480q17 0 28.5 11.5T680-440q0 17-11.5 28.5T640-400ZM480-240q-17 0-28.5-11.5T440-280q0-17 11.5-28.5T480-320q17 0 28.5 11.5T520-280q0 17-11.5 28.5T480-240Zm-160 0q-17 0-28.5-11.5T280-280q0-17 11.5-28.5T320-320q17 0 28.5 11.5T360-280q0 17-11.5 28.5T320-240Zm320 0q-17 0-28.5-11.5T600-280q0-17 11.5-28.5T640-320q17 0 28.5 11.5T680-280q0 17-11.5 28.5T640-240Z\"/></svg>`,\n 'calendar-week': `<svg xmlns=\"http://www.w3.org/2000/svg\" height=\"24px\" viewBox=\"0 -960 960 960\" width=\"24px\" fill=\"#1f1f1f\"><path d=\"M160-160q-33 0-56.5-23.5T80-240v-480q0-33 23.5-56.5T160-800h640q33 0 56.5 23.5T880-720v480q0 33-23.5 56.5T800-160H160Zm360-80h100v-480H520v480Zm-180 0h100v-480H340v480Zm-180 0h100v-480H160v480Zm540 0h100v-480H700v480Z\"/></svg>`,\n 'calendar-day': `\n <svg xmlns=\"http://www.w3.org/2000/svg\" height=\"24px\" viewBox=\"0 -960 960 960\" width=\"24px\" fill=\"#1f1f1f\"><path d=\"M200-280q-33 0-56.5-23.5T120-360v-240q0-33 23.5-56.5T200-680h560q33 0 56.5 23.5T840-600v240q0 33-23.5 56.5T760-280H200Zm0-80h560v-240H200v240Zm-80-400v-80h720v80H120Zm0 640v-80h720v80H120Zm80-480v240-240Z\"/></svg>`,\n 'add': `\n <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" fill=\"currentColor\">\n <path fill-rule=\"evenodd\" d=\"M12 3.75a.75.75 0 01.75.75v6.75h6.75a.75.75 0 010 1.5h-6.75v6.75a.75.75 0 01-1.5 0v-6.75H4.5a.75.75 0 010-1.5h6.75V4.5a.75.75 0 01.75-.75z\" clip-rule=\"evenodd\" />\n </svg>`,\n 'cycle': `\n <svg xmlns=\"http://www.w3.org/2000/svg\" height=\"24px\" viewBox=\"0 -960 960 960\" width=\"24px\" fill=\"#1f1f1f\"><path d=\"M204-318q-22-38-33-78t-11-82q0-134 93-228t227-94h7l-64-64 56-56 160 160-160 160-56-56 64-64h-7q-100 0-170 70.5T240-478q0 26 6 51t18 49l-60 60ZM481-40 321-200l160-160 56 56-64 64h7q100 0 170-70.5T720-482q0-26-6-51t-18-49l60-60q22 38 33 78t11 82q0 134-93 228t-227 94h-7l64 64-56 56Z\"/></svg>\n `,\n 'dot': `\n <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" fill=\"currentColor\">\n <circle cx=\"12\" cy=\"12\" r=\"6\" />\n </svg>\n `\n};","import { Component, input, computed, inject } from '@angular/core';\nimport { DomSanitizer, SafeHtml } from '@angular/platform-browser';\nimport { ICONS, IconName } from './icon-set';\n\n@Component({\n selector: 'mglon-icon',\n standalone: true,\n template: `<div class=\"mglon-icon\" [innerHTML]=\"svgContent()\"></div>`,\n styles: [`\n :host { \n display: inline-flex; \n align-items: center; \n justify-content: center;\n line-height: 1;\n }\n .mglon-icon {\n display: flex;\n align-items: center; /* Centra verticalmente si el SVG es más pequeño */\n justify-content: center; /* Centra horizontalmente */\n width: 1em; \n height: 1em;\n min-width: 1em; /* Asegura que no se aplaste en flexbox */\n min-height: 1em;\n }\n ::ng-deep svg {\n width: 100%;\n height: 100%;\n fill: currentColor;\n /* preserveAspectRatio=\"xMidYMid meet\" es el default de SVG, \n esto asegura que se escale ajustándose al contenedor sin deformarse */\n }\n `]\n})\nexport class IconComponent {\n private sanitizer = inject(DomSanitizer);\n\n // Input requerido tipo Signal\n name = input.required<IconName>();\n\n // Computada: Busca el string y lo sanitiza para evitar ataques XSS\n svgContent = computed<SafeHtml>(() => {\n const svgString = ICONS[this.name()] || '';\n return this.sanitizer.bypassSecurityTrustHtml(svgString);\n });\n}","import { Component, input, ElementRef, inject } from '@angular/core';\nimport { CommonModule } from '@angular/common';\n\nexport type ButtonAppereance = 'solid' | 'outline' | 'ghost' | 'link';\nexport type ButtonColor = 'primary' | 'secondary' | 'error';\nexport type ButtonSize = 'xs' | 'sm' | 'md' | 'lg'\nexport type ButtonRadius = 'none' | 'sm' | 'md' | 'lg' | 'full';\n\n@Component({\n selector: 'button[mglon-button], a[mglon-button]',\n standalone: true,\n imports: [CommonModule],\n template: '<ng-content></ng-content>',\n styleUrl: './button.scss',\n host: {\n '[attr.appereance]': 'appereance()',\n '[attr.color]': 'color()',\n '[attr.size]': 'size()',\n '[attr.rounded]': 'rounded()',\n '[attr.density]': 'density()',\n '[attr.active]': 'active() || null',\n '[attr.disabled]': 'disabled() || null'\n }\n})\nexport class ButtonComponent {\n readonly appereance = input<ButtonAppereance>('solid');\n readonly color = input<ButtonColor>('primary');\n readonly size = input<ButtonSize>('md');\n readonly rounded = input<ButtonRadius>('md');\n readonly density = input<'compact' | 'comfortable'>('comfortable');\n readonly active = input<boolean>(false);\n readonly disabled = input<boolean>(false);\n\n public elementRef = inject(ElementRef);\n}\n","import { Component, input, ElementRef, inject } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { ButtonSize, ButtonColor, ButtonRadius } from '../button/button';\n\nexport type IconButtonAppereance = 'solid' | 'outline' | 'ghost';\n\n@Component({\n selector: 'button[mglon-icon-button], a[mglon-icon-button]',\n standalone: true,\n imports: [CommonModule],\n template: '<ng-content></ng-content>',\n styleUrl: './icon-button.scss',\n host: {\n '[attr.appereance]': 'appereance()',\n '[attr.color]': 'color()',\n '[attr.size]': 'size()',\n '[attr.rounded]': 'rounded()',\n '[attr.active]': 'active() || null',\n '[attr.disabled]': 'disabled() || null'\n }\n})\nexport class IconButtonComponent {\n readonly appereance = input<IconButtonAppereance>('ghost');\n readonly color = input<ButtonColor>('primary');\n readonly size = input<ButtonSize>('md');\n readonly rounded = input<ButtonRadius>('md');\n readonly active = input<boolean>(false);\n readonly disabled = input<boolean>(false);\n\n public elementRef = inject(ElementRef);\n}\n","import { Component, input, contentChildren, effect, signal } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { ButtonComponent } from '../button/button';\nimport { IconButtonComponent } from '../icon-button/icon-button';\n\nexport type ButtonGroupType = 'text' | 'icon' | 'icon-text';\nexport type ButtonGroupRadius = 'none' | 'sm' | 'md' | 'lg' | 'full';\n\n@Component({\n selector: 'mglon-button-group',\n standalone: true,\n imports: [CommonModule],\n templateUrl: './button-group.html',\n styleUrl: './button-group.scss',\n host: {\n '[attr.role]': '\"group\"',\n '[attr.rounded]': 'rounded()',\n '[attr.type]': 'type()',\n '[attr.orientation]': 'orientation()',\n '[attr.appereance]': 'appereance()',\n '[attr.density]': 'density()',\n '[attr.disabled]': 'disabled() || null'\n }\n})\nexport class ButtonGroupComponent {\n readonly type = input<ButtonGroupType>('text');\n readonly density = input<'compact' | 'comfortable'>('comfortable');\n readonly appereance = input<'solid' | 'outline' | 'ghost' | 'link'>('solid');\n readonly rounded = input<ButtonGroupRadius>('full');\n readonly orientation = input<'horizontal' | 'vertical'>('horizontal');\n readonly disabled = input<boolean>(false);\n\n // Queries for projected content\n readonly buttons = contentChildren(ButtonComponent);\n readonly iconButtons = contentChildren(IconButtonComponent);\n\n readonly indicatorStyle = signal<{ [key: string]: string }>({});\n\n constructor() {\n // Effect to update selection indicator position\n effect(() => {\n const allButtons = [...this.buttons(), ...this.iconButtons()];\n const activeButton = allButtons.find(btn => btn.active() && !btn.disabled());\n\n if (activeButton && activeButton.elementRef) {\n const element = activeButton.elementRef.nativeElement as HTMLElement;\n\n // Calculate style based on the active element's position and size\n const rounded = this.rounded();\n\n this.indicatorStyle.set({\n 'width': `${element.offsetWidth}px`,\n 'height': `${element.offsetHeight}px`,\n 'transform': `translate(${element.offsetLeft}px, ${element.offsetTop}px)`,\n 'opacity': '1'\n });\n } else {\n this.indicatorStyle.set({ 'opacity': '0' });\n }\n });\n\n // Effect to propagate disabled state to child buttons\n effect(() => {\n const isGroupDisabled = this.disabled();\n const allButtons = [...this.buttons(), ...this.iconButtons()];\n\n allButtons.forEach(btn => {\n if (btn.elementRef) {\n const element = btn.elementRef.nativeElement as HTMLElement;\n if (isGroupDisabled) {\n element.setAttribute('disabled', '');\n } else if (!btn.disabled()) {\n element.removeAttribute('disabled');\n }\n }\n });\n });\n }\n}\n","<div class=\"selection-indicator\" [style]=\"indicatorStyle()\"></div>\n<ng-content></ng-content>","import { Component, input, output, signal, inject, PLATFORM_ID, ElementRef, OnDestroy, computed } from '@angular/core';\nimport { CommonModule, isPlatformBrowser } from '@angular/common';\nimport { CalendarStore } from '../../../core/store/calendar.store';\nimport { IconComponent } from '../../../shared/components/icon/icon';\nimport { IconName } from '../../../shared/components/icon/icon-set';\nimport { ButtonGroupComponent } from '../../../shared/components/buttons/button-group/button-group';\nimport { ButtonComponent } from '../../../shared/components/buttons/button/button';\nimport { IconButtonComponent } from '../../../shared/components/buttons/icon-button/icon-button';\nimport { ViewMode } from '../../../core/models/config-schedule';\n\n@Component({\n selector: 'mglon-header-schedule',\n standalone: true,\n imports: [CommonModule, IconComponent, ButtonGroupComponent, ButtonComponent, IconButtonComponent],\n templateUrl: './header-schedule.html',\n styleUrl: './header-schedule.scss',\n})\nexport class HeaderSchedule implements OnDestroy {\n private platformId = inject(PLATFORM_ID);\n private elementRef = inject(ElementRef);\n private resizeObserver?: ResizeObserver;\n private calendarStore = inject(CalendarStore);\n\n // Header UI Configuration from Store\n readonly buttonGroupAppearance = computed(() => this.calendarStore.uiConfig().header.buttonGroup.appearance);\n readonly buttonGroupRounded = computed(() => this.calendarStore.uiConfig().header.buttonGroup.rounded);\n readonly buttonGroupDensity = computed(() => this.calendarStore.uiConfig().header.buttonGroup.density);\n readonly iconButtonRounded = computed(() => this.calendarStore.uiConfig().header.iconButtons.rounded);\n readonly todayButtonRounded = computed(() => this.calendarStore.uiConfig().header.todayButton.rounded);\n readonly todayButtonAppearance = computed(() => this.calendarStore.uiConfig().header.todayButton.appearance);\n\n // Inputs\n readonly title = input.required<string>();\n readonly activeView = input.required<ViewMode>();\n readonly views = input<ViewMode[]>(['month', 'week', 'day', 'resource']);\n readonly editable = input<boolean>(true);\n\n // Outputs\n readonly next = output<void>();\n readonly prev = output<void>();\n readonly today = output<void>();\n readonly viewChange = output<ViewMode>();\n readonly add = output<void>();\n\n readonly viewIcons: Record<ViewMode, IconName> = {\n 'month': 'calendar-month',\n 'week': 'calendar-week',\n 'day': 'calendar-day',\n 'resource': 'calendar-week', // Fallback\n 'list': 'calendar-month' // Fallback\n };\n\n // Responsive signal to track container size\n readonly isSmallScreen = signal<boolean>(false);\n\n constructor() {\n if (isPlatformBrowser(this.platformId)) {\n // Use ResizeObserver to watch the component's own width\n this.resizeObserver = new ResizeObserver((entries) => {\n for (const entry of entries) {\n const width = entry.contentRect.width;\n // Match the 'sm' breakpoint (767.98px)\n this.isSmallScreen.set(width <= 767.98);\n }\n });\n\n // Start observing the host element\n this.resizeObserver.observe(this.elementRef.nativeElement);\n }\n }\n\n ngOnDestroy(): void {\n // Clean up the observer\n this.resizeObserver?.disconnect();\n }\n}\n","<div class=\"mglon-header\">\n\n <!-- Row 2: Navigation + Title -->\n <div class=\"mglon-header__nav\">\n <div class=\"mglon-header__nav__actions\">\n <button mglon-icon-button [rounded]=\"iconButtonRounded()\" (click)=\"prev.emit()\">\n <mglon-icon name=\"chevron-left\"></mglon-icon>\n </button>\n <button mglon-button [appereance]=\"todayButtonAppearance()\" [rounded]=\"todayButtonRounded()\"\n (click)=\"today.emit()\">\n Today\n </button>\n <button mglon-icon-button [rounded]=\"iconButtonRounded()\" (click)=\"next.emit()\">\n <mglon-icon name=\"chevron-right\"></mglon-icon>\n </button>\n </div>\n\n <h2 class=\"mglon-header__title\">{{ title() }}</h2>\n </div>\n\n <div class=\"mglon-header__actions\">\n @if (isSmallScreen()) {\n <!-- Icon buttons for small screens -->\n <mglon-button-group type=\"icon\" [disabled]=\"false\" [appereance]=\"buttonGroupAppearance()\"\n [rounded]=\"buttonGroupRounded()\" [density]=\"buttonGroupDensity()\">\n @for (view of views(); track view) {\n <button mglon-icon-button appereance=\"ghost\" [active]=\"activeView() === view\" (click)=\"viewChange.emit(view)\">\n <mglon-icon [name]=\"viewIcons[view]\" size=\"20px\"></mglon-icon>\n </button>\n }\n </mglon-button-group>\n } @else {\n <!-- Text buttons for larger screens -->\n <mglon-button-group type=\"text\" [disabled]=\"false\" [appereance]=\"buttonGroupAppearance()\"\n [rounded]=\"buttonGroupRounded()\" [density]=\"buttonGroupDensity()\">\n @for (view of views(); track view) {\n <button mglon-button appereance=\"ghost\" [active]=\"activeView() === view\" (click)=\"viewChange.emit(view)\">\n {{ view }}\n </button>\n }\n </mglon-button-group>\n }\n\n @if (editable()) {\n <button mglon-icon-button [rounded]=\"iconButtonRounded()\" (click)=\"add.emit()\">\n <mglon-icon name=\"add\"></mglon-icon>\n </button>\n }\n </div>\n\n</div>","import { Component } from '@angular/core';\n\n@Component({\n selector: 'mglon-month-header',\n imports: [],\n templateUrl: './month-header.html',\n styleUrl: './month-header.scss',\n})\nexport class MonthHeader {\n\n daysOfWeek: string[] = ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'];\n\n}\n","<div class=\"mglon-month-header-container\">\n <!-- Spacer to align with toggle column -->\n <div class=\"mglon-month-header__spacer\"></div>\n\n <div class=\"mglon-month-header\">\n @for (day of daysOfWeek; track $index) {\n <div>{{ day }}</div>\n }\n </div>\n</div>","import { Component, computed, input } from '@angular/core';\nimport { CalendarDay } from \"../../../shared/helpers\";\n\n@Component({\n selector: 'mglon-month-day-indicator',\n imports: [],\n templateUrl: './month-day-indicator.html',\n styleUrl: './month-day-indicator.scss',\n})\nexport class MonthDayIndicator {\n readonly day = input.required<CalendarDay>();\n\n isToday = computed(() => this.day().date.toDateString() === new Date().toDateString());\n}\n","<div class=\"mglon-month-day-indicator__container\">\n <span [class.today]=\"isToday()\">{{ day().day }}</span>\n</div>","import { Component, computed, inject, input } from '@angular/core';\nimport { CalendarDay } from '../../../shared/helpers';\nimport { MonthDayIndicator } from \"../month-day-indicator/month-day-indicator\";\nimport { CalendarStore } from '../../../core/store/calendar.store';\n\n@Component({\n selector: 'mglon-month-cell',\n standalone: true,\n imports: [MonthDayIndicator],\n templateUrl: './month-cell.html',\n styleUrl: './month-cell.scss',\n})\nexport class MonthCell {\n private readonly store = inject(CalendarStore);\n\n // Input for the day data\n readonly day = input.required<CalendarDay>();\n\n /** Whether a slot is currently being dragged or resized over this cell */\n readonly isDragOver = computed(() => {\n const dragState = this.store.dragState();\n const resizeState = this.store.resizeState();\n\n const hoverDate = dragState.hoverDate || resizeState.hoverDate;\n if (!hoverDate) return false;\n\n return hoverDate.getTime() === this.day().date.getTime();\n });\n}\n","<div class=\"mglon-month-cell\" [class.mglon-month-cell--other-month]=\"!day().isCurrentMonth\"\n [class.mglon-month-cell--current-month]=\"day().isCurrentMonth\" [class.mglon-month-cell--drag-over]=\"isDragOver()\"\n [attr.data-mglon-date]=\"day().date.getTime()\">\n <mglon-month-day-indicator [day]=\"day()\"></mglon-month-day-indicator>\n</div>","import { Directive, input, computed, effect, ElementRef, Renderer2, inject } from '@angular/core';\n\nexport type ZigzagSide = 'top' | 'right' | 'bottom' | 'left';\n\n@Directive({\n selector: '[mglonZigzag]',\n standalone: true,\n host: {\n '[style.--mglon-zigzag-size]': 'zigzagSize()'\n }\n})\nexport class ZigzagDirective {\n /**\n * Side(s) to apply the zigzag effect to.\n * Can be a single side string or an array of sides.\n */\n readonly sides = input.required<ZigzagSide | ZigzagSide[] | '' | null | undefined>({ alias: 'mglonZigzag' });\n\n /**\n * Size of the zigzag teeth (e.g., '10px', '0.5em').\n * Defaults to '5px' if not specified.\n */\n readonly zigzagSize = input<string>('5px');\n\n private elementRef = inject(ElementRef);\n private renderer = inject(Renderer2);\n\n constructor() {\n effect(() => {\n const sidesInput = this.sides();\n const sides = Array.isArray(sidesInput) ? sidesInput : [sidesInput];\n\n // Clear all existing zigzag classes first\n const allSides: ZigzagSide[] = ['top', 'right', 'bottom', 'left'];\n allSides.forEach(side => {\n this.renderer.removeClass(this.elementRef.nativeElement, `mglon-zigzag-${side}`);\n });\n\n // Apply classes for requested sides\n sides.forEach(side => {\n if (side && allSides.includes(side as ZigzagSide)) {\n this.renderer.addClass(this.elementRef.nativeElement, `mglon-zigzag-${side}`);\n }\n });\n });\n }\n}\n","import { Directive, input, output, effect, ElementRef, Renderer2, inject, HostListener, OnDestroy } from '@angular/core';\nimport { DOCUMENT } from '@angular/common';\nimport { CalendarStore } from '../../core/store/calendar.store';\n\nexport type ResizeSide = 'top' | 'right' | 'bottom' | 'left';\nexport interface ResizeEvent {\n side: ResizeSide;\n event: MouseEvent;\n}\n\n@Directive({\n selector: '[mglonResizable]',\n standalone: true,\n host: {\n '[style.--mglon-resize-handle-size]': 'handleSize() + \"px\"'\n }\n})\nexport class ResizableDirective implements OnDestroy {\n /**\n * Sides to allow resizing on.\n */\n readonly sides = input.required<ResizeSide | ResizeSide[] | '' | null | undefined>({ alias: 'mglonResizable' });\n\n /**\n * Size of the resize handle area in pixels.\n */\n readonly handleSize = input<number>(6);\n\n /**\n * Emitted when a resize interaction starts (mousedown on handle).\n */\n readonly resizeStart = output<ResizeEvent>();\n\n private elementRef = inject(ElementRef);\n private renderer = inject(Renderer2);\n private store = inject(CalendarStore);\n\n private destroyMouseDownListener?: () => void;\n\n constructor() {\n effect(() => {\n const sidesInput = this.sides();\n const sides = Array.isArray(sidesInput) ? sidesInput : [sidesInput];\n\n const allSides: ResizeSide[] = ['top', 'right', 'bottom', 'left'];\n allSides.forEach(side => {\n this.renderer.removeClass(this.elementRef.nativeElement, `mglon-resizable-${side}`);\n });\n\n sides.forEach(side => {\n if (side && allSides.includes(side as ResizeSide)) {\n this.renderer.addClass(this.elementRef.nativeElement, `mglon-resizable-${side}`);\n }\n });\n });\n }\n\n @HostListener('mouseenter')\n onMouseEnter() {\n if (this.destroyMouseDownListener) {\n return;\n }\n\n this.destroyMouseDownListener = this.renderer.listen(\n this.elementRef.nativeElement,\n 'mousedown',\n (event: MouseEvent) => this.handleMouseDown(event)\n );\n }\n\n @HostListener('mouseleave')\n onMouseLeave() {\n if (this.destroyMouseDownListener) {\n this.destroyMouseDownListener();\n this.destroyMouseDownListener = undefined;\n }\n }\n\n ngOnDestroy() {\n this.cleanupListeners();\n }\n\n private cleanupListeners() {\n if (this.destroyMouseDownListener) {\n this.destroyMouseDownListener();\n this.destroyMouseDownListener = undefined;\n }\n }\n\n private handleMouseDown(event: MouseEvent) {\n const sidesInput = this.sides();\n const activeSides = Array.isArray(sidesInput) ? sidesInput : [sidesInput];\n\n const rect = this.elementRef.nativeElement.getBoundingClientRect();\n const x = event.clientX - rect.left;\n const y = event.clientY - rect.top;\n const w = rect.width;\n const h = rect.height;\n const handle = this.handleSize();\n\n let clickedSide: ResizeSide | null = null;\n\n if (activeSides.includes('left') && x <= handle) {\n clickedSide = 'left';\n } else if (activeSides.includes('right') && x >= w - handle) {\n clickedSide = 'right';\n } else if (activeSides.includes('top') && y <= handle) {\n clickedSide = 'top';\n } else if (activeSides.includes('bottom') && y >= h - handle) {\n clickedSide = 'bottom';\n }\n\n if (clickedSide) {\n if (this.store.interactionMode() !== 'none' && this.store.interactionMode() !== 'dragging') {\n // Only allow resizing if nothing else is happening\n // Note: we might be in 'dragging' mode because of pointerdown already firing on MonthSlot\n // So we might need to override it.\n return;\n }\n\n event.preventDefault();\n event.stopPropagation();\n this.store.setInteractionMode('resizing');\n this.resizeStart.emit({ side: clickedSide, event });\n\n // Add global mouseup to reset interaction mode\n const onUp = () => {\n this.store.setInteractionMode('none');\n window.removeEventListener('mouseup', onUp);\n };\n window.addEventListener('mouseup', onUp);\n }\n }\n}\n","import { Directive, ElementRef, inject, input, effect, Renderer2, ViewContainerRef } from '@angular/core';\nimport { IconComponent } from '../../../shared/components/icon/icon';\n\n@Directive({\n selector: '[mglonMonthRecurrence]',\n standalone: true\n})\nexport class MonthRecurrenceDirective {\n private el = inject(ElementRef);\n private vcr = inject(ViewContainerRef);\n\n /** Whether the event is recurrent */\n isRecurrent = input<boolean>(false, { alias: 'mglonMonthRecurrence' });\n\n constructor() {\n effect(() => {\n if (this.isRecurrent()) {\n this.addIcon();\n } else {\n this.removeIcon();\n }\n });\n }\n\n private addIcon(): void {\n // Check if icon already exists to avoid duplicates\n if (this.el.nativeElement.querySelector('.mglon-month-slot__recurrence-icon')) {\n return;\n }\n\n const componentRef = this.vcr.createComponent(IconComponent);\n componentRef.setInput('name', 'cycle');\n\n // Get the DOM element of the icon\n const iconElement = componentRef.location.nativeElement;\n iconElement.classList.add('mglon-month-slot__recurrence-icon');\n\n // Insert before the text content\n this.el.nativeElement.prepend(iconElement);\n }\n\n private removeIcon(): void {\n const icon = this.el.nativeElement.querySelector('.mglon-month-slot__recurrence-icon');\n if (icon) {\n icon.remove();\n }\n }\n}\n","import { Directive, ElementRef, inject, input, effect, ViewContainerRef } from '@angular/core';\nimport { IconComponent } from '../../../shared/components/icon/icon';\n\n@Directive({\n selector: '[mglonAllDay]',\n standalone: true\n})\nexport class AllDayDirective {\n private el = inject(ElementRef);\n private vcr = inject(ViewContainerRef);\n\n /** Whether the event is all-day */\n isAllDay = input<boolean>(false, { alias: 'mglonAllDay' });\n\n /** Color for the dot icon */\n dotColor = input<string>('');\n\n constructor() {\n effect(() => {\n if (this.isAllDay()) {\n this.addIcon();\n // The host binding in MonthSlot will handle most styling, \n // but we add a class for extra specificity if needed.\n this.el.nativeElement.classList.add('mglon-event--all-day');\n } else {\n this.removeIcon();\n this.el.nativeElement.classList.remove('mglon-event--all-day');\n }\n });\n\n // Handle dynamic color changes for the dot\n effect(() => {\n const color = this.dotColor();\n const icon = this.el.nativeElement.querySelector('.mglon-event__all-day-icon');\n if (icon && color) {\n icon.style.color = color;\n }\n });\n }\n\n private addIcon(): void {\n if (this.el.nativeElement.querySelector('.mglon-event__all-day-icon')) {\n return;\n }\n\n const componentRef = this.vcr.createComponent(IconComponent);\n componentRef.setInput('name', 'dot');\n\n const iconElement = componentRef.location.nativeElement;\n iconElement.classList.add('mglon-event__all-day-icon');\n\n if (this.dotColor()) {\n iconElement.style.color = this.dotColor();\n }\n\n // Insert before the title/text\n this.el.nativeElement.prepend(iconElement);\n }\n\n private removeIcon(): void {\n const icon = this.el.nativeElement.querySelector('.mglon-event__all-day-icon');\n if (icon) {\n icon.remove();\n }\n }\n}\n","import { Component, computed, inject, input } from '@angular/core'\nimport { SlotModel } from '../../../core/models/slot.model'\nimport { CalendarStore } from '../../../core/store/calendar.store'\nimport { ZigzagDirective, ZigzagSide } from '../../../shared/directives/zigzag.directive'\nimport { ResizableDirective, ResizeEvent, ResizeSide } from '../../../shared/directives/resizable.directive'\nimport { DragInteractionData, ResizeInteractionData } from '../../../core/models/interaction.model'\nimport { EventSlotRadius } from '../../../core/models/ui-config'\nimport { addDays, differenceInCalendarDays } from 'date-fns'\nimport { MonthRecurrenceDirective } from '../directives/month-recurrence.directive'\nimport { AllDayDirective } from '../directives/all-day.directive'\n\n/** Maps EventSlotRadius to CSS variable names */\nconst RADIUS_VAR_MAP: Record<EventSlotRadius, string> = {\n 'none': '0',\n 'sm': 'var(--mglon-schedule-radius-sm)', // Small fixed value for subtle rounding on slots\n 'full': 'var(--mglon-schedule-radius-full)'\n}\n\nimport { generateAdaptiveColorScheme, getEventColor } from '../../../shared/helpers/color.helpers'\n\n@Component({\n selector: 'mglon-month-slot',\n imports: [ZigzagDirective, ResizableDirective, MonthRecurrenceDirective, AllDayDirective],\n templateUrl: './month-slot.html',\n styleUrl: './month-slot.scss',\n host: {\n '[style.position]': '\"absolute\"',\n '[style.top.px]': 'slot().position.top',\n '[style.left.%]': 'slot().position.left',\n '[style.width.%]': 'slot().position.width',\n '[style.--slot-width.%]': 'slot().position.width',\n '[style.height.px]': 'slot().position.height',\n '[style.z-index]': 'slot().zIndex',\n '[style.--slot-bg]': 'isAllDay() ? \"var(--mglon-all-day-bg, var(--mglon-schedule-neutral-200))\" : colorScheme().base',\n '[style.--slot-hover]': 'isAllDay() ? \"var(--mglon-all-day-hover, var(--mglon-schedule-neutral-300))\" : colorScheme().hover',\n '[style.--slot-text]': 'isAllDay() ? \"var(--mglon-all-day-text, var(--mglon-schedule-on-surface))\" : colorScheme().text',\n '[style.--slot-text-hover]': 'isAllDay() ? \"var(--mglon-all-day-text-hover, var(--mglon-schedule-on-surface))\" : colorScheme().textHover',\n '[style.--slot-radius]': 'slotRadius()',\n '[attr.data-slot-type]': 'slot().type',\n '[class.mglon-month-slot--first]': 'slot().type === \"first\"',\n '[class.mglon-month-slot--last]': 'slot().type === \"last\"',\n '[class.mglon-month-slot--middle]': 'slot().type === \"middle\"',\n '[class.mglon-month-slot--full]': 'slot().type === \"full\"',\n '[class.mglon-event--all-day]': 'isAllDay()',\n '[class.mglon-month-slot--dragging]': 'isDragging()',\n '[class.mglon-month-slot--idle]': '!isDragging()',\n '[class.mglon-month-slot--hovered]': 'isHovered()',\n }\n})\nexport class MonthSlot {\n private readonly store = inject(CalendarStore)\n\n readonly slot = input.required<SlotModel>()\n\n /** Whether this specific event is being dragged */\n readonly isDragging = computed(() => this.store.dragState().eventId === this.slot().idEvent)\n\n /** Whether this event is currently hovered globally */\n readonly isHovered = computed(() => this.store.hoveredEventId() === this.slot().idEvent)\n\n /**\n * Gets the event data from the store using the slot's event ID.\n */\n readonly event = computed(() => {\n return this.store.getEvent(this.slot().idEvent)\n })\n\n /** Whether this event is part of a recurrence series */\n readonly isRecurrent = computed(() => {\n const e = this.event()\n return e?.type === 'event' && e.isRecurrenceInstance === true\n })\n\n /** Whether the event is all-day */\n readonly isAllDay = computed(() => {\n return this.event()?.isAllDay === true\n })\n\n /**\n * Display title for the slot.\n */\n readonly title = computed(() => {\n return this.event()?.title ?? ''\n })\n\n /**\n * Complete color scheme calculation based on event type\n */\n readonly colorScheme = computed(() => {\n // 1. Resolve base raw color\n const rawColor = this.rawColor();\n\n // 2. Generate all adaptive variants\n const scheme = generateAdaptiveColorScheme(rawColor);\n\n // 3. Select variant based on configuration and event type\n const useDynamic = this.store.uiConfig().grid.useDynamicColors;\n\n if (!useDynamic) {\n return scheme.raw;\n }\n\n return this.isRecurrent() ? scheme.pastel : scheme.vivid;\n })\n\n /**\n * Raw color resolved for the event (before adaptive variants)\n */\n readonly rawColor = computed(() => {\n return getEventColor(\n { color: this.slot().color, resourceId: this.event()?.resourceId },\n (id) => this.store.getResource(id),\n this.store.uiConfig().grid.eventSlots.color || '#1a73e8'\n )\n })\n\n /**\n * Border radius from uiConfig, mapped to CSS variable.\n */\n readonly slotRadius = computed(() => {\n const rounded = this.store.uiConfig().grid.eventSlots.rounded\n return RADIUS_VAR_MAP[rounded]\n })\n\n /**\n * Determines which sides get zigzag effect based on slot type.\n * - 'first': right side (continues to next week)\n * - 'last': left side (comes from previous week)\n * - 'middle': both sides (spans entire week)\n * - 'full': no zigzag (complete within week)\n */\n readonly zigzagSides = computed<ZigzagSide[]>(() => {\n const type = this.slot().type\n switch (type) {\n case 'first':\n return ['right']\n case 'last':\n return ['left']\n case 'middle':\n return ['left', 'right']\n default:\n return []\n }\n })\n\n /**\n * Determines which sides are resizable.\n * Only sides without zigzag are resizable, and only if resizableEvents is enabled.\n */\n readonly resizableSides = computed<ResizeSide[]>(() => {\n // Check global config from store\n if (!this.store.config().resizableEvents) {\n return []\n }\n\n // Check resource-specific config if available\n const event = this.event()\n if (event?.resourceId) {\n const resource = this.store.getResource(event.resourceId)\n if (resource && resource.resizableEvents === false) {\n return []\n }\n }\n\n const type = this.slot().type\n switch (type) {\n case 'first':\n return ['left']\n case 'last':\n return ['right']\n case 'middle':\n return []\n case 'full':\n return ['left', 'right']\n default:\n return []\n }\n })\n\n private dragDelayTimer?: any;\n private readonly DRAG_DELAY = 150; // ms\n private readonly DRAG_THRESHOLD = 5; // px\n private startPointerPos = { x: 0, y: 0 };\n\n private clickTimer?: any;\n private ignoreNextClick = false;\n\n onPointerDown(event: PointerEvent) {\n // Only handle primary button and if no other interaction is active\n if (event.button !== 0 || this.store.interactionMode() !== 'none') return;\n\n // Check if we clicked a resize handle\n const target = event.currentTarget as HTMLElement;\n const rect = target.getBoundingClientRect();\n const x = event.clientX - rect.left;\n const sides = this.resizableSides();\n const handleSize = 6; // Matching ResizableDirective default\n\n if (sides.includes('left') && x <= handleSize) return;\n if (sides.includes('right') && x >= rect.width - handleSize) return;\n\n // Stop propagation immediately to prevent background selection from seeing this event\n event.stopPropagation();\n\n this.startPointerPos = { x: event.clientX, y: event.clientY };\n\n // Lock the mutex immediately to block other potential listeners (like Selection)\n this.store.setInteractionMode('dragging');\n\n this.dragDelayTimer = setTimeout(() => {\n this.initiateDrag(event);\n }, this.DRAG_DELAY);\n\n // Bind movement and release to handle cancellation\n const onMove = (e: PointerEvent) => this.onGlobalMove(e);\n const onUp = (e: PointerEvent) => {\n this.onGlobalUp(e);\n window.removeEventListener('pointermove', onMove);\n window.removeEventListener('pointerup', onUp);\n window.removeEventListener('pointercancel', onUp);\n };\n\n window.addEventListener('pointermove', onMove);\n window.addEventListener('pointerup', onUp);\n window.addEventListener('pointercancel', onUp);\n }\n\n private initiateDrag(event: PointerEvent) {\n const target = event.currentTarget as HTMLElement || event.target as HTMLElement;\n if (target.setPointerCapture) {\n target.setPointerCapture(event.pointerId);\n }\n\n // Calculate grabDate (exact day clicked)\n const rect = target.getBoundingClientRect();\n const clickX = this.startPointerPos.x - rect.left;\n const slotWidth = rect.width;\n\n const daysSpan = differenceInCalendarDays(this.slot().end, this.slot().start) + 1;\n const dayOffset = Math.max(0, Math.min(Math.floor((clickX / slotWidth) * daysSpan), daysSpan - 1));\n const grabDate = addDays(this.slot().start, dayOffset);\n\n this.store.setDragStart(this.slot().idEvent, grabDate);\n this.store.setInteractionMode('dragging');\n\n // Dispatch dragStart interaction\n this.store.dispatchInteraction('dragStart', this.slot().idEvent, {\n event: this.event()!,\n slotId: this.slot().id,\n data: {\n grabDate,\n hoverDate: null\n } as DragInteractionData\n });\n }\n\n private onGlobalMove(event: PointerEvent) {\n if (this.store.dragState().eventId) { // Check if we are actually dragging (timer finished)\n this.onPointerMove(event);\n } else if (this.dragDelayTimer) {\n // Check if we moved too much before the delay finished\n const dist = Math.sqrt(\n Math.pow(event.clientX - this.startPointerPos.x, 2) +\n Math.pow(event.clientY - this.startPointerPos.y, 2)\n );\n\n if (dist > this.DRAG_THRESHOLD) {\n this.store.setInteractionMode('none'); // Release mutex if it was a scroll/swipe\n this.cancelDragDelay();\n }\n }\n }\n\n private onGlobalUp(event: PointerEvent) {\n this.cancelDragDelay();\n if (this.store.dragState().eventId) {\n this.onPointerUp(event);\n // Occlude the next click event that follows pointerup\n this.ignoreNextClick = true;\n } else {\n // It was just a click or a cancelled drag, release mutex\n this.store.setInteractionMode('none');\n }\n }\n\n private cancelDragDelay() {\n if (this.dragDelayTimer) {\n clearTimeout(this.dragDelayTimer);\n this.dragDelayTimer = undefined;\n }\n }\n\n private onPointerMove(event: PointerEvent) {\n if (!this.isDragging()) return;\n\n // Detect which cell we are over using coordinates\n const element = document.elementFromPoint(event.clientX, event.clientY);\n const cell = element?.closest('.mglon-month-cell') as HTMLElement | null;\n\n if (cell) {\n const timestamp = cell.getAttribute('data-mglon-date');\n if (timestamp) {\n const hoverDate = new Date(parseInt(timestamp, 10));\n this.store.setDragHover(hoverDate)\n this.store.updateDraggedEventPosition()\n\n // Dispatch drag interaction event\n this.store.dispatchInteraction('drag', this.slot().idEvent, {\n event: this.event()!,\n slotId: this.slot().id,\n data: {\n grabDate: this.store.dragState().grabDate!,\n hoverDate: hoverDate\n } as DragInteractionData\n })\n }\n }\n }\n\n private onPointerUp(event: PointerEvent) {\n // Dispatch dragEnd interaction before clearing state\n const dragState = this.store.dragState();\n this.store.dispatchInteraction('dragEnd', this.slot().idEvent, {\n event: this.event()!,\n slotId: this.slot().id,\n data: {\n grabDate: dragState.grabDate!,\n hoverDate: dragState.hoverDate\n } as DragInteractionData\n });\n\n this.store.setInteractionMode('none');\n this.store.clearDragState();\n }\n\n onResizeStart(event: ResizeEvent) {\n this.store.setResizeStart(this.slot().idEvent, event.side);\n\n // Dispatch resizeStart interaction\n this.store.dispatchInteraction('resizeStart', this.slot().idEvent, {\n event: this.event()!,\n slotId: this.slot().id,\n data: {\n side: event.side,\n date: this.slot().start // Basic reference date for start\n } as ResizeInteractionData\n });\n\n // Bind movement and release for real-time resize feedback\n // Similar to drag-and-drop, we use global listeners\n const onMove = (e: PointerEvent) => this.onGlobalResizeMove(e);\n const onUp = () => {\n // Occlude the next click event\n this.ignoreNextClick = true;\n\n // Dispatch resizeEnd interaction before clearing state\n const resizeState = this.store.resizeState();\n this.store.dispatchInteraction('resizeEnd', this.slot().idEvent, {\n event: this.event()!,\n slotId: this.slot().id,\n data: {\n side: resizeState.side!,\n date: resizeState.hoverDate || (resizeState.side === 'left' ? this.slot().start : this.slot().end)\n } as ResizeInteractionData\n });\n\n this.store.clearResizeState();\n this.store.setInteractionMode('none');\n window.removeEventListener('pointermove', onMove);\n window.removeEventListener('pointerup', onUp);\n window.removeEventListener('pointercancel', onUp);\n };\n\n window.addEventListener('pointermove', onMove);\n window.addEventListener('pointerup', onUp);\n window.addEventListener('pointercancel', onUp);\n }\n\n private onGlobalResizeMove(event: PointerEvent) {\n if (this.store.interactionMode() !== 'resizing') return;\n\n // Detect which cell we are over using coordinates\n const element = document.elementFromPoint(event.clientX, event.clientY);\n const cell = element?.closest('.mglon-month-cell') as HTMLElement | null;\n\n if (cell) {\n const timestamp = cell.getAttribute('data-mglon-date');\n if (timestamp) {\n const hoverDate = new Date(parseInt(timestamp, 10));\n this.store.setResizeHover(hoverDate)\n this.store.updateResizedEvent()\n\n // Dispatch resize interaction event\n this.store.dispatchInteraction('resize', this.slot().idEvent, {\n event: this.event()!,\n slotId: this.slot().id,\n data: {\n side: this.store.resizeState().side!,\n date: hoverDate\n } as ResizeInteractionData\n })\n }\n }\n }\n\n onMouseEnter() {\n if (this.store.interactionMode() !== 'none') return;\n this.store.setHoveredEvent(this.slot().idEvent);\n this.store.dispatchInteraction('mouseenter', this.slot().idEvent, {\n event: this.event()!,\n slotId: this.slot().id\n });\n }\n\n onMouseLeave() {\n if (this.store.interactionMode() !== 'none') return;\n this.store.setHoveredEvent(null);\n this.store.dispatchInteraction('mouseleave', this.slot().idEvent, {\n event: this.event()!,\n slotId: this.slot().id\n });\n }\n\n onClick(event: MouseEvent) {\n event.stopPropagation();\n\n // Prevent click if we just finished a drag or resize\n if (this.ignoreNextClick) {\n this.ignoreNextClick = false;\n return;\n }\n\n // Double click detection: if another click arrives within 250ms, cancel this one\n if (this.clickTimer) {\n clearTimeout(this.clickTimer);\n this.clickTimer = undefined;\n return;\n }\n\n this.clickTimer = setTimeout(() => {\n this.clickTimer = undefined;\n this.store.dispatchInteraction('click', this.slot().idEvent, {\n event: this.event()!,\n slotId: this.slot().id,\n originalEvent: event\n });\n }, 250);\n }\n\n onDblClick(event: MouseEvent) {\n event.stopPropagation();\n\n if (this.clickTimer) {\n clearTimeout(this.clickTimer);\n this.clickTimer = undefined;\n }\n\n this.store.dispatchInteraction('dblclick', this.slot().idEvent, {\n event: this.event()!,\n slotId: this.slot().id,\n originalEvent: event\n });\n }\n\n onContextMenu(event: MouseEvent) {\n event.preventDefault();\n event.stopPropagation();\n this.store.dispatchInteraction('contextmenu', this.slot().idEvent, {\n event: this.event()!,\n slotId: this.slot().id,\n originalEvent: event\n });\n }\n}\n","<!-- Renderizado de slots recurrentes (Se eliminan los eventos de resize y drag) -->\n@if(isRecurrent()) {\n<div class=\"mglon-month-slot__inner\" [mglonZigzag]=\"zigzagSides()\" (mouseenter)=\"onMouseEnter()\"\n (mouseleave)=\"onMouseLeave()\" (click)=\"onClick($event)\" (dblclick)=\"onDblClick($event)\"\n (contextmenu)=\"onContextMenu($event)\">\n <span class=\"mglon-month-slot__title\" [mglonMonthRecurrence]=\"isRecurrent()\" [mglonAllDay]=\"isAllDay()\"\n [dotColor]=\"rawColor()\">{{ title() }}</span>\n</div>\n}\n\n<!-- Renderizado de slots no recurrentes -->\n@else {\n<div class=\"mglon-month-slot__inner\" [mglonZigzag]=\"zigzagSides()\" [mglonResizable]=\"resizableSides()\"\n (resizeStart)=\"onResizeStart($event)\" (pointerdown)=\"onPointerDown($event)\" (mouseenter)=\"onMouseEnter()\"\n (mouseleave)=\"onMouseLeave()\" (click)=\"onClick($event)\" (dblclick)=\"onDblClick($event)\"\n (contextmenu)=\"onContextMenu($event)\">\n <span class=\"mglon-month-slot__title\" [mglonAllDay]=\"isAllDay()\" [dotColor]=\"rawColor()\">{{ title() }}</span>\n</div>\n}","import { Component, input } from '@angular/core';\nimport { SlotModel } from '../../../core/models/slot.model';\nimport { MonthSlot } from '../month-slot/month-slot';\n\n@Component({\n selector: 'mglon-month-week-events-container',\n imports: [MonthSlot],\n templateUrl: './month-week-events-container.html',\n styleUrl: './month-week-events-container.scss',\n host: {\n '[style.position]': '\"relative\"',\n '[style.width]': '\"100%\"',\n '[style.height]': '\"100%\"',\n }\n})\nexport class MonthWeekEventsContainer {\n readonly slots = input.required<SlotModel[]>();\n}\n","<div class=\"mglon-month-week-events-container\">\n @for (slot of slots(); track slot.id) {\n <mglon-month-slot [slot]=\"slot\"></mglon-month-slot>\n }\n</div>","import { DateRange } from \"../models/date-range.model\";\nimport { AnyEvent } from \"../models/event.model\";\nimport { SlotModel } from \"../models/slot.model\";\n\nexport abstract class EventRendererAdapter {\n abstract createSlots(events: AnyEvent[]): SlotModel[];\n abstract filterEvents(events: AnyEvent[], dateRange: DateRange): AnyEvent[];\n}","import {\n SLOT_HEIGHT,\n SLOT_GAP\n} from '../../../config/default-schedule-config'\n\n/**\n * Configuration for slot positioning in month view.\n */\nexport interface SlotConfig {\n /** Height of each slot row in pixels */\n slotHeight: number\n /** Vertical gap between slots in pixels */\n slotGap: number\n}\n\nexport const DEFAULT_SLOT_CONFIG: SlotConfig = {\n slotHeight: SLOT_HEIGHT,\n slotGap: SLOT_GAP\n}\n\n/**\n * Calculates the minimum height required to display a given number of event rows.\n * \n * Formula: (n * slotHeight) + ((n - 1) * slotGap)\n * - For n=3 with defaults (20px height, 2px gap):\n * (3 * 20) + (2 * 2) = 60 + 4 = 64px\n * \n * @param rows - Number of event rows to display\n * @param config - Slot configuration (height and gap)\n * @returns Minimum height in pixels\n */\nexport function calculateMinSlotContainerHeight(\n rows: number,\n config: SlotConfig = DEFAULT_SLOT_CONFIG\n): number {\n if (rows <= 0) return 0\n\n const totalSlotHeight = rows * config.slotHeight\n const totalGapHeight = (rows - 1) * config.slotGap\n\n return totalSlotHeight + totalGapHeight\n}\n","import { startOfDay, endOfDay } from 'date-fns'\nimport { AnyEvent, isAllDayEvent, isEvent, isRecurrentEvent } from '../../../models/event.model'\nimport { DateRange } from '../../../models/date-range.model'\n\n/**\n * Extracts the effective date range from any event type.\n * Normalizes different event structures into a consistent DateRange.\n */\nexport function getEventDateRange(event: AnyEvent): DateRange {\n if (isEvent(event) || isRecurrentEvent(event)) {\n return {\n start: startOfDay(event.start),\n end: endOfDay(event.end)\n }\n }\n\n if (isAllDayEvent(event)) {\n const start = startOfDay(event.date)\n const end = event.endDate ? endOfDay(event.endDate) : endOfDay(event.date)\n return { start, end }\n }\n\n // Fallback (should never happen with proper types)\n return { start: new Date(), end: new Date() }\n}\n","import { DateRange } from '../../../models/date-range.model'\nimport { slotType } from '../../../models/slot.model'\n\n/**\n * Determines the slot type based on whether the event extends beyond the week boundaries.\n * \n * @returns\n * - 'full': Event starts and ends within this week\n * - 'first': Event starts this week but continues into next week(s)\n * - 'last': Event started in previous week(s) and ends this week\n * - 'middle': Event spans across this entire week (started before, ends after)\n */\nexport function determineSlotType(eventRange: DateRange, weekRange: DateRange): slotType {\n const startsBeforeWeek = eventRange.start < weekRange.start\n const endsAfterWeek = eventRange.end > weekRange.end\n\n if (startsBeforeWeek && endsAfterWeek) return 'middle'\n if (startsBeforeWeek) return 'last'\n if (endsAfterWeek) return 'first'\n return 'full'\n}\n","import { addDays, differenceInDays, startOfDay } from 'date-fns'\n\nconst DAYS_IN_WEEK = 7\nconst PERCENTAGE_BASE = 100\n\n/**\n * Calculates the horizontal position as percentages (0-100).\n * No container dimensions needed - pure percentage-based positioning.\n */\nexport function calculateHorizontalPosition(\n clampedStart: Date,\n clampedEnd: Date,\n weekStart: Date\n): { left: number; width: number } {\n // Calculate day indices (0-6) within the week\n const startDayIndex = differenceInDays(startOfDay(clampedStart), startOfDay(weekStart))\n const endDayIndex = differenceInDays(startOfDay(clampedEnd), startOfDay(weekStart))\n\n // Number of days the event spans (inclusive)\n const spanDays = endDayIndex - startDayIndex + 1\n\n return {\n left: (startDayIndex / DAYS_IN_WEEK) * PERCENTAGE_BASE,\n width: (spanDays / DAYS_IN_WEEK) * PERCENTAGE_BASE\n }\n}\n\n/**\n * Represents a placed event's day range within a week for overlap checking.\n */\nexport interface PlacedEventRange {\n /** First day of the event (normalized to startOfDay) */\n startDay: Date\n /** Day AFTER the event ends (for exclusive end comparison) */\n exclusiveEndDay: Date\n}\n\n/**\n * Finds the first available row for an event without overlapping.\n * Uses a greedy algorithm with proper day-range intersection checking.\n * \n * ## How overlap is determined:\n * \n * Two events overlap if their day ranges intersect. We use half-open intervals\n * [startDay, exclusiveEndDay) for comparison:\n * \n * ```\n * Event A: Dec 22-24 → { startDay: Dec 22, exclusiveEndDay: Dec 25 }\n * Event B: Dec 25 → { startDay: Dec 25, exclusiveEndDay: Dec 26 }\n * \n * Intersection check: A.start < B.exclusiveEnd AND B.start < A.exclusiveEnd\n * Dec 22 < Dec 26 (true) AND Dec 25 < Dec 25 (false)\n * → NO overlap ✓\n * ```\n * \n * @param clampedStart - Event start date (clamped to week)\n * @param clampedEnd - Event end date (clamped to week)\n * @param rowAssignments - Map of row index → array of placed event ranges\n */\nexport function findAvailableRow(\n clampedStart: Date,\n clampedEnd: Date,\n rowAssignments: Map<number, PlacedEventRange[]>\n): number {\n let rowIndex = 0\n\n // Create the day range for the new event\n const newEventRange: PlacedEventRange = {\n startDay: startOfDay(clampedStart),\n exclusiveEndDay: addDays(startOfDay(clampedEnd), 1)\n }\n\n while (true) {\n const existingRanges = rowAssignments.get(rowIndex) || []\n\n // Check if new event overlaps with any existing event in this row\n // Using half-open interval intersection: A ∩ B ≠ ∅ ⟺ A.start < B.end AND B.start < A.end\n const hasOverlap = existingRanges.some(existing =>\n newEventRange.startDay < existing.exclusiveEndDay &&\n existing.startDay < newEventRange.exclusiveEndDay\n )\n\n if (!hasOverlap) {\n rowAssignments.set(rowIndex, [...existingRanges, newEventRange])\n return rowIndex\n }\n rowIndex++\n }\n}\n\n/**\n * Calculates the maximum number of visible rows based on container height.\n * \n * @param containerHeight - Height of the container in pixels\n * @param slotHeight - Height of each slot row in pixels\n * @param slotGap - Vertical gap between slots in pixels\n * @returns Maximum number of full rows that fit in the container\n * \n * @example\n * // Container of 66px with 20px slots and 2px gap = 3 rows\n * // Row 0: 0-20px, Row 1: 22-42px, Row 2: 44-64px\n * calculateMaxVisibleRows(66, 20, 2) // returns 3\n */\nexport function calculateMaxVisibleRows(\n containerHeight: number,\n slotHeight: number,\n slotGap: number\n): number {\n if (containerHeight <= 0 || slotHeight <= 0) {\n return 0\n }\n\n // Each row takes: slotHeight + slotGap (except the last one doesn't need gap)\n // Formula: containerHeight >= (n * slotHeight) + ((n - 1) * slotGap)\n // Simplified: n = floor((containerHeight + slotGap) / (slotHeight + slotGap))\n const rowWithGap = slotHeight + slotGap\n return Math.floor((containerHeight + slotGap) / rowWithGap)\n}\n","import { max, min } from 'date-fns'\nimport { AnyEvent } from '../../../models/event.model'\nimport { DateRange } from '../../../models/date-range.model'\nimport { SlotModel } from '../../../models/slot.model'\nimport { SlotConfig, DEFAULT_SLOT_CONFIG } from './slot-config'\nimport { getEventDateRange } from './event-date-range'\nimport { determineSlotType } from './slot-type'\nimport { calculateHorizontalPosition, findAvailableRow, PlacedEventRange } from './slot-positioning'\n\n\n/**\n * Slices a collection of events into visual slots for a specific week.\n * Returns percentage-based horizontal positions (no ResizeObserver needed).\n *\n * @param events - Array of events to process (should already be filtered for the week)\n * @param weekRange - The date range of the week { start: Sunday 00:00, end: Saturday 23:59 }\n * @param config - Optional configuration for slot sizing\n * @returns Array of SlotModel with calculated positions (left/width as %, top/height as px)\n *\n * @example\n * const slots = sliceEventsByWeek(events, {\n * start: startOfWeek(date),\n * end: endOfWeek(date)\n * })\n * // Use in template: [style.left.%]=\"slot.position.left\"\n */\nexport function sliceEventsByWeek(\n events: AnyEvent[],\n weekRange: DateRange,\n config: SlotConfig = DEFAULT_SLOT_CONFIG\n): SlotModel[] {\n const slots: SlotModel[] = []\n const rowAssignments: Map<number, PlacedEventRange[]> = new Map()\n\n for (const event of events) {\n const eventRange = getEventDateRange(event)\n\n // Clamp event dates to the week boundaries\n const clampedStart = max([eventRange.start, weekRange.start])\n const clampedEnd = min([eventRange.end, weekRange.end])\n\n // Calculate horizontal position as percentages\n const { left, width } = calculateHorizontalPosition(\n clampedStart,\n clampedEnd,\n weekRange.start\n )\n\n // Find available row (avoids overlapping)\n const rowIndex = findAvailableRow(clampedStart, clampedEnd, rowAssignments)\n\n // Calculate vertical position in pixels\n const top = rowIndex * (config.slotHeight + config.slotGap)\n\n // Determine slot type based on week boundaries\n const type = determineSlotType(eventRange, weekRange)\n\n // Extract event properties for the slot\n const isEditable = !event.isReadOnly && !event.isBlocked\n\n slots.push({\n id: `${event.id}-${weekRange.start.getTime()}`,\n idEvent: event.id,\n start: clampedStart,\n end: clampedEnd,\n position: {\n top,\n left,\n height: config.slotHeight,\n width\n },\n zIndex: rowIndex + 1,\n type,\n color: event.color ?? '',\n draggable: isEditable,\n resizable: isEditable\n })\n }\n\n return slots\n}\n","import { differenceInDays, startOfDay } from 'date-fns'\nimport { SlotModel } from '../../../models/slot.model'\n\n// ============================================================================\n// TYPES\n// ============================================================================\n\n/**\n * Result of partitioning slots by visibility based on container constraints.\n * \n * This structure allows the UI layer to:\n * 1. Render only visible slots\n * 2. Show \"+N more\" indicators per day column\n * 3. Access hidden slots for popover/modal display\n */\nexport interface SlotVisibilityResult {\n /** Slots that fit within the available rows */\n visibleSlots: SlotModel[]\n\n /** Slots that exceed the row limit and should be hidden */\n hiddenSlots: SlotModel[]\n\n /** \n * Count of hidden events per day of the week.\n * Index 0 = first day of week (Sunday or Monday depending on locale)\n * Index 6 = last day of week\n * \n * @example\n * // overflowPerDay = [0, 0, 2, 1, 0, 0, 0]\n * // means: Wednesday has 2 hidden, Thursday has 1 hidden\n */\n overflowPerDay: number[]\n}\n\n// ============================================================================\n// CONSTANTS\n// ============================================================================\n\nconst DAYS_IN_WEEK = 7\n\n// ============================================================================\n// MAIN FUNCTION\n// ============================================================================\n\n/**\n * Partitions slots into visible and hidden based on the maximum number of rows\n * that can fit in the container.\n * \n * ## How it works:\n * \n * 1. Each slot has a `zIndex` which represents its row position (1-indexed).\n * - zIndex 1 = Row 0 (top row)\n * - zIndex 2 = Row 1\n * - etc.\n * \n * 2. If a slot's zIndex exceeds maxRows, the entire slot is hidden.\n * This ensures multi-day events don't partially render.\n * \n * 3. For hidden slots, we count how many events are hidden per day column.\n * This allows showing \"+N more\" indicators in each affected day.\n * \n * ## Visual Example:\n * \n * ```\n * maxRows = 2\n * \n * Mon Tue Wed Thu Fri\n * ┌─────┬─────┬─────┬─────┬─────┐\n * Row 0 │ A │ A │ A │ │ │ visible (zIndex=1)\n * ├─────┼─────┼─────┼─────┼─────┤\n * Row 1 │ │ B │ B │ B │ │ visible (zIndex=2)\n * ├─────┴─────┴─────┴─────┴─────┤ ← maxRows limit\n * Row 2 │ │ │ C │ │ │ HIDDEN (zIndex=3)\n * └─────┴─────┴─────┴─────┴─────┘\n * \n * overflowPerDay = [0, 0, 1, 0, 0, 0, 0]\n * ↑ Wed shows \"+1 more\"\n * ```\n * \n * @param slots - All slots generated by sliceEventsByWeek\n * @param maxRows - Maximum number of rows that fit in the container\n * @param weekStart - Start date of the week (used to calculate day indices)\n * @returns Partitioned slots with overflow counts per day\n */\nexport function partitionSlotsByVisibility(\n slots: SlotModel[],\n maxRows: number,\n weekStart: Date\n): SlotVisibilityResult {\n const visibleSlots: SlotModel[] = []\n const hiddenSlots: SlotModel[] = []\n const overflowPerDay: number[] = new Array(DAYS_IN_WEEK).fill(0)\n\n // Normalize week start to beginning of day for consistent comparisons\n const normalizedWeekStart = startOfDay(weekStart)\n\n for (const slot of slots) {\n // zIndex is 1-indexed (row 0 has zIndex 1)\n // A slot is visible if its row fits within maxRows\n const isVisible = slot.zIndex <= maxRows\n\n if (isVisible) {\n visibleSlots.push(slot)\n } else {\n hiddenSlots.push(slot)\n\n // Calculate which days this hidden slot spans\n // and increment the overflow counter for each affected day\n incrementOverflowForSlotDays(slot, normalizedWeekStart, overflowPerDay)\n }\n }\n\n return { visibleSlots, hiddenSlots, overflowPerDay }\n}\n\n// ============================================================================\n// HELPER FUNCTIONS\n// ============================================================================\n\n/**\n * Increments the overflow counter for each day that a slot occupies.\n * \n * This ensures that the \"+N more\" indicator correctly reflects\n * all hidden events affecting each day column.\n * \n * @param slot - The hidden slot\n * @param weekStart - Normalized start of the week\n * @param overflowPerDay - Array to mutate with incremented counts\n */\nfunction incrementOverflowForSlotDays(\n slot: SlotModel,\n weekStart: Date,\n overflowPerDay: number[]\n): void {\n // Calculate day indices (0-6) within the week\n const startDayIndex = differenceInDays(startOfDay(slot.start), weekStart)\n const endDayIndex = differenceInDays(startOfDay(slot.end), weekStart)\n\n // Clamp indices to valid range [0, 6]\n // This handles edge cases where slot dates might extend beyond the week\n const safeStartDay = Math.max(0, Math.min(startDayIndex, DAYS_IN_WEEK - 1))\n const safeEndDay = Math.max(0, Math.min(endDayIndex, DAYS_IN_WEEK - 1))\n\n // Increment counter for each day the slot spans\n for (let day = safeStartDay; day <= safeEndDay; day++) {\n overflowPerDay[day]++\n }\n}\n","// Public API\nexport { sliceEventsByWeek } from './month-event-slicer'\nexport type { SlotConfig } from './slot-config'\nexport { DEFAULT_SLOT_CONFIG, calculateMinSlotContainerHeight } from './slot-config'\nexport type { SlotVisibilityResult } from './slot-visibility'\nexport { partitionSlotsByVisibility } from './slot-visibility'\n\n// Utilities (exported for testing or advanced usage)\nexport { getEventDateRange } from './event-date-range'\nexport { determineSlotType } from './slot-type'\nexport { calculateHorizontalPosition, findAvailableRow, calculateMaxVisibleRows } from './slot-positioning'\n","import { Component, computed, inject, input } from '@angular/core'\nimport { CalendarWeek, isEventInRange } from '../../../shared/helpers'\nimport { MonthCell } from '../month-cell/month-cell'\nimport { CELL_HEADER_HEIGHT, SLOT_HEIGHT, SLOT_GAP } from '../../../core/config/default-schedule-config'\nimport { MonthWeekEventsContainer } from \"../month-week-events-container/month-week-events-container\"\nimport { CalendarStore } from '../../../core/store/calendar.store'\nimport { endOfDay, startOfDay } from 'date-fns'\nimport { AnyEvent } from '../../../core/models/event.model'\nimport { DateRange } from '../../../core/models/date-range.model'\nimport { EventRendererAdapter } from '../../../core/adapters/event-renderer.adapter'\nimport { SlotModel } from '../../../core/models/slot.model'\nimport { sliceEventsByWeek } from '../../../core/rendering/slicers/month'\n\n@Component({\n selector: 'mglon-month-week',\n imports: [MonthCell, MonthWeekEventsContainer],\n templateUrl: './month-week.html',\n styleUrl: './month-week.scss',\n host: {\n '[style.height.px]': 'weekHeight()',\n '[class.mglon-month-week--expanded]': 'expanded()'\n }\n})\nexport class MonthWeek extends EventRendererAdapter {\n\n private readonly store = inject(CalendarStore)\n\n readonly week = input.required<CalendarWeek>()\n\n /** Index of this week in the month (0-based) */\n readonly weekIndex = input<number>(0)\n\n /** Whether this week is expanded to show all events */\n readonly expanded = input<boolean>(false)\n\n readonly top = CELL_HEADER_HEIGHT\n\n /** Minimum height for the week row from store config */\n readonly minHeight = this.store.minWeekRowHeight\n\n /**\n * Computes the week's date range from first to last day.\n */\n private readonly weekRange = computed<DateRange>(() => {\n const weekDays = this.week().days\n if (weekDays.length === 0) {\n return { start: new Date(), end: new Date() }\n }\n return {\n start: startOfDay(weekDays[0].date),\n end: endOfDay(weekDays[weekDays.length - 1].date)\n }\n })\n\n /**\n * Available height for event slots (total row height minus cell header).\n */\n private readonly availableHeight = computed(() => {\n return Math.max(0, this.store.weekRowHeight() - CELL_HEADER_HEIGHT)\n })\n\n /**\n * Filters currentViewEvents to only include events\n * that intersect with this week's date range.\n */\n readonly events = computed(() => {\n const weekDays = this.week().days\n if (weekDays.length === 0) return []\n\n return this.filterEvents(this.store.currentViewEvents(), this.weekRange())\n })\n\n /**\n * Computed slots for this week's events.\n */\n readonly slots = computed(() => {\n return this.createSlots(this.events())\n })\n\n /**\n * Maximum row number used by any slot.\n * Derived from the slot's top position.\n */\n readonly maxRow = computed(() => {\n const allSlots = this.slots()\n if (allSlots.length === 0) return 0\n // Calculate row from top position: row = top / (SLOT_HEIGHT + SLOT_GAP)\n const rowHeight = SLOT_HEIGHT + SLOT_GAP\n return Math.max(...allSlots.map(slot => Math.floor(slot.position.top / rowHeight)))\n })\n\n /**\n * Height needed to show all events when expanded.\n * Calculated based on the number of slot rows plus bottom padding.\n */\n readonly expandedHeight = computed(() => {\n const rows = this.maxRow() + 1 // rows are 0-indexed\n // Formula: header + (rows * slot height) + (rows * gap)\n return CELL_HEADER_HEIGHT + (rows * SLOT_HEIGHT) + (rows * SLOT_GAP)\n })\n\n /**\n * Whether the week has more events than can fit in the minimum height.\n * Used to conditionally show the expand toggle.\n */\n readonly hasOverflow = computed(() => {\n return this.expandedHeight() > this.minHeight()\n })\n\n /**\n * Dynamic height for the week based on expansion state.\n * Returns the expanded height or minimum height.\n */\n readonly weekHeight = computed(() => {\n if (this.expanded()) {\n // When expanded, use the larger of expandedHeight or minHeight\n return Math.max(this.expandedHeight(), this.minHeight())\n }\n return null // Use min-height only (CSS handles it)\n })\n\n override filterEvents(events: AnyEvent[], dateRange: DateRange): AnyEvent[] {\n return events.filter(event =>\n isEventInRange(event, dateRange)\n )\n }\n\n override createSlots(events: AnyEvent[]): SlotModel[] {\n if (events.length === 0) return []\n\n return sliceEventsByWeek(events, this.weekRange())\n }\n}\n","<div class=\"mglon-month-week\" [class.mglon-month-week--expanded]=\"expanded()\">\n\n <div class=\"mglon-month-week__days\" [style.min-height.px]=\"minHeight()\">\n @for (day of week().days; track day.date.getTime()) {\n <mglon-month-cell [day]=\"day\" [attr.data-date]=\"day.date.toISOString()\"></mglon-month-cell>\n }\n </div>\n\n <div #weekEventsContainer class=\"mglon-month-week__events\" [style.top.px]=\"top\">\n <mglon-month-week-events-container [slots]=\"slots()\"></mglon-month-week-events-container>\n </div>\n</div>","import { Directive, ElementRef, EventEmitter, OnDestroy, OnInit, Output } from '@angular/core';\n\nexport interface ResizeEvent {\n width: number;\n height: number;\n entry: ResizeObserverEntry;\n}\n\n@Directive({\n selector: '[mglonResizeObserver]',\n standalone: true\n})\nexport class ResizeObserverDirective implements OnInit, OnDestroy {\n @Output() mglonResizeObserver = new EventEmitter<ResizeEvent>();\n\n private observer: ResizeObserver | null = null;\n\n constructor(private readonly elementRef: ElementRef<HTMLElement>) { }\n\n ngOnInit(): void {\n this.observer = new ResizeObserver((entries) => {\n const entry = entries[0];\n if (entry) {\n this.mglonResizeObserver.emit({\n width: entry.contentRect.width,\n height: entry.contentRect.height,\n entry\n });\n }\n });\n\n this.observer.observe(this.elementRef.nativeElement);\n }\n\n ngOnDestroy(): void {\n this.observer?.disconnect();\n this.observer = null;\n }\n}\n","import { Component, input, computed, viewChild, ElementRef, inject } from '@angular/core'\nimport { getMonthCalendarGrid, CalendarWeek, isEventInRange } from '../../../shared/helpers'\nimport { MonthWeek } from '../month-week/month-week'\nimport { Selection } from '../../../core/background-selection/selection/selection'\nimport { Selectable, SelectableDirective, SelectionResult } from '../../../core/background-selection/selectable'\nimport { ResizeObserverDirective, ResizeEvent } from '../../../shared/directives/resize-observer.directive'\nimport { CalendarStore } from '../../../core/store/calendar.store'\nimport { IconButtonComponent } from '../../../shared/components/buttons/icon-button/icon-button'\nimport { IconComponent } from '../../../shared/components/icon/icon'\nimport { sliceEventsByWeek } from '../../../core/rendering/slicers/month'\nimport { CELL_HEADER_HEIGHT, SLOT_HEIGHT, SLOT_GAP } from '../../../core/config/default-schedule-config'\nimport { startOfDay, endOfDay } from 'date-fns'\n\n/**\n * Month calendar grid component that displays a full month view with weeks and days.\n * \n * Implements the Selectable interface to enable date selection via mouse interaction.\n * Uses the SelectableDirective to handle all selection logic.\n * \n * Features:\n * - Displays 4-6 weeks dynamically\n * - Shows padding days from previous/next months\n * - Supports mouse-based date range selection\n * - Expandable week rows via toggle buttons\n * \n * @example\n * ```html\n * <mglon-month-grid \n * [currentDate]=\"selectedDate\"\n * (selectionEnd)=\"onDateRangeSelected($event)\">\n * </mglon-month-grid>\n * ```\n */\n@Component({\n selector: 'mglon-month-grid',\n imports: [Selection, SelectableDirective, MonthWeek, ResizeObserverDirective, IconButtonComponent, IconComponent],\n templateUrl: './month-grid.html',\n styleUrl: './month-grid.scss',\n})\nexport class MonthGrid implements Selectable {\n private readonly elementRef = inject(ElementRef)\n private readonly store = inject(CalendarStore)\n\n /**\n * Reference to the SelectableDirective instance.\n * Used to access selection state (selection rectangle and isSelecting flag).\n */\n readonly selectableDirective = viewChild(SelectableDirective);\n\n /**\n * The date to display the calendar for.\n * Can be any date within the target month.\n * @default new Date() (current month)\n */\n readonly currentDate = input<Date>(new Date());\n\n /**\n * Computed calendar grid for the current month.\n * Automatically updates when currentDate changes.\n * Returns an array of weeks, each containing 7 days.\n */\n readonly weeks = computed<CalendarWeek[]>(() => {\n console.log('weeks cambiaron')\n return getMonthCalendarGrid(this.currentDate())\n })\n\n /**\n * Dynamic grid-template-rows based on actual number of weeks.\n * Uses minmax(0, auto) to allow expanded weeks to grow beyond equal distribution.\n */\n readonly gridTemplateRows = computed(() =>\n `repeat(${this.weeks().length}, minmax(0, auto))`\n )\n\n /**\n * Calculates which weeks have content that exceeds minimum height.\n * Returns a Map of weekIndex -> hasOverflow boolean.\n */\n readonly weekOverflowMap = computed(() => {\n const weeks = this.weeks()\n const events = this.store.currentViewEvents()\n const minHeight = this.store.minWeekRowHeight()\n const result = new Map<number, boolean>()\n\n weeks.forEach((week, index) => {\n const weekDays = week.days\n if (weekDays.length === 0) {\n result.set(index, false)\n return\n }\n\n const weekRange = {\n start: startOfDay(weekDays[0].date),\n end: endOfDay(weekDays[weekDays.length - 1].date)\n }\n\n const weekEvents = events.filter(e => isEventInRange(e, weekRange))\n\n if (weekEvents.length === 0) {\n result.set(index, false)\n return\n }\n\n const slots = sliceEventsByWeek(weekEvents, weekRange)\n const rowHeight = SLOT_HEIGHT + SLOT_GAP\n const maxRow = Math.max(...slots.map(slot => Math.floor(slot.position.top / rowHeight)))\n const rows = maxRow + 1\n const expandedHeight = CELL_HEADER_HEIGHT + (rows * SLOT_HEIGHT) + ((rows - 1) * SLOT_GAP) + SLOT_GAP\n\n result.set(index, expandedHeight > minHeight)\n })\n\n return result\n })\n\n /**\n * Checks if a week has overflowing content.\n * @param weekIndex - Index of the week to check\n * @returns true if the week has more events than can fit\n */\n hasOverflow(weekIndex: number): boolean {\n return this.weekOverflowMap().get(weekIndex) ?? false\n }\n\n /**\n * Implements Selectable.getDateFromPoint()\n * \n * Translates visual coordinates (relative to the grid container) into a calendar date.\n * This enables the SelectableDirective to determine which date the user is selecting.\n * \n * Algorithm:\n * 1. Convert relative coordinates to absolute viewport coordinates\n * 2. Use document.elementFromPoint to find the cell element under the cursor\n * 3. Extract the date from the cell's data-date attribute\n * 4. Find and return the corresponding CalendarDay object\n * \n * @param x - X coordinate relative to the grid container\n * @param y - Y coordinate relative to the grid container\n * @returns Object with date property, or null if no date found at coordinates\n */\n getDateFromPoint(x: number, y: number): { date: Date; resourceId?: string } | null {\n // Convert relative coordinates to absolute viewport coordinates\n const absoluteCoords = this.getAbsoluteCoordinates(x, y);\n if (!absoluteCoords) return null;\n\n // Find the calendar cell element at the cursor position\n const cellElement = this.findCellElementAtPoint(absoluteCoords.x, absoluteCoords.y);\n if (!cellElement) return null;\n\n // Extract and parse the date from the cell\n const date = this.extractDateFromCell(cellElement);\n if (!date) return null;\n\n return { date };\n }\n\n /**\n * Converts coordinates relative to the grid to absolute viewport coordinates\n * \n * @param relativeX - X coordinate relative to grid container\n * @param relativeY - Y coordinate relative to grid container\n * @returns Absolute coordinates or null if grid element not found\n */\n private getAbsoluteCoordinates(relativeX: number, relativeY: number): { x: number; y: number } | null {\n const gridElement = this.elementRef.nativeElement as HTMLElement;\n if (!gridElement) return null;\n\n const gridRect = gridElement.getBoundingClientRect();\n\n return {\n x: gridRect.left + relativeX,\n y: gridRect.top + relativeY\n };\n }\n\n /**\n * Finds the month cell element at the given viewport coordinates\n * \n * @param absoluteX - Absolute X coordinate in viewport\n * @param absoluteY - Absolute Y coordinate in viewport\n * @returns The mglon-month-cell element or null if not found\n */\n private findCellElementAtPoint(absoluteX: number, absoluteY: number): Element | null {\n const element = document.elementFromPoint(absoluteX, absoluteY);\n if (!element) return null;\n\n // Walk up the DOM tree to find the month-cell element\n return element.closest('mglon-month-cell');\n }\n\n /**\n * Extracts the date from a month cell element's data attribute\n * \n * @param cellElement - The mglon-month-cell element\n * @returns The date object or null if date attribute is missing/invalid\n */\n private extractDateFromCell(cellElement: Element): Date | null {\n const dateStr = cellElement.getAttribute('data-date');\n if (!dateStr) return null;\n\n return new Date(dateStr);\n }\n\n /**\n * Handles resize events from the first week container.\n * Stores the height in CalendarStore to be shared with all weeks.\n */\n onWeekResize(event: ResizeEvent): void {\n console.log('week resize', event)\n this.store.setWeekRowHeight(event.height)\n }\n\n /**\n * Toggles the expansion state of a week.\n * @param weekIndex - Index of the week to toggle (0-based)\n */\n onToggleWeek(weekIndex: number): void {\n this.store.toggleWeekExpansion(weekIndex)\n }\n\n /**\n * Checks if a week is currently expanded.\n * @param weekIndex - Index of the week to check\n * @returns true if the week is expanded\n */\n isWeekExpanded(weekIndex: number): boolean {\n return this.store.expandedWeekIndex() === weekIndex\n }\n}\n","<div class=\"mglon-month-grid\" [mglonSelectable]=\"this\" [style.grid-template-rows]=\"gridTemplateRows()\">\n @for (week of weeks(); track $index) {\n <!-- Toggle button cell (only show button if week has overflow) -->\n <div class=\"mglon-month-grid__toggle\">\n @if (hasOverflow($index)) {\n <button mglon-icon-button size=\"xs\" [rounded]=\"'full'\" class=\"mglon-month-grid__toggle-btn\"\n [class.mglon-month-grid__toggle-btn--expanded]=\"isWeekExpanded($index)\" (click)=\"onToggleWeek($index)\">\n <mglon-icon name=\"chevron-right\"></mglon-icon>\n </button>\n }\n </div>\n\n <!-- Week content -->\n @if ($first) {\n <mglon-month-week [week]=\"week\" [weekIndex]=\"$index\" [expanded]=\"isWeekExpanded($index)\"\n (mglonResizeObserver)=\"onWeekResize($event)\">\n </mglon-month-week>\n } @else {\n <mglon-month-week [week]=\"week\" [weekIndex]=\"$index\" [expanded]=\"isWeekExpanded($index)\">\n </mglon-month-week>\n }\n }\n\n <!-- Selection overlay -->\n @if (selectableDirective()) {\n <mglon-selection [selection]=\"selectableDirective()!.selection()\"\n [isSelecting]=\"selectableDirective()!.isSelecting()\">\n </mglon-selection>\n }\n</div>","import { Component, inject, viewChild, ElementRef, afterNextRender, output } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { MonthHeader } from '../month-header/month-header';\nimport { MonthGrid } from '../month-grid/month-grid';\nimport { CalendarStore } from '../../../core/store/calendar.store';\nimport { MONTH_VIEW_LAYOUT } from '../../../core/config/month-view.config';\n\n@Component({\n selector: 'mglon-month-view',\n standalone: true,\n imports: [CommonModule, MonthHeader, MonthGrid],\n templateUrl: './month-view.html',\n styleUrl: './month-view.scss',\n})\nexport class MonthView {\n readonly calendarStore = inject(CalendarStore);\n\n // Get month grid element reference\n readonly gridElement = viewChild<ElementRef<HTMLElement>>('gridRef');\n\n constructor() {\n // Set up grid synchronization after view init\n afterNextRender(() => {\n // Logic for grid sizing can remain if needed for the grid itself\n });\n }\n}\n\n","<div class=\"mglon-month-view\">\n <!-- Single scrollable container for header and grid -->\n <div class=\"mglon-month-view__content\">\n <!-- Header wrapper -->\n <div class=\"mglon-month-view__header-wrapper\">\n <mglon-month-header></mglon-month-header>\n </div>\n\n <!-- Grid container with reference -->\n <div class=\"mglon-month-view__grid-container\" #gridRef>\n <mglon-month-grid [currentDate]=\"calendarStore.currentDate()\"></mglon-month-grid>\n </div>\n\n </div>\n</div>","import { Component, input, computed } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { getTextColor, getHoverColor } from '../../helpers/color.helpers';\n\nexport type AvatarSize = 'xs' | 'sm' | 'md' | 'lg' | 'xl';\n\n@Component({\n selector: 'mglon-avatar',\n standalone: true,\n imports: [CommonModule],\n templateUrl: './avatar.html',\n styleUrl: './avatar.scss',\n host: {\n '[attr.data-size]': 'size()',\n '[attr.data-inactive]': 'inactive()',\n '[style]': 'hostStyle()'\n }\n})\nexport class Avatar {\n /** Image source URL (optional) */\n readonly src = input<string>('');\n\n /** Display name to derive initials from (optional) */\n readonly name = input<string>('');\n\n /** Background color for initials placeholder (optional) */\n readonly color = input<string>('');\n\n /** Alt text for accessibility */\n readonly alt = input<string>('Avatar');\n\n /** Size variant: xs (24px), sm (32px), md (40px), lg (48px), xl (64px) */\n readonly size = input<AvatarSize>('md');\n\n /** Show border around avatar */\n readonly showBorder = input<boolean>(false);\n\n /** Border color (CSS color value) */\n readonly borderColor = input<string>('var(--ngx-cal-primary)');\n\n /** Inactive state - applies grayscale and hides border */\n readonly inactive = input<boolean>(false);\n\n /** Track if image failed to load */\n imageError = false;\n\n /** Computed initials from the name */\n readonly initials = computed(() => {\n const nameStr = this.name();\n if (!nameStr) return '';\n\n const parts = nameStr.trim().split(/\\s+/);\n if (parts.length === 0) return '';\n\n if (parts.length === 1) {\n const p = parts[0]\n return p.length > 1 ? p.substring(0, 2).toUpperCase() : p.toUpperCase();\n }\n\n return (parts[0].charAt(0) + parts[parts.length - 1].charAt(0)).toUpperCase();\n });\n\n /** Computed style for host (border and gap) */\n readonly hostStyle = computed(() => {\n const styles: any = {};\n if (!this.inactive() && this.showBorder()) {\n styles.border = `2px solid ${this.borderColor()}`;\n styles.padding = '2px'; // Gap between border and circle\n styles.borderRadius = '50%'; // Ensure border is circular\n }\n return styles;\n });\n\n /** Computed style for inner element (background and text color) */\n readonly innerStyle = computed(() => {\n const styles: any = {};\n\n // Background color logic\n const bgColor = this.color();\n if (bgColor) {\n // Use slightly darker variant for background as requested\n const darkBg = getHoverColor(bgColor);\n styles.backgroundColor = darkBg;\n styles.color = getTextColor(darkBg);\n }\n\n return styles;\n });\n\n onImageError() {\n this.imageError = true;\n }\n}\n","@if (src() && !imageError) {\n<img [src]=\"src()\" [alt]=\"alt()\" [ngStyle]=\"innerStyle()\" (error)=\"onImageError()\" class=\"avatar-image\" />\n} @else if (initials()) {\n<div class=\"avatar-initials\" [ngStyle]=\"innerStyle()\">\n {{ initials() }}\n</div>\n} @else {\n<div class=\"avatar-placeholder\" [ngStyle]=\"innerStyle()\">\n <span class=\"avatar-icon\">👤</span>\n</div>\n}","import { Component, input, output } from '@angular/core';\nimport { ResourceModel } from '../../../core/models/resource.model';\nimport { Avatar } from '../../../shared/components/avatar/avatar';\n\n@Component({\n selector: 'mglon-resource-item-schedule',\n standalone: true,\n imports: [Avatar],\n templateUrl: './resource-item-schedule.html',\n styleUrl: './resource-item-schedule.scss',\n host: {\n '[attr.rounded]': 'rounded()',\n '[attr.density]': 'density()'\n }\n})\nexport class ResourceItemSchedule {\n /** Resource to display */\n readonly resource = input.required<ResourceModel>();\n\n /** Border radius for resource item */\n readonly rounded = input<'none' | 'sm' | 'md' | 'lg' | 'full'>('sm');\n\n /** Density/spacing for resource item */\n readonly density = input<'compact' | 'comfortable'>('comfortable');\n\n /** Emitted when the resource is clicked (for toggle) */\n readonly toggle = output<string>();\n\n onToggle() {\n this.toggle.emit(this.resource().id);\n }\n}\n","<div class=\"resource-item\" (click)=\"onToggle()\">\n <mglon-avatar [src]=\"resource().avatar || ''\" [name]=\"resource().name\" [color]=\"resource().color || ''\"\n [alt]=\"resource().name\" size=\"xs\" [showBorder]=\"true\" [borderColor]=\"resource().color || 'var(--ngx-cal-primary)'\"\n [inactive]=\"resource().isActive === false\" />\n <span class=\"resource-name\" [class.inactive]=\"resource().isActive === false\">{{ resource().name }}</span>\n</div>","import { Component, input, output, inject, computed } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { CalendarStore } from '../../../core/store/calendar.store';\nimport { ResourceModel } from '../../../core/models/resource.model';\nimport { ResourceItemSchedule } from '../resource-item-schedule/resource-item-schedule';\n\n@Component({\n selector: 'mglon-resource-list-schedule',\n standalone: true,\n imports: [CommonModule, ResourceItemSchedule],\n templateUrl: './resource-list-schedule.html',\n styleUrl: './resource-list-schedule.scss',\n})\nexport class ResourceListSchedule {\n private calendarStore = inject(CalendarStore);\n\n // Sidebar UI Configuration from Store\n readonly resourceItemRounded = computed(() => this.calendarStore.uiConfig().sidebar.resourceItems.rounded);\n readonly resourceItemDensity = computed(() => this.calendarStore.uiConfig().sidebar.resourceItems.density);\n\n /** Array of resources to display */\n readonly resources = input<ResourceModel[]>([]);\n\n /** Emitted when a resource is toggled */\n readonly toggleResource = output<string>();\n}\n","<div class=\"resource-list\">\n @if (resources().length > 0) {\n @for (resource of resources(); track resource.id) {\n <mglon-resource-item-schedule [resource]=\"resource\" [rounded]=\"resourceItemRounded()\"\n [density]=\"resourceItemDensity()\" (toggle)=\"toggleResource.emit($event)\" />\n }\n } @else {\n <div class=\"resource-list-empty\">\n <span class=\"empty-icon\">📋</span>\n <span class=\"empty-text\">No resources available</span>\n </div>\n }\n</div>","import { Component, inject, computed } from '@angular/core';\nimport { ResourceListSchedule } from '../resource-list-schedule/resource-list-schedule';\nimport { CalendarStore } from '../../../core/store/calendar.store';\n\n@Component({\n selector: 'mglon-sidebar-schedule',\n standalone: true,\n imports: [ResourceListSchedule],\n templateUrl: './sidebar-schedule.html',\n styleUrl: './sidebar-schedule.scss',\n host: {\n '[style.--mglon-sidebar-radius]': 'borderRadius() === \"none\" ? \"0\" : \"var(--mglon-schedule-radius-\" + borderRadius() + \")\"',\n '[style.--mglon-sidebar-bg]': 'backgroundColor()',\n '[attr.data-radius]': 'borderRadius()'\n }\n})\nexport class SidebarSchedule {\n readonly store = inject(CalendarStore);\n\n readonly backgroundColor = computed(() => this.store.uiConfig().sidebar.background);\n readonly borderRadius = computed(() => this.store.uiConfig().sidebar.rounded || 'none');\n\n onToggleResource(id: string) {\n this.store.toggleResource(id);\n }\n}\n\n","<aside class=\"sidebar-schedule\">\n <header class=\"sidebar-header\">\n <h3 class=\"sidebar-title\">Resources</h3>\n </header>\n <div class=\"sidebar-content\">\n <mglon-resource-list-schedule [resources]=\"store.allResources()\" (toggleResource)=\"onToggleResource($event)\" />\n </div>\n</aside>","import { Component, effect, input, inject, ViewEncapsulation, output } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { CalendarStore } from '../../../core/store/calendar.store';\nimport { SchedulerConfig, ViewMode } from '../../../core/models/config-schedule';\nimport { SelectionResult } from '../../../core/background-selection/selectable/selectable.directive';\nimport { ResourceModel } from '../../../core/models/resource.model';\nimport {\n HeaderUIConfig,\n SidebarUIConfig,\n GridUIConfig,\n UIConfig\n} from '../../../core/models/ui-config';\nimport { ResourceView } from '../../resource/resource-view/resource-view';\nimport { HeaderSchedule } from '../header-schedule/header-schedule';\nimport { MonthView } from '../../month/month-view/month-view';\nimport { WeekView } from '../../week/week-view/week-view';\nimport { SidebarSchedule } from '../sidebar-schedule/sidebar-schedule';\n\n\n@Component({\n selector: 'mglon-schedule',\n standalone: true,\n imports: [CommonModule, ResourceView, MonthView, HeaderSchedule, SidebarSchedule, WeekView],\n templateUrl: './schedule.html',\n styleUrl: './schedule.scss',\n providers: [CalendarStore],\n encapsulation: ViewEncapsulation.None\n})\nexport class Schedule {\n readonly config = input<Partial<SchedulerConfig>>({});\n\n // ============================================\n // UI CONFIGURATION INPUTS (Area-Based)\n // ============================================\n\n /** Optional UI configuration for header area (button-group, navigation, today button) */\n readonly headerUI = input<Partial<HeaderUIConfig>>();\n\n /** Optional UI configuration for sidebar area (resource items) */\n readonly sidebarUI = input<Partial<SidebarUIConfig>>();\n\n /** Optional UI configuration for grid area (event slots, overflow indicators) */\n readonly gridUI = input<Partial<GridUIConfig>>();\n\n /** Optional default color for all events in the schedule */\n readonly color = input<string>();\n\n /** \n * Whether to automatically generate vivid/pastel variants for events.\n * If true, regular events use vivid colors and recurrent events use pastel variants.\n * If false, colors are used exactly as provided.\n * @default true\n */\n readonly useDynamicColors = input<boolean>(true);\n\n readonly add = output<void>();\n\n // ============================================\n // OUTPUT EVENTS\n // ============================================\n\n /** Emitted when selection starts (mousedown) */\n readonly selectionStart = output<SelectionResult>();\n\n /** Emitted while selecting (mousemove) */\n readonly selectionChange = output<SelectionResult>();\n\n /** Emitted when selection ends (mouseup) */\n readonly selectionEnd = output<SelectionResult>();\n\n /** Emitted when view mode changes */\n readonly viewChange = output<ViewMode>();\n\n /** Emitted when displayed date range changes */\n readonly dateRangeChange = output<{ start: Date; end: Date }>();\n\n /** Emitted when a resource is shown/activated */\n readonly resourceShow = output<string>();\n\n /** Emitted when a resource is hidden/deactivated */\n readonly resourceHide = output<string>();\n\n readonly store = inject(CalendarStore);\n\n\n constructor() {\n // Register global handlers\n // this.eventStore.setGlobalHandlers({\n // eventClick: this.eventClick\n // });\n\n effect(() => {\n const conf = this.config();\n if (conf) {\n this.store.updateConfig(conf);\n }\n });\n\n // Handle UI configuration updates (area-based)\n effect(() => {\n const headerConfig = this.headerUI();\n const sidebarConfig = this.sidebarUI();\n const gridConfig = this.gridUI();\n const primaryColor = this.color();\n const useDynamicColors = this.useDynamicColors();\n\n // Only update if at least one config is provided\n if (headerConfig || sidebarConfig || gridConfig || primaryColor || useDynamicColors !== undefined) {\n // Construct a safe partial grid config\n const finalGridConfig: Partial<GridUIConfig> = gridConfig ? { ...gridConfig } : {};\n\n if (primaryColor) {\n finalGridConfig.eventSlots = {\n ...finalGridConfig.eventSlots,\n color: finalGridConfig.eventSlots?.color || primaryColor\n } as any;\n }\n\n if (useDynamicColors !== undefined) {\n finalGridConfig.useDynamicColors = useDynamicColors;\n }\n\n this.store.setUIConfig({\n header: headerConfig,\n sidebar: sidebarConfig,\n grid: finalGridConfig\n });\n }\n });\n\n // Emit viewChange when view mode changes\n effect(() => {\n const view = this.store.viewMode();\n this.viewChange.emit(view);\n });\n\n\n\n // Emit resource show/hide events when resources change\n effect(() => {\n const resources = this.store.allResources();\n\n resources.forEach(resource => {\n // Check previous state vs current state\n const wasActive = this.previousResourceStates.get(resource.id);\n const isActive = resource.isActive !== false;\n\n if (wasActive !== undefined && wasActive !== isActive) {\n if (isActive) {\n this.resourceShow.emit(resource.id);\n } else {\n this.resourceHide.emit(resource.id);\n }\n }\n\n // Update previous state\n this.previousResourceStates.set(resource.id, isActive);\n });\n });\n }\n\n private previousResourceStates = new Map<string, boolean>();\n\n get api() {\n return {\n next: () => this.store.next(),\n prev: () => this.store.prev(),\n today: () => this.store.today(),\n changeView: (view: ViewMode) => this.store.changeView(view),\n setDate: (date: Date) => this.store.setDate(date)\n };\n }\n}\n","<div class=\"ng-sched-schedule\">\n <ng-content />\n <!-- Header -->\n <mglon-header-schedule [title]=\"store.formattedDate()\" [activeView]=\"store.viewMode()\" [views]=\"store.config().views!\"\n [editable]=\"store.config().editable!\" (next)=\"store.next()\" (prev)=\"store.prev()\" (today)=\"store.today()\"\n (viewChange)=\"store.changeView($event)\" (add)=\"add.emit()\">\n </mglon-header-schedule>\n\n <!-- Body -->\n\n <main class=\"ng-sched-body\">\n @if (store.config().showSidebar) {\n <div class=\"ng-sched-body__sidebar\">\n <mglon-sidebar-schedule></mglon-sidebar-schedule>\n </div>\n }\n <div class=\"ng-sched-body__content\">\n @switch (store.viewMode()) {\n @case ('resource') {\n <mglon-resource-view></mglon-resource-view>\n }\n @case ('month') {\n <mglon-month-view></mglon-month-view>\n }\n @case ('week') {\n <mglon-week-view (selectionStart)=\"selectionStart.emit($event)\" (selectionChange)=\"selectionChange.emit($event)\"\n (selectionEnd)=\"selectionEnd.emit($event)\">\n </mglon-week-view>\n }\n @default {\n <div class=\"ng-sched-placeholder\">\n View '{{ store.viewMode() }}' not implemented yet.\n </div>\n }\n }\n </div>\n\n </main>\n</div>","import { Component, AfterContentInit, inject, ElementRef, Input, input, effect, Resource } from '@angular/core';\nimport { ResourceModel } from '../../core/models/resource.model';\nimport { DEFAULT_RESOURCE_INPUTS } from '../../core/config/default-schedule-config';\nimport { CalendarStore } from '../../core/store/calendar.store';\n\nimport { InjectionToken } from '@angular/core';\nimport { CommonModule } from '@angular/common';\n\n/**\n * Injection token for providing resource ID to child components\n */\nexport const RESOURCE_ID_TOKEN = new InjectionToken<string>('RESOURCE_ID');\n\n/**\n * ResourceComponent - Declarative component representing a calendar resource\n * \n * Usage:\n * <mglon-resource \n * id=\"room-1\" \n * name=\"Conference Room A\"\n * [color]=\"'#0860c4'\">\n * <mglon-event>...</mglon-event>\n * </mglon-resource>\n */\n@Component({\n selector: 'mglon-resource',\n standalone: true,\n imports: [CommonModule],\n template: `<ng-content></ng-content>`,\n styles: [`:host { display: contents; }`],\n providers: [\n {\n provide: RESOURCE_ID_TOKEN,\n useFactory: (component: ResourceEvents) => component.id(),\n deps: [ResourceEvents]\n }\n ]\n})\nexport class ResourceEvents implements AfterContentInit {\n\n /** Unique identifier for the resource */\n readonly id = input.required<string>();\n\n /** Display name of the resource */\n readonly name = input.required<string>();\n\n /** Color for the resource (border/background) */\n readonly color = input<string>();\n\n /** URL of image or initials for display */\n readonly avatar = input<string>();\n\n /** Additional description of the resource */\n readonly description = input<string>();\n\n /** Tags for filtering */\n readonly tags = input<string[]>(DEFAULT_RESOURCE_INPUTS.tags);\n\n /** If true, events for this resource cannot be edited */\n readonly isReadOnly = input<boolean>(DEFAULT_RESOURCE_INPUTS.isReadOnly);\n\n /** If true, this resource does not accept new events */\n readonly isBlocked = input<boolean>(DEFAULT_RESOURCE_INPUTS.isBlocked);\n\n /** If true, resource is active and visible. Default: true */\n readonly isActive = input<boolean>(DEFAULT_RESOURCE_INPUTS.isActive);\n\n /** Flexible user-defined data */\n readonly metadata = input<any>();\n\n /** If true, allows resizing events for this resource. Default: true */\n readonly resizableEvents = input<boolean>(DEFAULT_RESOURCE_INPUTS.resizableEvents);\n\n private elRef = inject(ElementRef);\n\n private store = inject(CalendarStore)\n\n ngAfterContentInit() {\n this._removeInvalidNodes();\n }\n\n private _removeInvalidNodes() {\n const children = this.elRef.nativeElement.childNodes;\n children.forEach((node: ChildNode) => {\n if (node.nodeType === 1 && (node as HTMLElement).tagName !== 'MGLON-EVENT') {\n console.warn(\n `[ResourceEvents] The element <${(node as HTMLElement).tagName.toLowerCase()}> is not allowed inside mglon-resource-events. Only mglon-event components are allowed. This node will be removed.`\n );\n node.remove();\n }\n });\n }\n\n constructor() {\n // Sync isActive input changes to EventStore\n effect(() => {\n const shouldBeActive = this.isActive();\n const resourceId = this.id();\n\n if (resourceId) {\n if (shouldBeActive) {\n this.store.showResource(resourceId);\n } else {\n this.store.hideResource(resourceId);\n }\n }\n }, { allowSignalWrites: true });\n }\n\n ngOnInit(): void {\n this.registerResource();\n }\n\n /**\n * Lifecycle: Unregister resource on destroy\n */\n ngOnDestroy(): void {\n // Only unregister if the component was fully initialized\n try {\n const resourceId = this.id();\n if (resourceId) {\n this.store.unregisterResource(resourceId);\n }\n } catch (e) {\n // Ignore errors during cleanup (e.g., inputs not yet initialized in tests)\n }\n }\n\n private registerResource(): void {\n const resource: ResourceModel = {\n id: this.id(),\n name: this.name(),\n color: this.color(),\n avatar: this.avatar(),\n description: this.description(),\n tags: this.tags(),\n isReadOnly: this.isReadOnly(),\n isBlocked: this.isBlocked(),\n isActive: this.isActive(),\n resizableEvents: this.resizableEvents(),\n metadata: this.metadata()\n };\n\n this.store.registerResource(resource);\n }\n}\n","import { Component, inject, input } from '@angular/core';\nimport { DEFAULT_EVENT_INPUTS } from '../../../core/config/default-schedule-config';\nimport { CommonModule } from '@angular/common';\nimport { Event as EventModel } from '../../../core/models/event.model';\nimport { RESOURCE_ID_TOKEN } from '../../resource-events/resource-events';\nimport { CalendarStore } from '../../../core/store/calendar.store';\nimport { output } from '@angular/core';\nimport { DragInteractionData, EventInteraction, ResizeInteractionData } from '../../../core/models/interaction.model';\nimport { filter, takeUntil } from 'rxjs/operators';\nimport { Subject } from 'rxjs';\n\n@Component({\n selector: 'mglon-event',\n standalone: true,\n imports: [CommonModule],\n template: `<!-- Events are managed declaratively -->`,\n styles: [`:host { display: none; }`]\n})\n\nexport class Event {\n readonly id = input.required<string>();\n readonly title = input.required<string>();\n readonly startDate = input.required<Date>();\n readonly endDate = input.required<Date>();\n readonly color = input<string>();\n readonly allDay = input<boolean>(DEFAULT_EVENT_INPUTS.allDay);\n readonly description = input<string>(DEFAULT_EVENT_INPUTS.description);\n readonly data = input<any>(DEFAULT_EVENT_INPUTS.data);\n /** Optional explicit resource ID (if not nested in mglon-resource) */\n readonly resourceId = input<string>();\n private readonly parentResourceId = inject(RESOURCE_ID_TOKEN, { optional: true });\n\n /** If true, the event cannot be edited */\n readonly isReadOnly = input<boolean>(false);\n\n /** If true, the event is visually blocked (e.g., maintenance) */\n readonly isBlocked = input<boolean>(false);\n\n /** Flexible user-defined data */\n readonly metadata = input<any>();\n\n /** Tags for filtering and styling */\n readonly tags = input<string[]>([]);\n\n // --- Interaction Outputs ---\n readonly eventClick = output<EventInteraction>();\n readonly eventDblClick = output<EventInteraction>();\n readonly eventContextMenu = output<EventInteraction>();\n readonly eventMouseEnter = output<EventInteraction>();\n readonly eventMouseLeave = output<EventInteraction>();\n readonly eventResizeStart = output<EventInteraction<ResizeInteractionData>>();\n readonly eventResize = output<EventInteraction<ResizeInteractionData>>();\n readonly eventResizeEnd = output<EventInteraction<ResizeInteractionData>>();\n readonly eventDragStart = output<EventInteraction<DragInteractionData>>();\n readonly eventDrag = output<EventInteraction<DragInteractionData>>();\n readonly eventDragEnd = output<EventInteraction<DragInteractionData>>();\n\n private readonly destroy$ = new Subject<void>();\n private store = inject(CalendarStore)\n\n ngOnInit(): void {\n this.registerEvent();\n this.setupInteractionListeners();\n }\n\n private setupInteractionListeners(): void {\n this.store.getInteractions()\n .pipe(\n filter(e => e.eventId === this.id()),\n takeUntil(this.destroy$)\n )\n .subscribe(e => {\n switch (e.type) {\n case 'click': this.eventClick.emit(e.payload); break;\n case 'dblclick': this.eventDblClick.emit(e.payload); break;\n case 'contextmenu': this.eventContextMenu.emit(e.payload); break;\n case 'mouseenter': this.eventMouseEnter.emit(e.payload); break;\n case 'mouseleave': this.eventMouseLeave.emit(e.payload); break;\n case 'resizeStart': this.eventResizeStart.emit(e.payload); break;\n case 'resize': this.eventResize.emit(e.payload); break;\n case 'resizeEnd': this.eventResizeEnd.emit(e.payload); break;\n case 'dragStart': this.eventDragStart.emit(e.payload); break;\n case 'drag': this.eventDrag.emit(e.payload); break;\n case 'dragEnd': this.eventDragEnd.emit(e.payload); break;\n }\n });\n }\n\n /**\n * Lifecycle: Unregister event from store\n */\n ngOnDestroy(): void {\n this.destroy$.next();\n this.destroy$.complete();\n // Only unregister if the component was fully initialized\n try {\n const eventId = this.id();\n if (eventId) {\n this.store.unregisterEvent(eventId);\n }\n } catch (e) {\n // Ignore errors during cleanup (e.g., inputs not yet initialized in tests)\n }\n }\n\n private registerEvent(): void {\n const event: EventModel = {\n id: this.id(),\n resourceId: this.resourceId() || this.parentResourceId || undefined,\n title: this.title(),\n description: this.description(),\n tags: this.tags(),\n start: this.startDate(),\n end: this.endDate(),\n color: this.color(),\n isReadOnly: this.isReadOnly(),\n isBlocked: this.isBlocked(),\n isAllDay: this.allDay(),\n metadata: this.metadata(),\n type: 'event'\n };\n\n this.store.registerEvent(event);\n }\n}\n","import { RRule, Frequency } from 'rrule';\nimport { RecurrentEventModel, Event, DayOfWeek } from '../../core/models/event.model';\nimport { DateRange } from '../../core/models/date-range.model';\nimport { differenceInMilliseconds, addMilliseconds } from 'date-fns';\n\nconst DAY_MAP: Record<DayOfWeek, any> = {\n 'Sun': RRule.SU,\n 'Mon': RRule.MO,\n 'Tue': RRule.TU,\n 'Wed': RRule.WE,\n 'Thu': RRule.TH,\n 'Fri': RRule.FR,\n 'Sat': RRule.SA\n};\n\n/**\n * Expands a recurrent event into a list of individual event instances for a given date range.\n * Each instance has a composite ID: {parentID}_{timestamp}\n * \n * @param recurrentEvent The recurrence definition\n * @param range The search range (DateRange)\n * @returns Array of Event instances\n */\nexport function expandRecurrentEvent(\n recurrentEvent: RecurrentEventModel,\n range: DateRange\n): Event[] {\n const { start: rangeStart, end: rangeEnd } = range;\n const rule = recurrentEvent.recurrenceRule;\n\n // Mapping frequency\n const freqMap: Record<string, Frequency> = {\n 'daily': RRule.DAILY,\n 'weekly': RRule.WEEKLY,\n 'monthly': RRule.MONTHLY,\n 'yearly': RRule.YEARLY\n };\n\n // Duration of the original event\n const duration = differenceInMilliseconds(recurrentEvent.end, recurrentEvent.start);\n\n // Configure options for RRule\n const options: any = {\n freq: freqMap[rule.type],\n dtstart: recurrentEvent.start,\n interval: rule.interval || 1,\n };\n\n if (rule.until) options.until = rule.until;\n if (rule.count) options.count = rule.count;\n if (rule.byDay) options.byweekday = rule.byDay.map(day => DAY_MAP[day]);\n if (rule.byMonth) options.bymonth = rule.byMonth;\n if (rule.byMonthDay) options.bymonthday = rule.byMonthDay;\n if (rule.bySetPos) options.bysetpos = rule.bySetPos;\n if (rule.weekStart) options.wkst = DAY_MAP[rule.weekStart];\n\n const rrule = new RRule(options);\n\n // Get occurrences within the requested range\n const occurrences = rrule.between(rangeStart, rangeEnd, true);\n\n // Filter out exceptions if they exist (comparing timestamps for precision)\n const exceptions = recurrentEvent.recurrenceExceptions?.map(d => d.getTime()) || [];\n\n return occurrences\n .filter(date => !exceptions.includes(date.getTime()))\n .map(date => {\n // Calculate individual instance end date based on original duration\n const instanceEnd = addMilliseconds(date, duration);\n\n // We extract everything from the recurrent model EXCEPT the recurrence-specific \n // fields and the 'type' field, to strictly conform to the Event interface.\n const {\n recurrenceRule,\n recurrenceExceptions,\n type: _parentType, // ignore the 'recurrent' type\n ...baseProps\n } = recurrentEvent;\n\n return {\n ...baseProps,\n id: `${recurrentEvent.id}_${date.getTime()}`,\n start: date,\n end: instanceEnd,\n type: 'event', // Behave as a normal event for rendering\n isRecurrenceInstance: true,\n parentRecurrenceId: recurrentEvent.id,\n recurrenceDate: date\n } as Event;\n });\n}\n","import { Component, inject, input, effect, untracked } from '@angular/core';\nimport { DEFAULT_EVENT_INPUTS } from '../../../core/config/default-schedule-config';\nimport { CommonModule } from '@angular/common';\nimport { Event as EventModel, RecurrentEventModel } from '../../../core/models/event.model';\nimport { RESOURCE_ID_TOKEN } from '../../resource-events/resource-events';\nimport { CalendarStore } from '../../../core/store/calendar.store';\nimport { output } from '@angular/core';\nimport { DragInteractionData, EventInteraction, ResizeInteractionData } from '../../../core/models/interaction.model';\nimport { expandRecurrentEvent } from '../../../shared/helpers/recurrent-events.helpers';\nimport { filter, takeUntil } from 'rxjs/operators';\nimport { Subject } from 'rxjs';\n\n@Component({\n selector: 'mglon-recurrent-event',\n standalone: true,\n imports: [CommonModule],\n template: `<!-- Events are managed declaratively -->`,\n styles: [`:host { display: none; }`]\n})\n\nexport class RecurrentEvent {\n readonly id = input.required<string>();\n readonly title = input.required<string>();\n readonly startDate = input.required<Date>();\n readonly endDate = input.required<Date>();\n readonly color = input<string>();\n readonly allDay = input<boolean>(DEFAULT_EVENT_INPUTS.allDay);\n readonly description = input<string>(DEFAULT_EVENT_INPUTS.description);\n readonly data = input<any>(DEFAULT_EVENT_INPUTS.data);\n /** Optional explicit resource ID (if not nested in mglon-resource) */\n readonly resourceId = input<string>();\n private readonly parentResourceId = inject(RESOURCE_ID_TOKEN, { optional: true });\n\n /** If true, the event cannot be edited */\n readonly isReadOnly = input<boolean>(false);\n\n /** If true, the event is visually blocked (e.g., maintenance) */\n readonly isBlocked = input<boolean>(false);\n\n /** Flexible user-defined data */\n readonly metadata = input<any>();\n\n /** Tags for filtering and styling */\n readonly tags = input<string[]>([]);\n\n /** Recurrence rule defining the pattern */\n readonly recurrenceRule = input.required<any>(); // TODO: Type this properly\n\n /** Specific dates to exclude */\n readonly recurrenceExceptions = input<Date[]>();\n\n // --- Interaction Outputs ---\n readonly eventClick = output<EventInteraction>();\n readonly eventDblClick = output<EventInteraction>();\n readonly eventContextMenu = output<EventInteraction>();\n readonly eventMouseEnter = output<EventInteraction>();\n readonly eventMouseLeave = output<EventInteraction>();\n\n private readonly destroy$ = new Subject<void>();\n private store = inject(CalendarStore)\n\n constructor() {\n effect(() => {\n // Trigger this effect when range OR any relevant input signal changes\n this.store.viewRange();\n this.id();\n this.title();\n this.startDate();\n this.endDate();\n this.recurrenceRule();\n\n untracked(() => {\n this.registerEvent();\n });\n });\n }\n\n ngOnInit(): void {\n this.setupInteractionListeners();\n }\n\n private setupInteractionListeners(): void {\n this.store.getInteractions()\n .pipe(\n filter(e => e.eventId === this.id()),\n takeUntil(this.destroy$)\n )\n .subscribe(e => {\n switch (e.type) {\n case 'click': this.eventClick.emit(e.payload); break;\n case 'dblclick': this.eventDblClick.emit(e.payload); break;\n case 'contextmenu': this.eventContextMenu.emit(e.payload); break;\n case 'mouseenter': this.eventMouseEnter.emit(e.payload); break;\n case 'mouseleave': this.eventMouseLeave.emit(e.payload); break;\n }\n });\n }\n\n private currentInstanceIds: string[] = [];\n\n /**\n * Lifecycle: Unregister event and all its instances from store\n */\n ngOnDestroy(): void {\n this.destroy$.next();\n this.destroy$.complete();\n this.cleanup();\n }\n\n private cleanup(): void {\n try {\n // 1. Unregister all instances\n this.currentInstanceIds.forEach(id => this.store.unregisterEvent(id));\n this.currentInstanceIds = [];\n\n // 2. Unregister parent\n const parentId = this.id();\n if (parentId) {\n this.store.unregisterEvent(parentId);\n }\n } catch (e) {\n // Ignore errors during cleanup\n }\n }\n\n private registerEvent(): void {\n // 1. Prepare Parent Master\n const parentEvent: RecurrentEventModel = {\n id: this.id(),\n resourceId: this.resourceId() || this.parentResourceId || undefined,\n title: this.title(),\n description: this.description(),\n tags: this.tags(),\n start: this.startDate(),\n end: this.endDate(),\n color: this.color(),\n isReadOnly: this.isReadOnly(),\n isBlocked: this.isBlocked(),\n isAllDay: this.allDay(),\n metadata: this.metadata(),\n type: 'recurrent',\n recurrenceRule: this.recurrenceRule(),\n recurrenceExceptions: this.recurrenceExceptions()\n };\n\n // 2. Cleanup previous instances before re-registering\n this.currentInstanceIds.forEach(id => this.store.unregisterEvent(id));\n this.currentInstanceIds = [];\n\n // 3. Register the parent recurrent event (Master definition)\n this.store.registerEvent(parentEvent);\n\n // 4. Expand and register instances for the current range\n const range = this.store.viewRange();\n const instances = expandRecurrentEvent(parentEvent, range);\n\n instances.forEach(instance => {\n this.store.registerEvent(instance);\n this.currentInstanceIds.push(instance.id);\n });\n }\n}\n","import { Component, input, computed } from '@angular/core';\nimport { CommonModule } from '@angular/common';\n\n@Component({\n selector: 'button[mglon-fab-button], a[mglon-fab-button]',\n standalone: true,\n imports: [CommonModule],\n template: '<ng-content></ng-content>',\n styleUrl: './fab-button.scss',\n host: {\n '[class]': 'classes()',\n '[attr.data-size]': 'size()'\n }\n})\nexport class FabButtonComponent {\n readonly size = input<'md' | 'lg'>('lg');\n readonly color = input<'primary' | 'secondary' | 'surface'>('surface');\n\n // Optional: extended FAB (with text) vs standard (icon only) could be handled via CSS classes check or another input\n readonly extended = input<boolean>(false);\n\n classes = computed(() => {\n return [\n 'mglon-fab-button',\n `size-${this.size()}`,\n `color-${this.color()}`,\n this.extended() ? 'extended' : ''\n ].join(' ');\n });\n}\n","/*\n * Public API Surface of ng-scheduler\n */\n\nexport * from './lib/features/resource/resource-view/resource-view';\nexport * from './lib/features/week/week-view/week-view';\nexport * from './lib/features/schedule/schedule/schedule';\nexport * from './lib/features/event/event/event';\nexport * from './lib/features/resource-events/resource-events';\nexport * from './lib/features/event/recurrent-event/recurrent-event';\n// Selection Types\nexport type { SelectionResult } from './lib/core/background-selection/selectable/selectable.directive';\n\n// Configuration & Models\nexport * from './lib/core/models/config-schedule';\nexport * from './lib/core/models/ui-config';\n\n// Components & UI\nexport * from './lib/shared/components/buttons/index';\n\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["DAYS_IN_WEEK"],"mappings":"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"}