@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,354 @@
|
|
|
1
|
+
import * as lit from 'lit';
|
|
2
|
+
import { LitElement, TemplateResult } from 'lit';
|
|
3
|
+
import { ViewType, SchedulerEvent, Resource, ResourceGroup, SchedulerOptions, TimeSlot, DragState, PreviewEvent } from '@mintplayer/ng-bootstrap/web-components/scheduler-core';
|
|
4
|
+
export { DisplayMode, DragState, PreviewEvent, Resource, ResourceGroup, SchedulerEvent, SchedulerEventPart, SchedulerOptions, TimeSlot, ViewType } from '@mintplayer/ng-bootstrap/web-components/scheduler-core';
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* MpScheduler Web Component
|
|
8
|
+
*
|
|
9
|
+
* A fully-featured scheduler/calendar component.
|
|
10
|
+
* Refactored for clarity with separated concerns:
|
|
11
|
+
* - DragManager: Handles all drag operations
|
|
12
|
+
* - InputHandler: Normalizes mouse/touch input
|
|
13
|
+
* - SchedulerEventEmitter: Dispatches custom events
|
|
14
|
+
*/
|
|
15
|
+
declare class MpScheduler extends LitElement {
|
|
16
|
+
static styles: lit.CSSResult[];
|
|
17
|
+
static get observedAttributes(): string[];
|
|
18
|
+
private stateManager;
|
|
19
|
+
private currentView;
|
|
20
|
+
private currentViewType;
|
|
21
|
+
private contentContainer;
|
|
22
|
+
private dragManager;
|
|
23
|
+
private inputHandler;
|
|
24
|
+
private eventEmitter;
|
|
25
|
+
private previousView;
|
|
26
|
+
private previousDate;
|
|
27
|
+
private previousSelectedEventId;
|
|
28
|
+
private pendingDragUpdate;
|
|
29
|
+
private latestDragState;
|
|
30
|
+
private boundHandleKeyDown;
|
|
31
|
+
private nowIndicatorTimer;
|
|
32
|
+
constructor();
|
|
33
|
+
connectedCallback(): void;
|
|
34
|
+
disconnectedCallback(): void;
|
|
35
|
+
attributeChangedCallback(name: string, oldValue: string | null, newValue: string | null): void;
|
|
36
|
+
get view(): ViewType;
|
|
37
|
+
set view(value: ViewType);
|
|
38
|
+
get date(): Date;
|
|
39
|
+
set date(value: Date);
|
|
40
|
+
get events(): SchedulerEvent[];
|
|
41
|
+
set events(value: SchedulerEvent[]);
|
|
42
|
+
get resources(): (Resource | ResourceGroup)[];
|
|
43
|
+
set resources(value: (Resource | ResourceGroup)[]);
|
|
44
|
+
get options(): SchedulerOptions;
|
|
45
|
+
set options(value: Partial<SchedulerOptions>);
|
|
46
|
+
get selectedEvent(): SchedulerEvent | null;
|
|
47
|
+
set selectedEvent(value: SchedulerEvent | null);
|
|
48
|
+
get selectedRange(): {
|
|
49
|
+
start: Date;
|
|
50
|
+
end: Date;
|
|
51
|
+
} | null;
|
|
52
|
+
next(): void;
|
|
53
|
+
prev(): void;
|
|
54
|
+
today(): void;
|
|
55
|
+
gotoDate(date: Date): void;
|
|
56
|
+
changeView(view: ViewType): void;
|
|
57
|
+
addEvent(event: SchedulerEvent): void;
|
|
58
|
+
updateEvent(event: SchedulerEvent): void;
|
|
59
|
+
removeEvent(eventId: string): void;
|
|
60
|
+
getEventById(eventId: string): SchedulerEvent | null;
|
|
61
|
+
refetchEvents(): void;
|
|
62
|
+
render(): TemplateResult;
|
|
63
|
+
protected firstUpdated(): void;
|
|
64
|
+
private populateHeader;
|
|
65
|
+
private updateTitle;
|
|
66
|
+
private renderView;
|
|
67
|
+
private onStateChange;
|
|
68
|
+
private detectAndEmitChanges;
|
|
69
|
+
private updateUI;
|
|
70
|
+
private scheduleDragUpdate;
|
|
71
|
+
private handlePointerDown;
|
|
72
|
+
private handlePointerMove;
|
|
73
|
+
private handlePointerUp;
|
|
74
|
+
private handleDragComplete;
|
|
75
|
+
private handleClick;
|
|
76
|
+
private handleDoubleClick;
|
|
77
|
+
private handleKeyDown;
|
|
78
|
+
private startNowIndicatorTimer;
|
|
79
|
+
private stopNowIndicatorTimer;
|
|
80
|
+
private getSlotAtPosition;
|
|
81
|
+
private getSlotFromElement;
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
/**
|
|
85
|
+
* Internal state for the scheduler web component
|
|
86
|
+
*/
|
|
87
|
+
interface SchedulerState {
|
|
88
|
+
/** Current view type */
|
|
89
|
+
view: ViewType;
|
|
90
|
+
/** Current date (the date shown in the view) */
|
|
91
|
+
date: Date;
|
|
92
|
+
/** All events */
|
|
93
|
+
events: SchedulerEvent[];
|
|
94
|
+
/** Resources and resource groups */
|
|
95
|
+
resources: (Resource | ResourceGroup)[];
|
|
96
|
+
/** Configuration options */
|
|
97
|
+
options: SchedulerOptions;
|
|
98
|
+
/** Currently selected event */
|
|
99
|
+
selectedEvent: SchedulerEvent | null;
|
|
100
|
+
/** Currently hovered event */
|
|
101
|
+
hoveredEvent: SchedulerEvent | null;
|
|
102
|
+
/** Currently hovered time slot */
|
|
103
|
+
hoveredSlot: TimeSlot | null;
|
|
104
|
+
/** Current drag operation state */
|
|
105
|
+
dragState: DragState | null;
|
|
106
|
+
/** Preview event during drag operations */
|
|
107
|
+
previewEvent: PreviewEvent | null;
|
|
108
|
+
/** Collapsed resource group IDs */
|
|
109
|
+
collapsedGroups: Set<string>;
|
|
110
|
+
/** Whether mouse button is pressed */
|
|
111
|
+
isMouseDown: boolean;
|
|
112
|
+
/** Loading state */
|
|
113
|
+
isLoading: boolean;
|
|
114
|
+
}
|
|
115
|
+
/**
|
|
116
|
+
* Create initial scheduler state
|
|
117
|
+
*/
|
|
118
|
+
declare function createInitialState(options?: Partial<SchedulerOptions>): SchedulerState;
|
|
119
|
+
/**
|
|
120
|
+
* State update function type
|
|
121
|
+
*/
|
|
122
|
+
type StateUpdater = (state: SchedulerState) => Partial<SchedulerState>;
|
|
123
|
+
/**
|
|
124
|
+
* State manager for the scheduler
|
|
125
|
+
*/
|
|
126
|
+
declare class SchedulerStateManager {
|
|
127
|
+
private state;
|
|
128
|
+
private listeners;
|
|
129
|
+
constructor(initialOptions?: Partial<SchedulerOptions>);
|
|
130
|
+
/**
|
|
131
|
+
* Get current state
|
|
132
|
+
*/
|
|
133
|
+
getState(): SchedulerState;
|
|
134
|
+
/**
|
|
135
|
+
* Update state with partial update or updater function
|
|
136
|
+
*/
|
|
137
|
+
setState(update: Partial<SchedulerState> | StateUpdater): void;
|
|
138
|
+
/**
|
|
139
|
+
* Subscribe to state changes
|
|
140
|
+
*/
|
|
141
|
+
subscribe(listener: (state: SchedulerState) => void): () => void;
|
|
142
|
+
/**
|
|
143
|
+
* Notify all listeners of state change
|
|
144
|
+
*/
|
|
145
|
+
private notifyListeners;
|
|
146
|
+
/**
|
|
147
|
+
* Set the current view
|
|
148
|
+
*/
|
|
149
|
+
setView(view: ViewType): void;
|
|
150
|
+
/**
|
|
151
|
+
* Set the current date
|
|
152
|
+
*/
|
|
153
|
+
setDate(date: Date): void;
|
|
154
|
+
/**
|
|
155
|
+
* Set events
|
|
156
|
+
*/
|
|
157
|
+
setEvents(events: SchedulerEvent[]): void;
|
|
158
|
+
/**
|
|
159
|
+
* Add an event
|
|
160
|
+
*/
|
|
161
|
+
addEvent(event: SchedulerEvent): void;
|
|
162
|
+
/**
|
|
163
|
+
* Update an event
|
|
164
|
+
*/
|
|
165
|
+
updateEvent(event: SchedulerEvent): void;
|
|
166
|
+
/**
|
|
167
|
+
* Remove an event
|
|
168
|
+
*/
|
|
169
|
+
removeEvent(eventId: string): void;
|
|
170
|
+
/**
|
|
171
|
+
* Set resources
|
|
172
|
+
*/
|
|
173
|
+
setResources(resources: (Resource | ResourceGroup)[]): void;
|
|
174
|
+
/**
|
|
175
|
+
* Toggle resource group collapse
|
|
176
|
+
*/
|
|
177
|
+
toggleGroupCollapse(groupId: string): void;
|
|
178
|
+
/**
|
|
179
|
+
* Set selected event
|
|
180
|
+
*/
|
|
181
|
+
setSelectedEvent(event: SchedulerEvent | null): void;
|
|
182
|
+
/**
|
|
183
|
+
* Set hovered event
|
|
184
|
+
*/
|
|
185
|
+
setHoveredEvent(event: SchedulerEvent | null): void;
|
|
186
|
+
/**
|
|
187
|
+
* Set hovered slot
|
|
188
|
+
*/
|
|
189
|
+
setHoveredSlot(slot: TimeSlot | null): void;
|
|
190
|
+
/**
|
|
191
|
+
* Start a drag operation
|
|
192
|
+
*/
|
|
193
|
+
startDrag(dragState: DragState): void;
|
|
194
|
+
/**
|
|
195
|
+
* Update drag operation
|
|
196
|
+
*/
|
|
197
|
+
updateDrag(currentSlot: TimeSlot, preview: PreviewEvent): void;
|
|
198
|
+
/**
|
|
199
|
+
* End drag operation
|
|
200
|
+
*/
|
|
201
|
+
endDrag(): void;
|
|
202
|
+
/**
|
|
203
|
+
* Set mouse down state
|
|
204
|
+
*/
|
|
205
|
+
setMouseDown(isMouseDown: boolean): void;
|
|
206
|
+
/**
|
|
207
|
+
* Set loading state
|
|
208
|
+
*/
|
|
209
|
+
setLoading(isLoading: boolean): void;
|
|
210
|
+
/**
|
|
211
|
+
* Update options
|
|
212
|
+
*/
|
|
213
|
+
setOptions(options: Partial<SchedulerOptions>): void;
|
|
214
|
+
/**
|
|
215
|
+
* Navigate to next period
|
|
216
|
+
*/
|
|
217
|
+
next(): void;
|
|
218
|
+
/**
|
|
219
|
+
* Navigate to previous period
|
|
220
|
+
*/
|
|
221
|
+
prev(): void;
|
|
222
|
+
/**
|
|
223
|
+
* Navigate to today
|
|
224
|
+
*/
|
|
225
|
+
today(): void;
|
|
226
|
+
/**
|
|
227
|
+
* Navigate to a specific date
|
|
228
|
+
*/
|
|
229
|
+
gotoDate(date: Date): void;
|
|
230
|
+
}
|
|
231
|
+
|
|
232
|
+
/**
|
|
233
|
+
* Base class for scheduler views
|
|
234
|
+
*/
|
|
235
|
+
declare abstract class BaseView {
|
|
236
|
+
protected container: HTMLElement;
|
|
237
|
+
protected state: SchedulerState;
|
|
238
|
+
constructor(container: HTMLElement, state: SchedulerState);
|
|
239
|
+
/**
|
|
240
|
+
* Update the view with new state
|
|
241
|
+
*/
|
|
242
|
+
abstract update(state: SchedulerState): void;
|
|
243
|
+
/**
|
|
244
|
+
* Render the view
|
|
245
|
+
*/
|
|
246
|
+
abstract render(): void;
|
|
247
|
+
/**
|
|
248
|
+
* Clean up the view
|
|
249
|
+
*/
|
|
250
|
+
abstract destroy(): void;
|
|
251
|
+
/**
|
|
252
|
+
* Update the now indicator position (called every minute)
|
|
253
|
+
* Default implementation does nothing - override in views that have a now indicator
|
|
254
|
+
*/
|
|
255
|
+
updateNowIndicator(): void;
|
|
256
|
+
/**
|
|
257
|
+
* Get the view's root element
|
|
258
|
+
*/
|
|
259
|
+
getElement(): HTMLElement;
|
|
260
|
+
/**
|
|
261
|
+
* Helper to create an element with classes
|
|
262
|
+
*/
|
|
263
|
+
protected createElement<K extends keyof HTMLElementTagNameMap>(tag: K, ...classes: string[]): HTMLElementTagNameMap[K];
|
|
264
|
+
/**
|
|
265
|
+
* Helper to set data attributes
|
|
266
|
+
*/
|
|
267
|
+
protected setData(element: HTMLElement, data: Record<string, string | number>): void;
|
|
268
|
+
/**
|
|
269
|
+
* Helper to clear container
|
|
270
|
+
*/
|
|
271
|
+
protected clearContainer(): void;
|
|
272
|
+
}
|
|
273
|
+
|
|
274
|
+
/**
|
|
275
|
+
* Year view renderer
|
|
276
|
+
*/
|
|
277
|
+
declare class YearView extends BaseView {
|
|
278
|
+
render(): void;
|
|
279
|
+
private createMonthCard;
|
|
280
|
+
update(state: SchedulerState): void;
|
|
281
|
+
destroy(): void;
|
|
282
|
+
}
|
|
283
|
+
|
|
284
|
+
/**
|
|
285
|
+
* Month view renderer
|
|
286
|
+
*/
|
|
287
|
+
declare class MonthView extends BaseView {
|
|
288
|
+
private dayCells;
|
|
289
|
+
render(): void;
|
|
290
|
+
private createDayCell;
|
|
291
|
+
private renderEvents;
|
|
292
|
+
update(state: SchedulerState): void;
|
|
293
|
+
private optionsRequireRerender;
|
|
294
|
+
destroy(): void;
|
|
295
|
+
}
|
|
296
|
+
|
|
297
|
+
/**
|
|
298
|
+
* Week view renderer
|
|
299
|
+
*/
|
|
300
|
+
declare class WeekView extends BaseView {
|
|
301
|
+
private dayColumns;
|
|
302
|
+
private eventElements;
|
|
303
|
+
private slotElements;
|
|
304
|
+
render(): void;
|
|
305
|
+
update(state: SchedulerState): void;
|
|
306
|
+
private optionsRequireRerender;
|
|
307
|
+
private renderEvents;
|
|
308
|
+
private createEventElement;
|
|
309
|
+
private renderPreviewEvent;
|
|
310
|
+
private updateGreyedSlots;
|
|
311
|
+
private renderNowIndicator;
|
|
312
|
+
updateNowIndicator(): void;
|
|
313
|
+
destroy(): void;
|
|
314
|
+
}
|
|
315
|
+
|
|
316
|
+
/**
|
|
317
|
+
* Day view renderer
|
|
318
|
+
*/
|
|
319
|
+
declare class DayView extends BaseView {
|
|
320
|
+
private eventsContainer;
|
|
321
|
+
private slotElements;
|
|
322
|
+
private dayColumn;
|
|
323
|
+
render(): void;
|
|
324
|
+
private renderEvents;
|
|
325
|
+
private createEventElement;
|
|
326
|
+
private renderNowIndicator;
|
|
327
|
+
updateNowIndicator(): void;
|
|
328
|
+
update(state: SchedulerState): void;
|
|
329
|
+
private optionsRequireRerender;
|
|
330
|
+
private updateGreyedSlots;
|
|
331
|
+
private renderPreviewEvent;
|
|
332
|
+
destroy(): void;
|
|
333
|
+
}
|
|
334
|
+
|
|
335
|
+
/**
|
|
336
|
+
* Timeline view renderer
|
|
337
|
+
*/
|
|
338
|
+
declare class TimelineView extends BaseView {
|
|
339
|
+
private rowElements;
|
|
340
|
+
private slotWidth;
|
|
341
|
+
render(): void;
|
|
342
|
+
private createResourceRow;
|
|
343
|
+
private renderEvents;
|
|
344
|
+
private createEventElement;
|
|
345
|
+
update(state: SchedulerState): void;
|
|
346
|
+
private optionsRequireRerender;
|
|
347
|
+
private updateGreyedSlots;
|
|
348
|
+
destroy(): void;
|
|
349
|
+
}
|
|
350
|
+
|
|
351
|
+
declare const schedulerStyles: lit.CSSResult;
|
|
352
|
+
|
|
353
|
+
export { BaseView, DayView, MonthView, MpScheduler, SchedulerStateManager, TimelineView, WeekView, YearView, createInitialState, schedulerStyles };
|
|
354
|
+
export type { SchedulerState };
|
|
@@ -0,0 +1,165 @@
|
|
|
1
|
+
import * as lit from 'lit';
|
|
2
|
+
import { LitElement, TemplateResult } from 'lit';
|
|
3
|
+
|
|
4
|
+
type Direction = 'horizontal' | 'vertical';
|
|
5
|
+
|
|
6
|
+
interface Point {
|
|
7
|
+
x: number;
|
|
8
|
+
y: number;
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
declare enum ResizeState {
|
|
12
|
+
Idle = "idle",
|
|
13
|
+
Resizing = "resizing"
|
|
14
|
+
}
|
|
15
|
+
interface ResizeOperation {
|
|
16
|
+
state: ResizeState;
|
|
17
|
+
startPosition: Point;
|
|
18
|
+
sizes: number[];
|
|
19
|
+
indexBefore: number;
|
|
20
|
+
indexAfter: number;
|
|
21
|
+
dividerElement: HTMLElement | null;
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
interface PanelInfo {
|
|
25
|
+
element: HTMLElement;
|
|
26
|
+
minSize?: number;
|
|
27
|
+
maxSize?: number;
|
|
28
|
+
initialSize?: number;
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
interface SplitterResizeEventDetail {
|
|
32
|
+
sizes: number[];
|
|
33
|
+
orientation: Direction;
|
|
34
|
+
}
|
|
35
|
+
declare class MpSplitter extends LitElement {
|
|
36
|
+
static styles: lit.CSSResult[];
|
|
37
|
+
static get observedAttributes(): string[];
|
|
38
|
+
private stateManager;
|
|
39
|
+
private inputHandler;
|
|
40
|
+
private resizeManager;
|
|
41
|
+
private container;
|
|
42
|
+
private panelWrappers;
|
|
43
|
+
private dividers;
|
|
44
|
+
private slotElement;
|
|
45
|
+
private mutationObserver;
|
|
46
|
+
private containerResizeObserver;
|
|
47
|
+
private unsubscribeState;
|
|
48
|
+
constructor();
|
|
49
|
+
render(): TemplateResult;
|
|
50
|
+
protected firstUpdated(): void;
|
|
51
|
+
disconnectedCallback(): void;
|
|
52
|
+
attributeChangedCallback(name: string, oldValue: string | null, newValue: string | null): void;
|
|
53
|
+
get orientation(): Direction;
|
|
54
|
+
set orientation(value: Direction);
|
|
55
|
+
get minPanelSize(): number;
|
|
56
|
+
set minPanelSize(value: number);
|
|
57
|
+
get touchMode(): boolean;
|
|
58
|
+
set touchMode(value: boolean);
|
|
59
|
+
getPanelSizes(): number[];
|
|
60
|
+
setPanelSizes(sizes: number[]): void;
|
|
61
|
+
private setupMutationObserver;
|
|
62
|
+
private subscribeToState;
|
|
63
|
+
private updatePanelsFromSlot;
|
|
64
|
+
/**
|
|
65
|
+
* Read each panel-wrapper's measured pixel size and persist it as the
|
|
66
|
+
* authoritative panel size. After this runs, every wrapper carries an
|
|
67
|
+
* inline `width` (or `height`) — content intrinsic size cannot leak into
|
|
68
|
+
* the parent flex container, so a nested splitter's drag does not shift
|
|
69
|
+
* the parent's layout.
|
|
70
|
+
*/
|
|
71
|
+
private pinSizesFromCurrentLayout;
|
|
72
|
+
private setupContainerResizeObserver;
|
|
73
|
+
/**
|
|
74
|
+
* When the splitter's container resizes (window resize, parent splitter
|
|
75
|
+
* pinning its sizes, etc.), scale every panel-wrapper proportionally so
|
|
76
|
+
* the existing ratios are preserved. Without this we'd be stuck with the
|
|
77
|
+
* original pixel sizes when the surrounding viewport changes — what
|
|
78
|
+
* `flex-basis: 0` gave master "for free".
|
|
79
|
+
*/
|
|
80
|
+
private handleContainerResize;
|
|
81
|
+
private updateContainerOrientation;
|
|
82
|
+
private handleResizeStart;
|
|
83
|
+
private handleResizeMove;
|
|
84
|
+
private handleResizeEnd;
|
|
85
|
+
private applyPanelSizes;
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
interface SplitterState {
|
|
89
|
+
orientation: Direction;
|
|
90
|
+
panelSizes: number[];
|
|
91
|
+
previewSizes: number[] | null;
|
|
92
|
+
resizeOperation: ResizeOperation | null;
|
|
93
|
+
}
|
|
94
|
+
type SplitterStateListener = (state: SplitterState) => void;
|
|
95
|
+
declare class SplitterStateManager {
|
|
96
|
+
private state;
|
|
97
|
+
private listeners;
|
|
98
|
+
constructor(initialState?: Partial<SplitterState>);
|
|
99
|
+
getState(): SplitterState;
|
|
100
|
+
subscribe(listener: SplitterStateListener): () => void;
|
|
101
|
+
private notifyListeners;
|
|
102
|
+
setOrientation(orientation: Direction): void;
|
|
103
|
+
setPanelSizes(sizes: number[]): void;
|
|
104
|
+
setPreviewSizes(sizes: number[] | null): void;
|
|
105
|
+
startResize(operation: ResizeOperation): void;
|
|
106
|
+
updateResize(previewSizes: number[]): void;
|
|
107
|
+
endResize(finalSizes: number[]): void;
|
|
108
|
+
cancelResize(): void;
|
|
109
|
+
isResizing(): boolean;
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
interface ResizeManagerOptions {
|
|
113
|
+
minPanelSize?: number;
|
|
114
|
+
}
|
|
115
|
+
declare class ResizeManager {
|
|
116
|
+
private options;
|
|
117
|
+
constructor(options?: ResizeManagerOptions);
|
|
118
|
+
computePanelSizes(panels: HTMLElement[], orientation: Direction): number[];
|
|
119
|
+
createResizeOperation(startPoint: Point, currentSizes: number[], dividerIndex: number, dividerElement: HTMLElement): ResizeOperation;
|
|
120
|
+
calculatePreviewSizes(operation: ResizeOperation, currentPoint: Point, orientation: Direction): number[];
|
|
121
|
+
setMinPanelSize(size: number): void;
|
|
122
|
+
getMinPanelSize(): number;
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
interface NormalizedPointerEvent {
|
|
126
|
+
clientX: number;
|
|
127
|
+
clientY: number;
|
|
128
|
+
point: Point;
|
|
129
|
+
originalEvent: MouseEvent | TouchEvent;
|
|
130
|
+
isTouch: boolean;
|
|
131
|
+
}
|
|
132
|
+
declare function normalizePointerEvent(event: MouseEvent | TouchEvent): NormalizedPointerEvent;
|
|
133
|
+
|
|
134
|
+
interface InputHandlerCallbacks {
|
|
135
|
+
onResizeStart: (event: NormalizedPointerEvent, dividerIndex: number, dividerElement: HTMLElement) => void;
|
|
136
|
+
onResizeMove: (event: NormalizedPointerEvent) => void;
|
|
137
|
+
onResizeEnd: (event: NormalizedPointerEvent) => void;
|
|
138
|
+
}
|
|
139
|
+
declare class InputHandler {
|
|
140
|
+
private isActive;
|
|
141
|
+
private currentDividerIndex;
|
|
142
|
+
private currentDividerElement;
|
|
143
|
+
private callbacks;
|
|
144
|
+
private boundMouseMove;
|
|
145
|
+
private boundMouseUp;
|
|
146
|
+
private boundTouchMove;
|
|
147
|
+
private boundTouchEnd;
|
|
148
|
+
constructor(callbacks: InputHandlerCallbacks);
|
|
149
|
+
attachDividerListeners(divider: HTMLElement, index: number): void;
|
|
150
|
+
private handleMouseDown;
|
|
151
|
+
private handleMouseMove;
|
|
152
|
+
private handleMouseUp;
|
|
153
|
+
private handleTouchStart;
|
|
154
|
+
private handleTouchMove;
|
|
155
|
+
private handleTouchEnd;
|
|
156
|
+
private startResize;
|
|
157
|
+
private endResize;
|
|
158
|
+
dispose(): void;
|
|
159
|
+
getIsActive(): boolean;
|
|
160
|
+
}
|
|
161
|
+
|
|
162
|
+
declare const splitterStyles: lit.CSSResult;
|
|
163
|
+
|
|
164
|
+
export { InputHandler, MpSplitter, ResizeManager, ResizeState, SplitterStateManager, normalizePointerEvent, splitterStyles };
|
|
165
|
+
export type { Direction, InputHandlerCallbacks, NormalizedPointerEvent, PanelInfo, Point, ResizeManagerOptions, ResizeOperation, SplitterResizeEventDetail, SplitterState, SplitterStateListener };
|
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
import * as lit from 'lit';
|
|
2
|
+
import { LitElement, TemplateResult } from 'lit';
|
|
3
|
+
|
|
4
|
+
interface TabActivateEventDetail {
|
|
5
|
+
/** The `tab-id` of the tab the user activated. */
|
|
6
|
+
tabId: string;
|
|
7
|
+
/** The original DOM event (click or keydown) that triggered the activation. */
|
|
8
|
+
originalEvent: Event;
|
|
9
|
+
}
|
|
10
|
+
/**
|
|
11
|
+
* <mp-tab-control>
|
|
12
|
+
*
|
|
13
|
+
* Bootstrap-styled tab strip. Pages live in named `${id}-content` slots and
|
|
14
|
+
* headers in `${id}-header` slots. The shadow DOM dynamically projects only
|
|
15
|
+
* the currently-active page via `<slot name="${activeId}-content">`, so
|
|
16
|
+
* inactive panels never enter the rendered tree.
|
|
17
|
+
*
|
|
18
|
+
* Authoring (vanilla):
|
|
19
|
+
*
|
|
20
|
+
* <mp-tab-control active-tab="overview">
|
|
21
|
+
* <span slot="overview-header">Overview</span>
|
|
22
|
+
* <div slot="overview-content">Hello</div>
|
|
23
|
+
* <span slot="details-header">Details</span>
|
|
24
|
+
* <div slot="details-content">Details body</div>
|
|
25
|
+
* </mp-tab-control>
|
|
26
|
+
*
|
|
27
|
+
* To mark a tab disabled, set `data-disabled` on the `*-content` element.
|
|
28
|
+
*
|
|
29
|
+
* Active state is **controlled by the host** — the host sets `active-tab` and
|
|
30
|
+
* listens for `tab-activate` events. The Angular wrapper (`bs-tab-control`)
|
|
31
|
+
* drives this via signals.
|
|
32
|
+
*/
|
|
33
|
+
declare class MpTabControl extends LitElement {
|
|
34
|
+
static styles: lit.CSSResult[];
|
|
35
|
+
static get observedAttributes(): string[];
|
|
36
|
+
private tabs;
|
|
37
|
+
private mutationObserver;
|
|
38
|
+
connectedCallback(): void;
|
|
39
|
+
disconnectedCallback(): void;
|
|
40
|
+
attributeChangedCallback(name: string, oldValue: string | null, newValue: string | null): void;
|
|
41
|
+
protected firstUpdated(): void;
|
|
42
|
+
private get tabsPosition();
|
|
43
|
+
private get border();
|
|
44
|
+
private get selectFirstTab();
|
|
45
|
+
private get activeTabId();
|
|
46
|
+
private refreshTabs;
|
|
47
|
+
private resolvedActiveTabId;
|
|
48
|
+
render(): TemplateResult;
|
|
49
|
+
private renderTabHeader;
|
|
50
|
+
private activate;
|
|
51
|
+
private handleKeydown;
|
|
52
|
+
private moveFocusAndActivate;
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
/**
|
|
56
|
+
* <mp-tab-page>
|
|
57
|
+
*
|
|
58
|
+
* Optional convenience wrapper for vanilla consumers. Sets `slot="${tabId}-content"`
|
|
59
|
+
* on itself based on its `tab-id` attribute, so the parent `<mp-tab-control>`
|
|
60
|
+
* picks it up via named-slot projection.
|
|
61
|
+
*
|
|
62
|
+
* Also mirrors `disabled` to `data-disabled` so the tab-control can read the
|
|
63
|
+
* disabled state without inspecting child types.
|
|
64
|
+
*
|
|
65
|
+
* Use directly:
|
|
66
|
+
*
|
|
67
|
+
* <mp-tab-control>
|
|
68
|
+
* <span slot="t1-header">Tab 1</span>
|
|
69
|
+
* <mp-tab-page tab-id="t1">Content 1</mp-tab-page>
|
|
70
|
+
* </mp-tab-control>
|
|
71
|
+
*
|
|
72
|
+
* Or skip this element entirely and put the slot/data-disabled attributes
|
|
73
|
+
* directly on whatever element holds your tab content:
|
|
74
|
+
*
|
|
75
|
+
* <mp-tab-control>
|
|
76
|
+
* <span slot="t1-header">Tab 1</span>
|
|
77
|
+
* <div slot="t1-content">Content 1</div>
|
|
78
|
+
* </mp-tab-control>
|
|
79
|
+
*/
|
|
80
|
+
declare class MpTabPage extends LitElement {
|
|
81
|
+
static styles: lit.CSSResult;
|
|
82
|
+
static get observedAttributes(): string[];
|
|
83
|
+
connectedCallback(): void;
|
|
84
|
+
attributeChangedCallback(name: string, oldValue: string | null, newValue: string | null): void;
|
|
85
|
+
private syncSlot;
|
|
86
|
+
private syncDisabled;
|
|
87
|
+
render(): TemplateResult;
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
type TabsPosition = 'top' | 'bottom';
|
|
91
|
+
|
|
92
|
+
declare const tabControlStyles: lit.CSSResult;
|
|
93
|
+
|
|
94
|
+
export { MpTabControl, MpTabPage, tabControlStyles };
|
|
95
|
+
export type { TabActivateEventDetail, TabsPosition };
|