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.
Files changed (75) hide show
  1. package/elements/button/styles/button-primary.scss +0 -1
  2. package/elements/calendar/month-view/month-view.component.scss +0 -1
  3. package/elements/chips/Chips.scss +0 -3
  4. package/elements/common/option/optgroup.component.scss +0 -2
  5. package/elements/data-table/data-table.component.d.ts +12 -2
  6. package/elements/data-table/data-table.component.scss +4 -14
  7. package/elements/data-table/data-table.module.d.ts +13 -12
  8. package/elements/data-table/interfaces.d.ts +1 -0
  9. package/elements/date-picker/DateRangeInput.scss +0 -1
  10. package/elements/drag-drop/drag-drop-box.d.ts +23 -3
  11. package/elements/field/field.scss +0 -1
  12. package/elements/form/extras/file/FileInput.scss +1 -1
  13. package/elements/layout/content/layout-content.component.d.ts +1 -2
  14. package/elements/non-ideal-state/NonIdealState.scss +0 -1
  15. package/elements/picker/extras/picker-results/PickerResults.scss +0 -3
  16. package/elements/switch/Switch.scss +0 -1
  17. package/elements/time-picker/TimePicker.scss +0 -2
  18. package/fesm2022/novo-elements-elements-agenda.mjs +0 -85
  19. package/fesm2022/novo-elements-elements-agenda.mjs.map +1 -1
  20. package/fesm2022/novo-elements-elements-aside.mjs +0 -1
  21. package/fesm2022/novo-elements-elements-aside.mjs.map +1 -1
  22. package/fesm2022/novo-elements-elements-autocomplete.mjs +0 -8
  23. package/fesm2022/novo-elements-elements-autocomplete.mjs.map +1 -1
  24. package/fesm2022/novo-elements-elements-avatar.mjs +0 -2
  25. package/fesm2022/novo-elements-elements-avatar.mjs.map +1 -1
  26. package/fesm2022/novo-elements-elements-checkbox.mjs +0 -1
  27. package/fesm2022/novo-elements-elements-checkbox.mjs.map +1 -1
  28. package/fesm2022/novo-elements-elements-color-picker.mjs +0 -4
  29. package/fesm2022/novo-elements-elements-color-picker.mjs.map +1 -1
  30. package/fesm2022/novo-elements-elements-common.mjs +1 -23
  31. package/fesm2022/novo-elements-elements-common.mjs.map +1 -1
  32. package/fesm2022/novo-elements-elements-data-table.mjs +70 -540
  33. package/fesm2022/novo-elements-elements-data-table.mjs.map +1 -1
  34. package/fesm2022/novo-elements-elements-date-picker.mjs +1 -13
  35. package/fesm2022/novo-elements-elements-date-picker.mjs.map +1 -1
  36. package/fesm2022/novo-elements-elements-drag-drop.mjs +147 -27
  37. package/fesm2022/novo-elements-elements-drag-drop.mjs.map +1 -1
  38. package/fesm2022/novo-elements-elements-dropdown.mjs +1 -10
  39. package/fesm2022/novo-elements-elements-dropdown.mjs.map +1 -1
  40. package/fesm2022/novo-elements-elements-expansion.mjs +1 -5
  41. package/fesm2022/novo-elements-elements-expansion.mjs.map +1 -1
  42. package/fesm2022/novo-elements-elements-field.mjs +1 -15
  43. package/fesm2022/novo-elements-elements-field.mjs.map +1 -1
  44. package/fesm2022/novo-elements-elements-flex.mjs.map +1 -1
  45. package/fesm2022/novo-elements-elements-form.mjs +2 -15
  46. package/fesm2022/novo-elements-elements-form.mjs.map +1 -1
  47. package/fesm2022/novo-elements-elements-layout.mjs +1 -5
  48. package/fesm2022/novo-elements-elements-layout.mjs.map +1 -1
  49. package/fesm2022/novo-elements-elements-menu.mjs +2 -35
  50. package/fesm2022/novo-elements-elements-menu.mjs.map +1 -1
  51. package/fesm2022/novo-elements-elements-picker.mjs +1 -4
  52. package/fesm2022/novo-elements-elements-picker.mjs.map +1 -1
  53. package/fesm2022/novo-elements-elements-progress.mjs.map +1 -1
  54. package/fesm2022/novo-elements-elements-radio.mjs.map +1 -1
  55. package/fesm2022/novo-elements-elements-select-search.mjs +0 -14
  56. package/fesm2022/novo-elements-elements-select-search.mjs.map +1 -1
  57. package/fesm2022/novo-elements-elements-select.mjs +0 -13
  58. package/fesm2022/novo-elements-elements-select.mjs.map +1 -1
  59. package/fesm2022/novo-elements-elements-simple-table.mjs +0 -10
  60. package/fesm2022/novo-elements-elements-simple-table.mjs.map +1 -1
  61. package/fesm2022/novo-elements-elements-time-picker.mjs +0 -38
  62. package/fesm2022/novo-elements-elements-time-picker.mjs.map +1 -1
  63. package/fesm2022/novo-elements-elements-value.mjs.map +1 -1
  64. package/fesm2022/novo-elements-services.mjs +0 -13
  65. package/fesm2022/novo-elements-services.mjs.map +1 -1
  66. package/fesm2022/novo-elements-utils.mjs +9 -13
  67. package/fesm2022/novo-elements-utils.mjs.map +1 -1
  68. package/package.json +1 -1
  69. package/services/data-provider/ArrayCollection.d.ts +0 -10
  70. package/services/data-provider/Collection.d.ts +0 -9
  71. package/styles/content/forms.scss +0 -40
  72. package/styles/content/links.scss +0 -1
  73. package/styles/content/misc.scss +0 -1
  74. package/utils/Helpers.d.ts +6 -2
  75. 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.$destroy = new ReplaySubject(1);
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.registerChildren();
21
- this.mutationObserver.observe(this.element, { childList: true });
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.$destroy.next();
25
- this.$destroy.complete();
37
+ this.trackedItems?.forEach(item => {
38
+ item.removeListeners();
39
+ });
26
40
  }
27
41
  registerChildren() {
28
- if (this.items && this.items.length !== this.element.children.length) {
29
- 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`);
30
- }
31
- this.trackedItems = [];
32
- for (let i = 0; i < this.element.children.length; i++) {
33
- this.registerChild(this.element.children[i], i);
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 listeners = [
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 => !removedNodes.has(item.element));
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
- this.applyTempSort(this.pickedUp, target);
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":"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"}
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":"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"}
@@ -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 }); }