@ahmedhfarag/ngx-perfect-scrollbar 19.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +163 -0
- package/fesm2022/ahmedhfarag-ngx-perfect-scrollbar.mjs +647 -0
- package/fesm2022/ahmedhfarag-ngx-perfect-scrollbar.mjs.map +1 -0
- package/index.d.ts +5 -0
- package/lib/perfect-scrollbar-force-native-scroll.directive.d.ts +8 -0
- package/lib/perfect-scrollbar.component.d.ts +47 -0
- package/lib/perfect-scrollbar.directive.d.ts +51 -0
- package/lib/perfect-scrollbar.interfaces.d.ts +46 -0
- package/lib/perfect-scrollbar.module.d.ts +10 -0
- package/package.json +32 -0
- package/public-api.d.ts +5 -0
package/README.md
ADDED
@@ -0,0 +1,163 @@
|
|
1
|
+
# Angular Perfect Scrollbar
|
2
|
+
|
3
|
+
<a href="https://badge.fury.io/js/ngx-perfect-scrollbar"><img src="https://badge.fury.io/js/ngx-perfect-scrollbar.svg" align="right" alt="npm version" height="18"></a>
|
4
|
+
|
5
|
+
This is an Angular wrapper library for the [Perfect Scrollbar](https://utatti.github.io/perfect-scrollbar/). To use this library you should get familiar with the Perfect Scrollbar documentation as well since this documentation only explains details specific to this wrapper.
|
6
|
+
|
7
|
+
This documentation is for the latest 5/6.x.x version which requires Angular 5 or newer. For Angular 4 you need to use the latest 4.x.x version. Documentation for the 4.x.x can be found from <a href="https://github.com/zefoy/ngx-perfect-scrollbar/tree/4.x.x/">here</a>.
|
8
|
+
|
9
|
+
### Quick links
|
10
|
+
|
11
|
+
[Example application](https://zefoy.github.io/ngx-perfect-scrollbar/)
|
12
|
+
|
|
13
|
+
[StackBlitz example](https://stackblitz.com/github/zefoy/ngx-perfect-scrollbar/tree/master)
|
14
|
+
|
|
15
|
+
[Perfect Scrollbar documentation](https://github.com/utatti/perfect-scrollbar/)
|
16
|
+
|
17
|
+
### Building the library
|
18
|
+
|
19
|
+
```bash
|
20
|
+
npm install
|
21
|
+
npm run build
|
22
|
+
```
|
23
|
+
|
24
|
+
### Running the example
|
25
|
+
|
26
|
+
```bash
|
27
|
+
npm install
|
28
|
+
npm run start
|
29
|
+
```
|
30
|
+
|
31
|
+
### Installing and usage
|
32
|
+
|
33
|
+
```bash
|
34
|
+
npm install ngx-perfect-scrollbar --save
|
35
|
+
```
|
36
|
+
|
37
|
+
##### Load the module for your app (with global configuration):
|
38
|
+
|
39
|
+
Providing the global configuration is optional and when used you should only provide the configuration in your root module.
|
40
|
+
|
41
|
+
```javascript
|
42
|
+
import { PerfectScrollbarModule } from 'ngx-perfect-scrollbar';
|
43
|
+
import { PERFECT_SCROLLBAR_CONFIG } from 'ngx-perfect-scrollbar';
|
44
|
+
import { PerfectScrollbarConfigInterface } from 'ngx-perfect-scrollbar';
|
45
|
+
|
46
|
+
const DEFAULT_PERFECT_SCROLLBAR_CONFIG: PerfectScrollbarConfigInterface = {
|
47
|
+
suppressScrollX: true
|
48
|
+
};
|
49
|
+
|
50
|
+
@NgModule({
|
51
|
+
...
|
52
|
+
imports: [
|
53
|
+
...
|
54
|
+
PerfectScrollbarModule
|
55
|
+
],
|
56
|
+
providers: [
|
57
|
+
{
|
58
|
+
provide: PERFECT_SCROLLBAR_CONFIG,
|
59
|
+
useValue: DEFAULT_PERFECT_SCROLLBAR_CONFIG
|
60
|
+
}
|
61
|
+
]
|
62
|
+
})
|
63
|
+
```
|
64
|
+
|
65
|
+
##### Use it in your HTML template (with custom configuration):
|
66
|
+
|
67
|
+
This library provides two ways to create a Perfect Scrollbar element, a component and a directive. Component tries to make the usage as simple as possible and the directive is meant for more custom / advanced use cases.
|
68
|
+
|
69
|
+
The scroll area always needs some fixed height to work. The default styles uses 100% as the height value so the parent needs to have fixed height or you need to set it via CSS styles. Otherwise the height keeps growing and you won't get the scrollbars.
|
70
|
+
|
71
|
+
**COMPONENT USAGE**
|
72
|
+
|
73
|
+
Simply replace the element that would ordinarily be passed to `PerfectScrollbar` with the perfect-scollbar component.
|
74
|
+
|
75
|
+
```html
|
76
|
+
<perfect-scrollbar style="max-width: 600px; max-height: 400px;" [config]="config">
|
77
|
+
<div>Scrollable content</div>
|
78
|
+
</perfect-scrollbar>
|
79
|
+
```
|
80
|
+
|
81
|
+
```javascript
|
82
|
+
[config] // Custom config to override the global defaults.
|
83
|
+
[disabled] // Disables the Perfect Scrollbar initialization.
|
84
|
+
|
85
|
+
[usePSClass] // Use 'ps' class (needed by the ps theme styles).
|
86
|
+
|
87
|
+
[autoPropagation] // Automatic swipe and wheel propagation control.
|
88
|
+
[scrollIndicators] // Enable fading edges scroll indicators showing.
|
89
|
+
|
90
|
+
(<psEventName>) // All Perfect Scrollbar events work as bindings.
|
91
|
+
// Event names are in camel case (not kebab case).
|
92
|
+
// Example: ps-y-reach-start -> psYReachStart
|
93
|
+
```
|
94
|
+
|
95
|
+
**DIRECTIVE USAGE**
|
96
|
+
|
97
|
+
When using only the directive you need to provide your own theming or import the default theme:
|
98
|
+
|
99
|
+
```css
|
100
|
+
@import '~perfect-scrollbar/css/perfect-scrollbar.css';
|
101
|
+
```
|
102
|
+
|
103
|
+
Perfect Scrollbar directive should be used with div elements and can take optional custom configuration:
|
104
|
+
|
105
|
+
```html
|
106
|
+
<div class="ps" style="position: relative; max-width: 600px; max-height: 400px;" [perfectScrollbar]="config">
|
107
|
+
<div>Scrollable content</div>
|
108
|
+
</div>
|
109
|
+
```
|
110
|
+
|
111
|
+
```javascript
|
112
|
+
[perfectScrollbar] // Can be used to provide optional custom config.
|
113
|
+
|
114
|
+
[disabled] // Disables the Perfect Scrollbar initialization.
|
115
|
+
|
116
|
+
(<psEventName>) // All Perfect Scrollbar events work as bindings.
|
117
|
+
// Event namea are in camel case (not kebab case).
|
118
|
+
// Example: ps-y-reach-start -> psYReachStart
|
119
|
+
```
|
120
|
+
|
121
|
+
##### Available configuration options (custom / global configuration):
|
122
|
+
|
123
|
+
```javascript
|
124
|
+
handlers // List of event handlers to scroll the element.
|
125
|
+
wheelSpeed // Scroll speed for the mousewheel event (Default: 1).
|
126
|
+
swipeEasing // Use easing for the swipe scrolling (Default: true).
|
127
|
+
suppressScrollX // Disable X axis in all situations (Default: false).
|
128
|
+
suppressScrollY // Disable Y axis in all situations (Default: false).
|
129
|
+
wheelPropagation // Propagate wheel events at the end (Default: false).
|
130
|
+
useBothWheelAxes // Always use both of the wheel axes (Default: false).
|
131
|
+
minScrollbarLength // Minimum size (px) for the scrollbar (Default: null).
|
132
|
+
maxScrollbarLength // Maximum size (px) for the scrollbar (Default: null).
|
133
|
+
scrollXMarginOffset // Offset before enabling the X scroller (Default: 0).
|
134
|
+
scrollYMarginOffset // Offset before enabling the Y scroller (Default: 0).
|
135
|
+
```
|
136
|
+
|
137
|
+
For more detailed documentation with all the supported events / options see the the Perfect Scrollbar documentation.
|
138
|
+
|
139
|
+
##### Available control / helper functions (provided by the directive):
|
140
|
+
|
141
|
+
```javascript
|
142
|
+
ps() // Returns reference to the PS instance.
|
143
|
+
|
144
|
+
update() // Updates the scrollbar size and position.
|
145
|
+
|
146
|
+
geometry(prefix) // Returns the geometry with specified prefix.
|
147
|
+
position(absolute) // Returns the reach or absolute scroll position.
|
148
|
+
|
149
|
+
scrollable(direction) // Checks if the given direction is scrollable.
|
150
|
+
// Direction can be: 'any', 'both', 'x', 'y'
|
151
|
+
|
152
|
+
scrollTo(x, y, speed?) // Animate scroll to given x,y coordinates.
|
153
|
+
scrollToY(position, speed?) // Animate scroll to given vertical position.
|
154
|
+
scrollToX(position, speed?) // Animate scroll to given horizontal position.
|
155
|
+
scrollToTop(offset?, speed?) // Animate scroll to given offset from the top.
|
156
|
+
scrollToLeft(offset?, speed?) // Animate scroll to given offset from the left.
|
157
|
+
scrollToRight(offset?, speed?) // Animate scroll to given offset from the right.
|
158
|
+
scrollToBottom(offset?, speed?) // Animate scroll to given offset from the bottom.
|
159
|
+
scrollToElement(element, offset?, speed?) // Animate scroll to given or matching HTML element.
|
160
|
+
// Input can be HTMLElement or a query selector string.
|
161
|
+
```
|
162
|
+
|
163
|
+
Above functions can be accessed through the directive reference (available as directiveRef in the component). Position and offset needs to be given in pixels and speed in milliseconds.
|
@@ -0,0 +1,647 @@
|
|
1
|
+
import { Subject, fromEvent, merge } from 'rxjs';
|
2
|
+
import { auditTime, takeUntil, distinctUntilChanged, mapTo } from 'rxjs/operators';
|
3
|
+
import * as i0 from '@angular/core';
|
4
|
+
import { InjectionToken, EventEmitter, PLATFORM_ID, Directive, Inject, Optional, Input, Output, Component, ViewEncapsulation, HostBinding, ViewChild, NgModule } from '@angular/core';
|
5
|
+
import * as i1 from '@angular/common';
|
6
|
+
import { isPlatformBrowser, CommonModule } from '@angular/common';
|
7
|
+
import PerfectScrollbar from 'perfect-scrollbar';
|
8
|
+
import ResizeObserver from 'resize-observer-polyfill';
|
9
|
+
|
10
|
+
const PERFECT_SCROLLBAR_CONFIG = new InjectionToken('PERFECT_SCROLLBAR_CONFIG');
|
11
|
+
class Geometry {
|
12
|
+
x;
|
13
|
+
y;
|
14
|
+
w;
|
15
|
+
h;
|
16
|
+
constructor(x, y, w, h) {
|
17
|
+
this.x = x;
|
18
|
+
this.y = y;
|
19
|
+
this.w = w;
|
20
|
+
this.h = h;
|
21
|
+
}
|
22
|
+
}
|
23
|
+
class Position {
|
24
|
+
x;
|
25
|
+
y;
|
26
|
+
constructor(x, y) {
|
27
|
+
this.x = x;
|
28
|
+
this.y = y;
|
29
|
+
}
|
30
|
+
}
|
31
|
+
const PerfectScrollbarEvents = [
|
32
|
+
'psScrollY',
|
33
|
+
'psScrollX',
|
34
|
+
'psScrollUp',
|
35
|
+
'psScrollDown',
|
36
|
+
'psScrollLeft',
|
37
|
+
'psScrollRight',
|
38
|
+
'psYReachEnd',
|
39
|
+
'psYReachStart',
|
40
|
+
'psXReachEnd',
|
41
|
+
'psXReachStart'
|
42
|
+
];
|
43
|
+
class PerfectScrollbarConfig {
|
44
|
+
handlers;
|
45
|
+
wheelSpeed;
|
46
|
+
swipeEasing;
|
47
|
+
suppressScrollX;
|
48
|
+
suppressScrollY;
|
49
|
+
wheelPropagation;
|
50
|
+
useBothWheelAxes;
|
51
|
+
scrollingThreshold;
|
52
|
+
minScrollbarLength;
|
53
|
+
maxScrollbarLength;
|
54
|
+
scrollXMarginOffset;
|
55
|
+
scrollYMarginOffset;
|
56
|
+
constructor(config = {}) {
|
57
|
+
this.assign(config);
|
58
|
+
}
|
59
|
+
assign(config = {}) {
|
60
|
+
for (const key in config) {
|
61
|
+
this[key] = config[key];
|
62
|
+
}
|
63
|
+
}
|
64
|
+
}
|
65
|
+
|
66
|
+
class PerfectScrollbarDirective {
|
67
|
+
zone;
|
68
|
+
differs;
|
69
|
+
elementRef;
|
70
|
+
platformId;
|
71
|
+
defaults;
|
72
|
+
instance = null;
|
73
|
+
ro = null;
|
74
|
+
timeout = null;
|
75
|
+
animation = null;
|
76
|
+
configDiff = null;
|
77
|
+
ngDestroy = new Subject();
|
78
|
+
disabled = false;
|
79
|
+
config;
|
80
|
+
psScrollY = new EventEmitter();
|
81
|
+
psScrollX = new EventEmitter();
|
82
|
+
psScrollUp = new EventEmitter();
|
83
|
+
psScrollDown = new EventEmitter();
|
84
|
+
psScrollLeft = new EventEmitter();
|
85
|
+
psScrollRight = new EventEmitter();
|
86
|
+
psYReachEnd = new EventEmitter();
|
87
|
+
psYReachStart = new EventEmitter();
|
88
|
+
psXReachEnd = new EventEmitter();
|
89
|
+
psXReachStart = new EventEmitter();
|
90
|
+
constructor(zone, differs, elementRef, platformId, defaults) {
|
91
|
+
this.zone = zone;
|
92
|
+
this.differs = differs;
|
93
|
+
this.elementRef = elementRef;
|
94
|
+
this.platformId = platformId;
|
95
|
+
this.defaults = defaults;
|
96
|
+
}
|
97
|
+
ngOnInit() {
|
98
|
+
if (!this.disabled && isPlatformBrowser(this.platformId)) {
|
99
|
+
const config = new PerfectScrollbarConfig(this.defaults);
|
100
|
+
config.assign(this.config); // Custom configuration
|
101
|
+
this.zone.runOutsideAngular(() => {
|
102
|
+
this.instance = new PerfectScrollbar(this.elementRef.nativeElement, config);
|
103
|
+
});
|
104
|
+
if (!this.configDiff) {
|
105
|
+
this.configDiff = this.differs.find(this.config || {}).create();
|
106
|
+
this.configDiff.diff(this.config || {});
|
107
|
+
}
|
108
|
+
this.zone.runOutsideAngular(() => {
|
109
|
+
this.ro = new ResizeObserver(() => {
|
110
|
+
this.update();
|
111
|
+
});
|
112
|
+
if (this.elementRef.nativeElement.children[0]) {
|
113
|
+
this.ro.observe(this.elementRef.nativeElement.children[0]);
|
114
|
+
}
|
115
|
+
this.ro.observe(this.elementRef.nativeElement);
|
116
|
+
});
|
117
|
+
this.zone.runOutsideAngular(() => {
|
118
|
+
PerfectScrollbarEvents.forEach((eventName) => {
|
119
|
+
const eventType = eventName.replace(/([A-Z])/g, (c) => `-${c.toLowerCase()}`);
|
120
|
+
fromEvent(this.elementRef.nativeElement, eventType)
|
121
|
+
.pipe(auditTime(20), takeUntil(this.ngDestroy))
|
122
|
+
.subscribe((event) => {
|
123
|
+
this[eventName].emit(event);
|
124
|
+
});
|
125
|
+
});
|
126
|
+
});
|
127
|
+
}
|
128
|
+
}
|
129
|
+
ngOnDestroy() {
|
130
|
+
if (isPlatformBrowser(this.platformId)) {
|
131
|
+
this.ngDestroy.next();
|
132
|
+
this.ngDestroy.complete();
|
133
|
+
if (this.ro) {
|
134
|
+
this.ro.disconnect();
|
135
|
+
}
|
136
|
+
if (this.timeout && typeof window !== 'undefined') {
|
137
|
+
window.clearTimeout(this.timeout);
|
138
|
+
}
|
139
|
+
this.zone.runOutsideAngular(() => {
|
140
|
+
if (this.instance) {
|
141
|
+
this.instance.destroy();
|
142
|
+
}
|
143
|
+
});
|
144
|
+
this.instance = null;
|
145
|
+
}
|
146
|
+
}
|
147
|
+
ngDoCheck() {
|
148
|
+
if (!this.disabled && this.configDiff && isPlatformBrowser(this.platformId)) {
|
149
|
+
const changes = this.configDiff.diff(this.config || {});
|
150
|
+
if (changes) {
|
151
|
+
this.ngOnDestroy();
|
152
|
+
this.ngOnInit();
|
153
|
+
}
|
154
|
+
}
|
155
|
+
}
|
156
|
+
ngOnChanges(changes) {
|
157
|
+
if (changes['disabled'] && !changes['disabled'].isFirstChange() && isPlatformBrowser(this.platformId)) {
|
158
|
+
if (changes['disabled'].currentValue !== changes['disabled'].previousValue) {
|
159
|
+
if (changes['disabled'].currentValue === true) {
|
160
|
+
this.ngOnDestroy();
|
161
|
+
}
|
162
|
+
else if (changes['disabled'].currentValue === false) {
|
163
|
+
this.ngOnInit();
|
164
|
+
}
|
165
|
+
}
|
166
|
+
}
|
167
|
+
}
|
168
|
+
ps() {
|
169
|
+
return this.instance;
|
170
|
+
}
|
171
|
+
update() {
|
172
|
+
if (typeof window !== 'undefined') {
|
173
|
+
if (this.timeout) {
|
174
|
+
window.clearTimeout(this.timeout);
|
175
|
+
}
|
176
|
+
this.timeout = window.setTimeout(() => {
|
177
|
+
if (!this.disabled && this.configDiff) {
|
178
|
+
try {
|
179
|
+
this.zone.runOutsideAngular(() => {
|
180
|
+
if (this.instance) {
|
181
|
+
this.instance.update();
|
182
|
+
}
|
183
|
+
});
|
184
|
+
}
|
185
|
+
catch (error) {
|
186
|
+
// Update can be finished after destroy so catch errors
|
187
|
+
}
|
188
|
+
}
|
189
|
+
}, 0);
|
190
|
+
}
|
191
|
+
}
|
192
|
+
geometry(prefix = 'scroll') {
|
193
|
+
return new Geometry(this.elementRef.nativeElement[prefix + 'Left'], this.elementRef.nativeElement[prefix + 'Top'], this.elementRef.nativeElement[prefix + 'Width'], this.elementRef.nativeElement[prefix + 'Height']);
|
194
|
+
}
|
195
|
+
position(absolute = false) {
|
196
|
+
if (!absolute && this.instance) {
|
197
|
+
return new Position(this.instance.reach.x || 0, this.instance.reach.y || 0);
|
198
|
+
}
|
199
|
+
else {
|
200
|
+
return new Position(this.elementRef.nativeElement.scrollLeft, this.elementRef.nativeElement.scrollTop);
|
201
|
+
}
|
202
|
+
}
|
203
|
+
scrollable(direction = 'any') {
|
204
|
+
const element = this.elementRef.nativeElement;
|
205
|
+
if (direction === 'any') {
|
206
|
+
return element.classList.contains('ps--active-x') ||
|
207
|
+
element.classList.contains('ps--active-y');
|
208
|
+
}
|
209
|
+
else if (direction === 'both') {
|
210
|
+
return element.classList.contains('ps--active-x') &&
|
211
|
+
element.classList.contains('ps--active-y');
|
212
|
+
}
|
213
|
+
else {
|
214
|
+
return element.classList.contains('ps--active-' + direction);
|
215
|
+
}
|
216
|
+
}
|
217
|
+
scrollTo(x, y, speed) {
|
218
|
+
if (!this.disabled) {
|
219
|
+
if (y == null && speed == null) {
|
220
|
+
this.animateScrolling('scrollTop', x, speed);
|
221
|
+
}
|
222
|
+
else {
|
223
|
+
if (x != null) {
|
224
|
+
this.animateScrolling('scrollLeft', x, speed);
|
225
|
+
}
|
226
|
+
if (y != null) {
|
227
|
+
this.animateScrolling('scrollTop', y, speed);
|
228
|
+
}
|
229
|
+
}
|
230
|
+
}
|
231
|
+
}
|
232
|
+
scrollToX(x, speed) {
|
233
|
+
this.animateScrolling('scrollLeft', x, speed);
|
234
|
+
}
|
235
|
+
scrollToY(y, speed) {
|
236
|
+
this.animateScrolling('scrollTop', y, speed);
|
237
|
+
}
|
238
|
+
scrollToTop(offset, speed) {
|
239
|
+
this.animateScrolling('scrollTop', (offset || 0), speed);
|
240
|
+
}
|
241
|
+
scrollToLeft(offset, speed) {
|
242
|
+
this.animateScrolling('scrollLeft', (offset || 0), speed);
|
243
|
+
}
|
244
|
+
scrollToRight(offset, speed) {
|
245
|
+
const left = this.elementRef.nativeElement.scrollWidth -
|
246
|
+
this.elementRef.nativeElement.clientWidth;
|
247
|
+
this.animateScrolling('scrollLeft', left - (offset || 0), speed);
|
248
|
+
}
|
249
|
+
scrollToBottom(offset, speed) {
|
250
|
+
const top = this.elementRef.nativeElement.scrollHeight -
|
251
|
+
this.elementRef.nativeElement.clientHeight;
|
252
|
+
this.animateScrolling('scrollTop', top - (offset || 0), speed);
|
253
|
+
}
|
254
|
+
scrollToElement(element, offset, speed) {
|
255
|
+
if (typeof element === 'string') {
|
256
|
+
element = this.elementRef.nativeElement.querySelector(element);
|
257
|
+
}
|
258
|
+
if (element) {
|
259
|
+
const elementPos = element.getBoundingClientRect();
|
260
|
+
const scrollerPos = this.elementRef.nativeElement.getBoundingClientRect();
|
261
|
+
if (this.elementRef.nativeElement.classList.contains('ps--active-x')) {
|
262
|
+
const currentPos = this.elementRef.nativeElement['scrollLeft'];
|
263
|
+
const position = elementPos.left - scrollerPos.left + currentPos;
|
264
|
+
this.animateScrolling('scrollLeft', position + (offset || 0), speed);
|
265
|
+
}
|
266
|
+
if (this.elementRef.nativeElement.classList.contains('ps--active-y')) {
|
267
|
+
const currentPos = this.elementRef.nativeElement['scrollTop'];
|
268
|
+
const position = elementPos.top - scrollerPos.top + currentPos;
|
269
|
+
this.animateScrolling('scrollTop', position + (offset || 0), speed);
|
270
|
+
}
|
271
|
+
}
|
272
|
+
}
|
273
|
+
animateScrolling(target, value, speed) {
|
274
|
+
if (this.animation) {
|
275
|
+
window.cancelAnimationFrame(this.animation);
|
276
|
+
this.animation = null;
|
277
|
+
}
|
278
|
+
if (!speed || typeof window === 'undefined') {
|
279
|
+
this.elementRef.nativeElement[target] = value;
|
280
|
+
}
|
281
|
+
else if (value !== this.elementRef.nativeElement[target]) {
|
282
|
+
let newValue = 0;
|
283
|
+
let scrollCount = 0;
|
284
|
+
let oldTimestamp = performance.now();
|
285
|
+
let oldValue = this.elementRef.nativeElement[target];
|
286
|
+
const cosParameter = (oldValue - value) / 2;
|
287
|
+
const step = (newTimestamp) => {
|
288
|
+
scrollCount += Math.PI / (speed / (newTimestamp - oldTimestamp));
|
289
|
+
newValue = Math.round(value + cosParameter + cosParameter * Math.cos(scrollCount));
|
290
|
+
// Only continue animation if scroll position has not changed
|
291
|
+
if (this.elementRef.nativeElement[target] === oldValue) {
|
292
|
+
if (scrollCount >= Math.PI) {
|
293
|
+
this.animateScrolling(target, value, 0);
|
294
|
+
}
|
295
|
+
else {
|
296
|
+
this.elementRef.nativeElement[target] = newValue;
|
297
|
+
// On a zoomed out page the resulting offset may differ
|
298
|
+
oldValue = this.elementRef.nativeElement[target];
|
299
|
+
oldTimestamp = newTimestamp;
|
300
|
+
this.animation = window.requestAnimationFrame(step);
|
301
|
+
}
|
302
|
+
}
|
303
|
+
};
|
304
|
+
window.requestAnimationFrame(step);
|
305
|
+
}
|
306
|
+
}
|
307
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.1.5", ngImport: i0, type: PerfectScrollbarDirective, deps: [{ token: i0.NgZone }, { token: i0.KeyValueDiffers }, { token: i0.ElementRef }, { token: PLATFORM_ID }, { token: PERFECT_SCROLLBAR_CONFIG, optional: true }], target: i0.ɵɵFactoryTarget.Directive });
|
308
|
+
static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "19.1.5", type: PerfectScrollbarDirective, isStandalone: true, selector: "[perfectScrollbar]", inputs: { disabled: "disabled", config: ["perfectScrollbar", "config"] }, outputs: { psScrollY: "psScrollY", psScrollX: "psScrollX", psScrollUp: "psScrollUp", psScrollDown: "psScrollDown", psScrollLeft: "psScrollLeft", psScrollRight: "psScrollRight", psYReachEnd: "psYReachEnd", psYReachStart: "psYReachStart", psXReachEnd: "psXReachEnd", psXReachStart: "psXReachStart" }, exportAs: ["ngxPerfectScrollbar"], usesOnChanges: true, ngImport: i0 });
|
309
|
+
}
|
310
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.1.5", ngImport: i0, type: PerfectScrollbarDirective, decorators: [{
|
311
|
+
type: Directive,
|
312
|
+
args: [{
|
313
|
+
selector: '[perfectScrollbar]',
|
314
|
+
exportAs: 'ngxPerfectScrollbar',
|
315
|
+
standalone: true,
|
316
|
+
}]
|
317
|
+
}], ctorParameters: () => [{ type: i0.NgZone }, { type: i0.KeyValueDiffers }, { type: i0.ElementRef }, { type: Object, decorators: [{
|
318
|
+
type: Inject,
|
319
|
+
args: [PLATFORM_ID]
|
320
|
+
}] }, { type: undefined, decorators: [{
|
321
|
+
type: Optional
|
322
|
+
}, {
|
323
|
+
type: Inject,
|
324
|
+
args: [PERFECT_SCROLLBAR_CONFIG]
|
325
|
+
}] }], propDecorators: { disabled: [{
|
326
|
+
type: Input
|
327
|
+
}], config: [{
|
328
|
+
type: Input,
|
329
|
+
args: ['perfectScrollbar']
|
330
|
+
}], psScrollY: [{
|
331
|
+
type: Output
|
332
|
+
}], psScrollX: [{
|
333
|
+
type: Output
|
334
|
+
}], psScrollUp: [{
|
335
|
+
type: Output
|
336
|
+
}], psScrollDown: [{
|
337
|
+
type: Output
|
338
|
+
}], psScrollLeft: [{
|
339
|
+
type: Output
|
340
|
+
}], psScrollRight: [{
|
341
|
+
type: Output
|
342
|
+
}], psYReachEnd: [{
|
343
|
+
type: Output
|
344
|
+
}], psYReachStart: [{
|
345
|
+
type: Output
|
346
|
+
}], psXReachEnd: [{
|
347
|
+
type: Output
|
348
|
+
}], psXReachStart: [{
|
349
|
+
type: Output
|
350
|
+
}] } });
|
351
|
+
|
352
|
+
class PerfectScrollbarComponent {
|
353
|
+
zone;
|
354
|
+
cdRef;
|
355
|
+
platformId;
|
356
|
+
states = {};
|
357
|
+
indicatorX = false;
|
358
|
+
indicatorY = false;
|
359
|
+
interaction = false;
|
360
|
+
scrollPositionX = 0;
|
361
|
+
scrollPositionY = 0;
|
362
|
+
scrollDirectionX = 0;
|
363
|
+
scrollDirectionY = 0;
|
364
|
+
usePropagationX = false;
|
365
|
+
usePropagationY = false;
|
366
|
+
allowPropagationX = false;
|
367
|
+
allowPropagationY = false;
|
368
|
+
stateTimeout = null;
|
369
|
+
ngDestroy = new Subject();
|
370
|
+
stateUpdate = new Subject();
|
371
|
+
disabled = false;
|
372
|
+
usePSClass = true;
|
373
|
+
autoPropagation = false;
|
374
|
+
scrollIndicators = false;
|
375
|
+
config;
|
376
|
+
psScrollY = new EventEmitter();
|
377
|
+
psScrollX = new EventEmitter();
|
378
|
+
psScrollUp = new EventEmitter();
|
379
|
+
psScrollDown = new EventEmitter();
|
380
|
+
psScrollLeft = new EventEmitter();
|
381
|
+
psScrollRight = new EventEmitter();
|
382
|
+
psYReachEnd = new EventEmitter();
|
383
|
+
psYReachStart = new EventEmitter();
|
384
|
+
psXReachEnd = new EventEmitter();
|
385
|
+
psXReachStart = new EventEmitter();
|
386
|
+
directiveRef;
|
387
|
+
constructor(zone, cdRef, platformId) {
|
388
|
+
this.zone = zone;
|
389
|
+
this.cdRef = cdRef;
|
390
|
+
this.platformId = platformId;
|
391
|
+
}
|
392
|
+
ngOnInit() {
|
393
|
+
if (isPlatformBrowser(this.platformId)) {
|
394
|
+
this.stateUpdate
|
395
|
+
.pipe(takeUntil(this.ngDestroy), distinctUntilChanged((a, b) => (a === b && !this.stateTimeout)))
|
396
|
+
.subscribe((state) => {
|
397
|
+
if (this.stateTimeout && typeof window !== 'undefined') {
|
398
|
+
window.clearTimeout(this.stateTimeout);
|
399
|
+
this.stateTimeout = null;
|
400
|
+
}
|
401
|
+
if (state === 'x' || state === 'y') {
|
402
|
+
this.interaction = false;
|
403
|
+
if (state === 'x') {
|
404
|
+
this.indicatorX = false;
|
405
|
+
this.states.left = false;
|
406
|
+
this.states.right = false;
|
407
|
+
if (this.autoPropagation && this.usePropagationX) {
|
408
|
+
this.allowPropagationX = false;
|
409
|
+
}
|
410
|
+
}
|
411
|
+
else if (state === 'y') {
|
412
|
+
this.indicatorY = false;
|
413
|
+
this.states.top = false;
|
414
|
+
this.states.bottom = false;
|
415
|
+
if (this.autoPropagation && this.usePropagationY) {
|
416
|
+
this.allowPropagationY = false;
|
417
|
+
}
|
418
|
+
}
|
419
|
+
}
|
420
|
+
else {
|
421
|
+
if (state === 'left' || state === 'right') {
|
422
|
+
this.states.left = false;
|
423
|
+
this.states.right = false;
|
424
|
+
this.states[state] = true;
|
425
|
+
if (this.autoPropagation && this.usePropagationX) {
|
426
|
+
this.indicatorX = true;
|
427
|
+
}
|
428
|
+
}
|
429
|
+
else if (state === 'top' || state === 'bottom') {
|
430
|
+
this.states.top = false;
|
431
|
+
this.states.bottom = false;
|
432
|
+
this.states[state] = true;
|
433
|
+
if (this.autoPropagation && this.usePropagationY) {
|
434
|
+
this.indicatorY = true;
|
435
|
+
}
|
436
|
+
}
|
437
|
+
if (this.autoPropagation && typeof window !== 'undefined') {
|
438
|
+
this.stateTimeout = window.setTimeout(() => {
|
439
|
+
this.indicatorX = false;
|
440
|
+
this.indicatorY = false;
|
441
|
+
this.stateTimeout = null;
|
442
|
+
if (this.interaction && (this.states.left || this.states.right)) {
|
443
|
+
this.allowPropagationX = true;
|
444
|
+
}
|
445
|
+
if (this.interaction && (this.states.top || this.states.bottom)) {
|
446
|
+
this.allowPropagationY = true;
|
447
|
+
}
|
448
|
+
this.cdRef.markForCheck();
|
449
|
+
}, 500);
|
450
|
+
}
|
451
|
+
}
|
452
|
+
this.cdRef.markForCheck();
|
453
|
+
this.cdRef.detectChanges();
|
454
|
+
});
|
455
|
+
this.zone.runOutsideAngular(() => {
|
456
|
+
if (this.directiveRef) {
|
457
|
+
const element = this.directiveRef.elementRef.nativeElement;
|
458
|
+
fromEvent(element, 'wheel')
|
459
|
+
.pipe(takeUntil(this.ngDestroy))
|
460
|
+
.subscribe((event) => {
|
461
|
+
if (!this.disabled && this.autoPropagation) {
|
462
|
+
const scrollDeltaX = event.deltaX;
|
463
|
+
const scrollDeltaY = event.deltaY;
|
464
|
+
this.checkPropagation(event, scrollDeltaX, scrollDeltaY);
|
465
|
+
}
|
466
|
+
});
|
467
|
+
fromEvent(element, 'touchmove')
|
468
|
+
.pipe(takeUntil(this.ngDestroy))
|
469
|
+
.subscribe((event) => {
|
470
|
+
if (!this.disabled && this.autoPropagation) {
|
471
|
+
const scrollPositionX = event.touches[0].clientX;
|
472
|
+
const scrollPositionY = event.touches[0].clientY;
|
473
|
+
const scrollDeltaX = scrollPositionX - this.scrollPositionX;
|
474
|
+
const scrollDeltaY = scrollPositionY - this.scrollPositionY;
|
475
|
+
this.checkPropagation(event, scrollDeltaX, scrollDeltaY);
|
476
|
+
this.scrollPositionX = scrollPositionX;
|
477
|
+
this.scrollPositionY = scrollPositionY;
|
478
|
+
}
|
479
|
+
});
|
480
|
+
merge(fromEvent(element, 'ps-scroll-x')
|
481
|
+
.pipe(mapTo('x')), fromEvent(element, 'ps-scroll-y')
|
482
|
+
.pipe(mapTo('y')), fromEvent(element, 'ps-x-reach-end')
|
483
|
+
.pipe(mapTo('right')), fromEvent(element, 'ps-y-reach-end')
|
484
|
+
.pipe(mapTo('bottom')), fromEvent(element, 'ps-x-reach-start')
|
485
|
+
.pipe(mapTo('left')), fromEvent(element, 'ps-y-reach-start')
|
486
|
+
.pipe(mapTo('top')))
|
487
|
+
.pipe(takeUntil(this.ngDestroy))
|
488
|
+
.subscribe((state) => {
|
489
|
+
if (!this.disabled && (this.autoPropagation || this.scrollIndicators)) {
|
490
|
+
this.stateUpdate.next(state);
|
491
|
+
}
|
492
|
+
});
|
493
|
+
}
|
494
|
+
});
|
495
|
+
window.setTimeout(() => {
|
496
|
+
PerfectScrollbarEvents.forEach((eventName) => {
|
497
|
+
if (this.directiveRef) {
|
498
|
+
this.directiveRef[eventName] = this[eventName];
|
499
|
+
}
|
500
|
+
});
|
501
|
+
}, 0);
|
502
|
+
}
|
503
|
+
}
|
504
|
+
ngOnDestroy() {
|
505
|
+
if (isPlatformBrowser(this.platformId)) {
|
506
|
+
this.ngDestroy.next();
|
507
|
+
this.ngDestroy.unsubscribe();
|
508
|
+
if (this.stateTimeout && typeof window !== 'undefined') {
|
509
|
+
window.clearTimeout(this.stateTimeout);
|
510
|
+
}
|
511
|
+
}
|
512
|
+
}
|
513
|
+
ngDoCheck() {
|
514
|
+
if (isPlatformBrowser(this.platformId)) {
|
515
|
+
if (!this.disabled && this.autoPropagation && this.directiveRef) {
|
516
|
+
const element = this.directiveRef.elementRef.nativeElement;
|
517
|
+
this.usePropagationX = element.classList.contains('ps--active-x');
|
518
|
+
this.usePropagationY = element.classList.contains('ps--active-y');
|
519
|
+
}
|
520
|
+
}
|
521
|
+
}
|
522
|
+
checkPropagation(event, deltaX, deltaY) {
|
523
|
+
this.interaction = true;
|
524
|
+
const scrollDirectionX = (deltaX < 0) ? -1 : 1;
|
525
|
+
const scrollDirectionY = (deltaY < 0) ? -1 : 1;
|
526
|
+
if ((this.usePropagationX && this.usePropagationY) ||
|
527
|
+
(this.usePropagationX && (!this.allowPropagationX ||
|
528
|
+
(this.scrollDirectionX !== scrollDirectionX))) ||
|
529
|
+
(this.usePropagationY && (!this.allowPropagationY ||
|
530
|
+
(this.scrollDirectionY !== scrollDirectionY)))) {
|
531
|
+
event.preventDefault();
|
532
|
+
event.stopPropagation();
|
533
|
+
}
|
534
|
+
if (!!deltaX) {
|
535
|
+
this.scrollDirectionX = scrollDirectionX;
|
536
|
+
}
|
537
|
+
if (!!deltaY) {
|
538
|
+
this.scrollDirectionY = scrollDirectionY;
|
539
|
+
}
|
540
|
+
this.stateUpdate.next('interaction');
|
541
|
+
this.cdRef.detectChanges();
|
542
|
+
}
|
543
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.1.5", ngImport: i0, type: PerfectScrollbarComponent, deps: [{ token: i0.NgZone }, { token: i0.ChangeDetectorRef }, { token: PLATFORM_ID }], target: i0.ɵɵFactoryTarget.Component });
|
544
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.1.5", type: PerfectScrollbarComponent, isStandalone: true, selector: "perfect-scrollbar", inputs: { disabled: "disabled", usePSClass: "usePSClass", autoPropagation: "autoPropagation", scrollIndicators: "scrollIndicators", config: "config" }, outputs: { psScrollY: "psScrollY", psScrollX: "psScrollX", psScrollUp: "psScrollUp", psScrollDown: "psScrollDown", psScrollLeft: "psScrollLeft", psScrollRight: "psScrollRight", psYReachEnd: "psYReachEnd", psYReachStart: "psYReachStart", psXReachEnd: "psXReachEnd", psXReachStart: "psXReachStart" }, host: { properties: { "class.ps-show-limits": "this.autoPropagation", "class.ps-show-active": "this.scrollIndicators" } }, viewQueries: [{ propertyName: "directiveRef", first: true, predicate: PerfectScrollbarDirective, descendants: true, static: true }], exportAs: ["ngxPerfectScrollbar"], ngImport: i0, template: "<div style=\"position: static;\" [class.ps]=\"usePSClass\" [perfectScrollbar]=\"config\" [disabled]=\"disabled\">\n <div class=\"ps-content\">\n <ng-content></ng-content>\n </div>\n\n <div *ngIf=\"scrollIndicators\" class=\"ps-overlay\" [class.ps-at-top]=\"states.top\" [class.ps-at-left]=\"states.left\" [class.ps-at-right]=\"states.right\" [class.ps-at-bottom]=\"states.bottom\">\n <div class=\"ps-indicator-top\" [class.ps-indicator-show]=\"indicatorY && interaction\"></div>\n <div class=\"ps-indicator-left\" [class.ps-indicator-show]=\"indicatorX && interaction\"></div>\n <div class=\"ps-indicator-right\" [class.ps-indicator-show]=\"indicatorX && interaction\"></div>\n <div class=\"ps-indicator-bottom\" [class.ps-indicator-show]=\"indicatorY && interaction\"></div>\n </div>\n</div>\n", styles: ["perfect-scrollbar{position:relative;display:block;overflow:hidden;width:100%;height:100%;max-width:100%;max-height:100%}perfect-scrollbar[hidden]{display:none}perfect-scrollbar[fxflex]{display:flex;flex-direction:column;height:auto;min-width:0;min-height:0;-webkit-box-direction:column;-webkit-box-orient:column}perfect-scrollbar[fxflex]>.ps{-ms-flex:1 1 auto;flex:1 1 auto;width:auto;height:auto;min-width:0;min-height:0;-webkit-box-flex:1}perfect-scrollbar[fxlayout]>.ps,perfect-scrollbar[fxlayout]>.ps>.ps-content{display:flex;-ms-flex:1 1 auto;flex:1 1 auto;flex-direction:inherit;align-items:inherit;align-content:inherit;justify-content:inherit;width:100%;height:100%;-webkit-box-align:inherit;-webkit-box-direction:inherit;-webkit-box-flex:1;-webkit-box-orient:inherit;-webkit-box-pack:inherit}perfect-scrollbar[fxlayout=row]>.ps,perfect-scrollbar[fxlayout=row]>.ps>.ps-content{flex-direction:row!important;-webkit-box-direction:row!important;-webkit-box-orient:row!important}perfect-scrollbar[fxlayout=column]>.ps,perfect-scrollbar[fxlayout=column]>.ps>.ps-content{flex-direction:column!important;-webkit-box-direction:column!important;-webkit-box-orient:column!important}perfect-scrollbar>.ps{position:static;display:block;width:100%;height:100%;max-width:100%;max-height:100%}perfect-scrollbar>.ps textarea{-ms-overflow-style:scrollbar}perfect-scrollbar>.ps>.ps-overlay{position:absolute;inset:0;display:block;overflow:hidden;pointer-events:none}perfect-scrollbar>.ps>.ps-overlay .ps-indicator-top,perfect-scrollbar>.ps>.ps-overlay .ps-indicator-left,perfect-scrollbar>.ps>.ps-overlay .ps-indicator-right,perfect-scrollbar>.ps>.ps-overlay .ps-indicator-bottom{position:absolute;opacity:0;transition:opacity .3s ease-in-out}perfect-scrollbar>.ps>.ps-overlay .ps-indicator-top,perfect-scrollbar>.ps>.ps-overlay .ps-indicator-bottom{left:0;min-width:100%;min-height:24px}perfect-scrollbar>.ps>.ps-overlay .ps-indicator-left,perfect-scrollbar>.ps>.ps-overlay .ps-indicator-right{top:0;min-width:24px;min-height:100%}perfect-scrollbar>.ps>.ps-overlay .ps-indicator-top{top:0}perfect-scrollbar>.ps>.ps-overlay .ps-indicator-left{left:0}perfect-scrollbar>.ps>.ps-overlay .ps-indicator-right{right:0}perfect-scrollbar>.ps>.ps-overlay .ps-indicator-bottom{bottom:0}perfect-scrollbar>.ps.ps--active-y>.ps__rail-y{top:0!important;right:0!important;left:auto!important;width:10px;cursor:default;transition:width .2s linear,opacity .2s linear,background-color .2s linear}perfect-scrollbar>.ps.ps--active-y>.ps__rail-y:hover,perfect-scrollbar>.ps.ps--active-y>.ps__rail-y.ps--clicking{width:15px}perfect-scrollbar>.ps.ps--active-x>.ps__rail-x{top:auto!important;bottom:0!important;left:0!important;height:10px;cursor:default;transition:height .2s linear,opacity .2s linear,background-color .2s linear}perfect-scrollbar>.ps.ps--active-x>.ps__rail-x:hover,perfect-scrollbar>.ps.ps--active-x>.ps__rail-x.ps--clicking{height:15px}perfect-scrollbar>.ps.ps--active-x.ps--active-y>.ps__rail-y{margin:0 0 10px}perfect-scrollbar>.ps.ps--active-x.ps--active-y>.ps__rail-x{margin:0 10px 0 0}perfect-scrollbar>.ps.ps--scrolling-y>.ps__rail-y,perfect-scrollbar>.ps.ps--scrolling-x>.ps__rail-x{opacity:.9;background-color:#eee}perfect-scrollbar.ps-show-always>.ps.ps--active-y>.ps__rail-y,perfect-scrollbar.ps-show-always>.ps.ps--active-x>.ps__rail-x{opacity:.6}perfect-scrollbar.ps-show-active>.ps.ps--active-y>.ps-overlay:not(.ps-at-top) .ps-indicator-top{opacity:1;background:linear-gradient(to bottom,#ffffff80,#fff0)}perfect-scrollbar.ps-show-active>.ps.ps--active-y>.ps-overlay:not(.ps-at-bottom) .ps-indicator-bottom{opacity:1;background:linear-gradient(to top,#ffffff80,#fff0)}perfect-scrollbar.ps-show-active>.ps.ps--active-x>.ps-overlay:not(.ps-at-left) .ps-indicator-left{opacity:1;background:linear-gradient(to right,#ffffff80,#fff0)}perfect-scrollbar.ps-show-active>.ps.ps--active-x>.ps-overlay:not(.ps-at-right) .ps-indicator-right{opacity:1;background:linear-gradient(to left,#ffffff80,#fff0)}perfect-scrollbar.ps-show-active.ps-show-limits>.ps.ps--active-y>.ps-overlay.ps-at-top .ps-indicator-top{background:linear-gradient(to bottom,#aaaaaa80,#aaa0)}perfect-scrollbar.ps-show-active.ps-show-limits>.ps.ps--active-y>.ps-overlay.ps-at-bottom .ps-indicator-bottom{background:linear-gradient(to top,#aaaaaa80,#aaa0)}perfect-scrollbar.ps-show-active.ps-show-limits>.ps.ps--active-x>.ps-overlay.ps-at-left .ps-indicator-left{background:linear-gradient(to right,#aaaaaa80,#aaa0)}perfect-scrollbar.ps-show-active.ps-show-limits>.ps.ps--active-x>.ps-overlay.ps-at-right .ps-indicator-right{background:linear-gradient(to left,#aaaaaa80,#aaa0)}perfect-scrollbar.ps-show-active.ps-show-limits>.ps.ps--active-y>.ps-overlay.ps-at-top .ps-indicator-top.ps-indicator-show,perfect-scrollbar.ps-show-active.ps-show-limits>.ps.ps--active-y>.ps-overlay.ps-at-bottom .ps-indicator-bottom.ps-indicator-show,perfect-scrollbar.ps-show-active.ps-show-limits>.ps.ps--active-x>.ps-overlay.ps-at-left .ps-indicator-left.ps-indicator-show,perfect-scrollbar.ps-show-active.ps-show-limits>.ps.ps--active-x>.ps-overlay.ps-at-right .ps-indicator-right.ps-indicator-show{opacity:1}\n", ".ps{overflow:hidden!important;overflow-anchor:none;-ms-overflow-style:none;touch-action:auto;-ms-touch-action:auto}.ps__rail-x{display:none;opacity:0;transition:background-color .2s linear,opacity .2s linear;-webkit-transition:background-color .2s linear,opacity .2s linear;height:15px;bottom:0;position:absolute}.ps__rail-y{display:none;opacity:0;transition:background-color .2s linear,opacity .2s linear;-webkit-transition:background-color .2s linear,opacity .2s linear;width:15px;right:0;position:absolute}.ps--active-x>.ps__rail-x,.ps--active-y>.ps__rail-y{display:block;background-color:transparent}.ps:hover>.ps__rail-x,.ps:hover>.ps__rail-y,.ps--focus>.ps__rail-x,.ps--focus>.ps__rail-y,.ps--scrolling-x>.ps__rail-x,.ps--scrolling-y>.ps__rail-y{opacity:.6}.ps .ps__rail-x:hover,.ps .ps__rail-y:hover,.ps .ps__rail-x:focus,.ps .ps__rail-y:focus,.ps .ps__rail-x.ps--clicking,.ps .ps__rail-y.ps--clicking{background-color:#eee;opacity:.9}.ps__thumb-x{background-color:#aaa;border-radius:6px;transition:background-color .2s linear,height .2s ease-in-out;-webkit-transition:background-color .2s linear,height .2s ease-in-out;height:6px;bottom:2px;position:absolute}.ps__thumb-y{background-color:#aaa;border-radius:6px;transition:background-color .2s linear,width .2s ease-in-out;-webkit-transition:background-color .2s linear,width .2s ease-in-out;width:6px;right:2px;position:absolute}.ps__rail-x:hover>.ps__thumb-x,.ps__rail-x:focus>.ps__thumb-x,.ps__rail-x.ps--clicking .ps__thumb-x{background-color:#999;height:11px}.ps__rail-y:hover>.ps__thumb-y,.ps__rail-y:focus>.ps__thumb-y,.ps__rail-y.ps--clicking .ps__thumb-y{background-color:#999;width:11px}@supports (-ms-overflow-style: none){.ps{overflow:auto!important}}@media screen and (-ms-high-contrast: active),(-ms-high-contrast: none){.ps{overflow:auto!important}}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: PerfectScrollbarDirective, selector: "[perfectScrollbar]", inputs: ["disabled", "perfectScrollbar"], outputs: ["psScrollY", "psScrollX", "psScrollUp", "psScrollDown", "psScrollLeft", "psScrollRight", "psYReachEnd", "psYReachStart", "psXReachEnd", "psXReachStart"], exportAs: ["ngxPerfectScrollbar"] }], encapsulation: i0.ViewEncapsulation.None });
|
545
|
+
}
|
546
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.1.5", ngImport: i0, type: PerfectScrollbarComponent, decorators: [{
|
547
|
+
type: Component,
|
548
|
+
args: [{ selector: 'perfect-scrollbar', exportAs: 'ngxPerfectScrollbar', imports: [CommonModule, PerfectScrollbarDirective], standalone: true, encapsulation: ViewEncapsulation.None, template: "<div style=\"position: static;\" [class.ps]=\"usePSClass\" [perfectScrollbar]=\"config\" [disabled]=\"disabled\">\n <div class=\"ps-content\">\n <ng-content></ng-content>\n </div>\n\n <div *ngIf=\"scrollIndicators\" class=\"ps-overlay\" [class.ps-at-top]=\"states.top\" [class.ps-at-left]=\"states.left\" [class.ps-at-right]=\"states.right\" [class.ps-at-bottom]=\"states.bottom\">\n <div class=\"ps-indicator-top\" [class.ps-indicator-show]=\"indicatorY && interaction\"></div>\n <div class=\"ps-indicator-left\" [class.ps-indicator-show]=\"indicatorX && interaction\"></div>\n <div class=\"ps-indicator-right\" [class.ps-indicator-show]=\"indicatorX && interaction\"></div>\n <div class=\"ps-indicator-bottom\" [class.ps-indicator-show]=\"indicatorY && interaction\"></div>\n </div>\n</div>\n", styles: ["perfect-scrollbar{position:relative;display:block;overflow:hidden;width:100%;height:100%;max-width:100%;max-height:100%}perfect-scrollbar[hidden]{display:none}perfect-scrollbar[fxflex]{display:flex;flex-direction:column;height:auto;min-width:0;min-height:0;-webkit-box-direction:column;-webkit-box-orient:column}perfect-scrollbar[fxflex]>.ps{-ms-flex:1 1 auto;flex:1 1 auto;width:auto;height:auto;min-width:0;min-height:0;-webkit-box-flex:1}perfect-scrollbar[fxlayout]>.ps,perfect-scrollbar[fxlayout]>.ps>.ps-content{display:flex;-ms-flex:1 1 auto;flex:1 1 auto;flex-direction:inherit;align-items:inherit;align-content:inherit;justify-content:inherit;width:100%;height:100%;-webkit-box-align:inherit;-webkit-box-direction:inherit;-webkit-box-flex:1;-webkit-box-orient:inherit;-webkit-box-pack:inherit}perfect-scrollbar[fxlayout=row]>.ps,perfect-scrollbar[fxlayout=row]>.ps>.ps-content{flex-direction:row!important;-webkit-box-direction:row!important;-webkit-box-orient:row!important}perfect-scrollbar[fxlayout=column]>.ps,perfect-scrollbar[fxlayout=column]>.ps>.ps-content{flex-direction:column!important;-webkit-box-direction:column!important;-webkit-box-orient:column!important}perfect-scrollbar>.ps{position:static;display:block;width:100%;height:100%;max-width:100%;max-height:100%}perfect-scrollbar>.ps textarea{-ms-overflow-style:scrollbar}perfect-scrollbar>.ps>.ps-overlay{position:absolute;inset:0;display:block;overflow:hidden;pointer-events:none}perfect-scrollbar>.ps>.ps-overlay .ps-indicator-top,perfect-scrollbar>.ps>.ps-overlay .ps-indicator-left,perfect-scrollbar>.ps>.ps-overlay .ps-indicator-right,perfect-scrollbar>.ps>.ps-overlay .ps-indicator-bottom{position:absolute;opacity:0;transition:opacity .3s ease-in-out}perfect-scrollbar>.ps>.ps-overlay .ps-indicator-top,perfect-scrollbar>.ps>.ps-overlay .ps-indicator-bottom{left:0;min-width:100%;min-height:24px}perfect-scrollbar>.ps>.ps-overlay .ps-indicator-left,perfect-scrollbar>.ps>.ps-overlay .ps-indicator-right{top:0;min-width:24px;min-height:100%}perfect-scrollbar>.ps>.ps-overlay .ps-indicator-top{top:0}perfect-scrollbar>.ps>.ps-overlay .ps-indicator-left{left:0}perfect-scrollbar>.ps>.ps-overlay .ps-indicator-right{right:0}perfect-scrollbar>.ps>.ps-overlay .ps-indicator-bottom{bottom:0}perfect-scrollbar>.ps.ps--active-y>.ps__rail-y{top:0!important;right:0!important;left:auto!important;width:10px;cursor:default;transition:width .2s linear,opacity .2s linear,background-color .2s linear}perfect-scrollbar>.ps.ps--active-y>.ps__rail-y:hover,perfect-scrollbar>.ps.ps--active-y>.ps__rail-y.ps--clicking{width:15px}perfect-scrollbar>.ps.ps--active-x>.ps__rail-x{top:auto!important;bottom:0!important;left:0!important;height:10px;cursor:default;transition:height .2s linear,opacity .2s linear,background-color .2s linear}perfect-scrollbar>.ps.ps--active-x>.ps__rail-x:hover,perfect-scrollbar>.ps.ps--active-x>.ps__rail-x.ps--clicking{height:15px}perfect-scrollbar>.ps.ps--active-x.ps--active-y>.ps__rail-y{margin:0 0 10px}perfect-scrollbar>.ps.ps--active-x.ps--active-y>.ps__rail-x{margin:0 10px 0 0}perfect-scrollbar>.ps.ps--scrolling-y>.ps__rail-y,perfect-scrollbar>.ps.ps--scrolling-x>.ps__rail-x{opacity:.9;background-color:#eee}perfect-scrollbar.ps-show-always>.ps.ps--active-y>.ps__rail-y,perfect-scrollbar.ps-show-always>.ps.ps--active-x>.ps__rail-x{opacity:.6}perfect-scrollbar.ps-show-active>.ps.ps--active-y>.ps-overlay:not(.ps-at-top) .ps-indicator-top{opacity:1;background:linear-gradient(to bottom,#ffffff80,#fff0)}perfect-scrollbar.ps-show-active>.ps.ps--active-y>.ps-overlay:not(.ps-at-bottom) .ps-indicator-bottom{opacity:1;background:linear-gradient(to top,#ffffff80,#fff0)}perfect-scrollbar.ps-show-active>.ps.ps--active-x>.ps-overlay:not(.ps-at-left) .ps-indicator-left{opacity:1;background:linear-gradient(to right,#ffffff80,#fff0)}perfect-scrollbar.ps-show-active>.ps.ps--active-x>.ps-overlay:not(.ps-at-right) .ps-indicator-right{opacity:1;background:linear-gradient(to left,#ffffff80,#fff0)}perfect-scrollbar.ps-show-active.ps-show-limits>.ps.ps--active-y>.ps-overlay.ps-at-top .ps-indicator-top{background:linear-gradient(to bottom,#aaaaaa80,#aaa0)}perfect-scrollbar.ps-show-active.ps-show-limits>.ps.ps--active-y>.ps-overlay.ps-at-bottom .ps-indicator-bottom{background:linear-gradient(to top,#aaaaaa80,#aaa0)}perfect-scrollbar.ps-show-active.ps-show-limits>.ps.ps--active-x>.ps-overlay.ps-at-left .ps-indicator-left{background:linear-gradient(to right,#aaaaaa80,#aaa0)}perfect-scrollbar.ps-show-active.ps-show-limits>.ps.ps--active-x>.ps-overlay.ps-at-right .ps-indicator-right{background:linear-gradient(to left,#aaaaaa80,#aaa0)}perfect-scrollbar.ps-show-active.ps-show-limits>.ps.ps--active-y>.ps-overlay.ps-at-top .ps-indicator-top.ps-indicator-show,perfect-scrollbar.ps-show-active.ps-show-limits>.ps.ps--active-y>.ps-overlay.ps-at-bottom .ps-indicator-bottom.ps-indicator-show,perfect-scrollbar.ps-show-active.ps-show-limits>.ps.ps--active-x>.ps-overlay.ps-at-left .ps-indicator-left.ps-indicator-show,perfect-scrollbar.ps-show-active.ps-show-limits>.ps.ps--active-x>.ps-overlay.ps-at-right .ps-indicator-right.ps-indicator-show{opacity:1}\n", ".ps{overflow:hidden!important;overflow-anchor:none;-ms-overflow-style:none;touch-action:auto;-ms-touch-action:auto}.ps__rail-x{display:none;opacity:0;transition:background-color .2s linear,opacity .2s linear;-webkit-transition:background-color .2s linear,opacity .2s linear;height:15px;bottom:0;position:absolute}.ps__rail-y{display:none;opacity:0;transition:background-color .2s linear,opacity .2s linear;-webkit-transition:background-color .2s linear,opacity .2s linear;width:15px;right:0;position:absolute}.ps--active-x>.ps__rail-x,.ps--active-y>.ps__rail-y{display:block;background-color:transparent}.ps:hover>.ps__rail-x,.ps:hover>.ps__rail-y,.ps--focus>.ps__rail-x,.ps--focus>.ps__rail-y,.ps--scrolling-x>.ps__rail-x,.ps--scrolling-y>.ps__rail-y{opacity:.6}.ps .ps__rail-x:hover,.ps .ps__rail-y:hover,.ps .ps__rail-x:focus,.ps .ps__rail-y:focus,.ps .ps__rail-x.ps--clicking,.ps .ps__rail-y.ps--clicking{background-color:#eee;opacity:.9}.ps__thumb-x{background-color:#aaa;border-radius:6px;transition:background-color .2s linear,height .2s ease-in-out;-webkit-transition:background-color .2s linear,height .2s ease-in-out;height:6px;bottom:2px;position:absolute}.ps__thumb-y{background-color:#aaa;border-radius:6px;transition:background-color .2s linear,width .2s ease-in-out;-webkit-transition:background-color .2s linear,width .2s ease-in-out;width:6px;right:2px;position:absolute}.ps__rail-x:hover>.ps__thumb-x,.ps__rail-x:focus>.ps__thumb-x,.ps__rail-x.ps--clicking .ps__thumb-x{background-color:#999;height:11px}.ps__rail-y:hover>.ps__thumb-y,.ps__rail-y:focus>.ps__thumb-y,.ps__rail-y.ps--clicking .ps__thumb-y{background-color:#999;width:11px}@supports (-ms-overflow-style: none){.ps{overflow:auto!important}}@media screen and (-ms-high-contrast: active),(-ms-high-contrast: none){.ps{overflow:auto!important}}\n"] }]
|
549
|
+
}], ctorParameters: () => [{ type: i0.NgZone }, { type: i0.ChangeDetectorRef }, { type: Object, decorators: [{
|
550
|
+
type: Inject,
|
551
|
+
args: [PLATFORM_ID]
|
552
|
+
}] }], propDecorators: { disabled: [{
|
553
|
+
type: Input
|
554
|
+
}], usePSClass: [{
|
555
|
+
type: Input
|
556
|
+
}], autoPropagation: [{
|
557
|
+
type: HostBinding,
|
558
|
+
args: ['class.ps-show-limits']
|
559
|
+
}, {
|
560
|
+
type: Input
|
561
|
+
}], scrollIndicators: [{
|
562
|
+
type: HostBinding,
|
563
|
+
args: ['class.ps-show-active']
|
564
|
+
}, {
|
565
|
+
type: Input
|
566
|
+
}], config: [{
|
567
|
+
type: Input
|
568
|
+
}], psScrollY: [{
|
569
|
+
type: Output
|
570
|
+
}], psScrollX: [{
|
571
|
+
type: Output
|
572
|
+
}], psScrollUp: [{
|
573
|
+
type: Output
|
574
|
+
}], psScrollDown: [{
|
575
|
+
type: Output
|
576
|
+
}], psScrollLeft: [{
|
577
|
+
type: Output
|
578
|
+
}], psScrollRight: [{
|
579
|
+
type: Output
|
580
|
+
}], psYReachEnd: [{
|
581
|
+
type: Output
|
582
|
+
}], psYReachStart: [{
|
583
|
+
type: Output
|
584
|
+
}], psXReachEnd: [{
|
585
|
+
type: Output
|
586
|
+
}], psXReachStart: [{
|
587
|
+
type: Output
|
588
|
+
}], directiveRef: [{
|
589
|
+
type: ViewChild,
|
590
|
+
args: [PerfectScrollbarDirective, { static: true }]
|
591
|
+
}] } });
|
592
|
+
|
593
|
+
class ForceNativeScrollDirective {
|
594
|
+
renderer;
|
595
|
+
constructor(renderer, el) {
|
596
|
+
this.renderer = renderer;
|
597
|
+
['ps__child', 'ps__child--consume'].forEach((className) => {
|
598
|
+
this.renderer.addClass(el?.nativeElement, className);
|
599
|
+
});
|
600
|
+
}
|
601
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.1.5", ngImport: i0, type: ForceNativeScrollDirective, deps: [{ token: i0.Renderer2 }, { token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Directive });
|
602
|
+
static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "19.1.5", type: ForceNativeScrollDirective, isStandalone: true, selector: "[forceNativeScrolling]", ngImport: i0 });
|
603
|
+
}
|
604
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.1.5", ngImport: i0, type: ForceNativeScrollDirective, decorators: [{
|
605
|
+
type: Directive,
|
606
|
+
args: [{
|
607
|
+
selector: '[forceNativeScrolling]',
|
608
|
+
standalone: true,
|
609
|
+
}]
|
610
|
+
}], ctorParameters: () => [{ type: i0.Renderer2 }, { type: i0.ElementRef }] });
|
611
|
+
|
612
|
+
class PerfectScrollbarModule {
|
613
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.1.5", ngImport: i0, type: PerfectScrollbarModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
|
614
|
+
static ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "19.1.5", ngImport: i0, type: PerfectScrollbarModule, imports: [CommonModule,
|
615
|
+
PerfectScrollbarComponent,
|
616
|
+
PerfectScrollbarDirective,
|
617
|
+
ForceNativeScrollDirective], exports: [CommonModule,
|
618
|
+
PerfectScrollbarComponent,
|
619
|
+
PerfectScrollbarDirective,
|
620
|
+
ForceNativeScrollDirective] });
|
621
|
+
static ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "19.1.5", ngImport: i0, type: PerfectScrollbarModule, imports: [CommonModule,
|
622
|
+
PerfectScrollbarComponent, CommonModule] });
|
623
|
+
}
|
624
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.1.5", ngImport: i0, type: PerfectScrollbarModule, decorators: [{
|
625
|
+
type: NgModule,
|
626
|
+
args: [{
|
627
|
+
imports: [
|
628
|
+
CommonModule,
|
629
|
+
PerfectScrollbarComponent,
|
630
|
+
PerfectScrollbarDirective,
|
631
|
+
ForceNativeScrollDirective
|
632
|
+
],
|
633
|
+
exports: [
|
634
|
+
CommonModule,
|
635
|
+
PerfectScrollbarComponent,
|
636
|
+
PerfectScrollbarDirective,
|
637
|
+
ForceNativeScrollDirective
|
638
|
+
]
|
639
|
+
}]
|
640
|
+
}] });
|
641
|
+
|
642
|
+
/**
|
643
|
+
* Generated bundle index. Do not edit.
|
644
|
+
*/
|
645
|
+
|
646
|
+
export { ForceNativeScrollDirective, Geometry, PERFECT_SCROLLBAR_CONFIG, PerfectScrollbarComponent, PerfectScrollbarConfig, PerfectScrollbarDirective, PerfectScrollbarModule, Position };
|
647
|
+
//# sourceMappingURL=ahmedhfarag-ngx-perfect-scrollbar.mjs.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"ahmedhfarag-ngx-perfect-scrollbar.mjs","sources":["../../../projects/lib/src/lib/perfect-scrollbar.interfaces.ts","../../../projects/lib/src/lib/perfect-scrollbar.directive.ts","../../../projects/lib/src/lib/perfect-scrollbar.component.ts","../../../projects/lib/src/lib/perfect-scrollbar.component.html","../../../projects/lib/src/lib/perfect-scrollbar-force-native-scroll.directive.ts","../../../projects/lib/src/lib/perfect-scrollbar.module.ts","../../../projects/lib/src/ahmedhfarag-ngx-perfect-scrollbar.ts"],"sourcesContent":["import { InjectionToken } from '@angular/core';\n\nexport const PERFECT_SCROLLBAR_CONFIG = new InjectionToken('PERFECT_SCROLLBAR_CONFIG');\n\nexport class Geometry {\n public x: number;\n public y: number;\n\n public w: number;\n public h: number;\n\n constructor(x: number, y: number, w: number, h: number) {\n this.x = x;\n this.y = y;\n this.w = w;\n this.h = h;\n }\n}\n\nexport class Position {\n public x: number | 'start' | 'end';\n public y: number | 'start' | 'end';\n\n constructor(x: number | 'start' | 'end', y: number | 'start' | 'end') {\n this.x = x;\n this.y = y;\n }\n}\n\nexport type PerfectScrollbarEvent = 'psScrollY' | 'psScrollX' | 'psScrollUp'| 'psScrollDown' |\n 'psScrollLeft' | 'psScrollRight' | 'psYReachEnd' | 'psYReachStart' | 'psXReachEnd' | 'psXReachStart';\n\nexport const PerfectScrollbarEvents: PerfectScrollbarEvent[] = [\n 'psScrollY',\n 'psScrollX',\n\n 'psScrollUp',\n 'psScrollDown',\n 'psScrollLeft',\n 'psScrollRight',\n\n 'psYReachEnd',\n 'psYReachStart',\n 'psXReachEnd',\n 'psXReachStart'\n];\n\nexport interface PerfectScrollbarConfigInterface {\n handlers?: string[];\n\n wheelSpeed?: number;\n swipeEasing?: boolean;\n\n suppressScrollX?: boolean;\n suppressScrollY?: boolean;\n\n wheelPropagation?: boolean;\n useBothWheelAxes?: boolean;\n\n scrollingThreshold?: number;\n\n minScrollbarLength?: number;\n maxScrollbarLength?: number;\n\n scrollXMarginOffset?: number;\n scrollYMarginOffset?: number;\n}\n\nexport class PerfectScrollbarConfig implements PerfectScrollbarConfigInterface {\n public handlers?: string[];\n\n public wheelSpeed?: number;\n public swipeEasing?: boolean;\n\n public suppressScrollX?: boolean;\n public suppressScrollY?: boolean;\n\n public wheelPropagation?: boolean;\n public useBothWheelAxes?: boolean;\n\n public scrollingThreshold?: number;\n\n public minScrollbarLength?: number;\n public maxScrollbarLength?: number;\n\n public scrollXMarginOffset?: number;\n public scrollYMarginOffset?: number;\n\n constructor(config: PerfectScrollbarConfigInterface = {}) {\n this.assign(config);\n }\n\n public assign(config: PerfectScrollbarConfigInterface = {}) {\n for (const key in config) {\n this[key as keyof PerfectScrollbarConfig] = config[key as keyof PerfectScrollbarConfigInterface] as never;\n }\n }\n}\n","import PerfectScrollbar from 'perfect-scrollbar';\n\nimport ResizeObserver from 'resize-observer-polyfill';\n\nimport { Subject, fromEvent } from 'rxjs';\nimport { auditTime, takeUntil } from 'rxjs/operators';\n\nimport { PLATFORM_ID } from '@angular/core';\nimport { isPlatformBrowser } from '@angular/common';\nimport { NgZone, Inject, Optional, ElementRef, Directive,\n OnInit, DoCheck, OnChanges, OnDestroy, Input, Output, EventEmitter,\n SimpleChanges, KeyValueDiffer, KeyValueDiffers } from '@angular/core';\n\nimport { Geometry, Position } from './perfect-scrollbar.interfaces';\n\nimport { PERFECT_SCROLLBAR_CONFIG, PerfectScrollbarConfig, PerfectScrollbarConfigInterface,\n PerfectScrollbarEvent, PerfectScrollbarEvents } from './perfect-scrollbar.interfaces';\n\n@Directive({\n selector: '[perfectScrollbar]',\n exportAs: 'ngxPerfectScrollbar',\n standalone: true,\n})\nexport class PerfectScrollbarDirective implements OnInit, OnDestroy, DoCheck, OnChanges {\n private instance: PerfectScrollbar | null = null;\n\n private ro: ResizeObserver | null = null;\n\n private timeout: number | null = null;\n private animation: number | null = null;\n\n private configDiff: KeyValueDiffer<string, any> | null = null;\n\n private readonly ngDestroy: Subject<void> = new Subject();\n\n @Input() disabled: boolean = false;\n\n @Input('perfectScrollbar') config?: PerfectScrollbarConfigInterface;\n\n @Output() psScrollY: EventEmitter<any> = new EventEmitter<any>();\n @Output() psScrollX: EventEmitter<any> = new EventEmitter<any>();\n\n @Output() psScrollUp: EventEmitter<any> = new EventEmitter<any>();\n @Output() psScrollDown: EventEmitter<any> = new EventEmitter<any>();\n @Output() psScrollLeft: EventEmitter<any> = new EventEmitter<any>();\n @Output() psScrollRight: EventEmitter<any> = new EventEmitter<any>();\n\n @Output() psYReachEnd: EventEmitter<any> = new EventEmitter<any>();\n @Output() psYReachStart: EventEmitter<any> = new EventEmitter<any>();\n @Output() psXReachEnd: EventEmitter<any> = new EventEmitter<any>();\n @Output() psXReachStart: EventEmitter<any> = new EventEmitter<any>();\n\n constructor(private zone: NgZone, private differs: KeyValueDiffers,\n public elementRef: ElementRef, @Inject(PLATFORM_ID) private platformId: Object,\n @Optional() @Inject(PERFECT_SCROLLBAR_CONFIG) private defaults: PerfectScrollbarConfigInterface) {}\n\n ngOnInit(): void {\n if (!this.disabled && isPlatformBrowser(this.platformId)) {\n const config = new PerfectScrollbarConfig(this.defaults);\n\n config.assign(this.config); // Custom configuration\n\n this.zone.runOutsideAngular(() => {\n this.instance = new PerfectScrollbar(this.elementRef.nativeElement, config);\n });\n\n if (!this.configDiff) {\n this.configDiff = this.differs.find(this.config || {}).create();\n\n this.configDiff.diff(this.config || {});\n }\n\n this.zone.runOutsideAngular(() => {\n this.ro = new ResizeObserver(() => {\n this.update();\n });\n\n if (this.elementRef.nativeElement.children[0]) {\n this.ro.observe(this.elementRef.nativeElement.children[0]);\n }\n\n this.ro.observe(this.elementRef.nativeElement);\n });\n\n this.zone.runOutsideAngular(() => {\n PerfectScrollbarEvents.forEach((eventName: PerfectScrollbarEvent) => {\n const eventType = eventName.replace(/([A-Z])/g, (c) => `-${c.toLowerCase()}`);\n\n fromEvent<Event>(this.elementRef.nativeElement, eventType)\n .pipe(\n auditTime(20),\n takeUntil(this.ngDestroy)\n )\n .subscribe((event: Event) => {\n this[eventName].emit(event);\n });\n });\n });\n }\n }\n\n ngOnDestroy(): void {\n if (isPlatformBrowser(this.platformId)) {\n this.ngDestroy.next();\n this.ngDestroy.complete();\n\n if (this.ro) {\n this.ro.disconnect();\n }\n\n if (this.timeout && typeof window !== 'undefined') {\n window.clearTimeout(this.timeout);\n }\n\n this.zone.runOutsideAngular(() => {\n if (this.instance) {\n this.instance.destroy();\n }\n });\n\n this.instance = null;\n }\n }\n\n ngDoCheck(): void {\n if (!this.disabled && this.configDiff && isPlatformBrowser(this.platformId)) {\n const changes = this.configDiff.diff(this.config || {});\n\n if (changes) {\n this.ngOnDestroy();\n\n this.ngOnInit();\n }\n }\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n if (changes['disabled'] && !changes['disabled'].isFirstChange() && isPlatformBrowser(this.platformId)) {\n if (changes['disabled'].currentValue !== changes['disabled'].previousValue) {\n if (changes['disabled'].currentValue === true) {\n this.ngOnDestroy();\n } else if (changes['disabled'].currentValue === false) {\n this.ngOnInit();\n }\n }\n }\n }\n\n public ps(): PerfectScrollbar | null {\n return this.instance;\n }\n\n public update(): void {\n if (typeof window !== 'undefined') {\n if (this.timeout) {\n window.clearTimeout(this.timeout);\n }\n\n this.timeout = window.setTimeout(() => {\n if (!this.disabled && this.configDiff) {\n try {\n this.zone.runOutsideAngular(() => {\n if (this.instance) {\n this.instance.update();\n }\n });\n } catch (error) {\n // Update can be finished after destroy so catch errors\n }\n }\n }, 0);\n }\n }\n\n public geometry(prefix: string = 'scroll'): Geometry {\n return new Geometry(\n this.elementRef.nativeElement[prefix + 'Left'],\n this.elementRef.nativeElement[prefix + 'Top'],\n this.elementRef.nativeElement[prefix + 'Width'],\n this.elementRef.nativeElement[prefix + 'Height']\n );\n }\n\n public position(absolute: boolean = false): Position {\n if (!absolute && this.instance) {\n return new Position(\n this.instance.reach.x || 0,\n this.instance.reach.y || 0\n );\n } else {\n return new Position(\n this.elementRef.nativeElement.scrollLeft,\n this.elementRef.nativeElement.scrollTop\n );\n }\n }\n\n public scrollable(direction: string = 'any'): boolean {\n const element = this.elementRef.nativeElement;\n\n if (direction === 'any') {\n return element.classList.contains('ps--active-x') ||\n element.classList.contains('ps--active-y');\n } else if (direction === 'both') {\n return element.classList.contains('ps--active-x') &&\n element.classList.contains('ps--active-y');\n } else {\n return element.classList.contains('ps--active-' + direction);\n }\n }\n\n public scrollTo(x: number, y?: number, speed?: number): void {\n if (!this.disabled) {\n if (y == null && speed == null) {\n this.animateScrolling('scrollTop', x, speed);\n } else {\n if (x != null) {\n this.animateScrolling('scrollLeft', x, speed);\n }\n\n if (y != null) {\n this.animateScrolling('scrollTop', y, speed);\n }\n }\n }\n }\n\n public scrollToX(x: number, speed?: number): void {\n this.animateScrolling('scrollLeft', x, speed);\n }\n\n public scrollToY(y: number, speed?: number): void {\n this.animateScrolling('scrollTop', y, speed);\n }\n\n public scrollToTop(offset?: number, speed?: number): void {\n this.animateScrolling('scrollTop', (offset || 0), speed);\n }\n\n public scrollToLeft(offset?: number, speed?: number): void {\n this.animateScrolling('scrollLeft', (offset || 0), speed);\n }\n\n public scrollToRight(offset?: number, speed?: number): void {\n const left = this.elementRef.nativeElement.scrollWidth -\n this.elementRef.nativeElement.clientWidth;\n\n this.animateScrolling('scrollLeft', left - (offset || 0), speed);\n }\n\n public scrollToBottom(offset?: number, speed?: number): void {\n const top = this.elementRef.nativeElement.scrollHeight -\n this.elementRef.nativeElement.clientHeight;\n\n this.animateScrolling('scrollTop', top - (offset || 0), speed);\n }\n\n public scrollToElement(element: HTMLElement | string, offset?: number, speed?: number): void {\n if (typeof element === 'string') {\n element = this.elementRef.nativeElement.querySelector(element) as HTMLElement;\n }\n\n if (element) {\n const elementPos = element.getBoundingClientRect();\n\n const scrollerPos = this.elementRef.nativeElement.getBoundingClientRect();\n\n if (this.elementRef.nativeElement.classList.contains('ps--active-x')) {\n const currentPos = this.elementRef.nativeElement['scrollLeft'];\n\n const position = elementPos.left - scrollerPos.left + currentPos;\n\n this.animateScrolling('scrollLeft', position + (offset || 0), speed);\n }\n\n if (this.elementRef.nativeElement.classList.contains('ps--active-y')) {\n const currentPos = this.elementRef.nativeElement['scrollTop'];\n\n const position = elementPos.top - scrollerPos.top + currentPos;\n\n this.animateScrolling('scrollTop', position + (offset || 0), speed);\n }\n }\n }\n\n private animateScrolling(target: string, value: number, speed?: number): void {\n if (this.animation) {\n window.cancelAnimationFrame(this.animation);\n\n this.animation = null;\n }\n\n if (!speed || typeof window === 'undefined') {\n this.elementRef.nativeElement[target] = value;\n } else if (value !== this.elementRef.nativeElement[target]) {\n let newValue = 0;\n let scrollCount = 0;\n\n let oldTimestamp = performance.now();\n let oldValue = this.elementRef.nativeElement[target];\n\n const cosParameter = (oldValue - value) / 2;\n\n const step = (newTimestamp: number) => {\n scrollCount += Math.PI / (speed / (newTimestamp - oldTimestamp));\n\n newValue = Math.round(value + cosParameter + cosParameter * Math.cos(scrollCount));\n\n // Only continue animation if scroll position has not changed\n if (this.elementRef.nativeElement[target] === oldValue) {\n if (scrollCount >= Math.PI) {\n this.animateScrolling(target, value, 0);\n } else {\n this.elementRef.nativeElement[target] = newValue;\n\n // On a zoomed out page the resulting offset may differ\n oldValue = this.elementRef.nativeElement[target];\n\n oldTimestamp = newTimestamp;\n\n this.animation = window.requestAnimationFrame(step);\n }\n }\n };\n\n window.requestAnimationFrame(step);\n }\n }\n}\n","import { Subject, merge, fromEvent } from 'rxjs';\nimport { mapTo, takeUntil, distinctUntilChanged } from 'rxjs/operators';\n\nimport { PLATFORM_ID } from '@angular/core';\nimport { CommonModule, isPlatformBrowser } from '@angular/common';\nimport { NgZone, Inject, Component,\n OnInit, OnDestroy, DoCheck, Input, Output, EventEmitter, HostBinding,\n ViewChild, ViewEncapsulation, ChangeDetectorRef } from '@angular/core';\n\nimport { PerfectScrollbarDirective } from './perfect-scrollbar.directive';\n\nimport { PerfectScrollbarEvent, PerfectScrollbarEvents,\n PerfectScrollbarConfigInterface } from './perfect-scrollbar.interfaces';\n\n@Component({\n selector: 'perfect-scrollbar',\n exportAs: 'ngxPerfectScrollbar',\n imports: [CommonModule, PerfectScrollbarDirective],\n templateUrl: './perfect-scrollbar.component.html',\n standalone: true,\n styleUrls: [\n './perfect-scrollbar.component.css',\n '../../../../node_modules/perfect-scrollbar/css/perfect-scrollbar.css'\n ],\n encapsulation: ViewEncapsulation.None\n})\nexport class PerfectScrollbarComponent implements OnInit, OnDestroy, DoCheck {\n public states: any = {};\n\n public indicatorX: boolean = false;\n public indicatorY: boolean = false;\n\n public interaction: boolean = false;\n\n private scrollPositionX: number = 0;\n private scrollPositionY: number = 0;\n\n private scrollDirectionX: number = 0;\n private scrollDirectionY: number = 0;\n\n private usePropagationX: boolean = false;\n private usePropagationY: boolean = false;\n\n private allowPropagationX: boolean = false;\n private allowPropagationY: boolean = false;\n\n private stateTimeout: number | null = null;\n\n private readonly ngDestroy: Subject<void> = new Subject();\n\n private readonly stateUpdate: Subject<string> = new Subject();\n\n @Input() disabled: boolean = false;\n\n @Input() usePSClass: boolean = true;\n\n @HostBinding('class.ps-show-limits')\n @Input() autoPropagation: boolean = false;\n\n @HostBinding('class.ps-show-active')\n @Input() scrollIndicators: boolean = false;\n\n @Input() config?: PerfectScrollbarConfigInterface;\n\n @Output() psScrollY: EventEmitter<any> = new EventEmitter<any>();\n @Output() psScrollX: EventEmitter<any> = new EventEmitter<any>();\n\n @Output() psScrollUp: EventEmitter<any> = new EventEmitter<any>();\n @Output() psScrollDown: EventEmitter<any> = new EventEmitter<any>();\n @Output() psScrollLeft: EventEmitter<any> = new EventEmitter<any>();\n @Output() psScrollRight: EventEmitter<any> = new EventEmitter<any>();\n\n @Output() psYReachEnd: EventEmitter<any> = new EventEmitter<any>();\n @Output() psYReachStart: EventEmitter<any> = new EventEmitter<any>();\n @Output() psXReachEnd: EventEmitter<any> = new EventEmitter<any>();\n @Output() psXReachStart: EventEmitter<any> = new EventEmitter<any>();\n\n @ViewChild(PerfectScrollbarDirective, { static: true }) directiveRef?: PerfectScrollbarDirective;\n\n constructor(private zone: NgZone, private cdRef: ChangeDetectorRef,\n @Inject(PLATFORM_ID) private platformId: Object) {}\n\n ngOnInit(): void {\n if (isPlatformBrowser(this.platformId)) {\n this.stateUpdate\n .pipe(\n takeUntil(this.ngDestroy),\n distinctUntilChanged((a, b) => (a === b && !this.stateTimeout))\n )\n .subscribe((state: string) => {\n if (this.stateTimeout && typeof window !== 'undefined') {\n window.clearTimeout(this.stateTimeout);\n\n this.stateTimeout = null;\n }\n\n if (state === 'x' || state === 'y') {\n this.interaction = false;\n\n if (state === 'x') {\n this.indicatorX = false;\n\n this.states.left = false;\n this.states.right = false;\n\n if (this.autoPropagation && this.usePropagationX) {\n this.allowPropagationX = false;\n }\n } else if (state === 'y') {\n this.indicatorY = false;\n\n this.states.top = false;\n this.states.bottom = false;\n\n if (this.autoPropagation && this.usePropagationY) {\n this.allowPropagationY = false;\n }\n }\n } else {\n if (state === 'left' || state === 'right') {\n this.states.left = false;\n this.states.right = false;\n\n this.states[state] = true;\n\n if (this.autoPropagation && this.usePropagationX) {\n this.indicatorX = true;\n }\n } else if (state === 'top' || state === 'bottom') {\n this.states.top = false;\n this.states.bottom = false;\n\n this.states[state] = true;\n\n if (this.autoPropagation && this.usePropagationY) {\n this.indicatorY = true;\n }\n }\n\n if (this.autoPropagation && typeof window !== 'undefined') {\n this.stateTimeout = window.setTimeout(() => {\n this.indicatorX = false;\n this.indicatorY = false;\n\n this.stateTimeout = null;\n\n if (this.interaction && (this.states.left || this.states.right)) {\n this.allowPropagationX = true;\n }\n\n if (this.interaction && (this.states.top || this.states.bottom)) {\n this.allowPropagationY = true;\n }\n\n this.cdRef.markForCheck();\n }, 500);\n }\n }\n\n this.cdRef.markForCheck();\n this.cdRef.detectChanges();\n });\n\n this.zone.runOutsideAngular(() => {\n if (this.directiveRef) {\n const element = this.directiveRef.elementRef.nativeElement;\n\n fromEvent<WheelEvent>(element, 'wheel')\n .pipe(\n takeUntil(this.ngDestroy)\n )\n .subscribe((event: WheelEvent) => {\n if (!this.disabled && this.autoPropagation) {\n const scrollDeltaX = event.deltaX;\n const scrollDeltaY = event.deltaY;\n\n this.checkPropagation(event, scrollDeltaX, scrollDeltaY);\n }\n });\n\n fromEvent<TouchEvent>(element, 'touchmove')\n .pipe(\n takeUntil(this.ngDestroy)\n )\n .subscribe((event: TouchEvent) => {\n if (!this.disabled && this.autoPropagation) {\n const scrollPositionX = event.touches[0].clientX;\n const scrollPositionY = event.touches[0].clientY;\n\n const scrollDeltaX = scrollPositionX - this.scrollPositionX;\n const scrollDeltaY = scrollPositionY - this.scrollPositionY;\n\n this.checkPropagation(event, scrollDeltaX, scrollDeltaY);\n\n this.scrollPositionX = scrollPositionX;\n this.scrollPositionY = scrollPositionY;\n }\n });\n\n merge(\n fromEvent(element, 'ps-scroll-x')\n .pipe(mapTo('x')),\n fromEvent(element, 'ps-scroll-y')\n .pipe(mapTo('y')),\n fromEvent(element, 'ps-x-reach-end')\n .pipe(mapTo('right')),\n fromEvent(element, 'ps-y-reach-end')\n .pipe(mapTo('bottom')),\n fromEvent(element, 'ps-x-reach-start')\n .pipe(mapTo('left')),\n fromEvent(element, 'ps-y-reach-start')\n .pipe(mapTo('top')),\n )\n .pipe(\n takeUntil(this.ngDestroy)\n )\n .subscribe((state: string) => {\n if (!this.disabled && (this.autoPropagation || this.scrollIndicators)) {\n this.stateUpdate.next(state);\n }\n });\n }\n });\n\n window.setTimeout(() => {\n PerfectScrollbarEvents.forEach((eventName: PerfectScrollbarEvent) => {\n if (this.directiveRef) {\n this.directiveRef[eventName] = this[eventName];\n }\n });\n }, 0);\n }\n }\n\n ngOnDestroy(): void {\n if (isPlatformBrowser(this.platformId)) {\n this.ngDestroy.next();\n this.ngDestroy.unsubscribe();\n\n if (this.stateTimeout && typeof window !== 'undefined') {\n window.clearTimeout(this.stateTimeout);\n }\n }\n }\n\n ngDoCheck(): void {\n if (isPlatformBrowser(this.platformId)) {\n if (!this.disabled && this.autoPropagation && this.directiveRef) {\n const element = this.directiveRef.elementRef.nativeElement;\n\n this.usePropagationX = element.classList.contains('ps--active-x');\n\n this.usePropagationY = element.classList.contains('ps--active-y');\n }\n }\n }\n\n private checkPropagation(event: any, deltaX: number, deltaY: number): void {\n this.interaction = true;\n\n const scrollDirectionX = (deltaX < 0) ? -1 : 1;\n const scrollDirectionY = (deltaY < 0) ? -1 : 1;\n\n if ((this.usePropagationX && this.usePropagationY) ||\n (this.usePropagationX && (!this.allowPropagationX ||\n (this.scrollDirectionX !== scrollDirectionX))) ||\n (this.usePropagationY && (!this.allowPropagationY ||\n (this.scrollDirectionY !== scrollDirectionY))))\n {\n event.preventDefault();\n event.stopPropagation();\n }\n\n if (!!deltaX) {\n this.scrollDirectionX = scrollDirectionX;\n }\n\n if (!!deltaY) {\n this.scrollDirectionY = scrollDirectionY;\n }\n\n this.stateUpdate.next('interaction');\n\n this.cdRef.detectChanges();\n }\n}\n","<div style=\"position: static;\" [class.ps]=\"usePSClass\" [perfectScrollbar]=\"config\" [disabled]=\"disabled\">\n <div class=\"ps-content\">\n <ng-content></ng-content>\n </div>\n\n <div *ngIf=\"scrollIndicators\" class=\"ps-overlay\" [class.ps-at-top]=\"states.top\" [class.ps-at-left]=\"states.left\" [class.ps-at-right]=\"states.right\" [class.ps-at-bottom]=\"states.bottom\">\n <div class=\"ps-indicator-top\" [class.ps-indicator-show]=\"indicatorY && interaction\"></div>\n <div class=\"ps-indicator-left\" [class.ps-indicator-show]=\"indicatorX && interaction\"></div>\n <div class=\"ps-indicator-right\" [class.ps-indicator-show]=\"indicatorX && interaction\"></div>\n <div class=\"ps-indicator-bottom\" [class.ps-indicator-show]=\"indicatorY && interaction\"></div>\n </div>\n</div>\n","import { Directive, ElementRef, Renderer2 } from '@angular/core';\n\n@Directive({\n selector: '[forceNativeScrolling]',\n standalone: true,\n})\nexport class ForceNativeScrollDirective {\n\n constructor(private renderer: Renderer2, el: ElementRef) {\n ['ps__child', 'ps__child--consume'].forEach((className) => {\n this.renderer.addClass(el?.nativeElement, className);\n });\n }\n}\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\n\nimport { PerfectScrollbarComponent } from './perfect-scrollbar.component';\nimport { PerfectScrollbarDirective } from './perfect-scrollbar.directive';\nimport { ForceNativeScrollDirective } from './perfect-scrollbar-force-native-scroll.directive';\n\n@NgModule({\n imports: [\n CommonModule,\n PerfectScrollbarComponent,\n PerfectScrollbarDirective,\n ForceNativeScrollDirective\n ],\n exports: [\n CommonModule,\n PerfectScrollbarComponent,\n PerfectScrollbarDirective,\n ForceNativeScrollDirective\n ]\n })\nexport class PerfectScrollbarModule {\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
|
package/index.d.ts
ADDED
@@ -0,0 +1,8 @@
|
|
1
|
+
import { ElementRef, Renderer2 } from '@angular/core';
|
2
|
+
import * as i0 from "@angular/core";
|
3
|
+
export declare class ForceNativeScrollDirective {
|
4
|
+
private renderer;
|
5
|
+
constructor(renderer: Renderer2, el: ElementRef);
|
6
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<ForceNativeScrollDirective, never>;
|
7
|
+
static ɵdir: i0.ɵɵDirectiveDeclaration<ForceNativeScrollDirective, "[forceNativeScrolling]", never, {}, {}, never, never, true, never>;
|
8
|
+
}
|
@@ -0,0 +1,47 @@
|
|
1
|
+
import { NgZone, OnInit, OnDestroy, DoCheck, EventEmitter, ChangeDetectorRef } from '@angular/core';
|
2
|
+
import { PerfectScrollbarDirective } from './perfect-scrollbar.directive';
|
3
|
+
import { PerfectScrollbarConfigInterface } from './perfect-scrollbar.interfaces';
|
4
|
+
import * as i0 from "@angular/core";
|
5
|
+
export declare class PerfectScrollbarComponent implements OnInit, OnDestroy, DoCheck {
|
6
|
+
private zone;
|
7
|
+
private cdRef;
|
8
|
+
private platformId;
|
9
|
+
states: any;
|
10
|
+
indicatorX: boolean;
|
11
|
+
indicatorY: boolean;
|
12
|
+
interaction: boolean;
|
13
|
+
private scrollPositionX;
|
14
|
+
private scrollPositionY;
|
15
|
+
private scrollDirectionX;
|
16
|
+
private scrollDirectionY;
|
17
|
+
private usePropagationX;
|
18
|
+
private usePropagationY;
|
19
|
+
private allowPropagationX;
|
20
|
+
private allowPropagationY;
|
21
|
+
private stateTimeout;
|
22
|
+
private readonly ngDestroy;
|
23
|
+
private readonly stateUpdate;
|
24
|
+
disabled: boolean;
|
25
|
+
usePSClass: boolean;
|
26
|
+
autoPropagation: boolean;
|
27
|
+
scrollIndicators: boolean;
|
28
|
+
config?: PerfectScrollbarConfigInterface;
|
29
|
+
psScrollY: EventEmitter<any>;
|
30
|
+
psScrollX: EventEmitter<any>;
|
31
|
+
psScrollUp: EventEmitter<any>;
|
32
|
+
psScrollDown: EventEmitter<any>;
|
33
|
+
psScrollLeft: EventEmitter<any>;
|
34
|
+
psScrollRight: EventEmitter<any>;
|
35
|
+
psYReachEnd: EventEmitter<any>;
|
36
|
+
psYReachStart: EventEmitter<any>;
|
37
|
+
psXReachEnd: EventEmitter<any>;
|
38
|
+
psXReachStart: EventEmitter<any>;
|
39
|
+
directiveRef?: PerfectScrollbarDirective;
|
40
|
+
constructor(zone: NgZone, cdRef: ChangeDetectorRef, platformId: Object);
|
41
|
+
ngOnInit(): void;
|
42
|
+
ngOnDestroy(): void;
|
43
|
+
ngDoCheck(): void;
|
44
|
+
private checkPropagation;
|
45
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<PerfectScrollbarComponent, never>;
|
46
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<PerfectScrollbarComponent, "perfect-scrollbar", ["ngxPerfectScrollbar"], { "disabled": { "alias": "disabled"; "required": false; }; "usePSClass": { "alias": "usePSClass"; "required": false; }; "autoPropagation": { "alias": "autoPropagation"; "required": false; }; "scrollIndicators": { "alias": "scrollIndicators"; "required": false; }; "config": { "alias": "config"; "required": false; }; }, { "psScrollY": "psScrollY"; "psScrollX": "psScrollX"; "psScrollUp": "psScrollUp"; "psScrollDown": "psScrollDown"; "psScrollLeft": "psScrollLeft"; "psScrollRight": "psScrollRight"; "psYReachEnd": "psYReachEnd"; "psYReachStart": "psYReachStart"; "psXReachEnd": "psXReachEnd"; "psXReachStart": "psXReachStart"; }, never, ["*"], true, never>;
|
47
|
+
}
|
@@ -0,0 +1,51 @@
|
|
1
|
+
import PerfectScrollbar from 'perfect-scrollbar';
|
2
|
+
import { NgZone, ElementRef, OnInit, DoCheck, OnChanges, OnDestroy, EventEmitter, SimpleChanges, KeyValueDiffers } from '@angular/core';
|
3
|
+
import { Geometry, Position } from './perfect-scrollbar.interfaces';
|
4
|
+
import { PerfectScrollbarConfigInterface } from './perfect-scrollbar.interfaces';
|
5
|
+
import * as i0 from "@angular/core";
|
6
|
+
export declare class PerfectScrollbarDirective implements OnInit, OnDestroy, DoCheck, OnChanges {
|
7
|
+
private zone;
|
8
|
+
private differs;
|
9
|
+
elementRef: ElementRef;
|
10
|
+
private platformId;
|
11
|
+
private defaults;
|
12
|
+
private instance;
|
13
|
+
private ro;
|
14
|
+
private timeout;
|
15
|
+
private animation;
|
16
|
+
private configDiff;
|
17
|
+
private readonly ngDestroy;
|
18
|
+
disabled: boolean;
|
19
|
+
config?: PerfectScrollbarConfigInterface;
|
20
|
+
psScrollY: EventEmitter<any>;
|
21
|
+
psScrollX: EventEmitter<any>;
|
22
|
+
psScrollUp: EventEmitter<any>;
|
23
|
+
psScrollDown: EventEmitter<any>;
|
24
|
+
psScrollLeft: EventEmitter<any>;
|
25
|
+
psScrollRight: EventEmitter<any>;
|
26
|
+
psYReachEnd: EventEmitter<any>;
|
27
|
+
psYReachStart: EventEmitter<any>;
|
28
|
+
psXReachEnd: EventEmitter<any>;
|
29
|
+
psXReachStart: EventEmitter<any>;
|
30
|
+
constructor(zone: NgZone, differs: KeyValueDiffers, elementRef: ElementRef, platformId: Object, defaults: PerfectScrollbarConfigInterface);
|
31
|
+
ngOnInit(): void;
|
32
|
+
ngOnDestroy(): void;
|
33
|
+
ngDoCheck(): void;
|
34
|
+
ngOnChanges(changes: SimpleChanges): void;
|
35
|
+
ps(): PerfectScrollbar | null;
|
36
|
+
update(): void;
|
37
|
+
geometry(prefix?: string): Geometry;
|
38
|
+
position(absolute?: boolean): Position;
|
39
|
+
scrollable(direction?: string): boolean;
|
40
|
+
scrollTo(x: number, y?: number, speed?: number): void;
|
41
|
+
scrollToX(x: number, speed?: number): void;
|
42
|
+
scrollToY(y: number, speed?: number): void;
|
43
|
+
scrollToTop(offset?: number, speed?: number): void;
|
44
|
+
scrollToLeft(offset?: number, speed?: number): void;
|
45
|
+
scrollToRight(offset?: number, speed?: number): void;
|
46
|
+
scrollToBottom(offset?: number, speed?: number): void;
|
47
|
+
scrollToElement(element: HTMLElement | string, offset?: number, speed?: number): void;
|
48
|
+
private animateScrolling;
|
49
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<PerfectScrollbarDirective, [null, null, null, null, { optional: true; }]>;
|
50
|
+
static ɵdir: i0.ɵɵDirectiveDeclaration<PerfectScrollbarDirective, "[perfectScrollbar]", ["ngxPerfectScrollbar"], { "disabled": { "alias": "disabled"; "required": false; }; "config": { "alias": "perfectScrollbar"; "required": false; }; }, { "psScrollY": "psScrollY"; "psScrollX": "psScrollX"; "psScrollUp": "psScrollUp"; "psScrollDown": "psScrollDown"; "psScrollLeft": "psScrollLeft"; "psScrollRight": "psScrollRight"; "psYReachEnd": "psYReachEnd"; "psYReachStart": "psYReachStart"; "psXReachEnd": "psXReachEnd"; "psXReachStart": "psXReachStart"; }, never, never, true, never>;
|
51
|
+
}
|
@@ -0,0 +1,46 @@
|
|
1
|
+
import { InjectionToken } from '@angular/core';
|
2
|
+
export declare const PERFECT_SCROLLBAR_CONFIG: InjectionToken<unknown>;
|
3
|
+
export declare class Geometry {
|
4
|
+
x: number;
|
5
|
+
y: number;
|
6
|
+
w: number;
|
7
|
+
h: number;
|
8
|
+
constructor(x: number, y: number, w: number, h: number);
|
9
|
+
}
|
10
|
+
export declare class Position {
|
11
|
+
x: number | 'start' | 'end';
|
12
|
+
y: number | 'start' | 'end';
|
13
|
+
constructor(x: number | 'start' | 'end', y: number | 'start' | 'end');
|
14
|
+
}
|
15
|
+
export type PerfectScrollbarEvent = 'psScrollY' | 'psScrollX' | 'psScrollUp' | 'psScrollDown' | 'psScrollLeft' | 'psScrollRight' | 'psYReachEnd' | 'psYReachStart' | 'psXReachEnd' | 'psXReachStart';
|
16
|
+
export declare const PerfectScrollbarEvents: PerfectScrollbarEvent[];
|
17
|
+
export interface PerfectScrollbarConfigInterface {
|
18
|
+
handlers?: string[];
|
19
|
+
wheelSpeed?: number;
|
20
|
+
swipeEasing?: boolean;
|
21
|
+
suppressScrollX?: boolean;
|
22
|
+
suppressScrollY?: boolean;
|
23
|
+
wheelPropagation?: boolean;
|
24
|
+
useBothWheelAxes?: boolean;
|
25
|
+
scrollingThreshold?: number;
|
26
|
+
minScrollbarLength?: number;
|
27
|
+
maxScrollbarLength?: number;
|
28
|
+
scrollXMarginOffset?: number;
|
29
|
+
scrollYMarginOffset?: number;
|
30
|
+
}
|
31
|
+
export declare class PerfectScrollbarConfig implements PerfectScrollbarConfigInterface {
|
32
|
+
handlers?: string[];
|
33
|
+
wheelSpeed?: number;
|
34
|
+
swipeEasing?: boolean;
|
35
|
+
suppressScrollX?: boolean;
|
36
|
+
suppressScrollY?: boolean;
|
37
|
+
wheelPropagation?: boolean;
|
38
|
+
useBothWheelAxes?: boolean;
|
39
|
+
scrollingThreshold?: number;
|
40
|
+
minScrollbarLength?: number;
|
41
|
+
maxScrollbarLength?: number;
|
42
|
+
scrollXMarginOffset?: number;
|
43
|
+
scrollYMarginOffset?: number;
|
44
|
+
constructor(config?: PerfectScrollbarConfigInterface);
|
45
|
+
assign(config?: PerfectScrollbarConfigInterface): void;
|
46
|
+
}
|
@@ -0,0 +1,10 @@
|
|
1
|
+
import * as i0 from "@angular/core";
|
2
|
+
import * as i1 from "@angular/common";
|
3
|
+
import * as i2 from "./perfect-scrollbar.component";
|
4
|
+
import * as i3 from "./perfect-scrollbar.directive";
|
5
|
+
import * as i4 from "./perfect-scrollbar-force-native-scroll.directive";
|
6
|
+
export declare class PerfectScrollbarModule {
|
7
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<PerfectScrollbarModule, never>;
|
8
|
+
static ɵmod: i0.ɵɵNgModuleDeclaration<PerfectScrollbarModule, never, [typeof i1.CommonModule, typeof i2.PerfectScrollbarComponent, typeof i3.PerfectScrollbarDirective, typeof i4.ForceNativeScrollDirective], [typeof i1.CommonModule, typeof i2.PerfectScrollbarComponent, typeof i3.PerfectScrollbarDirective, typeof i4.ForceNativeScrollDirective]>;
|
9
|
+
static ɵinj: i0.ɵɵInjectorDeclaration<PerfectScrollbarModule>;
|
10
|
+
}
|
package/package.json
ADDED
@@ -0,0 +1,32 @@
|
|
1
|
+
{
|
2
|
+
"name": "@ahmedhfarag/ngx-perfect-scrollbar",
|
3
|
+
"version": "19.0.0",
|
4
|
+
"description": "Angular wrapper library for Perfect Scrollbar",
|
5
|
+
"bugs": "https://github.com/zefoy/ngx-perfect-scrollbar/issues",
|
6
|
+
"license": "MIT",
|
7
|
+
"repository": {
|
8
|
+
"type": "git",
|
9
|
+
"url": "https://github.com/zefoy/ngx-perfect-scrollbar.git"
|
10
|
+
},
|
11
|
+
"dependencies": {
|
12
|
+
"perfect-scrollbar": "1.5.0",
|
13
|
+
"resize-observer-polyfill": "^1.5.0",
|
14
|
+
"tslib": "^2.3.0"
|
15
|
+
},
|
16
|
+
"peerDependencies": {
|
17
|
+
"@angular/common": ">=9.0.0",
|
18
|
+
"@angular/core": ">=9.0.0"
|
19
|
+
},
|
20
|
+
"module": "fesm2022/ahmedhfarag-ngx-perfect-scrollbar.mjs",
|
21
|
+
"typings": "index.d.ts",
|
22
|
+
"exports": {
|
23
|
+
"./package.json": {
|
24
|
+
"default": "./package.json"
|
25
|
+
},
|
26
|
+
".": {
|
27
|
+
"types": "./index.d.ts",
|
28
|
+
"default": "./fesm2022/ahmedhfarag-ngx-perfect-scrollbar.mjs"
|
29
|
+
}
|
30
|
+
},
|
31
|
+
"sideEffects": false
|
32
|
+
}
|
package/public-api.d.ts
ADDED
@@ -0,0 +1,5 @@
|
|
1
|
+
export { PerfectScrollbarComponent } from './lib/perfect-scrollbar.component';
|
2
|
+
export { PerfectScrollbarDirective } from './lib/perfect-scrollbar.directive';
|
3
|
+
export { Geometry, Position, PERFECT_SCROLLBAR_CONFIG, PerfectScrollbarConfig, PerfectScrollbarConfigInterface } from './lib/perfect-scrollbar.interfaces';
|
4
|
+
export { PerfectScrollbarModule } from './lib/perfect-scrollbar.module';
|
5
|
+
export * from './lib/perfect-scrollbar-force-native-scroll.directive';
|