@ng-matero/extensions 11.3.4 → 11.5.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (99) hide show
  1. package/alert/_alert-theme.scss +5 -9
  2. package/alert/alert.component.d.ts +6 -4
  3. package/alert/alert.component.scss +2 -1
  4. package/alert/mtxAlert.metadata.json +1 -1
  5. package/bundles/mtxAlert.umd.js +22 -12
  6. package/bundles/mtxAlert.umd.js.map +1 -1
  7. package/bundles/mtxAlert.umd.min.js +1 -1
  8. package/bundles/mtxAlert.umd.min.js.map +1 -1
  9. package/bundles/{ng-matero-extensions-button.umd.js → mtxButton.umd.js} +1 -1
  10. package/bundles/mtxButton.umd.js.map +1 -0
  11. package/bundles/{ng-matero-extensions-button.umd.min.js → mtxButton.umd.min.js} +1 -1
  12. package/bundles/{ng-matero-extensions-button.umd.min.js.map → mtxButton.umd.min.js.map} +0 -0
  13. package/bundles/mtxCheckboxGroup.umd.js +41 -10
  14. package/bundles/mtxCheckboxGroup.umd.js.map +1 -1
  15. package/bundles/mtxCheckboxGroup.umd.min.js +1 -1
  16. package/bundles/mtxCheckboxGroup.umd.min.js.map +1 -1
  17. package/bundles/mtxColorPicker.umd.js +14 -1
  18. package/bundles/mtxColorPicker.umd.js.map +1 -1
  19. package/bundles/mtxColorPicker.umd.min.js +1 -1
  20. package/bundles/mtxColorPicker.umd.min.js.map +1 -1
  21. package/bundles/mtxFormGroup.umd.js.map +1 -1
  22. package/bundles/mtxFormGroup.umd.min.js.map +1 -1
  23. package/bundles/mtxGrid.umd.js +14 -14
  24. package/bundles/mtxGrid.umd.js.map +1 -1
  25. package/bundles/mtxGrid.umd.min.js.map +1 -1
  26. package/bundles/mtxLoader.umd.js +27 -7
  27. package/bundles/mtxLoader.umd.js.map +1 -1
  28. package/bundles/mtxLoader.umd.min.js +1 -1
  29. package/bundles/mtxLoader.umd.min.js.map +1 -1
  30. package/bundles/mtxPopover.umd.js +177 -129
  31. package/bundles/mtxPopover.umd.js.map +1 -1
  32. package/bundles/mtxPopover.umd.min.js +1 -1
  33. package/bundles/mtxPopover.umd.min.js.map +1 -1
  34. package/bundles/mtxProgress.umd.js +28 -4
  35. package/bundles/mtxProgress.umd.js.map +1 -1
  36. package/bundles/mtxProgress.umd.min.js +1 -1
  37. package/bundles/mtxProgress.umd.min.js.map +1 -1
  38. package/bundles/mtxSelect.umd.js.map +1 -1
  39. package/bundles/mtxSelect.umd.min.js.map +1 -1
  40. package/button/{ng-matero-extensions-button.d.ts → mtxButton.d.ts} +0 -0
  41. package/button/{ng-matero-extensions-button.metadata.json → mtxButton.metadata.json} +0 -0
  42. package/button/package.json +7 -7
  43. package/checkbox-group/checkbox-group.component.d.ts +13 -6
  44. package/checkbox-group/mtxCheckboxGroup.metadata.json +1 -1
  45. package/color-picker/color-picker.component.d.ts +5 -0
  46. package/color-picker/mtxColorPicker.metadata.json +1 -1
  47. package/data-grid/grid.component.d.ts +2 -2
  48. package/esm2015/alert/alert.component.js +16 -9
  49. package/esm2015/button/mtxButton.js +5 -0
  50. package/esm2015/checkbox-group/checkbox-group.component.js +35 -8
  51. package/esm2015/color-picker/color-picker.component.js +11 -2
  52. package/esm2015/data-grid/grid.component.js +15 -15
  53. package/esm2015/form-group/form-group.component.js +1 -1
  54. package/esm2015/loader/loader.component.js +17 -4
  55. package/esm2015/popover/popover-errors.js +15 -15
  56. package/esm2015/popover/popover-interfaces.js +1 -1
  57. package/esm2015/popover/popover-trigger.js +95 -64
  58. package/esm2015/popover/popover-types.js +1 -1
  59. package/esm2015/popover/popover.js +68 -51
  60. package/esm2015/popover/public-api.js +2 -1
  61. package/esm2015/progress/progress.component.js +18 -1
  62. package/esm2015/select/select.component.js +1 -1
  63. package/fesm2015/mtxAlert.js +15 -8
  64. package/fesm2015/mtxAlert.js.map +1 -1
  65. package/fesm2015/{ng-matero-extensions-button.js → mtxButton.js} +1 -1
  66. package/fesm2015/mtxButton.js.map +1 -0
  67. package/fesm2015/mtxCheckboxGroup.js +34 -7
  68. package/fesm2015/mtxCheckboxGroup.js.map +1 -1
  69. package/fesm2015/mtxColorPicker.js +10 -1
  70. package/fesm2015/mtxColorPicker.js.map +1 -1
  71. package/fesm2015/mtxFormGroup.js.map +1 -1
  72. package/fesm2015/mtxGrid.js +14 -14
  73. package/fesm2015/mtxGrid.js.map +1 -1
  74. package/fesm2015/mtxLoader.js +16 -3
  75. package/fesm2015/mtxLoader.js.map +1 -1
  76. package/fesm2015/mtxPopover.js +174 -126
  77. package/fesm2015/mtxPopover.js.map +1 -1
  78. package/fesm2015/mtxProgress.js +17 -0
  79. package/fesm2015/mtxProgress.js.map +1 -1
  80. package/fesm2015/mtxSelect.js.map +1 -1
  81. package/form-group/form-group.component.d.ts +2 -0
  82. package/loader/loader.component.d.ts +9 -2
  83. package/loader/mtxLoader.metadata.json +1 -1
  84. package/package.json +2 -2
  85. package/popover/_popover-theme.scss +17 -7
  86. package/popover/mtxPopover.metadata.json +1 -1
  87. package/popover/popover-errors.d.ts +6 -6
  88. package/popover/popover-interfaces.d.ts +9 -9
  89. package/popover/popover-types.d.ts +3 -2
  90. package/popover/popover.d.ts +23 -17
  91. package/popover/popover.scss +117 -20
  92. package/popover/public-api.d.ts +1 -0
  93. package/progress/mtxProgress.metadata.json +1 -1
  94. package/progress/progress.component.d.ts +9 -2
  95. package/select/mtxSelect.metadata.json +1 -1
  96. package/select/select.component.d.ts +9 -5
  97. package/bundles/ng-matero-extensions-button.umd.js.map +0 -1
  98. package/esm2015/button/ng-matero-extensions-button.js +0 -5
  99. package/fesm2015/ng-matero-extensions-button.js.map +0 -1
@@ -11,18 +11,18 @@
11
11
  throw Error("mtx-popover-trigger: must pass in an mtx-popover instance.\n\n Example:\n <mtx-popover #popover=\"mtxPopover\"></mtx-popover>\n <button [mtxPopoverTriggerFor]=\"popover\"></button>");
12
12
  }
13
13
  /**
14
- * Throws an exception for the case when popover's mtxPopoverPositionX value isn't valid.
15
- * In other words, it doesn't match 'before' or 'after'.
14
+ * Throws an exception for the case when popover's mtxPopoverPosition[0] value isn't valid.
15
+ * In other words, it doesn't match 'above', 'below', 'before' or 'after'.
16
16
  */
17
- function throwMtxPopoverInvalidPositionX() {
18
- throw Error("mtxPopoverPositionX value must be either 'before', 'center' or after'.\n Example: <mtx-popover mtxPopoverPositionX=\"before\" #popover=\"mtxPopover\"></mtx-popover>");
17
+ function throwMtxPopoverInvalidPositionStart() {
18
+ throw Error("mtxPopoverPosition[0] value must be either 'above', 'below', 'before' or 'after'.\n Example: <mtx-popover [position]=\"['below', 'after']\" #popover=\"mtxPopover\"></mtx-popover>");
19
19
  }
20
20
  /**
21
- * Throws an exception for the case when popover's mtxPopoverPositionY value isn't valid.
22
- * In other words, it doesn't match 'above' or 'below'.
21
+ * Throws an exception for the case when popover's mtxPopoverPosition[1] value isn't valid.
22
+ * In other words, it doesn't match 'above', 'below', 'before', 'after' or 'center'.
23
23
  */
24
- function throwMtxPopoverInvalidPositionY() {
25
- throw Error("mtxPopoverPositionY value must be either 'above' or below'.\n Example: <mtx-popover mtxPopoverPositionY=\"above\" #popover=\"mtxPopover\"></mtx-popover>");
24
+ function throwMtxPopoverInvalidPositionEnd() {
25
+ throw Error("mtxPopoverPosition[1] value must be either 'above', 'below', 'before', 'after' or 'center'.\n Example: <mtx-popover [position]=\"['below', 'after']\" #popover=\"mtxPopover\"></mtx-popover>");
26
26
  }
27
27
 
28
28
  /**
@@ -59,26 +59,25 @@
59
59
  this.zone = zone;
60
60
  this.role = 'dialog';
61
61
  /** Settings for popover, view setters and getters for more detail */
62
- this._xPosition = 'after';
63
- this._yPosition = 'below';
62
+ this._position = ['below', 'after'];
64
63
  this._triggerEvent = 'hover';
65
64
  this._scrollStrategy = 'reposition';
66
65
  this._enterDelay = 100;
67
66
  this._leaveDelay = 100;
68
- this._overlapTrigger = false;
69
- this._disableAnimation = false;
70
67
  this._panelOffsetX = 0;
71
68
  this._panelOffsetY = 0;
72
69
  this._closeOnPanelClick = false;
73
70
  this._closeOnBackdropClick = true;
71
+ this._disableAnimation = false;
74
72
  this._focusTrapEnabled = true;
75
73
  this._focusTrapAutoCaptureEnabled = true;
76
74
  this._arrowOffsetX = 20;
75
+ this._arrowOffsetY = 20;
77
76
  this._arrowWidth = 16;
77
+ this._arrowHeight = 16;
78
78
  /** Config object to be passed into the popover's ngClass */
79
79
  this._classList = {};
80
- // TODO: Write comment description
81
- /** */
80
+ /** Whether popover's `targetElement` is defined */
82
81
  this.containerPositioning = false;
83
82
  /** Closing disabled on popover */
84
83
  this.closeDisabled = false;
@@ -88,31 +87,19 @@
88
87
  this.closed = new core.EventEmitter();
89
88
  this.setPositionClasses();
90
89
  }
91
- Object.defineProperty(MtxPopover.prototype, "xPosition", {
92
- /** Position of the popover in the X axis. */
90
+ Object.defineProperty(MtxPopover.prototype, "position", {
91
+ /** Position of the popover. */
93
92
  get: function () {
94
- return this._xPosition;
93
+ return this._position;
95
94
  },
96
95
  set: function (value) {
97
- if (value !== 'before' && value !== 'after' && value !== 'center') {
98
- throwMtxPopoverInvalidPositionX();
96
+ if (!['before', 'after', 'above', 'below'].includes(value[0])) {
97
+ throwMtxPopoverInvalidPositionStart();
99
98
  }
100
- this._xPosition = value;
101
- this.setPositionClasses();
102
- },
103
- enumerable: false,
104
- configurable: true
105
- });
106
- Object.defineProperty(MtxPopover.prototype, "yPosition", {
107
- /** Position of the popover in the Y axis. */
108
- get: function () {
109
- return this._yPosition;
110
- },
111
- set: function (value) {
112
- if (value !== 'above' && value !== 'below') {
113
- throwMtxPopoverInvalidPositionY();
99
+ if (!['before', 'after', 'above', 'below', 'center'].includes(value[1])) {
100
+ throwMtxPopoverInvalidPositionEnd();
114
101
  }
115
- this._yPosition = value;
102
+ this._position = value;
116
103
  this.setPositionClasses();
117
104
  },
118
105
  enumerable: false,
@@ -162,17 +149,6 @@
162
149
  enumerable: false,
163
150
  configurable: true
164
151
  });
165
- Object.defineProperty(MtxPopover.prototype, "overlapTrigger", {
166
- /** Popover overlap trigger */
167
- get: function () {
168
- return this._overlapTrigger;
169
- },
170
- set: function (value) {
171
- this._overlapTrigger = value;
172
- },
173
- enumerable: false,
174
- configurable: true
175
- });
176
152
  Object.defineProperty(MtxPopover.prototype, "xOffset", {
177
153
  /** Popover target offset x */
178
154
  get: function () {
@@ -206,6 +182,17 @@
206
182
  enumerable: false,
207
183
  configurable: true
208
184
  });
185
+ Object.defineProperty(MtxPopover.prototype, "arrowOffsetY", {
186
+ /** Popover arrow offset y */
187
+ get: function () {
188
+ return this._arrowOffsetY;
189
+ },
190
+ set: function (value) {
191
+ this._arrowOffsetY = value;
192
+ },
193
+ enumerable: false,
194
+ configurable: true
195
+ });
209
196
  Object.defineProperty(MtxPopover.prototype, "arrowWidth", {
210
197
  /** Popover arrow width */
211
198
  get: function () {
@@ -217,6 +204,17 @@
217
204
  enumerable: false,
218
205
  configurable: true
219
206
  });
207
+ Object.defineProperty(MtxPopover.prototype, "arrowHeight", {
208
+ /** Popover arrow height */
209
+ get: function () {
210
+ return this._arrowHeight;
211
+ },
212
+ set: function (value) {
213
+ this._arrowHeight = value;
214
+ },
215
+ enumerable: false,
216
+ configurable: true
217
+ });
220
218
  Object.defineProperty(MtxPopover.prototype, "closeOnPanelClick", {
221
219
  /** Popover close on container click */
222
220
  get: function () {
@@ -354,42 +352,61 @@
354
352
  // TODO: Refactor how styles are set and updated on the component, use best practices.
355
353
  // TODO: If arrow left and right positioning is requested, see if flex direction can be used to work with order.
356
354
  /** Sets the current styles for the popover to allow for dynamically changing settings */
357
- MtxPopover.prototype.setCurrentStyles = function () {
358
- var left = this.xPosition === 'after'
355
+ MtxPopover.prototype.setCurrentStyles = function (pos) {
356
+ if (pos === void 0) { pos = this.position; }
357
+ var left = pos[1] === 'after'
359
358
  ? this.arrowOffsetX - this.arrowWidth / 2 + "px"
360
- : this.xPosition === 'center'
359
+ : pos[1] === 'center'
361
360
  ? "calc(50% - " + this.arrowWidth / 2 + "px)"
362
361
  : '';
363
- var right = this.xPosition === 'before' ? this.arrowOffsetX - this.arrowWidth / 2 + "px" : '';
364
- this.popoverArrowStyles = {
365
- left: this._dir.value === 'ltr' ? left : right,
366
- right: this._dir.value === 'ltr' ? right : left,
367
- };
362
+ var right = pos[1] === 'before' ? this.arrowOffsetX - this.arrowWidth / 2 + "px" : '';
363
+ var bottom = pos[1] === 'above'
364
+ ? this.arrowOffsetY - this.arrowHeight / 2 + "px"
365
+ : pos[1] === 'center'
366
+ ? "calc(50% - " + this.arrowHeight / 2 + "px)"
367
+ : '';
368
+ var top = pos[1] === 'below' ? this.arrowOffsetY - this.arrowHeight / 2 + "px" : '';
369
+ this.popoverArrowStyles =
370
+ pos[0] === 'above' || pos[0] === 'below'
371
+ ? {
372
+ left: this._dir.value === 'ltr' ? left : right,
373
+ right: this._dir.value === 'ltr' ? right : left,
374
+ }
375
+ : {
376
+ top: top,
377
+ bottom: bottom,
378
+ };
368
379
  };
369
380
  /**
370
381
  * It's necessary to set position-based classes to ensure the popover panel animation
371
382
  * folds out from the correct direction.
372
383
  */
373
- MtxPopover.prototype.setPositionClasses = function (posX, posY) {
374
- if (posX === void 0) { posX = this.xPosition; }
375
- if (posY === void 0) { posY = this.yPosition; }
376
- this._classList['mtx-popover-before'] = posX === 'before';
377
- this._classList['mtx-popover-center'] = posX === 'center';
378
- this._classList['mtx-popover-after'] = posX === 'after';
379
- this._classList['mtx-popover-above'] = posY === 'above';
380
- this._classList['mtx-popover-below'] = posY === 'below';
384
+ MtxPopover.prototype.setPositionClasses = function (pos) {
385
+ if (pos === void 0) { pos = this.position; }
386
+ this._classList['mtx-popover-before-above'] = pos[0] === 'before' && pos[1] === 'above';
387
+ this._classList['mtx-popover-before-center'] = pos[0] === 'before' && pos[1] === 'center';
388
+ this._classList['mtx-popover-before-below'] = pos[0] === 'before' && pos[1] === 'below';
389
+ this._classList['mtx-popover-after-above'] = pos[0] === 'after' && pos[1] === 'above';
390
+ this._classList['mtx-popover-after-center'] = pos[0] === 'after' && pos[1] === 'center';
391
+ this._classList['mtx-popover-after-below'] = pos[0] === 'after' && pos[1] === 'below';
392
+ this._classList['mtx-popover-above-before'] = pos[0] === 'above' && pos[1] === 'before';
393
+ this._classList['mtx-popover-above-center'] = pos[0] === 'above' && pos[1] === 'center';
394
+ this._classList['mtx-popover-above-after'] = pos[0] === 'above' && pos[1] === 'after';
395
+ this._classList['mtx-popover-below-before'] = pos[0] === 'below' && pos[1] === 'before';
396
+ this._classList['mtx-popover-below-center'] = pos[0] === 'below' && pos[1] === 'center';
397
+ this._classList['mtx-popover-below-after'] = pos[0] === 'below' && pos[1] === 'after';
381
398
  };
382
399
  return MtxPopover;
383
400
  }());
384
401
  MtxPopover.decorators = [
385
402
  { type: core.Component, args: [{
386
403
  selector: 'mtx-popover',
387
- template: "<ng-template>\r\n <div class=\"mtx-popover-panel mat-elevation-z8\" role=\"dialog\"\r\n [class.mtx-popover-overlap]=\"overlapTrigger\"\r\n [ngClass]=\"_classList\"\r\n [ngStyle]=\"popoverPanelStyles\"\r\n (keydown)=\"_handleKeydown($event)\"\r\n (click)=\"onClick()\"\r\n (mouseover)=\"onMouseOver()\"\r\n (mouseleave)=\"onMouseLeave()\"\r\n [@.disabled]=\"disableAnimation\"\r\n [@transformPopover]=\"'enter'\">\r\n <div class=\"mtx-popover-direction-arrow\" [ngStyle]=\"popoverArrowStyles\" *ngIf=\"!overlapTrigger\">\r\n </div>\r\n <div class=\"mtx-popover-content\"\r\n [ngStyle]=\"popoverContentStyles\"\r\n [cdkTrapFocus]=\"focusTrapEnabled\"\r\n [cdkTrapFocusAutoCapture]=\"focusTrapAutoCaptureEnabled\">\r\n <ng-content></ng-content>\r\n </div>\r\n </div>\r\n</ng-template>\r\n",
404
+ template: "<ng-template>\r\n <div class=\"mtx-popover-panel mat-elevation-z8\" role=\"dialog\"\r\n [ngClass]=\"_classList\"\r\n [ngStyle]=\"popoverPanelStyles\"\r\n (keydown)=\"_handleKeydown($event)\"\r\n (click)=\"onClick()\"\r\n (mouseover)=\"onMouseOver()\"\r\n (mouseleave)=\"onMouseLeave()\"\r\n [@.disabled]=\"disableAnimation\"\r\n [@transformPopover]=\"'enter'\">\r\n <div class=\"mtx-popover-direction-arrow\" [ngStyle]=\"popoverArrowStyles\"></div>\r\n <div class=\"mtx-popover-content\"\r\n [ngStyle]=\"popoverContentStyles\"\r\n [cdkTrapFocus]=\"focusTrapEnabled\"\r\n [cdkTrapFocusAutoCapture]=\"focusTrapAutoCaptureEnabled\">\r\n <ng-content></ng-content>\r\n </div>\r\n </div>\r\n</ng-template>\r\n",
388
405
  changeDetection: core.ChangeDetectionStrategy.OnPush,
389
406
  encapsulation: core.ViewEncapsulation.None,
390
407
  animations: [transformPopover],
391
408
  exportAs: 'mtxPopover',
392
- styles: [".mtx-popover-panel{max-height:calc(100vh - 48px);padding:8px;border-radius:4px}.mtx-popover-panel.mtx-popover-below{margin-top:10px}.mtx-popover-panel.mtx-popover-above{margin-bottom:10px}.mtx-popover-panel.mtx-popover-overlap{margin:0}.mtx-popover-direction-arrow{position:absolute;width:16px}.mtx-popover-direction-arrow:after,.mtx-popover-direction-arrow:before{position:absolute;display:inline-block;content:\"\"}.mtx-popover-direction-arrow:before{border:8px solid transparent}.mtx-popover-direction-arrow:after{border:7px solid transparent;left:1px}[dir=rtl] .mtx-popover-direction-arrow:after{right:1px;left:auto}.mtx-popover-below .mtx-popover-direction-arrow{top:0}.mtx-popover-below .mtx-popover-direction-arrow:after,.mtx-popover-below .mtx-popover-direction-arrow:before{bottom:0;border-top-width:0}.mtx-popover-above .mtx-popover-direction-arrow{bottom:0}.mtx-popover-above .mtx-popover-direction-arrow:after,.mtx-popover-above .mtx-popover-direction-arrow:before{top:0;border-bottom-width:0}"]
409
+ styles: [".mtx-popover-panel{max-height:calc(100vh - 48px);padding:8px;border-radius:4px;font-size:16px}.mtx-popover-panel[class*=mtx-popover-below]{margin-top:calc(.5em + 2px)}.mtx-popover-panel[class*=mtx-popover-above]{margin-bottom:calc(.5em + 2px)}.mtx-popover-panel[class*=mtx-popover-before]{margin-right:calc(.5em + 2px)}[dir=rtl] .mtx-popover-panel[class*=mtx-popover-before]{margin-right:auto;margin-left:calc(.5em + 2px)}.mtx-popover-panel[class*=mtx-popover-after]{margin-left:calc(.5em + 2px)}[dir=rtl] .mtx-popover-panel[class*=mtx-popover-after]{margin-left:auto;margin-right:calc(.5em + 2px)}.mtx-popover-direction-arrow{position:absolute}.mtx-popover-direction-arrow:after,.mtx-popover-direction-arrow:before{position:absolute;display:inline-block;content:\"\";border-width:.5em;border-style:solid}.mtx-popover-direction-arrow:after{border-width:calc(.5em - 1px)}[class*=mtx-popover-above] .mtx-popover-direction-arrow,[class*=mtx-popover-below] .mtx-popover-direction-arrow{width:1em}[class*=mtx-popover-above] .mtx-popover-direction-arrow:after,[class*=mtx-popover-below] .mtx-popover-direction-arrow:after{left:1px}[dir=rtl] [class*=mtx-popover-above] .mtx-popover-direction-arrow:after,[dir=rtl] [class*=mtx-popover-below] .mtx-popover-direction-arrow:after{right:1px;left:auto}[class*=mtx-popover-below] .mtx-popover-direction-arrow{top:0}[class*=mtx-popover-below] .mtx-popover-direction-arrow:after,[class*=mtx-popover-below] .mtx-popover-direction-arrow:before{bottom:0;border-top-width:0}[class*=mtx-popover-above] .mtx-popover-direction-arrow{bottom:0}[class*=mtx-popover-above] .mtx-popover-direction-arrow:after,[class*=mtx-popover-above] .mtx-popover-direction-arrow:before{top:0;border-bottom-width:0}[class*=mtx-popover-after] .mtx-popover-direction-arrow,[class*=mtx-popover-before] .mtx-popover-direction-arrow{height:1em}[class*=mtx-popover-after] .mtx-popover-direction-arrow:after,[class*=mtx-popover-before] .mtx-popover-direction-arrow:after{top:1px}[class*=mtx-popover-before] .mtx-popover-direction-arrow{right:0}[class*=mtx-popover-before] .mtx-popover-direction-arrow:after,[class*=mtx-popover-before] .mtx-popover-direction-arrow:before{left:0;border-right-width:0}[dir=rtl] [class*=mtx-popover-before] .mtx-popover-direction-arrow{right:auto;left:0}[dir=rtl] [class*=mtx-popover-before] .mtx-popover-direction-arrow:after,[dir=rtl] [class*=mtx-popover-before] .mtx-popover-direction-arrow:before{left:auto;right:0;border-left-width:0}[dir=rtl] [class*=mtx-popover-before] .mtx-popover-direction-arrow:before{border-right-width:.5em}[dir=rtl] [class*=mtx-popover-before] .mtx-popover-direction-arrow:after{border-right-width:calc(.5em - 1px)}[class*=mtx-popover-after] .mtx-popover-direction-arrow{left:0}[class*=mtx-popover-after] .mtx-popover-direction-arrow:after,[class*=mtx-popover-after] .mtx-popover-direction-arrow:before{right:0;border-left-width:0}[dir=rtl] [class*=mtx-popover-after] .mtx-popover-direction-arrow{left:auto;right:0}[dir=rtl] [class*=mtx-popover-after] .mtx-popover-direction-arrow:after,[dir=rtl] [class*=mtx-popover-after] .mtx-popover-direction-arrow:before{right:auto;left:0;border-right-width:0}[dir=rtl] [class*=mtx-popover-after] .mtx-popover-direction-arrow:before{border-left-width:.5em}[dir=rtl] [class*=mtx-popover-after] .mtx-popover-direction-arrow:after{border-left-width:calc(.5em - 1px)}"]
393
410
  },] }
394
411
  ];
395
412
  /** @nocollapse */
@@ -400,17 +417,17 @@
400
417
  ]; };
401
418
  MtxPopover.propDecorators = {
402
419
  role: [{ type: core.HostBinding, args: ['attr.role',] }],
403
- xPosition: [{ type: core.Input }],
404
- yPosition: [{ type: core.Input }],
420
+ position: [{ type: core.Input }],
405
421
  triggerEvent: [{ type: core.Input }],
406
422
  scrollStrategy: [{ type: core.Input }],
407
423
  enterDelay: [{ type: core.Input }],
408
424
  leaveDelay: [{ type: core.Input }],
409
- overlapTrigger: [{ type: core.Input }],
410
425
  xOffset: [{ type: core.Input }],
411
426
  yOffset: [{ type: core.Input }],
412
427
  arrowOffsetX: [{ type: core.Input }],
428
+ arrowOffsetY: [{ type: core.Input }],
413
429
  arrowWidth: [{ type: core.Input }],
430
+ arrowHeight: [{ type: core.Input }],
414
431
  closeOnPanelClick: [{ type: core.Input }],
415
432
  closeOnBackdropClick: [{ type: core.Input }],
416
433
  disableAnimation: [{ type: core.Input }],
@@ -964,7 +981,7 @@
964
981
  overlayState.hasBackdrop = true;
965
982
  overlayState.backdropClass = 'cdk-overlay-transparent-backdrop';
966
983
  }
967
- overlayState.direction = this.dir;
984
+ overlayState.direction = this._dir;
968
985
  overlayState.scrollStrategy = this._getOverlayScrollStrategy(this.popover.scrollStrategy);
969
986
  return overlayState;
970
987
  };
@@ -992,19 +1009,24 @@
992
1009
  MtxPopoverTrigger.prototype._subscribeToPositions = function (position) {
993
1010
  var _this = this;
994
1011
  this._positionSubscription = position.positionChanges.subscribe(function (change) {
995
- var posisionX = change.connectionPair.overlayX === 'start'
1012
+ var posX = change.connectionPair.overlayX === 'start'
996
1013
  ? 'after'
997
1014
  : change.connectionPair.overlayX === 'end'
998
1015
  ? 'before'
999
1016
  : 'center';
1000
- var posisionY = change.connectionPair.overlayY === 'top' ? 'below' : 'above';
1017
+ var posY = change.connectionPair.overlayY === 'top'
1018
+ ? 'below'
1019
+ : change.connectionPair.overlayY === 'bottom'
1020
+ ? 'above'
1021
+ : 'center';
1022
+ var pos = _this.popover.position[0] === 'above' || _this.popover.position[0] === 'below'
1023
+ ? [posY, posX]
1024
+ : [posX, posY];
1001
1025
  // required for ChangeDetectionStrategy.OnPush
1002
1026
  _this._changeDetectorRef.markForCheck();
1003
1027
  _this.popover.zone.run(function () {
1004
- _this.popover.xPosition = posisionX;
1005
- _this.popover.yPosition = posisionY;
1006
- _this.popover.setCurrentStyles();
1007
- _this.popover.setPositionClasses(posisionX, posisionY);
1028
+ _this.popover.setCurrentStyles(pos);
1029
+ _this.popover.setPositionClasses(pos);
1008
1030
  });
1009
1031
  });
1010
1032
  };
@@ -1014,24 +1036,36 @@
1014
1036
  * @returns ConnectedPositionStrategy
1015
1037
  */
1016
1038
  MtxPopoverTrigger.prototype._getPosition = function () {
1017
- var _a = __read(this.popover.xPosition === 'before'
1018
- ? ['end', 'start', 'center']
1019
- : this.popover.xPosition === 'after'
1020
- ? ['start', 'end', 'center']
1039
+ var _a = __read(this.popover.position[0] === 'before' || this.popover.position[1] === 'after'
1040
+ ? ['start', 'center', 'end']
1041
+ : this.popover.position[0] === 'after' || this.popover.position[1] === 'before'
1042
+ ? ['end', 'center', 'start']
1021
1043
  : ['center', 'start', 'end'], 3), originX = _a[0], origin2ndX = _a[1], origin3rdX = _a[2];
1022
- var _b = __read(this.popover.yPosition === 'above' ? ['bottom', 'top'] : ['top', 'bottom'], 2), overlayY = _b[0], overlayFallbackY = _b[1];
1023
- /** Reverse overlayY and fallbackOverlayY when overlapTrigger is false */
1024
- var originY = this.popover.overlapTrigger ? overlayY : overlayFallbackY;
1025
- var originFallbackY = this.popover.overlapTrigger ? overlayFallbackY : overlayY;
1026
- var overlayX = originX;
1044
+ var _b = __read(this.popover.position[0] === 'above' || this.popover.position[1] === 'below'
1045
+ ? ['top', 'center', 'bottom']
1046
+ : this.popover.position[0] === 'below' || this.popover.position[1] === 'above'
1047
+ ? ['bottom', 'center', 'top']
1048
+ : ['center', 'top', 'bottom'], 3), originY = _b[0], origin2ndY = _b[1], origin3rdY = _b[2];
1049
+ var _c = __read(this.popover.position[0] === 'below' || this.popover.position[0] === 'above'
1050
+ ? [originX, originX]
1051
+ : this.popover.position[0] === 'before'
1052
+ ? ['end', 'start']
1053
+ : ['start', 'end'], 2), overlayX = _c[0], overlayFallbackX = _c[1];
1054
+ var _d = __read(this.popover.position[0] === 'before' || this.popover.position[0] === 'after'
1055
+ ? [originY, originY]
1056
+ : this.popover.position[0] === 'below'
1057
+ ? ['top', 'bottom']
1058
+ : ['bottom', 'top'], 2), overlayY = _d[0], overlayFallbackY = _d[1];
1059
+ var originFallbackX = overlayX;
1060
+ var originFallbackY = overlayY;
1027
1061
  var offsetX = this.popover.xOffset && !isNaN(Number(this.popover.xOffset))
1028
- ? Number(this.popover.xOffset)
1062
+ ? Number(this.dir === 'ltr' ? this.popover.xOffset : -this.popover.xOffset)
1029
1063
  : 0;
1030
1064
  var offsetY = this.popover.yOffset && !isNaN(Number(this.popover.yOffset))
1031
1065
  ? Number(this.popover.yOffset)
1032
1066
  : 0;
1033
1067
  /**
1034
- * For overriding position element, when mtxPopoverTargetAt has a valid element reference.
1068
+ * For overriding position element, when `mtxPopoverTargetAt` has a valid element reference.
1035
1069
  * Useful for sticking popover to parent element and offsetting arrow to trigger element.
1036
1070
  * If undefined defaults to the trigger element reference.
1037
1071
  */
@@ -1040,54 +1074,68 @@
1040
1074
  this.popover.containerPositioning = true;
1041
1075
  element = this.targetElement._elementRef;
1042
1076
  }
1077
+ var positions = [{ originX: originX, originY: originY, overlayX: overlayX, overlayY: overlayY }];
1078
+ if (this.popover.position[0] === 'above' || this.popover.position[0] === 'below') {
1079
+ positions = [
1080
+ { originX: originX, originY: originY, overlayX: overlayX, overlayY: overlayY, offsetY: offsetY },
1081
+ { originX: origin2ndX, originY: originY, overlayX: origin2ndX, overlayY: overlayY, offsetY: offsetY },
1082
+ { originX: origin3rdX, originY: originY, overlayX: origin3rdX, overlayY: overlayY, offsetY: offsetY },
1083
+ {
1084
+ originX: originX,
1085
+ originY: originFallbackY,
1086
+ overlayX: overlayX,
1087
+ overlayY: overlayFallbackY,
1088
+ offsetY: -offsetY,
1089
+ },
1090
+ {
1091
+ originX: origin2ndX,
1092
+ originY: originFallbackY,
1093
+ overlayX: origin2ndX,
1094
+ overlayY: overlayFallbackY,
1095
+ offsetY: -offsetY,
1096
+ },
1097
+ {
1098
+ originX: origin3rdX,
1099
+ originY: originFallbackY,
1100
+ overlayX: origin3rdX,
1101
+ overlayY: overlayFallbackY,
1102
+ offsetY: -offsetY,
1103
+ },
1104
+ ];
1105
+ }
1106
+ if (this.popover.position[0] === 'before' || this.popover.position[0] === 'after') {
1107
+ positions = [
1108
+ { originX: originX, originY: originY, overlayX: overlayX, overlayY: overlayY, offsetX: offsetX },
1109
+ { originX: originX, originY: origin2ndY, overlayX: overlayX, overlayY: origin2ndY, offsetX: offsetX },
1110
+ { originX: originX, originY: origin3rdY, overlayX: overlayX, overlayY: origin3rdY, offsetX: offsetX },
1111
+ {
1112
+ originX: originFallbackX,
1113
+ originY: originY,
1114
+ overlayX: overlayFallbackX,
1115
+ overlayY: overlayY,
1116
+ offsetX: -offsetX,
1117
+ },
1118
+ {
1119
+ originX: originFallbackX,
1120
+ originY: origin2ndY,
1121
+ overlayX: overlayFallbackX,
1122
+ overlayY: origin2ndY,
1123
+ offsetX: -offsetX,
1124
+ },
1125
+ {
1126
+ originX: originFallbackX,
1127
+ originY: origin3rdY,
1128
+ overlayX: overlayFallbackX,
1129
+ overlayY: origin3rdY,
1130
+ offsetX: -offsetX,
1131
+ },
1132
+ ];
1133
+ }
1043
1134
  return this._overlay
1044
1135
  .position()
1045
1136
  .flexibleConnectedTo(element)
1046
- .withLockedPosition(true)
1047
- .withPositions([
1048
- {
1049
- originX: originX,
1050
- originY: originY,
1051
- overlayX: overlayX,
1052
- overlayY: overlayY,
1053
- offsetY: offsetY,
1054
- },
1055
- {
1056
- originX: origin2ndX,
1057
- originY: originY,
1058
- overlayX: origin2ndX,
1059
- overlayY: overlayY,
1060
- offsetY: offsetY,
1061
- },
1062
- {
1063
- originX: originX,
1064
- originY: originFallbackY,
1065
- overlayX: overlayX,
1066
- overlayY: overlayFallbackY,
1067
- offsetY: -offsetY,
1068
- },
1069
- {
1070
- originX: origin2ndX,
1071
- originY: originFallbackY,
1072
- overlayX: origin2ndX,
1073
- overlayY: overlayFallbackY,
1074
- offsetY: -offsetY,
1075
- },
1076
- {
1077
- originX: origin3rdX,
1078
- originY: originY,
1079
- overlayX: origin3rdX,
1080
- overlayY: overlayY,
1081
- offsetY: offsetY,
1082
- },
1083
- {
1084
- originX: origin3rdX,
1085
- originY: originFallbackY,
1086
- overlayX: origin3rdX,
1087
- overlayY: overlayFallbackY,
1088
- offsetY: -offsetY,
1089
- },
1090
- ])
1137
+ .withLockedPosition()
1138
+ .withPositions(positions)
1091
1139
  .withDefaultOffsetX(offsetX)
1092
1140
  .withDefaultOffsetY(offsetY);
1093
1141
  };