ng-zorro-antd-core-overlay.mjs 10 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192
  1. import * as i1 from '@angular/cdk/overlay';
  2. import { ConnectionPositionPair, CdkOverlayOrigin } from '@angular/cdk/overlay';
  3. import * as i0 from '@angular/core';
  4. import { ElementRef, booleanAttribute, Input, Directive, NgModule } from '@angular/core';
  5. import { takeUntil } from 'rxjs/operators';
  6. import * as i2 from 'ng-zorro-antd/core/services';
  7. import { NzDestroyService } from 'ng-zorro-antd/core/services';
  8. /**
  9. * Use of this source code is governed by an MIT-style license that can be
  10. * found in the LICENSE file at https://github.com/NG-ZORRO/ng-zorro-antd/blob/master/LICENSE
  11. */
  12. const POSITION_MAP = {
  13. top: new ConnectionPositionPair({ originX: 'center', originY: 'top' }, { overlayX: 'center', overlayY: 'bottom' }),
  14. topCenter: new ConnectionPositionPair({ originX: 'center', originY: 'top' }, { overlayX: 'center', overlayY: 'bottom' }),
  15. topLeft: new ConnectionPositionPair({ originX: 'start', originY: 'top' }, { overlayX: 'start', overlayY: 'bottom' }),
  16. topRight: new ConnectionPositionPair({ originX: 'end', originY: 'top' }, { overlayX: 'end', overlayY: 'bottom' }),
  17. right: new ConnectionPositionPair({ originX: 'end', originY: 'center' }, { overlayX: 'start', overlayY: 'center' }),
  18. rightTop: new ConnectionPositionPair({ originX: 'end', originY: 'top' }, { overlayX: 'start', overlayY: 'top' }),
  19. rightBottom: new ConnectionPositionPair({ originX: 'end', originY: 'bottom' }, { overlayX: 'start', overlayY: 'bottom' }),
  20. bottom: new ConnectionPositionPair({ originX: 'center', originY: 'bottom' }, { overlayX: 'center', overlayY: 'top' }),
  21. bottomCenter: new ConnectionPositionPair({ originX: 'center', originY: 'bottom' }, { overlayX: 'center', overlayY: 'top' }),
  22. bottomLeft: new ConnectionPositionPair({ originX: 'start', originY: 'bottom' }, { overlayX: 'start', overlayY: 'top' }),
  23. bottomRight: new ConnectionPositionPair({ originX: 'end', originY: 'bottom' }, { overlayX: 'end', overlayY: 'top' }),
  24. left: new ConnectionPositionPair({ originX: 'start', originY: 'center' }, { overlayX: 'end', overlayY: 'center' }),
  25. leftTop: new ConnectionPositionPair({ originX: 'start', originY: 'top' }, { overlayX: 'end', overlayY: 'top' }),
  26. leftBottom: new ConnectionPositionPair({ originX: 'start', originY: 'bottom' }, { overlayX: 'end', overlayY: 'bottom' })
  27. };
  28. const DEFAULT_TOOLTIP_POSITIONS = [POSITION_MAP.top, POSITION_MAP.right, POSITION_MAP.bottom, POSITION_MAP.left];
  29. const DEFAULT_CASCADER_POSITIONS = [
  30. POSITION_MAP.bottomLeft,
  31. POSITION_MAP.bottomRight,
  32. POSITION_MAP.topLeft,
  33. POSITION_MAP.topRight
  34. ];
  35. const DEFAULT_MENTION_TOP_POSITIONS = [
  36. new ConnectionPositionPair({ originX: 'start', originY: 'bottom' }, { overlayX: 'start', overlayY: 'bottom' }),
  37. new ConnectionPositionPair({ originX: 'start', originY: 'bottom' }, { overlayX: 'end', overlayY: 'bottom' })
  38. ];
  39. const DEFAULT_MENTION_BOTTOM_POSITIONS = [
  40. POSITION_MAP.bottomLeft,
  41. new ConnectionPositionPair({ originX: 'start', originY: 'bottom' }, { overlayX: 'end', overlayY: 'top' })
  42. ];
  43. function getPlacementName(position) {
  44. for (const placement in POSITION_MAP) {
  45. if (position.connectionPair.originX === POSITION_MAP[placement].originX &&
  46. position.connectionPair.originY === POSITION_MAP[placement].originY &&
  47. position.connectionPair.overlayX === POSITION_MAP[placement].overlayX &&
  48. position.connectionPair.overlayY === POSITION_MAP[placement].overlayY) {
  49. return placement;
  50. }
  51. }
  52. return undefined;
  53. }
  54. const DATE_PICKER_POSITION_MAP = {
  55. bottomLeft: new ConnectionPositionPair({ originX: 'start', originY: 'bottom' }, { overlayX: 'start', overlayY: 'top' }, undefined, 2),
  56. topLeft: new ConnectionPositionPair({ originX: 'start', originY: 'top' }, { overlayX: 'start', overlayY: 'bottom' }, undefined, -2),
  57. bottomRight: new ConnectionPositionPair({ originX: 'end', originY: 'bottom' }, { overlayX: 'end', overlayY: 'top' }, undefined, 2),
  58. topRight: new ConnectionPositionPair({ originX: 'end', originY: 'top' }, { overlayX: 'end', overlayY: 'bottom' }, undefined, -2)
  59. };
  60. const DEFAULT_DATE_PICKER_POSITIONS = [
  61. DATE_PICKER_POSITION_MAP.bottomLeft,
  62. DATE_PICKER_POSITION_MAP.topLeft,
  63. DATE_PICKER_POSITION_MAP.bottomRight,
  64. DATE_PICKER_POSITION_MAP.topRight
  65. ];
  66. /**
  67. * Use of this source code is governed by an MIT-style license that can be
  68. * found in the LICENSE file at https://github.com/NG-ZORRO/ng-zorro-antd/blob/master/LICENSE
  69. */
  70. class NzConnectedOverlayDirective {
  71. cdkConnectedOverlay;
  72. nzDestroyService;
  73. nzArrowPointAtCenter = false;
  74. constructor(cdkConnectedOverlay, nzDestroyService) {
  75. this.cdkConnectedOverlay = cdkConnectedOverlay;
  76. this.nzDestroyService = nzDestroyService;
  77. this.cdkConnectedOverlay.backdropClass = 'nz-overlay-transparent-backdrop';
  78. this.cdkConnectedOverlay.positionChange
  79. .pipe(takeUntil(this.nzDestroyService))
  80. .subscribe((position) => {
  81. if (this.nzArrowPointAtCenter) {
  82. this.updateArrowPosition(position);
  83. }
  84. });
  85. }
  86. updateArrowPosition(position) {
  87. const originRect = this.getOriginRect();
  88. const placement = getPlacementName(position);
  89. let offsetX = 0;
  90. let offsetY = 0;
  91. if (placement === 'topLeft' || placement === 'bottomLeft') {
  92. offsetX = originRect.width / 2 - 14;
  93. }
  94. else if (placement === 'topRight' || placement === 'bottomRight') {
  95. offsetX = -(originRect.width / 2 - 14);
  96. }
  97. else if (placement === 'leftTop' || placement === 'rightTop') {
  98. offsetY = originRect.height / 2 - 10;
  99. }
  100. else if (placement === 'leftBottom' || placement === 'rightBottom') {
  101. offsetY = -(originRect.height / 2 - 10);
  102. }
  103. if (this.cdkConnectedOverlay.offsetX !== offsetX || this.cdkConnectedOverlay.offsetY !== offsetY) {
  104. this.cdkConnectedOverlay.offsetY = offsetY;
  105. this.cdkConnectedOverlay.offsetX = offsetX;
  106. this.cdkConnectedOverlay.overlayRef.updatePosition();
  107. }
  108. }
  109. getFlexibleConnectedPositionStrategyOrigin() {
  110. if (this.cdkConnectedOverlay.origin instanceof CdkOverlayOrigin) {
  111. return this.cdkConnectedOverlay.origin.elementRef;
  112. }
  113. else {
  114. return this.cdkConnectedOverlay.origin;
  115. }
  116. }
  117. getOriginRect() {
  118. const origin = this.getFlexibleConnectedPositionStrategyOrigin();
  119. if (origin instanceof ElementRef) {
  120. return origin.nativeElement.getBoundingClientRect();
  121. }
  122. // Check for Element so SVG elements are also supported.
  123. if (origin instanceof Element) {
  124. return origin.getBoundingClientRect();
  125. }
  126. const width = origin.width || 0;
  127. const height = origin.height || 0;
  128. // If the origin is a point, return a client rect as if it was a 0x0 element at the point.
  129. return {
  130. top: origin.y,
  131. bottom: origin.y + height,
  132. left: origin.x,
  133. right: origin.x + width,
  134. height,
  135. width
  136. };
  137. }
  138. static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.2", ngImport: i0, type: NzConnectedOverlayDirective, deps: [{ token: i1.CdkConnectedOverlay }, { token: i2.NzDestroyService }], target: i0.ɵɵFactoryTarget.Directive });
  139. static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "16.1.0", version: "19.2.2", type: NzConnectedOverlayDirective, isStandalone: true, selector: "[cdkConnectedOverlay][nzConnectedOverlay]", inputs: { nzArrowPointAtCenter: ["nzArrowPointAtCenter", "nzArrowPointAtCenter", booleanAttribute] }, providers: [NzDestroyService], exportAs: ["nzConnectedOverlay"], ngImport: i0 });
  140. }
  141. i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.2", ngImport: i0, type: NzConnectedOverlayDirective, decorators: [{
  142. type: Directive,
  143. args: [{
  144. selector: '[cdkConnectedOverlay][nzConnectedOverlay]',
  145. exportAs: 'nzConnectedOverlay',
  146. providers: [NzDestroyService]
  147. }]
  148. }], ctorParameters: () => [{ type: i1.CdkConnectedOverlay }, { type: i2.NzDestroyService }], propDecorators: { nzArrowPointAtCenter: [{
  149. type: Input,
  150. args: [{ transform: booleanAttribute }]
  151. }] } });
  152. /**
  153. * Use of this source code is governed by an MIT-style license that can be
  154. * found in the LICENSE file at https://github.com/NG-ZORRO/ng-zorro-antd/blob/master/LICENSE
  155. */
  156. class NzOverlayModule {
  157. static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.2", ngImport: i0, type: NzOverlayModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
  158. static ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "19.2.2", ngImport: i0, type: NzOverlayModule, imports: [NzConnectedOverlayDirective], exports: [NzConnectedOverlayDirective] });
  159. static ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "19.2.2", ngImport: i0, type: NzOverlayModule });
  160. }
  161. i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.2", ngImport: i0, type: NzOverlayModule, decorators: [{
  162. type: NgModule,
  163. args: [{
  164. imports: [NzConnectedOverlayDirective],
  165. exports: [NzConnectedOverlayDirective]
  166. }]
  167. }] });
  168. /**
  169. * Use of this source code is governed by an MIT-style license that can be
  170. * found in the LICENSE file at https://github.com/NG-ZORRO/ng-zorro-antd/blob/master/LICENSE
  171. */
  172. function overlayZIndexSetter(overlayRef, zIndex) {
  173. if (!zIndex)
  174. return;
  175. overlayRef['_host'].style.zIndex = `${zIndex}`;
  176. }
  177. /**
  178. * Use of this source code is governed by an MIT-style license that can be
  179. * found in the LICENSE file at https://github.com/NG-ZORRO/ng-zorro-antd/blob/master/LICENSE
  180. */
  181. /**
  182. * Generated bundle index. Do not edit.
  183. */
  184. export { DATE_PICKER_POSITION_MAP, DEFAULT_CASCADER_POSITIONS, DEFAULT_DATE_PICKER_POSITIONS, DEFAULT_MENTION_BOTTOM_POSITIONS, DEFAULT_MENTION_TOP_POSITIONS, DEFAULT_TOOLTIP_POSITIONS, NzConnectedOverlayDirective, NzOverlayModule, POSITION_MAP, getPlacementName, overlayZIndexSetter };
  185. //# sourceMappingURL=ng-zorro-antd-core-overlay.mjs.map