cmat 0.0.78 → 0.0.80
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/fesm2022/cmat-components-adapter.mjs +9 -46
- package/fesm2022/cmat-components-adapter.mjs.map +1 -1
- package/fesm2022/cmat-components-breadcrumb.mjs +104 -205
- package/fesm2022/cmat-components-breadcrumb.mjs.map +1 -1
- package/fesm2022/cmat-components-card.mjs +4 -8
- package/fesm2022/cmat-components-card.mjs.map +1 -1
- package/fesm2022/cmat-components-carousel.mjs +21 -21
- package/fesm2022/cmat-components-carousel.mjs.map +1 -1
- package/fesm2022/cmat-components-cascade.mjs +18 -24
- package/fesm2022/cmat-components-cascade.mjs.map +1 -1
- package/fesm2022/cmat-components-chip-input.mjs +21 -21
- package/fesm2022/cmat-components-chip-input.mjs.map +1 -1
- package/fesm2022/cmat-components-code-editor.mjs +4 -22
- package/fesm2022/cmat-components-code-editor.mjs.map +1 -1
- package/fesm2022/cmat-components-custom-formly.mjs +181 -245
- package/fesm2022/cmat-components-custom-formly.mjs.map +1 -1
- package/fesm2022/cmat-components-date-range.mjs +12 -184
- package/fesm2022/cmat-components-date-range.mjs.map +1 -1
- package/fesm2022/cmat-components-date-time-display.mjs +3 -15
- package/fesm2022/cmat-components-date-time-display.mjs.map +1 -1
- package/fesm2022/cmat-components-drawer.mjs +10 -100
- package/fesm2022/cmat-components-drawer.mjs.map +1 -1
- package/fesm2022/cmat-components-empty-state.mjs +4 -25
- package/fesm2022/cmat-components-empty-state.mjs.map +1 -1
- package/fesm2022/cmat-components-file-preview.mjs +3 -21
- package/fesm2022/cmat-components-file-preview.mjs.map +1 -1
- package/fesm2022/cmat-components-filter-toolbar.mjs +7 -50
- package/fesm2022/cmat-components-filter-toolbar.mjs.map +1 -1
- package/fesm2022/cmat-components-form-actions.mjs +3 -9
- package/fesm2022/cmat-components-form-actions.mjs.map +1 -1
- package/fesm2022/cmat-components-fullscreen.mjs +4 -4
- package/fesm2022/cmat-components-fullscreen.mjs.map +1 -1
- package/fesm2022/cmat-components-highlight.mjs +6 -32
- package/fesm2022/cmat-components-highlight.mjs.map +1 -1
- package/fesm2022/cmat-components-image-viewer.mjs +12 -24
- package/fesm2022/cmat-components-image-viewer.mjs.map +1 -1
- package/fesm2022/cmat-components-inline-loading.mjs +3 -12
- package/fesm2022/cmat-components-inline-loading.mjs.map +1 -1
- package/fesm2022/cmat-components-json-editor.mjs +11 -16
- package/fesm2022/cmat-components-json-editor.mjs.map +1 -1
- package/fesm2022/cmat-components-knob-input.mjs +24 -18
- package/fesm2022/cmat-components-knob-input.mjs.map +1 -1
- package/fesm2022/cmat-components-masonry.mjs +8 -17
- package/fesm2022/cmat-components-masonry.mjs.map +1 -1
- package/fesm2022/cmat-components-material-color-picker.mjs +13 -34
- package/fesm2022/cmat-components-material-color-picker.mjs.map +1 -1
- package/fesm2022/cmat-components-material-datetimepicker.mjs +80 -436
- package/fesm2022/cmat-components-material-datetimepicker.mjs.map +1 -1
- package/fesm2022/cmat-components-navigation.mjs +266 -816
- package/fesm2022/cmat-components-navigation.mjs.map +1 -1
- package/fesm2022/cmat-components-opt-input.mjs +7 -10
- package/fesm2022/cmat-components-opt-input.mjs.map +1 -1
- package/fesm2022/cmat-components-org-chart.mjs +11 -11
- package/fesm2022/cmat-components-org-chart.mjs.map +1 -1
- package/fesm2022/cmat-components-page-header.mjs +8 -19
- package/fesm2022/cmat-components-page-header.mjs.map +1 -1
- package/fesm2022/cmat-components-pagination.mjs +113 -108
- package/fesm2022/cmat-components-pagination.mjs.map +1 -1
- package/fesm2022/cmat-components-password-strength.mjs +13 -16
- package/fesm2022/cmat-components-password-strength.mjs.map +1 -1
- package/fesm2022/cmat-components-popover.mjs +15 -151
- package/fesm2022/cmat-components-popover.mjs.map +1 -1
- package/fesm2022/cmat-components-progress-bar.mjs +16 -26
- package/fesm2022/cmat-components-progress-bar.mjs.map +1 -1
- package/fesm2022/cmat-components-qrcode.mjs +5 -11
- package/fesm2022/cmat-components-qrcode.mjs.map +1 -1
- package/fesm2022/cmat-components-rating.mjs +14 -14
- package/fesm2022/cmat-components-rating.mjs.map +1 -1
- package/fesm2022/cmat-components-rich-text-editor.mjs +4 -25
- package/fesm2022/cmat-components-rich-text-editor.mjs.map +1 -1
- package/fesm2022/cmat-components-select-search.mjs +51 -79
- package/fesm2022/cmat-components-select-search.mjs.map +1 -1
- package/fesm2022/cmat-components-select-table.mjs +204 -162
- package/fesm2022/cmat-components-select-table.mjs.map +1 -1
- package/fesm2022/cmat-components-select-tree.mjs +142 -97
- package/fesm2022/cmat-components-select-tree.mjs.map +1 -1
- package/fesm2022/cmat-components-skeleton.mjs +4 -22
- package/fesm2022/cmat-components-skeleton.mjs.map +1 -1
- package/fesm2022/cmat-components-speed-dial.mjs +14 -19
- package/fesm2022/cmat-components-speed-dial.mjs.map +1 -1
- package/fesm2022/cmat-components-status-tag.mjs +3 -18
- package/fesm2022/cmat-components-status-tag.mjs.map +1 -1
- package/fesm2022/cmat-components-table-toolbar.mjs +3 -15
- package/fesm2022/cmat-components-table-toolbar.mjs.map +1 -1
- package/fesm2022/cmat-components-timeline.mjs +18 -21
- package/fesm2022/cmat-components-timeline.mjs.map +1 -1
- package/fesm2022/cmat-components-toast.mjs +20 -20
- package/fesm2022/cmat-components-toast.mjs.map +1 -1
- package/fesm2022/cmat-components-transfer-picker.mjs +159 -123
- package/fesm2022/cmat-components-transfer-picker.mjs.map +1 -1
- package/fesm2022/cmat-components-treetable.mjs +17 -19
- package/fesm2022/cmat-components-treetable.mjs.map +1 -1
- package/fesm2022/cmat-components-upload.mjs +35 -57
- package/fesm2022/cmat-components-upload.mjs.map +1 -1
- package/fesm2022/cmat-components-x6-angular-shape.mjs +0 -4
- package/fesm2022/cmat-components-x6-angular-shape.mjs.map +1 -1
- package/fesm2022/cmat-directives-animate-on-scroll.mjs +6 -27
- package/fesm2022/cmat-directives-animate-on-scroll.mjs.map +1 -1
- package/fesm2022/cmat-directives-arrow-cursor.mjs +7 -9
- package/fesm2022/cmat-directives-arrow-cursor.mjs.map +1 -1
- package/fesm2022/cmat-directives-autofocus.mjs +3 -3
- package/fesm2022/cmat-directives-data-exporter.mjs +24 -33
- package/fesm2022/cmat-directives-data-exporter.mjs.map +1 -1
- package/fesm2022/cmat-directives-debounce.mjs +14 -17
- package/fesm2022/cmat-directives-debounce.mjs.map +1 -1
- package/fesm2022/cmat-directives-digit-only.mjs +6 -23
- package/fesm2022/cmat-directives-digit-only.mjs.map +1 -1
- package/fesm2022/cmat-directives-equal-validator.mjs +3 -3
- package/fesm2022/cmat-directives-seamless-auto-scroll.mjs +4 -11
- package/fesm2022/cmat-directives-seamless-auto-scroll.mjs.map +1 -1
- package/fesm2022/cmat-lib-mock-api.mjs +6 -43
- package/fesm2022/cmat-lib-mock-api.mjs.map +1 -1
- package/fesm2022/cmat-pipes-bytes.mjs +3 -3
- package/fesm2022/cmat-pipes-date-format.mjs +3 -3
- package/fesm2022/cmat-pipes-find-by-key.mjs +3 -5
- package/fesm2022/cmat-pipes-find-by-key.mjs.map +1 -1
- package/fesm2022/cmat-pipes-group-by.mjs +3 -3
- package/fesm2022/cmat-pipes-keys.mjs +3 -3
- package/fesm2022/cmat-pipes-secure.mjs +8 -12
- package/fesm2022/cmat-pipes-secure.mjs.map +1 -1
- package/fesm2022/cmat-pipes-uppercase.mjs +3 -3
- package/fesm2022/cmat-services-alert.mjs +3 -3
- package/fesm2022/cmat-services-config.mjs +50 -26
- package/fesm2022/cmat-services-config.mjs.map +1 -1
- package/fesm2022/cmat-services-confirmation.mjs +9 -11
- package/fesm2022/cmat-services-confirmation.mjs.map +1 -1
- package/fesm2022/cmat-services-data.mjs +56 -101
- package/fesm2022/cmat-services-data.mjs.map +1 -1
- package/fesm2022/cmat-services-export-as.mjs +4 -32
- package/fesm2022/cmat-services-export-as.mjs.map +1 -1
- package/fesm2022/cmat-services-loading.mjs +49 -40
- package/fesm2022/cmat-services-loading.mjs.map +1 -1
- package/fesm2022/cmat-services-local-storage.mjs +3 -3
- package/fesm2022/cmat-services-media-watcher.mjs +19 -25
- package/fesm2022/cmat-services-media-watcher.mjs.map +1 -1
- package/fesm2022/cmat-services-platform.mjs +3 -10
- package/fesm2022/cmat-services-platform.mjs.map +1 -1
- package/fesm2022/cmat-services-splash-screen.mjs +8 -13
- package/fesm2022/cmat-services-splash-screen.mjs.map +1 -1
- package/fesm2022/cmat-services-title.mjs +8 -12
- package/fesm2022/cmat-services-title.mjs.map +1 -1
- package/fesm2022/cmat-services-translation.mjs +3 -3
- package/fesm2022/cmat-services-utils.mjs +5 -27
- package/fesm2022/cmat-services-utils.mjs.map +1 -1
- package/fesm2022/cmat-validators.mjs +0 -8
- package/fesm2022/cmat-validators.mjs.map +1 -1
- package/fesm2022/cmat.mjs +3477 -3795
- package/fesm2022/cmat.mjs.map +1 -1
- package/package.json +1 -1
- package/tailwind/plugins/helpers.js +1 -10
- package/tailwind/plugins/scrollbar/index.js +0 -1
- package/tailwind/plugins/scrollbar/typedefs.js +1 -7
- package/tailwind/plugins/scrollbar/utilities.js +9 -58
- package/tailwind/plugins/scrollbar/variants.js +2 -17
- package/tailwind/plugins/theming.js +1 -57
- package/tailwind/utils/generate-contrasts.js +1 -12
- package/tailwind/utils/generate-palette.js +1 -32
- package/types/cmat-components-adapter.d.ts +0 -25
- package/types/cmat-components-breadcrumb.d.ts +25 -175
- package/types/cmat-components-carousel.d.ts +2 -20
- package/types/cmat-components-cascade.d.ts +4 -4
- package/types/cmat-components-chip-input.d.ts +4 -3
- package/types/cmat-components-code-editor.d.ts +0 -18
- package/types/cmat-components-custom-formly.d.ts +30 -37
- package/types/cmat-components-date-range.d.ts +1 -72
- package/types/cmat-components-date-time-display.d.ts +0 -15
- package/types/cmat-components-drawer.d.ts +2 -44
- package/types/cmat-components-empty-state.d.ts +0 -21
- package/types/cmat-components-file-preview.d.ts +0 -18
- package/types/cmat-components-filter-toolbar.d.ts +3 -43
- package/types/cmat-components-form-actions.d.ts +0 -6
- package/types/cmat-components-image-viewer.d.ts +5 -18
- package/types/cmat-components-inline-loading.d.ts +0 -9
- package/types/cmat-components-json-editor.d.ts +0 -1
- package/types/cmat-components-knob-input.d.ts +3 -3
- package/types/cmat-components-masonry.d.ts +1 -2
- package/types/cmat-components-material-color-picker.d.ts +1 -2
- package/types/cmat-components-material-datetimepicker.d.ts +6 -272
- package/types/cmat-components-navigation.d.ts +34 -171
- package/types/cmat-components-opt-input.d.ts +1 -1
- package/types/cmat-components-page-header.d.ts +2 -16
- package/types/cmat-components-pagination.d.ts +26 -27
- package/types/cmat-components-password-strength.d.ts +1 -2
- package/types/cmat-components-popover.d.ts +1 -110
- package/types/cmat-components-progress-bar.d.ts +9 -11
- package/types/cmat-components-rating.d.ts +6 -7
- package/types/cmat-components-rich-text-editor.d.ts +0 -21
- package/types/cmat-components-select-search.d.ts +4 -20
- package/types/cmat-components-select-table.d.ts +24 -12
- package/types/cmat-components-select-tree.d.ts +29 -29
- package/types/cmat-components-skeleton.d.ts +0 -18
- package/types/cmat-components-speed-dial.d.ts +1 -2
- package/types/cmat-components-status-tag.d.ts +0 -15
- package/types/cmat-components-table-toolbar.d.ts +0 -12
- package/types/cmat-components-timeline.d.ts +3 -4
- package/types/cmat-components-toast.d.ts +2 -2
- package/types/cmat-components-transfer-picker.d.ts +42 -36
- package/types/cmat-components-treetable.d.ts +3 -4
- package/types/cmat-components-upload.d.ts +12 -17
- package/types/cmat-components-x6-angular-shape.d.ts +0 -1
- package/types/cmat-directives-arrow-cursor.d.ts +1 -1
- package/types/cmat-directives-debounce.d.ts +3 -4
- package/types/cmat-pipes-secure.d.ts +3 -4
- package/types/cmat-services-config.d.ts +35 -13
- package/types/cmat-services-data.d.ts +13 -12
- package/types/cmat-services-export-as.d.ts +0 -22
- package/types/cmat-services-loading.d.ts +15 -10
- package/types/cmat-services-media-watcher.d.ts +10 -13
- package/types/cmat-services-splash-screen.d.ts +2 -4
- package/types/cmat-services-title.d.ts +3 -5
- package/types/cmat.d.ts +733 -1391
|
@@ -4,15 +4,12 @@ import { Directionality } from '@angular/cdk/bidi';
|
|
|
4
4
|
import { coerceBooleanProperty } from '@angular/cdk/coercion';
|
|
5
5
|
import { NgStyle, NgClass } from '@angular/common';
|
|
6
6
|
import * as i0 from '@angular/core';
|
|
7
|
-
import { EventEmitter, inject, ElementRef, TemplateRef, Input, HostBinding, ViewChild, Output, ViewEncapsulation, ChangeDetectionStrategy, Component, ViewContainerRef,
|
|
7
|
+
import { EventEmitter, inject, ElementRef, TemplateRef, Input, HostBinding, ViewChild, Output, ViewEncapsulation, ChangeDetectionStrategy, Component, ViewContainerRef, DestroyRef, HostListener, Directive } from '@angular/core';
|
|
8
8
|
import { Overlay, OverlayConfig } from '@angular/cdk/overlay';
|
|
9
9
|
import { TemplatePortal } from '@angular/cdk/portal';
|
|
10
|
+
import { takeUntilDestroyed } from '@angular/core/rxjs-interop';
|
|
10
11
|
import { Subject } from 'rxjs';
|
|
11
|
-
import { takeUntil } from 'rxjs/operators';
|
|
12
12
|
|
|
13
|
-
/**
|
|
14
|
-
* Throws an exception for the case when popover trigger doesn't have a valid cmat-popover instance
|
|
15
|
-
*/
|
|
16
13
|
function throwCmatPopoverMissingError() {
|
|
17
14
|
throw Error(`cmat-popover-trigger: must pass in an cmat-popover instance.
|
|
18
15
|
|
|
@@ -20,18 +17,10 @@ function throwCmatPopoverMissingError() {
|
|
|
20
17
|
<cmat-popover #popover="cmatPopover"></cmat-popover>
|
|
21
18
|
<button [cmatPopoverTriggerFor]="popover"></button>`);
|
|
22
19
|
}
|
|
23
|
-
/**
|
|
24
|
-
* Throws an exception for the case when popover's cmatPopoverPosition[0] value isn't valid.
|
|
25
|
-
* In other words, it doesn't match 'above', 'below', 'before' or 'after'.
|
|
26
|
-
*/
|
|
27
20
|
function throwCmatPopoverInvalidPositionStart() {
|
|
28
21
|
throw Error(`cmatPopoverPosition[0] value must be either 'above', 'below', 'before' or 'after'.
|
|
29
22
|
Example: <cmat-popover [position]="['below', 'after']" #popover="cmatPopover"></cmat-popover>`);
|
|
30
23
|
}
|
|
31
|
-
/**
|
|
32
|
-
* Throws an exception for the case when popover's cmatPopoverPosition[1] value isn't valid.
|
|
33
|
-
* In other words, it doesn't match 'above', 'below', 'before', 'after' or 'center'.
|
|
34
|
-
*/
|
|
35
24
|
function throwCmatPopoverInvalidPositionEnd() {
|
|
36
25
|
throw Error(`cmatPopoverPosition[1] value must be either 'above', 'below', 'before', 'after' or 'center'.
|
|
37
26
|
Example: <cmat-popover [position]="['below', 'after']" #popover="cmatPopover"></cmat-popover>`);
|
|
@@ -40,26 +29,17 @@ function throwCmatPopoverInvalidPositionEnd() {
|
|
|
40
29
|
/* eslint-disable @typescript-eslint/naming-convention */
|
|
41
30
|
class CmatPopoverComponent {
|
|
42
31
|
constructor() {
|
|
43
|
-
/** Event emitted when the popover is closed. */
|
|
44
32
|
this.closed = new EventEmitter();
|
|
45
33
|
this.role = 'dialog';
|
|
46
|
-
/** Config object to be passed into the popover's arrow ngStyle */
|
|
47
34
|
this.popoverPanelStyles = {};
|
|
48
|
-
/** Config object to be passed into the popover's arrow ngStyle */
|
|
49
35
|
this.popoverArrowStyles = {};
|
|
50
|
-
/** Config object to be passed into the popover's content ngStyle */
|
|
51
36
|
this.popoverContentStyles = {};
|
|
52
|
-
/** Whether popover's `targetElement` is defined */
|
|
53
37
|
this.containerPositioning = false;
|
|
54
|
-
/** Closing disabled on popover */
|
|
55
38
|
this.closeDisabled = false;
|
|
56
|
-
/** Config object to be passed into the popover's ngClass */
|
|
57
39
|
this.classList = {};
|
|
58
|
-
/** Emits the current animation state whenever it changes. */
|
|
59
40
|
this._onAnimationStateChange = new EventEmitter();
|
|
60
41
|
this._dir = inject(Directionality, { optional: true });
|
|
61
42
|
this._elementRef = inject(ElementRef);
|
|
62
|
-
/** Settings for popover, view setters and getters for more detail */
|
|
63
43
|
this._position = ['below', 'after'];
|
|
64
44
|
this._triggerEvent = 'hover';
|
|
65
45
|
this._scrollStrategy = 'reposition';
|
|
@@ -81,7 +61,6 @@ class CmatPopoverComponent {
|
|
|
81
61
|
get position() {
|
|
82
62
|
return this._position;
|
|
83
63
|
}
|
|
84
|
-
/** Position of the popover. */
|
|
85
64
|
set position(value) {
|
|
86
65
|
if (!['before', 'after', 'above', 'below'].includes(value[0])) {
|
|
87
66
|
throwCmatPopoverInvalidPositionStart();
|
|
@@ -92,7 +71,6 @@ class CmatPopoverComponent {
|
|
|
92
71
|
this._position = value;
|
|
93
72
|
this.setPositionClasses();
|
|
94
73
|
}
|
|
95
|
-
/** Popover trigger event */
|
|
96
74
|
// eslint-disable-next-line @typescript-eslint/member-ordering
|
|
97
75
|
get triggerEvent() {
|
|
98
76
|
return this._triggerEvent;
|
|
@@ -100,7 +78,6 @@ class CmatPopoverComponent {
|
|
|
100
78
|
set triggerEvent(value) {
|
|
101
79
|
this._triggerEvent = value;
|
|
102
80
|
}
|
|
103
|
-
/** Popover scroll strategy */
|
|
104
81
|
// eslint-disable-next-line @typescript-eslint/member-ordering
|
|
105
82
|
get scrollStrategy() {
|
|
106
83
|
return this._scrollStrategy;
|
|
@@ -108,7 +85,6 @@ class CmatPopoverComponent {
|
|
|
108
85
|
set scrollStrategy(value) {
|
|
109
86
|
this._scrollStrategy = value;
|
|
110
87
|
}
|
|
111
|
-
/** Popover enter delay */
|
|
112
88
|
// eslint-disable-next-line @typescript-eslint/member-ordering
|
|
113
89
|
get enterDelay() {
|
|
114
90
|
return this._enterDelay;
|
|
@@ -116,7 +92,6 @@ class CmatPopoverComponent {
|
|
|
116
92
|
set enterDelay(value) {
|
|
117
93
|
this._enterDelay = value;
|
|
118
94
|
}
|
|
119
|
-
/** Popover leave delay */
|
|
120
95
|
// eslint-disable-next-line @typescript-eslint/member-ordering
|
|
121
96
|
get leaveDelay() {
|
|
122
97
|
return this._leaveDelay;
|
|
@@ -124,7 +99,6 @@ class CmatPopoverComponent {
|
|
|
124
99
|
set leaveDelay(value) {
|
|
125
100
|
this._leaveDelay = value;
|
|
126
101
|
}
|
|
127
|
-
/** Popover target offset x */
|
|
128
102
|
// eslint-disable-next-line @typescript-eslint/member-ordering
|
|
129
103
|
get xOffset() {
|
|
130
104
|
return this._panelOffsetX;
|
|
@@ -132,7 +106,6 @@ class CmatPopoverComponent {
|
|
|
132
106
|
set xOffset(value) {
|
|
133
107
|
this._panelOffsetX = value;
|
|
134
108
|
}
|
|
135
|
-
/** Popover target offset y */
|
|
136
109
|
// eslint-disable-next-line @typescript-eslint/member-ordering
|
|
137
110
|
get yOffset() {
|
|
138
111
|
return this._panelOffsetY;
|
|
@@ -140,7 +113,6 @@ class CmatPopoverComponent {
|
|
|
140
113
|
set yOffset(value) {
|
|
141
114
|
this._panelOffsetY = value;
|
|
142
115
|
}
|
|
143
|
-
/** Popover arrow offset x */
|
|
144
116
|
// eslint-disable-next-line @typescript-eslint/member-ordering
|
|
145
117
|
get arrowOffsetX() {
|
|
146
118
|
return this._arrowOffsetX;
|
|
@@ -148,7 +120,6 @@ class CmatPopoverComponent {
|
|
|
148
120
|
set arrowOffsetX(value) {
|
|
149
121
|
this._arrowOffsetX = value;
|
|
150
122
|
}
|
|
151
|
-
/** Popover arrow offset y */
|
|
152
123
|
// eslint-disable-next-line @typescript-eslint/member-ordering
|
|
153
124
|
get arrowOffsetY() {
|
|
154
125
|
return this._arrowOffsetY;
|
|
@@ -156,7 +127,6 @@ class CmatPopoverComponent {
|
|
|
156
127
|
set arrowOffsetY(value) {
|
|
157
128
|
this._arrowOffsetY = value;
|
|
158
129
|
}
|
|
159
|
-
/** Popover arrow width */
|
|
160
130
|
// eslint-disable-next-line @typescript-eslint/member-ordering
|
|
161
131
|
get arrowWidth() {
|
|
162
132
|
return this._arrowWidth;
|
|
@@ -164,7 +134,6 @@ class CmatPopoverComponent {
|
|
|
164
134
|
set arrowWidth(value) {
|
|
165
135
|
this._arrowWidth = value;
|
|
166
136
|
}
|
|
167
|
-
/** Popover arrow height */
|
|
168
137
|
// eslint-disable-next-line @typescript-eslint/member-ordering
|
|
169
138
|
get arrowHeight() {
|
|
170
139
|
return this._arrowHeight;
|
|
@@ -172,7 +141,6 @@ class CmatPopoverComponent {
|
|
|
172
141
|
set arrowHeight(value) {
|
|
173
142
|
this._arrowHeight = value;
|
|
174
143
|
}
|
|
175
|
-
/** Popover close on container click */
|
|
176
144
|
// eslint-disable-next-line @typescript-eslint/member-ordering
|
|
177
145
|
get closeOnPanelClick() {
|
|
178
146
|
return this._closeOnPanelClick;
|
|
@@ -180,7 +148,6 @@ class CmatPopoverComponent {
|
|
|
180
148
|
set closeOnPanelClick(value) {
|
|
181
149
|
this._closeOnPanelClick = coerceBooleanProperty(value);
|
|
182
150
|
}
|
|
183
|
-
/** Popover close on backdrop click */
|
|
184
151
|
// eslint-disable-next-line @typescript-eslint/member-ordering
|
|
185
152
|
get closeOnBackdropClick() {
|
|
186
153
|
return this._closeOnBackdropClick;
|
|
@@ -188,7 +155,6 @@ class CmatPopoverComponent {
|
|
|
188
155
|
set closeOnBackdropClick(value) {
|
|
189
156
|
this._closeOnBackdropClick = coerceBooleanProperty(value);
|
|
190
157
|
}
|
|
191
|
-
/** Disable animations of popover and all child elements */
|
|
192
158
|
// eslint-disable-next-line @typescript-eslint/member-ordering
|
|
193
159
|
get disableAnimation() {
|
|
194
160
|
return this._disableAnimation;
|
|
@@ -196,7 +162,6 @@ class CmatPopoverComponent {
|
|
|
196
162
|
set disableAnimation(value) {
|
|
197
163
|
this._disableAnimation = coerceBooleanProperty(value);
|
|
198
164
|
}
|
|
199
|
-
/** Popover focus trap using cdkTrapFocus */
|
|
200
165
|
// eslint-disable-next-line @typescript-eslint/member-ordering
|
|
201
166
|
get focusTrapEnabled() {
|
|
202
167
|
return this._focusTrapEnabled;
|
|
@@ -204,7 +169,6 @@ class CmatPopoverComponent {
|
|
|
204
169
|
set focusTrapEnabled(value) {
|
|
205
170
|
this._focusTrapEnabled = coerceBooleanProperty(value);
|
|
206
171
|
}
|
|
207
|
-
/** Popover focus trap auto capture using cdkTrapFocusAutoCapture */
|
|
208
172
|
// eslint-disable-next-line @typescript-eslint/member-ordering
|
|
209
173
|
get focusTrapAutoCaptureEnabled() {
|
|
210
174
|
return this._focusTrapAutoCaptureEnabled;
|
|
@@ -212,13 +176,6 @@ class CmatPopoverComponent {
|
|
|
212
176
|
set focusTrapAutoCaptureEnabled(value) {
|
|
213
177
|
this._focusTrapAutoCaptureEnabled = coerceBooleanProperty(value);
|
|
214
178
|
}
|
|
215
|
-
/**
|
|
216
|
-
* This method takes classes set on the host md-popover element and applies them on the
|
|
217
|
-
* popover template that displays in the overlay container. Otherwise, it's difficult
|
|
218
|
-
* to style the containing popover from outside the component.
|
|
219
|
-
*
|
|
220
|
-
* @param classes list of class names
|
|
221
|
-
*/
|
|
222
179
|
set panelClass(classes) {
|
|
223
180
|
if (classes?.length) {
|
|
224
181
|
this.classList = classes.split(' ').reduce((obj, className) => {
|
|
@@ -233,7 +190,6 @@ class CmatPopoverComponent {
|
|
|
233
190
|
this.emitCloseEvent();
|
|
234
191
|
this.closed.complete();
|
|
235
192
|
}
|
|
236
|
-
/** Handle a keyboard event from the popover, delegating to the appropriate action. */
|
|
237
193
|
handleKeydown(event) {
|
|
238
194
|
switch (event.code) {
|
|
239
195
|
case 'Escape':
|
|
@@ -241,42 +197,28 @@ class CmatPopoverComponent {
|
|
|
241
197
|
return;
|
|
242
198
|
}
|
|
243
199
|
}
|
|
244
|
-
/**
|
|
245
|
-
* This emits a close event to which the trigger is subscribed. When emitted, the
|
|
246
|
-
* trigger will close the popover.
|
|
247
|
-
*/
|
|
248
200
|
emitCloseEvent() {
|
|
249
201
|
this.closed.emit();
|
|
250
202
|
}
|
|
251
|
-
/** Close popover on click if closeOnPanelClick is true */
|
|
252
203
|
onClick() {
|
|
253
204
|
if (this.closeOnPanelClick) {
|
|
254
205
|
this.emitCloseEvent();
|
|
255
206
|
}
|
|
256
207
|
}
|
|
257
|
-
/**
|
|
258
|
-
* TODO: Refactor when @angular/cdk includes feature I mentioned on github see link below.
|
|
259
|
-
* https://github.com/angular/material2/pull/5493#issuecomment-313085323
|
|
260
|
-
*/
|
|
261
|
-
/** Disables close of popover when leaving trigger element and mouse over the popover */
|
|
262
208
|
onMouseOver() {
|
|
263
209
|
if (this.triggerEvent === 'hover') {
|
|
264
210
|
this.closeDisabled = true;
|
|
265
211
|
}
|
|
266
212
|
}
|
|
267
213
|
onFocus() {
|
|
268
|
-
|
|
214
|
+
return;
|
|
269
215
|
}
|
|
270
|
-
/** Enables close of popover when mouse leaving popover element */
|
|
271
216
|
onMouseLeave() {
|
|
272
217
|
if (this.triggerEvent === 'hover') {
|
|
273
218
|
this.closeDisabled = false;
|
|
274
219
|
this.emitCloseEvent();
|
|
275
220
|
}
|
|
276
221
|
}
|
|
277
|
-
// TODO: Refactor how styles are set and updated on the component, use best practices.
|
|
278
|
-
// TODO: If arrow left and right positioning is requested, see if flex direction can be used to work with order.
|
|
279
|
-
/** Sets the current styles for the popover to allow for dynamically changing settings */
|
|
280
222
|
setCurrentStyles(pos = this.position) {
|
|
281
223
|
const left = pos[1] === 'after'
|
|
282
224
|
? `${this.arrowOffsetX - this.arrowWidth / 2}px`
|
|
@@ -301,10 +243,6 @@ class CmatPopoverComponent {
|
|
|
301
243
|
bottom,
|
|
302
244
|
};
|
|
303
245
|
}
|
|
304
|
-
/**
|
|
305
|
-
* It's necessary to set position-based classes to ensure the popover panel animation
|
|
306
|
-
* folds out from the correct direction.
|
|
307
|
-
*/
|
|
308
246
|
setPositionClasses(pos = this.position) {
|
|
309
247
|
this.classList['cmat-popover-before-above'] = pos[0] === 'before' && pos[1] === 'above';
|
|
310
248
|
this.classList['cmat-popover-before-center'] = pos[0] === 'before' && pos[1] === 'center';
|
|
@@ -319,10 +257,10 @@ class CmatPopoverComponent {
|
|
|
319
257
|
this.classList['cmat-popover-below-center'] = pos[0] === 'below' && pos[1] === 'center';
|
|
320
258
|
this.classList['cmat-popover-below-after'] = pos[0] === 'below' && pos[1] === 'after';
|
|
321
259
|
}
|
|
322
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.
|
|
323
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "21.2.
|
|
260
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: CmatPopoverComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
261
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "21.2.9", type: CmatPopoverComponent, isStandalone: true, selector: "cmat-popover", inputs: { popoverPanelStyles: "popoverPanelStyles", popoverArrowStyles: "popoverArrowStyles", popoverContentStyles: "popoverContentStyles", position: "position", triggerEvent: "triggerEvent", scrollStrategy: "scrollStrategy", enterDelay: "enterDelay", leaveDelay: "leaveDelay", xOffset: "xOffset", yOffset: "yOffset", arrowOffsetX: "arrowOffsetX", arrowOffsetY: "arrowOffsetY", arrowWidth: "arrowWidth", arrowHeight: "arrowHeight", closeOnPanelClick: "closeOnPanelClick", closeOnBackdropClick: "closeOnBackdropClick", disableAnimation: "disableAnimation", focusTrapEnabled: "focusTrapEnabled", focusTrapAutoCaptureEnabled: "focusTrapAutoCaptureEnabled", panelClass: "panelClass" }, outputs: { closed: "closed" }, host: { properties: { "attr.role": "this.role" } }, viewQueries: [{ propertyName: "templateRef", first: true, predicate: TemplateRef, descendants: true }], exportAs: ["cmatPopover"], ngImport: i0, template: "<ng-template>\r\n <div class=\"cmat-popover-panel shadow\" role=\"dialog\" [ngClass]=\"classList\" [ngStyle]=\"popoverPanelStyles\"\r\n [class.zoom-in-animation]=\"!disableAnimation\" (keydown)=\"handleKeydown($event)\" (click)=\"onClick()\"\r\n (focus)=\"onFocus()\" (mouseover)=\"onMouseOver()\" (mouseleave)=\"onMouseLeave()\">\r\n <div class=\"cmat-popover-direction-arrow\" [ngStyle]=\"popoverArrowStyles\"></div>\r\n <div class=\"cmat-popover-content\" [ngStyle]=\"popoverContentStyles\" [cdkTrapFocus]=\"focusTrapEnabled\"\r\n [cdkTrapFocusAutoCapture]=\"focusTrapAutoCaptureEnabled\">\r\n <ng-content></ng-content>\r\n </div>\r\n </div>\r\n</ng-template>", styles: [".cmat-popover-panel{max-height:calc(100vh - 48px);padding:.5rem;border-radius:.5rem;font-size:1rem;border-top-width:1px;transform:scale(1)}.cmat-popover-panel[class*=cmat-popover-below]{border-top-width:0;margin-top:calc(.5em + 2px)}.cmat-popover-panel[class*=cmat-popover-above]{margin-bottom:calc(.5em + 2px)}.cmat-popover-panel[class*=cmat-popover-before]{margin-right:calc(.5em + 2px)}[dir=rtl] .cmat-popover-panel[class*=cmat-popover-before]{margin-right:auto;margin-left:calc(.5em + 2px)}.cmat-popover-panel[class*=cmat-popover-after]{margin-left:calc(.5em + 2px)}[dir=rtl] .cmat-popover-panel[class*=cmat-popover-after]{margin-left:auto;margin-right:calc(.5em + 2px)}.cmat-popover-direction-arrow{position:absolute}.cmat-popover-direction-arrow:before,.cmat-popover-direction-arrow:after{position:absolute;display:inline-block;border-style:solid;content:\"\"}.cmat-popover-direction-arrow:before{border-width:.5em;border-color:var(--cmat-divider)}.cmat-popover-direction-arrow:after{border-width:calc(.5em - 1px);border-color:var(--cmat-bg-card)}[class*=cmat-popover-below] .cmat-popover-direction-arrow,[class*=cmat-popover-above] .cmat-popover-direction-arrow{width:1em}[class*=cmat-popover-below] .cmat-popover-direction-arrow:after,[class*=cmat-popover-above] .cmat-popover-direction-arrow:after{left:1px}[dir=rtl] [class*=cmat-popover-below] .cmat-popover-direction-arrow:after,[dir=rtl] [class*=cmat-popover-above] .cmat-popover-direction-arrow:after{right:1px;left:auto}[class*=cmat-popover-below] .cmat-popover-direction-arrow:before,[class*=cmat-popover-below] .cmat-popover-direction-arrow:after,[class*=cmat-popover-above] .cmat-popover-direction-arrow:before,[class*=cmat-popover-above] .cmat-popover-direction-arrow:after{border-left-color:transparent;border-right-color:transparent}[class*=cmat-popover-below] .cmat-popover-direction-arrow{top:0}[class*=cmat-popover-below] .cmat-popover-direction-arrow:before,[class*=cmat-popover-below] .cmat-popover-direction-arrow:after{bottom:0;border-top-width:0}[class*=cmat-popover-above] .cmat-popover-direction-arrow{bottom:0}[class*=cmat-popover-above] .cmat-popover-direction-arrow:before,[class*=cmat-popover-above] .cmat-popover-direction-arrow:after{top:0;border-bottom-width:0}[class*=cmat-popover-before] .cmat-popover-direction-arrow,[class*=cmat-popover-after] .cmat-popover-direction-arrow{height:1em}[class*=cmat-popover-before] .cmat-popover-direction-arrow:after,[class*=cmat-popover-after] .cmat-popover-direction-arrow:after{top:1px}[class*=cmat-popover-before] .cmat-popover-direction-arrow:before,[class*=cmat-popover-before] .cmat-popover-direction-arrow:after,[class*=cmat-popover-after] .cmat-popover-direction-arrow:before,[class*=cmat-popover-after] .cmat-popover-direction-arrow:after{border-top-color:transparent;border-bottom-color:transparent}[class*=cmat-popover-before] .cmat-popover-direction-arrow{right:0}[class*=cmat-popover-before] .cmat-popover-direction-arrow:before,[class*=cmat-popover-before] .cmat-popover-direction-arrow:after{left:0;border-right-width:0}[dir=rtl] [class*=cmat-popover-before] .cmat-popover-direction-arrow{right:auto;left:0}[dir=rtl] [class*=cmat-popover-before] .cmat-popover-direction-arrow:before,[dir=rtl] [class*=cmat-popover-before] .cmat-popover-direction-arrow:after{left:auto;right:0;border-left-width:0}[dir=rtl] [class*=cmat-popover-before] .cmat-popover-direction-arrow:before{border-right-width:.5em}[dir=rtl] [class*=cmat-popover-before] .cmat-popover-direction-arrow:after{border-right-width:calc(.5em - 1px)}[class*=cmat-popover-after] .cmat-popover-direction-arrow{left:0}[class*=cmat-popover-after] .cmat-popover-direction-arrow:before,[class*=cmat-popover-after] .cmat-popover-direction-arrow:after{right:0;border-left-width:0}[dir=rtl] [class*=cmat-popover-after] .cmat-popover-direction-arrow{left:auto;right:0}[dir=rtl] [class*=cmat-popover-after] .cmat-popover-direction-arrow:before,[dir=rtl] [class*=cmat-popover-after] .cmat-popover-direction-arrow:after{right:auto;left:0;border-right-width:0}[dir=rtl] [class*=cmat-popover-after] .cmat-popover-direction-arrow:before{border-left-width:.5em}[dir=rtl] [class*=cmat-popover-after] .cmat-popover-direction-arrow:after{border-left-width:calc(.5em - 1px)}\n", ".zoom-in-animation{opacity:1;transform:scale(1);transition:all 225ms cubic-bezier(0,0,.2,1)}@starting-style{.zoom-in-animation{opacity:0;transform:scale(.5)}}.zoom-out-animation{opacity:0;transform:scale(.5);transition:all 195ms cubic-bezier(.4,0,1,1)}@starting-style{.zoom-out-animation{opacity:1;transform:scale(1)}}\n"], dependencies: [{ kind: "directive", type: NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "ngmodule", type: A11yModule }, { kind: "directive", type: i1.CdkTrapFocus, selector: "[cdkTrapFocus]", inputs: ["cdkTrapFocus", "cdkTrapFocusAutoCapture"], exportAs: ["cdkTrapFocus"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
|
|
324
262
|
}
|
|
325
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.
|
|
263
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: CmatPopoverComponent, decorators: [{
|
|
326
264
|
type: Component,
|
|
327
265
|
args: [{ selector: 'cmat-popover', changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, exportAs: 'cmatPopover', imports: [NgStyle, NgClass, A11yModule], template: "<ng-template>\r\n <div class=\"cmat-popover-panel shadow\" role=\"dialog\" [ngClass]=\"classList\" [ngStyle]=\"popoverPanelStyles\"\r\n [class.zoom-in-animation]=\"!disableAnimation\" (keydown)=\"handleKeydown($event)\" (click)=\"onClick()\"\r\n (focus)=\"onFocus()\" (mouseover)=\"onMouseOver()\" (mouseleave)=\"onMouseLeave()\">\r\n <div class=\"cmat-popover-direction-arrow\" [ngStyle]=\"popoverArrowStyles\"></div>\r\n <div class=\"cmat-popover-content\" [ngStyle]=\"popoverContentStyles\" [cdkTrapFocus]=\"focusTrapEnabled\"\r\n [cdkTrapFocusAutoCapture]=\"focusTrapAutoCaptureEnabled\">\r\n <ng-content></ng-content>\r\n </div>\r\n </div>\r\n</ng-template>", styles: [".cmat-popover-panel{max-height:calc(100vh - 48px);padding:.5rem;border-radius:.5rem;font-size:1rem;border-top-width:1px;transform:scale(1)}.cmat-popover-panel[class*=cmat-popover-below]{border-top-width:0;margin-top:calc(.5em + 2px)}.cmat-popover-panel[class*=cmat-popover-above]{margin-bottom:calc(.5em + 2px)}.cmat-popover-panel[class*=cmat-popover-before]{margin-right:calc(.5em + 2px)}[dir=rtl] .cmat-popover-panel[class*=cmat-popover-before]{margin-right:auto;margin-left:calc(.5em + 2px)}.cmat-popover-panel[class*=cmat-popover-after]{margin-left:calc(.5em + 2px)}[dir=rtl] .cmat-popover-panel[class*=cmat-popover-after]{margin-left:auto;margin-right:calc(.5em + 2px)}.cmat-popover-direction-arrow{position:absolute}.cmat-popover-direction-arrow:before,.cmat-popover-direction-arrow:after{position:absolute;display:inline-block;border-style:solid;content:\"\"}.cmat-popover-direction-arrow:before{border-width:.5em;border-color:var(--cmat-divider)}.cmat-popover-direction-arrow:after{border-width:calc(.5em - 1px);border-color:var(--cmat-bg-card)}[class*=cmat-popover-below] .cmat-popover-direction-arrow,[class*=cmat-popover-above] .cmat-popover-direction-arrow{width:1em}[class*=cmat-popover-below] .cmat-popover-direction-arrow:after,[class*=cmat-popover-above] .cmat-popover-direction-arrow:after{left:1px}[dir=rtl] [class*=cmat-popover-below] .cmat-popover-direction-arrow:after,[dir=rtl] [class*=cmat-popover-above] .cmat-popover-direction-arrow:after{right:1px;left:auto}[class*=cmat-popover-below] .cmat-popover-direction-arrow:before,[class*=cmat-popover-below] .cmat-popover-direction-arrow:after,[class*=cmat-popover-above] .cmat-popover-direction-arrow:before,[class*=cmat-popover-above] .cmat-popover-direction-arrow:after{border-left-color:transparent;border-right-color:transparent}[class*=cmat-popover-below] .cmat-popover-direction-arrow{top:0}[class*=cmat-popover-below] .cmat-popover-direction-arrow:before,[class*=cmat-popover-below] .cmat-popover-direction-arrow:after{bottom:0;border-top-width:0}[class*=cmat-popover-above] .cmat-popover-direction-arrow{bottom:0}[class*=cmat-popover-above] .cmat-popover-direction-arrow:before,[class*=cmat-popover-above] .cmat-popover-direction-arrow:after{top:0;border-bottom-width:0}[class*=cmat-popover-before] .cmat-popover-direction-arrow,[class*=cmat-popover-after] .cmat-popover-direction-arrow{height:1em}[class*=cmat-popover-before] .cmat-popover-direction-arrow:after,[class*=cmat-popover-after] .cmat-popover-direction-arrow:after{top:1px}[class*=cmat-popover-before] .cmat-popover-direction-arrow:before,[class*=cmat-popover-before] .cmat-popover-direction-arrow:after,[class*=cmat-popover-after] .cmat-popover-direction-arrow:before,[class*=cmat-popover-after] .cmat-popover-direction-arrow:after{border-top-color:transparent;border-bottom-color:transparent}[class*=cmat-popover-before] .cmat-popover-direction-arrow{right:0}[class*=cmat-popover-before] .cmat-popover-direction-arrow:before,[class*=cmat-popover-before] .cmat-popover-direction-arrow:after{left:0;border-right-width:0}[dir=rtl] [class*=cmat-popover-before] .cmat-popover-direction-arrow{right:auto;left:0}[dir=rtl] [class*=cmat-popover-before] .cmat-popover-direction-arrow:before,[dir=rtl] [class*=cmat-popover-before] .cmat-popover-direction-arrow:after{left:auto;right:0;border-left-width:0}[dir=rtl] [class*=cmat-popover-before] .cmat-popover-direction-arrow:before{border-right-width:.5em}[dir=rtl] [class*=cmat-popover-before] .cmat-popover-direction-arrow:after{border-right-width:calc(.5em - 1px)}[class*=cmat-popover-after] .cmat-popover-direction-arrow{left:0}[class*=cmat-popover-after] .cmat-popover-direction-arrow:before,[class*=cmat-popover-after] .cmat-popover-direction-arrow:after{right:0;border-left-width:0}[dir=rtl] [class*=cmat-popover-after] .cmat-popover-direction-arrow{left:auto;right:0}[dir=rtl] [class*=cmat-popover-after] .cmat-popover-direction-arrow:before,[dir=rtl] [class*=cmat-popover-after] .cmat-popover-direction-arrow:after{right:auto;left:0;border-right-width:0}[dir=rtl] [class*=cmat-popover-after] .cmat-popover-direction-arrow:before{border-left-width:.5em}[dir=rtl] [class*=cmat-popover-after] .cmat-popover-direction-arrow:after{border-left-width:calc(.5em - 1px)}\n", ".zoom-in-animation{opacity:1;transform:scale(1);transition:all 225ms cubic-bezier(0,0,.2,1)}@starting-style{.zoom-in-animation{opacity:0;transform:scale(.5)}}.zoom-out-animation{opacity:0;transform:scale(.5);transition:all 195ms cubic-bezier(.4,0,1,1)}@starting-style{.zoom-out-animation{opacity:1;transform:scale(1)}}\n"] }]
|
|
328
266
|
}], ctorParameters: () => [], propDecorators: { closed: [{
|
|
@@ -375,16 +313,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.7", ngImpor
|
|
|
375
313
|
type: Input
|
|
376
314
|
}] } });
|
|
377
315
|
|
|
378
|
-
/**
|
|
379
|
-
* This directive is intended to be used in conjunction with an cmat-popover tag. It is
|
|
380
|
-
* responsible for toggling the display of the provided popover instance.
|
|
381
|
-
*/
|
|
382
316
|
class CmatPopoverTriggerDirective {
|
|
383
317
|
constructor() {
|
|
384
318
|
this.ariaHaspopup = true;
|
|
385
|
-
/** Event emitted when the associated popover is opened. */
|
|
386
319
|
this.popoverOpened = new EventEmitter();
|
|
387
|
-
/** Event emitted when the associated popover is closed. */
|
|
388
320
|
this.popoverClosed = new EventEmitter();
|
|
389
321
|
this.popoverOpened$ = new Subject();
|
|
390
322
|
this.popoverClosed$ = new Subject();
|
|
@@ -392,20 +324,15 @@ class CmatPopoverTriggerDirective {
|
|
|
392
324
|
this._elementRef = inject(ElementRef);
|
|
393
325
|
this._viewContainerRef = inject(ViewContainerRef);
|
|
394
326
|
this._dir = inject(Directionality, { optional: true });
|
|
395
|
-
this.
|
|
327
|
+
this._destroyRef = inject(DestroyRef);
|
|
396
328
|
this._overlayRef = null;
|
|
397
329
|
this._popoverOpen = false;
|
|
398
330
|
this._halt = false;
|
|
399
|
-
// tracking input type is necessary so it's possible to only auto-focus
|
|
400
|
-
// the first item of the list when the popover is opened via the keyboard
|
|
401
331
|
this._openedByMouse = false;
|
|
402
|
-
this._onDestroy = new Subject();
|
|
403
332
|
}
|
|
404
|
-
/** Whether the popover is open. */
|
|
405
333
|
get popoverOpen() {
|
|
406
334
|
return this._popoverOpen;
|
|
407
335
|
}
|
|
408
|
-
/** The text direction of the containing app. */
|
|
409
336
|
get dir() {
|
|
410
337
|
return this._dir?.value === 'rtl' ? 'rtl' : 'ltr';
|
|
411
338
|
}
|
|
@@ -458,11 +385,9 @@ class CmatPopoverTriggerDirective {
|
|
|
458
385
|
ngOnDestroy() {
|
|
459
386
|
this.destroyPopover();
|
|
460
387
|
}
|
|
461
|
-
/** Toggles the popover between the open and closed states. */
|
|
462
388
|
togglePopover() {
|
|
463
389
|
return this._popoverOpen ? this.closePopover() : this.openPopover();
|
|
464
390
|
}
|
|
465
|
-
/** Opens the popover. */
|
|
466
391
|
openPopover() {
|
|
467
392
|
if (!this._popoverOpen && !this._halt) {
|
|
468
393
|
this._createOverlay().attach(this._portal);
|
|
@@ -471,7 +396,6 @@ class CmatPopoverTriggerDirective {
|
|
|
471
396
|
this._initPopover();
|
|
472
397
|
}
|
|
473
398
|
}
|
|
474
|
-
/** Closes the popover. */
|
|
475
399
|
closePopover() {
|
|
476
400
|
if (this._overlayRef) {
|
|
477
401
|
this._overlayRef.detach();
|
|
@@ -479,7 +403,6 @@ class CmatPopoverTriggerDirective {
|
|
|
479
403
|
}
|
|
480
404
|
this.destroyPopover();
|
|
481
405
|
}
|
|
482
|
-
/** Removes the popover from the DOM. */
|
|
483
406
|
destroyPopover() {
|
|
484
407
|
if (this._mouseoverTimer) {
|
|
485
408
|
clearTimeout(this._mouseoverTimer);
|
|
@@ -490,26 +413,16 @@ class CmatPopoverTriggerDirective {
|
|
|
490
413
|
this._overlayRef = null;
|
|
491
414
|
this._cleanUpSubscriptions();
|
|
492
415
|
}
|
|
493
|
-
this._onDestroy.next();
|
|
494
|
-
this._onDestroy.complete();
|
|
495
416
|
}
|
|
496
|
-
/** Focuses the popover trigger. */
|
|
497
417
|
focus() {
|
|
498
418
|
this._elementRef.nativeElement.focus();
|
|
499
419
|
}
|
|
500
|
-
/**
|
|
501
|
-
* This method ensures that the popover closes when the overlay backdrop is clicked.
|
|
502
|
-
* We do not use first() here because doing so would not catch clicks from within
|
|
503
|
-
* the popover, and it would fail to unsubscribe properly. Instead, we unsubscribe
|
|
504
|
-
* explicitly when the popover is closed or destroyed.
|
|
505
|
-
*/
|
|
506
420
|
_subscribeToBackdrop() {
|
|
507
421
|
if (this._overlayRef) {
|
|
508
|
-
/** Only subscribe to backdrop if trigger event is click */
|
|
509
422
|
if (this.triggerEvent === 'click' && this.popover.closeOnBackdropClick === true) {
|
|
510
423
|
this._overlayRef
|
|
511
424
|
.backdropClick()
|
|
512
|
-
.pipe(
|
|
425
|
+
.pipe(takeUntilDestroyed(this._destroyRef))
|
|
513
426
|
.subscribe(() => {
|
|
514
427
|
this.popover.emitCloseEvent();
|
|
515
428
|
});
|
|
@@ -520,33 +433,22 @@ class CmatPopoverTriggerDirective {
|
|
|
520
433
|
if (this._overlayRef) {
|
|
521
434
|
this._overlayRef
|
|
522
435
|
.detachments()
|
|
523
|
-
.pipe(
|
|
436
|
+
.pipe(takeUntilDestroyed(this._destroyRef))
|
|
524
437
|
.subscribe(() => {
|
|
525
438
|
this._setPopoverClosed();
|
|
526
439
|
});
|
|
527
440
|
}
|
|
528
441
|
}
|
|
529
|
-
/**
|
|
530
|
-
* This method sets the popover state to open and focuses the first item if
|
|
531
|
-
* the popover was opened via the keyboard.
|
|
532
|
-
*/
|
|
533
442
|
_initPopover() {
|
|
534
443
|
this._setPopoverOpened();
|
|
535
444
|
}
|
|
536
|
-
/**
|
|
537
|
-
* This method resets the popover when it's closed, most importantly restoring
|
|
538
|
-
* focus to the popover trigger if the popover was opened via the keyboard.
|
|
539
|
-
*/
|
|
540
445
|
_resetPopover() {
|
|
541
446
|
this._setPopoverClosed();
|
|
542
|
-
// Focus only needs to be reset to the host element if the popover was opened
|
|
543
|
-
// by the keyboard and manually shifted to the first popover item.
|
|
544
447
|
if (!this._openedByMouse) {
|
|
545
448
|
this.focus();
|
|
546
449
|
}
|
|
547
450
|
this._openedByMouse = false;
|
|
548
451
|
}
|
|
549
|
-
/** set state rather than toggle to support triggers sharing a popover */
|
|
550
452
|
_setPopoverOpened() {
|
|
551
453
|
if (!this._popoverOpen) {
|
|
552
454
|
this._popoverOpen = true;
|
|
@@ -554,7 +456,6 @@ class CmatPopoverTriggerDirective {
|
|
|
554
456
|
this.popoverOpened.emit();
|
|
555
457
|
}
|
|
556
458
|
}
|
|
557
|
-
/** set state rather than toggle to support triggers sharing a popover */
|
|
558
459
|
_setPopoverClosed() {
|
|
559
460
|
if (this._popoverOpen) {
|
|
560
461
|
this._popoverOpen = false;
|
|
@@ -562,19 +463,11 @@ class CmatPopoverTriggerDirective {
|
|
|
562
463
|
this.popoverClosed.emit();
|
|
563
464
|
}
|
|
564
465
|
}
|
|
565
|
-
/**
|
|
566
|
-
* This method checks that a valid instance of MdPopover has been passed into
|
|
567
|
-
* mdPopoverTriggerFor. If not, an exception is thrown.
|
|
568
|
-
*/
|
|
569
466
|
_checkPopover() {
|
|
570
467
|
if (!this.popover) {
|
|
571
468
|
throwCmatPopoverMissingError();
|
|
572
469
|
}
|
|
573
470
|
}
|
|
574
|
-
/**
|
|
575
|
-
* This method creates the overlay from the provided popover's template and saves its
|
|
576
|
-
* OverlayRef so that it can be attached to the DOM when openPopover is called.
|
|
577
|
-
*/
|
|
578
471
|
_createOverlay() {
|
|
579
472
|
if (!this._overlayRef) {
|
|
580
473
|
this._portal = new TemplatePortal(this.popover.templateRef, this._viewContainerRef);
|
|
@@ -584,15 +477,9 @@ class CmatPopoverTriggerDirective {
|
|
|
584
477
|
}
|
|
585
478
|
return this._overlayRef;
|
|
586
479
|
}
|
|
587
|
-
/**
|
|
588
|
-
* This method builds the configuration object needed to create the overlay, the OverlayConfig.
|
|
589
|
-
*
|
|
590
|
-
* @returns OverlayConfig
|
|
591
|
-
*/
|
|
592
480
|
_getOverlayConfig() {
|
|
593
481
|
const overlayState = new OverlayConfig();
|
|
594
482
|
overlayState.positionStrategy = this._getPosition();
|
|
595
|
-
/** Display overlay backdrop if trigger event is click */
|
|
596
483
|
if (this.triggerEvent === 'click') {
|
|
597
484
|
overlayState.hasBackdrop = true;
|
|
598
485
|
overlayState.backdropClass = 'cdk-overlay-transparent-backdrop';
|
|
@@ -601,9 +488,6 @@ class CmatPopoverTriggerDirective {
|
|
|
601
488
|
overlayState.scrollStrategy = this._getOverlayScrollStrategy(this.popover.scrollStrategy);
|
|
602
489
|
return overlayState;
|
|
603
490
|
}
|
|
604
|
-
/**
|
|
605
|
-
* This method returns the scroll strategy used by the cdk/overlay.
|
|
606
|
-
*/
|
|
607
491
|
_getOverlayScrollStrategy(strategy) {
|
|
608
492
|
switch (strategy) {
|
|
609
493
|
case 'noop':
|
|
@@ -617,11 +501,6 @@ class CmatPopoverTriggerDirective {
|
|
|
617
501
|
return this._overlay.scrollStrategies.reposition();
|
|
618
502
|
}
|
|
619
503
|
}
|
|
620
|
-
/**
|
|
621
|
-
* Listens to changes in the position of the overlay and sets the correct classes
|
|
622
|
-
* on the popover based on the new position. This ensures the animation origin is always
|
|
623
|
-
* correct, even if a fallback position is used for the overlay.
|
|
624
|
-
*/
|
|
625
504
|
_subscribeToPositions(position) {
|
|
626
505
|
this._positionSubscription = position.positionChanges.subscribe((change) => {
|
|
627
506
|
const posX = change.connectionPair.overlayX === 'start'
|
|
@@ -637,18 +516,10 @@ class CmatPopoverTriggerDirective {
|
|
|
637
516
|
const pos = this.popover.position[0] === 'above' || this.popover.position[0] === 'below'
|
|
638
517
|
? [posY, posX]
|
|
639
518
|
: [posX, posY];
|
|
640
|
-
// required for ChangeDetectionStrategy.OnPush
|
|
641
|
-
this._changeDetectorRef.markForCheck();
|
|
642
519
|
this.popover.setCurrentStyles(pos);
|
|
643
520
|
this.popover.setPositionClasses(pos);
|
|
644
521
|
});
|
|
645
522
|
}
|
|
646
|
-
/**
|
|
647
|
-
* This method builds the position strategy for the overlay, so the popover is properly connected
|
|
648
|
-
* to the trigger.
|
|
649
|
-
*
|
|
650
|
-
* @returns ConnectedPositionStrategy
|
|
651
|
-
*/
|
|
652
523
|
_getPosition() {
|
|
653
524
|
const [originX, origin2ndX, origin3rdX] = this.popover.position[0] === 'before' || this.popover.position[1] === 'after'
|
|
654
525
|
? ['start', 'center', 'end']
|
|
@@ -678,11 +549,6 @@ class CmatPopoverTriggerDirective {
|
|
|
678
549
|
const offsetY = this.popover.yOffset && !isNaN(Number(this.popover.yOffset))
|
|
679
550
|
? Number(this.popover.yOffset)
|
|
680
551
|
: 0;
|
|
681
|
-
/**
|
|
682
|
-
* For overriding position element, when `cmatPopoverTargetAt` has a valid element reference.
|
|
683
|
-
* Useful for sticking popover to parent element and offsetting arrow to trigger element.
|
|
684
|
-
* If undefined defaults to the trigger element reference.
|
|
685
|
-
*/
|
|
686
552
|
let element = this._elementRef;
|
|
687
553
|
if (typeof this.targetElement !== 'undefined') {
|
|
688
554
|
this.popover.containerPositioning = true;
|
|
@@ -770,14 +636,13 @@ class CmatPopoverTriggerDirective {
|
|
|
770
636
|
}
|
|
771
637
|
this.popover.setCurrentStyles();
|
|
772
638
|
}
|
|
773
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.
|
|
774
|
-
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "21.2.
|
|
639
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: CmatPopoverTriggerDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
|
|
640
|
+
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "21.2.9", type: CmatPopoverTriggerDirective, isStandalone: true, selector: "[cmatPopoverTriggerFor],[cmatPopoverTargetAt],[cmatPopoverTriggerOn]", inputs: { popover: ["cmatPopoverTriggerFor", "popover"], targetElement: ["cmatPopoverTargetAt", "targetElement"], triggerEvent: ["cmatPopoverTriggerOn", "triggerEvent"] }, outputs: { popoverOpened: "popoverOpened", popoverClosed: "popoverClosed" }, host: { listeners: { "click": "onClick($event)", "mouseenter": "onMouseEnter($event)", "mouseleave": "onMouseLeave($event)", "mousedown": "handleMousedown($event)" }, properties: { "attr.aria-haspopup": "this.ariaHaspopup" } }, exportAs: ["cmatPopoverTrigger"], usesOnChanges: true, ngImport: i0 }); }
|
|
775
641
|
}
|
|
776
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.
|
|
642
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: CmatPopoverTriggerDirective, decorators: [{
|
|
777
643
|
type: Directive,
|
|
778
644
|
args: [{
|
|
779
645
|
selector: '[cmatPopoverTriggerFor],[cmatPopoverTargetAt],[cmatPopoverTriggerOn]',
|
|
780
|
-
standalone: true,
|
|
781
646
|
exportAs: 'cmatPopoverTrigger'
|
|
782
647
|
}]
|
|
783
648
|
}], propDecorators: { ariaHaspopup: [{
|
|
@@ -814,14 +679,13 @@ class CmatPopoverTargetDirective {
|
|
|
814
679
|
constructor() {
|
|
815
680
|
this.elementRef = inject(ElementRef);
|
|
816
681
|
}
|
|
817
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.
|
|
818
|
-
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "21.2.
|
|
682
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: CmatPopoverTargetDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
|
|
683
|
+
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "21.2.9", type: CmatPopoverTargetDirective, isStandalone: true, selector: "cmat-popover-target, [cmatPopoverTarget]", exportAs: ["cmatPopoverTarget"], ngImport: i0 }); }
|
|
819
684
|
}
|
|
820
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.
|
|
685
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: CmatPopoverTargetDirective, decorators: [{
|
|
821
686
|
type: Directive,
|
|
822
687
|
args: [{
|
|
823
688
|
selector: 'cmat-popover-target, [cmatPopoverTarget]',
|
|
824
|
-
standalone: true,
|
|
825
689
|
exportAs: 'cmatPopoverTarget',
|
|
826
690
|
}]
|
|
827
691
|
}] });
|