@ng-nest/ui 13.0.4 → 13.0.8

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 (167) hide show
  1. package/alert/alert.component.d.ts +2 -1
  2. package/core/config/config.d.ts +7 -1
  3. package/core/interfaces/layout.type.d.ts +1 -1
  4. package/dialog/{dialog-container.component.d.ts → dialog-portal.component.d.ts} +3 -3
  5. package/dialog/{dialog-container.directives.d.ts → dialog-portal.directives.d.ts} +0 -0
  6. package/dialog/dialog-ref.d.ts +3 -3
  7. package/dialog/dialog.module.d.ts +3 -3
  8. package/dialog/dialog.property.d.ts +3 -3
  9. package/dialog/public-api.d.ts +2 -2
  10. package/drawer/drawer-container.component.d.ts +3 -13
  11. package/drawer/drawer-portal.component.d.ts +18 -0
  12. package/drawer/{drawer-container.directives.d.ts → drawer-portal.directives.d.ts} +0 -0
  13. package/drawer/drawer-ref.d.ts +3 -3
  14. package/drawer/drawer.component.d.ts +10 -3
  15. package/drawer/drawer.module.d.ts +9 -8
  16. package/drawer/drawer.property.d.ts +16 -2
  17. package/drawer/examples/en_US/default/container/README.md +6 -0
  18. package/drawer/examples/zh_CN/default/container/README.md +6 -0
  19. package/drawer/public-api.d.ts +3 -2
  20. package/esm2020/alert/alert.component.mjs +9 -4
  21. package/esm2020/auto-complete/auto-complete.module.mjs +2 -3
  22. package/esm2020/cascade/cascade.module.mjs +2 -3
  23. package/esm2020/color-picker/color-picker.module.mjs +2 -3
  24. package/esm2020/core/config/config.mjs +1 -1
  25. package/esm2020/core/interfaces/layout.type.mjs +1 -1
  26. package/esm2020/date-picker/date-picker.module.mjs +2 -3
  27. package/esm2020/dialog/dialog-portal.component.mjs +52 -0
  28. package/esm2020/dialog/{dialog-container.directives.mjs → dialog-portal.directives.mjs} +7 -7
  29. package/esm2020/dialog/dialog-ref.mjs +1 -1
  30. package/esm2020/dialog/dialog.component.mjs +5 -5
  31. package/esm2020/dialog/dialog.module.mjs +7 -7
  32. package/esm2020/dialog/dialog.property.mjs +2 -2
  33. package/esm2020/dialog/dialog.service.mjs +3 -3
  34. package/esm2020/dialog/public-api.mjs +3 -3
  35. package/esm2020/drawer/drawer-container.component.mjs +16 -39
  36. package/esm2020/drawer/drawer-portal.component.mjs +52 -0
  37. package/esm2020/drawer/{drawer-container.directives.mjs → drawer-portal.directives.mjs} +5 -5
  38. package/esm2020/drawer/drawer-ref.mjs +1 -1
  39. package/esm2020/drawer/drawer.component.mjs +54 -18
  40. package/esm2020/drawer/drawer.module.mjs +23 -6
  41. package/esm2020/drawer/drawer.property.mjs +19 -1
  42. package/esm2020/drawer/drawer.service.mjs +4 -4
  43. package/esm2020/drawer/public-api.mjs +4 -3
  44. package/esm2020/dropdown/dropdown.module.mjs +2 -3
  45. package/esm2020/find/find.component.mjs +13 -4
  46. package/esm2020/find/find.property.mjs +18 -2
  47. package/esm2020/menu/menu.component.mjs +3 -3
  48. package/esm2020/menu/menu.property.mjs +7 -2
  49. package/esm2020/message/message-ref.mjs +12 -0
  50. package/esm2020/message/message.component.mjs +3 -3
  51. package/esm2020/message/message.property.mjs +1 -1
  52. package/esm2020/message/message.service.mjs +34 -13
  53. package/esm2020/message/public-api.mjs +2 -1
  54. package/esm2020/popconfirm/popconfirm.component.mjs +26 -5
  55. package/esm2020/popconfirm/popconfirm.property.mjs +10 -3
  56. package/esm2020/popover/popover.directive.mjs +8 -2
  57. package/esm2020/popover/popover.module.mjs +2 -3
  58. package/esm2020/popover/popover.property.mjs +7 -2
  59. package/esm2020/select/select.module.mjs +2 -3
  60. package/esm2020/table/table-body.component.mjs +4 -4
  61. package/esm2020/table/table.component.mjs +3 -3
  62. package/esm2020/table/table.property.mjs +7 -3
  63. package/esm2020/time-picker/time-picker.module.mjs +2 -3
  64. package/esm2020/tooltip/tooltip.directive.mjs +12 -4
  65. package/esm2020/tooltip/tooltip.module.mjs +2 -3
  66. package/esm2020/tooltip/tooltip.property.mjs +18 -2
  67. package/esm2020/tree/tree-node.component.mjs +3 -3
  68. package/esm2020/tree/tree.property.mjs +8 -2
  69. package/fesm2015/ng-nest-ui-alert.mjs +8 -3
  70. package/fesm2015/ng-nest-ui-alert.mjs.map +1 -1
  71. package/fesm2015/ng-nest-ui-auto-complete.mjs +1 -2
  72. package/fesm2015/ng-nest-ui-auto-complete.mjs.map +1 -1
  73. package/fesm2015/ng-nest-ui-cascade.mjs +1 -2
  74. package/fesm2015/ng-nest-ui-cascade.mjs.map +1 -1
  75. package/fesm2015/ng-nest-ui-color-picker.mjs +1 -2
  76. package/fesm2015/ng-nest-ui-color-picker.mjs.map +1 -1
  77. package/fesm2015/ng-nest-ui-core.mjs.map +1 -1
  78. package/fesm2015/ng-nest-ui-date-picker.mjs +1 -2
  79. package/fesm2015/ng-nest-ui-date-picker.mjs.map +1 -1
  80. package/fesm2015/ng-nest-ui-dialog.mjs +22 -22
  81. package/fesm2015/ng-nest-ui-dialog.mjs.map +1 -1
  82. package/fesm2015/ng-nest-ui-drawer.mjs +129 -32
  83. package/fesm2015/ng-nest-ui-drawer.mjs.map +1 -1
  84. package/fesm2015/ng-nest-ui-dropdown.mjs +1 -2
  85. package/fesm2015/ng-nest-ui-dropdown.mjs.map +1 -1
  86. package/fesm2015/ng-nest-ui-find.mjs +29 -4
  87. package/fesm2015/ng-nest-ui-find.mjs.map +1 -1
  88. package/fesm2015/ng-nest-ui-menu.mjs +8 -3
  89. package/fesm2015/ng-nest-ui-menu.mjs.map +1 -1
  90. package/fesm2015/ng-nest-ui-message.mjs +48 -15
  91. package/fesm2015/ng-nest-ui-message.mjs.map +1 -1
  92. package/fesm2015/ng-nest-ui-popconfirm.mjs +34 -6
  93. package/fesm2015/ng-nest-ui-popconfirm.mjs.map +1 -1
  94. package/fesm2015/ng-nest-ui-popover.mjs +14 -4
  95. package/fesm2015/ng-nest-ui-popover.mjs.map +1 -1
  96. package/fesm2015/ng-nest-ui-select.mjs +1 -2
  97. package/fesm2015/ng-nest-ui-select.mjs.map +1 -1
  98. package/fesm2015/ng-nest-ui-table.mjs +11 -7
  99. package/fesm2015/ng-nest-ui-table.mjs.map +1 -1
  100. package/fesm2015/ng-nest-ui-time-picker.mjs +1 -2
  101. package/fesm2015/ng-nest-ui-time-picker.mjs.map +1 -1
  102. package/fesm2015/ng-nest-ui-tooltip.mjs +29 -6
  103. package/fesm2015/ng-nest-ui-tooltip.mjs.map +1 -1
  104. package/fesm2015/ng-nest-ui-tree.mjs +9 -3
  105. package/fesm2015/ng-nest-ui-tree.mjs.map +1 -1
  106. package/fesm2020/ng-nest-ui-alert.mjs +8 -3
  107. package/fesm2020/ng-nest-ui-alert.mjs.map +1 -1
  108. package/fesm2020/ng-nest-ui-auto-complete.mjs +1 -2
  109. package/fesm2020/ng-nest-ui-auto-complete.mjs.map +1 -1
  110. package/fesm2020/ng-nest-ui-cascade.mjs +1 -2
  111. package/fesm2020/ng-nest-ui-cascade.mjs.map +1 -1
  112. package/fesm2020/ng-nest-ui-color-picker.mjs +1 -2
  113. package/fesm2020/ng-nest-ui-color-picker.mjs.map +1 -1
  114. package/fesm2020/ng-nest-ui-core.mjs.map +1 -1
  115. package/fesm2020/ng-nest-ui-date-picker.mjs +1 -2
  116. package/fesm2020/ng-nest-ui-date-picker.mjs.map +1 -1
  117. package/fesm2020/ng-nest-ui-dialog.mjs +22 -22
  118. package/fesm2020/ng-nest-ui-dialog.mjs.map +1 -1
  119. package/fesm2020/ng-nest-ui-drawer.mjs +127 -32
  120. package/fesm2020/ng-nest-ui-drawer.mjs.map +1 -1
  121. package/fesm2020/ng-nest-ui-dropdown.mjs +1 -2
  122. package/fesm2020/ng-nest-ui-dropdown.mjs.map +1 -1
  123. package/fesm2020/ng-nest-ui-find.mjs +29 -4
  124. package/fesm2020/ng-nest-ui-find.mjs.map +1 -1
  125. package/fesm2020/ng-nest-ui-menu.mjs +8 -3
  126. package/fesm2020/ng-nest-ui-menu.mjs.map +1 -1
  127. package/fesm2020/ng-nest-ui-message.mjs +47 -15
  128. package/fesm2020/ng-nest-ui-message.mjs.map +1 -1
  129. package/fesm2020/ng-nest-ui-popconfirm.mjs +34 -6
  130. package/fesm2020/ng-nest-ui-popconfirm.mjs.map +1 -1
  131. package/fesm2020/ng-nest-ui-popover.mjs +14 -4
  132. package/fesm2020/ng-nest-ui-popover.mjs.map +1 -1
  133. package/fesm2020/ng-nest-ui-select.mjs +1 -2
  134. package/fesm2020/ng-nest-ui-select.mjs.map +1 -1
  135. package/fesm2020/ng-nest-ui-table.mjs +11 -7
  136. package/fesm2020/ng-nest-ui-table.mjs.map +1 -1
  137. package/fesm2020/ng-nest-ui-time-picker.mjs +1 -2
  138. package/fesm2020/ng-nest-ui-time-picker.mjs.map +1 -1
  139. package/fesm2020/ng-nest-ui-tooltip.mjs +29 -6
  140. package/fesm2020/ng-nest-ui-tooltip.mjs.map +1 -1
  141. package/fesm2020/ng-nest-ui-tree.mjs +9 -3
  142. package/fesm2020/ng-nest-ui-tree.mjs.map +1 -1
  143. package/find/find.property.d.ts +31 -1
  144. package/menu/menu.property.d.ts +8 -3
  145. package/message/examples/en_US/default/loading/README.md +6 -0
  146. package/message/examples/zh_CN/default/loading/README.md +6 -0
  147. package/message/message-ref.d.ts +8 -0
  148. package/message/message.component.d.ts +3 -3
  149. package/message/message.property.d.ts +23 -3
  150. package/message/message.service.d.ts +4 -1
  151. package/message/public-api.d.ts +1 -0
  152. package/package.json +7 -7
  153. package/popconfirm/examples/en_US/default/async-close/README.md +6 -0
  154. package/popconfirm/examples/en_US/default/condition/README.md +6 -0
  155. package/popconfirm/examples/zh_CN/default/async-close/README.md +6 -0
  156. package/popconfirm/examples/zh_CN/default/condition/README.md +6 -0
  157. package/popconfirm/popconfirm.component.d.ts +6 -2
  158. package/popconfirm/popconfirm.property.d.ts +13 -2
  159. package/popover/popover.property.d.ts +6 -1
  160. package/steps/examples/zh_CN/default/node-status/README.md +1 -1
  161. package/table/examples/en_US/default/rowclass/README.md +6 -0
  162. package/table/examples/zh_CN/default/rowclass/README.md +6 -0
  163. package/table/table.property.d.ts +23 -2
  164. package/tooltip/tooltip.directive.d.ts +1 -0
  165. package/tooltip/tooltip.property.d.ts +11 -1
  166. package/tree/tree.property.d.ts +6 -1
  167. package/esm2020/dialog/dialog-container.component.mjs +0 -52
@@ -1,8 +1,8 @@
1
1
  import * as i0 from '@angular/core';
2
- import { InjectionToken, EventEmitter, Component, Input, Output, ViewEncapsulation, ChangeDetectionStrategy, ViewChild, HostBinding, HostListener, Directive, Optional, TemplateRef, Injectable, NgModule } from '@angular/core';
2
+ import { InjectionToken, EventEmitter, Component, Input, Output, ViewEncapsulation, ChangeDetectionStrategy, HostBinding, Optional, Inject, ViewChild, HostListener, Directive, TemplateRef, Injectable, NgModule } from '@angular/core';
3
3
  import { __decorate } from 'tslib';
4
4
  import * as i3 from '@ng-nest/ui/core';
5
- import { XProperty, XInputBoolean, XWithConfig, XIsChange, XIsEmpty, XSlideAnimation, fillDefault } from '@ng-nest/ui/core';
5
+ import { XProperty, XInputBoolean, XWithConfig, XIsChange, XClearClass, XIsEmpty, XSlideAnimation, fillDefault } from '@ng-nest/ui/core';
6
6
  import * as i1 from '@angular/cdk/overlay';
7
7
  import * as i2 from '@ng-nest/ui/portal';
8
8
  import { XPortalModule } from '@ng-nest/ui/portal';
@@ -83,10 +83,54 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.3", ngImpor
83
83
  type: Output
84
84
  }], visibleChange: [{
85
85
  type: Output
86
+ }] } });
87
+ /**
88
+ * Drawer Container
89
+ * @selector x-drawer-container
90
+ * @decorator component
91
+ */
92
+ const XDrawerContainerPrefix = 'x-drawer-container';
93
+ const X_DRAWER_CONTAINER = new InjectionToken('X_DRAWER_CONTAINER');
94
+ /**
95
+ * Drawer Container Property
96
+ */
97
+ class XDrawerContainerProperty extends XProperty {
98
+ }
99
+ /** @nocollapse */ /** @nocollapse */ XDrawerContainerProperty.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.0.3", ngImport: i0, type: XDrawerContainerProperty, deps: null, target: i0.ɵɵFactoryTarget.Component });
100
+ /** @nocollapse */ /** @nocollapse */ XDrawerContainerProperty.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.0.3", type: XDrawerContainerProperty, selector: "ng-component", usesInheritance: true, ngImport: i0, template: '', isInline: true });
101
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.3", ngImport: i0, type: XDrawerContainerProperty, decorators: [{
102
+ type: Component,
103
+ args: [{ template: '' }]
104
+ }] });
105
+
106
+ class XDrawerContainerComponent extends XDrawerContainerProperty {
107
+ constructor() {
108
+ super();
109
+ this._has = true;
110
+ }
111
+ }
112
+ /** @nocollapse */ /** @nocollapse */ XDrawerContainerComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.0.3", ngImport: i0, type: XDrawerContainerComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
113
+ /** @nocollapse */ /** @nocollapse */ XDrawerContainerComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.0.3", type: XDrawerContainerComponent, selector: "x-drawer-container", host: { properties: { "class.x-drawer-container": "this._has" } }, providers: [
114
+ {
115
+ provide: X_DRAWER_CONTAINER,
116
+ useExisting: XDrawerContainerComponent
117
+ }
118
+ ], usesInheritance: true, ngImport: i0, template: "<ng-content></ng-content>\r\n", styles: [".x-drawer-container{margin:0;padding:0;position:relative;z-index:1;box-sizing:border-box;display:block;overflow:hidden}.x-drawer-container .x-drawer{position:absolute;display:block;outline:0;z-index:2;transition:transform .2s ease-in,visibility .2s ease-in;visibility:hidden}.x-drawer-container .x-drawer-left{transform:translate(-100%);left:0;top:0}.x-drawer-container .x-drawer-right{transform:translate(100%);right:0;top:0}.x-drawer-container .x-drawer-top{transform:translateY(-100%);top:0;left:0}.x-drawer-container .x-drawer-bottom{transform:translateY(100%);bottom:0;left:0}.x-drawer-container .x-drawer-visible{transform:translate(0);visibility:inherit}.x-drawer-container .x-drawer-visible .x-drawer-backdrop{opacity:1;z-index:1}.x-drawer-container .x-drawer-backdrop{position:absolute;top:0;bottom:0;left:0;right:0;z-index:-1;pointer-events:auto;background:rgba(0,0,0,.32);transition:opacity .4s cubic-bezier(.25,.8,.25,1),z-index 0 ease-in .4s;opacity:0}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
119
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.3", ngImport: i0, type: XDrawerContainerComponent, decorators: [{
120
+ type: Component,
121
+ args: [{ selector: 'x-drawer-container', encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, providers: [
122
+ {
123
+ provide: X_DRAWER_CONTAINER,
124
+ useExisting: XDrawerContainerComponent
125
+ }
126
+ ], template: "<ng-content></ng-content>\r\n", styles: [".x-drawer-container{margin:0;padding:0;position:relative;z-index:1;box-sizing:border-box;display:block;overflow:hidden}.x-drawer-container .x-drawer{position:absolute;display:block;outline:0;z-index:2;transition:transform .2s ease-in,visibility .2s ease-in;visibility:hidden}.x-drawer-container .x-drawer-left{transform:translate(-100%);left:0;top:0}.x-drawer-container .x-drawer-right{transform:translate(100%);right:0;top:0}.x-drawer-container .x-drawer-top{transform:translateY(-100%);top:0;left:0}.x-drawer-container .x-drawer-bottom{transform:translateY(100%);bottom:0;left:0}.x-drawer-container .x-drawer-visible{transform:translate(0);visibility:inherit}.x-drawer-container .x-drawer-visible .x-drawer-backdrop{opacity:1;z-index:1}.x-drawer-container .x-drawer-backdrop{position:absolute;top:0;bottom:0;left:0;right:0;z-index:-1;pointer-events:auto;background:rgba(0,0,0,.32);transition:opacity .4s cubic-bezier(.25,.8,.25,1),z-index 0 ease-in .4s;opacity:0}\n"] }]
127
+ }], ctorParameters: function () { return []; }, propDecorators: { _has: [{
128
+ type: HostBinding,
129
+ args: ['class.x-drawer-container']
86
130
  }] } });
87
131
 
88
132
  class XDrawerComponent extends XDrawerProperty {
89
- constructor(renderer, elementRef, cdr, overlay, portalService, viewContainerRef, configService) {
133
+ constructor(renderer, elementRef, cdr, overlay, portalService, viewContainerRef, configService, container) {
90
134
  super();
91
135
  this.renderer = renderer;
92
136
  this.elementRef = elementRef;
@@ -95,14 +139,25 @@ class XDrawerComponent extends XDrawerProperty {
95
139
  this.portalService = portalService;
96
140
  this.viewContainerRef = viewContainerRef;
97
141
  this.configService = configService;
142
+ this.container = container;
98
143
  this.back$ = null;
144
+ this.width = '100%';
145
+ this.height = '100%';
146
+ }
147
+ get getVisible() {
148
+ return this.visible;
99
149
  }
100
150
  ngOnInit() {
101
151
  this.setClassMap();
152
+ this.setSize();
102
153
  }
103
154
  ngOnChanges(simples) {
104
- const { visible } = simples;
155
+ const { visible, placement } = simples;
105
156
  XIsChange(visible) && this.setVisible();
157
+ if (XIsChange(placement)) {
158
+ this.setClassMap();
159
+ this.setSize();
160
+ }
106
161
  }
107
162
  ngOnDestroy() {
108
163
  this.unsubscribe();
@@ -111,11 +166,22 @@ class XDrawerComponent extends XDrawerProperty {
111
166
  this.back$?.unsubscribe();
112
167
  }
113
168
  setClassMap() {
169
+ XClearClass(this.classMap);
114
170
  this.classMap = {
115
171
  [`${XDrawerPrefix}-${this.placement}`]: !XIsEmpty(this.placement),
116
172
  [`${XDrawerPrefix}-no-title`]: XIsEmpty(this.title)
117
173
  };
118
174
  }
175
+ setSize() {
176
+ if (this.container)
177
+ [this.width, this.height] = this.getSize();
178
+ }
179
+ getSize() {
180
+ return [
181
+ this.placement === 'left' || this.placement === 'right' ? this.size : '100%',
182
+ this.placement === 'top' || this.placement === 'bottom' ? this.size : '100%'
183
+ ];
184
+ }
119
185
  setVisible() {
120
186
  if (this.visible) {
121
187
  this.createPortal();
@@ -125,14 +191,15 @@ class XDrawerComponent extends XDrawerProperty {
125
191
  }
126
192
  }
127
193
  createPortal() {
128
- const width = this.placement === 'left' || this.placement === 'right' ? this.size : '100%';
129
- const height = this.placement === 'top' || this.placement === 'bottom' ? this.size : '100%';
194
+ if (this.container)
195
+ return;
196
+ const [width, height] = this.getSize();
130
197
  this.portal = this.portalService.attach({
131
198
  content: this.drawerTpl,
132
199
  viewContainerRef: this.viewContainerRef,
133
200
  overlayConfig: {
134
201
  hasBackdrop: true,
135
- scrollStrategy: this.overlay.scrollStrategies.reposition(),
202
+ scrollStrategy: this.overlay.scrollStrategies.block(),
136
203
  positionStrategy: this.portalService.setPosition(this.placement, width, height)
137
204
  }
138
205
  });
@@ -143,27 +210,39 @@ class XDrawerComponent extends XDrawerProperty {
143
210
  return this.portal?.overlayRef?.hasAttached();
144
211
  }
145
212
  closePortal() {
146
- if (this.portalAttached()) {
147
- this.portal?.overlayRef?.detach();
148
- this.unsubscribe();
213
+ if (this.container) {
149
214
  this.visibleChange.emit(this.visible);
150
215
  this.close.emit();
151
- return true;
152
216
  }
153
- return false;
217
+ else {
218
+ if (this.portalAttached()) {
219
+ this.portal?.overlayRef?.detach();
220
+ this.unsubscribe();
221
+ this.visibleChange.emit(this.visible);
222
+ this.close.emit();
223
+ }
224
+ }
154
225
  }
155
226
  }
156
- /** @nocollapse */ /** @nocollapse */ XDrawerComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.0.3", ngImport: i0, type: XDrawerComponent, deps: [{ token: i0.Renderer2 }, { token: i0.ElementRef }, { token: i0.ChangeDetectorRef }, { token: i1.Overlay }, { token: i2.XPortalService }, { token: i0.ViewContainerRef }, { token: i3.XConfigService }], target: i0.ɵɵFactoryTarget.Component });
157
- /** @nocollapse */ /** @nocollapse */ XDrawerComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.0.3", type: XDrawerComponent, selector: "x-drawer", viewQueries: [{ propertyName: "drawerTpl", first: true, predicate: ["drawerTpl"], descendants: true, static: true }], usesInheritance: true, usesOnChanges: true, ngImport: i0, template: "<ng-template #drawerTpl>\r\n <div class=\"x-drawer\" [ngClass]=\"classMap\" [@x-slide-animation]=\"placement\">\r\n <div class=\"x-drawer-header\" *ngIf=\"title\">\r\n <div class=\"x-drawer-title\">\r\n <ng-container *xOutlet=\"title\">{{ title }}</ng-container>\r\n </div>\r\n <x-button class=\"x-drawer-close\" icon=\"fto-x\" (click)=\"closePortal()\" onlyIcon closable></x-button>\r\n </div>\r\n <div class=\"x-drawer-content\">\r\n <ng-content></ng-content>\r\n </div>\r\n </div>\r\n</ng-template>\r\n", styles: [".x-drawer{margin:0;padding:0;height:100%;width:100%;background-color:var(--x-background);position:relative;box-shadow:var(--x-box-shadow) var(--x-box-shadow-light-color)}.x-drawer-header{padding:1rem 1rem .5rem}.x-drawer-title{font-weight:600;color:var(--x-text-300);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.x-drawer-close{position:absolute;top:.425rem;right:.425rem}.x-drawer-title{padding:0}.x-drawer-content{padding:0 1rem 1rem;height:calc(100% - 3rem);overflow:auto}.x-drawer-no-title .x-drawer-content{padding:.5rem 1rem}\n"], components: [{ type: i4.XButtonComponent, selector: "x-button" }], directives: [{ type: i5.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i6.XOutletDirective, selector: "[xOutlet]", inputs: ["xOutletContext", "xOutlet"] }], animations: [XSlideAnimation], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
227
+ /** @nocollapse */ /** @nocollapse */ XDrawerComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.0.3", ngImport: i0, type: XDrawerComponent, deps: [{ token: i0.Renderer2 }, { token: i0.ElementRef }, { token: i0.ChangeDetectorRef }, { token: i1.Overlay }, { token: i2.XPortalService }, { token: i0.ViewContainerRef }, { token: i3.XConfigService }, { token: X_DRAWER_CONTAINER, optional: true }], target: i0.ɵɵFactoryTarget.Component });
228
+ /** @nocollapse */ /** @nocollapse */ XDrawerComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.0.3", type: XDrawerComponent, selector: "x-drawer", host: { properties: { "class.x-drawer-visible": "this.getVisible" } }, viewQueries: [{ propertyName: "drawerTpl", first: true, predicate: ["drawerTpl"], descendants: true, static: true }], usesInheritance: true, usesOnChanges: true, ngImport: i0, template: "<ng-template #drawerTpl>\r\n <div class=\"x-drawer-backdrop\" *ngIf=\"container\" (click)=\"closePortal()\"></div>\r\n <div\r\n class=\"x-drawer\"\r\n [ngClass]=\"classMap\"\r\n [style.width]=\"width\"\r\n [style.height]=\"height\"\r\n [class.x-drawer-visible]=\"visible\"\r\n [@x-slide-animation]=\"placement\"\r\n >\r\n <div class=\"x-drawer-header\" *ngIf=\"title\">\r\n <div class=\"x-drawer-title\">\r\n <ng-container *xOutlet=\"title\">{{ title }}</ng-container>\r\n </div>\r\n <x-button class=\"x-drawer-close\" icon=\"fto-x\" (click)=\"closePortal()\" onlyIcon closable></x-button>\r\n </div>\r\n <div class=\"x-drawer-content\">\r\n <ng-content></ng-content>\r\n </div>\r\n </div>\r\n</ng-template>\r\n<ng-container *ngIf=\"container\">\r\n <ng-container *ngTemplateOutlet=\"drawerTpl\"></ng-container>\r\n</ng-container>\r\n", styles: [".x-drawer{margin:0;padding:0;background-color:var(--x-background);position:relative;box-shadow:var(--x-box-shadow) var(--x-box-shadow-light-color)}.x-drawer-header{padding:1rem 1rem .5rem}.x-drawer-title{font-weight:600;color:var(--x-text-300);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.x-drawer-close{position:absolute;top:.425rem;right:.425rem}.x-drawer-title{padding:0}.x-drawer-content{padding:0 1rem 1rem;height:calc(100% - 3rem);overflow:auto}.x-drawer-no-title .x-drawer-content{padding:.5rem 1rem}\n"], components: [{ type: i4.XButtonComponent, selector: "x-button" }], directives: [{ type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i5.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { type: i6.XOutletDirective, selector: "[xOutlet]", inputs: ["xOutletContext", "xOutlet"] }, { type: i5.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet"] }], animations: [XSlideAnimation], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
158
229
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.3", ngImport: i0, type: XDrawerComponent, decorators: [{
159
230
  type: Component,
160
- args: [{ selector: `${XDrawerPrefix}`, encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, animations: [XSlideAnimation], template: "<ng-template #drawerTpl>\r\n <div class=\"x-drawer\" [ngClass]=\"classMap\" [@x-slide-animation]=\"placement\">\r\n <div class=\"x-drawer-header\" *ngIf=\"title\">\r\n <div class=\"x-drawer-title\">\r\n <ng-container *xOutlet=\"title\">{{ title }}</ng-container>\r\n </div>\r\n <x-button class=\"x-drawer-close\" icon=\"fto-x\" (click)=\"closePortal()\" onlyIcon closable></x-button>\r\n </div>\r\n <div class=\"x-drawer-content\">\r\n <ng-content></ng-content>\r\n </div>\r\n </div>\r\n</ng-template>\r\n", styles: [".x-drawer{margin:0;padding:0;height:100%;width:100%;background-color:var(--x-background);position:relative;box-shadow:var(--x-box-shadow) var(--x-box-shadow-light-color)}.x-drawer-header{padding:1rem 1rem .5rem}.x-drawer-title{font-weight:600;color:var(--x-text-300);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.x-drawer-close{position:absolute;top:.425rem;right:.425rem}.x-drawer-title{padding:0}.x-drawer-content{padding:0 1rem 1rem;height:calc(100% - 3rem);overflow:auto}.x-drawer-no-title .x-drawer-content{padding:.5rem 1rem}\n"] }]
161
- }], ctorParameters: function () { return [{ type: i0.Renderer2 }, { type: i0.ElementRef }, { type: i0.ChangeDetectorRef }, { type: i1.Overlay }, { type: i2.XPortalService }, { type: i0.ViewContainerRef }, { type: i3.XConfigService }]; }, propDecorators: { drawerTpl: [{
231
+ args: [{ selector: `${XDrawerPrefix}`, encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, animations: [XSlideAnimation], template: "<ng-template #drawerTpl>\r\n <div class=\"x-drawer-backdrop\" *ngIf=\"container\" (click)=\"closePortal()\"></div>\r\n <div\r\n class=\"x-drawer\"\r\n [ngClass]=\"classMap\"\r\n [style.width]=\"width\"\r\n [style.height]=\"height\"\r\n [class.x-drawer-visible]=\"visible\"\r\n [@x-slide-animation]=\"placement\"\r\n >\r\n <div class=\"x-drawer-header\" *ngIf=\"title\">\r\n <div class=\"x-drawer-title\">\r\n <ng-container *xOutlet=\"title\">{{ title }}</ng-container>\r\n </div>\r\n <x-button class=\"x-drawer-close\" icon=\"fto-x\" (click)=\"closePortal()\" onlyIcon closable></x-button>\r\n </div>\r\n <div class=\"x-drawer-content\">\r\n <ng-content></ng-content>\r\n </div>\r\n </div>\r\n</ng-template>\r\n<ng-container *ngIf=\"container\">\r\n <ng-container *ngTemplateOutlet=\"drawerTpl\"></ng-container>\r\n</ng-container>\r\n", styles: [".x-drawer{margin:0;padding:0;background-color:var(--x-background);position:relative;box-shadow:var(--x-box-shadow) var(--x-box-shadow-light-color)}.x-drawer-header{padding:1rem 1rem .5rem}.x-drawer-title{font-weight:600;color:var(--x-text-300);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.x-drawer-close{position:absolute;top:.425rem;right:.425rem}.x-drawer-title{padding:0}.x-drawer-content{padding:0 1rem 1rem;height:calc(100% - 3rem);overflow:auto}.x-drawer-no-title .x-drawer-content{padding:.5rem 1rem}\n"] }]
232
+ }], ctorParameters: function () { return [{ type: i0.Renderer2 }, { type: i0.ElementRef }, { type: i0.ChangeDetectorRef }, { type: i1.Overlay }, { type: i2.XPortalService }, { type: i0.ViewContainerRef }, { type: i3.XConfigService }, { type: XDrawerContainerComponent, decorators: [{
233
+ type: Optional
234
+ }, {
235
+ type: Inject,
236
+ args: [X_DRAWER_CONTAINER]
237
+ }] }]; }, propDecorators: { getVisible: [{
238
+ type: HostBinding,
239
+ args: ['class.x-drawer-visible']
240
+ }], drawerTpl: [{
162
241
  type: ViewChild,
163
242
  args: ['drawerTpl', { static: true }]
164
243
  }] } });
165
244
 
166
- class XDrawerContainerComponent extends BasePortalOutlet {
245
+ class XDrawerPortalComponent extends BasePortalOutlet {
167
246
  constructor() {
168
247
  super();
169
248
  this._has = true;
@@ -188,14 +267,14 @@ class XDrawerContainerComponent extends BasePortalOutlet {
188
267
  return this.portalOutlet.attachTemplatePortal(portal);
189
268
  }
190
269
  }
191
- /** @nocollapse */ /** @nocollapse */ XDrawerContainerComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.0.3", ngImport: i0, type: XDrawerContainerComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
192
- /** @nocollapse */ /** @nocollapse */ XDrawerContainerComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.0.3", type: XDrawerContainerComponent, selector: "x-drawer-container", host: { listeners: { "@x-slide-animation.done": "done($event)", "@x-slide-animation.start": "start($event)" }, properties: { "class.x-drawer-container": "this._has", "@x-slide-animation": "this.placement" } }, viewQueries: [{ propertyName: "portalOutlet", first: true, predicate: CdkPortalOutlet, descendants: true, static: true }], usesInheritance: true, ngImport: i0, template: "<ng-template cdkPortalOutlet></ng-template>\r\n", styles: [".x-drawer-container{margin:0;padding:0;height:100%;width:100%;background-color:var(--x-background);position:relative;box-shadow:var(--x-box-shadow) var(--x-box-shadow-light-color);overflow:auto;padding:1rem}.x-drawer-container-title{display:block;margin:0 0 .5rem;font-weight:600;color:var(--x-text-300);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.x-drawer-container-content{display:block;margin:0 -1rem;padding:0 1rem;overflow:auto}\n"], directives: [{ type: i1$1.CdkPortalOutlet, selector: "[cdkPortalOutlet]", inputs: ["cdkPortalOutlet"], outputs: ["attached"], exportAs: ["cdkPortalOutlet"] }], animations: [XSlideAnimation], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
193
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.3", ngImport: i0, type: XDrawerContainerComponent, decorators: [{
270
+ /** @nocollapse */ /** @nocollapse */ XDrawerPortalComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.0.3", ngImport: i0, type: XDrawerPortalComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
271
+ /** @nocollapse */ /** @nocollapse */ XDrawerPortalComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.0.3", type: XDrawerPortalComponent, selector: "x-drawer-portal", host: { listeners: { "@x-slide-animation.done": "done($event)", "@x-slide-animation.start": "start($event)" }, properties: { "class.x-drawer-portal": "this._has", "@x-slide-animation": "this.placement" } }, viewQueries: [{ propertyName: "portalOutlet", first: true, predicate: CdkPortalOutlet, descendants: true, static: true }], usesInheritance: true, ngImport: i0, template: "<ng-template cdkPortalOutlet></ng-template>\r\n", styles: [".x-drawer-portal{margin:0;padding:0;height:100%;width:100%;background-color:var(--x-background);position:relative;box-shadow:var(--x-box-shadow) var(--x-box-shadow-light-color);overflow:auto;padding:1rem}.x-drawer-portal-title{display:block;margin:0 0 .5rem;font-weight:600;color:var(--x-text-300);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.x-drawer-portal-content{display:block;margin:0 -1rem;padding:0 1rem;overflow:auto}\n"], directives: [{ type: i1$1.CdkPortalOutlet, selector: "[cdkPortalOutlet]", inputs: ["cdkPortalOutlet"], outputs: ["attached"], exportAs: ["cdkPortalOutlet"] }], animations: [XSlideAnimation], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
272
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.3", ngImport: i0, type: XDrawerPortalComponent, decorators: [{
194
273
  type: Component,
195
- args: [{ selector: 'x-drawer-container', encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, animations: [XSlideAnimation], template: "<ng-template cdkPortalOutlet></ng-template>\r\n", styles: [".x-drawer-container{margin:0;padding:0;height:100%;width:100%;background-color:var(--x-background);position:relative;box-shadow:var(--x-box-shadow) var(--x-box-shadow-light-color);overflow:auto;padding:1rem}.x-drawer-container-title{display:block;margin:0 0 .5rem;font-weight:600;color:var(--x-text-300);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.x-drawer-container-content{display:block;margin:0 -1rem;padding:0 1rem;overflow:auto}\n"] }]
274
+ args: [{ selector: 'x-drawer-portal', encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, animations: [XSlideAnimation], template: "<ng-template cdkPortalOutlet></ng-template>\r\n", styles: [".x-drawer-portal{margin:0;padding:0;height:100%;width:100%;background-color:var(--x-background);position:relative;box-shadow:var(--x-box-shadow) var(--x-box-shadow-light-color);overflow:auto;padding:1rem}.x-drawer-portal-title{display:block;margin:0 0 .5rem;font-weight:600;color:var(--x-text-300);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.x-drawer-portal-content{display:block;margin:0 -1rem;padding:0 1rem;overflow:auto}\n"] }]
196
275
  }], ctorParameters: function () { return []; }, propDecorators: { _has: [{
197
276
  type: HostBinding,
198
- args: ['class.x-drawer-container']
277
+ args: ['class.x-drawer-portal']
199
278
  }], placement: [{
200
279
  type: HostBinding,
201
280
  args: ['@x-slide-animation']
@@ -253,7 +332,7 @@ class XDrawerTitleDirective {
253
332
  }
254
333
  }
255
334
  /** @nocollapse */ /** @nocollapse */ XDrawerTitleDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.0.3", ngImport: i0, type: XDrawerTitleDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });
256
- /** @nocollapse */ /** @nocollapse */ XDrawerTitleDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "12.0.0", version: "13.0.3", type: XDrawerTitleDirective, selector: "[x-drawer-title]", host: { properties: { "class.x-drawer-container-title": "this._has" } }, ngImport: i0 });
335
+ /** @nocollapse */ /** @nocollapse */ XDrawerTitleDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "12.0.0", version: "13.0.3", type: XDrawerTitleDirective, selector: "[x-drawer-title]", host: { properties: { "class.x-drawer-portal-title": "this._has" } }, ngImport: i0 });
257
336
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.3", ngImport: i0, type: XDrawerTitleDirective, decorators: [{
258
337
  type: Directive,
259
338
  args: [{
@@ -261,7 +340,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.3", ngImpor
261
340
  }]
262
341
  }], propDecorators: { _has: [{
263
342
  type: HostBinding,
264
- args: ['class.x-drawer-container-title']
343
+ args: ['class.x-drawer-portal-title']
265
344
  }] } });
266
345
  class XDrawerContentDirective {
267
346
  constructor() {
@@ -269,7 +348,7 @@ class XDrawerContentDirective {
269
348
  }
270
349
  }
271
350
  /** @nocollapse */ /** @nocollapse */ XDrawerContentDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.0.3", ngImport: i0, type: XDrawerContentDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });
272
- /** @nocollapse */ /** @nocollapse */ XDrawerContentDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "12.0.0", version: "13.0.3", type: XDrawerContentDirective, selector: "[x-drawer-content], x-drawer-content", host: { properties: { "class.x-drawer-container-content": "this._has" } }, ngImport: i0 });
351
+ /** @nocollapse */ /** @nocollapse */ XDrawerContentDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "12.0.0", version: "13.0.3", type: XDrawerContentDirective, selector: "[x-drawer-content], x-drawer-content", host: { properties: { "class.x-drawer-portal-content": "this._has" } }, ngImport: i0 });
273
352
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.3", ngImport: i0, type: XDrawerContentDirective, decorators: [{
274
353
  type: Directive,
275
354
  args: [{
@@ -277,7 +356,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.3", ngImpor
277
356
  }]
278
357
  }], propDecorators: { _has: [{
279
358
  type: HostBinding,
280
- args: ['class.x-drawer-container-content']
359
+ args: ['class.x-drawer-portal-content']
281
360
  }] } });
282
361
 
283
362
  class XDrawerService {
@@ -299,12 +378,12 @@ class XDrawerService {
299
378
  const width = ['left', 'right'].includes(option.placement) ? option.size : '100%';
300
379
  const height = ['top', 'bottom'].includes(option.placement) ? option.size : '100%';
301
380
  const portal = this.portalService.attach({
302
- content: XDrawerContainerComponent,
381
+ content: XDrawerPortalComponent,
303
382
  viewContainerRef: option.viewContainerRef,
304
383
  overlayConfig: {
305
384
  hasBackdrop: option.hasBackdrop,
306
385
  panelClass: option.className,
307
- scrollStrategy: this.overlay.scrollStrategies.reposition(),
386
+ scrollStrategy: this.overlay.scrollStrategies.block(),
308
387
  positionStrategy: this.portalService.setPosition(option.placement, width, height)
309
388
  }
310
389
  });
@@ -342,8 +421,15 @@ class XDrawerModule {
342
421
  XDrawerCloseDirective,
343
422
  XDrawerTitleDirective,
344
423
  XDrawerContentDirective,
424
+ XDrawerPortalComponent,
345
425
  XDrawerContainerComponent,
346
- XDrawerProperty], imports: [CommonModule, XOutletModule, XButtonModule, XPortalModule], exports: [XDrawerComponent, XDrawerCloseDirective, XDrawerTitleDirective, XDrawerContentDirective, XDrawerContainerComponent] });
426
+ XDrawerProperty,
427
+ XDrawerContainerProperty], imports: [CommonModule, XOutletModule, XButtonModule, XPortalModule], exports: [XDrawerComponent,
428
+ XDrawerCloseDirective,
429
+ XDrawerTitleDirective,
430
+ XDrawerContentDirective,
431
+ XDrawerPortalComponent,
432
+ XDrawerContainerComponent] });
347
433
  /** @nocollapse */ /** @nocollapse */ XDrawerModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "13.0.3", ngImport: i0, type: XDrawerModule, providers: [XDrawerService], imports: [[CommonModule, XOutletModule, XButtonModule, XPortalModule]] });
348
434
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.3", ngImport: i0, type: XDrawerModule, decorators: [{
349
435
  type: NgModule,
@@ -353,10 +439,19 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.3", ngImpor
353
439
  XDrawerCloseDirective,
354
440
  XDrawerTitleDirective,
355
441
  XDrawerContentDirective,
442
+ XDrawerPortalComponent,
356
443
  XDrawerContainerComponent,
357
- XDrawerProperty
444
+ XDrawerProperty,
445
+ XDrawerContainerProperty
446
+ ],
447
+ exports: [
448
+ XDrawerComponent,
449
+ XDrawerCloseDirective,
450
+ XDrawerTitleDirective,
451
+ XDrawerContentDirective,
452
+ XDrawerPortalComponent,
453
+ XDrawerContainerComponent
358
454
  ],
359
- exports: [XDrawerComponent, XDrawerCloseDirective, XDrawerTitleDirective, XDrawerContentDirective, XDrawerContainerComponent],
360
455
  imports: [CommonModule, XOutletModule, XButtonModule, XPortalModule],
361
456
  providers: [XDrawerService]
362
457
  }]
@@ -366,5 +461,5 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.3", ngImpor
366
461
  * Generated bundle index. Do not edit.
367
462
  */
368
463
 
369
- export { XDrawerCloseDirective, XDrawerComponent, XDrawerContainerComponent, XDrawerContentDirective, XDrawerModule, XDrawerPrefix, XDrawerProperty, XDrawerRef, XDrawerService, XDrawerTitleDirective, X_DRAWER_CONFIG_NAME, X_DRAWER_DATA };
464
+ export { XDrawerCloseDirective, XDrawerComponent, XDrawerContainerComponent, XDrawerContainerPrefix, XDrawerContainerProperty, XDrawerContentDirective, XDrawerModule, XDrawerPortalComponent, XDrawerPrefix, XDrawerProperty, XDrawerRef, XDrawerService, XDrawerTitleDirective, X_DRAWER_CONFIG_NAME, X_DRAWER_CONTAINER, X_DRAWER_DATA };
370
465
  //# sourceMappingURL=ng-nest-ui-drawer.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"ng-nest-ui-drawer.mjs","sources":["../../../../lib/ng-nest/ui/drawer/drawer.property.ts","../../../../lib/ng-nest/ui/drawer/drawer.component.ts","../../../../lib/ng-nest/ui/drawer/drawer.component.html","../../../../lib/ng-nest/ui/drawer/drawer-container.component.ts","../../../../lib/ng-nest/ui/drawer/drawer-container.component.html","../../../../lib/ng-nest/ui/drawer/drawer-ref.ts","../../../../lib/ng-nest/ui/drawer/drawer-container.directives.ts","../../../../lib/ng-nest/ui/drawer/drawer.service.ts","../../../../lib/ng-nest/ui/drawer/drawer.module.ts","../../../../lib/ng-nest/ui/drawer/ng-nest-ui-drawer.ts"],"sourcesContent":["import { XTemplate, XPosition, XProperty, XInputBoolean, XBoolean, XWithConfig } from '@ng-nest/ui/core';\r\nimport { Input, Output, EventEmitter, Component, InjectionToken, ViewContainerRef } from '@angular/core';\r\nimport { XPortalOverlayRef } from '@ng-nest/ui/portal';\r\nimport { XDrawerContainerComponent } from './drawer-container.component';\r\nimport { XDrawerRef } from './drawer-ref';\r\n\r\n/**\r\n * Drawer\r\n * @selector x-drawer\r\n * @decorator component\r\n */\r\nexport const XDrawerPrefix = 'x-drawer';\r\nexport const X_DRAWER_CONFIG_NAME = 'drawer';\r\nexport const X_DRAWER_DATA = new InjectionToken<any>('XDrawerData');\r\n\r\n/**\r\n * Drawer Property\r\n */\r\n@Component({ template: '' })\r\nexport class XDrawerProperty extends XProperty {\r\n /**\r\n * @zh_CN 标题\r\n * @en_US Title\r\n */\r\n @Input() title?: XTemplate;\r\n /**\r\n * @zh_CN 显示/隐藏\r\n * @en_US Show/hide\r\n */\r\n @Input() @XInputBoolean() visible?: XBoolean;\r\n /**\r\n * @zh_CN 展示方向\r\n * @en_US Display direction\r\n */\r\n @Input() @XWithConfig<XPosition>(X_DRAWER_CONFIG_NAME, 'right') placement?: XPosition;\r\n /**\r\n * @zh_CN 尺寸,支持固定值\r\n * @en_US Size, supports fixed value\r\n */\r\n @Input() @XWithConfig<string>(X_DRAWER_CONFIG_NAME, '30%') size?: string;\r\n /**\r\n * @zh_CN 点击遮罩关闭\r\n * @en_US Click the mask to close\r\n */\r\n @Input() @XWithConfig<XBoolean>(X_DRAWER_CONFIG_NAME, true) backdropClose!: XBoolean;\r\n /**\r\n * @zh_CN 是否显示背景遮罩\r\n * @en_US Whether to display the background mask\r\n */\r\n @Input() @XWithConfig<XBoolean>(X_DRAWER_CONFIG_NAME, true) hasBackdrop!: XBoolean;\r\n /**\r\n * @zh_CN 自定义样式名\r\n * @en_US Custom style name\r\n */\r\n @Input() @XWithConfig<string>(X_DRAWER_CONFIG_NAME, '') className!: string;\r\n /**\r\n * @zh_CN 关闭的事件\r\n * @en_US Closed event\r\n */\r\n @Output() close = new EventEmitter();\r\n /**\r\n * @zh_CN 显示/隐藏的事件\r\n * @en_US Show/hide event\r\n */\r\n @Output() visibleChange = new EventEmitter<boolean>();\r\n}\r\n\r\n/**\r\n * Drawer Option\r\n */\r\nexport interface XDrawerOption {\r\n /**\r\n * @zh_CN 展示方向\r\n * @en_US Display direction\r\n * @default 'right'\r\n * @withConfig true\r\n */\r\n placement?: XPosition;\r\n /**\r\n * @zh_CN 尺寸,支持固定值\r\n * @en_US Size, supports fixed value\r\n * @default '30%'\r\n * @withConfig true\r\n */\r\n size?: string;\r\n /**\r\n * @zh_CN 自定义样式名\r\n * @en_US Custom style name\r\n */\r\n className?: string;\r\n /**\r\n * @zh_CN 点击遮罩关闭\r\n * @en_US Click the mask to close\r\n * @default true\r\n * @withConfig true\r\n */\r\n backdropClose?: boolean;\r\n /**\r\n * @zh_CN 是否显示背景遮罩\r\n * @en_US Whether to display the background mask\r\n * @default true\r\n * @withConfig true\r\n */\r\n hasBackdrop?: boolean;\r\n /**\r\n * @zh_CN 数据,通过 \"@Inject(X_DRAWER_DATA)\" 来接收数据\r\n * @en_US Data. Receive data by \"@Inject(X_DRAWER_DATA)\"\r\n */\r\n data?: any;\r\n /**\r\n * @en_US 视图容器实例可以包含其他视图容器。\r\n * @en_US A view container instance can contain other view containers.\r\n */\r\n viewContainerRef?: ViewContainerRef;\r\n}\r\n\r\n/**\r\n * @zh_CN 创建的抽屉对象\r\n * @en_US Drawer object created\r\n */\r\nexport interface XDrawerOverlayRef extends XPortalOverlayRef<XDrawerContainerComponent> {\r\n drawerRef?: XDrawerRef<any>;\r\n}\r\n\r\nexport type XDrawerAnimationState = XPosition | 'void';\r\n\r\nexport interface XDrawerAnimationEvent {\r\n state: XDrawerAnimationState;\r\n action: 'start' | 'done';\r\n totalTime: number;\r\n}\r\n","import {\r\n Component,\r\n OnInit,\r\n ViewEncapsulation,\r\n Renderer2,\r\n ElementRef,\r\n ChangeDetectorRef,\r\n ChangeDetectionStrategy,\r\n ViewChild,\r\n SimpleChanges,\r\n OnChanges,\r\n TemplateRef,\r\n ViewContainerRef\r\n} from '@angular/core';\r\nimport { XDrawerPrefix, XDrawerProperty } from './drawer.property';\r\nimport { XIsChange, XIsEmpty, XSlideAnimation, XConfigService } from '@ng-nest/ui/core';\r\nimport { XPortalService, XPortalOverlayRef } from '@ng-nest/ui/portal';\r\nimport { Subscription } from 'rxjs';\r\nimport { Overlay } from '@angular/cdk/overlay';\r\n\r\n@Component({\r\n selector: `${XDrawerPrefix}`,\r\n templateUrl: './drawer.component.html',\r\n styleUrls: ['./drawer.component.scss'],\r\n encapsulation: ViewEncapsulation.None,\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n animations: [XSlideAnimation]\r\n})\r\nexport class XDrawerComponent extends XDrawerProperty implements OnInit, OnChanges {\r\n @ViewChild('drawerTpl', { static: true }) drawerTpl!: TemplateRef<void>;\r\n portal!: XPortalOverlayRef<any>;\r\n back$: Subscription | null = null;\r\n\r\n constructor(\r\n public renderer: Renderer2,\r\n public elementRef: ElementRef,\r\n public cdr: ChangeDetectorRef,\r\n public overlay: Overlay,\r\n public portalService: XPortalService,\r\n public viewContainerRef: ViewContainerRef,\r\n public configService: XConfigService\r\n ) {\r\n super();\r\n }\r\n\r\n ngOnInit() {\r\n this.setClassMap();\r\n }\r\n\r\n ngOnChanges(simples: SimpleChanges) {\r\n const { visible } = simples;\r\n XIsChange(visible) && this.setVisible();\r\n }\r\n\r\n ngOnDestroy(): void {\r\n this.unsubscribe();\r\n }\r\n\r\n unsubscribe() {\r\n this.back$?.unsubscribe();\r\n }\r\n\r\n setClassMap() {\r\n this.classMap = {\r\n [`${XDrawerPrefix}-${this.placement}`]: !XIsEmpty(this.placement),\r\n [`${XDrawerPrefix}-no-title`]: XIsEmpty(this.title)\r\n };\r\n }\r\n\r\n setVisible() {\r\n if (this.visible) {\r\n this.createPortal();\r\n } else {\r\n this.closePortal();\r\n }\r\n }\r\n\r\n createPortal() {\r\n const width = this.placement === 'left' || this.placement === 'right' ? this.size : '100%';\r\n const height = this.placement === 'top' || this.placement === 'bottom' ? this.size : '100%';\r\n this.portal = this.portalService.attach({\r\n content: this.drawerTpl,\r\n viewContainerRef: this.viewContainerRef,\r\n overlayConfig: {\r\n hasBackdrop: true,\r\n scrollStrategy: this.overlay.scrollStrategies.reposition(),\r\n positionStrategy: this.portalService.setPosition(this.placement, width, height)\r\n }\r\n });\r\n if (this.portal.overlayRef) this.back$ = this.portal.overlayRef.backdropClick().subscribe(() => this.closePortal());\r\n }\r\n\r\n portalAttached() {\r\n return this.portal?.overlayRef?.hasAttached();\r\n }\r\n\r\n closePortal() {\r\n if (this.portalAttached()) {\r\n this.portal?.overlayRef?.detach();\r\n this.unsubscribe();\r\n this.visibleChange.emit(this.visible as boolean);\r\n this.close.emit();\r\n return true;\r\n }\r\n return false;\r\n }\r\n}\r\n","<ng-template #drawerTpl>\r\n <div class=\"x-drawer\" [ngClass]=\"classMap\" [@x-slide-animation]=\"placement\">\r\n <div class=\"x-drawer-header\" *ngIf=\"title\">\r\n <div class=\"x-drawer-title\">\r\n <ng-container *xOutlet=\"title\">{{ title }}</ng-container>\r\n </div>\r\n <x-button class=\"x-drawer-close\" icon=\"fto-x\" (click)=\"closePortal()\" onlyIcon closable></x-button>\r\n </div>\r\n <div class=\"x-drawer-content\">\r\n <ng-content></ng-content>\r\n </div>\r\n </div>\r\n</ng-template>\r\n","import { BasePortalOutlet, CdkPortalOutlet, ComponentPortal, TemplatePortal } from '@angular/cdk/portal';\r\nimport {\r\n ChangeDetectionStrategy,\r\n Component,\r\n ComponentRef,\r\n EmbeddedViewRef,\r\n EventEmitter,\r\n HostBinding,\r\n HostListener,\r\n ViewChild,\r\n ViewEncapsulation\r\n} from '@angular/core';\r\nimport { XSlideAnimation } from '@ng-nest/ui/core';\r\nimport { XDrawerAnimationEvent, XDrawerAnimationState } from './drawer.property';\r\nimport { AnimationEvent } from '@angular/animations';\r\n\r\n@Component({\r\n selector: 'x-drawer-container',\r\n templateUrl: './drawer-container.component.html',\r\n styleUrls: ['./drawer-container.component.scss'],\r\n encapsulation: ViewEncapsulation.None,\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n animations: [XSlideAnimation]\r\n})\r\nexport class XDrawerContainerComponent extends BasePortalOutlet {\r\n @HostBinding('class.x-drawer-container') _has = true;\r\n @HostBinding('@x-slide-animation') public placement?: XDrawerAnimationState;\r\n @HostListener('@x-slide-animation.done', ['$event']) done({ toState, totalTime }: AnimationEvent) {\r\n this.animationChanged.next({ action: 'done', state: toState as XDrawerAnimationState, totalTime });\r\n }\r\n @HostListener('@x-slide-animation.start', ['$event']) start({ toState, totalTime }: AnimationEvent) {\r\n this.animationChanged.next({ action: 'start', state: toState as XDrawerAnimationState, totalTime });\r\n }\r\n @ViewChild(CdkPortalOutlet, { static: true }) portalOutlet!: CdkPortalOutlet;\r\n\r\n animationChanged = new EventEmitter<XDrawerAnimationEvent>();\r\n\r\n constructor() {\r\n super();\r\n }\r\n\r\n attachComponentPortal<T>(portal: ComponentPortal<T>): ComponentRef<T> {\r\n if (this.portalOutlet.hasAttached()) {\r\n throw Error('drawer portal has attached');\r\n }\r\n return this.portalOutlet.attachComponentPortal(portal);\r\n }\r\n attachTemplatePortal<C>(portal: TemplatePortal<C>): EmbeddedViewRef<C> {\r\n if (this.portalOutlet.hasAttached()) {\r\n throw Error('drawer portal has attached');\r\n }\r\n return this.portalOutlet.attachTemplatePortal(portal);\r\n }\r\n}\r\n","<ng-template cdkPortalOutlet></ng-template>\r\n","import { OverlayRef } from '@angular/cdk/overlay';\r\nimport { filter, take } from 'rxjs';\r\nimport { XDrawerContainerComponent } from './drawer-container.component';\r\n\r\n// TODO: add more function\r\nexport class XDrawerRef<C> {\r\n componentInstance!: C;\r\n constructor(public overlayRef: OverlayRef, public containerInstance: XDrawerContainerComponent) {}\r\n close() {\r\n this.containerInstance.animationChanged\r\n .pipe(\r\n filter((event) => event.state === 'void' && event.action === 'done'),\r\n take(1)\r\n )\r\n .subscribe(() => {\r\n this.overlayRef.detach();\r\n });\r\n this.containerInstance.placement = 'void';\r\n }\r\n}\r\n","import { Directive, HostBinding, HostListener, Optional } from '@angular/core';\r\nimport { XDrawerRef } from './drawer-ref';\r\n\r\n@Directive({\r\n selector: `[x-drawer-close]`\r\n})\r\nexport class XDrawerCloseDirective {\r\n @HostListener('click', ['$event']) onCloseClick() {\r\n this.drawerRef && this.drawerRef.close();\r\n }\r\n constructor(@Optional() public drawerRef: XDrawerRef<any>) {}\r\n}\r\n\r\n@Directive({\r\n selector: `[x-drawer-title]`\r\n})\r\nexport class XDrawerTitleDirective {\r\n @HostBinding('class.x-drawer-container-title') _has = true;\r\n}\r\n\r\n@Directive({\r\n selector: `[x-drawer-content], x-drawer-content`\r\n})\r\nexport class XDrawerContentDirective {\r\n @HostBinding('class.x-drawer-container-content') _has = true;\r\n}\r\n","import { Overlay } from '@angular/cdk/overlay';\r\nimport { ComponentPortal, ComponentType, TemplatePortal } from '@angular/cdk/portal';\r\nimport { Injectable, TemplateRef } from '@angular/core';\r\nimport { fillDefault, XConfigService, XDrawerConfig } from '@ng-nest/ui/core';\r\nimport { XPortalService } from '@ng-nest/ui/portal';\r\nimport { XDrawerContainerComponent } from './drawer-container.component';\r\nimport { XDrawerRef } from './drawer-ref';\r\nimport { XDrawerOption, X_DRAWER_CONFIG_NAME, X_DRAWER_DATA } from './drawer.property';\r\n\r\n@Injectable()\r\nexport class XDrawerService {\r\n default: XDrawerOption = {\r\n placement: 'right',\r\n size: '30%',\r\n hasBackdrop: true,\r\n backdropClose: true\r\n };\r\n configDefault?: XDrawerConfig;\r\n\r\n constructor(public portalService: XPortalService, public configService: XConfigService, public overlay: Overlay) {\r\n this.configDefault = this.configService.getConfigForComponent(X_DRAWER_CONFIG_NAME);\r\n Object.assign(this.default, this.configDefault);\r\n }\r\n\r\n create<T>(content: TemplateRef<any> | ComponentType<T>, option: XDrawerOption = {}): XDrawerRef<T> {\r\n fillDefault(option, this.default);\r\n const width = ['left', 'right'].includes(option.placement as string) ? option.size : '100%';\r\n const height = ['top', 'bottom'].includes(option.placement as string) ? option.size : '100%';\r\n const portal = this.portalService.attach<XDrawerContainerComponent>({\r\n content: XDrawerContainerComponent,\r\n viewContainerRef: option.viewContainerRef,\r\n overlayConfig: {\r\n hasBackdrop: option.hasBackdrop,\r\n panelClass: option.className,\r\n scrollStrategy: this.overlay.scrollStrategies.reposition(),\r\n positionStrategy: this.portalService.setPosition(option.placement, width, height)\r\n }\r\n });\r\n const { overlayRef, componentRef } = portal || {};\r\n const { instance } = componentRef! || {};\r\n instance.placement = option.placement;\r\n const drawerRef = new XDrawerRef<T>(overlayRef!, instance);\r\n if (content instanceof TemplateRef) {\r\n instance.attachTemplatePortal(\r\n new TemplatePortal(content, option.viewContainerRef!, { $implicit: option.data, drawerRef: drawerRef })\r\n );\r\n } else {\r\n const injector = this.portalService.createInjector([\r\n { provide: X_DRAWER_DATA, useValue: option.data },\r\n { provide: XDrawerRef, useValue: drawerRef }\r\n ]);\r\n\r\n instance.attachComponentPortal(new ComponentPortal(content, option.viewContainerRef, injector));\r\n }\r\n if (option.hasBackdrop && option.backdropClose && overlayRef)\r\n overlayRef.backdropClick().subscribe(() => {\r\n drawerRef.close();\r\n });\r\n\r\n return drawerRef;\r\n }\r\n}\r\n","import { NgModule } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { XDrawerComponent } from './drawer.component';\r\nimport { XOutletModule } from '@ng-nest/ui/outlet';\r\nimport { XButtonModule } from '@ng-nest/ui/button';\r\nimport { XPortalModule } from '@ng-nest/ui/portal';\r\nimport { XDrawerProperty } from './drawer.property';\r\nimport { XDrawerService } from './drawer.service';\r\nimport { XDrawerContainerComponent } from './drawer-container.component';\r\nimport { XDrawerCloseDirective, XDrawerContentDirective, XDrawerTitleDirective } from './drawer-container.directives';\r\n\r\n@NgModule({\r\n declarations: [\r\n XDrawerComponent,\r\n XDrawerCloseDirective,\r\n XDrawerTitleDirective,\r\n XDrawerContentDirective,\r\n XDrawerContainerComponent,\r\n XDrawerProperty\r\n ],\r\n exports: [XDrawerComponent, XDrawerCloseDirective, XDrawerTitleDirective, XDrawerContentDirective, XDrawerContainerComponent],\r\n imports: [CommonModule, XOutletModule, XButtonModule, XPortalModule],\r\n providers: [XDrawerService]\r\n})\r\nexport class XDrawerModule {}\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ng-nest-ui-drawer.mjs","sources":["../../../../lib/ng-nest/ui/drawer/drawer.property.ts","../../../../lib/ng-nest/ui/drawer/drawer-container.component.ts","../../../../lib/ng-nest/ui/drawer/drawer-container.component.html","../../../../lib/ng-nest/ui/drawer/drawer.component.ts","../../../../lib/ng-nest/ui/drawer/drawer.component.html","../../../../lib/ng-nest/ui/drawer/drawer-portal.component.ts","../../../../lib/ng-nest/ui/drawer/drawer-portal.component.html","../../../../lib/ng-nest/ui/drawer/drawer-ref.ts","../../../../lib/ng-nest/ui/drawer/drawer-portal.directives.ts","../../../../lib/ng-nest/ui/drawer/drawer.service.ts","../../../../lib/ng-nest/ui/drawer/drawer.module.ts","../../../../lib/ng-nest/ui/drawer/ng-nest-ui-drawer.ts"],"sourcesContent":["import { XTemplate, XPosition, XProperty, XInputBoolean, XBoolean, XWithConfig } from '@ng-nest/ui/core';\r\nimport { Input, Output, EventEmitter, Component, InjectionToken, ViewContainerRef } from '@angular/core';\r\nimport { XPortalOverlayRef } from '@ng-nest/ui/portal';\r\nimport { XDrawerRef } from './drawer-ref';\r\nimport { XDrawerPortalComponent } from './drawer-portal.component';\r\n\r\n/**\r\n * Drawer\r\n * @selector x-drawer\r\n * @decorator component\r\n */\r\nexport const XDrawerPrefix = 'x-drawer';\r\nexport const X_DRAWER_CONFIG_NAME = 'drawer';\r\nexport const X_DRAWER_DATA = new InjectionToken<any>('XDrawerData');\r\n\r\n/**\r\n * Drawer Property\r\n */\r\n@Component({ template: '' })\r\nexport class XDrawerProperty extends XProperty {\r\n /**\r\n * @zh_CN 标题\r\n * @en_US Title\r\n */\r\n @Input() title?: XTemplate;\r\n /**\r\n * @zh_CN 显示/隐藏\r\n * @en_US Show/hide\r\n */\r\n @Input() @XInputBoolean() visible?: XBoolean;\r\n /**\r\n * @zh_CN 展示方向\r\n * @en_US Display direction\r\n */\r\n @Input() @XWithConfig<XPosition>(X_DRAWER_CONFIG_NAME, 'right') placement?: XPosition;\r\n /**\r\n * @zh_CN 尺寸,支持固定值\r\n * @en_US Size, supports fixed value\r\n */\r\n @Input() @XWithConfig<string>(X_DRAWER_CONFIG_NAME, '30%') size?: string;\r\n /**\r\n * @zh_CN 点击遮罩关闭\r\n * @en_US Click the mask to close\r\n */\r\n @Input() @XWithConfig<XBoolean>(X_DRAWER_CONFIG_NAME, true) backdropClose!: XBoolean;\r\n /**\r\n * @zh_CN 是否显示背景遮罩\r\n * @en_US Whether to display the background mask\r\n */\r\n @Input() @XWithConfig<XBoolean>(X_DRAWER_CONFIG_NAME, true) hasBackdrop!: XBoolean;\r\n /**\r\n * @zh_CN 自定义样式名\r\n * @en_US Custom style name\r\n */\r\n @Input() @XWithConfig<string>(X_DRAWER_CONFIG_NAME, '') className!: string;\r\n /**\r\n * @zh_CN 关闭的事件\r\n * @en_US Closed event\r\n */\r\n @Output() close = new EventEmitter();\r\n /**\r\n * @zh_CN 显示/隐藏的事件\r\n * @en_US Show/hide event\r\n */\r\n @Output() visibleChange = new EventEmitter<boolean>();\r\n}\r\n\r\n/**\r\n * Drawer Option\r\n */\r\nexport interface XDrawerOption {\r\n /**\r\n * @zh_CN 展示方向\r\n * @en_US Display direction\r\n * @default 'right'\r\n * @withConfig true\r\n */\r\n placement?: XPosition;\r\n /**\r\n * @zh_CN 尺寸,支持固定值\r\n * @en_US Size, supports fixed value\r\n * @default '30%'\r\n * @withConfig true\r\n */\r\n size?: string;\r\n /**\r\n * @zh_CN 自定义样式名\r\n * @en_US Custom style name\r\n */\r\n className?: string;\r\n /**\r\n * @zh_CN 点击遮罩关闭\r\n * @en_US Click the mask to close\r\n * @default true\r\n * @withConfig true\r\n */\r\n backdropClose?: boolean;\r\n /**\r\n * @zh_CN 是否显示背景遮罩\r\n * @en_US Whether to display the background mask\r\n * @default true\r\n * @withConfig true\r\n */\r\n hasBackdrop?: boolean;\r\n /**\r\n * @zh_CN 数据,通过 \"@Inject(X_DRAWER_DATA)\" 来接收数据\r\n * @en_US Data. Receive data by \"@Inject(X_DRAWER_DATA)\"\r\n */\r\n data?: any;\r\n /**\r\n * @en_US 视图容器实例可以包含其他视图容器。\r\n * @en_US A view container instance can contain other view containers.\r\n */\r\n viewContainerRef?: ViewContainerRef;\r\n}\r\n\r\n/**\r\n * Drawer Container\r\n * @selector x-drawer-container\r\n * @decorator component\r\n */\r\n export const XDrawerContainerPrefix = 'x-drawer-container';\r\n export const X_DRAWER_CONTAINER = new InjectionToken('X_DRAWER_CONTAINER');\r\n\r\n/**\r\n * Drawer Container Property\r\n */\r\n@Component({ template: '' })\r\nexport class XDrawerContainerProperty extends XProperty {}\r\n\r\n/**\r\n * @zh_CN 创建的抽屉对象\r\n * @en_US Drawer object created\r\n */\r\nexport interface XDrawerPortalOverlayRef extends XPortalOverlayRef<XDrawerPortalComponent> {\r\n drawerRef?: XDrawerRef<any>;\r\n}\r\n\r\nexport type XDrawerAnimationState = XPosition | 'void';\r\n\r\nexport interface XDrawerAnimationEvent {\r\n state: XDrawerAnimationState;\r\n action: 'start' | 'done';\r\n totalTime: number;\r\n}\r\n","import { ChangeDetectionStrategy, Component, HostBinding, ViewEncapsulation } from '@angular/core';\r\nimport { XDrawerContainerProperty, X_DRAWER_CONTAINER } from './drawer.property';\r\n\r\n@Component({\r\n selector: 'x-drawer-container',\r\n templateUrl: './drawer-container.component.html',\r\n styleUrls: ['./drawer-container.component.scss'],\r\n encapsulation: ViewEncapsulation.None,\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n providers: [\r\n {\r\n provide: X_DRAWER_CONTAINER,\r\n useExisting: XDrawerContainerComponent\r\n }\r\n ]\r\n})\r\nexport class XDrawerContainerComponent extends XDrawerContainerProperty {\r\n @HostBinding('class.x-drawer-container') _has = true;\r\n constructor() {\r\n super();\r\n }\r\n}\r\n","<ng-content></ng-content>\r\n","import {\r\n Component,\r\n OnInit,\r\n ViewEncapsulation,\r\n Renderer2,\r\n ElementRef,\r\n ChangeDetectorRef,\r\n ChangeDetectionStrategy,\r\n ViewChild,\r\n SimpleChanges,\r\n OnChanges,\r\n TemplateRef,\r\n ViewContainerRef,\r\n Optional,\r\n Inject,\r\n HostBinding\r\n} from '@angular/core';\r\nimport { XDrawerPrefix, XDrawerProperty, X_DRAWER_CONTAINER } from './drawer.property';\r\nimport { XIsChange, XIsEmpty, XSlideAnimation, XConfigService, XClearClass } from '@ng-nest/ui/core';\r\nimport { XPortalService, XPortalOverlayRef } from '@ng-nest/ui/portal';\r\nimport { Subscription } from 'rxjs';\r\nimport { Overlay } from '@angular/cdk/overlay';\r\nimport { XDrawerContainerComponent } from './drawer-container.component';\r\n\r\n@Component({\r\n selector: `${XDrawerPrefix}`,\r\n templateUrl: './drawer.component.html',\r\n styleUrls: ['./drawer.component.scss'],\r\n encapsulation: ViewEncapsulation.None,\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n animations: [XSlideAnimation]\r\n})\r\nexport class XDrawerComponent extends XDrawerProperty implements OnInit, OnChanges {\r\n @HostBinding('class.x-drawer-visible') get getVisible() {\r\n return this.visible;\r\n }\r\n @ViewChild('drawerTpl', { static: true }) drawerTpl!: TemplateRef<void>;\r\n portal!: XPortalOverlayRef<any>;\r\n back$: Subscription | null = null;\r\n width = '100%';\r\n height = '100%';\r\n\r\n constructor(\r\n public renderer: Renderer2,\r\n public elementRef: ElementRef,\r\n public cdr: ChangeDetectorRef,\r\n public overlay: Overlay,\r\n public portalService: XPortalService,\r\n public viewContainerRef: ViewContainerRef,\r\n public configService: XConfigService,\r\n @Optional() @Inject(X_DRAWER_CONTAINER) public container?: XDrawerContainerComponent\r\n ) {\r\n super();\r\n }\r\n\r\n ngOnInit() {\r\n this.setClassMap();\r\n this.setSize();\r\n }\r\n\r\n ngOnChanges(simples: SimpleChanges) {\r\n const { visible, placement } = simples;\r\n XIsChange(visible) && this.setVisible();\r\n if (XIsChange(placement)) {\r\n this.setClassMap();\r\n this.setSize();\r\n }\r\n }\r\n\r\n ngOnDestroy(): void {\r\n this.unsubscribe();\r\n }\r\n\r\n unsubscribe() {\r\n this.back$?.unsubscribe();\r\n }\r\n\r\n setClassMap() {\r\n XClearClass(this.classMap);\r\n this.classMap = {\r\n [`${XDrawerPrefix}-${this.placement}`]: !XIsEmpty(this.placement),\r\n [`${XDrawerPrefix}-no-title`]: XIsEmpty(this.title)\r\n };\r\n }\r\n\r\n setSize() {\r\n if (this.container) [this.width, this.height] = this.getSize();\r\n }\r\n\r\n getSize(): string[] {\r\n return [\r\n this.placement === 'left' || this.placement === 'right' ? this.size! : '100%',\r\n this.placement === 'top' || this.placement === 'bottom' ? this.size! : '100%'\r\n ];\r\n }\r\n\r\n setVisible() {\r\n if (this.visible) {\r\n this.createPortal();\r\n } else {\r\n this.closePortal();\r\n }\r\n }\r\n\r\n createPortal() {\r\n if (this.container) return;\r\n const [width, height] = this.getSize();\r\n this.portal = this.portalService.attach({\r\n content: this.drawerTpl,\r\n viewContainerRef: this.viewContainerRef,\r\n overlayConfig: {\r\n hasBackdrop: true,\r\n scrollStrategy: this.overlay.scrollStrategies.block(),\r\n positionStrategy: this.portalService.setPosition(this.placement, width, height)\r\n }\r\n });\r\n if (this.portal.overlayRef) this.back$ = this.portal.overlayRef.backdropClick().subscribe(() => this.closePortal());\r\n }\r\n\r\n portalAttached() {\r\n return this.portal?.overlayRef?.hasAttached();\r\n }\r\n\r\n closePortal() {\r\n if (this.container) {\r\n this.visibleChange.emit(this.visible as boolean);\r\n this.close.emit();\r\n } else {\r\n if (this.portalAttached()) {\r\n this.portal?.overlayRef?.detach();\r\n this.unsubscribe();\r\n this.visibleChange.emit(this.visible as boolean);\r\n this.close.emit();\r\n }\r\n }\r\n }\r\n}\r\n","<ng-template #drawerTpl>\r\n <div class=\"x-drawer-backdrop\" *ngIf=\"container\" (click)=\"closePortal()\"></div>\r\n <div\r\n class=\"x-drawer\"\r\n [ngClass]=\"classMap\"\r\n [style.width]=\"width\"\r\n [style.height]=\"height\"\r\n [class.x-drawer-visible]=\"visible\"\r\n [@x-slide-animation]=\"placement\"\r\n >\r\n <div class=\"x-drawer-header\" *ngIf=\"title\">\r\n <div class=\"x-drawer-title\">\r\n <ng-container *xOutlet=\"title\">{{ title }}</ng-container>\r\n </div>\r\n <x-button class=\"x-drawer-close\" icon=\"fto-x\" (click)=\"closePortal()\" onlyIcon closable></x-button>\r\n </div>\r\n <div class=\"x-drawer-content\">\r\n <ng-content></ng-content>\r\n </div>\r\n </div>\r\n</ng-template>\r\n<ng-container *ngIf=\"container\">\r\n <ng-container *ngTemplateOutlet=\"drawerTpl\"></ng-container>\r\n</ng-container>\r\n","import { BasePortalOutlet, CdkPortalOutlet, ComponentPortal, TemplatePortal } from '@angular/cdk/portal';\r\nimport {\r\n ChangeDetectionStrategy,\r\n Component,\r\n ComponentRef,\r\n EmbeddedViewRef,\r\n EventEmitter,\r\n HostBinding,\r\n HostListener,\r\n ViewChild,\r\n ViewEncapsulation\r\n} from '@angular/core';\r\nimport { XSlideAnimation } from '@ng-nest/ui/core';\r\nimport { XDrawerAnimationEvent, XDrawerAnimationState } from './drawer.property';\r\nimport { AnimationEvent } from '@angular/animations';\r\n\r\n@Component({\r\n selector: 'x-drawer-portal',\r\n templateUrl: './drawer-portal.component.html',\r\n styleUrls: ['./drawer-portal.component.scss'],\r\n encapsulation: ViewEncapsulation.None,\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n animations: [XSlideAnimation]\r\n})\r\nexport class XDrawerPortalComponent extends BasePortalOutlet {\r\n @HostBinding('class.x-drawer-portal') _has = true;\r\n @HostBinding('@x-slide-animation') public placement?: XDrawerAnimationState;\r\n @HostListener('@x-slide-animation.done', ['$event']) done({ toState, totalTime }: AnimationEvent) {\r\n this.animationChanged.next({ action: 'done', state: toState as XDrawerAnimationState, totalTime });\r\n }\r\n @HostListener('@x-slide-animation.start', ['$event']) start({ toState, totalTime }: AnimationEvent) {\r\n this.animationChanged.next({ action: 'start', state: toState as XDrawerAnimationState, totalTime });\r\n }\r\n @ViewChild(CdkPortalOutlet, { static: true }) portalOutlet!: CdkPortalOutlet;\r\n\r\n animationChanged = new EventEmitter<XDrawerAnimationEvent>();\r\n\r\n constructor() {\r\n super();\r\n }\r\n\r\n attachComponentPortal<T>(portal: ComponentPortal<T>): ComponentRef<T> {\r\n if (this.portalOutlet.hasAttached()) {\r\n throw Error('drawer portal has attached');\r\n }\r\n return this.portalOutlet.attachComponentPortal(portal);\r\n }\r\n attachTemplatePortal<C>(portal: TemplatePortal<C>): EmbeddedViewRef<C> {\r\n if (this.portalOutlet.hasAttached()) {\r\n throw Error('drawer portal has attached');\r\n }\r\n return this.portalOutlet.attachTemplatePortal(portal);\r\n }\r\n}\r\n","<ng-template cdkPortalOutlet></ng-template>\r\n","import { OverlayRef } from '@angular/cdk/overlay';\r\nimport { filter, take } from 'rxjs';\r\nimport { XDrawerPortalComponent } from './drawer-portal.component';\r\n\r\n// TODO: add more function\r\nexport class XDrawerRef<C> {\r\n componentInstance!: C;\r\n constructor(public overlayRef: OverlayRef, public containerInstance: XDrawerPortalComponent) {}\r\n close() {\r\n this.containerInstance.animationChanged\r\n .pipe(\r\n filter((event) => event.state === 'void' && event.action === 'done'),\r\n take(1)\r\n )\r\n .subscribe(() => {\r\n this.overlayRef.detach();\r\n });\r\n this.containerInstance.placement = 'void';\r\n }\r\n}\r\n","import { Directive, HostBinding, HostListener, Optional } from '@angular/core';\r\nimport { XDrawerRef } from './drawer-ref';\r\n\r\n@Directive({\r\n selector: `[x-drawer-close]`\r\n})\r\nexport class XDrawerCloseDirective {\r\n @HostListener('click', ['$event']) onCloseClick() {\r\n this.drawerRef && this.drawerRef.close();\r\n }\r\n constructor(@Optional() public drawerRef: XDrawerRef<any>) {}\r\n}\r\n\r\n@Directive({\r\n selector: `[x-drawer-title]`\r\n})\r\nexport class XDrawerTitleDirective {\r\n @HostBinding('class.x-drawer-portal-title') _has = true;\r\n}\r\n\r\n@Directive({\r\n selector: `[x-drawer-content], x-drawer-content`\r\n})\r\nexport class XDrawerContentDirective {\r\n @HostBinding('class.x-drawer-portal-content') _has = true;\r\n}\r\n","import { Overlay } from '@angular/cdk/overlay';\r\nimport { ComponentPortal, ComponentType, TemplatePortal } from '@angular/cdk/portal';\r\nimport { Injectable, TemplateRef } from '@angular/core';\r\nimport { fillDefault, XConfigService, XDrawerConfig } from '@ng-nest/ui/core';\r\nimport { XPortalService } from '@ng-nest/ui/portal';\r\nimport { XDrawerPortalComponent } from './drawer-portal.component';\r\nimport { XDrawerRef } from './drawer-ref';\r\nimport { XDrawerOption, X_DRAWER_CONFIG_NAME, X_DRAWER_DATA } from './drawer.property';\r\n\r\n@Injectable()\r\nexport class XDrawerService {\r\n default: XDrawerOption = {\r\n placement: 'right',\r\n size: '30%',\r\n hasBackdrop: true,\r\n backdropClose: true\r\n };\r\n configDefault?: XDrawerConfig;\r\n\r\n constructor(public portalService: XPortalService, public configService: XConfigService, public overlay: Overlay) {\r\n this.configDefault = this.configService.getConfigForComponent(X_DRAWER_CONFIG_NAME);\r\n Object.assign(this.default, this.configDefault);\r\n }\r\n\r\n create<T>(content: TemplateRef<any> | ComponentType<T>, option: XDrawerOption = {}): XDrawerRef<T> {\r\n fillDefault(option, this.default);\r\n const width = ['left', 'right'].includes(option.placement as string) ? option.size : '100%';\r\n const height = ['top', 'bottom'].includes(option.placement as string) ? option.size : '100%';\r\n const portal = this.portalService.attach<XDrawerPortalComponent>({\r\n content: XDrawerPortalComponent,\r\n viewContainerRef: option.viewContainerRef,\r\n overlayConfig: {\r\n hasBackdrop: option.hasBackdrop,\r\n panelClass: option.className,\r\n scrollStrategy: this.overlay.scrollStrategies.block(),\r\n positionStrategy: this.portalService.setPosition(option.placement, width, height)\r\n }\r\n });\r\n const { overlayRef, componentRef } = portal || {};\r\n const { instance } = componentRef! || {};\r\n instance.placement = option.placement;\r\n const drawerRef = new XDrawerRef<T>(overlayRef!, instance);\r\n if (content instanceof TemplateRef) {\r\n instance.attachTemplatePortal(\r\n new TemplatePortal(content, option.viewContainerRef!, { $implicit: option.data, drawerRef: drawerRef })\r\n );\r\n } else {\r\n const injector = this.portalService.createInjector([\r\n { provide: X_DRAWER_DATA, useValue: option.data },\r\n { provide: XDrawerRef, useValue: drawerRef }\r\n ]);\r\n\r\n instance.attachComponentPortal(new ComponentPortal(content, option.viewContainerRef, injector));\r\n }\r\n if (option.hasBackdrop && option.backdropClose && overlayRef)\r\n overlayRef.backdropClick().subscribe(() => {\r\n drawerRef.close();\r\n });\r\n\r\n return drawerRef;\r\n }\r\n}\r\n","import { NgModule } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { XDrawerComponent } from './drawer.component';\r\nimport { XOutletModule } from '@ng-nest/ui/outlet';\r\nimport { XButtonModule } from '@ng-nest/ui/button';\r\nimport { XPortalModule } from '@ng-nest/ui/portal';\r\nimport { XDrawerContainerProperty, XDrawerProperty } from './drawer.property';\r\nimport { XDrawerService } from './drawer.service';\r\nimport { XDrawerPortalComponent } from './drawer-portal.component';\r\nimport { XDrawerCloseDirective, XDrawerContentDirective, XDrawerTitleDirective } from './drawer-portal.directives';\r\nimport { XDrawerContainerComponent } from './drawer-container.component';\r\n\r\n@NgModule({\r\n declarations: [\r\n XDrawerComponent,\r\n XDrawerCloseDirective,\r\n XDrawerTitleDirective,\r\n XDrawerContentDirective,\r\n XDrawerPortalComponent,\r\n XDrawerContainerComponent,\r\n XDrawerProperty,\r\n XDrawerContainerProperty\r\n ],\r\n exports: [\r\n XDrawerComponent,\r\n XDrawerCloseDirective,\r\n XDrawerTitleDirective,\r\n XDrawerContentDirective,\r\n XDrawerPortalComponent,\r\n XDrawerContainerComponent\r\n ],\r\n imports: [CommonModule, XOutletModule, XButtonModule, XPortalModule],\r\n providers: [XDrawerService]\r\n})\r\nexport class XDrawerModule {}\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
@@ -422,8 +422,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.3", ngImpor
422
422
  args: [{
423
423
  declarations: [XDropdownComponent, XDropdownPortalComponent, XDropdownProperty],
424
424
  exports: [XDropdownComponent, XDropdownPortalComponent],
425
- imports: [CommonModule, XPortalModule, XListModule],
426
- entryComponents: [XDropdownPortalComponent]
425
+ imports: [CommonModule, XPortalModule, XListModule]
427
426
  }]
428
427
  }] });
429
428
 
@@ -1 +1 @@
1
- {"version":3,"file":"ng-nest-ui-dropdown.mjs","sources":["../../../../lib/ng-nest/ui/dropdown/dropdown.property.ts","../../../../lib/ng-nest/ui/dropdown/dropdown-portal.component.ts","../../../../lib/ng-nest/ui/dropdown/dropdown-portal.component.html","../../../../lib/ng-nest/ui/dropdown/dropdown.component.ts","../../../../lib/ng-nest/ui/dropdown/dropdown.component.html","../../../../lib/ng-nest/ui/dropdown/dropdown.module.ts","../../../../lib/ng-nest/ui/dropdown/ng-nest-ui-dropdown.ts"],"sourcesContent":["import { XData, XProperty, XDataConvert, XInputBoolean, XBoolean, XPlacement, XWithConfig, XTrigger } from '@ng-nest/ui/core';\r\nimport { XListNode } from '@ng-nest/ui/list';\r\nimport { Input, Output, EventEmitter, Component } from '@angular/core';\r\n\r\n/**\r\n * Dropdown\r\n * @selector x-dropdown\r\n * @decorator component\r\n */\r\nexport const XDropdownPrefix = 'x-dropdown';\r\nconst X_CONFIG_NAME = 'dropdown';\r\n\r\n/**\r\n * Dropdown Property\r\n */\r\n@Component({ template: '' })\r\nexport class XDropdownProperty extends XProperty {\r\n /**\r\n * @zh_CN 节点数据\r\n * @en_US Node data\r\n */\r\n @Input() @XDataConvert() data: XData<XDropdownNode> = [];\r\n /**\r\n * @zh_CN 触发方式\r\n * @en_US Trigger method\r\n */\r\n @Input() @XWithConfig<XDropdownTrigger>(X_CONFIG_NAME, 'hover') trigger?: XDropdownTrigger;\r\n /**\r\n * @zh_CN 展示位置\r\n * @en_US Placement\r\n */\r\n @Input() @XWithConfig<XPlacement>(X_CONFIG_NAME, 'bottom-start') placement?: XPlacement;\r\n /**\r\n * @zh_CN 禁用\r\n * @en_US Disabled\r\n */\r\n @Input() @XInputBoolean() disabled?: XBoolean;\r\n /**\r\n * @zh_CN 节点中已经包含子节点数据\r\n * @en_US The node already contains child node data\r\n */\r\n @Input() @XInputBoolean() children?: XBoolean;\r\n /**\r\n * @zh_CN 弹框的最小宽度\r\n * @en_US Portal min-width\r\n */\r\n @Input() portalMinWidth?: string | number;\r\n /**\r\n * @zh_CN hover 延迟触发时间,只有 trigger 为 'hover' 生效\r\n * @en_US Hover delay trigger time, only trigger is the 'hover'\r\n */\r\n @Input() hoverDelay: number = 200;\r\n /**\r\n * @zh_CN 节点点击事件\r\n * @en_US Node click event\r\n */\r\n @Output() nodeClick = new EventEmitter<XDropdownNode>();\r\n}\r\n\r\n/**\r\n * @zh_CN Dropdown 数据对象\r\n * @en_US Dropdown data object\r\n */\r\nexport interface XDropdownNode extends XListNode {}\r\n\r\n/**\r\n * @zh_CN 显示方式\r\n * @en_US Display method\r\n */\r\nexport type XDropdownTrigger = XTrigger;\r\n\r\n/**\r\n * Dropdown Portal\r\n * @selector x-dropdown-portal\r\n * @decorator component\r\n */\r\nexport const XDropdownPortalPrefix = 'x-dropdown-portal';\r\n","import {\r\n Component,\r\n ViewEncapsulation,\r\n Renderer2,\r\n ElementRef,\r\n ChangeDetectorRef,\r\n ChangeDetectionStrategy,\r\n OnDestroy,\r\n HostListener,\r\n ViewContainerRef,\r\n HostBinding\r\n} from '@angular/core';\r\nimport { XDropdownPortalPrefix, XDropdownNode, XDropdownTrigger } from './dropdown.property';\r\nimport { XPortalConnectedPosition, XPortalOverlayRef, XPortalService } from '@ng-nest/ui/portal';\r\nimport { XConnectBaseAnimation, XPositionTopBottom } from '@ng-nest/ui/core';\r\nimport { Subject } from 'rxjs';\r\nimport { takeUntil } from 'rxjs/operators';\r\nimport { ConnectedOverlayPositionChange, FlexibleConnectedPositionStrategy, Overlay, OverlayConfig } from '@angular/cdk/overlay';\r\n\r\n@Component({\r\n selector: `${XDropdownPortalPrefix}`,\r\n templateUrl: './dropdown-portal.component.html',\r\n styleUrls: ['./dropdown-portal.component.scss'],\r\n encapsulation: ViewEncapsulation.None,\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n animations: [XConnectBaseAnimation]\r\n})\r\nexport class XDropdownPortalComponent implements OnDestroy {\r\n @HostBinding('@x-connect-base-animation') public placement!: XPositionTopBottom;\r\n @HostListener('@x-connect-base-animation.done', ['$event']) done(event: { toState: any }) {\r\n this.animating(false);\r\n event.toState === 'void' && this.destroyPortal();\r\n }\r\n @HostListener('@x-connect-base-animation.start', ['$event']) start() {\r\n this.animating(true);\r\n }\r\n data!: XDropdownNode[];\r\n trigger!: XDropdownTrigger;\r\n close!: Function;\r\n nodeEmit!: Function;\r\n portalHover!: Function;\r\n animating!: Function;\r\n destroyPortal!: Function;\r\n portal!: XPortalOverlayRef<XDropdownPortalComponent>;\r\n positionChange!: Subject<any>;\r\n portalPositionChange: Subject<any> = new Subject();\r\n node!: XDropdownNode;\r\n timeoutHide: any;\r\n timespan = 200;\r\n minWidth!: string | number;\r\n portalPlacement!: XPositionTopBottom;\r\n childAnimating = false;\r\n private _unSubject = new Subject<void>();\r\n\r\n @HostListener('mouseenter') mouseenter() {\r\n this.portalHover(true);\r\n }\r\n\r\n @HostListener('mouseleave') mouseleave() {\r\n !this.portalAttached() && this.portalHover(false);\r\n }\r\n\r\n constructor(\r\n public renderer: Renderer2,\r\n public elementRef: ElementRef,\r\n public cdr: ChangeDetectorRef,\r\n private portalService: XPortalService,\r\n private overlay: Overlay,\r\n private viewContainerRef: ViewContainerRef\r\n ) {}\r\n\r\n ngOnInit() {\r\n this.positionChange.pipe(takeUntil(this._unSubject)).subscribe((x) => {\r\n this.placement = x;\r\n this.cdr.detectChanges();\r\n });\r\n }\r\n\r\n ngAfterViewInit() {}\r\n\r\n ngOnDestroy(): void {\r\n this._unSubject.next();\r\n this._unSubject.unsubscribe();\r\n }\r\n\r\n nodeClick(node: XDropdownNode) {\r\n if (!node.leaf) this.close();\r\n this.nodeEmit(node);\r\n }\r\n\r\n portalAttached() {\r\n return this.portal?.overlayRef?.hasAttached();\r\n }\r\n\r\n closePortal() {\r\n if (this.portalAttached()) {\r\n this.portal?.overlayRef?.dispose();\r\n return true;\r\n }\r\n return false;\r\n }\r\n\r\n createPortal() {\r\n const config: OverlayConfig = {\r\n backdropClass: '',\r\n panelClass: 'x-dropdown-portal-child',\r\n positionStrategy: this.setPlacement(),\r\n scrollStrategy: this.overlay.scrollStrategies.reposition(),\r\n minWidth: this.minWidth\r\n };\r\n this.setPosition(config);\r\n this.portal = this.portalService.attach({\r\n content: XDropdownPortalComponent,\r\n viewContainerRef: this.viewContainerRef,\r\n overlayConfig: config\r\n });\r\n this.setInstance();\r\n }\r\n\r\n setPosition(config: OverlayConfig) {\r\n let position = config.positionStrategy as FlexibleConnectedPositionStrategy;\r\n position.positionChanges.pipe(takeUntil(this._unSubject)).subscribe((pos: ConnectedOverlayPositionChange) => {\r\n const place = XPortalConnectedPosition.get(pos.connectionPair) as XPositionTopBottom;\r\n place !== this.portalPlacement && this.portalPositionChange.next(place);\r\n });\r\n }\r\n\r\n setInstance() {\r\n let componentRef = this.portal?.componentRef;\r\n if (!componentRef) return;\r\n Object.assign(componentRef.instance, {\r\n data: this.node?.children,\r\n minWidth: this.minWidth,\r\n close: () => this.closePortal(),\r\n placement: this.portalPlacement,\r\n positionChange: this.portalPositionChange,\r\n nodeEmit: (node: XDropdownNode) => this.nodeClick(node),\r\n portalHover: (hover: boolean) => this.hover(hover),\r\n animating: (ing: boolean) => (this.childAnimating = ing)\r\n });\r\n componentRef.changeDetectorRef.detectChanges();\r\n }\r\n\r\n hover(hover: boolean) {\r\n if (this.timeoutHide && hover) {\r\n clearTimeout(this.timeoutHide);\r\n } else {\r\n this.portalHover(false);\r\n this.onLeave();\r\n }\r\n }\r\n\r\n setPlacement() {\r\n return this.portalService.setPlacement({\r\n elementRef: new ElementRef(this.node?.event?.target),\r\n placement: ['right-start', 'right-end', 'left-start', 'left-end'],\r\n transformOriginOn: 'x-dropdown-portal'\r\n });\r\n }\r\n\r\n onEnter(node: XDropdownNode) {\r\n if (!node.leaf || node.disabled || this.childAnimating) return;\r\n if (this.timeoutHide) clearTimeout(this.timeoutHide);\r\n if (this.portalAttached() && this.node?.id !== node.id) {\r\n this.portal?.overlayRef?.dispose();\r\n }\r\n this.node = node;\r\n if (!this.portalAttached()) {\r\n this.createPortal();\r\n }\r\n this.cdr.detectChanges();\r\n }\r\n\r\n onLeave() {\r\n if (this.portalAttached()) {\r\n this.timeoutHide = setTimeout(() => {\r\n this.portal?.overlayRef?.dispose();\r\n });\r\n }\r\n }\r\n}\r\n","<div #dropdownPortal class=\"x-dropdown-portal\">\r\n <x-list [data]=\"data\" (nodeClick)=\"nodeClick($event)\" (nodeMouseenter)=\"onEnter($event)\" (nodeMouseleave)=\"onLeave()\"></x-list>\r\n</div>\r\n","import {\r\n Component,\r\n ViewEncapsulation,\r\n Renderer2,\r\n ElementRef,\r\n ChangeDetectorRef,\r\n ChangeDetectionStrategy,\r\n SimpleChanges,\r\n OnChanges,\r\n ViewContainerRef,\r\n ViewChild\r\n} from '@angular/core';\r\nimport { XDropdownPrefix, XDropdownNode, XDropdownProperty } from './dropdown.property';\r\nimport { XIsChange, XIsEmpty, XSetData, XGetChildren, XConfigService, XPositionTopBottom, XPlacement } from '@ng-nest/ui/core';\r\nimport { of, Subject } from 'rxjs';\r\nimport { XPortalConnectedPosition, XPortalOverlayRef, XPortalService } from '@ng-nest/ui/portal';\r\nimport { XDropdownPortalComponent } from './dropdown-portal.component';\r\nimport { debounceTime, delay, takeUntil } from 'rxjs/operators';\r\nimport { ConnectedOverlayPositionChange, FlexibleConnectedPositionStrategy, Overlay, OverlayConfig } from '@angular/cdk/overlay';\r\n\r\n@Component({\r\n selector: `${XDropdownPrefix}`,\r\n templateUrl: './dropdown.component.html',\r\n styleUrls: ['./dropdown.component.scss'],\r\n encapsulation: ViewEncapsulation.None,\r\n changeDetection: ChangeDetectionStrategy.OnPush\r\n})\r\nexport class XDropdownComponent extends XDropdownProperty implements OnChanges {\r\n @ViewChild('dropdown', { static: true }) dropdown!: ElementRef;\r\n datas: XDropdownNode[] = [];\r\n nodes: XDropdownNode[] = [];\r\n portal!: XPortalOverlayRef<XDropdownPortalComponent>;\r\n timeoutHide: any;\r\n visible: boolean = false;\r\n animating = false;\r\n outsideClick = false;\r\n minWidth!: string | number;\r\n hoverDelayUnsub = new Subject<void>();\r\n positionChange: Subject<any> = new Subject();\r\n closeSubject: Subject<void> = new Subject();\r\n private _unSubject = new Subject<void>();\r\n\r\n constructor(\r\n public renderer: Renderer2,\r\n public elementRef: ElementRef,\r\n public cdr: ChangeDetectorRef,\r\n private portalService: XPortalService,\r\n private viewContainerRef: ViewContainerRef,\r\n private overlay: Overlay,\r\n public configService: XConfigService\r\n ) {\r\n super();\r\n }\r\n\r\n ngOnInit() {\r\n this.setSubject();\r\n }\r\n\r\n ngOnChanges(changes: SimpleChanges) {\r\n const { data } = changes;\r\n XIsChange(data) && this.setData();\r\n }\r\n\r\n ngOnDestroy(): void {\r\n this._unSubject.next();\r\n this._unSubject.complete();\r\n this.hoverDelayUnsub.next();\r\n this.hoverDelayUnsub.complete();\r\n }\r\n\r\n setSubject() {\r\n this.closeSubject.pipe(takeUntil(this._unSubject)).subscribe(() => {\r\n this.closePortal();\r\n });\r\n }\r\n\r\n onEnter() {\r\n of(true)\r\n .pipe(delay(this.hoverDelay), takeUntil(this.hoverDelayUnsub))\r\n .subscribe(() => {\r\n if (this.disabled || this.trigger === 'click') return;\r\n if (this.timeoutHide) clearTimeout(this.timeoutHide);\r\n if (!this.portal || (this.portal && !this.portal?.overlayRef?.hasAttached())) {\r\n this.visible = true;\r\n this.createPortal();\r\n this.cdr.detectChanges();\r\n }\r\n });\r\n }\r\n\r\n onLeave() {\r\n this.hoverDelayUnsub.next();\r\n if (this.disabled || this.trigger === 'click') return;\r\n if (this.portal?.overlayRef?.hasAttached()) {\r\n this.timeoutHide = setTimeout(() => {\r\n this.visible = false;\r\n this.portal?.overlayRef?.dispose();\r\n this.cdr.detectChanges();\r\n });\r\n }\r\n }\r\n\r\n showPortal() {\r\n if (this.disabled || this.trigger === 'hover' || this.animating) return;\r\n if (this.trigger === 'click' && this.portalAttached()) {\r\n this.closeSubject.next();\r\n return;\r\n }\r\n this.createPortal();\r\n }\r\n\r\n portalAttached() {\r\n return this.portal?.overlayRef?.hasAttached();\r\n }\r\n\r\n closePortal() {\r\n if (this.portalAttached()) {\r\n this.portal?.overlayRef?.dispose();\r\n return true;\r\n }\r\n return false;\r\n }\r\n\r\n destroyPortal() {\r\n this.portal?.overlayRef?.dispose();\r\n }\r\n\r\n createPortal() {\r\n let box = this.dropdown.nativeElement.getBoundingClientRect();\r\n this.minWidth = this.portalMinWidth ? this.portalMinWidth : box.width;\r\n const config: OverlayConfig = {\r\n backdropClass: '',\r\n positionStrategy: this.setPlacement(),\r\n scrollStrategy: this.overlay.scrollStrategies.reposition(),\r\n minWidth: this.minWidth\r\n };\r\n this.setPosition(config);\r\n this.portal = this.portalService.attach({\r\n content: XDropdownPortalComponent,\r\n viewContainerRef: this.viewContainerRef,\r\n overlayConfig: config\r\n });\r\n if (this.trigger === 'click') {\r\n this.portal.overlayRef\r\n ?.outsidePointerEvents()\r\n .pipe(debounceTime(30), takeUntil(this._unSubject))\r\n .subscribe(() => {\r\n this.closeSubject.next();\r\n });\r\n }\r\n this.setInstance();\r\n }\r\n\r\n setPosition(config: OverlayConfig) {\r\n let position = config.positionStrategy as FlexibleConnectedPositionStrategy;\r\n position.positionChanges.pipe(takeUntil(this._unSubject)).subscribe((pos: ConnectedOverlayPositionChange) => {\r\n const place = XPortalConnectedPosition.get(pos.connectionPair) as XPositionTopBottom;\r\n place !== this.placement && this.positionChange.next(place);\r\n });\r\n }\r\n\r\n setInstance() {\r\n let componentRef = this.portal?.componentRef;\r\n if (!componentRef) return;\r\n Object.assign(componentRef.instance, {\r\n data: this.nodes,\r\n trigger: this.trigger,\r\n minWidth: this.minWidth,\r\n close: () => this.closeSubject.next(),\r\n positionChange: this.positionChange,\r\n destroyPortal: () => this.destroyPortal(),\r\n nodeEmit: (node: XDropdownNode) => this.nodeClick.emit(node),\r\n portalHover: (hover: boolean) => this.portalHover(hover),\r\n animating: (ing: boolean) => (this.animating = ing)\r\n });\r\n componentRef.changeDetectorRef.detectChanges();\r\n }\r\n\r\n portalHover(hover: boolean) {\r\n if (this.timeoutHide && hover) {\r\n clearTimeout(this.timeoutHide);\r\n } else {\r\n this.onLeave();\r\n }\r\n }\r\n\r\n setPlacement() {\r\n return this.portalService.setPlacement({\r\n elementRef: this.dropdown,\r\n placement: [this.placement as XPlacement, 'bottom-start', 'top-start', 'bottom-end', 'top-end'],\r\n transformOriginOn: 'x-dropdown-portal'\r\n });\r\n }\r\n\r\n private setData() {\r\n XSetData<XDropdownNode>(this.data, this._unSubject).subscribe((x) => {\r\n this.datas = x;\r\n if (!this.children) {\r\n this.nodes = x.filter((y) => XIsEmpty(y.pid)).map((y) => XGetChildren<XDropdownNode>(x, y, 0));\r\n } else {\r\n this.nodes = x;\r\n }\r\n this.cdr.detectChanges();\r\n });\r\n }\r\n}\r\n","<div\r\n #dropdown\r\n class=\"x-dropdown\"\r\n [ngClass]=\"classMap\"\r\n [class.x-visible]=\"visible\"\r\n (mouseenter)=\"onEnter()\"\r\n (mouseleave)=\"onLeave()\"\r\n (click)=\"showPortal()\"\r\n>\r\n <ng-content></ng-content>\r\n</div>\r\n","import { NgModule } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { XDropdownComponent } from './dropdown.component';\r\nimport { XDropdownPortalComponent } from './dropdown-portal.component';\r\nimport { XPortalModule } from '@ng-nest/ui/portal';\r\nimport { XListModule } from '@ng-nest/ui/list';\r\nimport { XDropdownProperty } from './dropdown.property';\r\n\r\n@NgModule({\r\n declarations: [XDropdownComponent, XDropdownPortalComponent, XDropdownProperty],\r\n exports: [XDropdownComponent, XDropdownPortalComponent],\r\n imports: [CommonModule, XPortalModule, XListModule],\r\n entryComponents: [XDropdownPortalComponent]\r\n})\r\nexport class XDropdownModule {}\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":";;;;;;;;;;;;;;;AAIA;;;;;MAKa,eAAe,GAAG,aAAa;AAC5C,MAAM,aAAa,GAAG,UAAU,CAAC;AAEjC;;;MAIa,iBAAkB,SAAQ,SAAS;IADhD;;;;;;QAM2B,SAAI,GAAyB,EAAE,CAAC;;;;;QA8BhD,eAAU,GAAW,GAAG,CAAC;;;;;QAKxB,cAAS,GAAG,IAAI,YAAY,EAAiB,CAAC;KACzD;;oJAzCY,iBAAiB;wIAAjB,iBAAiB,8RADP,EAAE;AAME;IAAf,YAAY,EAAE;+CAAiC;AAKO;IAAtD,WAAW,CAAmB,aAAa,EAAE,OAAO,CAAC;kDAA4B;AAK1B;IAAvD,WAAW,CAAa,aAAa,EAAE,cAAc,CAAC;oDAAwB;AAK9D;IAAhB,aAAa,EAAE;mDAAqB;AAKpB;IAAhB,aAAa,EAAE;mDAAqB;2FAzBnC,iBAAiB;kBAD7B,SAAS;mBAAC,EAAE,QAAQ,EAAE,EAAE,EAAE;8BAMA,IAAI;sBAA5B,KAAK;gBAK0D,OAAO;sBAAtE,KAAK;gBAK2D,SAAS;sBAAzE,KAAK;gBAKoB,QAAQ;sBAAjC,KAAK;gBAKoB,QAAQ;sBAAjC,KAAK;gBAKG,cAAc;sBAAtB,KAAK;gBAKG,UAAU;sBAAlB,KAAK;gBAKI,SAAS;sBAAlB,MAAM;;AAeT;;;;;MAKa,qBAAqB,GAAG;;MCjDxB,wBAAwB;IAmCnC,YACS,QAAmB,EACnB,UAAsB,EACtB,GAAsB,EACrB,aAA6B,EAC7B,OAAgB,EAChB,gBAAkC;QALnC,aAAQ,GAAR,QAAQ,CAAW;QACnB,eAAU,GAAV,UAAU,CAAY;QACtB,QAAG,GAAH,GAAG,CAAmB;QACrB,kBAAa,GAAb,aAAa,CAAgB;QAC7B,YAAO,GAAP,OAAO,CAAS;QAChB,qBAAgB,GAAhB,gBAAgB,CAAkB;QAvB5C,yBAAoB,GAAiB,IAAI,OAAO,EAAE,CAAC;QAGnD,aAAQ,GAAG,GAAG,CAAC;QAGf,mBAAc,GAAG,KAAK,CAAC;QACf,eAAU,GAAG,IAAI,OAAO,EAAQ,CAAC;KAiBrC;IAxCwD,IAAI,CAAC,KAAuB;QACtF,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;QACtB,KAAK,CAAC,OAAO,KAAK,MAAM,IAAI,IAAI,CAAC,aAAa,EAAE,CAAC;KAClD;IAC4D,KAAK;QAChE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;KACtB;IAmB2B,UAAU;QACpC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;KACxB;IAE2B,UAAU;QACpC,CAAC,IAAI,CAAC,cAAc,EAAE,IAAI,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;KACnD;IAWD,QAAQ;QACN,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC;YAC/D,IAAI,CAAC,SAAS,GAAG,CAAC,CAAC;YACnB,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE,CAAC;SAC1B,CAAC,CAAC;KACJ;IAED,eAAe,MAAK;IAEpB,WAAW;QACT,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,CAAC;QACvB,IAAI,CAAC,UAAU,CAAC,WAAW,EAAE,CAAC;KAC/B;IAED,SAAS,CAAC,IAAmB;QAC3B,IAAI,CAAC,IAAI,CAAC,IAAI;YAAE,IAAI,CAAC,KAAK,EAAE,CAAC;QAC7B,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;KACrB;IAED,cAAc;QACZ,OAAO,IAAI,CAAC,MAAM,EAAE,UAAU,EAAE,WAAW,EAAE,CAAC;KAC/C;IAED,WAAW;QACT,IAAI,IAAI,CAAC,cAAc,EAAE,EAAE;YACzB,IAAI,CAAC,MAAM,EAAE,UAAU,EAAE,OAAO,EAAE,CAAC;YACnC,OAAO,IAAI,CAAC;SACb;QACD,OAAO,KAAK,CAAC;KACd;IAED,YAAY;QACV,MAAM,MAAM,GAAkB;YAC5B,aAAa,EAAE,EAAE;YACjB,UAAU,EAAE,yBAAyB;YACrC,gBAAgB,EAAE,IAAI,CAAC,YAAY,EAAE;YACrC,cAAc,EAAE,IAAI,CAAC,OAAO,CAAC,gBAAgB,CAAC,UAAU,EAAE;YAC1D,QAAQ,EAAE,IAAI,CAAC,QAAQ;SACxB,CAAC;QACF,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;QACzB,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC;YACtC,OAAO,EAAE,wBAAwB;YACjC,gBAAgB,EAAE,IAAI,CAAC,gBAAgB;YACvC,aAAa,EAAE,MAAM;SACtB,CAAC,CAAC;QACH,IAAI,CAAC,WAAW,EAAE,CAAC;KACpB;IAED,WAAW,CAAC,MAAqB;QAC/B,IAAI,QAAQ,GAAG,MAAM,CAAC,gBAAqD,CAAC;QAC5E,QAAQ,CAAC,eAAe,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,GAAmC;YACtG,MAAM,KAAK,GAAG,wBAAwB,CAAC,GAAG,CAAC,GAAG,CAAC,cAAc,CAAuB,CAAC;YACrF,KAAK,KAAK,IAAI,CAAC,eAAe,IAAI,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;SACzE,CAAC,CAAC;KACJ;IAED,WAAW;QACT,IAAI,YAAY,GAAG,IAAI,CAAC,MAAM,EAAE,YAAY,CAAC;QAC7C,IAAI,CAAC,YAAY;YAAE,OAAO;QAC1B,MAAM,CAAC,MAAM,CAAC,YAAY,CAAC,QAAQ,EAAE;YACnC,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,QAAQ;YACzB,QAAQ,EAAE,IAAI,CAAC,QAAQ;YACvB,KAAK,EAAE,MAAM,IAAI,CAAC,WAAW,EAAE;YAC/B,SAAS,EAAE,IAAI,CAAC,eAAe;YAC/B,cAAc,EAAE,IAAI,CAAC,oBAAoB;YACzC,QAAQ,EAAE,CAAC,IAAmB,KAAK,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC;YACvD,WAAW,EAAE,CAAC,KAAc,KAAK,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC;YAClD,SAAS,EAAE,CAAC,GAAY,MAAM,IAAI,CAAC,cAAc,GAAG,GAAG,CAAC;SACzD,CAAC,CAAC;QACH,YAAY,CAAC,iBAAiB,CAAC,aAAa,EAAE,CAAC;KAChD;IAED,KAAK,CAAC,KAAc;QAClB,IAAI,IAAI,CAAC,WAAW,IAAI,KAAK,EAAE;YAC7B,YAAY,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;SAChC;aAAM;YACL,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;YACxB,IAAI,CAAC,OAAO,EAAE,CAAC;SAChB;KACF;IAED,YAAY;QACV,OAAO,IAAI,CAAC,aAAa,CAAC,YAAY,CAAC;YACrC,UAAU,EAAE,IAAI,UAAU,CAAC,IAAI,CAAC,IAAI,EAAE,KAAK,EAAE,MAAM,CAAC;YACpD,SAAS,EAAE,CAAC,aAAa,EAAE,WAAW,EAAE,YAAY,EAAE,UAAU,CAAC;YACjE,iBAAiB,EAAE,mBAAmB;SACvC,CAAC,CAAC;KACJ;IAED,OAAO,CAAC,IAAmB;QACzB,IAAI,CAAC,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,cAAc;YAAE,OAAO;QAC/D,IAAI,IAAI,CAAC,WAAW;YAAE,YAAY,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;QACrD,IAAI,IAAI,CAAC,cAAc,EAAE,IAAI,IAAI,CAAC,IAAI,EAAE,EAAE,KAAK,IAAI,CAAC,EAAE,EAAE;YACtD,IAAI,CAAC,MAAM,EAAE,UAAU,EAAE,OAAO,EAAE,CAAC;SACpC;QACD,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE,EAAE;YAC1B,IAAI,CAAC,YAAY,EAAE,CAAC;SACrB;QACD,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE,CAAC;KAC1B;IAED,OAAO;QACL,IAAI,IAAI,CAAC,cAAc,EAAE,EAAE;YACzB,IAAI,CAAC,WAAW,GAAG,UAAU,CAAC;gBAC5B,IAAI,CAAC,MAAM,EAAE,UAAU,EAAE,OAAO,EAAE,CAAC;aACpC,CAAC,CAAC;SACJ;KACF;;2JAxJU,wBAAwB;+IAAxB,wBAAwB,mTC3BrC,8MAGA,2aDsBc,CAAC,qBAAqB,CAAC;2FAExB,wBAAwB;kBARpC,SAAS;+BACE,GAAG,qBAAqB,EAAE,iBAGrB,iBAAiB,CAAC,IAAI,mBACpB,uBAAuB,CAAC,MAAM,cACnC,CAAC,qBAAqB,CAAC;2OAGc,SAAS;sBAAzD,WAAW;uBAAC,2BAA2B;gBACoB,IAAI;sBAA/D,YAAY;uBAAC,gCAAgC,EAAE,CAAC,QAAQ,CAAC;gBAIG,KAAK;sBAAjE,YAAY;uBAAC,iCAAiC,EAAE,CAAC,QAAQ,CAAC;gBAqB/B,UAAU;sBAArC,YAAY;uBAAC,YAAY;gBAIE,UAAU;sBAArC,YAAY;uBAAC,YAAY;;;ME/Bf,kBAAmB,SAAQ,iBAAiB;IAevD,YACS,QAAmB,EACnB,UAAsB,EACtB,GAAsB,EACrB,aAA6B,EAC7B,gBAAkC,EAClC,OAAgB,EACjB,aAA6B;QAEpC,KAAK,EAAE,CAAC;QARD,aAAQ,GAAR,QAAQ,CAAW;QACnB,eAAU,GAAV,UAAU,CAAY;QACtB,QAAG,GAAH,GAAG,CAAmB;QACrB,kBAAa,GAAb,aAAa,CAAgB;QAC7B,qBAAgB,GAAhB,gBAAgB,CAAkB;QAClC,YAAO,GAAP,OAAO,CAAS;QACjB,kBAAa,GAAb,aAAa,CAAgB;QApBtC,UAAK,GAAoB,EAAE,CAAC;QAC5B,UAAK,GAAoB,EAAE,CAAC;QAG5B,YAAO,GAAY,KAAK,CAAC;QACzB,cAAS,GAAG,KAAK,CAAC;QAClB,iBAAY,GAAG,KAAK,CAAC;QAErB,oBAAe,GAAG,IAAI,OAAO,EAAQ,CAAC;QACtC,mBAAc,GAAiB,IAAI,OAAO,EAAE,CAAC;QAC7C,iBAAY,GAAkB,IAAI,OAAO,EAAE,CAAC;QACpC,eAAU,GAAG,IAAI,OAAO,EAAQ,CAAC;KAYxC;IAED,QAAQ;QACN,IAAI,CAAC,UAAU,EAAE,CAAC;KACnB;IAED,WAAW,CAAC,OAAsB;QAChC,MAAM,EAAE,IAAI,EAAE,GAAG,OAAO,CAAC;QACzB,SAAS,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;KACnC;IAED,WAAW;QACT,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,CAAC;QACvB,IAAI,CAAC,UAAU,CAAC,QAAQ,EAAE,CAAC;QAC3B,IAAI,CAAC,eAAe,CAAC,IAAI,EAAE,CAAC;QAC5B,IAAI,CAAC,eAAe,CAAC,QAAQ,EAAE,CAAC;KACjC;IAED,UAAU;QACR,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,SAAS,CAAC;YAC3D,IAAI,CAAC,WAAW,EAAE,CAAC;SACpB,CAAC,CAAC;KACJ;IAED,OAAO;QACL,EAAE,CAAC,IAAI,CAAC;aACL,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE,SAAS,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;aAC7D,SAAS,CAAC;YACT,IAAI,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,OAAO,KAAK,OAAO;gBAAE,OAAO;YACtD,IAAI,IAAI,CAAC,WAAW;gBAAE,YAAY,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;YACrD,IAAI,CAAC,IAAI,CAAC,MAAM,KAAK,IAAI,CAAC,MAAM,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,UAAU,EAAE,WAAW,EAAE,CAAC,EAAE;gBAC5E,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC;gBACpB,IAAI,CAAC,YAAY,EAAE,CAAC;gBACpB,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE,CAAC;aAC1B;SACF,CAAC,CAAC;KACN;IAED,OAAO;QACL,IAAI,CAAC,eAAe,CAAC,IAAI,EAAE,CAAC;QAC5B,IAAI,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,OAAO,KAAK,OAAO;YAAE,OAAO;QACtD,IAAI,IAAI,CAAC,MAAM,EAAE,UAAU,EAAE,WAAW,EAAE,EAAE;YAC1C,IAAI,CAAC,WAAW,GAAG,UAAU,CAAC;gBAC5B,IAAI,CAAC,OAAO,GAAG,KAAK,CAAC;gBACrB,IAAI,CAAC,MAAM,EAAE,UAAU,EAAE,OAAO,EAAE,CAAC;gBACnC,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE,CAAC;aAC1B,CAAC,CAAC;SACJ;KACF;IAED,UAAU;QACR,IAAI,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,OAAO,KAAK,OAAO,IAAI,IAAI,CAAC,SAAS;YAAE,OAAO;QACxE,IAAI,IAAI,CAAC,OAAO,KAAK,OAAO,IAAI,IAAI,CAAC,cAAc,EAAE,EAAE;YACrD,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE,CAAC;YACzB,OAAO;SACR;QACD,IAAI,CAAC,YAAY,EAAE,CAAC;KACrB;IAED,cAAc;QACZ,OAAO,IAAI,CAAC,MAAM,EAAE,UAAU,EAAE,WAAW,EAAE,CAAC;KAC/C;IAED,WAAW;QACT,IAAI,IAAI,CAAC,cAAc,EAAE,EAAE;YACzB,IAAI,CAAC,MAAM,EAAE,UAAU,EAAE,OAAO,EAAE,CAAC;YACnC,OAAO,IAAI,CAAC;SACb;QACD,OAAO,KAAK,CAAC;KACd;IAED,aAAa;QACX,IAAI,CAAC,MAAM,EAAE,UAAU,EAAE,OAAO,EAAE,CAAC;KACpC;IAED,YAAY;QACV,IAAI,GAAG,GAAG,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC,qBAAqB,EAAE,CAAC;QAC9D,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,cAAc,GAAG,GAAG,CAAC,KAAK,CAAC;QACtE,MAAM,MAAM,GAAkB;YAC5B,aAAa,EAAE,EAAE;YACjB,gBAAgB,EAAE,IAAI,CAAC,YAAY,EAAE;YACrC,cAAc,EAAE,IAAI,CAAC,OAAO,CAAC,gBAAgB,CAAC,UAAU,EAAE;YAC1D,QAAQ,EAAE,IAAI,CAAC,QAAQ;SACxB,CAAC;QACF,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;QACzB,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC;YACtC,OAAO,EAAE,wBAAwB;YACjC,gBAAgB,EAAE,IAAI,CAAC,gBAAgB;YACvC,aAAa,EAAE,MAAM;SACtB,CAAC,CAAC;QACH,IAAI,IAAI,CAAC,OAAO,KAAK,OAAO,EAAE;YAC5B,IAAI,CAAC,MAAM,CAAC,UAAU;kBAClB,oBAAoB,EAAE;iBACvB,IAAI,CAAC,YAAY,CAAC,EAAE,CAAC,EAAE,SAAS,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;iBAClD,SAAS,CAAC;gBACT,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE,CAAC;aAC1B,CAAC,CAAC;SACN;QACD,IAAI,CAAC,WAAW,EAAE,CAAC;KACpB;IAED,WAAW,CAAC,MAAqB;QAC/B,IAAI,QAAQ,GAAG,MAAM,CAAC,gBAAqD,CAAC;QAC5E,QAAQ,CAAC,eAAe,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,GAAmC;YACtG,MAAM,KAAK,GAAG,wBAAwB,CAAC,GAAG,CAAC,GAAG,CAAC,cAAc,CAAuB,CAAC;YACrF,KAAK,KAAK,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;SAC7D,CAAC,CAAC;KACJ;IAED,WAAW;QACT,IAAI,YAAY,GAAG,IAAI,CAAC,MAAM,EAAE,YAAY,CAAC;QAC7C,IAAI,CAAC,YAAY;YAAE,OAAO;QAC1B,MAAM,CAAC,MAAM,CAAC,YAAY,CAAC,QAAQ,EAAE;YACnC,IAAI,EAAE,IAAI,CAAC,KAAK;YAChB,OAAO,EAAE,IAAI,CAAC,OAAO;YACrB,QAAQ,EAAE,IAAI,CAAC,QAAQ;YACvB,KAAK,EAAE,MAAM,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE;YACrC,cAAc,EAAE,IAAI,CAAC,cAAc;YACnC,aAAa,EAAE,MAAM,IAAI,CAAC,aAAa,EAAE;YACzC,QAAQ,EAAE,CAAC,IAAmB,KAAK,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC;YAC5D,WAAW,EAAE,CAAC,KAAc,KAAK,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC;YACxD,SAAS,EAAE,CAAC,GAAY,MAAM,IAAI,CAAC,SAAS,GAAG,GAAG,CAAC;SACpD,CAAC,CAAC;QACH,YAAY,CAAC,iBAAiB,CAAC,aAAa,EAAE,CAAC;KAChD;IAED,WAAW,CAAC,KAAc;QACxB,IAAI,IAAI,CAAC,WAAW,IAAI,KAAK,EAAE;YAC7B,YAAY,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;SAChC;aAAM;YACL,IAAI,CAAC,OAAO,EAAE,CAAC;SAChB;KACF;IAED,YAAY;QACV,OAAO,IAAI,CAAC,aAAa,CAAC,YAAY,CAAC;YACrC,UAAU,EAAE,IAAI,CAAC,QAAQ;YACzB,SAAS,EAAE,CAAC,IAAI,CAAC,SAAuB,EAAE,cAAc,EAAE,WAAW,EAAE,YAAY,EAAE,SAAS,CAAC;YAC/F,iBAAiB,EAAE,mBAAmB;SACvC,CAAC,CAAC;KACJ;IAEO,OAAO;QACb,QAAQ,CAAgB,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC;YAC9D,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC;YACf,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE;gBAClB,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,YAAY,CAAgB,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;aAChG;iBAAM;gBACL,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC;aAChB;YACD,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE,CAAC;SAC1B,CAAC,CAAC;KACJ;;qJAjLU,kBAAkB;yIAAlB,kBAAkB,kNC3B/B,8PAWA;2FDgBa,kBAAkB;kBAP9B,SAAS;+BACE,GAAG,eAAe,EAAE,iBAGf,iBAAiB,CAAC,IAAI,mBACpB,uBAAuB,CAAC,MAAM;0QAGN,QAAQ;sBAAhD,SAAS;uBAAC,UAAU,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE;;;MEd5B,eAAe;;kJAAf,eAAe;mJAAf,eAAe,iBALX,kBAAkB,EAAE,wBAAwB,EAAE,iBAAiB,aAEpE,YAAY,EAAE,aAAa,EAAE,WAAW,aADxC,kBAAkB,EAAE,wBAAwB;mJAI3C,eAAe,YAHjB,CAAC,YAAY,EAAE,aAAa,EAAE,WAAW,CAAC;2FAGxC,eAAe;kBAN3B,QAAQ;mBAAC;oBACR,YAAY,EAAE,CAAC,kBAAkB,EAAE,wBAAwB,EAAE,iBAAiB,CAAC;oBAC/E,OAAO,EAAE,CAAC,kBAAkB,EAAE,wBAAwB,CAAC;oBACvD,OAAO,EAAE,CAAC,YAAY,EAAE,aAAa,EAAE,WAAW,CAAC;oBACnD,eAAe,EAAE,CAAC,wBAAwB,CAAC;iBAC5C;;;ACbD;;;;;;"}
1
+ {"version":3,"file":"ng-nest-ui-dropdown.mjs","sources":["../../../../lib/ng-nest/ui/dropdown/dropdown.property.ts","../../../../lib/ng-nest/ui/dropdown/dropdown-portal.component.ts","../../../../lib/ng-nest/ui/dropdown/dropdown-portal.component.html","../../../../lib/ng-nest/ui/dropdown/dropdown.component.ts","../../../../lib/ng-nest/ui/dropdown/dropdown.component.html","../../../../lib/ng-nest/ui/dropdown/dropdown.module.ts","../../../../lib/ng-nest/ui/dropdown/ng-nest-ui-dropdown.ts"],"sourcesContent":["import { XData, XProperty, XDataConvert, XInputBoolean, XBoolean, XPlacement, XWithConfig, XTrigger } from '@ng-nest/ui/core';\r\nimport { XListNode } from '@ng-nest/ui/list';\r\nimport { Input, Output, EventEmitter, Component } from '@angular/core';\r\n\r\n/**\r\n * Dropdown\r\n * @selector x-dropdown\r\n * @decorator component\r\n */\r\nexport const XDropdownPrefix = 'x-dropdown';\r\nconst X_CONFIG_NAME = 'dropdown';\r\n\r\n/**\r\n * Dropdown Property\r\n */\r\n@Component({ template: '' })\r\nexport class XDropdownProperty extends XProperty {\r\n /**\r\n * @zh_CN 节点数据\r\n * @en_US Node data\r\n */\r\n @Input() @XDataConvert() data: XData<XDropdownNode> = [];\r\n /**\r\n * @zh_CN 触发方式\r\n * @en_US Trigger method\r\n */\r\n @Input() @XWithConfig<XDropdownTrigger>(X_CONFIG_NAME, 'hover') trigger?: XDropdownTrigger;\r\n /**\r\n * @zh_CN 展示位置\r\n * @en_US Placement\r\n */\r\n @Input() @XWithConfig<XPlacement>(X_CONFIG_NAME, 'bottom-start') placement?: XPlacement;\r\n /**\r\n * @zh_CN 禁用\r\n * @en_US Disabled\r\n */\r\n @Input() @XInputBoolean() disabled?: XBoolean;\r\n /**\r\n * @zh_CN 节点中已经包含子节点数据\r\n * @en_US The node already contains child node data\r\n */\r\n @Input() @XInputBoolean() children?: XBoolean;\r\n /**\r\n * @zh_CN 弹框的最小宽度\r\n * @en_US Portal min-width\r\n */\r\n @Input() portalMinWidth?: string | number;\r\n /**\r\n * @zh_CN hover 延迟触发时间,只有 trigger 为 'hover' 生效\r\n * @en_US Hover delay trigger time, only trigger is the 'hover'\r\n */\r\n @Input() hoverDelay: number = 200;\r\n /**\r\n * @zh_CN 节点点击事件\r\n * @en_US Node click event\r\n */\r\n @Output() nodeClick = new EventEmitter<XDropdownNode>();\r\n}\r\n\r\n/**\r\n * @zh_CN Dropdown 数据对象\r\n * @en_US Dropdown data object\r\n */\r\nexport interface XDropdownNode extends XListNode {}\r\n\r\n/**\r\n * @zh_CN 显示方式\r\n * @en_US Display method\r\n */\r\nexport type XDropdownTrigger = XTrigger;\r\n\r\n/**\r\n * Dropdown Portal\r\n * @selector x-dropdown-portal\r\n * @decorator component\r\n */\r\nexport const XDropdownPortalPrefix = 'x-dropdown-portal';\r\n","import {\r\n Component,\r\n ViewEncapsulation,\r\n Renderer2,\r\n ElementRef,\r\n ChangeDetectorRef,\r\n ChangeDetectionStrategy,\r\n OnDestroy,\r\n HostListener,\r\n ViewContainerRef,\r\n HostBinding\r\n} from '@angular/core';\r\nimport { XDropdownPortalPrefix, XDropdownNode, XDropdownTrigger } from './dropdown.property';\r\nimport { XPortalConnectedPosition, XPortalOverlayRef, XPortalService } from '@ng-nest/ui/portal';\r\nimport { XConnectBaseAnimation, XPositionTopBottom } from '@ng-nest/ui/core';\r\nimport { Subject } from 'rxjs';\r\nimport { takeUntil } from 'rxjs/operators';\r\nimport { ConnectedOverlayPositionChange, FlexibleConnectedPositionStrategy, Overlay, OverlayConfig } from '@angular/cdk/overlay';\r\n\r\n@Component({\r\n selector: `${XDropdownPortalPrefix}`,\r\n templateUrl: './dropdown-portal.component.html',\r\n styleUrls: ['./dropdown-portal.component.scss'],\r\n encapsulation: ViewEncapsulation.None,\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n animations: [XConnectBaseAnimation]\r\n})\r\nexport class XDropdownPortalComponent implements OnDestroy {\r\n @HostBinding('@x-connect-base-animation') public placement!: XPositionTopBottom;\r\n @HostListener('@x-connect-base-animation.done', ['$event']) done(event: { toState: any }) {\r\n this.animating(false);\r\n event.toState === 'void' && this.destroyPortal();\r\n }\r\n @HostListener('@x-connect-base-animation.start', ['$event']) start() {\r\n this.animating(true);\r\n }\r\n data!: XDropdownNode[];\r\n trigger!: XDropdownTrigger;\r\n close!: Function;\r\n nodeEmit!: Function;\r\n portalHover!: Function;\r\n animating!: Function;\r\n destroyPortal!: Function;\r\n portal!: XPortalOverlayRef<XDropdownPortalComponent>;\r\n positionChange!: Subject<any>;\r\n portalPositionChange: Subject<any> = new Subject();\r\n node!: XDropdownNode;\r\n timeoutHide: any;\r\n timespan = 200;\r\n minWidth!: string | number;\r\n portalPlacement!: XPositionTopBottom;\r\n childAnimating = false;\r\n private _unSubject = new Subject<void>();\r\n\r\n @HostListener('mouseenter') mouseenter() {\r\n this.portalHover(true);\r\n }\r\n\r\n @HostListener('mouseleave') mouseleave() {\r\n !this.portalAttached() && this.portalHover(false);\r\n }\r\n\r\n constructor(\r\n public renderer: Renderer2,\r\n public elementRef: ElementRef,\r\n public cdr: ChangeDetectorRef,\r\n private portalService: XPortalService,\r\n private overlay: Overlay,\r\n private viewContainerRef: ViewContainerRef\r\n ) {}\r\n\r\n ngOnInit() {\r\n this.positionChange.pipe(takeUntil(this._unSubject)).subscribe((x) => {\r\n this.placement = x;\r\n this.cdr.detectChanges();\r\n });\r\n }\r\n\r\n ngAfterViewInit() {}\r\n\r\n ngOnDestroy(): void {\r\n this._unSubject.next();\r\n this._unSubject.unsubscribe();\r\n }\r\n\r\n nodeClick(node: XDropdownNode) {\r\n if (!node.leaf) this.close();\r\n this.nodeEmit(node);\r\n }\r\n\r\n portalAttached() {\r\n return this.portal?.overlayRef?.hasAttached();\r\n }\r\n\r\n closePortal() {\r\n if (this.portalAttached()) {\r\n this.portal?.overlayRef?.dispose();\r\n return true;\r\n }\r\n return false;\r\n }\r\n\r\n createPortal() {\r\n const config: OverlayConfig = {\r\n backdropClass: '',\r\n panelClass: 'x-dropdown-portal-child',\r\n positionStrategy: this.setPlacement(),\r\n scrollStrategy: this.overlay.scrollStrategies.reposition(),\r\n minWidth: this.minWidth\r\n };\r\n this.setPosition(config);\r\n this.portal = this.portalService.attach({\r\n content: XDropdownPortalComponent,\r\n viewContainerRef: this.viewContainerRef,\r\n overlayConfig: config\r\n });\r\n this.setInstance();\r\n }\r\n\r\n setPosition(config: OverlayConfig) {\r\n let position = config.positionStrategy as FlexibleConnectedPositionStrategy;\r\n position.positionChanges.pipe(takeUntil(this._unSubject)).subscribe((pos: ConnectedOverlayPositionChange) => {\r\n const place = XPortalConnectedPosition.get(pos.connectionPair) as XPositionTopBottom;\r\n place !== this.portalPlacement && this.portalPositionChange.next(place);\r\n });\r\n }\r\n\r\n setInstance() {\r\n let componentRef = this.portal?.componentRef;\r\n if (!componentRef) return;\r\n Object.assign(componentRef.instance, {\r\n data: this.node?.children,\r\n minWidth: this.minWidth,\r\n close: () => this.closePortal(),\r\n placement: this.portalPlacement,\r\n positionChange: this.portalPositionChange,\r\n nodeEmit: (node: XDropdownNode) => this.nodeClick(node),\r\n portalHover: (hover: boolean) => this.hover(hover),\r\n animating: (ing: boolean) => (this.childAnimating = ing)\r\n });\r\n componentRef.changeDetectorRef.detectChanges();\r\n }\r\n\r\n hover(hover: boolean) {\r\n if (this.timeoutHide && hover) {\r\n clearTimeout(this.timeoutHide);\r\n } else {\r\n this.portalHover(false);\r\n this.onLeave();\r\n }\r\n }\r\n\r\n setPlacement() {\r\n return this.portalService.setPlacement({\r\n elementRef: new ElementRef(this.node?.event?.target),\r\n placement: ['right-start', 'right-end', 'left-start', 'left-end'],\r\n transformOriginOn: 'x-dropdown-portal'\r\n });\r\n }\r\n\r\n onEnter(node: XDropdownNode) {\r\n if (!node.leaf || node.disabled || this.childAnimating) return;\r\n if (this.timeoutHide) clearTimeout(this.timeoutHide);\r\n if (this.portalAttached() && this.node?.id !== node.id) {\r\n this.portal?.overlayRef?.dispose();\r\n }\r\n this.node = node;\r\n if (!this.portalAttached()) {\r\n this.createPortal();\r\n }\r\n this.cdr.detectChanges();\r\n }\r\n\r\n onLeave() {\r\n if (this.portalAttached()) {\r\n this.timeoutHide = setTimeout(() => {\r\n this.portal?.overlayRef?.dispose();\r\n });\r\n }\r\n }\r\n}\r\n","<div #dropdownPortal class=\"x-dropdown-portal\">\r\n <x-list [data]=\"data\" (nodeClick)=\"nodeClick($event)\" (nodeMouseenter)=\"onEnter($event)\" (nodeMouseleave)=\"onLeave()\"></x-list>\r\n</div>\r\n","import {\r\n Component,\r\n ViewEncapsulation,\r\n Renderer2,\r\n ElementRef,\r\n ChangeDetectorRef,\r\n ChangeDetectionStrategy,\r\n SimpleChanges,\r\n OnChanges,\r\n ViewContainerRef,\r\n ViewChild\r\n} from '@angular/core';\r\nimport { XDropdownPrefix, XDropdownNode, XDropdownProperty } from './dropdown.property';\r\nimport { XIsChange, XIsEmpty, XSetData, XGetChildren, XConfigService, XPositionTopBottom, XPlacement } from '@ng-nest/ui/core';\r\nimport { of, Subject } from 'rxjs';\r\nimport { XPortalConnectedPosition, XPortalOverlayRef, XPortalService } from '@ng-nest/ui/portal';\r\nimport { XDropdownPortalComponent } from './dropdown-portal.component';\r\nimport { debounceTime, delay, takeUntil } from 'rxjs/operators';\r\nimport { ConnectedOverlayPositionChange, FlexibleConnectedPositionStrategy, Overlay, OverlayConfig } from '@angular/cdk/overlay';\r\n\r\n@Component({\r\n selector: `${XDropdownPrefix}`,\r\n templateUrl: './dropdown.component.html',\r\n styleUrls: ['./dropdown.component.scss'],\r\n encapsulation: ViewEncapsulation.None,\r\n changeDetection: ChangeDetectionStrategy.OnPush\r\n})\r\nexport class XDropdownComponent extends XDropdownProperty implements OnChanges {\r\n @ViewChild('dropdown', { static: true }) dropdown!: ElementRef;\r\n datas: XDropdownNode[] = [];\r\n nodes: XDropdownNode[] = [];\r\n portal!: XPortalOverlayRef<XDropdownPortalComponent>;\r\n timeoutHide: any;\r\n visible: boolean = false;\r\n animating = false;\r\n outsideClick = false;\r\n minWidth!: string | number;\r\n hoverDelayUnsub = new Subject<void>();\r\n positionChange: Subject<any> = new Subject();\r\n closeSubject: Subject<void> = new Subject();\r\n private _unSubject = new Subject<void>();\r\n\r\n constructor(\r\n public renderer: Renderer2,\r\n public elementRef: ElementRef,\r\n public cdr: ChangeDetectorRef,\r\n private portalService: XPortalService,\r\n private viewContainerRef: ViewContainerRef,\r\n private overlay: Overlay,\r\n public configService: XConfigService\r\n ) {\r\n super();\r\n }\r\n\r\n ngOnInit() {\r\n this.setSubject();\r\n }\r\n\r\n ngOnChanges(changes: SimpleChanges) {\r\n const { data } = changes;\r\n XIsChange(data) && this.setData();\r\n }\r\n\r\n ngOnDestroy(): void {\r\n this._unSubject.next();\r\n this._unSubject.complete();\r\n this.hoverDelayUnsub.next();\r\n this.hoverDelayUnsub.complete();\r\n }\r\n\r\n setSubject() {\r\n this.closeSubject.pipe(takeUntil(this._unSubject)).subscribe(() => {\r\n this.closePortal();\r\n });\r\n }\r\n\r\n onEnter() {\r\n of(true)\r\n .pipe(delay(this.hoverDelay), takeUntil(this.hoverDelayUnsub))\r\n .subscribe(() => {\r\n if (this.disabled || this.trigger === 'click') return;\r\n if (this.timeoutHide) clearTimeout(this.timeoutHide);\r\n if (!this.portal || (this.portal && !this.portal?.overlayRef?.hasAttached())) {\r\n this.visible = true;\r\n this.createPortal();\r\n this.cdr.detectChanges();\r\n }\r\n });\r\n }\r\n\r\n onLeave() {\r\n this.hoverDelayUnsub.next();\r\n if (this.disabled || this.trigger === 'click') return;\r\n if (this.portal?.overlayRef?.hasAttached()) {\r\n this.timeoutHide = setTimeout(() => {\r\n this.visible = false;\r\n this.portal?.overlayRef?.dispose();\r\n this.cdr.detectChanges();\r\n });\r\n }\r\n }\r\n\r\n showPortal() {\r\n if (this.disabled || this.trigger === 'hover' || this.animating) return;\r\n if (this.trigger === 'click' && this.portalAttached()) {\r\n this.closeSubject.next();\r\n return;\r\n }\r\n this.createPortal();\r\n }\r\n\r\n portalAttached() {\r\n return this.portal?.overlayRef?.hasAttached();\r\n }\r\n\r\n closePortal() {\r\n if (this.portalAttached()) {\r\n this.portal?.overlayRef?.dispose();\r\n return true;\r\n }\r\n return false;\r\n }\r\n\r\n destroyPortal() {\r\n this.portal?.overlayRef?.dispose();\r\n }\r\n\r\n createPortal() {\r\n let box = this.dropdown.nativeElement.getBoundingClientRect();\r\n this.minWidth = this.portalMinWidth ? this.portalMinWidth : box.width;\r\n const config: OverlayConfig = {\r\n backdropClass: '',\r\n positionStrategy: this.setPlacement(),\r\n scrollStrategy: this.overlay.scrollStrategies.reposition(),\r\n minWidth: this.minWidth\r\n };\r\n this.setPosition(config);\r\n this.portal = this.portalService.attach({\r\n content: XDropdownPortalComponent,\r\n viewContainerRef: this.viewContainerRef,\r\n overlayConfig: config\r\n });\r\n if (this.trigger === 'click') {\r\n this.portal.overlayRef\r\n ?.outsidePointerEvents()\r\n .pipe(debounceTime(30), takeUntil(this._unSubject))\r\n .subscribe(() => {\r\n this.closeSubject.next();\r\n });\r\n }\r\n this.setInstance();\r\n }\r\n\r\n setPosition(config: OverlayConfig) {\r\n let position = config.positionStrategy as FlexibleConnectedPositionStrategy;\r\n position.positionChanges.pipe(takeUntil(this._unSubject)).subscribe((pos: ConnectedOverlayPositionChange) => {\r\n const place = XPortalConnectedPosition.get(pos.connectionPair) as XPositionTopBottom;\r\n place !== this.placement && this.positionChange.next(place);\r\n });\r\n }\r\n\r\n setInstance() {\r\n let componentRef = this.portal?.componentRef;\r\n if (!componentRef) return;\r\n Object.assign(componentRef.instance, {\r\n data: this.nodes,\r\n trigger: this.trigger,\r\n minWidth: this.minWidth,\r\n close: () => this.closeSubject.next(),\r\n positionChange: this.positionChange,\r\n destroyPortal: () => this.destroyPortal(),\r\n nodeEmit: (node: XDropdownNode) => this.nodeClick.emit(node),\r\n portalHover: (hover: boolean) => this.portalHover(hover),\r\n animating: (ing: boolean) => (this.animating = ing)\r\n });\r\n componentRef.changeDetectorRef.detectChanges();\r\n }\r\n\r\n portalHover(hover: boolean) {\r\n if (this.timeoutHide && hover) {\r\n clearTimeout(this.timeoutHide);\r\n } else {\r\n this.onLeave();\r\n }\r\n }\r\n\r\n setPlacement() {\r\n return this.portalService.setPlacement({\r\n elementRef: this.dropdown,\r\n placement: [this.placement as XPlacement, 'bottom-start', 'top-start', 'bottom-end', 'top-end'],\r\n transformOriginOn: 'x-dropdown-portal'\r\n });\r\n }\r\n\r\n private setData() {\r\n XSetData<XDropdownNode>(this.data, this._unSubject).subscribe((x) => {\r\n this.datas = x;\r\n if (!this.children) {\r\n this.nodes = x.filter((y) => XIsEmpty(y.pid)).map((y) => XGetChildren<XDropdownNode>(x, y, 0));\r\n } else {\r\n this.nodes = x;\r\n }\r\n this.cdr.detectChanges();\r\n });\r\n }\r\n}\r\n","<div\r\n #dropdown\r\n class=\"x-dropdown\"\r\n [ngClass]=\"classMap\"\r\n [class.x-visible]=\"visible\"\r\n (mouseenter)=\"onEnter()\"\r\n (mouseleave)=\"onLeave()\"\r\n (click)=\"showPortal()\"\r\n>\r\n <ng-content></ng-content>\r\n</div>\r\n","import { NgModule } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { XDropdownComponent } from './dropdown.component';\r\nimport { XDropdownPortalComponent } from './dropdown-portal.component';\r\nimport { XPortalModule } from '@ng-nest/ui/portal';\r\nimport { XListModule } from '@ng-nest/ui/list';\r\nimport { XDropdownProperty } from './dropdown.property';\r\n\r\n@NgModule({\r\n declarations: [XDropdownComponent, XDropdownPortalComponent, XDropdownProperty],\r\n exports: [XDropdownComponent, XDropdownPortalComponent],\r\n imports: [CommonModule, XPortalModule, XListModule]\r\n})\r\nexport class XDropdownModule {}\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}