@mintplayer/ng-bootstrap 21.22.0 → 21.23.1
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.
- package/fesm2022/mintplayer-ng-bootstrap-accordion.mjs +20 -20
- package/fesm2022/mintplayer-ng-bootstrap-accordion.mjs.map +1 -1
- package/fesm2022/mintplayer-ng-bootstrap-alert.mjs +8 -8
- package/fesm2022/mintplayer-ng-bootstrap-alert.mjs.map +1 -1
- package/fesm2022/mintplayer-ng-bootstrap-badge.mjs +5 -5
- package/fesm2022/mintplayer-ng-bootstrap-badge.mjs.map +1 -1
- package/fesm2022/mintplayer-ng-bootstrap-breadcrumb.mjs +6 -6
- package/fesm2022/mintplayer-ng-bootstrap-breadcrumb.mjs.map +1 -1
- package/fesm2022/mintplayer-ng-bootstrap-button-group.mjs +3 -3
- package/fesm2022/mintplayer-ng-bootstrap-button-group.mjs.map +1 -1
- package/fesm2022/mintplayer-ng-bootstrap-button-type.mjs +4 -4
- package/fesm2022/mintplayer-ng-bootstrap-button-type.mjs.map +1 -1
- package/fesm2022/mintplayer-ng-bootstrap-calendar-month.mjs +9 -9
- package/fesm2022/mintplayer-ng-bootstrap-calendar-month.mjs.map +1 -1
- package/fesm2022/mintplayer-ng-bootstrap-calendar.mjs +10 -10
- package/fesm2022/mintplayer-ng-bootstrap-calendar.mjs.map +1 -1
- package/fesm2022/mintplayer-ng-bootstrap-card.mjs +8 -8
- package/fesm2022/mintplayer-ng-bootstrap-card.mjs.map +1 -1
- package/fesm2022/mintplayer-ng-bootstrap-carousel.mjs +25 -25
- package/fesm2022/mintplayer-ng-bootstrap-carousel.mjs.map +1 -1
- package/fesm2022/mintplayer-ng-bootstrap-close.mjs +3 -3
- package/fesm2022/mintplayer-ng-bootstrap-close.mjs.map +1 -1
- package/fesm2022/mintplayer-ng-bootstrap-code-snippet.mjs +7 -7
- package/fesm2022/mintplayer-ng-bootstrap-code-snippet.mjs.map +1 -1
- package/fesm2022/mintplayer-ng-bootstrap-color-picker.mjs +58 -58
- package/fesm2022/mintplayer-ng-bootstrap-color-picker.mjs.map +1 -1
- package/fesm2022/mintplayer-ng-bootstrap-container.mjs +3 -3
- package/fesm2022/mintplayer-ng-bootstrap-container.mjs.map +1 -1
- package/fesm2022/mintplayer-ng-bootstrap-context-menu.mjs +3 -3
- package/fesm2022/mintplayer-ng-bootstrap-context-menu.mjs.map +1 -1
- package/fesm2022/mintplayer-ng-bootstrap-copy.mjs +4 -4
- package/fesm2022/mintplayer-ng-bootstrap-copy.mjs.map +1 -1
- package/fesm2022/mintplayer-ng-bootstrap-datatable.mjs +20 -20
- package/fesm2022/mintplayer-ng-bootstrap-datatable.mjs.map +1 -1
- package/fesm2022/mintplayer-ng-bootstrap-datepicker.mjs +6 -6
- package/fesm2022/mintplayer-ng-bootstrap-datepicker.mjs.map +1 -1
- package/fesm2022/mintplayer-ng-bootstrap-dock.mjs +798 -1175
- package/fesm2022/mintplayer-ng-bootstrap-dock.mjs.map +1 -1
- package/fesm2022/mintplayer-ng-bootstrap-dropdown-divider.mjs +3 -3
- package/fesm2022/mintplayer-ng-bootstrap-dropdown-divider.mjs.map +1 -1
- package/fesm2022/mintplayer-ng-bootstrap-dropdown-menu.mjs +10 -10
- package/fesm2022/mintplayer-ng-bootstrap-dropdown-menu.mjs.map +1 -1
- package/fesm2022/mintplayer-ng-bootstrap-dropdown.mjs +15 -15
- package/fesm2022/mintplayer-ng-bootstrap-dropdown.mjs.map +1 -1
- package/fesm2022/mintplayer-ng-bootstrap-enhanced-paste.mjs +3 -3
- package/fesm2022/mintplayer-ng-bootstrap-enhanced-paste.mjs.map +1 -1
- package/fesm2022/mintplayer-ng-bootstrap-enum.mjs +3 -3
- package/fesm2022/mintplayer-ng-bootstrap-enum.mjs.map +1 -1
- package/fesm2022/mintplayer-ng-bootstrap-file-upload.mjs +16 -16
- package/fesm2022/mintplayer-ng-bootstrap-file-upload.mjs.map +1 -1
- package/fesm2022/mintplayer-ng-bootstrap-floating-labels.mjs +3 -3
- package/fesm2022/mintplayer-ng-bootstrap-floating-labels.mjs.map +1 -1
- package/fesm2022/mintplayer-ng-bootstrap-font-color.mjs +3 -3
- package/fesm2022/mintplayer-ng-bootstrap-font-color.mjs.map +1 -1
- package/fesm2022/mintplayer-ng-bootstrap-for.mjs +4 -4
- package/fesm2022/mintplayer-ng-bootstrap-for.mjs.map +1 -1
- package/fesm2022/mintplayer-ng-bootstrap-form.mjs +11 -11
- package/fesm2022/mintplayer-ng-bootstrap-form.mjs.map +1 -1
- package/fesm2022/mintplayer-ng-bootstrap-grid.mjs +26 -26
- package/fesm2022/mintplayer-ng-bootstrap-grid.mjs.map +1 -1
- package/fesm2022/mintplayer-ng-bootstrap-has-overlay.mjs +4 -4
- package/fesm2022/mintplayer-ng-bootstrap-has-overlay.mjs.map +1 -1
- package/fesm2022/mintplayer-ng-bootstrap-has-property.mjs +3 -3
- package/fesm2022/mintplayer-ng-bootstrap-has-property.mjs.map +1 -1
- package/fesm2022/mintplayer-ng-bootstrap-in-list.mjs +3 -3
- package/fesm2022/mintplayer-ng-bootstrap-in-list.mjs.map +1 -1
- package/fesm2022/mintplayer-ng-bootstrap-input-group.mjs +3 -3
- package/fesm2022/mintplayer-ng-bootstrap-input-group.mjs.map +1 -1
- package/fesm2022/mintplayer-ng-bootstrap-instance-of.mjs +14 -14
- package/fesm2022/mintplayer-ng-bootstrap-instance-of.mjs.map +1 -1
- package/fesm2022/mintplayer-ng-bootstrap-let.mjs +4 -4
- package/fesm2022/mintplayer-ng-bootstrap-let.mjs.map +1 -1
- package/fesm2022/mintplayer-ng-bootstrap-linify.mjs +3 -3
- package/fesm2022/mintplayer-ng-bootstrap-linify.mjs.map +1 -1
- package/fesm2022/mintplayer-ng-bootstrap-list-group.mjs +7 -7
- package/fesm2022/mintplayer-ng-bootstrap-list-group.mjs.map +1 -1
- package/fesm2022/mintplayer-ng-bootstrap-markdown.mjs +12 -12
- package/fesm2022/mintplayer-ng-bootstrap-markdown.mjs.map +1 -1
- package/fesm2022/mintplayer-ng-bootstrap-marquee.mjs +3 -3
- package/fesm2022/mintplayer-ng-bootstrap-marquee.mjs.map +1 -1
- package/fesm2022/mintplayer-ng-bootstrap-modal.mjs +24 -24
- package/fesm2022/mintplayer-ng-bootstrap-modal.mjs.map +1 -1
- package/fesm2022/mintplayer-ng-bootstrap-multiselect.mjs +24 -24
- package/fesm2022/mintplayer-ng-bootstrap-multiselect.mjs.map +1 -1
- package/fesm2022/mintplayer-ng-bootstrap-navbar-toggler.mjs +5 -5
- package/fesm2022/mintplayer-ng-bootstrap-navbar-toggler.mjs.map +1 -1
- package/fesm2022/mintplayer-ng-bootstrap-navbar.mjs +58 -58
- package/fesm2022/mintplayer-ng-bootstrap-navbar.mjs.map +1 -1
- package/fesm2022/mintplayer-ng-bootstrap-navigation-lock.mjs +8 -8
- package/fesm2022/mintplayer-ng-bootstrap-navigation-lock.mjs.map +1 -1
- package/fesm2022/mintplayer-ng-bootstrap-no-noscript.mjs +3 -3
- package/fesm2022/mintplayer-ng-bootstrap-no-noscript.mjs.map +1 -1
- package/fesm2022/mintplayer-ng-bootstrap-offcanvas.mjs +40 -40
- package/fesm2022/mintplayer-ng-bootstrap-offcanvas.mjs.map +1 -1
- package/fesm2022/mintplayer-ng-bootstrap-ordinal-number.mjs +3 -3
- package/fesm2022/mintplayer-ng-bootstrap-ordinal-number.mjs.map +1 -1
- package/fesm2022/mintplayer-ng-bootstrap-pagination.mjs +12 -12
- package/fesm2022/mintplayer-ng-bootstrap-pagination.mjs.map +1 -1
- package/fesm2022/mintplayer-ng-bootstrap-parallax.mjs +6 -6
- package/fesm2022/mintplayer-ng-bootstrap-parallax.mjs.map +1 -1
- package/fesm2022/mintplayer-ng-bootstrap-placeholder.mjs +7 -7
- package/fesm2022/mintplayer-ng-bootstrap-placeholder.mjs.map +1 -1
- package/fesm2022/mintplayer-ng-bootstrap-playlist-toggler.mjs +5 -5
- package/fesm2022/mintplayer-ng-bootstrap-playlist-toggler.mjs.map +1 -1
- package/fesm2022/mintplayer-ng-bootstrap-popover.mjs +20 -20
- package/fesm2022/mintplayer-ng-bootstrap-popover.mjs.map +1 -1
- package/fesm2022/mintplayer-ng-bootstrap-priority-nav.mjs +30 -30
- package/fesm2022/mintplayer-ng-bootstrap-priority-nav.mjs.map +1 -1
- package/fesm2022/mintplayer-ng-bootstrap-progress-bar.mjs +17 -17
- package/fesm2022/mintplayer-ng-bootstrap-progress-bar.mjs.map +1 -1
- package/fesm2022/mintplayer-ng-bootstrap-range.mjs +9 -9
- package/fesm2022/mintplayer-ng-bootstrap-range.mjs.map +1 -1
- package/fesm2022/mintplayer-ng-bootstrap-rating.mjs +7 -7
- package/fesm2022/mintplayer-ng-bootstrap-rating.mjs.map +1 -1
- package/fesm2022/mintplayer-ng-bootstrap-resizable.mjs +25 -25
- package/fesm2022/mintplayer-ng-bootstrap-resizable.mjs.map +1 -1
- package/fesm2022/mintplayer-ng-bootstrap-scheduler.mjs +16 -16
- package/fesm2022/mintplayer-ng-bootstrap-scheduler.mjs.map +1 -1
- package/fesm2022/mintplayer-ng-bootstrap-scrollspy.mjs +14 -14
- package/fesm2022/mintplayer-ng-bootstrap-scrollspy.mjs.map +1 -1
- package/fesm2022/mintplayer-ng-bootstrap-searchbox.mjs +24 -24
- package/fesm2022/mintplayer-ng-bootstrap-searchbox.mjs.map +1 -1
- package/fesm2022/mintplayer-ng-bootstrap-select.mjs +19 -19
- package/fesm2022/mintplayer-ng-bootstrap-select.mjs.map +1 -1
- package/fesm2022/mintplayer-ng-bootstrap-select2.mjs +20 -20
- package/fesm2022/mintplayer-ng-bootstrap-select2.mjs.map +1 -1
- package/fesm2022/mintplayer-ng-bootstrap-shell.mjs +11 -11
- package/fesm2022/mintplayer-ng-bootstrap-shell.mjs.map +1 -1
- package/fesm2022/mintplayer-ng-bootstrap-signature-pad.mjs +7 -7
- package/fesm2022/mintplayer-ng-bootstrap-signature-pad.mjs.map +1 -1
- package/fesm2022/mintplayer-ng-bootstrap-slugify.mjs +3 -3
- package/fesm2022/mintplayer-ng-bootstrap-slugify.mjs.map +1 -1
- package/fesm2022/mintplayer-ng-bootstrap-spinner.mjs +7 -7
- package/fesm2022/mintplayer-ng-bootstrap-spinner.mjs.map +1 -1
- package/fesm2022/mintplayer-ng-bootstrap-split-string.mjs +3 -3
- package/fesm2022/mintplayer-ng-bootstrap-split-string.mjs.map +1 -1
- package/fesm2022/mintplayer-ng-bootstrap-sticky-footer.mjs +6 -6
- package/fesm2022/mintplayer-ng-bootstrap-sticky-footer.mjs.map +1 -1
- package/fesm2022/mintplayer-ng-bootstrap-tab-control.mjs +57 -67
- package/fesm2022/mintplayer-ng-bootstrap-tab-control.mjs.map +1 -1
- package/fesm2022/mintplayer-ng-bootstrap-table.mjs +10 -10
- package/fesm2022/mintplayer-ng-bootstrap-table.mjs.map +1 -1
- package/fesm2022/mintplayer-ng-bootstrap-timepicker.mjs +8 -8
- package/fesm2022/mintplayer-ng-bootstrap-timepicker.mjs.map +1 -1
- package/fesm2022/mintplayer-ng-bootstrap-toast.mjs +24 -24
- package/fesm2022/mintplayer-ng-bootstrap-toast.mjs.map +1 -1
- package/fesm2022/mintplayer-ng-bootstrap-toggle-button.mjs +22 -22
- package/fesm2022/mintplayer-ng-bootstrap-toggle-button.mjs.map +1 -1
- package/fesm2022/mintplayer-ng-bootstrap-tooltip.mjs +10 -10
- package/fesm2022/mintplayer-ng-bootstrap-tooltip.mjs.map +1 -1
- package/fesm2022/mintplayer-ng-bootstrap-treeview.mjs +14 -14
- package/fesm2022/mintplayer-ng-bootstrap-treeview.mjs.map +1 -1
- package/fesm2022/mintplayer-ng-bootstrap-trust-html.mjs +3 -3
- package/fesm2022/mintplayer-ng-bootstrap-trust-html.mjs.map +1 -1
- package/fesm2022/mintplayer-ng-bootstrap-typeahead.mjs +10 -10
- package/fesm2022/mintplayer-ng-bootstrap-typeahead.mjs.map +1 -1
- package/fesm2022/mintplayer-ng-bootstrap-uc-first.mjs +3 -3
- package/fesm2022/mintplayer-ng-bootstrap-uc-first.mjs.map +1 -1
- package/fesm2022/mintplayer-ng-bootstrap-user-agent.mjs +3 -3
- package/fesm2022/mintplayer-ng-bootstrap-user-agent.mjs.map +1 -1
- package/fesm2022/mintplayer-ng-bootstrap-viewport.mjs +3 -3
- package/fesm2022/mintplayer-ng-bootstrap-viewport.mjs.map +1 -1
- package/fesm2022/mintplayer-ng-bootstrap-virtual-datatable.mjs +10 -10
- package/fesm2022/mintplayer-ng-bootstrap-virtual-datatable.mjs.map +1 -1
- package/fesm2022/mintplayer-ng-bootstrap-web-components-scheduler-core.mjs +1356 -0
- package/fesm2022/mintplayer-ng-bootstrap-web-components-scheduler-core.mjs.map +1 -0
- package/fesm2022/mintplayer-ng-bootstrap-web-components-scheduler.mjs +3819 -0
- package/fesm2022/mintplayer-ng-bootstrap-web-components-scheduler.mjs.map +1 -0
- package/fesm2022/mintplayer-ng-bootstrap-web-components-splitter.mjs +731 -0
- package/fesm2022/mintplayer-ng-bootstrap-web-components-splitter.mjs.map +1 -0
- package/fesm2022/mintplayer-ng-bootstrap-web-components-tab-control.mjs +549 -0
- package/fesm2022/mintplayer-ng-bootstrap-web-components-tab-control.mjs.map +1 -0
- package/fesm2022/mintplayer-ng-bootstrap-word-count.mjs +3 -3
- package/fesm2022/mintplayer-ng-bootstrap-word-count.mjs.map +1 -1
- package/package.json +20 -6
- package/types/mintplayer-ng-bootstrap-dock.d.ts +55 -19
- package/types/mintplayer-ng-bootstrap-scheduler.d.ts +2 -2
- package/types/mintplayer-ng-bootstrap-tab-control.d.ts +7 -11
- package/types/mintplayer-ng-bootstrap-web-components-scheduler-core.d.ts +890 -0
- package/types/mintplayer-ng-bootstrap-web-components-scheduler.d.ts +354 -0
- package/types/mintplayer-ng-bootstrap-web-components-splitter.d.ts +165 -0
- package/types/mintplayer-ng-bootstrap-web-components-tab-control.d.ts +95 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mintplayer-ng-bootstrap-web-components-scheduler-core.mjs","sources":["../../../../libs/mintplayer-ng-bootstrap/web-components/scheduler-core/src/models/resource.ts","../../../../libs/mintplayer-ng-bootstrap/web-components/scheduler-core/src/models/options.ts","../../../../libs/mintplayer-ng-bootstrap/web-components/scheduler-core/src/models/index.ts","../../../../libs/mintplayer-ng-bootstrap/web-components/scheduler-core/src/services/date.service.ts","../../../../libs/mintplayer-ng-bootstrap/web-components/scheduler-core/src/services/timeline.service.ts","../../../../libs/mintplayer-ng-bootstrap/web-components/scheduler-core/src/services/position.service.ts","../../../../libs/mintplayer-ng-bootstrap/web-components/scheduler-core/src/services/resource.service.ts","../../../../libs/mintplayer-ng-bootstrap/web-components/scheduler-core/src/utils/id.ts","../../../../libs/mintplayer-ng-bootstrap/web-components/scheduler-core/src/utils/color.ts","../../../../libs/mintplayer-ng-bootstrap/web-components/scheduler-core/src/utils/dom.ts","../../../../libs/mintplayer-ng-bootstrap/web-components/scheduler-core/src/index.ts","../../../../libs/mintplayer-ng-bootstrap/web-components/scheduler-core/mintplayer-ng-bootstrap-web-components-scheduler-core.ts"],"sourcesContent":["import { SchedulerEvent } from './event';\n\n/**\n * Represents a resource (e.g., a room, employee, machine)\n */\nexport interface Resource {\n /** Unique identifier for the resource */\n id: string;\n /** Display title of the resource */\n title: string;\n /** Events assigned to this resource */\n events?: SchedulerEvent[];\n /** Background color for this resource's events */\n color?: string;\n /** Default event color for this resource */\n eventColor?: string;\n /** Sort order */\n order?: number;\n /** Custom properties for extending resource data */\n extendedProps?: Record<string, unknown>;\n}\n\n/**\n * Represents a group of resources (e.g., a department, category)\n */\nexport interface ResourceGroup {\n /** Unique identifier for the group */\n id: string;\n /** Display title of the group */\n title: string;\n /** Child resources or nested groups */\n children: (Resource | ResourceGroup)[];\n /** Whether the group is collapsed in the UI */\n collapsed?: boolean;\n /** Background color for the group header */\n color?: string;\n /** Sort order */\n order?: number;\n}\n\n/**\n * Type guard to check if an item is a Resource\n */\nexport function isResource(item: Resource | ResourceGroup): item is Resource {\n return 'events' in item || !('children' in item);\n}\n\n/**\n * Type guard to check if an item is a ResourceGroup\n */\nexport function isResourceGroup(item: Resource | ResourceGroup): item is ResourceGroup {\n return 'children' in item;\n}\n\n/**\n * Flattened resource with depth information for rendering\n */\nexport interface FlattenedResource {\n /** The resource or group */\n item: Resource | ResourceGroup;\n /** Nesting depth (0 = top level) */\n depth: number;\n /** Whether this item is visible (not in a collapsed group) */\n visible: boolean;\n /** Parent group ID if any */\n parentId?: string;\n}\n","import { DayOfWeek, TimeFormat, ViewType } from './types';\n\n/**\n * Business hours configuration\n */\nexport interface BusinessHours {\n /** Days of the week when business hours apply (0 = Sunday) */\n daysOfWeek: DayOfWeek[];\n /** Start time in HH:mm format */\n startTime: string;\n /** End time in HH:mm format */\n endTime: string;\n}\n\n/**\n * Header toolbar configuration\n */\nexport interface HeaderToolbar {\n /** Left section content */\n start?: string;\n /** Center section content */\n center?: string;\n /** Right section content */\n end?: string;\n}\n\n/**\n * Configuration options for the scheduler\n */\nexport interface SchedulerOptions {\n // View settings\n /** Initial view to display */\n initialView?: ViewType;\n /** Initial date to display */\n initialDate?: Date;\n\n // Locale settings\n /** Locale for date formatting (e.g., 'en-US') */\n locale?: string;\n /** First day of the week (0 = Sunday, 1 = Monday) */\n firstDayOfWeek?: DayOfWeek;\n /** Timezone identifier (e.g., 'America/New_York') */\n timeZone?: string;\n\n // Time display settings\n /** Duration of each time slot in seconds (default: 1800 = 30 minutes) */\n slotDuration?: number;\n /** Interval between slot labels in seconds */\n slotLabelInterval?: number;\n /** Minimum time to display (e.g., '00:00:00') */\n slotMinTime?: string;\n /** Maximum time to display (e.g., '24:00:00') */\n slotMaxTime?: string;\n /** Time format (12h or 24h) */\n timeFormat?: TimeFormat;\n\n // Business hours\n /** Business hours configuration */\n businessHours?: BusinessHours;\n\n // Sizing\n /** Height of the scheduler ('auto', number in px, or CSS value) */\n height?: 'auto' | number | string;\n /** Height of the content area */\n contentHeight?: 'auto' | number;\n /** Aspect ratio for auto-sizing */\n aspectRatio?: number;\n /** Whether to expand rows to fill available space */\n expandRows?: boolean;\n\n // Header toolbar\n /** Header toolbar configuration */\n headerToolbar?: HeaderToolbar;\n\n // Interaction\n /** Whether events can be edited */\n editable?: boolean;\n /** Whether date ranges can be selected */\n selectable?: boolean;\n /** Whether to show a mirror element during selection */\n selectMirror?: boolean;\n /** Whether event duration can be changed */\n eventDurationEditable?: boolean;\n /** Whether event start time can be changed */\n eventStartEditable?: boolean;\n\n // Drag settings\n /** Duration of revert animation in ms */\n dragRevertDuration?: number;\n /** Whether to scroll during drag */\n dragScroll?: boolean;\n /** Snap duration in seconds */\n snapDuration?: number;\n\n // Display options\n /** Whether to show current time indicator */\n nowIndicator?: boolean;\n /** Whether to show week numbers */\n weekNumbers?: boolean;\n /** Text to display before week number */\n weekText?: string;\n /** Maximum events to show per day (true = show \"+X more\" link) */\n dayMaxEvents?: boolean | number;\n}\n\n/**\n * Default options for the scheduler\n */\nexport const DEFAULT_OPTIONS: Required<SchedulerOptions> = {\n initialView: 'week',\n initialDate: new Date(),\n locale: 'en-US',\n firstDayOfWeek: 1,\n timeZone: 'local',\n slotDuration: 1800,\n slotLabelInterval: 3600,\n slotMinTime: '00:00:00',\n slotMaxTime: '24:00:00',\n timeFormat: '24h',\n businessHours: {\n daysOfWeek: [1, 2, 3, 4, 5],\n startTime: '09:00',\n endTime: '17:00',\n },\n height: 'auto',\n contentHeight: 'auto',\n aspectRatio: 1.35,\n expandRows: false,\n headerToolbar: {\n start: 'prev,next today',\n center: 'title',\n end: 'year,month,week,day,timeline',\n },\n editable: true,\n selectable: true,\n selectMirror: true,\n eventDurationEditable: true,\n eventStartEditable: true,\n dragRevertDuration: 500,\n dragScroll: true,\n snapDuration: 1800,\n nowIndicator: true,\n weekNumbers: false,\n weekText: 'W',\n dayMaxEvents: true,\n};\n","// Types\nexport * from './types';\n\n// Event models\nexport * from './event';\n\n// Resource models\nexport * from './resource';\n\n// Time slot models\nexport * from './time-slot';\n\n// Options\nexport * from './options';\n\n// Drag state\nexport * from './drag-state';\n\n// Custom events\nexport * from './events';\n","import { DayOfWeek, TimeFormat } from '../models/types';\nimport { TimeSlot, TimeSlotRow, SchedulerGrid } from '../models/time-slot';\n\n/**\n * Service for date calculations and formatting\n */\nexport class DateService {\n /**\n * Get the start of the week for a given date\n */\n getWeekStart(date: Date, firstDayOfWeek: DayOfWeek = 1): Date {\n const d = new Date(date);\n const day = d.getDay();\n const diff = (day < firstDayOfWeek ? 7 : 0) + day - firstDayOfWeek;\n d.setDate(d.getDate() - diff);\n d.setHours(0, 0, 0, 0);\n return d;\n }\n\n /**\n * Get all days in a week starting from a given date\n */\n getWeekDays(date: Date, firstDayOfWeek: DayOfWeek = 1): Date[] {\n const weekStart = this.getWeekStart(date, firstDayOfWeek);\n const days: Date[] = [];\n for (let i = 0; i < 7; i++) {\n const day = new Date(weekStart);\n day.setDate(weekStart.getDate() + i);\n days.push(day);\n }\n return days;\n }\n\n /**\n * Get the start of the month for a given date\n */\n getMonthStart(date: Date): Date {\n return new Date(date.getFullYear(), date.getMonth(), 1, 0, 0, 0, 0);\n }\n\n /**\n * Get the end of the month for a given date\n */\n getMonthEnd(date: Date): Date {\n return new Date(date.getFullYear(), date.getMonth() + 1, 0, 23, 59, 59, 999);\n }\n\n /**\n * Get all days in a month\n */\n getMonthDays(date: Date): Date[] {\n const start = this.getMonthStart(date);\n const end = this.getMonthEnd(date);\n const days: Date[] = [];\n const current = new Date(start);\n while (current <= end) {\n days.push(new Date(current));\n current.setDate(current.getDate() + 1);\n }\n return days;\n }\n\n /**\n * Get weeks for a month view (includes days from adjacent months)\n */\n getMonthWeeks(date: Date, firstDayOfWeek: DayOfWeek = 1): Date[][] {\n const monthStart = this.getMonthStart(date);\n const monthEnd = this.getMonthEnd(date);\n const viewStart = this.getWeekStart(monthStart, firstDayOfWeek);\n\n const weeks: Date[][] = [];\n let current = new Date(viewStart);\n\n // Generate 6 weeks to ensure consistent grid\n for (let w = 0; w < 6; w++) {\n const week: Date[] = [];\n for (let d = 0; d < 7; d++) {\n week.push(new Date(current));\n current.setDate(current.getDate() + 1);\n }\n weeks.push(week);\n\n // Stop if we've passed the end of the month and completed the week\n if (current > monthEnd && weeks.length >= 4) {\n break;\n }\n }\n\n return weeks;\n }\n\n /**\n * Get the start of the year for a given date\n */\n getYearStart(date: Date): Date {\n return new Date(date.getFullYear(), 0, 1, 0, 0, 0, 0);\n }\n\n /**\n * Get all months in a year\n */\n getYearMonths(date: Date): Date[] {\n const months: Date[] = [];\n for (let i = 0; i < 12; i++) {\n months.push(new Date(date.getFullYear(), i, 1));\n }\n return months;\n }\n\n /**\n * Get time slots for a day\n */\n getTimeSlots(\n date: Date,\n slotDuration: number = 1800,\n minTime: string = '00:00:00',\n maxTime: string = '24:00:00'\n ): TimeSlot[] {\n const slots: TimeSlot[] = [];\n const [minHour, minMinute] = minTime.split(':').map(Number);\n const [maxHour, maxMinute] = maxTime.split(':').map(Number);\n\n const startSeconds = minHour * 3600 + minMinute * 60;\n const endSeconds = maxHour * 3600 + maxMinute * 60;\n\n for (let seconds = startSeconds; seconds < endSeconds; seconds += slotDuration) {\n const slotStart = new Date(date);\n slotStart.setHours(0, 0, 0, 0);\n slotStart.setSeconds(seconds);\n\n const slotEnd = new Date(slotStart);\n slotEnd.setSeconds(slotStart.getSeconds() + slotDuration);\n\n slots.push({ start: slotStart, end: slotEnd });\n }\n\n return slots;\n }\n\n /**\n * Generate a scheduler grid for week view\n */\n getWeekGrid(\n date: Date,\n firstDayOfWeek: DayOfWeek = 1,\n slotDuration: number = 1800,\n minTime: string = '00:00:00',\n maxTime: string = '24:00:00',\n timeFormat: TimeFormat = '24h'\n ): SchedulerGrid {\n const columns = this.getWeekDays(date, firstDayOfWeek);\n const rows: TimeSlotRow[] = [];\n const allSlots: TimeSlot[] = [];\n\n // Get time slots for the first day to determine row structure\n const daySlots = this.getTimeSlots(columns[0], slotDuration, minTime, maxTime);\n\n for (const slot of daySlots) {\n const rowSlots: TimeSlot[] = [];\n\n for (const day of columns) {\n const slotStart = new Date(day);\n slotStart.setHours(slot.start.getHours(), slot.start.getMinutes(), 0, 0);\n\n const slotEnd = new Date(day);\n slotEnd.setHours(slot.end.getHours(), slot.end.getMinutes(), 0, 0);\n\n const timeSlot: TimeSlot = { start: slotStart, end: slotEnd };\n rowSlots.push(timeSlot);\n allSlots.push(timeSlot);\n }\n\n rows.push({\n time: slot.start,\n label: this.formatTime(slot.start, timeFormat),\n slots: rowSlots,\n });\n }\n\n return { columns, rows, allSlots };\n }\n\n /**\n * Round a date to the nearest slot\n */\n roundToSlot(date: Date, slotDuration: number): Date {\n const ms = date.getTime();\n const slotMs = slotDuration * 1000;\n const rounded = Math.round(ms / slotMs) * slotMs;\n return new Date(rounded);\n }\n\n /**\n * Floor a date to the slot start\n */\n floorToSlot(date: Date, slotDuration: number): Date {\n const ms = date.getTime();\n const slotMs = slotDuration * 1000;\n const floored = Math.floor(ms / slotMs) * slotMs;\n return new Date(floored);\n }\n\n /**\n * Ceiling a date to the slot end\n */\n ceilToSlot(date: Date, slotDuration: number): Date {\n const ms = date.getTime();\n const slotMs = slotDuration * 1000;\n const ceiled = Math.ceil(ms / slotMs) * slotMs;\n return new Date(ceiled);\n }\n\n /**\n * Detect time format preference based on locale\n * Uses the Intl API to determine if the locale uses 12-hour or 24-hour time\n */\n detectTimeFormat(locale?: string): TimeFormat {\n const resolvedLocale = locale || (typeof navigator !== 'undefined' ? navigator.language : 'en-US');\n try {\n const options = new Intl.DateTimeFormat(resolvedLocale, { hour: 'numeric' }).resolvedOptions();\n return options.hour12 ? '12h' : '24h';\n } catch {\n // Fallback to 24h if detection fails\n return '24h';\n }\n }\n\n /**\n * Format time according to format preference\n */\n formatTime(date: Date, format: TimeFormat = '24h'): string {\n const hours = date.getHours();\n const minutes = date.getMinutes();\n\n if (format === '12h') {\n const period = hours >= 12 ? 'PM' : 'AM';\n const hour12 = hours % 12 || 12;\n return `${hour12}:${minutes.toString().padStart(2, '0')} ${period}`;\n }\n\n return `${hours.toString().padStart(2, '0')}:${minutes.toString().padStart(2, '0')}`;\n }\n\n /**\n * Format date for display\n */\n formatDate(date: Date, locale: string = 'en-US', options?: Intl.DateTimeFormatOptions): string {\n return date.toLocaleDateString(locale, options);\n }\n\n /**\n * Format date with weekday\n */\n formatDateWithWeekday(date: Date, locale: string = 'en-US'): string {\n return this.formatDate(date, locale, { weekday: 'short', month: 'short', day: 'numeric' });\n }\n\n /**\n * Get month name\n */\n getMonthName(date: Date, locale: string = 'en-US', format: 'long' | 'short' = 'long'): string {\n return date.toLocaleDateString(locale, { month: format });\n }\n\n /**\n * Get day name\n */\n getDayName(date: Date, locale: string = 'en-US', format: 'long' | 'short' | 'narrow' = 'short'): string {\n return date.toLocaleDateString(locale, { weekday: format });\n }\n\n /**\n * Check if two dates are the same day\n */\n isSameDay(date1: Date, date2: Date): boolean {\n return (\n date1.getFullYear() === date2.getFullYear() &&\n date1.getMonth() === date2.getMonth() &&\n date1.getDate() === date2.getDate()\n );\n }\n\n /**\n * Check if two dates are the same month\n */\n isSameMonth(date1: Date, date2: Date): boolean {\n return (\n date1.getFullYear() === date2.getFullYear() &&\n date1.getMonth() === date2.getMonth()\n );\n }\n\n /**\n * Check if a date is today\n */\n isToday(date: Date): boolean {\n return this.isSameDay(date, new Date());\n }\n\n /**\n * Check if a date is in the past\n */\n isPast(date: Date): boolean {\n const now = new Date();\n now.setHours(0, 0, 0, 0);\n const check = new Date(date);\n check.setHours(0, 0, 0, 0);\n return check < now;\n }\n\n /**\n * Check if a date falls within a range\n */\n isInRange(date: Date, start: Date, end: Date): boolean {\n return date >= start && date <= end;\n }\n\n /**\n * Get the number of days between two dates\n */\n getDaysDifference(date1: Date, date2: Date): number {\n const d1 = new Date(date1);\n d1.setHours(0, 0, 0, 0);\n const d2 = new Date(date2);\n d2.setHours(0, 0, 0, 0);\n return Math.round((d2.getTime() - d1.getTime()) / (1000 * 60 * 60 * 24));\n }\n\n /**\n * Add days to a date\n */\n addDays(date: Date, days: number): Date {\n const result = new Date(date);\n result.setDate(result.getDate() + days);\n return result;\n }\n\n /**\n * Add weeks to a date\n */\n addWeeks(date: Date, weeks: number): Date {\n return this.addDays(date, weeks * 7);\n }\n\n /**\n * Add months to a date\n */\n addMonths(date: Date, months: number): Date {\n const result = new Date(date);\n result.setMonth(result.getMonth() + months);\n return result;\n }\n\n /**\n * Add years to a date\n */\n addYears(date: Date, years: number): Date {\n const result = new Date(date);\n result.setFullYear(result.getFullYear() + years);\n return result;\n }\n\n /**\n * Get week number of the year\n */\n getWeekNumber(date: Date): number {\n const d = new Date(Date.UTC(date.getFullYear(), date.getMonth(), date.getDate()));\n const dayNum = d.getUTCDay() || 7;\n d.setUTCDate(d.getUTCDate() + 4 - dayNum);\n const yearStart = new Date(Date.UTC(d.getUTCFullYear(), 0, 1));\n return Math.ceil(((d.getTime() - yearStart.getTime()) / 86400000 + 1) / 7);\n }\n\n /**\n * Get seconds from midnight for a date\n */\n getSecondsFromMidnight(date: Date): number {\n return date.getHours() * 3600 + date.getMinutes() * 60 + date.getSeconds();\n }\n\n /**\n * Get duration in seconds between two dates\n */\n getDurationInSeconds(start: Date, end: Date): number {\n return Math.round((end.getTime() - start.getTime()) / 1000);\n }\n}\n\n/**\n * Singleton instance of DateService\n */\nexport const dateService = new DateService();\n","import {\n SchedulerEvent,\n SchedulerEventPart,\n SchedulerEventWithParts,\n PreviewEvent,\n TimelineTrack,\n EventLayoutInfo,\n} from '../models/event';\nimport { dateService } from './date.service';\n\n/**\n * Service for timeline calculations and event track assignment\n */\nexport class TimelineService {\n /**\n * Split an event into daily parts\n * Each part represents one day of a multi-day event\n */\n splitInParts(event: SchedulerEvent | PreviewEvent): SchedulerEventWithParts {\n const parts: SchedulerEventPart[] = [];\n let currentStart = new Date(event.start);\n let dayIndex = 0;\n\n // Calculate total days\n const totalDays = this.getTotalDays(event.start, event.end);\n\n // For events within the same day\n if (dateService.isSameDay(event.start, event.end)) {\n const isFullEvent = 'id' in event;\n parts.push({\n id: isFullEvent ? `${event.id}-0` : `preview-0`,\n event: isFullEvent ? event : (null as unknown as SchedulerEvent),\n start: event.start,\n end: event.end,\n isStart: true,\n isEnd: true,\n dayIndex: 0,\n totalDays: 1,\n });\n\n return {\n event: isFullEvent ? event : (null as unknown as SchedulerEvent),\n parts,\n };\n }\n\n // For multi-day events\n while (!dateService.isSameDay(currentStart, event.end)) {\n const dayEnd = new Date(currentStart);\n dayEnd.setDate(dayEnd.getDate() + 1);\n dayEnd.setHours(0, 0, 0, 0);\n\n const isFullEvent = 'id' in event;\n parts.push({\n id: isFullEvent ? `${event.id}-${dayIndex}` : `preview-${dayIndex}`,\n event: isFullEvent ? event : (null as unknown as SchedulerEvent),\n start: new Date(currentStart),\n end: dayEnd,\n isStart: dayIndex === 0,\n isEnd: false,\n dayIndex,\n totalDays,\n });\n\n currentStart = dayEnd;\n dayIndex++;\n }\n\n // Add final part if the end time is not midnight\n if (event.end.getHours() !== 0 || event.end.getMinutes() !== 0 || event.end.getSeconds() !== 0) {\n const isFullEvent = 'id' in event;\n parts.push({\n id: isFullEvent ? `${event.id}-${dayIndex}` : `preview-${dayIndex}`,\n event: isFullEvent ? event : (null as unknown as SchedulerEvent),\n start: new Date(currentStart),\n end: event.end,\n isStart: false,\n isEnd: true,\n dayIndex,\n totalDays,\n });\n }\n\n return {\n event: 'id' in event ? event : (null as unknown as SchedulerEvent),\n parts,\n };\n }\n\n /**\n * Calculate total days an event spans\n */\n private getTotalDays(start: Date, end: Date): number {\n const startDay = new Date(start);\n startDay.setHours(0, 0, 0, 0);\n const endDay = new Date(end);\n endDay.setHours(0, 0, 0, 0);\n\n const diffMs = endDay.getTime() - startDay.getTime();\n const days = Math.ceil(diffMs / (1000 * 60 * 60 * 24));\n\n // If end time is not midnight, add 1\n if (end.getHours() !== 0 || end.getMinutes() !== 0 || end.getSeconds() !== 0) {\n return days + 1;\n }\n\n return Math.max(1, days);\n }\n\n /**\n * Assign events to tracks (rails) to minimize overlapping\n * This method should be called when events are updated, NOT during drag operations\n */\n getTimeline(events: SchedulerEvent[]): TimelineTrack[] {\n if (events.length === 0) {\n return [];\n }\n\n // Get all unique timestamps and sort them\n const timestamps = this.getUniqueTimestamps(events);\n const tracks: TimelineTrack[] = [];\n\n // Process events starting at each timestamp\n for (const timestamp of timestamps) {\n const startingEvents = events.filter((e) => e.start.getTime() === timestamp.getTime());\n\n for (const event of startingEvents) {\n // Find a free track for this event\n const freeTrack = tracks.find((track) => this.isTrackFreeForEvent(track, event));\n\n if (freeTrack) {\n freeTrack.events.push(event);\n } else {\n // Create a new track\n tracks.push({\n index: tracks.length,\n events: [event],\n });\n }\n }\n }\n\n return tracks;\n }\n\n /**\n * Get track assignment for event parts using colspan algorithm (for rendering)\n *\n * This uses a colspan-based algorithm similar to Outlook/Google Calendar:\n * 1. Build overlap groups (connected components of overlapping events)\n * 2. Assign columns within each group using a greedy algorithm\n * 3. Compute colspan - how many columns each event can span\n *\n * This ensures events are displayed as wide as possible:\n * - An event with no overlapping events gets 100% width\n * - Events only share space with events they actually overlap with\n * - An event can span multiple columns if there's no blocking event to its right\n */\n getTimelinedParts(\n eventParts: SchedulerEventPart[]\n ): { part: SchedulerEventPart; trackIndex: number; totalTracks: number; colspan: number }[] {\n // Collect unique events in a single pass (O(N) instead of O(N*M))\n const eventMap = new Map<string, SchedulerEvent>();\n for (const part of eventParts) {\n if (part.event && !eventMap.has(part.event.id)) {\n eventMap.set(part.event.id, part.event);\n }\n }\n const events = Array.from(eventMap.values());\n\n // Get layout info using colspan algorithm\n const layoutMap = this.getColspanLayout(events);\n\n // Map parts to their layout info\n return eventParts.map((part) => {\n if (!part.event) {\n return { part, trackIndex: 0, totalTracks: 1, colspan: 1 };\n }\n\n const layout = layoutMap.get(part.event.id);\n if (!layout) {\n return { part, trackIndex: 0, totalTracks: 1, colspan: 1 };\n }\n\n return {\n part,\n trackIndex: layout.col,\n totalTracks: layout.columnCount,\n colspan: layout.colspan,\n };\n });\n }\n\n /**\n * Compute colspan-based layout for events (Outlook/Google Calendar algorithm)\n *\n * Phase 1: Build overlap groups (connected components)\n * Phase 2: Assign columns within each group\n * Phase 3: Compute colspan for each event\n */\n getColspanLayout(events: SchedulerEvent[]): Map<string, EventLayoutInfo> {\n const layoutMap = new Map<string, EventLayoutInfo>();\n\n if (events.length === 0) {\n return layoutMap;\n }\n\n // Phase 1: Build overlap groups\n const groups = this.buildOverlapGroups(events);\n\n for (const group of groups) {\n // Phase 2: Assign columns (returns assignments and column count)\n const { assignments, columnCount } = this.assignColumns(group);\n\n // Phase 3: Compute colspan for each event\n for (const event of group) {\n const col = assignments.get(event.id) ?? 0;\n const colspan = this.computeColspan(event, col, group, assignments, columnCount);\n\n layoutMap.set(event.id, {\n col,\n colspan,\n columnCount,\n });\n }\n }\n\n return layoutMap;\n }\n\n /**\n * Build overlap groups (connected components)\n * Events belong to the same group if they overlap directly or indirectly\n *\n * Optimized to reduce comparisons by pre-sorting events by start time\n * and breaking early when events can no longer overlap\n */\n private buildOverlapGroups(events: SchedulerEvent[]): SchedulerEvent[][] {\n if (events.length === 0) return [];\n\n const groups: SchedulerEvent[][] = [];\n const visited = new Set<string>();\n\n // Sort events by start time for efficient overlap checking\n const sorted = [...events].sort((a, b) => a.start.getTime() - b.start.getTime());\n\n for (const event of sorted) {\n if (visited.has(event.id)) continue;\n\n // BFS to find all connected events\n // Use pointer-based iteration instead of shift() to avoid O(N) re-indexing\n const group: SchedulerEvent[] = [];\n const queue: SchedulerEvent[] = [event];\n let queueHead = 0;\n\n while (queueHead < queue.length) {\n const current = queue[queueHead++];\n if (visited.has(current.id)) continue;\n visited.add(current.id);\n group.push(current);\n\n const currentEnd = current.end.getTime();\n\n // Find overlapping events efficiently using sorted order\n for (const other of sorted) {\n if (visited.has(other.id)) continue;\n\n // Since sorted by start time, if other starts at or after current ends,\n // no more events in sorted order can overlap with current\n if (other.start.getTime() >= currentEnd) break;\n\n if (this.eventsOverlap(current, other)) {\n queue.push(other);\n }\n }\n }\n\n groups.push(group);\n }\n\n return groups;\n }\n\n /**\n * Assign columns to events within an overlap group\n * Uses a greedy algorithm: place each event in the first available column\n * Returns the column assignments and total column count\n */\n private assignColumns(\n group: SchedulerEvent[]\n ): { assignments: Map<string, number>; columnCount: number } {\n const assignments = new Map<string, number>();\n\n // Sort by start time, then end time, then id (for stability)\n const sorted = [...group].sort((a, b) =>\n a.start.getTime() - b.start.getTime() ||\n a.end.getTime() - b.end.getTime() ||\n a.id.localeCompare(b.id)\n );\n\n // Track end time of each column\n const colEnds: number[] = [];\n\n for (const event of sorted) {\n let col = -1;\n\n // Find first available column\n for (let i = 0; i < colEnds.length; i++) {\n if (colEnds[i] <= event.start.getTime()) {\n col = i;\n break;\n }\n }\n\n if (col === -1) {\n col = colEnds.length;\n colEnds.push(event.end.getTime());\n } else {\n colEnds[col] = event.end.getTime();\n }\n\n assignments.set(event.id, col);\n }\n\n return { assignments, columnCount: colEnds.length };\n }\n\n /**\n * Compute colspan for an event\n * An event can span multiple columns if there's no overlapping event to its right\n */\n private computeColspan(\n event: SchedulerEvent,\n eventCol: number,\n group: SchedulerEvent[],\n assignments: Map<string, number>,\n columnCount: number\n ): number {\n // Find the nearest blocking column to the right\n let block = Infinity;\n\n for (const other of group) {\n if (other.id === event.id) continue;\n if (!this.eventsOverlap(event, other)) continue;\n\n const otherCol = assignments.get(other.id) ?? 0;\n if (otherCol > eventCol) {\n block = Math.min(block, otherCol);\n }\n }\n\n // Calculate colspan\n if (block !== Infinity) {\n return block - eventCol;\n } else {\n return columnCount - eventCol;\n }\n }\n\n /**\n * Check if two events overlap in time\n */\n private eventsOverlap(a: SchedulerEvent, b: SchedulerEvent): boolean {\n return a.start < b.end && b.start < a.end;\n }\n\n /**\n * Calculate the relative track position for an event part (legacy method)\n * @deprecated Use getColspanLayout instead for better layout\n */\n private getRelativeTrackPosition(\n tracks: TimelineTrack[],\n part: SchedulerEventPart,\n globalTrackIndex: number\n ): { relativeIndex: number; overlappingCount: number } {\n // Find all track indices that have events overlapping with this part\n const overlappingTrackIndices: number[] = [];\n\n for (const track of tracks) {\n const hasOverlap = track.events.some((event) =>\n event.start < part.end && event.end > part.start\n );\n if (hasOverlap) {\n overlappingTrackIndices.push(track.index);\n }\n }\n\n // Sort to ensure consistent ordering\n overlappingTrackIndices.sort((a, b) => a - b);\n\n // Find the relative position of this event's track among overlapping tracks\n const relativeIndex = overlappingTrackIndices.indexOf(globalTrackIndex);\n\n return {\n relativeIndex: relativeIndex >= 0 ? relativeIndex : 0,\n overlappingCount: Math.max(1, overlappingTrackIndices.length),\n };\n }\n\n /**\n * Filter events that fall within a date range\n */\n filterByRange(events: SchedulerEvent[], start: Date, end: Date): SchedulerEvent[] {\n return events.filter((event) => {\n // Event overlaps with range if:\n // event.start < rangeEnd AND event.end > rangeStart\n return event.start < end && event.end > start;\n });\n }\n\n /**\n * Filter event parts that fall within a date range\n */\n filterPartsByRange(parts: SchedulerEventPart[], start: Date, end: Date): SchedulerEventPart[] {\n return parts.filter((part) => {\n return part.start < end && part.end > start;\n });\n }\n\n /**\n * Get all unique timestamps from events (both start and end times)\n */\n private getUniqueTimestamps(events: SchedulerEvent[]): Date[] {\n const timestampSet = new Set<number>();\n\n for (const event of events) {\n timestampSet.add(event.start.getTime());\n timestampSet.add(event.end.getTime());\n }\n\n return Array.from(timestampSet)\n .sort((a, b) => a - b)\n .map((ts) => new Date(ts));\n }\n\n /**\n * Check if a track has space for an event (no overlapping)\n */\n private isTrackFreeForEvent(track: TimelineTrack, event: SchedulerEvent): boolean {\n return track.events.every((existingEvent) => {\n // No overlap if: existingEvent ends before event starts OR event ends before existingEvent starts\n return existingEvent.end <= event.start || event.end <= existingEvent.start;\n });\n }\n\n /**\n * Get events for a specific day\n */\n getEventsForDay(events: SchedulerEvent[], day: Date): SchedulerEvent[] {\n const dayStart = new Date(day);\n dayStart.setHours(0, 0, 0, 0);\n const dayEnd = new Date(day);\n dayEnd.setHours(23, 59, 59, 999);\n\n return this.filterByRange(events, dayStart, dayEnd);\n }\n\n /**\n * Get event parts for a specific day\n */\n getPartsForDay(parts: SchedulerEventPart[], day: Date): SchedulerEventPart[] {\n const dayStart = new Date(day);\n dayStart.setHours(0, 0, 0, 0);\n const dayEnd = new Date(day);\n dayEnd.setHours(23, 59, 59, 999);\n\n return this.filterPartsByRange(parts, dayStart, dayEnd);\n }\n}\n\n/**\n * Singleton instance of TimelineService\n */\nexport const timelineService = new TimelineService();\n","import { SchedulerEventPart, EventPosition } from '../models/event';\nimport { SchedulerOptions, DEFAULT_OPTIONS } from '../models/options';\nimport { dateService } from './date.service';\n\n/**\n * Service for calculating event positions within the grid\n */\nexport class PositionService {\n /**\n * Calculate position for an event part in week/day view\n */\n calculateWeekPosition(\n part: SchedulerEventPart,\n trackIndex: number,\n totalTracks: number,\n dayIndex: number,\n totalDays: number,\n options: Partial<SchedulerOptions> = {}\n ): EventPosition {\n const opts = { ...DEFAULT_OPTIONS, ...options };\n const slotDuration = opts.slotDuration;\n\n // Calculate vertical position (top and height)\n const dayStart = new Date(part.start);\n dayStart.setHours(0, 0, 0, 0);\n\n const startSeconds = dateService.getSecondsFromMidnight(part.start);\n const endSeconds = dateService.getSecondsFromMidnight(part.end);\n const durationSeconds = endSeconds - startSeconds;\n\n // Parse min/max time\n const [minHour] = opts.slotMinTime.split(':').map(Number);\n const [maxHour] = opts.slotMaxTime.split(':').map(Number);\n const visibleSeconds = (maxHour - minHour) * 3600;\n const offsetSeconds = startSeconds - minHour * 3600;\n\n // Top position as percentage\n const top = (offsetSeconds / visibleSeconds) * 100;\n const height = (durationSeconds / visibleSeconds) * 100;\n\n // Calculate horizontal position (left and width)\n // Account for time gutter width (assumed 60px or ~10%)\n const gutterWidth = 10; // percentage\n const availableWidth = 100 - gutterWidth;\n const dayWidth = availableWidth / totalDays;\n\n // Position within the day column based on track\n const trackWidth = dayWidth / totalTracks;\n const left = gutterWidth + dayIndex * dayWidth + trackIndex * trackWidth;\n const width = trackWidth;\n\n return {\n top,\n left,\n width,\n height,\n zIndex: trackIndex + 1,\n };\n }\n\n /**\n * Calculate position for an event in timeline view\n */\n calculateTimelinePosition(\n part: SchedulerEventPart,\n trackIndex: number,\n totalTracks: number,\n viewStart: Date,\n viewEnd: Date,\n options: Partial<SchedulerOptions> = {}\n ): EventPosition {\n const opts = { ...DEFAULT_OPTIONS, ...options };\n\n // Calculate horizontal position based on time\n const totalDuration = viewEnd.getTime() - viewStart.getTime();\n const eventStart = Math.max(part.start.getTime(), viewStart.getTime());\n const eventEnd = Math.min(part.end.getTime(), viewEnd.getTime());\n\n const startOffset = eventStart - viewStart.getTime();\n const duration = eventEnd - eventStart;\n\n const left = (startOffset / totalDuration) * 100;\n const width = (duration / totalDuration) * 100;\n\n // Calculate vertical position based on track\n const trackHeight = 100 / totalTracks;\n const top = trackIndex * trackHeight;\n const height = trackHeight;\n\n return {\n top,\n left,\n width,\n height,\n zIndex: 1,\n };\n }\n\n /**\n * Calculate position for an all-day event in month view\n */\n calculateMonthEventPosition(\n part: SchedulerEventPart,\n rowIndex: number,\n maxRows: number,\n startDayIndex: number,\n endDayIndex: number,\n totalDays: number = 7\n ): EventPosition {\n const dayWidth = 100 / totalDays;\n const rowHeight = 100 / maxRows;\n\n const left = startDayIndex * dayWidth;\n const width = (endDayIndex - startDayIndex + 1) * dayWidth;\n const top = rowIndex * rowHeight;\n const height = rowHeight;\n\n return {\n top,\n left,\n width,\n height,\n zIndex: rowIndex + 1,\n };\n }\n\n /**\n * Convert percentage-based position to pixel-based\n */\n toPixelPosition(\n position: EventPosition,\n containerWidth: number,\n containerHeight: number\n ): EventPosition {\n return {\n top: (position.top / 100) * containerHeight,\n left: (position.left / 100) * containerWidth,\n width: (position.width / 100) * containerWidth,\n height: (position.height / 100) * containerHeight,\n zIndex: position.zIndex,\n };\n }\n\n /**\n * Generate CSS styles from position\n */\n toStyleString(position: EventPosition, unit: 'px' | '%' = '%'): string {\n return `\n position: absolute;\n top: ${position.top}${unit};\n left: ${position.left}${unit};\n width: ${position.width}${unit};\n height: ${position.height}${unit};\n z-index: ${position.zIndex};\n `.trim().replace(/\\s+/g, ' ');\n }\n\n /**\n * Generate CSS object from position\n */\n toStyleObject(position: EventPosition, unit: 'px' | '%' = '%'): Record<string, string> {\n return {\n position: 'absolute',\n top: `${position.top}${unit}`,\n left: `${position.left}${unit}`,\n width: `${position.width}${unit}`,\n height: `${position.height}${unit}`,\n zIndex: String(position.zIndex),\n };\n }\n}\n\n/**\n * Singleton instance of PositionService\n */\nexport const positionService = new PositionService();\n","import { SchedulerEvent } from '../models/event';\nimport {\n Resource,\n ResourceGroup,\n FlattenedResource,\n isResource,\n isResourceGroup,\n} from '../models/resource';\n\n/**\n * Service for resource and resource group operations\n */\nexport class ResourceService {\n /**\n * Flatten a hierarchical resource structure for rendering\n */\n flatten(\n items: (Resource | ResourceGroup)[],\n collapsedIds: Set<string> = new Set(),\n depth: number = 0,\n parentId?: string,\n parentCollapsed: boolean = false\n ): FlattenedResource[] {\n const result: FlattenedResource[] = [];\n\n for (const item of items) {\n const visible = !parentCollapsed;\n result.push({ item, depth, visible, parentId });\n\n if (isResourceGroup(item)) {\n const isCollapsed = collapsedIds.has(item.id);\n const children = this.flatten(\n item.children,\n collapsedIds,\n depth + 1,\n item.id,\n parentCollapsed || isCollapsed\n );\n result.push(...children);\n }\n }\n\n return result;\n }\n\n /**\n * Get all resources (leaf nodes) from a hierarchical structure\n */\n getAllResources(items: (Resource | ResourceGroup)[]): Resource[] {\n const resources: Resource[] = [];\n\n for (const item of items) {\n if (isResource(item)) {\n resources.push(item);\n } else if (isResourceGroup(item)) {\n resources.push(...this.getAllResources(item.children));\n }\n }\n\n return resources;\n }\n\n /**\n * Get all events from all resources\n */\n getAllEvents(items: (Resource | ResourceGroup)[]): SchedulerEvent[] {\n const resources = this.getAllResources(items);\n return resources.flatMap((r) => r.events ?? []);\n }\n\n /**\n * Find a resource by ID\n */\n findResourceById(\n items: (Resource | ResourceGroup)[],\n id: string\n ): Resource | undefined {\n for (const item of items) {\n if (isResource(item) && item.id === id) {\n return item;\n }\n if (isResourceGroup(item)) {\n const found = this.findResourceById(item.children, id);\n if (found) return found;\n }\n }\n return undefined;\n }\n\n /**\n * Find a resource group by ID\n */\n findGroupById(\n items: (Resource | ResourceGroup)[],\n id: string\n ): ResourceGroup | undefined {\n for (const item of items) {\n if (isResourceGroup(item)) {\n if (item.id === id) return item;\n const found = this.findGroupById(item.children, id);\n if (found) return found;\n }\n }\n return undefined;\n }\n\n /**\n * Find any item (resource or group) by ID\n */\n findById(\n items: (Resource | ResourceGroup)[],\n id: string\n ): Resource | ResourceGroup | undefined {\n return this.findResourceById(items, id) ?? this.findGroupById(items, id);\n }\n\n /**\n * Add an event to a resource\n */\n addEventToResource(\n items: (Resource | ResourceGroup)[],\n resourceId: string,\n event: SchedulerEvent\n ): (Resource | ResourceGroup)[] {\n return this.mapResources(items, (resource) => {\n if (resource.id === resourceId) {\n return {\n ...resource,\n events: [...(resource.events ?? []), event],\n };\n }\n return resource;\n });\n }\n\n /**\n * Update an event in a resource\n */\n updateEventInResource(\n items: (Resource | ResourceGroup)[],\n event: SchedulerEvent\n ): (Resource | ResourceGroup)[] {\n return this.mapResources(items, (resource) => {\n const eventIndex = resource.events?.findIndex((e) => e.id === event.id);\n if (eventIndex !== undefined && eventIndex >= 0 && resource.events) {\n const newEvents = [...resource.events];\n newEvents[eventIndex] = event;\n return { ...resource, events: newEvents };\n }\n return resource;\n });\n }\n\n /**\n * Remove an event from all resources\n */\n removeEvent(\n items: (Resource | ResourceGroup)[],\n eventId: string\n ): (Resource | ResourceGroup)[] {\n return this.mapResources(items, (resource) => {\n if (resource.events?.some((e) => e.id === eventId)) {\n return {\n ...resource,\n events: resource.events.filter((e) => e.id !== eventId),\n };\n }\n return resource;\n });\n }\n\n /**\n * Move an event from one resource to another\n */\n moveEventToResource(\n items: (Resource | ResourceGroup)[],\n eventId: string,\n newResourceId: string,\n updatedEvent?: Partial<SchedulerEvent>\n ): (Resource | ResourceGroup)[] {\n // Find the event first\n let foundEvent: SchedulerEvent | undefined;\n for (const resource of this.getAllResources(items)) {\n foundEvent = resource.events?.find((e) => e.id === eventId);\n if (foundEvent) break;\n }\n\n if (!foundEvent) return items;\n\n // Merge with updates\n const newEvent: SchedulerEvent = {\n ...foundEvent,\n ...updatedEvent,\n resourceId: newResourceId,\n };\n\n // Remove from old resource and add to new\n let result = this.removeEvent(items, eventId);\n result = this.addEventToResource(result, newResourceId, newEvent);\n\n return result;\n }\n\n /**\n * Toggle collapse state of a group\n */\n toggleGroupCollapse(\n items: (Resource | ResourceGroup)[],\n groupId: string\n ): (Resource | ResourceGroup)[] {\n return this.mapGroups(items, (group) => {\n if (group.id === groupId) {\n return { ...group, collapsed: !group.collapsed };\n }\n return group;\n });\n }\n\n /**\n * Set collapse state of a group\n */\n setGroupCollapse(\n items: (Resource | ResourceGroup)[],\n groupId: string,\n collapsed: boolean\n ): (Resource | ResourceGroup)[] {\n return this.mapGroups(items, (group) => {\n if (group.id === groupId) {\n return { ...group, collapsed };\n }\n return group;\n });\n }\n\n /**\n * Collapse all groups\n */\n collapseAll(items: (Resource | ResourceGroup)[]): (Resource | ResourceGroup)[] {\n return this.mapGroups(items, (group) => ({ ...group, collapsed: true }));\n }\n\n /**\n * Expand all groups\n */\n expandAll(items: (Resource | ResourceGroup)[]): (Resource | ResourceGroup)[] {\n return this.mapGroups(items, (group) => ({ ...group, collapsed: false }));\n }\n\n /**\n * Map over all resources in the hierarchy\n */\n private mapResources(\n items: (Resource | ResourceGroup)[],\n mapper: (resource: Resource) => Resource\n ): (Resource | ResourceGroup)[] {\n return items.map((item) => {\n if (isResource(item)) {\n return mapper(item);\n }\n return {\n ...item,\n children: this.mapResources(item.children, mapper),\n };\n });\n }\n\n /**\n * Map over all groups in the hierarchy\n */\n private mapGroups(\n items: (Resource | ResourceGroup)[],\n mapper: (group: ResourceGroup) => ResourceGroup\n ): (Resource | ResourceGroup)[] {\n return items.map((item) => {\n if (isResourceGroup(item)) {\n const mappedGroup = mapper(item);\n return {\n ...mappedGroup,\n children: this.mapGroups(mappedGroup.children, mapper),\n };\n }\n return item;\n });\n }\n\n /**\n * Get the total count of visible resources\n */\n getVisibleResourceCount(\n items: (Resource | ResourceGroup)[],\n collapsedIds: Set<string> = new Set()\n ): number {\n const flattened = this.flatten(items, collapsedIds);\n return flattened.filter((f) => f.visible && isResource(f.item)).length;\n }\n\n /**\n * Sort resources by order property\n */\n sortByOrder(items: (Resource | ResourceGroup)[]): (Resource | ResourceGroup)[] {\n const sorted = [...items].sort((a, b) => (a.order ?? 0) - (b.order ?? 0));\n return sorted.map((item) => {\n if (isResourceGroup(item)) {\n return {\n ...item,\n children: this.sortByOrder(item.children),\n };\n }\n return item;\n });\n }\n}\n\n/**\n * Singleton instance of ResourceService\n */\nexport const resourceService = new ResourceService();\n","/**\n * Generate a unique ID\n */\nexport function generateId(prefix: string = 'evt'): string {\n const timestamp = Date.now().toString(36);\n const random = Math.random().toString(36).substring(2, 9);\n return `${prefix}-${timestamp}-${random}`;\n}\n\n/**\n * Generate a unique event ID\n */\nexport function generateEventId(): string {\n return generateId('evt');\n}\n\n/**\n * Generate a unique resource ID\n */\nexport function generateResourceId(): string {\n return generateId('res');\n}\n\n/**\n * Generate a unique group ID\n */\nexport function generateGroupId(): string {\n return generateId('grp');\n}\n","/**\n * Default colors for events\n */\nexport const DEFAULT_COLORS = [\n '#3788d8', // Blue\n '#28a745', // Green\n '#dc3545', // Red\n '#ffc107', // Yellow\n '#17a2b8', // Cyan\n '#6f42c1', // Purple\n '#fd7e14', // Orange\n '#20c997', // Teal\n '#e83e8c', // Pink\n '#6c757d', // Gray\n];\n\n/**\n * Get a color by index (cycles through default colors)\n */\nexport function getColorByIndex(index: number): string {\n return DEFAULT_COLORS[index % DEFAULT_COLORS.length];\n}\n\n/**\n * Calculate contrasting text color (black or white) for a background\n */\nexport function getContrastColor(backgroundColor: string): string {\n // Convert hex to RGB\n let hex = backgroundColor.replace('#', '');\n if (hex.length === 3) {\n hex = hex.split('').map((c) => c + c).join('');\n }\n\n const r = parseInt(hex.substring(0, 2), 16);\n const g = parseInt(hex.substring(2, 4), 16);\n const b = parseInt(hex.substring(4, 6), 16);\n\n // Calculate relative luminance\n const luminance = (0.299 * r + 0.587 * g + 0.114 * b) / 255;\n\n return luminance > 0.5 ? '#000000' : '#ffffff';\n}\n\n/**\n * Lighten a color by a percentage\n */\nexport function lightenColor(color: string, percent: number): string {\n let hex = color.replace('#', '');\n if (hex.length === 3) {\n hex = hex.split('').map((c) => c + c).join('');\n }\n\n const r = parseInt(hex.substring(0, 2), 16);\n const g = parseInt(hex.substring(2, 4), 16);\n const b = parseInt(hex.substring(4, 6), 16);\n\n const newR = Math.min(255, Math.round(r + (255 - r) * (percent / 100)));\n const newG = Math.min(255, Math.round(g + (255 - g) * (percent / 100)));\n const newB = Math.min(255, Math.round(b + (255 - b) * (percent / 100)));\n\n return `#${newR.toString(16).padStart(2, '0')}${newG.toString(16).padStart(2, '0')}${newB.toString(16).padStart(2, '0')}`;\n}\n\n/**\n * Darken a color by a percentage\n */\nexport function darkenColor(color: string, percent: number): string {\n let hex = color.replace('#', '');\n if (hex.length === 3) {\n hex = hex.split('').map((c) => c + c).join('');\n }\n\n const r = parseInt(hex.substring(0, 2), 16);\n const g = parseInt(hex.substring(2, 4), 16);\n const b = parseInt(hex.substring(4, 6), 16);\n\n const newR = Math.max(0, Math.round(r * (1 - percent / 100)));\n const newG = Math.max(0, Math.round(g * (1 - percent / 100)));\n const newB = Math.max(0, Math.round(b * (1 - percent / 100)));\n\n return `#${newR.toString(16).padStart(2, '0')}${newG.toString(16).padStart(2, '0')}${newB.toString(16).padStart(2, '0')}`;\n}\n\n/**\n * Add alpha (opacity) to a color\n */\nexport function addAlpha(color: string, alpha: number): string {\n let hex = color.replace('#', '');\n if (hex.length === 3) {\n hex = hex.split('').map((c) => c + c).join('');\n }\n\n const r = parseInt(hex.substring(0, 2), 16);\n const g = parseInt(hex.substring(2, 4), 16);\n const b = parseInt(hex.substring(4, 6), 16);\n\n return `rgba(${r}, ${g}, ${b}, ${alpha})`;\n}\n","/**\n * Get element by data attributes (used for finding time slots)\n */\nexport function getElementByData(\n container: Element,\n dataAttributes: Record<string, string>\n): Element | null {\n const selector = Object.entries(dataAttributes)\n .map(([key, value]) => `[data-${key}=\"${value}\"]`)\n .join('');\n return container.querySelector(selector);\n}\n\n/**\n * Get data attributes from an element\n */\nexport function getDataAttributes(element: Element): Record<string, string> {\n const dataset = (element as HTMLElement).dataset;\n const result: Record<string, string> = {};\n for (const key in dataset) {\n const value = dataset[key];\n if (value !== undefined) {\n result[key] = value;\n }\n }\n return result;\n}\n\n/**\n * Find closest ancestor with a data attribute\n */\nexport function findClosestWithData(\n element: Element,\n dataAttribute: string\n): Element | null {\n return element.closest(`[data-${dataAttribute}]`);\n}\n\n/**\n * Get scroll position relative to an element\n */\nexport function getScrollPosition(element: Element): { top: number; left: number } {\n return {\n top: element.scrollTop,\n left: element.scrollLeft,\n };\n}\n\n/**\n * Scroll to a specific time in the scheduler\n */\nexport function scrollToTime(\n container: Element,\n timeElement: Element,\n behavior: ScrollBehavior = 'smooth'\n): void {\n const containerRect = container.getBoundingClientRect();\n const timeRect = timeElement.getBoundingClientRect();\n const relativeTop = timeRect.top - containerRect.top + container.scrollTop;\n\n container.scrollTo({\n top: relativeTop,\n behavior,\n });\n}\n\n/**\n * Check if an element is in viewport\n */\nexport function isInViewport(element: Element, container?: Element): boolean {\n const rect = element.getBoundingClientRect();\n const containerRect = container\n ? container.getBoundingClientRect()\n : { top: 0, left: 0, bottom: window.innerHeight, right: window.innerWidth };\n\n return (\n rect.top >= containerRect.top &&\n rect.left >= containerRect.left &&\n rect.bottom <= containerRect.bottom &&\n rect.right <= containerRect.right\n );\n}\n\n/**\n * Get pointer position relative to an element\n */\nexport function getRelativePosition(\n event: MouseEvent | TouchEvent,\n element: Element\n): { x: number; y: number } {\n const rect = element.getBoundingClientRect();\n const clientX = 'touches' in event ? event.touches[0].clientX : event.clientX;\n const clientY = 'touches' in event ? event.touches[0].clientY : event.clientY;\n\n return {\n x: clientX - rect.left,\n y: clientY - rect.top,\n };\n}\n\n/**\n * Create a CSS variable setter for theming\n */\nexport function setCSSVariable(\n element: HTMLElement,\n name: string,\n value: string\n): void {\n element.style.setProperty(`--${name}`, value);\n}\n\n/**\n * Get computed CSS variable value\n */\nexport function getCSSVariable(element: HTMLElement, name: string): string {\n return getComputedStyle(element).getPropertyValue(`--${name}`).trim();\n}\n\n/**\n * Add multiple CSS classes\n */\nexport function addClasses(element: Element, ...classes: string[]): void {\n element.classList.add(...classes.filter(Boolean));\n}\n\n/**\n * Remove multiple CSS classes\n */\nexport function removeClasses(element: Element, ...classes: string[]): void {\n element.classList.remove(...classes.filter(Boolean));\n}\n\n/**\n * Toggle CSS class based on condition\n */\nexport function toggleClass(element: Element, className: string, condition: boolean): void {\n element.classList.toggle(className, condition);\n}\n","// Models\nexport * from './models';\n\n// Services\nexport * from './services';\n\n// Utils\nexport * from './utils';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
|