novo-elements 11.0.4 → 11.1.0-next.2
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/elements/button/styles/button-primary.scss +0 -1
- package/elements/calendar/month-view/month-view.component.scss +0 -1
- package/elements/chips/Chips.scss +0 -3
- package/elements/common/option/optgroup.component.scss +0 -2
- package/elements/data-table/data-table.component.d.ts +12 -2
- package/elements/data-table/data-table.component.scss +4 -14
- package/elements/data-table/data-table.module.d.ts +13 -12
- package/elements/data-table/interfaces.d.ts +1 -0
- package/elements/date-picker/DateRangeInput.scss +0 -1
- package/elements/drag-drop/drag-drop-box.d.ts +23 -3
- package/elements/field/field.scss +0 -1
- package/elements/form/extras/file/FileInput.scss +1 -1
- package/elements/layout/content/layout-content.component.d.ts +1 -2
- package/elements/non-ideal-state/NonIdealState.scss +0 -1
- package/elements/picker/extras/picker-results/PickerResults.scss +0 -3
- package/elements/switch/Switch.scss +0 -1
- package/elements/time-picker/TimePicker.scss +0 -2
- package/fesm2022/novo-elements-elements-agenda.mjs +0 -85
- package/fesm2022/novo-elements-elements-agenda.mjs.map +1 -1
- package/fesm2022/novo-elements-elements-aside.mjs +0 -1
- package/fesm2022/novo-elements-elements-aside.mjs.map +1 -1
- package/fesm2022/novo-elements-elements-autocomplete.mjs +0 -8
- package/fesm2022/novo-elements-elements-autocomplete.mjs.map +1 -1
- package/fesm2022/novo-elements-elements-avatar.mjs +0 -2
- package/fesm2022/novo-elements-elements-avatar.mjs.map +1 -1
- package/fesm2022/novo-elements-elements-checkbox.mjs +0 -1
- package/fesm2022/novo-elements-elements-checkbox.mjs.map +1 -1
- package/fesm2022/novo-elements-elements-color-picker.mjs +0 -4
- package/fesm2022/novo-elements-elements-color-picker.mjs.map +1 -1
- package/fesm2022/novo-elements-elements-common.mjs +1 -23
- package/fesm2022/novo-elements-elements-common.mjs.map +1 -1
- package/fesm2022/novo-elements-elements-data-table.mjs +70 -540
- package/fesm2022/novo-elements-elements-data-table.mjs.map +1 -1
- package/fesm2022/novo-elements-elements-date-picker.mjs +1 -13
- package/fesm2022/novo-elements-elements-date-picker.mjs.map +1 -1
- package/fesm2022/novo-elements-elements-drag-drop.mjs +147 -27
- package/fesm2022/novo-elements-elements-drag-drop.mjs.map +1 -1
- package/fesm2022/novo-elements-elements-dropdown.mjs +1 -10
- package/fesm2022/novo-elements-elements-dropdown.mjs.map +1 -1
- package/fesm2022/novo-elements-elements-expansion.mjs +1 -5
- package/fesm2022/novo-elements-elements-expansion.mjs.map +1 -1
- package/fesm2022/novo-elements-elements-field.mjs +1 -15
- package/fesm2022/novo-elements-elements-field.mjs.map +1 -1
- package/fesm2022/novo-elements-elements-flex.mjs.map +1 -1
- package/fesm2022/novo-elements-elements-form.mjs +2 -15
- package/fesm2022/novo-elements-elements-form.mjs.map +1 -1
- package/fesm2022/novo-elements-elements-layout.mjs +1 -5
- package/fesm2022/novo-elements-elements-layout.mjs.map +1 -1
- package/fesm2022/novo-elements-elements-menu.mjs +2 -35
- package/fesm2022/novo-elements-elements-menu.mjs.map +1 -1
- package/fesm2022/novo-elements-elements-picker.mjs +1 -4
- package/fesm2022/novo-elements-elements-picker.mjs.map +1 -1
- package/fesm2022/novo-elements-elements-progress.mjs.map +1 -1
- package/fesm2022/novo-elements-elements-radio.mjs.map +1 -1
- package/fesm2022/novo-elements-elements-select-search.mjs +0 -14
- package/fesm2022/novo-elements-elements-select-search.mjs.map +1 -1
- package/fesm2022/novo-elements-elements-select.mjs +0 -13
- package/fesm2022/novo-elements-elements-select.mjs.map +1 -1
- package/fesm2022/novo-elements-elements-simple-table.mjs +0 -10
- package/fesm2022/novo-elements-elements-simple-table.mjs.map +1 -1
- package/fesm2022/novo-elements-elements-time-picker.mjs +0 -38
- package/fesm2022/novo-elements-elements-time-picker.mjs.map +1 -1
- package/fesm2022/novo-elements-elements-value.mjs.map +1 -1
- package/fesm2022/novo-elements-services.mjs +0 -13
- package/fesm2022/novo-elements-services.mjs.map +1 -1
- package/fesm2022/novo-elements-utils.mjs +9 -13
- package/fesm2022/novo-elements-utils.mjs.map +1 -1
- package/package.json +1 -1
- package/services/data-provider/ArrayCollection.d.ts +0 -10
- package/services/data-provider/Collection.d.ts +0 -9
- package/styles/content/forms.scss +0 -40
- package/styles/content/links.scss +0 -1
- package/styles/content/misc.scss +0 -1
- package/utils/Helpers.d.ts +6 -2
- package/elements/field/toggle/picker-toggle.component.scss +0 -23
|
@@ -1,50 +1,73 @@
|
|
|
1
|
+
import { OverlayContainer } from '@angular/cdk/overlay';
|
|
1
2
|
import * as i0 from '@angular/core';
|
|
2
|
-
import { EventEmitter, HostListener, Output, Input, Directive, NgModule } from '@angular/core';
|
|
3
|
-
import { ReplaySubject } from 'rxjs';
|
|
3
|
+
import { inject, EventEmitter, signal, computed, HostListener, HostBinding, Output, Input, Directive, NgModule } from '@angular/core';
|
|
4
4
|
|
|
5
|
+
const SCROLL_DRAGGABLE_PADDING_REGION = 30;
|
|
6
|
+
const SCROLL_DRAGGABLE_EVENT_AMT = 10;
|
|
5
7
|
class NovoDragBoxParent {
|
|
6
8
|
get itemsReordered() {
|
|
7
9
|
return this.trackedItems.map(item => item.item);
|
|
8
10
|
}
|
|
11
|
+
get dragging() {
|
|
12
|
+
return Boolean(this.pickedUp);
|
|
13
|
+
}
|
|
9
14
|
constructor(elementRef, renderer) {
|
|
10
15
|
this.elementRef = elementRef;
|
|
11
16
|
this.renderer = renderer;
|
|
12
|
-
this
|
|
17
|
+
this.overlayContainer = inject(OverlayContainer, { optional: true });
|
|
13
18
|
this.novoDragDropFinish = new EventEmitter();
|
|
19
|
+
this.scrollContainer = signal(null);
|
|
20
|
+
this.scrollContainerRect = computed(() => this.scrollContainer()?.getBoundingClientRect());
|
|
21
|
+
this.scrollX = signal(false);
|
|
22
|
+
this.scrollY = signal(false);
|
|
14
23
|
this.mutationObserver = new MutationObserver(this.mutationDetected.bind(this));
|
|
15
24
|
}
|
|
16
25
|
get element() {
|
|
17
26
|
return this.elementRef.nativeElement;
|
|
18
27
|
}
|
|
19
28
|
ngAfterViewInit() {
|
|
20
|
-
this.
|
|
21
|
-
|
|
29
|
+
if (this.items) {
|
|
30
|
+
this.registerChildren();
|
|
31
|
+
this.mutationObserver.observe(this.element, { childList: true });
|
|
32
|
+
}
|
|
33
|
+
// if items is falsey, then no behavior is set up. In future, this component may support late enablement,
|
|
34
|
+
// but for now it's not a priority. (It would open the question of late disablement)
|
|
22
35
|
}
|
|
23
36
|
ngOnDestroy() {
|
|
24
|
-
this
|
|
25
|
-
|
|
37
|
+
this.trackedItems?.forEach(item => {
|
|
38
|
+
item.removeListeners();
|
|
39
|
+
});
|
|
26
40
|
}
|
|
27
41
|
registerChildren() {
|
|
28
|
-
if (this.items
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
42
|
+
if (this.items) {
|
|
43
|
+
if (this.items.length !== this.element.children.length) {
|
|
44
|
+
throw new Error(`Could not match item list to children list - drag box contains ${this.items.length} items, but has ${this.element.children.length} elements`);
|
|
45
|
+
}
|
|
46
|
+
this.trackedItems = [];
|
|
47
|
+
for (let i = 0; i < this.element.children.length; i++) {
|
|
48
|
+
this.registerChild(this.element.children[i], i);
|
|
49
|
+
}
|
|
34
50
|
}
|
|
35
51
|
}
|
|
36
52
|
registerChild(element, index) {
|
|
37
|
-
const
|
|
38
|
-
this.renderer.listen(element, 'dragstart', this.onDragStart.bind(this)),
|
|
39
|
-
this.renderer.listen(element, 'drop', this.onDragFinish.bind(this)),
|
|
40
|
-
this.renderer.listen(element, 'dragend', this.onDragStop.bind(this))
|
|
41
|
-
];
|
|
42
|
-
element.draggable = true;
|
|
43
|
-
this.$destroy.subscribe(() => listeners.forEach(cb => cb()));
|
|
44
|
-
this.trackedItems.push({
|
|
53
|
+
const trackedItem = {
|
|
45
54
|
item: this.items[index],
|
|
46
55
|
element
|
|
47
|
-
}
|
|
56
|
+
};
|
|
57
|
+
if (this.dragFilter && !this.dragFilter(this.items[index])) {
|
|
58
|
+
element.draggable = false;
|
|
59
|
+
trackedItem.removeListeners = () => { };
|
|
60
|
+
}
|
|
61
|
+
else {
|
|
62
|
+
const listeners = [
|
|
63
|
+
this.renderer.listen(element, 'dragstart', this.onDragStart.bind(this)),
|
|
64
|
+
this.renderer.listen(element, 'drop', this.onDragFinish.bind(this)),
|
|
65
|
+
this.renderer.listen(element, 'dragend', this.onDragStop.bind(this))
|
|
66
|
+
];
|
|
67
|
+
element.draggable = true;
|
|
68
|
+
trackedItem.removeListeners = () => listeners.forEach(cb => cb());
|
|
69
|
+
}
|
|
70
|
+
this.trackedItems.push(trackedItem);
|
|
48
71
|
}
|
|
49
72
|
mutationDetected(mutations) {
|
|
50
73
|
if (this.pickedUp) {
|
|
@@ -69,7 +92,13 @@ class NovoDragBoxParent {
|
|
|
69
92
|
this.registerChild(node, idx);
|
|
70
93
|
});
|
|
71
94
|
if (removedNodes.size > 0) {
|
|
72
|
-
this.trackedItems = this.trackedItems.filter(item =>
|
|
95
|
+
this.trackedItems = this.trackedItems.filter(item => {
|
|
96
|
+
const keep = !removedNodes.has(item.element);
|
|
97
|
+
if (!keep) {
|
|
98
|
+
item.removeListeners();
|
|
99
|
+
}
|
|
100
|
+
return keep;
|
|
101
|
+
});
|
|
73
102
|
}
|
|
74
103
|
}
|
|
75
104
|
/** Per-item listeners */
|
|
@@ -81,6 +110,9 @@ class NovoDragBoxParent {
|
|
|
81
110
|
const dataTransfer = event.dataTransfer;
|
|
82
111
|
// Present a native 'move item' effect
|
|
83
112
|
dataTransfer.effectAllowed = 'move';
|
|
113
|
+
if (!this.disableScroll) {
|
|
114
|
+
this.scrollContainer.set(this.findScrollableParent());
|
|
115
|
+
}
|
|
84
116
|
this.pickedUp = event.target;
|
|
85
117
|
event.stopPropagation();
|
|
86
118
|
this.savedOrder = [...this.trackedItems];
|
|
@@ -88,6 +120,7 @@ class NovoDragBoxParent {
|
|
|
88
120
|
// Equivalent of "finally" - this runs whether or not the drag finished on a valid ending location
|
|
89
121
|
onDragStop(event) {
|
|
90
122
|
this.pickedUp = null;
|
|
123
|
+
this.previewReplacing = null;
|
|
91
124
|
this.savedOrder = null;
|
|
92
125
|
event.stopPropagation();
|
|
93
126
|
}
|
|
@@ -114,7 +147,7 @@ class NovoDragBoxParent {
|
|
|
114
147
|
}
|
|
115
148
|
/** - end per-item listeners */
|
|
116
149
|
onDragOver(event) {
|
|
117
|
-
if (!this.pickedUp) {
|
|
150
|
+
if (!this.pickedUp || this.inOverlay(event)) {
|
|
118
151
|
return;
|
|
119
152
|
}
|
|
120
153
|
let target = event.target;
|
|
@@ -133,7 +166,15 @@ class NovoDragBoxParent {
|
|
|
133
166
|
if (event.dataTransfer) {
|
|
134
167
|
event.dataTransfer.dropEffect = 'move';
|
|
135
168
|
}
|
|
136
|
-
|
|
169
|
+
if (this.previewReplacing !== target) {
|
|
170
|
+
if (this.isValidTarget(target)) {
|
|
171
|
+
this.previewReplacing = target;
|
|
172
|
+
this.applyTempSort(this.pickedUp, target);
|
|
173
|
+
}
|
|
174
|
+
else {
|
|
175
|
+
event.dataTransfer.dropEffect = 'none';
|
|
176
|
+
}
|
|
177
|
+
}
|
|
137
178
|
}
|
|
138
179
|
else {
|
|
139
180
|
// if not within this drag box, then move this item back to its original position and show a diabled drag effect
|
|
@@ -142,6 +183,18 @@ class NovoDragBoxParent {
|
|
|
142
183
|
}
|
|
143
184
|
this.resetSorting();
|
|
144
185
|
}
|
|
186
|
+
if (!this.disableScroll) {
|
|
187
|
+
this.processScrollDuringMove(event);
|
|
188
|
+
}
|
|
189
|
+
}
|
|
190
|
+
inOverlay(event) {
|
|
191
|
+
// Make sure a drag event is not looking at a tooltip or similar.
|
|
192
|
+
// Return false if the dragbox itself is in an overlay - these scenarios will be harder to account for.
|
|
193
|
+
const overlayElement = this.overlayContainer?.getContainerElement();
|
|
194
|
+
return overlayElement && (overlayElement.contains(event.target) && !overlayElement.contains(this.element));
|
|
195
|
+
}
|
|
196
|
+
isValidTarget(target) {
|
|
197
|
+
return target.draggable;
|
|
145
198
|
}
|
|
146
199
|
findDraggableParentOfElement(target) {
|
|
147
200
|
const parentElement = target.parentElement;
|
|
@@ -199,26 +252,93 @@ class NovoDragBoxParent {
|
|
|
199
252
|
return !this.isElementWithinEventBounds(userDragTarget, event);
|
|
200
253
|
}
|
|
201
254
|
}
|
|
255
|
+
processScrollDuringMove(event) {
|
|
256
|
+
const scrollElement = this.scrollContainer();
|
|
257
|
+
if (!scrollElement) {
|
|
258
|
+
return;
|
|
259
|
+
}
|
|
260
|
+
const rect = this.scrollContainerRect();
|
|
261
|
+
if (this.scrollX()) {
|
|
262
|
+
if (event.x > rect.left && event.x < rect.left + SCROLL_DRAGGABLE_PADDING_REGION) {
|
|
263
|
+
scrollElement.scrollLeft -= 10;
|
|
264
|
+
}
|
|
265
|
+
else if (event.x < rect.right && event.x > rect.right - SCROLL_DRAGGABLE_PADDING_REGION) {
|
|
266
|
+
scrollElement.scrollLeft += 10;
|
|
267
|
+
}
|
|
268
|
+
}
|
|
269
|
+
if (this.scrollY()) {
|
|
270
|
+
if (event.y > rect.top && event.y < rect.top + SCROLL_DRAGGABLE_PADDING_REGION) {
|
|
271
|
+
scrollElement.scrollTop -= 10;
|
|
272
|
+
}
|
|
273
|
+
else if (event.y < rect.bottom && event.y > rect.bottom - SCROLL_DRAGGABLE_PADDING_REGION) {
|
|
274
|
+
scrollElement.scrollTop += 10;
|
|
275
|
+
}
|
|
276
|
+
}
|
|
277
|
+
}
|
|
202
278
|
isElementWithinEventBounds(element, event) {
|
|
203
279
|
const rect = element.getBoundingClientRect();
|
|
204
280
|
const isInside = event.clientX > rect.left && event.clientX < rect.right &&
|
|
205
281
|
event.clientY < rect.bottom && event.clientY > rect.top;
|
|
206
282
|
return isInside;
|
|
207
283
|
}
|
|
284
|
+
findScrollableParent() {
|
|
285
|
+
let currentElement = this.element.parentElement;
|
|
286
|
+
this.scrollX.set(false);
|
|
287
|
+
this.scrollY.set(false);
|
|
288
|
+
while (currentElement) {
|
|
289
|
+
const hasVerticalScroll = currentElement.scrollHeight > currentElement.clientHeight;
|
|
290
|
+
const hasHorizontalScroll = currentElement.scrollWidth > currentElement.clientWidth;
|
|
291
|
+
const isScrollable = hasVerticalScroll || hasHorizontalScroll;
|
|
292
|
+
if (isScrollable) {
|
|
293
|
+
const computedStyle = window.getComputedStyle(currentElement);
|
|
294
|
+
const overflowY = computedStyle.overflowY;
|
|
295
|
+
const overflowX = computedStyle.overflowX;
|
|
296
|
+
// Check if overflow is set to allow scrolling
|
|
297
|
+
if ((overflowY === 'auto' || overflowY === 'scroll') ||
|
|
298
|
+
(overflowX === 'auto' || overflowX === 'scroll')) {
|
|
299
|
+
// Verify the scrollable parent is smaller than the drag container
|
|
300
|
+
if (currentElement.clientHeight < this.element.clientHeight) {
|
|
301
|
+
this.scrollY.set(true);
|
|
302
|
+
}
|
|
303
|
+
if (currentElement.clientWidth < this.element.clientWidth) {
|
|
304
|
+
this.scrollX.set(true);
|
|
305
|
+
}
|
|
306
|
+
if (this.scrollX() || this.scrollY()) {
|
|
307
|
+
return currentElement;
|
|
308
|
+
}
|
|
309
|
+
}
|
|
310
|
+
}
|
|
311
|
+
currentElement = currentElement.parentElement;
|
|
312
|
+
}
|
|
313
|
+
return null;
|
|
314
|
+
}
|
|
208
315
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.15", ngImport: i0, type: NovoDragBoxParent, deps: [{ token: i0.ElementRef }, { token: i0.Renderer2 }], target: i0.ɵɵFactoryTarget.Directive }); }
|
|
209
|
-
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "19.2.15", type: NovoDragBoxParent, isStandalone: false, selector: "[novoDragDrop]", inputs: { items: ["novoDragDrop", "items"] }, outputs: { novoDragDropFinish: "novoDragDropFinish" }, host: { listeners: { "window:dragover": "onDragOver($event)" } }, ngImport: i0 }); }
|
|
316
|
+
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "19.2.15", type: NovoDragBoxParent, isStandalone: false, selector: "[novoDragDrop]", inputs: { items: ["novoDragDrop", "items"], dragFilter: ["novoDragDropFilter", "dragFilter"], disableScroll: ["novoDragDropDisableScroll", "disableScroll"] }, outputs: { novoDragDropFinish: "novoDragDropFinish" }, host: { listeners: { "window:dragover": "onDragOver($event)" }, properties: { "class.dragging": "this.dragging" }, classAttribute: "novo-drag-container" }, ngImport: i0 }); }
|
|
210
317
|
}
|
|
211
318
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.15", ngImport: i0, type: NovoDragBoxParent, decorators: [{
|
|
212
319
|
type: Directive,
|
|
213
320
|
args: [{
|
|
214
321
|
selector: '[novoDragDrop]',
|
|
215
|
-
standalone: false
|
|
322
|
+
standalone: false,
|
|
323
|
+
host: {
|
|
324
|
+
class: 'novo-drag-container',
|
|
325
|
+
'[class.dragging]': '!!pickedUp',
|
|
326
|
+
}
|
|
216
327
|
}]
|
|
217
328
|
}], ctorParameters: () => [{ type: i0.ElementRef }, { type: i0.Renderer2 }], propDecorators: { items: [{
|
|
218
329
|
type: Input,
|
|
219
330
|
args: ['novoDragDrop']
|
|
331
|
+
}], dragFilter: [{
|
|
332
|
+
type: Input,
|
|
333
|
+
args: ['novoDragDropFilter']
|
|
334
|
+
}], disableScroll: [{
|
|
335
|
+
type: Input,
|
|
336
|
+
args: ['novoDragDropDisableScroll']
|
|
220
337
|
}], novoDragDropFinish: [{
|
|
221
338
|
type: Output
|
|
339
|
+
}], dragging: [{
|
|
340
|
+
type: HostBinding,
|
|
341
|
+
args: ['class.dragging']
|
|
222
342
|
}], onDragOver: [{
|
|
223
343
|
type: HostListener,
|
|
224
344
|
args: ['window:dragover', ['$event']]
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"novo-elements-elements-drag-drop.mjs","sources":["../../../projects/novo-elements/src/elements/drag-drop/drag-drop-box.ts","../../../projects/novo-elements/src/elements/drag-drop/drag-drop.module.ts","../../../projects/novo-elements/src/elements/drag-drop/novo-elements-elements-drag-drop.ts"],"sourcesContent":["import { AfterViewInit, Directive, ElementRef, EventEmitter, HostListener, Input, OnDestroy, Output, Renderer2 } from '@angular/core';\nimport { ReplaySubject } from 'rxjs';\n\nexport interface NovoDragFinishEvent<T> {\n draggedItem: T;\n allItems: T[];\n event: DragEvent;\n}\n\ninterface NovoDragItem<T> {\n item: T;\n element: HTMLElement;\n}\n\n@Directive({\n selector: '[novoDragDrop]',\n standalone: false\n})\nexport class NovoDragBoxParent<T> implements AfterViewInit, OnDestroy {\n\n pickedUp?: HTMLElement;\n savedOrder?: NovoDragItem<T>[];\n\n $destroy = new ReplaySubject<void>(1);\n\n @Input('novoDragDrop') items: T[];\n\n @Output() novoDragDropFinish = new EventEmitter<NovoDragFinishEvent<T>>();\n\n private trackedItems: NovoDragItem<T>[];\n\n get itemsReordered(): T[] {\n return this.trackedItems.map(item => item.item);\n }\n\n mutationObserver = new MutationObserver(this.mutationDetected.bind(this));\n\n constructor(private elementRef: ElementRef, private renderer: Renderer2) { }\n\n get element(): HTMLElement {\n return this.elementRef.nativeElement;\n }\n\n ngAfterViewInit(): void {\n this.registerChildren();\n this.mutationObserver.observe(this.element, { childList: true });\n }\n\n ngOnDestroy(): void {\n this.$destroy.next();\n this.$destroy.complete();\n }\n\n private registerChildren(): void {\n if (this.items && this.items.length !== this.element.children.length) {\n throw new Error(`Could not match item list to children list - drag box contains ${this.items.length} items, but has ${this.element.children.length} elements`);\n }\n this.trackedItems = [];\n for (let i = 0; i < this.element.children.length; i++) {\n this.registerChild(this.element.children[i] as HTMLElement, i);\n }\n\n }\n\n private registerChild(element: HTMLElement, index: number) {\n const listeners = [\n this.renderer.listen(element, 'dragstart', this.onDragStart.bind(this)),\n this.renderer.listen(element, 'drop', this.onDragFinish.bind(this)),\n this.renderer.listen(element, 'dragend', this.onDragStop.bind(this))\n ];\n element.draggable = true;\n this.$destroy.subscribe(() => listeners.forEach(cb => cb()));\n this.trackedItems.push({\n item: this.items[index],\n element\n });\n }\n\n mutationDetected(mutations: MutationRecord[]) {\n if (this.pickedUp) {\n return;\n }\n const addedNodes = new Set<HTMLElement>();\n const removedNodes = new Set<HTMLElement>();\n for (let mutation of mutations) {\n mutation.addedNodes.forEach((a: HTMLElement) => {\n if (!removedNodes.delete(a)) {\n addedNodes.add(a);\n }\n });\n mutation.removedNodes.forEach((a: HTMLElement) => {\n if (!addedNodes.delete(a)) {\n removedNodes.add(a);\n }\n });\n }\n addedNodes.forEach(node => {\n const idx = Array.prototype.indexOf.call(this.element.children, node);\n this.registerChild(node, idx);\n });\n if (removedNodes.size > 0) {\n this.trackedItems = this.trackedItems.filter(\n item => !removedNodes.has(item.element));\n }\n }\n\n /** Per-item listeners */\n\n onDragStart(event: DragEvent) {\n if (this.shouldBlockDragStart(event)) {\n event.preventDefault();\n return;\n }\n const dataTransfer = event.dataTransfer;\n // Present a native 'move item' effect\n dataTransfer.effectAllowed = 'move';\n this.pickedUp = event.target as HTMLElement;\n event.stopPropagation();\n this.savedOrder = [...this.trackedItems];\n }\n\n // Equivalent of \"finally\" - this runs whether or not the drag finished on a valid ending location\n onDragStop(event: DragEvent): void {\n this.pickedUp = null;\n this.savedOrder = null;\n event.stopPropagation();\n }\n\n onDragFinish(event: DragEvent): void {\n event.preventDefault();\n event.stopPropagation();\n if (!this.element.contains(event.currentTarget as HTMLElement)) {\n // this is for a different drag region - ignore\n return;\n }\n const draggedItem = this.trackedItems.find(item => item.element === this.pickedUp)?.item;\n this.trackedItems = Array.prototype.map.call(this.element.children, child => {\n const item = this.trackedItems.find(item => item.element === child);\n if (!item) {\n throw new Error('DragDrop: Error - could not reassociate an item post-drag');\n }\n return item;\n });\n this.novoDragDropFinish.emit({\n draggedItem,\n allItems: this.itemsReordered,\n event\n });\n\n }\n\n /** - end per-item listeners */\n\n @HostListener('window:dragover', ['$event'])\n onDragOver(event: DragEvent): void {\n if (!this.pickedUp) {\n return;\n }\n let target = event.target as HTMLElement;\n if (!this.element.contains(target)) {\n target = null;\n }\n // In some cases (maybe browser-specific) we may have this event reported from a sub-element of a drag destination.\n // We need to go upwards in the tree to find the actual target\n if (target && !target.draggable) {\n target = this.findDraggableParentOfElement(target);\n }\n // Check if this drag event is within this drag box\n if (target && target.parentElement === this.element) {\n event.stopPropagation();\n event.preventDefault();\n if (event.dataTransfer) {\n event.dataTransfer.dropEffect = 'move';\n }\n this.applyTempSort(this.pickedUp, target);\n } else {\n // if not within this drag box, then move this item back to its original position and show a diabled drag effect\n if (event.dataTransfer) {\n event.dataTransfer.dropEffect = 'none';\n }\n this.resetSorting();\n }\n }\n\n private findDraggableParentOfElement(target: HTMLElement): HTMLElement | null {\n const parentElement = target.parentElement;\n if (!parentElement) {\n return null;\n } else if (parentElement.draggable) {\n return parentElement;\n } else {\n return this.findDraggableParentOfElement(parentElement);\n }\n }\n\n private applyTempSort(showXElement: HTMLElement, inPlaceOfY: HTMLElement) {\n if (showXElement === inPlaceOfY) {\n // same element - ignoring\n return;\n }\n // Apply the \"preview\" effect from dragging one item to another\n const aIndex = Array.prototype.indexOf.call(this.elementRef.nativeElement.children, showXElement);\n const bIndex = Array.prototype.indexOf.call(this.elementRef.nativeElement.children, inPlaceOfY);\n const diff = bIndex - aIndex;\n let insertPosition: InsertPosition;\n if (diff > 0) {\n insertPosition = 'afterend';\n } else if (diff < 0) {\n insertPosition = 'beforebegin';\n } else {\n throw new Error('DragDrop: Two elements are in the same position');\n }\n inPlaceOfY.insertAdjacentElement(insertPosition, showXElement);\n }\n\n private resetSorting(): void {\n // return to the order of elements from the last time we called onDragPickup\n if (!this.savedOrder) {\n throw new Error('DragDrop: Cannot reset sorting with no saved order');\n }\n const boxElem = this.elementRef.nativeElement as HTMLElement;\n for (let i = 0; i < boxElem.children.length; i++) {\n const item = boxElem.children[i];\n if (this.savedOrder[i].element !== item && i > 0) {\n this.savedOrder[i - 1].element.insertAdjacentElement('afterend', this.savedOrder[i].element);\n }\n }\n }\n\n // If the user has provided classes indicating they only want a certain region to be draggable, ignore\n // this drag event if it is outside of there.\n private shouldBlockDragStart(event: DragEvent): boolean {\n const dragTarget = event.target as HTMLElement;\n // TODO: Allow for multiple drag targets, and drag exclusion targets\n const userDragTarget = dragTarget.querySelector('.novo-drag-target');\n if (userDragTarget) {\n return !this.isElementWithinEventBounds(userDragTarget, event);\n }\n }\n\n public isElementWithinEventBounds(element: Element, event: DragEvent) {\n const rect = element.getBoundingClientRect();\n const isInside = event.clientX > rect.left && event.clientX < rect.right &&\n event.clientY < rect.bottom && event.clientY > rect.top;\n return isInside;\n }\n}\n","import { NgModule } from '@angular/core';\nimport { NovoDragBoxParent } from './drag-drop-box';\n\n\n@NgModule({\n declarations: [NovoDragBoxParent],\n exports: [NovoDragBoxParent]\n})\nexport class NovoDragDropModule {}","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":";;;;MAkBa,iBAAiB,CAAA;AAa1B,IAAA,IAAI,cAAc,GAAA;AACd,QAAA,OAAO,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,CAAC;;IAKnD,WAAoB,CAAA,UAAsB,EAAU,QAAmB,EAAA;QAAnD,IAAU,CAAA,UAAA,GAAV,UAAU;QAAsB,IAAQ,CAAA,QAAA,GAAR,QAAQ;AAd5D,QAAA,IAAA,CAAA,QAAQ,GAAG,IAAI,aAAa,CAAO,CAAC,CAAC;AAI3B,QAAA,IAAA,CAAA,kBAAkB,GAAG,IAAI,YAAY,EAA0B;AAQzE,QAAA,IAAA,CAAA,gBAAgB,GAAG,IAAI,gBAAgB,CAAC,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;;AAIzE,IAAA,IAAI,OAAO,GAAA;AACP,QAAA,OAAO,IAAI,CAAC,UAAU,CAAC,aAAa;;IAGxC,eAAe,GAAA;QACX,IAAI,CAAC,gBAAgB,EAAE;AACvB,QAAA,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC;;IAGpE,WAAW,GAAA;AACP,QAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE;AACpB,QAAA,IAAI,CAAC,QAAQ,CAAC,QAAQ,EAAE;;IAGpB,gBAAgB,GAAA;AACpB,QAAA,IAAI,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,KAAK,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,MAAM,EAAE;AAClE,YAAA,MAAM,IAAI,KAAK,CAAC,kEAAkE,IAAI,CAAC,KAAK,CAAC,MAAM,mBAAmB,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAA,SAAA,CAAW,CAAC;;AAElK,QAAA,IAAI,CAAC,YAAY,GAAG,EAAE;AACtB,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;AACnD,YAAA,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAgB,EAAE,CAAC,CAAC;;;IAK9D,aAAa,CAAC,OAAoB,EAAE,KAAa,EAAA;AACrD,QAAA,MAAM,SAAS,GAAG;AACd,YAAA,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,OAAO,EAAE,WAAW,EAAE,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACvE,YAAA,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACnE,YAAA,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,OAAO,EAAE,SAAS,EAAE,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC;SACtE;AACD,QAAA,OAAO,CAAC,SAAS,GAAG,IAAI;QACxB,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,MAAM,SAAS,CAAC,OAAO,CAAC,EAAE,IAAI,EAAE,EAAE,CAAC,CAAC;AAC5D,QAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC;AACnB,YAAA,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC;YACvB;AACH,SAAA,CAAC;;AAGN,IAAA,gBAAgB,CAAC,SAA2B,EAAA;AACxC,QAAA,IAAI,IAAI,CAAC,QAAQ,EAAE;YACf;;AAEJ,QAAA,MAAM,UAAU,GAAG,IAAI,GAAG,EAAe;AACzC,QAAA,MAAM,YAAY,GAAG,IAAI,GAAG,EAAe;AAC3C,QAAA,KAAK,IAAI,QAAQ,IAAI,SAAS,EAAE;YAC5B,QAAQ,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,CAAc,KAAI;gBAC3C,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE;AACzB,oBAAA,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC;;AAEzB,aAAC,CAAC;YACF,QAAQ,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC,CAAc,KAAI;gBAC7C,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE;AACvB,oBAAA,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC;;AAE3B,aAAC,CAAC;;AAEN,QAAA,UAAU,CAAC,OAAO,CAAC,IAAI,IAAG;AACtB,YAAA,MAAM,GAAG,GAAG,KAAK,CAAC,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,IAAI,CAAC;AACrE,YAAA,IAAI,CAAC,aAAa,CAAC,IAAI,EAAE,GAAG,CAAC;AACjC,SAAC,CAAC;AACF,QAAA,IAAI,YAAY,CAAC,IAAI,GAAG,CAAC,EAAE;YACvB,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,YAAY,CAAC,MAAM,CACxC,IAAI,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;;;;AAMpD,IAAA,WAAW,CAAC,KAAgB,EAAA;AACxB,QAAA,IAAI,IAAI,CAAC,oBAAoB,CAAC,KAAK,CAAC,EAAE;YAClC,KAAK,CAAC,cAAc,EAAE;YACtB;;AAEJ,QAAA,MAAM,YAAY,GAAG,KAAK,CAAC,YAAY;;AAEvC,QAAA,YAAY,CAAC,aAAa,GAAG,MAAM;AACnC,QAAA,IAAI,CAAC,QAAQ,GAAG,KAAK,CAAC,MAAqB;QAC3C,KAAK,CAAC,eAAe,EAAE;QACvB,IAAI,CAAC,UAAU,GAAG,CAAC,GAAG,IAAI,CAAC,YAAY,CAAC;;;AAI5C,IAAA,UAAU,CAAC,KAAgB,EAAA;AACvB,QAAA,IAAI,CAAC,QAAQ,GAAG,IAAI;AACpB,QAAA,IAAI,CAAC,UAAU,GAAG,IAAI;QACtB,KAAK,CAAC,eAAe,EAAE;;AAG3B,IAAA,YAAY,CAAC,KAAgB,EAAA;QACzB,KAAK,CAAC,cAAc,EAAE;QACtB,KAAK,CAAC,eAAe,EAAE;AACvB,QAAA,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC,aAA4B,CAAC,EAAE;;YAE5D;;QAEJ,MAAM,WAAW,GAAG,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,OAAO,KAAK,IAAI,CAAC,QAAQ,CAAC,EAAE,IAAI;AACxF,QAAA,IAAI,CAAC,YAAY,GAAG,KAAK,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,KAAK,IAAG;AACxE,YAAA,MAAM,IAAI,GAAG,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,OAAO,KAAK,KAAK,CAAC;YACnE,IAAI,CAAC,IAAI,EAAE;AACP,gBAAA,MAAM,IAAI,KAAK,CAAC,2DAA2D,CAAC;;AAEhF,YAAA,OAAO,IAAI;AACf,SAAC,CAAC;AACF,QAAA,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC;YACzB,WAAW;YACX,QAAQ,EAAE,IAAI,CAAC,cAAc;YAC7B;AACH,SAAA,CAAC;;;AAON,IAAA,UAAU,CAAC,KAAgB,EAAA;AACvB,QAAA,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE;YAChB;;AAEJ,QAAA,IAAI,MAAM,GAAG,KAAK,CAAC,MAAqB;QACxC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE;YAChC,MAAM,GAAG,IAAI;;;;AAIjB,QAAA,IAAI,MAAM,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE;AAC7B,YAAA,MAAM,GAAG,IAAI,CAAC,4BAA4B,CAAC,MAAM,CAAC;;;QAGtD,IAAI,MAAM,IAAI,MAAM,CAAC,aAAa,KAAK,IAAI,CAAC,OAAO,EAAE;YACjD,KAAK,CAAC,eAAe,EAAE;YACvB,KAAK,CAAC,cAAc,EAAE;AACtB,YAAA,IAAI,KAAK,CAAC,YAAY,EAAE;AACpB,gBAAA,KAAK,CAAC,YAAY,CAAC,UAAU,GAAG,MAAM;;YAE1C,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,QAAQ,EAAE,MAAM,CAAC;;aACtC;;AAEH,YAAA,IAAI,KAAK,CAAC,YAAY,EAAE;AACpB,gBAAA,KAAK,CAAC,YAAY,CAAC,UAAU,GAAG,MAAM;;YAE1C,IAAI,CAAC,YAAY,EAAE;;;AAInB,IAAA,4BAA4B,CAAC,MAAmB,EAAA;AACpD,QAAA,MAAM,aAAa,GAAG,MAAM,CAAC,aAAa;QAC1C,IAAI,CAAC,aAAa,EAAE;AAChB,YAAA,OAAO,IAAI;;AACR,aAAA,IAAI,aAAa,CAAC,SAAS,EAAE;AAChC,YAAA,OAAO,aAAa;;aACjB;AACH,YAAA,OAAO,IAAI,CAAC,4BAA4B,CAAC,aAAa,CAAC;;;IAIvD,aAAa,CAAC,YAAyB,EAAE,UAAuB,EAAA;AACpE,QAAA,IAAI,YAAY,KAAK,UAAU,EAAE;;YAE7B;;;QAGJ,MAAM,MAAM,GAAG,KAAK,CAAC,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,QAAQ,EAAE,YAAY,CAAC;QACjG,MAAM,MAAM,GAAG,KAAK,CAAC,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,QAAQ,EAAE,UAAU,CAAC;AAC/F,QAAA,MAAM,IAAI,GAAG,MAAM,GAAG,MAAM;AAC5B,QAAA,IAAI,cAA8B;AAClC,QAAA,IAAI,IAAI,GAAG,CAAC,EAAE;YACV,cAAc,GAAG,UAAU;;AACxB,aAAA,IAAI,IAAI,GAAG,CAAC,EAAE;YACjB,cAAc,GAAG,aAAa;;aAC3B;AACH,YAAA,MAAM,IAAI,KAAK,CAAC,iDAAiD,CAAC;;AAEtE,QAAA,UAAU,CAAC,qBAAqB,CAAC,cAAc,EAAE,YAAY,CAAC;;IAG1D,YAAY,GAAA;;AAEhB,QAAA,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE;AAClB,YAAA,MAAM,IAAI,KAAK,CAAC,oDAAoD,CAAC;;AAEzE,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,UAAU,CAAC,aAA4B;AAC5D,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;YAC9C,MAAM,IAAI,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC;AAChC,YAAA,IAAI,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,OAAO,KAAK,IAAI,IAAI,CAAC,GAAG,CAAC,EAAE;gBAC9C,IAAI,CAAC,UAAU,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,OAAO,CAAC,qBAAqB,CAAC,UAAU,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC;;;;;;AAOhG,IAAA,oBAAoB,CAAC,KAAgB,EAAA;AACzC,QAAA,MAAM,UAAU,GAAG,KAAK,CAAC,MAAqB;;QAE9C,MAAM,cAAc,GAAG,UAAU,CAAC,aAAa,CAAC,mBAAmB,CAAC;QACpE,IAAI,cAAc,EAAE;YAChB,OAAO,CAAC,IAAI,CAAC,0BAA0B,CAAC,cAAc,EAAE,KAAK,CAAC;;;IAI/D,0BAA0B,CAAC,OAAgB,EAAE,KAAgB,EAAA;AAChE,QAAA,MAAM,IAAI,GAAG,OAAO,CAAC,qBAAqB,EAAE;AAC5C,QAAA,MAAM,QAAQ,GAAG,KAAK,CAAC,OAAO,GAAG,IAAI,CAAC,IAAI,IAAI,KAAK,CAAC,OAAO,GAAG,IAAI,CAAC,KAAK;AACpE,YAAA,KAAK,CAAC,OAAO,GAAG,IAAI,CAAC,MAAM,IAAI,KAAK,CAAC,OAAO,GAAG,IAAI,CAAC,GAAG;AAC3D,QAAA,OAAO,QAAQ;;+GAlOV,iBAAiB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,UAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,SAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;mGAAjB,iBAAiB,EAAA,YAAA,EAAA,KAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,EAAA,KAAA,EAAA,CAAA,cAAA,EAAA,OAAA,CAAA,EAAA,EAAA,OAAA,EAAA,EAAA,kBAAA,EAAA,oBAAA,EAAA,EAAA,IAAA,EAAA,EAAA,SAAA,EAAA,EAAA,iBAAA,EAAA,oBAAA,EAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA,CAAA;;4FAAjB,iBAAiB,EAAA,UAAA,EAAA,CAAA;kBAJ7B,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACP,oBAAA,QAAQ,EAAE,gBAAgB;AAC1B,oBAAA,UAAU,EAAE;AACf,iBAAA;uGAQ0B,KAAK,EAAA,CAAA;sBAA3B,KAAK;uBAAC,cAAc;gBAEX,kBAAkB,EAAA,CAAA;sBAA3B;gBA+HD,UAAU,EAAA,CAAA;sBADT,YAAY;uBAAC,iBAAiB,EAAE,CAAC,QAAQ,CAAC;;;MCjJlC,kBAAkB,CAAA;+GAAlB,kBAAkB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,QAAA,EAAA,CAAA,CAAA;gHAAlB,kBAAkB,EAAA,YAAA,EAAA,CAHZ,iBAAiB,CAAA,EAAA,OAAA,EAAA,CACtB,iBAAiB,CAAA,EAAA,CAAA,CAAA;gHAElB,kBAAkB,EAAA,CAAA,CAAA;;4FAAlB,kBAAkB,EAAA,UAAA,EAAA,CAAA;kBAJ9B,QAAQ;AAAC,YAAA,IAAA,EAAA,CAAA;oBACN,YAAY,EAAE,CAAC,iBAAiB,CAAC;oBACjC,OAAO,EAAE,CAAC,iBAAiB;AAC9B,iBAAA;;;ACPD;;AAEG;;;;"}
|
|
1
|
+
{"version":3,"file":"novo-elements-elements-drag-drop.mjs","sources":["../../../projects/novo-elements/src/elements/drag-drop/drag-drop-box.ts","../../../projects/novo-elements/src/elements/drag-drop/drag-drop.module.ts","../../../projects/novo-elements/src/elements/drag-drop/novo-elements-elements-drag-drop.ts"],"sourcesContent":["import { OverlayContainer } from '@angular/cdk/overlay';\nimport { AfterViewInit, computed, Directive, ElementRef, EventEmitter, HostBinding, HostListener, inject, Input, OnDestroy, Output, Renderer2, signal } from '@angular/core';\nimport { ReplaySubject } from 'rxjs';\n\nexport interface NovoDragFinishEvent<T> {\n draggedItem: T;\n allItems: T[];\n event: DragEvent;\n}\n\ninterface NovoDragItem<T> {\n item: T;\n element: HTMLElement;\n removeListeners: () => void;\n}\n\nconst SCROLL_DRAGGABLE_PADDING_REGION = 30;\nconst SCROLL_DRAGGABLE_EVENT_AMT = 10;\n\n@Directive({\n selector: '[novoDragDrop]',\n standalone: false,\n host: {\n class: 'novo-drag-container',\n '[class.dragging]': '!!pickedUp',\n }\n})\nexport class NovoDragBoxParent<T> implements AfterViewInit, OnDestroy {\n\n pickedUp?: HTMLElement;\n previewReplacing?: HTMLElement;\n savedOrder?: NovoDragItem<T>[];\n\n overlayContainer = inject(OverlayContainer, { optional: true });\n\n @Input('novoDragDrop') items: T[];\n /**\n * A function to specify whether a given item in the child list is draggable.\n * (Note that altering this after setup is not yet supported)\n */\n @Input('novoDragDropFilter') dragFilter?: (item: T) => boolean;\n /**\n * Prevents behavior that eases the act of dragging an object to the edge of a scrollable container. \n */\n @Input('novoDragDropDisableScroll') disableScroll?: boolean;\n\n @Output() novoDragDropFinish = new EventEmitter<NovoDragFinishEvent<T>>();\n\n private trackedItems: NovoDragItem<T>[];\n private scrollContainer = signal<HTMLElement>(null);\n private scrollContainerRect = computed(() => this.scrollContainer()?.getBoundingClientRect());\n private scrollX = signal<boolean>(false);\n private scrollY = signal<boolean>(false);\n\n get itemsReordered(): T[] {\n return this.trackedItems.map(item => item.item);\n }\n\n @HostBinding('class.dragging')\n get dragging() {\n return Boolean(this.pickedUp);\n }\n\n mutationObserver = new MutationObserver(this.mutationDetected.bind(this));\n\n constructor(private elementRef: ElementRef, private renderer: Renderer2) { }\n\n get element(): HTMLElement {\n return this.elementRef.nativeElement;\n }\n\n ngAfterViewInit(): void {\n if (this.items) {\n this.registerChildren();\n this.mutationObserver.observe(this.element, { childList: true });\n }\n // if items is falsey, then no behavior is set up. In future, this component may support late enablement,\n // but for now it's not a priority. (It would open the question of late disablement)\n }\n\n ngOnDestroy(): void {\n this.trackedItems?.forEach(item => {\n item.removeListeners();\n });\n }\n\n private registerChildren(): void {\n if (this.items) {\n if (this.items.length !== this.element.children.length) {\n throw new Error(`Could not match item list to children list - drag box contains ${this.items.length} items, but has ${this.element.children.length} elements`);\n }\n this.trackedItems = [];\n for (let i = 0; i < this.element.children.length; i++) {\n this.registerChild(this.element.children[i] as HTMLElement, i);\n }\n }\n }\n\n private registerChild(element: HTMLElement, index: number) {\n const trackedItem: Partial<NovoDragItem<T>> = {\n item: this.items[index],\n element\n };\n if (this.dragFilter && !this.dragFilter(this.items[index])) {\n element.draggable = false;\n trackedItem.removeListeners = () => {};\n } else {\n const listeners = [\n this.renderer.listen(element, 'dragstart', this.onDragStart.bind(this)),\n this.renderer.listen(element, 'drop', this.onDragFinish.bind(this)),\n this.renderer.listen(element, 'dragend', this.onDragStop.bind(this))\n ];\n element.draggable = true;\n trackedItem.removeListeners = () => listeners.forEach(cb => cb());\n }\n this.trackedItems.push(trackedItem as NovoDragItem<T>);\n }\n\n mutationDetected(mutations: MutationRecord[]) {\n if (this.pickedUp) {\n return;\n }\n const addedNodes = new Set<HTMLElement>();\n const removedNodes = new Set<HTMLElement>();\n for (let mutation of mutations) {\n mutation.addedNodes.forEach((a: HTMLElement) => {\n if (!removedNodes.delete(a)) {\n addedNodes.add(a);\n }\n });\n mutation.removedNodes.forEach((a: HTMLElement) => {\n if (!addedNodes.delete(a)) {\n removedNodes.add(a);\n }\n });\n }\n addedNodes.forEach(node => {\n const idx = Array.prototype.indexOf.call(this.element.children, node);\n this.registerChild(node, idx);\n });\n if (removedNodes.size > 0) {\n this.trackedItems = this.trackedItems.filter(\n item => {\n const keep = !removedNodes.has(item.element);\n if (!keep) {\n item.removeListeners();\n }\n return keep;\n });\n }\n }\n\n /** Per-item listeners */\n\n onDragStart(event: DragEvent) {\n if (this.shouldBlockDragStart(event)) {\n event.preventDefault();\n return;\n }\n const dataTransfer = event.dataTransfer;\n // Present a native 'move item' effect\n dataTransfer.effectAllowed = 'move';\n if (!this.disableScroll) {\n this.scrollContainer.set(this.findScrollableParent());\n }\n\n this.pickedUp = event.target as HTMLElement;\n event.stopPropagation();\n this.savedOrder = [...this.trackedItems];\n }\n\n // Equivalent of \"finally\" - this runs whether or not the drag finished on a valid ending location\n onDragStop(event: DragEvent): void {\n this.pickedUp = null;\n this.previewReplacing = null;\n this.savedOrder = null;\n event.stopPropagation();\n }\n\n onDragFinish(event: DragEvent): void {\n event.preventDefault();\n event.stopPropagation();\n if (!this.element.contains(event.currentTarget as HTMLElement)) {\n // this is for a different drag region - ignore\n return;\n }\n const draggedItem = this.trackedItems.find(item => item.element === this.pickedUp)?.item;\n this.trackedItems = Array.prototype.map.call(this.element.children, child => {\n const item = this.trackedItems.find(item => item.element === child);\n if (!item) {\n throw new Error('DragDrop: Error - could not reassociate an item post-drag');\n }\n return item;\n });\n this.novoDragDropFinish.emit({\n draggedItem,\n allItems: this.itemsReordered,\n event\n });\n\n }\n\n /** - end per-item listeners */\n\n @HostListener('window:dragover', ['$event'])\n onDragOver(event: DragEvent): void {\n if (!this.pickedUp || this.inOverlay(event)) {\n return;\n }\n let target = event.target as HTMLElement;\n if (!this.element.contains(target)) {\n target = null;\n }\n // In some cases (maybe browser-specific) we may have this event reported from a sub-element of a drag destination.\n // We need to go upwards in the tree to find the actual target\n if (target && !target.draggable) {\n target = this.findDraggableParentOfElement(target);\n }\n // Check if this drag event is within this drag box\n if (target && target.parentElement === this.element) {\n event.stopPropagation();\n event.preventDefault();\n if (event.dataTransfer) {\n event.dataTransfer.dropEffect = 'move';\n }\n if (this.previewReplacing !== target) {\n if (this.isValidTarget(target)) {\n this.previewReplacing = target;\n this.applyTempSort(this.pickedUp, target);\n } else {\n event.dataTransfer.dropEffect = 'none';\n }\n }\n } else {\n // if not within this drag box, then move this item back to its original position and show a diabled drag effect\n if (event.dataTransfer) {\n event.dataTransfer.dropEffect = 'none';\n }\n this.resetSorting();\n }\n if (!this.disableScroll) {\n this.processScrollDuringMove(event);\n }\n }\n\n private inOverlay(event: DragEvent): boolean {\n // Make sure a drag event is not looking at a tooltip or similar.\n // Return false if the dragbox itself is in an overlay - these scenarios will be harder to account for.\n const overlayElement = this.overlayContainer?.getContainerElement();\n return overlayElement && (overlayElement.contains(event.target as Node) && !overlayElement.contains(this.element));\n }\n\n private isValidTarget(target: HTMLElement): boolean {\n return target.draggable;\n }\n\n private findDraggableParentOfElement(target: HTMLElement): HTMLElement | null {\n const parentElement = target.parentElement;\n if (!parentElement) {\n return null;\n } else if (parentElement.draggable) {\n return parentElement;\n } else {\n return this.findDraggableParentOfElement(parentElement);\n }\n }\n\n private applyTempSort(showXElement: HTMLElement, inPlaceOfY: HTMLElement) {\n if (showXElement === inPlaceOfY) {\n // same element - ignoring\n return;\n }\n // Apply the \"preview\" effect from dragging one item to another\n const aIndex = Array.prototype.indexOf.call(this.elementRef.nativeElement.children, showXElement);\n const bIndex = Array.prototype.indexOf.call(this.elementRef.nativeElement.children, inPlaceOfY);\n const diff = bIndex - aIndex;\n let insertPosition: InsertPosition;\n if (diff > 0) {\n insertPosition = 'afterend';\n } else if (diff < 0) {\n insertPosition = 'beforebegin';\n } else {\n throw new Error('DragDrop: Two elements are in the same position');\n }\n inPlaceOfY.insertAdjacentElement(insertPosition, showXElement);\n }\n\n private resetSorting(): void {\n // return to the order of elements from the last time we called onDragPickup\n if (!this.savedOrder) {\n throw new Error('DragDrop: Cannot reset sorting with no saved order');\n }\n const boxElem = this.elementRef.nativeElement as HTMLElement;\n for (let i = 0; i < boxElem.children.length; i++) {\n const item = boxElem.children[i];\n if (this.savedOrder[i].element !== item && i > 0) {\n this.savedOrder[i - 1].element.insertAdjacentElement('afterend', this.savedOrder[i].element);\n }\n }\n }\n\n // If the user has provided classes indicating they only want a certain region to be draggable, ignore\n // this drag event if it is outside of there.\n private shouldBlockDragStart(event: DragEvent): boolean {\n const dragTarget = event.target as HTMLElement;\n // TODO: Allow for multiple drag targets, and drag exclusion targets\n const userDragTarget = dragTarget.querySelector('.novo-drag-target');\n if (userDragTarget) {\n return !this.isElementWithinEventBounds(userDragTarget, event);\n }\n }\n\n private processScrollDuringMove(event: DragEvent) {\n const scrollElement = this.scrollContainer();\n if (!scrollElement) {\n return;\n }\n const rect = this.scrollContainerRect();\n if (this.scrollX()) {\n if (event.x > rect.left && event.x < rect.left + SCROLL_DRAGGABLE_PADDING_REGION) {\n scrollElement.scrollLeft -= 10;\n } else if (event.x < rect.right && event.x > rect.right - SCROLL_DRAGGABLE_PADDING_REGION) {\n scrollElement.scrollLeft += 10;\n }\n }\n if (this.scrollY()) {\n if (event.y > rect.top && event.y < rect.top + SCROLL_DRAGGABLE_PADDING_REGION) {\n scrollElement.scrollTop -= 10;\n } else if (event.y < rect.bottom && event.y > rect.bottom - SCROLL_DRAGGABLE_PADDING_REGION) {\n scrollElement.scrollTop += 10;\n }\n }\n }\n\n public isElementWithinEventBounds(element: Element, event: DragEvent) {\n const rect = element.getBoundingClientRect();\n const isInside = event.clientX > rect.left && event.clientX < rect.right &&\n event.clientY < rect.bottom && event.clientY > rect.top;\n return isInside;\n }\n\n private findScrollableParent(): HTMLElement | null {\n let currentElement = this.element.parentElement;\n this.scrollX.set(false);\n this.scrollY.set(false);\n \n while (currentElement) {\n const hasVerticalScroll = currentElement.scrollHeight > currentElement.clientHeight;\n const hasHorizontalScroll = currentElement.scrollWidth > currentElement.clientWidth;\n const isScrollable = hasVerticalScroll || hasHorizontalScroll;\n \n if (isScrollable) {\n const computedStyle = window.getComputedStyle(currentElement);\n const overflowY = computedStyle.overflowY;\n const overflowX = computedStyle.overflowX;\n \n // Check if overflow is set to allow scrolling\n if ((overflowY === 'auto' || overflowY === 'scroll') || \n (overflowX === 'auto' || overflowX === 'scroll')) {\n // Verify the scrollable parent is smaller than the drag container\n if (currentElement.clientHeight < this.element.clientHeight) {\n this.scrollY.set(true);\n }\n if (currentElement.clientWidth < this.element.clientWidth) {\n this.scrollX.set(true);\n }\n if (this.scrollX() || this.scrollY()) {\n return currentElement;\n }\n }\n }\n \n currentElement = currentElement.parentElement;\n }\n \n return null;\n }\n\n}\n","import { NgModule } from '@angular/core';\nimport { NovoDragBoxParent } from './drag-drop-box';\n\n\n@NgModule({\n declarations: [NovoDragBoxParent],\n exports: [NovoDragBoxParent]\n})\nexport class NovoDragDropModule {}","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
|
|
@@ -126,14 +126,7 @@ class NovoDropdownElement extends NovoDropdownMixins {
|
|
|
126
126
|
return option.selected === true;
|
|
127
127
|
});
|
|
128
128
|
}
|
|
129
|
-
set items(items) {
|
|
130
|
-
// this._items = items;
|
|
131
|
-
// this.activeIndex = -1;
|
|
132
|
-
// // Get the innerText of all the items to allow for searching
|
|
133
|
-
// this._textItems = items.map((item: NovoItemElement) => {
|
|
134
|
-
// return item.element.nativeElement.innerText;
|
|
135
|
-
// });
|
|
136
|
-
}
|
|
129
|
+
set items(items) { }
|
|
137
130
|
/** Handles all keydown events on the dropdown. */
|
|
138
131
|
_handleKeydown(event) {
|
|
139
132
|
if (!this.disabled) {
|
|
@@ -198,7 +191,6 @@ class NovoDropdownElement extends NovoDropdownMixins {
|
|
|
198
191
|
const selectionEvents = this.options ? merge(...this.options.map((option) => option.onSelectionChange)) : of();
|
|
199
192
|
this._selectedOptionChanges.unsubscribe();
|
|
200
193
|
this._selectedOptionChanges = selectionEvents.pipe(takeUntil(this._onDestroy)).subscribe((event) => {
|
|
201
|
-
// this.handleSelection(event.source, event.isUserInput);
|
|
202
194
|
if (event.isUserInput && !this.multiple) {
|
|
203
195
|
this._clearPreviousSelectedOption(this._keyManager.activeItem);
|
|
204
196
|
event.source.select();
|
|
@@ -225,7 +217,6 @@ class NovoDropdownElement extends NovoDropdownMixins {
|
|
|
225
217
|
/** Sets up a key manager to listen to keyboard events on the overlay panel. */
|
|
226
218
|
_initKeyManager() {
|
|
227
219
|
this._keyManager = new ActiveDescendantKeyManager(this.options).withTypeAhead(250).withHomeAndEnd();
|
|
228
|
-
// .withAllowedModifierKeys(['shiftKey']);
|
|
229
220
|
this._keyManager.tabOut.pipe(takeUntil(this._onDestroy)).subscribe(() => {
|
|
230
221
|
if (this.panelOpen) {
|
|
231
222
|
// Restore focus to the trigger before closing. Ensures that the focus
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"novo-elements-elements-dropdown.mjs","sources":["../../../projects/novo-elements/src/elements/dropdown/Dropdown.ts","../../../projects/novo-elements/src/elements/dropdown/Dropdown.module.ts","../../../projects/novo-elements/src/elements/dropdown/novo-elements-elements-dropdown.ts"],"sourcesContent":["// NG2\nimport { ActiveDescendantKeyManager } from '@angular/cdk/a11y';\nimport { coerceBooleanProperty } from '@angular/cdk/coercion';\nimport { hasModifierKey } from '@angular/cdk/keycodes';\nimport {\n AfterContentInit,\n AfterViewInit,\n ChangeDetectorRef,\n Component,\n ContentChild,\n ContentChildren,\n Directive,\n ElementRef,\n EventEmitter,\n HostListener,\n Input,\n OnDestroy,\n OnInit,\n Output,\n QueryList,\n ViewChild,\n} from '@angular/core';\n// Vendor\nimport { merge, of, Subject, Subscription } from 'rxjs';\nimport { takeUntil } from 'rxjs/operators';\n// App\nimport { NovoButtonElement } from 'novo-elements/elements/button';\nimport {\n CanDisableCtor,\n HasOverlayCtor,\n HasTabIndexCtor,\n mixinDisabled,\n mixinOverlay,\n mixinTabIndex,\n NovoOptgroup,\n NovoOption,\n NovoOptionSelectionChange,\n NovoOverlayTemplateComponent,\n _countGroupLabelsBeforeOption,\n _getOptionScrollPosition,\n} from 'novo-elements/elements/common';\nimport { BooleanInput, Key, notify } from 'novo-elements/utils';\n\n@Directive({\n selector: '[dropdownTrigger]',\n host: {\n class: 'novo-dropdown-trigger',\n },\n standalone: false\n})\nexport class NovoDropDownTrigger {\n constructor(public element: ElementRef) {}\n}\n\n// Create Base Class from Mixins\n// Boilerplate for applying mixins\nclass NovoDropdownBase {\n constructor() {}\n}\nconst NovoDropdownMixins: HasOverlayCtor & CanDisableCtor & HasTabIndexCtor & typeof NovoDropdownBase = mixinOverlay(\n mixinTabIndex(mixinDisabled(NovoDropdownBase), 1),\n);\n\n@Component({\n selector: 'novo-dropdown',\n template: `\n <ng-content select=\"button,novo-button,[dropdownTrigger]\" #trigger></ng-content>\n <novo-overlay-template [parent]=\"element\" [width]=\"width\" [position]=\"side\" [scrollStrategy]=\"scrollStrategy\">\n <div #panel class=\"dropdown-container {{ containerClass }}\" [style.max-height.px]=\"height\" [class.has-height]=\"!!height\">\n <ng-content></ng-content>\n </div>\n </novo-overlay-template>\n `,\n styleUrls: ['./Dropdown.scss'],\n host: {\n '[attr.tabIndex]': 'disabled ? -1 : 0',\n },\n standalone: false\n})\nexport class NovoDropdownElement extends NovoDropdownMixins implements OnInit, AfterContentInit, AfterViewInit, OnDestroy {\n @Input()\n parentScrollSelector: string;\n @Input()\n parentScrollAction: string = 'close';\n @Input()\n containerClass: string;\n @Input()\n side:\n | 'default'\n | 'right'\n | 'above-below'\n | 'right-above-below'\n | 'center'\n | 'bottom'\n | 'bottom-left'\n | 'bottom-right'\n | 'top-left'\n | 'top-right' = 'default';\n @Input()\n scrollStrategy: 'reposition' | 'block' | 'close' = 'reposition';\n\n /**\n * Keep dropdown open after an item is selected\n */\n @Input()\n @BooleanInput()\n keepOpen: boolean = false;\n\n @Input()\n height: number;\n @Input()\n width: number = -1; // Defaults to dynamic width (no hardcoded width value and no host width lookup)\n @Input()\n appendToBody: boolean = false; // Deprecated\n @Output()\n toggled: EventEmitter<boolean> = new EventEmitter<boolean>();\n\n @ViewChild(NovoOverlayTemplateComponent)\n overlay: NovoOverlayTemplateComponent;\n\n @ContentChild(NovoButtonElement)\n _button: NovoButtonElement;\n @ContentChild(NovoDropDownTrigger)\n _trigger: NovoDropDownTrigger;\n\n @ContentChildren(NovoOptgroup, { descendants: true })\n optionGroups: QueryList<NovoOptgroup>;\n @ContentChildren(NovoOption, { descendants: true })\n options: QueryList<NovoOption>;\n @ViewChild('panel')\n panel: ElementRef;\n\n private clickHandler: any;\n private closeHandler: any;\n private _selectedOptionChanges = Subscription.EMPTY;\n /** The Subject to complete all subscriptions when destroyed. */\n private _onDestroy: Subject<void> = new Subject();\n /** The FocusKeyManager which handles focus. */\n private _keyManager: ActiveDescendantKeyManager<NovoOption>;\n\n /** Whether the user should be allowed to select multiple options. */\n @Input()\n get multiple(): boolean {\n return this._multiple;\n }\n set multiple(value: boolean) {\n this._multiple = coerceBooleanProperty(value);\n }\n private _multiple: boolean = false;\n\n /** Whether the dropdown should scroll to the active item whenever it is opened. */\n @Input()\n get scrollToActiveItemOnOpen(): boolean {\n return this._scrollToActiveItemOnOpen;\n }\n set scrollToActiveItemOnOpen(value: boolean) {\n this._scrollToActiveItemOnOpen = coerceBooleanProperty(value);\n }\n private _scrollToActiveItemOnOpen: boolean = false;\n\n get button() {\n return this._trigger || this._button;\n }\n\n constructor(public element: ElementRef, private ref: ChangeDetectorRef) {\n super();\n this.clickHandler = this.togglePanel.bind(this);\n this.closeHandler = this.closePanel.bind(this);\n }\n\n public ngOnInit(): void {\n if (this.appendToBody) {\n notify(`'appendToBody' has been deprecated. Please remove this attribute.`);\n }\n }\n\n public ngAfterContentInit(): void {\n // Add a click handler to the button to toggle the menu\n this.button.element.nativeElement.addEventListener('click', this.clickHandler);\n this.button.element.nativeElement.tabIndex = -1;\n this.options.changes.pipe(takeUntil(this._onDestroy)).subscribe(() => {\n this._initKeyManager();\n this._watchSelectionEvents();\n });\n this._initKeyManager();\n this._watchSelectionEvents();\n this.focus();\n }\n\n public ngAfterViewInit(): void {\n this._watchPanelEvents();\n }\n\n public ngOnDestroy(): void {\n this._onDestroy.next();\n this._onDestroy.complete();\n // Remove listener\n if (this.button) {\n this.button.element.nativeElement.removeEventListener('click', this.clickHandler);\n }\n }\n\n focus(options?: FocusOptions): void {\n if (!this.disabled) {\n this.element.nativeElement.focus(options);\n }\n }\n\n openPanel(): void {\n super.openPanel()\n if (this.scrollToActiveItemOnOpen) {\n this._scrollOptionIntoView(this.findFirstSelectedOptionIndex(this.options) || 0)\n }\n }\n\n private findFirstSelectedOptionIndex(options: QueryList<NovoOption>): number | null {\n return options.toArray().findIndex((option: NovoOption) => {\n return option.selected === true;\n });\n }\n\n\n public set items(items: QueryList<NovoItemElement>) {\n // this._items = items;\n // this.activeIndex = -1;\n // // Get the innerText of all the items to allow for searching\n // this._textItems = items.map((item: NovoItemElement) => {\n // return item.element.nativeElement.innerText;\n // });\n }\n\n /** Handles all keydown events on the dropdown. */\n @HostListener('keydown', ['$event'])\n _handleKeydown(event: KeyboardEvent): void {\n if (!this.disabled) {\n this.panelOpen ? this._handleOpenKeydown(event) : this._handleClosedKeydown(event);\n }\n }\n\n /** Handles keyboard events while the dropdown is closed. */\n private _handleClosedKeydown(event: KeyboardEvent): void {\n const key = event.key;\n const isArrowKey = key === Key.ArrowDown || key === Key.ArrowUp || key === Key.ArrowLeft || key === Key.ArrowRight;\n const isOpenKey = key === Key.Enter || key === Key.Space;\n const manager = this._keyManager;\n // Open the select on ALT + arrow key to match the native <select>\n if ((!manager.isTyping() && isOpenKey && !hasModifierKey(event)) || ((this.multiple || event.altKey) && isArrowKey)) {\n event.preventDefault(); // prevents the page from scrolling down when pressing space\n this.openPanel();\n }\n }\n\n /** Handles keyboard events when the dropdown is open. */\n private _handleOpenKeydown(event: KeyboardEvent): void {\n const manager = this._keyManager;\n const key = event.key;\n const isArrowKey = key === Key.ArrowDown || key === Key.ArrowUp;\n const isTyping = manager.isTyping();\n const isInputField = event.target;\n if (isArrowKey && event.altKey) {\n // Close the dropdown on ALT + arrow key to match the native <select>\n event.preventDefault();\n this.closePanel();\n // Don't do anything in this case if the user is typing,\n // because the typing sequence can include the space key.\n } else if (!isTyping && (key === Key.Enter || key === Key.Space) && manager.activeItem && !hasModifierKey(event)) {\n event.preventDefault();\n this._multiple ? manager.activeItem._selectViaInteraction() : manager.activeItem._clickViaInteraction();\n } else if (!isTyping && this._multiple && ['a', 'A'].includes(key) && event.ctrlKey) {\n event.preventDefault();\n const hasDeselectedOptions = this.options.some((opt) => !opt.disabled && !opt.selected);\n this.options.forEach((option) => {\n if (!option.disabled) {\n hasDeselectedOptions ? option.select() : option.deselect();\n }\n });\n } else if (Key.Escape === key) {\n this.closePanel();\n } else {\n const previouslyFocusedIndex = manager.activeItemIndex;\n manager.onKeydown(event);\n if (this._multiple && isArrowKey && event.shiftKey && manager.activeItem && manager.activeItemIndex !== previouslyFocusedIndex) {\n manager.activeItem._selectViaInteraction();\n }\n }\n }\n\n private _watchPanelEvents() {\n const panelStateChanges = merge(this.overlay.opening, this.overlay.closing);\n panelStateChanges.pipe(takeUntil(this._onDestroy)).subscribe((event: boolean) => this.toggled.emit(event));\n }\n\n private _watchSelectionEvents() {\n const selectionEvents = this.options ? merge(...this.options.map((option) => option.onSelectionChange)) : of();\n this._selectedOptionChanges.unsubscribe();\n this._selectedOptionChanges = selectionEvents.pipe(takeUntil(this._onDestroy)).subscribe((event: NovoOptionSelectionChange) => {\n // this.handleSelection(event.source, event.isUserInput);\n if (event.isUserInput && !this.multiple) {\n this._clearPreviousSelectedOption(this._keyManager.activeItem);\n event.source.select();\n if (!this.keepOpen && this.panelOpen) {\n this.closePanel();\n this.focus();\n }\n } else {\n event.source.select();\n }\n });\n }\n /**\n * Clear any previous selected option and emit a selection change event for this option\n */\n private _clearPreviousSelectedOption(skip: NovoOption) {\n this.options.forEach((option) => {\n if (option !== skip && option.selected) {\n option.deselect();\n }\n });\n }\n\n /** Sets up a key manager to listen to keyboard events on the overlay panel. */\n private _initKeyManager() {\n this._keyManager = new ActiveDescendantKeyManager<NovoOption>(this.options).withTypeAhead(250).withHomeAndEnd();\n // .withAllowedModifierKeys(['shiftKey']);\n\n this._keyManager.tabOut.pipe(takeUntil(this._onDestroy)).subscribe(() => {\n if (this.panelOpen) {\n // Restore focus to the trigger before closing. Ensures that the focus\n // position won't be lost if the user got focus into the overlay.\n this.focus();\n this.closePanel();\n }\n });\n\n this._keyManager.change.pipe(takeUntil(this._onDestroy)).subscribe(() => {\n if (this.panelOpen && this.overlay) {\n this._scrollOptionIntoView(this._keyManager.activeItemIndex || 0);\n }\n });\n }\n\n /** Scrolls the active option into view. */\n protected _scrollOptionIntoView(index: number): void {\n const labelCount = _countGroupLabelsBeforeOption(index, this.options, this.optionGroups);\n const itemHeight = this._getItemHeight();\n this.panel.nativeElement.scrollTop = _getOptionScrollPosition(\n (index + labelCount) * itemHeight,\n itemHeight,\n this.panel.nativeElement.scrollTop,\n this.panel.nativeElement.offsetHeight,\n );\n }\n\n /** Calculates the height of the select's options. */\n private _getItemHeight(): number {\n let [first] = this.options;\n if (first) {\n return first._getHostElement().offsetHeight;\n }\n return 0;\n }\n}\n\n// Deprecated below here ---------------------------\n\n@Component({\n selector: 'item',\n template: '<novo-option><ng-content></ng-content></novo-option>',\n host: {\n '[class.disabled]': 'disabled',\n '[class.active]': 'active',\n },\n standalone: false\n})\nexport class NovoItemElement {\n @Input()\n public disabled: boolean;\n @Input()\n public keepOpen: boolean = false;\n @Output()\n public action: EventEmitter<any> = new EventEmitter();\n\n public active: boolean = false;\n\n constructor(private dropdown: NovoDropdownElement, public element: ElementRef) {\n notify(`'item' element has been deprecated. Please use 'novo-option' and 'novo-optgroup'.`);\n }\n\n @HostListener('click', ['$event'])\n public onClick(event: Event): void {\n // Poor man's disable\n if (!this.disabled) {\n // Close if keepOpen is false\n if (!this.keepOpen) {\n this.dropdown.closePanel();\n }\n // Emit the action\n this.action.emit({ originalEvent: event });\n }\n }\n}\n\n@Component({\n selector: 'list',\n template: '<ng-content></ng-content>',\n standalone: false\n})\nexport class NovoDropdownListElement implements AfterContentInit {\n @ContentChildren(NovoItemElement)\n public items: QueryList<NovoItemElement>;\n\n constructor(private dropdown: NovoDropdownElement) {\n notify(`'list' element has been deprecated. Please use novo-option and novo-optgroup.`);\n }\n\n public ngAfterContentInit(): void {\n this.dropdown.items = this.items;\n this.items.changes.subscribe(() => {\n this.dropdown.items = this.items;\n });\n }\n}\n\n@Component({\n selector: 'dropdown-item-header',\n template: '<ng-content></ng-content>',\n standalone: false\n})\nexport class NovoDropDownItemHeaderElement {\n constructor() {\n notify(`'dropdown-item-header' element has been deprecated. Please use novo-option and novo-optgroup.`);\n }\n}\n","// NG2\nimport { NgModule } from '@angular/core';\nimport { NovoOptionModule, NovoOverlayModule } from 'novo-elements/elements/common';\n// APP\nimport {\n NovoDropdownElement,\n NovoDropDownItemHeaderElement,\n NovoDropdownListElement,\n NovoDropDownTrigger,\n NovoItemElement,\n} from './Dropdown';\n\n@NgModule({\n imports: [NovoOverlayModule, NovoOptionModule],\n declarations: [NovoDropdownElement, NovoItemElement, NovoDropdownListElement, NovoDropDownItemHeaderElement, NovoDropDownTrigger],\n exports: [NovoDropdownElement, NovoItemElement, NovoDropdownListElement, NovoDropDownItemHeaderElement, NovoDropDownTrigger],\n})\nexport class NovoDropdownModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"novo-elements-elements-dropdown.mjs","sources":["../../../projects/novo-elements/src/elements/dropdown/Dropdown.ts","../../../projects/novo-elements/src/elements/dropdown/Dropdown.module.ts","../../../projects/novo-elements/src/elements/dropdown/novo-elements-elements-dropdown.ts"],"sourcesContent":["// NG2\nimport { ActiveDescendantKeyManager } from '@angular/cdk/a11y';\nimport { coerceBooleanProperty } from '@angular/cdk/coercion';\nimport { hasModifierKey } from '@angular/cdk/keycodes';\nimport {\n AfterContentInit,\n AfterViewInit,\n ChangeDetectorRef,\n Component,\n ContentChild,\n ContentChildren,\n Directive,\n ElementRef,\n EventEmitter,\n HostListener,\n Input,\n OnDestroy,\n OnInit,\n Output,\n QueryList,\n ViewChild,\n} from '@angular/core';\n// Vendor\nimport { merge, of, Subject, Subscription } from 'rxjs';\nimport { takeUntil } from 'rxjs/operators';\n// App\nimport { NovoButtonElement } from 'novo-elements/elements/button';\nimport {\n CanDisableCtor,\n HasOverlayCtor,\n HasTabIndexCtor,\n mixinDisabled,\n mixinOverlay,\n mixinTabIndex,\n NovoOptgroup,\n NovoOption,\n NovoOptionSelectionChange,\n NovoOverlayTemplateComponent,\n _countGroupLabelsBeforeOption,\n _getOptionScrollPosition,\n} from 'novo-elements/elements/common';\nimport { BooleanInput, Key, notify } from 'novo-elements/utils';\n\n@Directive({\n selector: '[dropdownTrigger]',\n host: {\n class: 'novo-dropdown-trigger',\n },\n standalone: false\n})\nexport class NovoDropDownTrigger {\n constructor(public element: ElementRef) {}\n}\n\n// Create Base Class from Mixins\n// Boilerplate for applying mixins\nclass NovoDropdownBase {\n constructor() {}\n}\nconst NovoDropdownMixins: HasOverlayCtor & CanDisableCtor & HasTabIndexCtor & typeof NovoDropdownBase = mixinOverlay(\n mixinTabIndex(mixinDisabled(NovoDropdownBase), 1),\n);\n\n@Component({\n selector: 'novo-dropdown',\n template: `\n <ng-content select=\"button,novo-button,[dropdownTrigger]\" #trigger></ng-content>\n <novo-overlay-template [parent]=\"element\" [width]=\"width\" [position]=\"side\" [scrollStrategy]=\"scrollStrategy\">\n <div #panel class=\"dropdown-container {{ containerClass }}\" [style.max-height.px]=\"height\" [class.has-height]=\"!!height\">\n <ng-content></ng-content>\n </div>\n </novo-overlay-template>\n `,\n styleUrls: ['./Dropdown.scss'],\n host: {\n '[attr.tabIndex]': 'disabled ? -1 : 0',\n },\n standalone: false\n})\nexport class NovoDropdownElement extends NovoDropdownMixins implements OnInit, AfterContentInit, AfterViewInit, OnDestroy {\n @Input()\n parentScrollSelector: string;\n @Input()\n parentScrollAction: string = 'close';\n @Input()\n containerClass: string;\n @Input()\n side:\n | 'default'\n | 'right'\n | 'above-below'\n | 'right-above-below'\n | 'center'\n | 'bottom'\n | 'bottom-left'\n | 'bottom-right'\n | 'top-left'\n | 'top-right' = 'default';\n @Input()\n scrollStrategy: 'reposition' | 'block' | 'close' = 'reposition';\n\n /**\n * Keep dropdown open after an item is selected\n */\n @Input()\n @BooleanInput()\n keepOpen: boolean = false;\n\n @Input()\n height: number;\n @Input()\n width: number = -1; // Defaults to dynamic width (no hardcoded width value and no host width lookup)\n @Input()\n appendToBody: boolean = false; // Deprecated\n @Output()\n toggled: EventEmitter<boolean> = new EventEmitter<boolean>();\n\n @ViewChild(NovoOverlayTemplateComponent)\n overlay: NovoOverlayTemplateComponent;\n\n @ContentChild(NovoButtonElement)\n _button: NovoButtonElement;\n @ContentChild(NovoDropDownTrigger)\n _trigger: NovoDropDownTrigger;\n\n @ContentChildren(NovoOptgroup, { descendants: true })\n optionGroups: QueryList<NovoOptgroup>;\n @ContentChildren(NovoOption, { descendants: true })\n options: QueryList<NovoOption>;\n @ViewChild('panel')\n panel: ElementRef;\n\n private clickHandler: any;\n private closeHandler: any;\n private _selectedOptionChanges = Subscription.EMPTY;\n /** The Subject to complete all subscriptions when destroyed. */\n private _onDestroy: Subject<void> = new Subject();\n /** The FocusKeyManager which handles focus. */\n private _keyManager: ActiveDescendantKeyManager<NovoOption>;\n\n /** Whether the user should be allowed to select multiple options. */\n @Input()\n get multiple(): boolean {\n return this._multiple;\n }\n set multiple(value: boolean) {\n this._multiple = coerceBooleanProperty(value);\n }\n private _multiple: boolean = false;\n\n /** Whether the dropdown should scroll to the active item whenever it is opened. */\n @Input()\n get scrollToActiveItemOnOpen(): boolean {\n return this._scrollToActiveItemOnOpen;\n }\n set scrollToActiveItemOnOpen(value: boolean) {\n this._scrollToActiveItemOnOpen = coerceBooleanProperty(value);\n }\n private _scrollToActiveItemOnOpen: boolean = false;\n\n get button() {\n return this._trigger || this._button;\n }\n\n constructor(public element: ElementRef, private ref: ChangeDetectorRef) {\n super();\n this.clickHandler = this.togglePanel.bind(this);\n this.closeHandler = this.closePanel.bind(this);\n }\n\n public ngOnInit(): void {\n if (this.appendToBody) {\n notify(`'appendToBody' has been deprecated. Please remove this attribute.`);\n }\n }\n\n public ngAfterContentInit(): void {\n // Add a click handler to the button to toggle the menu\n this.button.element.nativeElement.addEventListener('click', this.clickHandler);\n this.button.element.nativeElement.tabIndex = -1;\n this.options.changes.pipe(takeUntil(this._onDestroy)).subscribe(() => {\n this._initKeyManager();\n this._watchSelectionEvents();\n });\n this._initKeyManager();\n this._watchSelectionEvents();\n this.focus();\n }\n\n public ngAfterViewInit(): void {\n this._watchPanelEvents();\n }\n\n public ngOnDestroy(): void {\n this._onDestroy.next();\n this._onDestroy.complete();\n // Remove listener\n if (this.button) {\n this.button.element.nativeElement.removeEventListener('click', this.clickHandler);\n }\n }\n\n focus(options?: FocusOptions): void {\n if (!this.disabled) {\n this.element.nativeElement.focus(options);\n }\n }\n\n openPanel(): void {\n super.openPanel()\n if (this.scrollToActiveItemOnOpen) {\n this._scrollOptionIntoView(this.findFirstSelectedOptionIndex(this.options) || 0)\n }\n }\n\n private findFirstSelectedOptionIndex(options: QueryList<NovoOption>): number | null {\n return options.toArray().findIndex((option: NovoOption) => {\n return option.selected === true;\n });\n }\n\n\n public set items(items: QueryList<NovoItemElement>) {}\n\n /** Handles all keydown events on the dropdown. */\n @HostListener('keydown', ['$event'])\n _handleKeydown(event: KeyboardEvent): void {\n if (!this.disabled) {\n this.panelOpen ? this._handleOpenKeydown(event) : this._handleClosedKeydown(event);\n }\n }\n\n /** Handles keyboard events while the dropdown is closed. */\n private _handleClosedKeydown(event: KeyboardEvent): void {\n const key = event.key;\n const isArrowKey = key === Key.ArrowDown || key === Key.ArrowUp || key === Key.ArrowLeft || key === Key.ArrowRight;\n const isOpenKey = key === Key.Enter || key === Key.Space;\n const manager = this._keyManager;\n // Open the select on ALT + arrow key to match the native <select>\n if ((!manager.isTyping() && isOpenKey && !hasModifierKey(event)) || ((this.multiple || event.altKey) && isArrowKey)) {\n event.preventDefault(); // prevents the page from scrolling down when pressing space\n this.openPanel();\n }\n }\n\n /** Handles keyboard events when the dropdown is open. */\n private _handleOpenKeydown(event: KeyboardEvent): void {\n const manager = this._keyManager;\n const key = event.key;\n const isArrowKey = key === Key.ArrowDown || key === Key.ArrowUp;\n const isTyping = manager.isTyping();\n const isInputField = event.target;\n if (isArrowKey && event.altKey) {\n // Close the dropdown on ALT + arrow key to match the native <select>\n event.preventDefault();\n this.closePanel();\n // Don't do anything in this case if the user is typing,\n // because the typing sequence can include the space key.\n } else if (!isTyping && (key === Key.Enter || key === Key.Space) && manager.activeItem && !hasModifierKey(event)) {\n event.preventDefault();\n this._multiple ? manager.activeItem._selectViaInteraction() : manager.activeItem._clickViaInteraction();\n } else if (!isTyping && this._multiple && ['a', 'A'].includes(key) && event.ctrlKey) {\n event.preventDefault();\n const hasDeselectedOptions = this.options.some((opt) => !opt.disabled && !opt.selected);\n this.options.forEach((option) => {\n if (!option.disabled) {\n hasDeselectedOptions ? option.select() : option.deselect();\n }\n });\n } else if (Key.Escape === key) {\n this.closePanel();\n } else {\n const previouslyFocusedIndex = manager.activeItemIndex;\n manager.onKeydown(event);\n if (this._multiple && isArrowKey && event.shiftKey && manager.activeItem && manager.activeItemIndex !== previouslyFocusedIndex) {\n manager.activeItem._selectViaInteraction();\n }\n }\n }\n\n private _watchPanelEvents() {\n const panelStateChanges = merge(this.overlay.opening, this.overlay.closing);\n panelStateChanges.pipe(takeUntil(this._onDestroy)).subscribe((event: boolean) => this.toggled.emit(event));\n }\n\n private _watchSelectionEvents() {\n const selectionEvents = this.options ? merge(...this.options.map((option) => option.onSelectionChange)) : of();\n this._selectedOptionChanges.unsubscribe();\n this._selectedOptionChanges = selectionEvents.pipe(takeUntil(this._onDestroy)).subscribe((event: NovoOptionSelectionChange) => {\n if (event.isUserInput && !this.multiple) {\n this._clearPreviousSelectedOption(this._keyManager.activeItem);\n event.source.select();\n if (!this.keepOpen && this.panelOpen) {\n this.closePanel();\n this.focus();\n }\n } else {\n event.source.select();\n }\n });\n }\n /**\n * Clear any previous selected option and emit a selection change event for this option\n */\n private _clearPreviousSelectedOption(skip: NovoOption) {\n this.options.forEach((option) => {\n if (option !== skip && option.selected) {\n option.deselect();\n }\n });\n }\n\n /** Sets up a key manager to listen to keyboard events on the overlay panel. */\n private _initKeyManager() {\n this._keyManager = new ActiveDescendantKeyManager<NovoOption>(this.options).withTypeAhead(250).withHomeAndEnd();\n\n this._keyManager.tabOut.pipe(takeUntil(this._onDestroy)).subscribe(() => {\n if (this.panelOpen) {\n // Restore focus to the trigger before closing. Ensures that the focus\n // position won't be lost if the user got focus into the overlay.\n this.focus();\n this.closePanel();\n }\n });\n\n this._keyManager.change.pipe(takeUntil(this._onDestroy)).subscribe(() => {\n if (this.panelOpen && this.overlay) {\n this._scrollOptionIntoView(this._keyManager.activeItemIndex || 0);\n }\n });\n }\n\n /** Scrolls the active option into view. */\n protected _scrollOptionIntoView(index: number): void {\n const labelCount = _countGroupLabelsBeforeOption(index, this.options, this.optionGroups);\n const itemHeight = this._getItemHeight();\n this.panel.nativeElement.scrollTop = _getOptionScrollPosition(\n (index + labelCount) * itemHeight,\n itemHeight,\n this.panel.nativeElement.scrollTop,\n this.panel.nativeElement.offsetHeight,\n );\n }\n\n /** Calculates the height of the select's options. */\n private _getItemHeight(): number {\n let [first] = this.options;\n if (first) {\n return first._getHostElement().offsetHeight;\n }\n return 0;\n }\n}\n\n// Deprecated below here ---------------------------\n\n@Component({\n selector: 'item',\n template: '<novo-option><ng-content></ng-content></novo-option>',\n host: {\n '[class.disabled]': 'disabled',\n '[class.active]': 'active',\n },\n standalone: false\n})\nexport class NovoItemElement {\n @Input()\n public disabled: boolean;\n @Input()\n public keepOpen: boolean = false;\n @Output()\n public action: EventEmitter<any> = new EventEmitter();\n\n public active: boolean = false;\n\n constructor(private dropdown: NovoDropdownElement, public element: ElementRef) {\n notify(`'item' element has been deprecated. Please use 'novo-option' and 'novo-optgroup'.`);\n }\n\n @HostListener('click', ['$event'])\n public onClick(event: Event): void {\n // Poor man's disable\n if (!this.disabled) {\n // Close if keepOpen is false\n if (!this.keepOpen) {\n this.dropdown.closePanel();\n }\n // Emit the action\n this.action.emit({ originalEvent: event });\n }\n }\n}\n\n@Component({\n selector: 'list',\n template: '<ng-content></ng-content>',\n standalone: false\n})\nexport class NovoDropdownListElement implements AfterContentInit {\n @ContentChildren(NovoItemElement)\n public items: QueryList<NovoItemElement>;\n\n constructor(private dropdown: NovoDropdownElement) {\n notify(`'list' element has been deprecated. Please use novo-option and novo-optgroup.`);\n }\n\n public ngAfterContentInit(): void {\n this.dropdown.items = this.items;\n this.items.changes.subscribe(() => {\n this.dropdown.items = this.items;\n });\n }\n}\n\n@Component({\n selector: 'dropdown-item-header',\n template: '<ng-content></ng-content>',\n standalone: false\n})\nexport class NovoDropDownItemHeaderElement {\n constructor() {\n notify(`'dropdown-item-header' element has been deprecated. Please use novo-option and novo-optgroup.`);\n }\n}\n","// NG2\nimport { NgModule } from '@angular/core';\nimport { NovoOptionModule, NovoOverlayModule } from 'novo-elements/elements/common';\n// APP\nimport {\n NovoDropdownElement,\n NovoDropDownItemHeaderElement,\n NovoDropdownListElement,\n NovoDropDownTrigger,\n NovoItemElement,\n} from './Dropdown';\n\n@NgModule({\n imports: [NovoOverlayModule, NovoOptionModule],\n declarations: [NovoDropdownElement, NovoItemElement, NovoDropdownListElement, NovoDropDownItemHeaderElement, NovoDropDownTrigger],\n exports: [NovoDropdownElement, NovoItemElement, NovoDropdownListElement, NovoDropDownItemHeaderElement, NovoDropDownTrigger],\n})\nexport class NovoDropdownModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;MAkDa,mBAAmB,CAAA;AAC9B,IAAA,WAAA,CAAmB,OAAmB,EAAA;QAAnB,IAAO,CAAA,OAAA,GAAP,OAAO;;+GADf,mBAAmB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,UAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;mGAAnB,mBAAmB,EAAA,YAAA,EAAA,KAAA,EAAA,QAAA,EAAA,mBAAA,EAAA,IAAA,EAAA,EAAA,cAAA,EAAA,uBAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA,CAAA;;4FAAnB,mBAAmB,EAAA,UAAA,EAAA,CAAA;kBAP/B,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACP,oBAAA,QAAQ,EAAE,mBAAmB;AAC7B,oBAAA,IAAI,EAAE;AACF,wBAAA,KAAK,EAAE,uBAAuB;AACjC,qBAAA;AACD,oBAAA,UAAU,EAAE;AACf,iBAAA;;AAKD;AACA;AACA,MAAM,gBAAgB,CAAA;AACpB,IAAA,WAAA,GAAA;AACD;AACD,MAAM,kBAAkB,GAAgF,YAAY,CAClH,aAAa,CAAC,aAAa,CAAC,gBAAgB,CAAC,EAAE,CAAC,CAAC,CAClD;AAkBK,MAAO,mBAAoB,SAAQ,kBAAkB,CAAA;;AA8DzD,IAAA,IACI,QAAQ,GAAA;QACV,OAAO,IAAI,CAAC,SAAS;;IAEvB,IAAI,QAAQ,CAAC,KAAc,EAAA;AACzB,QAAA,IAAI,CAAC,SAAS,GAAG,qBAAqB,CAAC,KAAK,CAAC;;;AAK/C,IAAA,IACI,wBAAwB,GAAA;QAC1B,OAAO,IAAI,CAAC,yBAAyB;;IAEvC,IAAI,wBAAwB,CAAC,KAAc,EAAA;AACzC,QAAA,IAAI,CAAC,yBAAyB,GAAG,qBAAqB,CAAC,KAAK,CAAC;;AAI/D,IAAA,IAAI,MAAM,GAAA;AACR,QAAA,OAAO,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,OAAO;;IAGtC,WAAmB,CAAA,OAAmB,EAAU,GAAsB,EAAA;AACpE,QAAA,KAAK,EAAE;QADU,IAAO,CAAA,OAAA,GAAP,OAAO;QAAsB,IAAG,CAAA,GAAA,GAAH,GAAG;QAjFnD,IAAkB,CAAA,kBAAA,GAAW,OAAO;QAIpC,IAAI,CAAA,IAAA,GAUc,SAAS;QAE3B,IAAc,CAAA,cAAA,GAAqC,YAAY;AAE/D;;AAEG;QAGH,IAAQ,CAAA,QAAA,GAAY,KAAK;AAKzB,QAAA,IAAA,CAAA,KAAK,GAAW,CAAC,CAAC,CAAC;AAEnB,QAAA,IAAA,CAAA,YAAY,GAAY,KAAK,CAAC;AAE9B,QAAA,IAAA,CAAA,OAAO,GAA0B,IAAI,YAAY,EAAW;AAmBpD,QAAA,IAAA,CAAA,sBAAsB,GAAG,YAAY,CAAC,KAAK;;AAE3C,QAAA,IAAA,CAAA,UAAU,GAAkB,IAAI,OAAO,EAAE;QAYzC,IAAS,CAAA,SAAA,GAAY,KAAK;QAU1B,IAAyB,CAAA,yBAAA,GAAY,KAAK;QAQhD,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC;QAC/C,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC;;IAGzC,QAAQ,GAAA;AACb,QAAA,IAAI,IAAI,CAAC,YAAY,EAAE;YACrB,MAAM,CAAC,CAAmE,iEAAA,CAAA,CAAC;;;IAIxE,kBAAkB,GAAA;;AAEvB,QAAA,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,aAAa,CAAC,gBAAgB,CAAC,OAAO,EAAE,IAAI,CAAC,YAAY,CAAC;QAC9E,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,aAAa,CAAC,QAAQ,GAAG,CAAC,CAAC;AAC/C,QAAA,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,SAAS,CAAC,MAAK;YACnE,IAAI,CAAC,eAAe,EAAE;YACtB,IAAI,CAAC,qBAAqB,EAAE;AAC9B,SAAC,CAAC;QACF,IAAI,CAAC,eAAe,EAAE;QACtB,IAAI,CAAC,qBAAqB,EAAE;QAC5B,IAAI,CAAC,KAAK,EAAE;;IAGP,eAAe,GAAA;QACpB,IAAI,CAAC,iBAAiB,EAAE;;IAGnB,WAAW,GAAA;AAChB,QAAA,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE;AACtB,QAAA,IAAI,CAAC,UAAU,CAAC,QAAQ,EAAE;;AAE1B,QAAA,IAAI,IAAI,CAAC,MAAM,EAAE;AACf,YAAA,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,aAAa,CAAC,mBAAmB,CAAC,OAAO,EAAE,IAAI,CAAC,YAAY,CAAC;;;AAIrF,IAAA,KAAK,CAAC,OAAsB,EAAA;AAC1B,QAAA,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE;YAClB,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,KAAK,CAAC,OAAO,CAAC;;;IAI7C,SAAS,GAAA;QACP,KAAK,CAAC,SAAS,EAAE;AACjB,QAAA,IAAI,IAAI,CAAC,wBAAwB,EAAE;AACjC,YAAA,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,4BAA4B,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;;;AAI5E,IAAA,4BAA4B,CAAC,OAA8B,EAAA;QACjE,OAAO,OAAO,CAAC,OAAO,EAAE,CAAC,SAAS,CAAC,CAAC,MAAkB,KAAI;AACxD,YAAA,OAAO,MAAM,CAAC,QAAQ,KAAK,IAAI;AACjC,SAAC,CAAC;;AAIJ,IAAA,IAAW,KAAK,CAAC,KAAiC,EAAA;;AAIlD,IAAA,cAAc,CAAC,KAAoB,EAAA;AACjC,QAAA,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE;YAClB,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,kBAAkB,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,oBAAoB,CAAC,KAAK,CAAC;;;;AAK9E,IAAA,oBAAoB,CAAC,KAAoB,EAAA;AAC/C,QAAA,MAAM,GAAG,GAAG,KAAK,CAAC,GAAG;AACrB,QAAA,MAAM,UAAU,GAAG,GAAG,KAAA,WAAA,wBAAsB,GAAG,KAAgB,SAAA,sBAAI,GAAG,KAAA,WAAA,wBAAsB,GAAG;AAC/F,QAAA,MAAM,SAAS,GAAG,GAAG,gCAAkB,GAAG;AAC1C,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,WAAW;;AAEhC,QAAA,IAAI,CAAC,CAAC,OAAO,CAAC,QAAQ,EAAE,IAAI,SAAS,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,IAAI,KAAK,CAAC,MAAM,KAAK,UAAU,CAAC,EAAE;AACnH,YAAA,KAAK,CAAC,cAAc,EAAE,CAAC;YACvB,IAAI,CAAC,SAAS,EAAE;;;;AAKZ,IAAA,kBAAkB,CAAC,KAAoB,EAAA;AAC7C,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,WAAW;AAChC,QAAA,MAAM,GAAG,GAAG,KAAK,CAAC,GAAG;AACrB,QAAA,MAAM,UAAU,GAAG,GAAG,wCAAsB,GAAG;AAC/C,QAAA,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAQ,EAAE;AACnC,QAAA,MAAM,YAAY,GAAG,KAAK,CAAC,MAAM;AACjC,QAAA,IAAI,UAAU,IAAI,KAAK,CAAC,MAAM,EAAE;;YAE9B,KAAK,CAAC,cAAc,EAAE;YACtB,IAAI,CAAC,UAAU,EAAE;;;;aAGZ,IAAI,CAAC,QAAQ,KAAK,GAAG,KAAc,OAAA,oBAAI,GAAG,KAAc,GAAA,iBAAC,IAAI,OAAO,CAAC,UAAU,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,EAAE;YAChH,KAAK,CAAC,cAAc,EAAE;YACtB,IAAI,CAAC,SAAS,GAAG,OAAO,CAAC,UAAU,CAAC,qBAAqB,EAAE,GAAG,OAAO,CAAC,UAAU,CAAC,oBAAoB,EAAE;;aAClG,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,SAAS,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,KAAK,CAAC,OAAO,EAAE;YACnF,KAAK,CAAC,cAAc,EAAE;YACtB,MAAM,oBAAoB,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,GAAG,KAAK,CAAC,GAAG,CAAC,QAAQ,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC;YACvF,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,MAAM,KAAI;AAC9B,gBAAA,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE;AACpB,oBAAA,oBAAoB,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,MAAM,CAAC,QAAQ,EAAE;;AAE9D,aAAC,CAAC;;aACG,IAAI,QAAA,sBAAe,GAAG,EAAE;YAC7B,IAAI,CAAC,UAAU,EAAE;;aACZ;AACL,YAAA,MAAM,sBAAsB,GAAG,OAAO,CAAC,eAAe;AACtD,YAAA,OAAO,CAAC,SAAS,CAAC,KAAK,CAAC;YACxB,IAAI,IAAI,CAAC,SAAS,IAAI,UAAU,IAAI,KAAK,CAAC,QAAQ,IAAI,OAAO,CAAC,UAAU,IAAI,OAAO,CAAC,eAAe,KAAK,sBAAsB,EAAE;AAC9H,gBAAA,OAAO,CAAC,UAAU,CAAC,qBAAqB,EAAE;;;;IAKxC,iBAAiB,GAAA;AACvB,QAAA,MAAM,iBAAiB,GAAG,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC;QAC3E,iBAAiB,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,KAAc,KAAK,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;;IAGpG,qBAAqB,GAAA;AAC3B,QAAA,MAAM,eAAe,GAAG,IAAI,CAAC,OAAO,GAAG,KAAK,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,KAAK,MAAM,CAAC,iBAAiB,CAAC,CAAC,GAAG,EAAE,EAAE;AAC9G,QAAA,IAAI,CAAC,sBAAsB,CAAC,WAAW,EAAE;QACzC,IAAI,CAAC,sBAAsB,GAAG,eAAe,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,KAAgC,KAAI;YAC5H,IAAI,KAAK,CAAC,WAAW,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE;gBACvC,IAAI,CAAC,4BAA4B,CAAC,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC;AAC9D,gBAAA,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE;gBACrB,IAAI,CAAC,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,SAAS,EAAE;oBACpC,IAAI,CAAC,UAAU,EAAE;oBACjB,IAAI,CAAC,KAAK,EAAE;;;iBAET;AACL,gBAAA,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE;;AAEzB,SAAC,CAAC;;AAEJ;;AAEG;AACK,IAAA,4BAA4B,CAAC,IAAgB,EAAA;QACnD,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,MAAM,KAAI;YAC9B,IAAI,MAAM,KAAK,IAAI,IAAI,MAAM,CAAC,QAAQ,EAAE;gBACtC,MAAM,CAAC,QAAQ,EAAE;;AAErB,SAAC,CAAC;;;IAII,eAAe,GAAA;AACrB,QAAA,IAAI,CAAC,WAAW,GAAG,IAAI,0BAA0B,CAAa,IAAI,CAAC,OAAO,CAAC,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC,cAAc,EAAE;AAE/G,QAAA,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,SAAS,CAAC,MAAK;AACtE,YAAA,IAAI,IAAI,CAAC,SAAS,EAAE;;;gBAGlB,IAAI,CAAC,KAAK,EAAE;gBACZ,IAAI,CAAC,UAAU,EAAE;;AAErB,SAAC,CAAC;AAEF,QAAA,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,SAAS,CAAC,MAAK;YACtE,IAAI,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,OAAO,EAAE;gBAClC,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,WAAW,CAAC,eAAe,IAAI,CAAC,CAAC;;AAErE,SAAC,CAAC;;;AAIM,IAAA,qBAAqB,CAAC,KAAa,EAAA;AAC3C,QAAA,MAAM,UAAU,GAAG,6BAA6B,CAAC,KAAK,EAAE,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,YAAY,CAAC;AACxF,QAAA,MAAM,UAAU,GAAG,IAAI,CAAC,cAAc,EAAE;AACxC,QAAA,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,SAAS,GAAG,wBAAwB,CAC3D,CAAC,KAAK,GAAG,UAAU,IAAI,UAAU,EACjC,UAAU,EACV,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,SAAS,EAClC,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,YAAY,CACtC;;;IAIK,cAAc,GAAA;AACpB,QAAA,IAAI,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,OAAO;QAC1B,IAAI,KAAK,EAAE;AACT,YAAA,OAAO,KAAK,CAAC,eAAe,EAAE,CAAC,YAAY;;AAE7C,QAAA,OAAO,CAAC;;+GA/QC,mBAAmB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,UAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,iBAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;mGAAnB,mBAAmB,EAAA,YAAA,EAAA,KAAA,EAAA,QAAA,EAAA,eAAA,EAAA,MAAA,EAAA,EAAA,oBAAA,EAAA,sBAAA,EAAA,kBAAA,EAAA,oBAAA,EAAA,cAAA,EAAA,gBAAA,EAAA,IAAA,EAAA,MAAA,EAAA,cAAA,EAAA,gBAAA,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,QAAA,EAAA,KAAA,EAAA,OAAA,EAAA,YAAA,EAAA,cAAA,EAAA,QAAA,EAAA,UAAA,EAAA,wBAAA,EAAA,0BAAA,EAAA,EAAA,OAAA,EAAA,EAAA,OAAA,EAAA,SAAA,EAAA,EAAA,IAAA,EAAA,EAAA,SAAA,EAAA,EAAA,SAAA,EAAA,wBAAA,EAAA,EAAA,UAAA,EAAA,EAAA,eAAA,EAAA,mBAAA,EAAA,EAAA,EAAA,OAAA,EAAA,CAAA,EAAA,YAAA,EAAA,SAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAyChB,iBAAiB,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,UAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAEjB,mBAAmB,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,cAAA,EAAA,SAAA,EAGhB,YAAY,EAEZ,WAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,SAAA,EAAA,SAAA,EAAA,UAAU,EAVhB,WAAA,EAAA,IAAA,EAAA,CAAA,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,SAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,4BAA4B,EApD3B,WAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,OAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,OAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,CAAA,EAAA,eAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAAA;;;;;;;AAOX,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,45CAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,4BAAA,EAAA,QAAA,EAAA,uBAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,gBAAA,EAAA,OAAA,EAAA,UAAA,EAAA,QAAA,EAAA,eAAA,EAAA,aAAA,EAAA,QAAA,CAAA,EAAA,OAAA,EAAA,CAAA,QAAA,EAAA,SAAA,EAAA,SAAA,EAAA,iBAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA;;AAkCD,UAAA,CAAA;AADC,IAAA,YAAY,EAAE;;AACW,CAAA,EAAA,mBAAA,CAAA,SAAA,EAAA,UAAA,EAAA,KAAA,CAAA,CAAA;4FA3Bf,mBAAmB,EAAA,UAAA,EAAA,CAAA;kBAhB/B,SAAS;AACI,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,eAAe,EACf,QAAA,EAAA;;;;;;;GAOX,EAEO,IAAA,EAAA;AACF,wBAAA,iBAAiB,EAAE,mBAAmB;AACzC,qBAAA,EAAA,UAAA,EACW,KAAK,EAAA,MAAA,EAAA,CAAA,45CAAA,CAAA,EAAA;+GAInB,oBAAoB,EAAA,CAAA;sBADnB;gBAGD,kBAAkB,EAAA,CAAA;sBADjB;gBAGD,cAAc,EAAA,CAAA;sBADb;gBAGD,IAAI,EAAA,CAAA;sBADH;gBAaD,cAAc,EAAA,CAAA;sBADb;gBAQD,QAAQ,EAAA,CAAA;sBAFP;gBAKD,MAAM,EAAA,CAAA;sBADL;gBAGD,KAAK,EAAA,CAAA;sBADJ;gBAGD,YAAY,EAAA,CAAA;sBADX;gBAGD,OAAO,EAAA,CAAA;sBADN;gBAID,OAAO,EAAA,CAAA;sBADN,SAAS;uBAAC,4BAA4B;gBAIvC,OAAO,EAAA,CAAA;sBADN,YAAY;uBAAC,iBAAiB;gBAG/B,QAAQ,EAAA,CAAA;sBADP,YAAY;uBAAC,mBAAmB;gBAIjC,YAAY,EAAA,CAAA;sBADX,eAAe;AAAC,gBAAA,IAAA,EAAA,CAAA,YAAY,EAAE,EAAE,WAAW,EAAE,IAAI,EAAE;gBAGpD,OAAO,EAAA,CAAA;sBADN,eAAe;AAAC,gBAAA,IAAA,EAAA,CAAA,UAAU,EAAE,EAAE,WAAW,EAAE,IAAI,EAAE;gBAGlD,KAAK,EAAA,CAAA;sBADJ,SAAS;uBAAC,OAAO;gBAad,QAAQ,EAAA,CAAA;sBADX;gBAWG,wBAAwB,EAAA,CAAA;sBAD3B;gBA2ED,cAAc,EAAA,CAAA;sBADb,YAAY;uBAAC,SAAS,EAAE,CAAC,QAAQ,CAAC;;AAiIrC;MAWa,eAAe,CAAA;IAU1B,WAAoB,CAAA,QAA6B,EAAS,OAAmB,EAAA;QAAzD,IAAQ,CAAA,QAAA,GAAR,QAAQ;QAA8B,IAAO,CAAA,OAAA,GAAP,OAAO;QAN1D,IAAQ,CAAA,QAAA,GAAY,KAAK;AAEzB,QAAA,IAAA,CAAA,MAAM,GAAsB,IAAI,YAAY,EAAE;QAE9C,IAAM,CAAA,MAAA,GAAY,KAAK;QAG5B,MAAM,CAAC,CAAmF,iFAAA,CAAA,CAAC;;AAItF,IAAA,OAAO,CAAC,KAAY,EAAA;;AAEzB,QAAA,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE;;AAElB,YAAA,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE;AAClB,gBAAA,IAAI,CAAC,QAAQ,CAAC,UAAU,EAAE;;;YAG5B,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,aAAa,EAAE,KAAK,EAAE,CAAC;;;+GAvBnC,eAAe,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,mBAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,UAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAf,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,eAAe,qRAPd,sDAAsD,EAAA,QAAA,EAAA,IAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,UAAA,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,UAAA,EAAA,WAAA,EAAA,OAAA,EAAA,UAAA,CAAA,EAAA,QAAA,EAAA,CAAA,YAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA;;4FAOvD,eAAe,EAAA,UAAA,EAAA,CAAA;kBAT3B,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACP,oBAAA,QAAQ,EAAE,MAAM;AAChB,oBAAA,QAAQ,EAAE,sDAAsD;AAChE,oBAAA,IAAI,EAAE;AACF,wBAAA,kBAAkB,EAAE,UAAU;AAC9B,wBAAA,gBAAgB,EAAE,QAAQ;AAC7B,qBAAA;AACD,oBAAA,UAAU,EAAE;AACf,iBAAA;8GAGQ,QAAQ,EAAA,CAAA;sBADd;gBAGM,QAAQ,EAAA,CAAA;sBADd;gBAGM,MAAM,EAAA,CAAA;sBADZ;gBAUM,OAAO,EAAA,CAAA;sBADb,YAAY;uBAAC,OAAO,EAAE,CAAC,QAAQ,CAAC;;MAmBtB,uBAAuB,CAAA;AAIlC,IAAA,WAAA,CAAoB,QAA6B,EAAA;QAA7B,IAAQ,CAAA,QAAA,GAAR,QAAQ;QAC1B,MAAM,CAAC,CAA+E,6EAAA,CAAA,CAAC;;IAGlF,kBAAkB,GAAA;QACvB,IAAI,CAAC,QAAQ,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK;QAChC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC,MAAK;YAChC,IAAI,CAAC,QAAQ,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK;AAClC,SAAC,CAAC;;+GAZO,uBAAuB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,mBAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;mGAAvB,uBAAuB,EAAA,YAAA,EAAA,KAAA,EAAA,QAAA,EAAA,MAAA,EAAA,OAAA,EAAA,CAAA,EAAA,YAAA,EAAA,OAAA,EAAA,SAAA,EACjB,eAAe,EAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAJpB,2BAA2B,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,CAAA;;4FAG5B,uBAAuB,EAAA,UAAA,EAAA,CAAA;kBALnC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACP,oBAAA,QAAQ,EAAE,MAAM;AAChB,oBAAA,QAAQ,EAAE,2BAA2B;AACrC,oBAAA,UAAU,EAAE;AACf,iBAAA;qFAGQ,KAAK,EAAA,CAAA;sBADX,eAAe;uBAAC,eAAe;;MAoBrB,6BAA6B,CAAA;AACxC,IAAA,WAAA,GAAA;QACE,MAAM,CAAC,CAA+F,6FAAA,CAAA,CAAC;;+GAF9F,6BAA6B,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAA7B,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,6BAA6B,iFAH5B,2BAA2B,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,CAAA;;4FAG5B,6BAA6B,EAAA,UAAA,EAAA,CAAA;kBALzC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACP,oBAAA,QAAQ,EAAE,sBAAsB;AAChC,oBAAA,QAAQ,EAAE,2BAA2B;AACrC,oBAAA,UAAU,EAAE;AACf,iBAAA;;;AClaD;MAiBa,kBAAkB,CAAA;+GAAlB,kBAAkB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,QAAA,EAAA,CAAA,CAAA;gHAAlB,kBAAkB,EAAA,YAAA,EAAA,CAHd,mBAAmB,EAAE,eAAe,EAAE,uBAAuB,EAAE,6BAA6B,EAAE,mBAAmB,CAAA,EAAA,OAAA,EAAA,CADtH,iBAAiB,EAAE,gBAAgB,CAEnC,EAAA,OAAA,EAAA,CAAA,mBAAmB,EAAE,eAAe,EAAE,uBAAuB,EAAE,6BAA6B,EAAE,mBAAmB,CAAA,EAAA,CAAA,CAAA;gHAEhH,kBAAkB,EAAA,OAAA,EAAA,CAJnB,iBAAiB,EAAE,gBAAgB,CAAA,EAAA,CAAA,CAAA;;4FAIlC,kBAAkB,EAAA,UAAA,EAAA,CAAA;kBAL9B,QAAQ;AAAC,YAAA,IAAA,EAAA,CAAA;AACR,oBAAA,OAAO,EAAE,CAAC,iBAAiB,EAAE,gBAAgB,CAAC;oBAC9C,YAAY,EAAE,CAAC,mBAAmB,EAAE,eAAe,EAAE,uBAAuB,EAAE,6BAA6B,EAAE,mBAAmB,CAAC;oBACjI,OAAO,EAAE,CAAC,mBAAmB,EAAE,eAAe,EAAE,uBAAuB,EAAE,6BAA6B,EAAE,mBAAmB,CAAC;AAC7H,iBAAA;;;AChBD;;AAEG;;;;"}
|
|
@@ -241,9 +241,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.15", ngImpo
|
|
|
241
241
|
* This component corresponds to the header element of an `<novo-expansion-panel>`.
|
|
242
242
|
*/
|
|
243
243
|
class NovoExpansionPanelHeader {
|
|
244
|
-
constructor(panel, _element,
|
|
245
|
-
// private _focusMonitor: FocusMonitor,
|
|
246
|
-
_changeDetectorRef) {
|
|
244
|
+
constructor(panel, _element, _changeDetectorRef) {
|
|
247
245
|
this.panel = panel;
|
|
248
246
|
this._element = _element;
|
|
249
247
|
this._changeDetectorRef = _changeDetectorRef;
|
|
@@ -255,7 +253,6 @@ class NovoExpansionPanelHeader {
|
|
|
255
253
|
// Since the toggle state depends on an @Input on the panel, we
|
|
256
254
|
// need to subscribe and trigger change detection manually.
|
|
257
255
|
this._parentChangeSubscription = merge(panel.opened, panel.closed, panel._inputChanges.pipe(filter((changes) => !!(changes.hideToggle || changes.disabled)))).subscribe(() => this._changeDetectorRef.markForCheck());
|
|
258
|
-
// _focusMonitor.monitor(_element.nativeElement);
|
|
259
256
|
}
|
|
260
257
|
/** Toggles the expanded state of the panel. */
|
|
261
258
|
_toggle() {
|
|
@@ -292,7 +289,6 @@ class NovoExpansionPanelHeader {
|
|
|
292
289
|
}
|
|
293
290
|
ngOnDestroy() {
|
|
294
291
|
this._parentChangeSubscription.unsubscribe();
|
|
295
|
-
// this._focusMonitor.stopMonitoring(this._element.nativeElement);
|
|
296
292
|
}
|
|
297
293
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.15", ngImport: i0, type: NovoExpansionPanelHeader, deps: [{ token: NovoExpansionPanel, host: true }, { token: i0.ElementRef }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
298
294
|
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.15", type: NovoExpansionPanelHeader, isStandalone: false, selector: "novo-expansion-panel-header", inputs: { expandedHeight: "expandedHeight", collapsedHeight: "collapsedHeight" }, host: { attributes: { "role": "button" }, listeners: { "click": "_toggle()", "keydown": "_keydown($event)" }, properties: { "attr.id": "panel._headerId", "attr.tabindex": "panel.disabled ? -1 : 0", "attr.aria-controls": "_getPanelId()", "attr.aria-expanded": "_isExpanded()", "attr.aria-disabled": "panel.disabled", "class.novo-expanded": "_isExpanded()", "@expansionHeight": "{\n value: _getExpandedState(),\n params: {\n collapsedHeight: collapsedHeight,\n expandedHeight: expandedHeight\n }\n }" }, classAttribute: "novo-expansion-panel-header" }, ngImport: i0, template: "<span [@indicatorRotate]=\"_getExpandedState()\" *ngIf=\"_showToggle()\"\n class=\"novo-expansion-indicator\" size=\"lg\"></span>\n<span class=\"novo-content\">\n <ng-content select=\"novo-panel-title\"></ng-content>\n <ng-content select=\"novo-panel-description\"></ng-content>\n <ng-content></ng-content>\n</span>\n", styles: [".novo-expansion-panel-header{display:flex;flex-direction:row;align-items:center;padding:0 24px}.novo-expansion-panel-header:focus,.novo-expansion-panel-header:hover{outline:none}.novo-expansion-panel-header.novo-expanded:focus,.novo-expansion-panel-header.novo-expanded:hover{background:inherit}.novo-expansion-panel-header:not([aria-disabled=true]){cursor:pointer}.novo-content{display:flex;flex:1;flex-direction:row;overflow:hidden}.novo-expansion-panel-header-title,.novo-expansion-panel-header-description{display:flex;flex-grow:1;margin-right:16px;align-items:center;gap:1rem}[dir=rtl] .novo-expansion-panel-header-title,[dir=rtl] .novo-expansion-panel-header-description{margin-right:0;margin-left:16px}.novo-expansion-panel-header-description{flex-grow:2}.novo-expansion-indicator{margin-right:10px}.novo-expansion-indicator:after{border-style:solid;border-width:0 2px 2px 0;content:\"\";display:inline-block;padding:3px;transform:rotate(-45deg);vertical-align:middle}\n"], dependencies: [{ kind: "directive", type: i2$1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }], animations: [novoExpansionAnimations.indicatorRotate, novoExpansionAnimations.expansionHeaderHeight], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
|