@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,890 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* View types for the scheduler
|
|
3
|
+
*/
|
|
4
|
+
type ViewType = 'year' | 'month' | 'week' | 'day' | 'timeline';
|
|
5
|
+
/**
|
|
6
|
+
* Display mode for events
|
|
7
|
+
*/
|
|
8
|
+
type DisplayMode = 'grid' | 'timeline';
|
|
9
|
+
/**
|
|
10
|
+
* Time format options
|
|
11
|
+
*/
|
|
12
|
+
type TimeFormat = '12h' | '24h';
|
|
13
|
+
/**
|
|
14
|
+
* Days of the week (0 = Sunday, 1 = Monday, etc.)
|
|
15
|
+
*/
|
|
16
|
+
type DayOfWeek = 0 | 1 | 2 | 3 | 4 | 5 | 6;
|
|
17
|
+
/**
|
|
18
|
+
* Drag operation types
|
|
19
|
+
*/
|
|
20
|
+
type DragOperationType = 'create' | 'move' | 'resize-start' | 'resize-end';
|
|
21
|
+
|
|
22
|
+
/**
|
|
23
|
+
* Represents a scheduler event
|
|
24
|
+
*/
|
|
25
|
+
interface SchedulerEvent {
|
|
26
|
+
/** Unique identifier for the event */
|
|
27
|
+
id: string;
|
|
28
|
+
/** Event title displayed in the calendar */
|
|
29
|
+
title: string;
|
|
30
|
+
/** Start date and time */
|
|
31
|
+
start: Date;
|
|
32
|
+
/** End date and time */
|
|
33
|
+
end: Date;
|
|
34
|
+
/** Whether this is an all-day event */
|
|
35
|
+
allDay?: boolean;
|
|
36
|
+
/** Background color of the event */
|
|
37
|
+
color?: string;
|
|
38
|
+
/** Text color of the event */
|
|
39
|
+
textColor?: string;
|
|
40
|
+
/** ID of the resource this event belongs to */
|
|
41
|
+
resourceId?: string;
|
|
42
|
+
/** Whether the event can be edited */
|
|
43
|
+
editable?: boolean;
|
|
44
|
+
/** Whether the event can be dragged */
|
|
45
|
+
draggable?: boolean;
|
|
46
|
+
/** Whether the event can be resized */
|
|
47
|
+
resizable?: boolean | {
|
|
48
|
+
start: boolean;
|
|
49
|
+
end: boolean;
|
|
50
|
+
};
|
|
51
|
+
/** Additional CSS class names */
|
|
52
|
+
classNames?: string[];
|
|
53
|
+
/** Custom properties for extending event data */
|
|
54
|
+
extendedProps?: Record<string, unknown>;
|
|
55
|
+
}
|
|
56
|
+
/**
|
|
57
|
+
* Represents a part of an event that spans multiple days
|
|
58
|
+
*/
|
|
59
|
+
interface SchedulerEventPart {
|
|
60
|
+
/** Unique identifier for this part */
|
|
61
|
+
id: string;
|
|
62
|
+
/** Reference to the parent event */
|
|
63
|
+
event: SchedulerEvent;
|
|
64
|
+
/** Start of this part (may differ from event.start for multi-day events) */
|
|
65
|
+
start: Date;
|
|
66
|
+
/** End of this part (may be midnight for multi-day events) */
|
|
67
|
+
end: Date;
|
|
68
|
+
/** Whether this is the first day of the event */
|
|
69
|
+
isStart: boolean;
|
|
70
|
+
/** Whether this is the last day of the event */
|
|
71
|
+
isEnd: boolean;
|
|
72
|
+
/** Which day in the sequence (0-based) */
|
|
73
|
+
dayIndex: number;
|
|
74
|
+
/** Total number of days this event spans */
|
|
75
|
+
totalDays: number;
|
|
76
|
+
}
|
|
77
|
+
/**
|
|
78
|
+
* An event with its daily parts
|
|
79
|
+
*/
|
|
80
|
+
interface SchedulerEventWithParts {
|
|
81
|
+
/** The original event */
|
|
82
|
+
event: SchedulerEvent;
|
|
83
|
+
/** Array of daily parts */
|
|
84
|
+
parts: SchedulerEventPart[];
|
|
85
|
+
}
|
|
86
|
+
/**
|
|
87
|
+
* A preview event shown during drag operations
|
|
88
|
+
*/
|
|
89
|
+
interface PreviewEvent {
|
|
90
|
+
/** Start of the preview */
|
|
91
|
+
start: Date;
|
|
92
|
+
/** End of the preview */
|
|
93
|
+
end: Date;
|
|
94
|
+
/** Optional resource ID for resource-based views */
|
|
95
|
+
resourceId?: string;
|
|
96
|
+
}
|
|
97
|
+
/**
|
|
98
|
+
* A track/rail containing non-overlapping events
|
|
99
|
+
*/
|
|
100
|
+
interface TimelineTrack {
|
|
101
|
+
/** Track index (0 = first/leftmost track) */
|
|
102
|
+
index: number;
|
|
103
|
+
/** Events in this track (guaranteed non-overlapping) */
|
|
104
|
+
events: SchedulerEvent[];
|
|
105
|
+
}
|
|
106
|
+
/**
|
|
107
|
+
* Position information for rendering an event
|
|
108
|
+
*/
|
|
109
|
+
interface EventPosition {
|
|
110
|
+
/** Top position in pixels or percentage */
|
|
111
|
+
top: number;
|
|
112
|
+
/** Left position in pixels or percentage */
|
|
113
|
+
left: number;
|
|
114
|
+
/** Width in pixels or percentage */
|
|
115
|
+
width: number;
|
|
116
|
+
/** Height in pixels or percentage */
|
|
117
|
+
height: number;
|
|
118
|
+
/** Z-index for stacking */
|
|
119
|
+
zIndex: number;
|
|
120
|
+
}
|
|
121
|
+
/**
|
|
122
|
+
* Layout information for an event within its overlap group
|
|
123
|
+
* Used for colspan-based positioning algorithm
|
|
124
|
+
*/
|
|
125
|
+
interface EventLayoutInfo {
|
|
126
|
+
/** Column index within the overlap group (0-based) */
|
|
127
|
+
col: number;
|
|
128
|
+
/** Number of columns this event can span */
|
|
129
|
+
colspan: number;
|
|
130
|
+
/** Total number of columns in the overlap group */
|
|
131
|
+
columnCount: number;
|
|
132
|
+
}
|
|
133
|
+
|
|
134
|
+
/**
|
|
135
|
+
* Represents a resource (e.g., a room, employee, machine)
|
|
136
|
+
*/
|
|
137
|
+
interface Resource {
|
|
138
|
+
/** Unique identifier for the resource */
|
|
139
|
+
id: string;
|
|
140
|
+
/** Display title of the resource */
|
|
141
|
+
title: string;
|
|
142
|
+
/** Events assigned to this resource */
|
|
143
|
+
events?: SchedulerEvent[];
|
|
144
|
+
/** Background color for this resource's events */
|
|
145
|
+
color?: string;
|
|
146
|
+
/** Default event color for this resource */
|
|
147
|
+
eventColor?: string;
|
|
148
|
+
/** Sort order */
|
|
149
|
+
order?: number;
|
|
150
|
+
/** Custom properties for extending resource data */
|
|
151
|
+
extendedProps?: Record<string, unknown>;
|
|
152
|
+
}
|
|
153
|
+
/**
|
|
154
|
+
* Represents a group of resources (e.g., a department, category)
|
|
155
|
+
*/
|
|
156
|
+
interface ResourceGroup {
|
|
157
|
+
/** Unique identifier for the group */
|
|
158
|
+
id: string;
|
|
159
|
+
/** Display title of the group */
|
|
160
|
+
title: string;
|
|
161
|
+
/** Child resources or nested groups */
|
|
162
|
+
children: (Resource | ResourceGroup)[];
|
|
163
|
+
/** Whether the group is collapsed in the UI */
|
|
164
|
+
collapsed?: boolean;
|
|
165
|
+
/** Background color for the group header */
|
|
166
|
+
color?: string;
|
|
167
|
+
/** Sort order */
|
|
168
|
+
order?: number;
|
|
169
|
+
}
|
|
170
|
+
/**
|
|
171
|
+
* Type guard to check if an item is a Resource
|
|
172
|
+
*/
|
|
173
|
+
declare function isResource(item: Resource | ResourceGroup): item is Resource;
|
|
174
|
+
/**
|
|
175
|
+
* Type guard to check if an item is a ResourceGroup
|
|
176
|
+
*/
|
|
177
|
+
declare function isResourceGroup(item: Resource | ResourceGroup): item is ResourceGroup;
|
|
178
|
+
/**
|
|
179
|
+
* Flattened resource with depth information for rendering
|
|
180
|
+
*/
|
|
181
|
+
interface FlattenedResource {
|
|
182
|
+
/** The resource or group */
|
|
183
|
+
item: Resource | ResourceGroup;
|
|
184
|
+
/** Nesting depth (0 = top level) */
|
|
185
|
+
depth: number;
|
|
186
|
+
/** Whether this item is visible (not in a collapsed group) */
|
|
187
|
+
visible: boolean;
|
|
188
|
+
/** Parent group ID if any */
|
|
189
|
+
parentId?: string;
|
|
190
|
+
}
|
|
191
|
+
|
|
192
|
+
/**
|
|
193
|
+
* Represents a time slot in the scheduler grid
|
|
194
|
+
*/
|
|
195
|
+
interface TimeSlot {
|
|
196
|
+
/** Start of the time slot */
|
|
197
|
+
start: Date;
|
|
198
|
+
/** End of the time slot */
|
|
199
|
+
end: Date;
|
|
200
|
+
}
|
|
201
|
+
/**
|
|
202
|
+
* A row of time slots with associated metadata
|
|
203
|
+
*/
|
|
204
|
+
interface TimeSlotRow {
|
|
205
|
+
/** The time stamp for this row (e.g., 09:00) */
|
|
206
|
+
time: Date;
|
|
207
|
+
/** Label to display (e.g., "9:00 AM") */
|
|
208
|
+
label: string;
|
|
209
|
+
/** Individual slots for each column (day) */
|
|
210
|
+
slots: TimeSlot[];
|
|
211
|
+
}
|
|
212
|
+
/**
|
|
213
|
+
* Grid structure for the scheduler
|
|
214
|
+
*/
|
|
215
|
+
interface SchedulerGrid {
|
|
216
|
+
/** Column headers (days) */
|
|
217
|
+
columns: Date[];
|
|
218
|
+
/** Row headers (times) */
|
|
219
|
+
rows: TimeSlotRow[];
|
|
220
|
+
/** All time slots flattened */
|
|
221
|
+
allSlots: TimeSlot[];
|
|
222
|
+
}
|
|
223
|
+
|
|
224
|
+
/**
|
|
225
|
+
* Business hours configuration
|
|
226
|
+
*/
|
|
227
|
+
interface BusinessHours {
|
|
228
|
+
/** Days of the week when business hours apply (0 = Sunday) */
|
|
229
|
+
daysOfWeek: DayOfWeek[];
|
|
230
|
+
/** Start time in HH:mm format */
|
|
231
|
+
startTime: string;
|
|
232
|
+
/** End time in HH:mm format */
|
|
233
|
+
endTime: string;
|
|
234
|
+
}
|
|
235
|
+
/**
|
|
236
|
+
* Header toolbar configuration
|
|
237
|
+
*/
|
|
238
|
+
interface HeaderToolbar {
|
|
239
|
+
/** Left section content */
|
|
240
|
+
start?: string;
|
|
241
|
+
/** Center section content */
|
|
242
|
+
center?: string;
|
|
243
|
+
/** Right section content */
|
|
244
|
+
end?: string;
|
|
245
|
+
}
|
|
246
|
+
/**
|
|
247
|
+
* Configuration options for the scheduler
|
|
248
|
+
*/
|
|
249
|
+
interface SchedulerOptions {
|
|
250
|
+
/** Initial view to display */
|
|
251
|
+
initialView?: ViewType;
|
|
252
|
+
/** Initial date to display */
|
|
253
|
+
initialDate?: Date;
|
|
254
|
+
/** Locale for date formatting (e.g., 'en-US') */
|
|
255
|
+
locale?: string;
|
|
256
|
+
/** First day of the week (0 = Sunday, 1 = Monday) */
|
|
257
|
+
firstDayOfWeek?: DayOfWeek;
|
|
258
|
+
/** Timezone identifier (e.g., 'America/New_York') */
|
|
259
|
+
timeZone?: string;
|
|
260
|
+
/** Duration of each time slot in seconds (default: 1800 = 30 minutes) */
|
|
261
|
+
slotDuration?: number;
|
|
262
|
+
/** Interval between slot labels in seconds */
|
|
263
|
+
slotLabelInterval?: number;
|
|
264
|
+
/** Minimum time to display (e.g., '00:00:00') */
|
|
265
|
+
slotMinTime?: string;
|
|
266
|
+
/** Maximum time to display (e.g., '24:00:00') */
|
|
267
|
+
slotMaxTime?: string;
|
|
268
|
+
/** Time format (12h or 24h) */
|
|
269
|
+
timeFormat?: TimeFormat;
|
|
270
|
+
/** Business hours configuration */
|
|
271
|
+
businessHours?: BusinessHours;
|
|
272
|
+
/** Height of the scheduler ('auto', number in px, or CSS value) */
|
|
273
|
+
height?: 'auto' | number | string;
|
|
274
|
+
/** Height of the content area */
|
|
275
|
+
contentHeight?: 'auto' | number;
|
|
276
|
+
/** Aspect ratio for auto-sizing */
|
|
277
|
+
aspectRatio?: number;
|
|
278
|
+
/** Whether to expand rows to fill available space */
|
|
279
|
+
expandRows?: boolean;
|
|
280
|
+
/** Header toolbar configuration */
|
|
281
|
+
headerToolbar?: HeaderToolbar;
|
|
282
|
+
/** Whether events can be edited */
|
|
283
|
+
editable?: boolean;
|
|
284
|
+
/** Whether date ranges can be selected */
|
|
285
|
+
selectable?: boolean;
|
|
286
|
+
/** Whether to show a mirror element during selection */
|
|
287
|
+
selectMirror?: boolean;
|
|
288
|
+
/** Whether event duration can be changed */
|
|
289
|
+
eventDurationEditable?: boolean;
|
|
290
|
+
/** Whether event start time can be changed */
|
|
291
|
+
eventStartEditable?: boolean;
|
|
292
|
+
/** Duration of revert animation in ms */
|
|
293
|
+
dragRevertDuration?: number;
|
|
294
|
+
/** Whether to scroll during drag */
|
|
295
|
+
dragScroll?: boolean;
|
|
296
|
+
/** Snap duration in seconds */
|
|
297
|
+
snapDuration?: number;
|
|
298
|
+
/** Whether to show current time indicator */
|
|
299
|
+
nowIndicator?: boolean;
|
|
300
|
+
/** Whether to show week numbers */
|
|
301
|
+
weekNumbers?: boolean;
|
|
302
|
+
/** Text to display before week number */
|
|
303
|
+
weekText?: string;
|
|
304
|
+
/** Maximum events to show per day (true = show "+X more" link) */
|
|
305
|
+
dayMaxEvents?: boolean | number;
|
|
306
|
+
}
|
|
307
|
+
/**
|
|
308
|
+
* Default options for the scheduler
|
|
309
|
+
*/
|
|
310
|
+
declare const DEFAULT_OPTIONS: Required<SchedulerOptions>;
|
|
311
|
+
|
|
312
|
+
/**
|
|
313
|
+
* State of a drag operation
|
|
314
|
+
*/
|
|
315
|
+
interface DragState {
|
|
316
|
+
/** Type of drag operation */
|
|
317
|
+
type: DragOperationType;
|
|
318
|
+
/** Event being dragged (null for create operations) */
|
|
319
|
+
event: SchedulerEvent | null;
|
|
320
|
+
/** Starting time slot */
|
|
321
|
+
startSlot: TimeSlot;
|
|
322
|
+
/** Current time slot (updated during drag) */
|
|
323
|
+
currentSlot: TimeSlot;
|
|
324
|
+
/** Preview event showing where the event will be placed */
|
|
325
|
+
preview: PreviewEvent;
|
|
326
|
+
/** Resource being dragged to (for resource views) */
|
|
327
|
+
resource?: Resource;
|
|
328
|
+
/** Original event data (for reverting on cancel) */
|
|
329
|
+
originalEvent?: SchedulerEvent;
|
|
330
|
+
/** Metadata for the drag operation */
|
|
331
|
+
meta?: {
|
|
332
|
+
/** For resize: which end is being resized */
|
|
333
|
+
resizeHandle?: 'start' | 'end';
|
|
334
|
+
/** Offset from event start when drag began */
|
|
335
|
+
offsetMs?: number;
|
|
336
|
+
};
|
|
337
|
+
}
|
|
338
|
+
/**
|
|
339
|
+
* Result of a completed drag operation
|
|
340
|
+
*/
|
|
341
|
+
interface DragResult {
|
|
342
|
+
/** Type of operation that was completed */
|
|
343
|
+
type: DragOperationType;
|
|
344
|
+
/** The event that was created or modified */
|
|
345
|
+
event: SchedulerEvent;
|
|
346
|
+
/** The previous event state (for move/resize) */
|
|
347
|
+
previousEvent?: SchedulerEvent;
|
|
348
|
+
/** Whether the operation was cancelled */
|
|
349
|
+
cancelled: boolean;
|
|
350
|
+
}
|
|
351
|
+
|
|
352
|
+
/**
|
|
353
|
+
* Base event detail interface
|
|
354
|
+
*/
|
|
355
|
+
interface BaseEventDetail {
|
|
356
|
+
/** Original DOM event */
|
|
357
|
+
originalEvent?: Event;
|
|
358
|
+
}
|
|
359
|
+
/**
|
|
360
|
+
* Event click event detail
|
|
361
|
+
*/
|
|
362
|
+
interface EventClickDetail extends BaseEventDetail {
|
|
363
|
+
/** The clicked event */
|
|
364
|
+
event: SchedulerEvent;
|
|
365
|
+
}
|
|
366
|
+
/**
|
|
367
|
+
* Event create event detail
|
|
368
|
+
*/
|
|
369
|
+
interface EventCreateDetail extends BaseEventDetail {
|
|
370
|
+
/** The newly created event */
|
|
371
|
+
event: SchedulerEvent;
|
|
372
|
+
/** Resource the event was created on (if applicable) */
|
|
373
|
+
resource?: Resource;
|
|
374
|
+
}
|
|
375
|
+
/**
|
|
376
|
+
* Event update event detail
|
|
377
|
+
*/
|
|
378
|
+
interface EventUpdateDetail extends BaseEventDetail {
|
|
379
|
+
/** The updated event */
|
|
380
|
+
event: SchedulerEvent;
|
|
381
|
+
/** The event before the update */
|
|
382
|
+
oldEvent: SchedulerEvent;
|
|
383
|
+
}
|
|
384
|
+
/**
|
|
385
|
+
* Event delete event detail
|
|
386
|
+
*/
|
|
387
|
+
interface EventDeleteDetail extends BaseEventDetail {
|
|
388
|
+
/** The deleted event */
|
|
389
|
+
event: SchedulerEvent;
|
|
390
|
+
}
|
|
391
|
+
/**
|
|
392
|
+
* Date click event detail
|
|
393
|
+
*/
|
|
394
|
+
interface DateClickDetail extends BaseEventDetail {
|
|
395
|
+
/** The clicked date */
|
|
396
|
+
date: Date;
|
|
397
|
+
/** Resource at the clicked location (if applicable) */
|
|
398
|
+
resource?: Resource;
|
|
399
|
+
}
|
|
400
|
+
/**
|
|
401
|
+
* Date select event detail
|
|
402
|
+
*/
|
|
403
|
+
interface DateSelectDetail extends BaseEventDetail {
|
|
404
|
+
/** Start of the selected range */
|
|
405
|
+
start: Date;
|
|
406
|
+
/** End of the selected range */
|
|
407
|
+
end: Date;
|
|
408
|
+
/** Resource at the selected location (if applicable) */
|
|
409
|
+
resource?: Resource;
|
|
410
|
+
}
|
|
411
|
+
/**
|
|
412
|
+
* View change event detail
|
|
413
|
+
*/
|
|
414
|
+
interface ViewChangeDetail {
|
|
415
|
+
/** The new view */
|
|
416
|
+
view: ViewType;
|
|
417
|
+
/** The current date in the new view */
|
|
418
|
+
date: Date;
|
|
419
|
+
}
|
|
420
|
+
/**
|
|
421
|
+
* Custom event map for the scheduler web component
|
|
422
|
+
*/
|
|
423
|
+
interface SchedulerEventMap {
|
|
424
|
+
'event-click': CustomEvent<EventClickDetail>;
|
|
425
|
+
'event-dblclick': CustomEvent<EventClickDetail>;
|
|
426
|
+
'event-create': CustomEvent<EventCreateDetail>;
|
|
427
|
+
'event-update': CustomEvent<EventUpdateDetail>;
|
|
428
|
+
'event-delete': CustomEvent<EventDeleteDetail>;
|
|
429
|
+
'date-click': CustomEvent<DateClickDetail>;
|
|
430
|
+
'date-select': CustomEvent<DateSelectDetail>;
|
|
431
|
+
'view-change': CustomEvent<ViewChangeDetail>;
|
|
432
|
+
}
|
|
433
|
+
|
|
434
|
+
/**
|
|
435
|
+
* Service for date calculations and formatting
|
|
436
|
+
*/
|
|
437
|
+
declare class DateService {
|
|
438
|
+
/**
|
|
439
|
+
* Get the start of the week for a given date
|
|
440
|
+
*/
|
|
441
|
+
getWeekStart(date: Date, firstDayOfWeek?: DayOfWeek): Date;
|
|
442
|
+
/**
|
|
443
|
+
* Get all days in a week starting from a given date
|
|
444
|
+
*/
|
|
445
|
+
getWeekDays(date: Date, firstDayOfWeek?: DayOfWeek): Date[];
|
|
446
|
+
/**
|
|
447
|
+
* Get the start of the month for a given date
|
|
448
|
+
*/
|
|
449
|
+
getMonthStart(date: Date): Date;
|
|
450
|
+
/**
|
|
451
|
+
* Get the end of the month for a given date
|
|
452
|
+
*/
|
|
453
|
+
getMonthEnd(date: Date): Date;
|
|
454
|
+
/**
|
|
455
|
+
* Get all days in a month
|
|
456
|
+
*/
|
|
457
|
+
getMonthDays(date: Date): Date[];
|
|
458
|
+
/**
|
|
459
|
+
* Get weeks for a month view (includes days from adjacent months)
|
|
460
|
+
*/
|
|
461
|
+
getMonthWeeks(date: Date, firstDayOfWeek?: DayOfWeek): Date[][];
|
|
462
|
+
/**
|
|
463
|
+
* Get the start of the year for a given date
|
|
464
|
+
*/
|
|
465
|
+
getYearStart(date: Date): Date;
|
|
466
|
+
/**
|
|
467
|
+
* Get all months in a year
|
|
468
|
+
*/
|
|
469
|
+
getYearMonths(date: Date): Date[];
|
|
470
|
+
/**
|
|
471
|
+
* Get time slots for a day
|
|
472
|
+
*/
|
|
473
|
+
getTimeSlots(date: Date, slotDuration?: number, minTime?: string, maxTime?: string): TimeSlot[];
|
|
474
|
+
/**
|
|
475
|
+
* Generate a scheduler grid for week view
|
|
476
|
+
*/
|
|
477
|
+
getWeekGrid(date: Date, firstDayOfWeek?: DayOfWeek, slotDuration?: number, minTime?: string, maxTime?: string, timeFormat?: TimeFormat): SchedulerGrid;
|
|
478
|
+
/**
|
|
479
|
+
* Round a date to the nearest slot
|
|
480
|
+
*/
|
|
481
|
+
roundToSlot(date: Date, slotDuration: number): Date;
|
|
482
|
+
/**
|
|
483
|
+
* Floor a date to the slot start
|
|
484
|
+
*/
|
|
485
|
+
floorToSlot(date: Date, slotDuration: number): Date;
|
|
486
|
+
/**
|
|
487
|
+
* Ceiling a date to the slot end
|
|
488
|
+
*/
|
|
489
|
+
ceilToSlot(date: Date, slotDuration: number): Date;
|
|
490
|
+
/**
|
|
491
|
+
* Detect time format preference based on locale
|
|
492
|
+
* Uses the Intl API to determine if the locale uses 12-hour or 24-hour time
|
|
493
|
+
*/
|
|
494
|
+
detectTimeFormat(locale?: string): TimeFormat;
|
|
495
|
+
/**
|
|
496
|
+
* Format time according to format preference
|
|
497
|
+
*/
|
|
498
|
+
formatTime(date: Date, format?: TimeFormat): string;
|
|
499
|
+
/**
|
|
500
|
+
* Format date for display
|
|
501
|
+
*/
|
|
502
|
+
formatDate(date: Date, locale?: string, options?: Intl.DateTimeFormatOptions): string;
|
|
503
|
+
/**
|
|
504
|
+
* Format date with weekday
|
|
505
|
+
*/
|
|
506
|
+
formatDateWithWeekday(date: Date, locale?: string): string;
|
|
507
|
+
/**
|
|
508
|
+
* Get month name
|
|
509
|
+
*/
|
|
510
|
+
getMonthName(date: Date, locale?: string, format?: 'long' | 'short'): string;
|
|
511
|
+
/**
|
|
512
|
+
* Get day name
|
|
513
|
+
*/
|
|
514
|
+
getDayName(date: Date, locale?: string, format?: 'long' | 'short' | 'narrow'): string;
|
|
515
|
+
/**
|
|
516
|
+
* Check if two dates are the same day
|
|
517
|
+
*/
|
|
518
|
+
isSameDay(date1: Date, date2: Date): boolean;
|
|
519
|
+
/**
|
|
520
|
+
* Check if two dates are the same month
|
|
521
|
+
*/
|
|
522
|
+
isSameMonth(date1: Date, date2: Date): boolean;
|
|
523
|
+
/**
|
|
524
|
+
* Check if a date is today
|
|
525
|
+
*/
|
|
526
|
+
isToday(date: Date): boolean;
|
|
527
|
+
/**
|
|
528
|
+
* Check if a date is in the past
|
|
529
|
+
*/
|
|
530
|
+
isPast(date: Date): boolean;
|
|
531
|
+
/**
|
|
532
|
+
* Check if a date falls within a range
|
|
533
|
+
*/
|
|
534
|
+
isInRange(date: Date, start: Date, end: Date): boolean;
|
|
535
|
+
/**
|
|
536
|
+
* Get the number of days between two dates
|
|
537
|
+
*/
|
|
538
|
+
getDaysDifference(date1: Date, date2: Date): number;
|
|
539
|
+
/**
|
|
540
|
+
* Add days to a date
|
|
541
|
+
*/
|
|
542
|
+
addDays(date: Date, days: number): Date;
|
|
543
|
+
/**
|
|
544
|
+
* Add weeks to a date
|
|
545
|
+
*/
|
|
546
|
+
addWeeks(date: Date, weeks: number): Date;
|
|
547
|
+
/**
|
|
548
|
+
* Add months to a date
|
|
549
|
+
*/
|
|
550
|
+
addMonths(date: Date, months: number): Date;
|
|
551
|
+
/**
|
|
552
|
+
* Add years to a date
|
|
553
|
+
*/
|
|
554
|
+
addYears(date: Date, years: number): Date;
|
|
555
|
+
/**
|
|
556
|
+
* Get week number of the year
|
|
557
|
+
*/
|
|
558
|
+
getWeekNumber(date: Date): number;
|
|
559
|
+
/**
|
|
560
|
+
* Get seconds from midnight for a date
|
|
561
|
+
*/
|
|
562
|
+
getSecondsFromMidnight(date: Date): number;
|
|
563
|
+
/**
|
|
564
|
+
* Get duration in seconds between two dates
|
|
565
|
+
*/
|
|
566
|
+
getDurationInSeconds(start: Date, end: Date): number;
|
|
567
|
+
}
|
|
568
|
+
/**
|
|
569
|
+
* Singleton instance of DateService
|
|
570
|
+
*/
|
|
571
|
+
declare const dateService: DateService;
|
|
572
|
+
|
|
573
|
+
/**
|
|
574
|
+
* Service for timeline calculations and event track assignment
|
|
575
|
+
*/
|
|
576
|
+
declare class TimelineService {
|
|
577
|
+
/**
|
|
578
|
+
* Split an event into daily parts
|
|
579
|
+
* Each part represents one day of a multi-day event
|
|
580
|
+
*/
|
|
581
|
+
splitInParts(event: SchedulerEvent | PreviewEvent): SchedulerEventWithParts;
|
|
582
|
+
/**
|
|
583
|
+
* Calculate total days an event spans
|
|
584
|
+
*/
|
|
585
|
+
private getTotalDays;
|
|
586
|
+
/**
|
|
587
|
+
* Assign events to tracks (rails) to minimize overlapping
|
|
588
|
+
* This method should be called when events are updated, NOT during drag operations
|
|
589
|
+
*/
|
|
590
|
+
getTimeline(events: SchedulerEvent[]): TimelineTrack[];
|
|
591
|
+
/**
|
|
592
|
+
* Get track assignment for event parts using colspan algorithm (for rendering)
|
|
593
|
+
*
|
|
594
|
+
* This uses a colspan-based algorithm similar to Outlook/Google Calendar:
|
|
595
|
+
* 1. Build overlap groups (connected components of overlapping events)
|
|
596
|
+
* 2. Assign columns within each group using a greedy algorithm
|
|
597
|
+
* 3. Compute colspan - how many columns each event can span
|
|
598
|
+
*
|
|
599
|
+
* This ensures events are displayed as wide as possible:
|
|
600
|
+
* - An event with no overlapping events gets 100% width
|
|
601
|
+
* - Events only share space with events they actually overlap with
|
|
602
|
+
* - An event can span multiple columns if there's no blocking event to its right
|
|
603
|
+
*/
|
|
604
|
+
getTimelinedParts(eventParts: SchedulerEventPart[]): {
|
|
605
|
+
part: SchedulerEventPart;
|
|
606
|
+
trackIndex: number;
|
|
607
|
+
totalTracks: number;
|
|
608
|
+
colspan: number;
|
|
609
|
+
}[];
|
|
610
|
+
/**
|
|
611
|
+
* Compute colspan-based layout for events (Outlook/Google Calendar algorithm)
|
|
612
|
+
*
|
|
613
|
+
* Phase 1: Build overlap groups (connected components)
|
|
614
|
+
* Phase 2: Assign columns within each group
|
|
615
|
+
* Phase 3: Compute colspan for each event
|
|
616
|
+
*/
|
|
617
|
+
getColspanLayout(events: SchedulerEvent[]): Map<string, EventLayoutInfo>;
|
|
618
|
+
/**
|
|
619
|
+
* Build overlap groups (connected components)
|
|
620
|
+
* Events belong to the same group if they overlap directly or indirectly
|
|
621
|
+
*
|
|
622
|
+
* Optimized to reduce comparisons by pre-sorting events by start time
|
|
623
|
+
* and breaking early when events can no longer overlap
|
|
624
|
+
*/
|
|
625
|
+
private buildOverlapGroups;
|
|
626
|
+
/**
|
|
627
|
+
* Assign columns to events within an overlap group
|
|
628
|
+
* Uses a greedy algorithm: place each event in the first available column
|
|
629
|
+
* Returns the column assignments and total column count
|
|
630
|
+
*/
|
|
631
|
+
private assignColumns;
|
|
632
|
+
/**
|
|
633
|
+
* Compute colspan for an event
|
|
634
|
+
* An event can span multiple columns if there's no overlapping event to its right
|
|
635
|
+
*/
|
|
636
|
+
private computeColspan;
|
|
637
|
+
/**
|
|
638
|
+
* Check if two events overlap in time
|
|
639
|
+
*/
|
|
640
|
+
private eventsOverlap;
|
|
641
|
+
/**
|
|
642
|
+
* Calculate the relative track position for an event part (legacy method)
|
|
643
|
+
* @deprecated Use getColspanLayout instead for better layout
|
|
644
|
+
*/
|
|
645
|
+
private getRelativeTrackPosition;
|
|
646
|
+
/**
|
|
647
|
+
* Filter events that fall within a date range
|
|
648
|
+
*/
|
|
649
|
+
filterByRange(events: SchedulerEvent[], start: Date, end: Date): SchedulerEvent[];
|
|
650
|
+
/**
|
|
651
|
+
* Filter event parts that fall within a date range
|
|
652
|
+
*/
|
|
653
|
+
filterPartsByRange(parts: SchedulerEventPart[], start: Date, end: Date): SchedulerEventPart[];
|
|
654
|
+
/**
|
|
655
|
+
* Get all unique timestamps from events (both start and end times)
|
|
656
|
+
*/
|
|
657
|
+
private getUniqueTimestamps;
|
|
658
|
+
/**
|
|
659
|
+
* Check if a track has space for an event (no overlapping)
|
|
660
|
+
*/
|
|
661
|
+
private isTrackFreeForEvent;
|
|
662
|
+
/**
|
|
663
|
+
* Get events for a specific day
|
|
664
|
+
*/
|
|
665
|
+
getEventsForDay(events: SchedulerEvent[], day: Date): SchedulerEvent[];
|
|
666
|
+
/**
|
|
667
|
+
* Get event parts for a specific day
|
|
668
|
+
*/
|
|
669
|
+
getPartsForDay(parts: SchedulerEventPart[], day: Date): SchedulerEventPart[];
|
|
670
|
+
}
|
|
671
|
+
/**
|
|
672
|
+
* Singleton instance of TimelineService
|
|
673
|
+
*/
|
|
674
|
+
declare const timelineService: TimelineService;
|
|
675
|
+
|
|
676
|
+
/**
|
|
677
|
+
* Service for calculating event positions within the grid
|
|
678
|
+
*/
|
|
679
|
+
declare class PositionService {
|
|
680
|
+
/**
|
|
681
|
+
* Calculate position for an event part in week/day view
|
|
682
|
+
*/
|
|
683
|
+
calculateWeekPosition(part: SchedulerEventPart, trackIndex: number, totalTracks: number, dayIndex: number, totalDays: number, options?: Partial<SchedulerOptions>): EventPosition;
|
|
684
|
+
/**
|
|
685
|
+
* Calculate position for an event in timeline view
|
|
686
|
+
*/
|
|
687
|
+
calculateTimelinePosition(part: SchedulerEventPart, trackIndex: number, totalTracks: number, viewStart: Date, viewEnd: Date, options?: Partial<SchedulerOptions>): EventPosition;
|
|
688
|
+
/**
|
|
689
|
+
* Calculate position for an all-day event in month view
|
|
690
|
+
*/
|
|
691
|
+
calculateMonthEventPosition(part: SchedulerEventPart, rowIndex: number, maxRows: number, startDayIndex: number, endDayIndex: number, totalDays?: number): EventPosition;
|
|
692
|
+
/**
|
|
693
|
+
* Convert percentage-based position to pixel-based
|
|
694
|
+
*/
|
|
695
|
+
toPixelPosition(position: EventPosition, containerWidth: number, containerHeight: number): EventPosition;
|
|
696
|
+
/**
|
|
697
|
+
* Generate CSS styles from position
|
|
698
|
+
*/
|
|
699
|
+
toStyleString(position: EventPosition, unit?: 'px' | '%'): string;
|
|
700
|
+
/**
|
|
701
|
+
* Generate CSS object from position
|
|
702
|
+
*/
|
|
703
|
+
toStyleObject(position: EventPosition, unit?: 'px' | '%'): Record<string, string>;
|
|
704
|
+
}
|
|
705
|
+
/**
|
|
706
|
+
* Singleton instance of PositionService
|
|
707
|
+
*/
|
|
708
|
+
declare const positionService: PositionService;
|
|
709
|
+
|
|
710
|
+
/**
|
|
711
|
+
* Service for resource and resource group operations
|
|
712
|
+
*/
|
|
713
|
+
declare class ResourceService {
|
|
714
|
+
/**
|
|
715
|
+
* Flatten a hierarchical resource structure for rendering
|
|
716
|
+
*/
|
|
717
|
+
flatten(items: (Resource | ResourceGroup)[], collapsedIds?: Set<string>, depth?: number, parentId?: string, parentCollapsed?: boolean): FlattenedResource[];
|
|
718
|
+
/**
|
|
719
|
+
* Get all resources (leaf nodes) from a hierarchical structure
|
|
720
|
+
*/
|
|
721
|
+
getAllResources(items: (Resource | ResourceGroup)[]): Resource[];
|
|
722
|
+
/**
|
|
723
|
+
* Get all events from all resources
|
|
724
|
+
*/
|
|
725
|
+
getAllEvents(items: (Resource | ResourceGroup)[]): SchedulerEvent[];
|
|
726
|
+
/**
|
|
727
|
+
* Find a resource by ID
|
|
728
|
+
*/
|
|
729
|
+
findResourceById(items: (Resource | ResourceGroup)[], id: string): Resource | undefined;
|
|
730
|
+
/**
|
|
731
|
+
* Find a resource group by ID
|
|
732
|
+
*/
|
|
733
|
+
findGroupById(items: (Resource | ResourceGroup)[], id: string): ResourceGroup | undefined;
|
|
734
|
+
/**
|
|
735
|
+
* Find any item (resource or group) by ID
|
|
736
|
+
*/
|
|
737
|
+
findById(items: (Resource | ResourceGroup)[], id: string): Resource | ResourceGroup | undefined;
|
|
738
|
+
/**
|
|
739
|
+
* Add an event to a resource
|
|
740
|
+
*/
|
|
741
|
+
addEventToResource(items: (Resource | ResourceGroup)[], resourceId: string, event: SchedulerEvent): (Resource | ResourceGroup)[];
|
|
742
|
+
/**
|
|
743
|
+
* Update an event in a resource
|
|
744
|
+
*/
|
|
745
|
+
updateEventInResource(items: (Resource | ResourceGroup)[], event: SchedulerEvent): (Resource | ResourceGroup)[];
|
|
746
|
+
/**
|
|
747
|
+
* Remove an event from all resources
|
|
748
|
+
*/
|
|
749
|
+
removeEvent(items: (Resource | ResourceGroup)[], eventId: string): (Resource | ResourceGroup)[];
|
|
750
|
+
/**
|
|
751
|
+
* Move an event from one resource to another
|
|
752
|
+
*/
|
|
753
|
+
moveEventToResource(items: (Resource | ResourceGroup)[], eventId: string, newResourceId: string, updatedEvent?: Partial<SchedulerEvent>): (Resource | ResourceGroup)[];
|
|
754
|
+
/**
|
|
755
|
+
* Toggle collapse state of a group
|
|
756
|
+
*/
|
|
757
|
+
toggleGroupCollapse(items: (Resource | ResourceGroup)[], groupId: string): (Resource | ResourceGroup)[];
|
|
758
|
+
/**
|
|
759
|
+
* Set collapse state of a group
|
|
760
|
+
*/
|
|
761
|
+
setGroupCollapse(items: (Resource | ResourceGroup)[], groupId: string, collapsed: boolean): (Resource | ResourceGroup)[];
|
|
762
|
+
/**
|
|
763
|
+
* Collapse all groups
|
|
764
|
+
*/
|
|
765
|
+
collapseAll(items: (Resource | ResourceGroup)[]): (Resource | ResourceGroup)[];
|
|
766
|
+
/**
|
|
767
|
+
* Expand all groups
|
|
768
|
+
*/
|
|
769
|
+
expandAll(items: (Resource | ResourceGroup)[]): (Resource | ResourceGroup)[];
|
|
770
|
+
/**
|
|
771
|
+
* Map over all resources in the hierarchy
|
|
772
|
+
*/
|
|
773
|
+
private mapResources;
|
|
774
|
+
/**
|
|
775
|
+
* Map over all groups in the hierarchy
|
|
776
|
+
*/
|
|
777
|
+
private mapGroups;
|
|
778
|
+
/**
|
|
779
|
+
* Get the total count of visible resources
|
|
780
|
+
*/
|
|
781
|
+
getVisibleResourceCount(items: (Resource | ResourceGroup)[], collapsedIds?: Set<string>): number;
|
|
782
|
+
/**
|
|
783
|
+
* Sort resources by order property
|
|
784
|
+
*/
|
|
785
|
+
sortByOrder(items: (Resource | ResourceGroup)[]): (Resource | ResourceGroup)[];
|
|
786
|
+
}
|
|
787
|
+
/**
|
|
788
|
+
* Singleton instance of ResourceService
|
|
789
|
+
*/
|
|
790
|
+
declare const resourceService: ResourceService;
|
|
791
|
+
|
|
792
|
+
/**
|
|
793
|
+
* Generate a unique ID
|
|
794
|
+
*/
|
|
795
|
+
declare function generateId(prefix?: string): string;
|
|
796
|
+
/**
|
|
797
|
+
* Generate a unique event ID
|
|
798
|
+
*/
|
|
799
|
+
declare function generateEventId(): string;
|
|
800
|
+
/**
|
|
801
|
+
* Generate a unique resource ID
|
|
802
|
+
*/
|
|
803
|
+
declare function generateResourceId(): string;
|
|
804
|
+
/**
|
|
805
|
+
* Generate a unique group ID
|
|
806
|
+
*/
|
|
807
|
+
declare function generateGroupId(): string;
|
|
808
|
+
|
|
809
|
+
/**
|
|
810
|
+
* Default colors for events
|
|
811
|
+
*/
|
|
812
|
+
declare const DEFAULT_COLORS: string[];
|
|
813
|
+
/**
|
|
814
|
+
* Get a color by index (cycles through default colors)
|
|
815
|
+
*/
|
|
816
|
+
declare function getColorByIndex(index: number): string;
|
|
817
|
+
/**
|
|
818
|
+
* Calculate contrasting text color (black or white) for a background
|
|
819
|
+
*/
|
|
820
|
+
declare function getContrastColor(backgroundColor: string): string;
|
|
821
|
+
/**
|
|
822
|
+
* Lighten a color by a percentage
|
|
823
|
+
*/
|
|
824
|
+
declare function lightenColor(color: string, percent: number): string;
|
|
825
|
+
/**
|
|
826
|
+
* Darken a color by a percentage
|
|
827
|
+
*/
|
|
828
|
+
declare function darkenColor(color: string, percent: number): string;
|
|
829
|
+
/**
|
|
830
|
+
* Add alpha (opacity) to a color
|
|
831
|
+
*/
|
|
832
|
+
declare function addAlpha(color: string, alpha: number): string;
|
|
833
|
+
|
|
834
|
+
/**
|
|
835
|
+
* Get element by data attributes (used for finding time slots)
|
|
836
|
+
*/
|
|
837
|
+
declare function getElementByData(container: Element, dataAttributes: Record<string, string>): Element | null;
|
|
838
|
+
/**
|
|
839
|
+
* Get data attributes from an element
|
|
840
|
+
*/
|
|
841
|
+
declare function getDataAttributes(element: Element): Record<string, string>;
|
|
842
|
+
/**
|
|
843
|
+
* Find closest ancestor with a data attribute
|
|
844
|
+
*/
|
|
845
|
+
declare function findClosestWithData(element: Element, dataAttribute: string): Element | null;
|
|
846
|
+
/**
|
|
847
|
+
* Get scroll position relative to an element
|
|
848
|
+
*/
|
|
849
|
+
declare function getScrollPosition(element: Element): {
|
|
850
|
+
top: number;
|
|
851
|
+
left: number;
|
|
852
|
+
};
|
|
853
|
+
/**
|
|
854
|
+
* Scroll to a specific time in the scheduler
|
|
855
|
+
*/
|
|
856
|
+
declare function scrollToTime(container: Element, timeElement: Element, behavior?: ScrollBehavior): void;
|
|
857
|
+
/**
|
|
858
|
+
* Check if an element is in viewport
|
|
859
|
+
*/
|
|
860
|
+
declare function isInViewport(element: Element, container?: Element): boolean;
|
|
861
|
+
/**
|
|
862
|
+
* Get pointer position relative to an element
|
|
863
|
+
*/
|
|
864
|
+
declare function getRelativePosition(event: MouseEvent | TouchEvent, element: Element): {
|
|
865
|
+
x: number;
|
|
866
|
+
y: number;
|
|
867
|
+
};
|
|
868
|
+
/**
|
|
869
|
+
* Create a CSS variable setter for theming
|
|
870
|
+
*/
|
|
871
|
+
declare function setCSSVariable(element: HTMLElement, name: string, value: string): void;
|
|
872
|
+
/**
|
|
873
|
+
* Get computed CSS variable value
|
|
874
|
+
*/
|
|
875
|
+
declare function getCSSVariable(element: HTMLElement, name: string): string;
|
|
876
|
+
/**
|
|
877
|
+
* Add multiple CSS classes
|
|
878
|
+
*/
|
|
879
|
+
declare function addClasses(element: Element, ...classes: string[]): void;
|
|
880
|
+
/**
|
|
881
|
+
* Remove multiple CSS classes
|
|
882
|
+
*/
|
|
883
|
+
declare function removeClasses(element: Element, ...classes: string[]): void;
|
|
884
|
+
/**
|
|
885
|
+
* Toggle CSS class based on condition
|
|
886
|
+
*/
|
|
887
|
+
declare function toggleClass(element: Element, className: string, condition: boolean): void;
|
|
888
|
+
|
|
889
|
+
export { DEFAULT_COLORS, DEFAULT_OPTIONS, DateService, PositionService, ResourceService, TimelineService, addAlpha, addClasses, darkenColor, dateService, findClosestWithData, generateEventId, generateGroupId, generateId, generateResourceId, getCSSVariable, getColorByIndex, getContrastColor, getDataAttributes, getElementByData, getRelativePosition, getScrollPosition, isInViewport, isResource, isResourceGroup, lightenColor, positionService, removeClasses, resourceService, scrollToTime, setCSSVariable, timelineService, toggleClass };
|
|
890
|
+
export type { BaseEventDetail, BusinessHours, DateClickDetail, DateSelectDetail, DayOfWeek, DisplayMode, DragOperationType, DragResult, DragState, EventClickDetail, EventCreateDetail, EventDeleteDetail, EventLayoutInfo, EventPosition, EventUpdateDetail, FlattenedResource, HeaderToolbar, PreviewEvent, Resource, ResourceGroup, SchedulerEvent, SchedulerEventMap, SchedulerEventPart, SchedulerEventWithParts, SchedulerGrid, SchedulerOptions, TimeFormat, TimeSlot, TimeSlotRow, TimelineTrack, ViewChangeDetail, ViewType };
|