@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.
Files changed (182) hide show
  1. package/fesm2022/mintplayer-ng-bootstrap-accordion.mjs +20 -20
  2. package/fesm2022/mintplayer-ng-bootstrap-accordion.mjs.map +1 -1
  3. package/fesm2022/mintplayer-ng-bootstrap-alert.mjs +8 -8
  4. package/fesm2022/mintplayer-ng-bootstrap-alert.mjs.map +1 -1
  5. package/fesm2022/mintplayer-ng-bootstrap-badge.mjs +5 -5
  6. package/fesm2022/mintplayer-ng-bootstrap-badge.mjs.map +1 -1
  7. package/fesm2022/mintplayer-ng-bootstrap-breadcrumb.mjs +6 -6
  8. package/fesm2022/mintplayer-ng-bootstrap-breadcrumb.mjs.map +1 -1
  9. package/fesm2022/mintplayer-ng-bootstrap-button-group.mjs +3 -3
  10. package/fesm2022/mintplayer-ng-bootstrap-button-group.mjs.map +1 -1
  11. package/fesm2022/mintplayer-ng-bootstrap-button-type.mjs +4 -4
  12. package/fesm2022/mintplayer-ng-bootstrap-button-type.mjs.map +1 -1
  13. package/fesm2022/mintplayer-ng-bootstrap-calendar-month.mjs +9 -9
  14. package/fesm2022/mintplayer-ng-bootstrap-calendar-month.mjs.map +1 -1
  15. package/fesm2022/mintplayer-ng-bootstrap-calendar.mjs +10 -10
  16. package/fesm2022/mintplayer-ng-bootstrap-calendar.mjs.map +1 -1
  17. package/fesm2022/mintplayer-ng-bootstrap-card.mjs +8 -8
  18. package/fesm2022/mintplayer-ng-bootstrap-card.mjs.map +1 -1
  19. package/fesm2022/mintplayer-ng-bootstrap-carousel.mjs +25 -25
  20. package/fesm2022/mintplayer-ng-bootstrap-carousel.mjs.map +1 -1
  21. package/fesm2022/mintplayer-ng-bootstrap-close.mjs +3 -3
  22. package/fesm2022/mintplayer-ng-bootstrap-close.mjs.map +1 -1
  23. package/fesm2022/mintplayer-ng-bootstrap-code-snippet.mjs +7 -7
  24. package/fesm2022/mintplayer-ng-bootstrap-code-snippet.mjs.map +1 -1
  25. package/fesm2022/mintplayer-ng-bootstrap-color-picker.mjs +58 -58
  26. package/fesm2022/mintplayer-ng-bootstrap-color-picker.mjs.map +1 -1
  27. package/fesm2022/mintplayer-ng-bootstrap-container.mjs +3 -3
  28. package/fesm2022/mintplayer-ng-bootstrap-container.mjs.map +1 -1
  29. package/fesm2022/mintplayer-ng-bootstrap-context-menu.mjs +3 -3
  30. package/fesm2022/mintplayer-ng-bootstrap-context-menu.mjs.map +1 -1
  31. package/fesm2022/mintplayer-ng-bootstrap-copy.mjs +4 -4
  32. package/fesm2022/mintplayer-ng-bootstrap-copy.mjs.map +1 -1
  33. package/fesm2022/mintplayer-ng-bootstrap-datatable.mjs +20 -20
  34. package/fesm2022/mintplayer-ng-bootstrap-datatable.mjs.map +1 -1
  35. package/fesm2022/mintplayer-ng-bootstrap-datepicker.mjs +6 -6
  36. package/fesm2022/mintplayer-ng-bootstrap-datepicker.mjs.map +1 -1
  37. package/fesm2022/mintplayer-ng-bootstrap-dock.mjs +798 -1175
  38. package/fesm2022/mintplayer-ng-bootstrap-dock.mjs.map +1 -1
  39. package/fesm2022/mintplayer-ng-bootstrap-dropdown-divider.mjs +3 -3
  40. package/fesm2022/mintplayer-ng-bootstrap-dropdown-divider.mjs.map +1 -1
  41. package/fesm2022/mintplayer-ng-bootstrap-dropdown-menu.mjs +10 -10
  42. package/fesm2022/mintplayer-ng-bootstrap-dropdown-menu.mjs.map +1 -1
  43. package/fesm2022/mintplayer-ng-bootstrap-dropdown.mjs +15 -15
  44. package/fesm2022/mintplayer-ng-bootstrap-dropdown.mjs.map +1 -1
  45. package/fesm2022/mintplayer-ng-bootstrap-enhanced-paste.mjs +3 -3
  46. package/fesm2022/mintplayer-ng-bootstrap-enhanced-paste.mjs.map +1 -1
  47. package/fesm2022/mintplayer-ng-bootstrap-enum.mjs +3 -3
  48. package/fesm2022/mintplayer-ng-bootstrap-enum.mjs.map +1 -1
  49. package/fesm2022/mintplayer-ng-bootstrap-file-upload.mjs +16 -16
  50. package/fesm2022/mintplayer-ng-bootstrap-file-upload.mjs.map +1 -1
  51. package/fesm2022/mintplayer-ng-bootstrap-floating-labels.mjs +3 -3
  52. package/fesm2022/mintplayer-ng-bootstrap-floating-labels.mjs.map +1 -1
  53. package/fesm2022/mintplayer-ng-bootstrap-font-color.mjs +3 -3
  54. package/fesm2022/mintplayer-ng-bootstrap-font-color.mjs.map +1 -1
  55. package/fesm2022/mintplayer-ng-bootstrap-for.mjs +4 -4
  56. package/fesm2022/mintplayer-ng-bootstrap-for.mjs.map +1 -1
  57. package/fesm2022/mintplayer-ng-bootstrap-form.mjs +11 -11
  58. package/fesm2022/mintplayer-ng-bootstrap-form.mjs.map +1 -1
  59. package/fesm2022/mintplayer-ng-bootstrap-grid.mjs +26 -26
  60. package/fesm2022/mintplayer-ng-bootstrap-grid.mjs.map +1 -1
  61. package/fesm2022/mintplayer-ng-bootstrap-has-overlay.mjs +4 -4
  62. package/fesm2022/mintplayer-ng-bootstrap-has-overlay.mjs.map +1 -1
  63. package/fesm2022/mintplayer-ng-bootstrap-has-property.mjs +3 -3
  64. package/fesm2022/mintplayer-ng-bootstrap-has-property.mjs.map +1 -1
  65. package/fesm2022/mintplayer-ng-bootstrap-in-list.mjs +3 -3
  66. package/fesm2022/mintplayer-ng-bootstrap-in-list.mjs.map +1 -1
  67. package/fesm2022/mintplayer-ng-bootstrap-input-group.mjs +3 -3
  68. package/fesm2022/mintplayer-ng-bootstrap-input-group.mjs.map +1 -1
  69. package/fesm2022/mintplayer-ng-bootstrap-instance-of.mjs +14 -14
  70. package/fesm2022/mintplayer-ng-bootstrap-instance-of.mjs.map +1 -1
  71. package/fesm2022/mintplayer-ng-bootstrap-let.mjs +4 -4
  72. package/fesm2022/mintplayer-ng-bootstrap-let.mjs.map +1 -1
  73. package/fesm2022/mintplayer-ng-bootstrap-linify.mjs +3 -3
  74. package/fesm2022/mintplayer-ng-bootstrap-linify.mjs.map +1 -1
  75. package/fesm2022/mintplayer-ng-bootstrap-list-group.mjs +7 -7
  76. package/fesm2022/mintplayer-ng-bootstrap-list-group.mjs.map +1 -1
  77. package/fesm2022/mintplayer-ng-bootstrap-markdown.mjs +12 -12
  78. package/fesm2022/mintplayer-ng-bootstrap-markdown.mjs.map +1 -1
  79. package/fesm2022/mintplayer-ng-bootstrap-marquee.mjs +3 -3
  80. package/fesm2022/mintplayer-ng-bootstrap-marquee.mjs.map +1 -1
  81. package/fesm2022/mintplayer-ng-bootstrap-modal.mjs +24 -24
  82. package/fesm2022/mintplayer-ng-bootstrap-modal.mjs.map +1 -1
  83. package/fesm2022/mintplayer-ng-bootstrap-multiselect.mjs +24 -24
  84. package/fesm2022/mintplayer-ng-bootstrap-multiselect.mjs.map +1 -1
  85. package/fesm2022/mintplayer-ng-bootstrap-navbar-toggler.mjs +5 -5
  86. package/fesm2022/mintplayer-ng-bootstrap-navbar-toggler.mjs.map +1 -1
  87. package/fesm2022/mintplayer-ng-bootstrap-navbar.mjs +58 -58
  88. package/fesm2022/mintplayer-ng-bootstrap-navbar.mjs.map +1 -1
  89. package/fesm2022/mintplayer-ng-bootstrap-navigation-lock.mjs +8 -8
  90. package/fesm2022/mintplayer-ng-bootstrap-navigation-lock.mjs.map +1 -1
  91. package/fesm2022/mintplayer-ng-bootstrap-no-noscript.mjs +3 -3
  92. package/fesm2022/mintplayer-ng-bootstrap-no-noscript.mjs.map +1 -1
  93. package/fesm2022/mintplayer-ng-bootstrap-offcanvas.mjs +40 -40
  94. package/fesm2022/mintplayer-ng-bootstrap-offcanvas.mjs.map +1 -1
  95. package/fesm2022/mintplayer-ng-bootstrap-ordinal-number.mjs +3 -3
  96. package/fesm2022/mintplayer-ng-bootstrap-ordinal-number.mjs.map +1 -1
  97. package/fesm2022/mintplayer-ng-bootstrap-pagination.mjs +12 -12
  98. package/fesm2022/mintplayer-ng-bootstrap-pagination.mjs.map +1 -1
  99. package/fesm2022/mintplayer-ng-bootstrap-parallax.mjs +6 -6
  100. package/fesm2022/mintplayer-ng-bootstrap-parallax.mjs.map +1 -1
  101. package/fesm2022/mintplayer-ng-bootstrap-placeholder.mjs +7 -7
  102. package/fesm2022/mintplayer-ng-bootstrap-placeholder.mjs.map +1 -1
  103. package/fesm2022/mintplayer-ng-bootstrap-playlist-toggler.mjs +5 -5
  104. package/fesm2022/mintplayer-ng-bootstrap-playlist-toggler.mjs.map +1 -1
  105. package/fesm2022/mintplayer-ng-bootstrap-popover.mjs +20 -20
  106. package/fesm2022/mintplayer-ng-bootstrap-popover.mjs.map +1 -1
  107. package/fesm2022/mintplayer-ng-bootstrap-priority-nav.mjs +30 -30
  108. package/fesm2022/mintplayer-ng-bootstrap-priority-nav.mjs.map +1 -1
  109. package/fesm2022/mintplayer-ng-bootstrap-progress-bar.mjs +17 -17
  110. package/fesm2022/mintplayer-ng-bootstrap-progress-bar.mjs.map +1 -1
  111. package/fesm2022/mintplayer-ng-bootstrap-range.mjs +9 -9
  112. package/fesm2022/mintplayer-ng-bootstrap-range.mjs.map +1 -1
  113. package/fesm2022/mintplayer-ng-bootstrap-rating.mjs +7 -7
  114. package/fesm2022/mintplayer-ng-bootstrap-rating.mjs.map +1 -1
  115. package/fesm2022/mintplayer-ng-bootstrap-resizable.mjs +25 -25
  116. package/fesm2022/mintplayer-ng-bootstrap-resizable.mjs.map +1 -1
  117. package/fesm2022/mintplayer-ng-bootstrap-scheduler.mjs +16 -16
  118. package/fesm2022/mintplayer-ng-bootstrap-scheduler.mjs.map +1 -1
  119. package/fesm2022/mintplayer-ng-bootstrap-scrollspy.mjs +14 -14
  120. package/fesm2022/mintplayer-ng-bootstrap-scrollspy.mjs.map +1 -1
  121. package/fesm2022/mintplayer-ng-bootstrap-searchbox.mjs +24 -24
  122. package/fesm2022/mintplayer-ng-bootstrap-searchbox.mjs.map +1 -1
  123. package/fesm2022/mintplayer-ng-bootstrap-select.mjs +19 -19
  124. package/fesm2022/mintplayer-ng-bootstrap-select.mjs.map +1 -1
  125. package/fesm2022/mintplayer-ng-bootstrap-select2.mjs +20 -20
  126. package/fesm2022/mintplayer-ng-bootstrap-select2.mjs.map +1 -1
  127. package/fesm2022/mintplayer-ng-bootstrap-shell.mjs +11 -11
  128. package/fesm2022/mintplayer-ng-bootstrap-shell.mjs.map +1 -1
  129. package/fesm2022/mintplayer-ng-bootstrap-signature-pad.mjs +7 -7
  130. package/fesm2022/mintplayer-ng-bootstrap-signature-pad.mjs.map +1 -1
  131. package/fesm2022/mintplayer-ng-bootstrap-slugify.mjs +3 -3
  132. package/fesm2022/mintplayer-ng-bootstrap-slugify.mjs.map +1 -1
  133. package/fesm2022/mintplayer-ng-bootstrap-spinner.mjs +7 -7
  134. package/fesm2022/mintplayer-ng-bootstrap-spinner.mjs.map +1 -1
  135. package/fesm2022/mintplayer-ng-bootstrap-split-string.mjs +3 -3
  136. package/fesm2022/mintplayer-ng-bootstrap-split-string.mjs.map +1 -1
  137. package/fesm2022/mintplayer-ng-bootstrap-sticky-footer.mjs +6 -6
  138. package/fesm2022/mintplayer-ng-bootstrap-sticky-footer.mjs.map +1 -1
  139. package/fesm2022/mintplayer-ng-bootstrap-tab-control.mjs +57 -67
  140. package/fesm2022/mintplayer-ng-bootstrap-tab-control.mjs.map +1 -1
  141. package/fesm2022/mintplayer-ng-bootstrap-table.mjs +10 -10
  142. package/fesm2022/mintplayer-ng-bootstrap-table.mjs.map +1 -1
  143. package/fesm2022/mintplayer-ng-bootstrap-timepicker.mjs +8 -8
  144. package/fesm2022/mintplayer-ng-bootstrap-timepicker.mjs.map +1 -1
  145. package/fesm2022/mintplayer-ng-bootstrap-toast.mjs +24 -24
  146. package/fesm2022/mintplayer-ng-bootstrap-toast.mjs.map +1 -1
  147. package/fesm2022/mintplayer-ng-bootstrap-toggle-button.mjs +22 -22
  148. package/fesm2022/mintplayer-ng-bootstrap-toggle-button.mjs.map +1 -1
  149. package/fesm2022/mintplayer-ng-bootstrap-tooltip.mjs +10 -10
  150. package/fesm2022/mintplayer-ng-bootstrap-tooltip.mjs.map +1 -1
  151. package/fesm2022/mintplayer-ng-bootstrap-treeview.mjs +14 -14
  152. package/fesm2022/mintplayer-ng-bootstrap-treeview.mjs.map +1 -1
  153. package/fesm2022/mintplayer-ng-bootstrap-trust-html.mjs +3 -3
  154. package/fesm2022/mintplayer-ng-bootstrap-trust-html.mjs.map +1 -1
  155. package/fesm2022/mintplayer-ng-bootstrap-typeahead.mjs +10 -10
  156. package/fesm2022/mintplayer-ng-bootstrap-typeahead.mjs.map +1 -1
  157. package/fesm2022/mintplayer-ng-bootstrap-uc-first.mjs +3 -3
  158. package/fesm2022/mintplayer-ng-bootstrap-uc-first.mjs.map +1 -1
  159. package/fesm2022/mintplayer-ng-bootstrap-user-agent.mjs +3 -3
  160. package/fesm2022/mintplayer-ng-bootstrap-user-agent.mjs.map +1 -1
  161. package/fesm2022/mintplayer-ng-bootstrap-viewport.mjs +3 -3
  162. package/fesm2022/mintplayer-ng-bootstrap-viewport.mjs.map +1 -1
  163. package/fesm2022/mintplayer-ng-bootstrap-virtual-datatable.mjs +10 -10
  164. package/fesm2022/mintplayer-ng-bootstrap-virtual-datatable.mjs.map +1 -1
  165. package/fesm2022/mintplayer-ng-bootstrap-web-components-scheduler-core.mjs +1356 -0
  166. package/fesm2022/mintplayer-ng-bootstrap-web-components-scheduler-core.mjs.map +1 -0
  167. package/fesm2022/mintplayer-ng-bootstrap-web-components-scheduler.mjs +3819 -0
  168. package/fesm2022/mintplayer-ng-bootstrap-web-components-scheduler.mjs.map +1 -0
  169. package/fesm2022/mintplayer-ng-bootstrap-web-components-splitter.mjs +731 -0
  170. package/fesm2022/mintplayer-ng-bootstrap-web-components-splitter.mjs.map +1 -0
  171. package/fesm2022/mintplayer-ng-bootstrap-web-components-tab-control.mjs +549 -0
  172. package/fesm2022/mintplayer-ng-bootstrap-web-components-tab-control.mjs.map +1 -0
  173. package/fesm2022/mintplayer-ng-bootstrap-word-count.mjs +3 -3
  174. package/fesm2022/mintplayer-ng-bootstrap-word-count.mjs.map +1 -1
  175. package/package.json +20 -6
  176. package/types/mintplayer-ng-bootstrap-dock.d.ts +55 -19
  177. package/types/mintplayer-ng-bootstrap-scheduler.d.ts +2 -2
  178. package/types/mintplayer-ng-bootstrap-tab-control.d.ts +7 -11
  179. package/types/mintplayer-ng-bootstrap-web-components-scheduler-core.d.ts +890 -0
  180. package/types/mintplayer-ng-bootstrap-web-components-scheduler.d.ts +354 -0
  181. package/types/mintplayer-ng-bootstrap-web-components-splitter.d.ts +165 -0
  182. 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 };