@taiga-ui/core 2.87.0 → 2.89.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.
Files changed (29) hide show
  1. package/bundles/taiga-ui-core-components-scroll-controls.umd.js +41 -64
  2. package/bundles/taiga-ui-core-components-scroll-controls.umd.js.map +1 -1
  3. package/bundles/taiga-ui-core-components-scroll-controls.umd.min.js +1 -1
  4. package/bundles/taiga-ui-core-components-scroll-controls.umd.min.js.map +1 -1
  5. package/bundles/taiga-ui-core-tokens.umd.js +10 -5
  6. package/bundles/taiga-ui-core-tokens.umd.js.map +1 -1
  7. package/bundles/taiga-ui-core-tokens.umd.min.js +1 -1
  8. package/bundles/taiga-ui-core-tokens.umd.min.js.map +1 -1
  9. package/components/scroll-controls/scroll-controls.component.d.ts +1 -2
  10. package/components/scroll-controls/scrollbar.directive.d.ts +4 -7
  11. package/components/scroll-controls/taiga-ui-core-components-scroll-controls.metadata.json +1 -1
  12. package/constants/version.d.ts +1 -1
  13. package/esm2015/components/scroll-controls/scroll-controls.component.js +8 -15
  14. package/esm2015/components/scroll-controls/scrollbar.directive.js +31 -48
  15. package/esm2015/tokens/scroll-ref.js +9 -3
  16. package/esm5/components/scroll-controls/scroll-controls.component.js +8 -15
  17. package/esm5/components/scroll-controls/scrollbar.directive.js +31 -48
  18. package/esm5/tokens/scroll-ref.js +9 -3
  19. package/fesm2015/taiga-ui-core-components-scroll-controls.js +36 -59
  20. package/fesm2015/taiga-ui-core-components-scroll-controls.js.map +1 -1
  21. package/fesm2015/taiga-ui-core-tokens.js +8 -2
  22. package/fesm2015/taiga-ui-core-tokens.js.map +1 -1
  23. package/fesm5/taiga-ui-core-components-scroll-controls.js +36 -59
  24. package/fesm5/taiga-ui-core-components-scroll-controls.js.map +1 -1
  25. package/fesm5/taiga-ui-core-tokens.js +8 -2
  26. package/fesm5/taiga-ui-core-tokens.js.map +1 -1
  27. package/package.json +4 -4
  28. package/tokens/scroll-ref.d.ts +3 -0
  29. package/tokens/taiga-ui-core-tokens.metadata.json +1 -1
@@ -1,20 +1,19 @@
1
1
  import { __decorate, __param } from 'tslib';
2
- import { DOCUMENT, ViewportScroller, CommonModule } from '@angular/common';
3
- import { Inject, NgZone, ElementRef, Optional, Component, ChangeDetectionStrategy, Renderer2, Input, Directive, NgModule } from '@angular/core';
4
- import { ANIMATION_FRAME, WINDOW } from '@ng-web-apis/common';
5
- import { tuiZoneOptimized, typedFromEvent, preventDefault, stopPropagation, tuiZonefree, POLLING_TIME, TuiDestroyService, TuiLetModule } from '@taiga-ui/cdk';
2
+ import { Inject, NgZone, ElementRef, Component, ChangeDetectionStrategy, Renderer2, Self, Input, Directive, NgModule } from '@angular/core';
3
+ import { ANIMATION_FRAME } from '@ng-web-apis/common';
4
+ import { tuiZoneOptimized, tuiTypedFromEvent, tuiPreventDefault, tuiStopPropagation, tuiZonefree, POLLING_TIME, tuiScrollFrom, TuiDestroyService, TuiLetModule } from '@taiga-ui/cdk';
6
5
  import { tuiFadeIn } from '@taiga-ui/core/animations';
7
6
  import { MODE_PROVIDER } from '@taiga-ui/core/providers';
8
7
  import { TUI_ANIMATION_OPTIONS, TUI_SCROLL_REF, TUI_MODE, TUI_ELEMENT_REF } from '@taiga-ui/core/tokens';
9
- import { Observable, merge, fromEvent } from 'rxjs';
8
+ import { Observable, merge } from 'rxjs';
10
9
  import { throttleTime, map, startWith, distinctUntilChanged, switchMap, takeUntil } from 'rxjs/operators';
10
+ import { DOCUMENT, CommonModule } from '@angular/common';
11
11
 
12
12
  // @dynamic
13
13
  let TuiScrollControlsComponent = class TuiScrollControlsComponent {
14
- constructor(options, ngZone, documentRef, scrollRef, animationFrame$, mode$) {
14
+ constructor(options, ngZone, scrollRef, animationFrame$, mode$) {
15
15
  this.options = options;
16
16
  this.ngZone = ngZone;
17
- this.documentRef = documentRef;
18
17
  this.scrollRef = scrollRef;
19
18
  this.animationFrame$ = animationFrame$;
20
19
  this.mode$ = mode$;
@@ -22,9 +21,7 @@ let TuiScrollControlsComponent = class TuiScrollControlsComponent {
22
21
  this.animation = Object.assign({ value: '' }, this.options);
23
22
  }
24
23
  get scrollbars() {
25
- const { clientHeight, scrollHeight, clientWidth, scrollWidth } = this.scrollRef
26
- ? this.scrollRef.nativeElement
27
- : this.documentRef.documentElement;
24
+ const { clientHeight, scrollHeight, clientWidth, scrollWidth } = this.scrollRef.nativeElement;
28
25
  return [
29
26
  Math.ceil((clientHeight / scrollHeight) * 100) < 100,
30
27
  Math.ceil((clientWidth / scrollWidth) * 100) < 100,
@@ -34,8 +31,7 @@ let TuiScrollControlsComponent = class TuiScrollControlsComponent {
34
31
  TuiScrollControlsComponent.ctorParameters = () => [
35
32
  { type: undefined, decorators: [{ type: Inject, args: [TUI_ANIMATION_OPTIONS,] }] },
36
33
  { type: NgZone, decorators: [{ type: Inject, args: [NgZone,] }] },
37
- { type: Document, decorators: [{ type: Inject, args: [DOCUMENT,] }] },
38
- { type: ElementRef, decorators: [{ type: Optional }, { type: Inject, args: [TUI_SCROLL_REF,] }] },
34
+ { type: ElementRef, decorators: [{ type: Inject, args: [TUI_SCROLL_REF,] }] },
39
35
  { type: Observable, decorators: [{ type: Inject, args: [ANIMATION_FRAME,] }] },
40
36
  { type: Observable, decorators: [{ type: Inject, args: [TUI_MODE,] }] }
41
37
  ];
@@ -53,30 +49,26 @@ TuiScrollControlsComponent = __decorate([
53
49
  }),
54
50
  __param(0, Inject(TUI_ANIMATION_OPTIONS)),
55
51
  __param(1, Inject(NgZone)),
56
- __param(2, Inject(DOCUMENT)),
57
- __param(3, Optional()),
58
- __param(3, Inject(TUI_SCROLL_REF)),
59
- __param(4, Inject(ANIMATION_FRAME)),
60
- __param(5, Inject(TUI_MODE))
52
+ __param(2, Inject(TUI_SCROLL_REF)),
53
+ __param(3, Inject(ANIMATION_FRAME)),
54
+ __param(4, Inject(TUI_MODE))
61
55
  ], TuiScrollControlsComponent);
62
56
 
63
57
  const MIN_WIDTH = 24;
64
58
  // @dynamic
65
59
  let TuiScrollbarDirective = class TuiScrollbarDirective {
66
- constructor(ngZone, renderer, destroy$, animationFrame$, wrapper, container, documentRef, windowRef, elementRef, viewportScroller) {
60
+ constructor(ngZone, renderer, destroy$, animationFrame$, wrapper, container, doc, el) {
67
61
  this.wrapper = wrapper;
68
62
  this.container = container;
69
- this.documentRef = documentRef;
70
- this.windowRef = windowRef;
71
- this.elementRef = elementRef;
72
- this.viewportScroller = viewportScroller;
63
+ this.doc = doc;
64
+ this.el = el;
73
65
  this.tuiScrollbar = 'vertical';
74
- const { nativeElement } = this.elementRef;
75
- const mousedown$ = typedFromEvent(nativeElement, 'mousedown');
76
- const mousemove$ = typedFromEvent(this.documentRef, 'mousemove');
77
- const mouseup$ = typedFromEvent(this.documentRef, 'mouseup');
78
- const mousedownWrapper$ = typedFromEvent(wrapper.nativeElement, 'mousedown');
79
- merge(mousedownWrapper$.pipe(preventDefault(), map(event => this.getScrolled(event, 0.5, 0.5))), mousedown$.pipe(preventDefault(), stopPropagation(), switchMap(event => {
66
+ const { nativeElement } = this.el;
67
+ const mousedown$ = tuiTypedFromEvent(nativeElement, 'mousedown');
68
+ const mousemove$ = tuiTypedFromEvent(this.doc, 'mousemove');
69
+ const mouseup$ = tuiTypedFromEvent(this.doc, 'mouseup');
70
+ const mousedownWrapper$ = tuiTypedFromEvent(this.wrapper.nativeElement, 'mousedown');
71
+ merge(mousedownWrapper$.pipe(tuiPreventDefault(), map(event => this.getScrolled(event, 0.5, 0.5))), mousedown$.pipe(tuiPreventDefault(), tuiStopPropagation(), switchMap(event => {
80
72
  const rect = nativeElement.getBoundingClientRect();
81
73
  const vertical = getOffsetVertical(event, rect);
82
74
  const horizontal = getOffsetHorizontal(event, rect);
@@ -84,22 +76,14 @@ let TuiScrollbarDirective = class TuiScrollbarDirective {
84
76
  })))
85
77
  .pipe(tuiZonefree(ngZone), takeUntil(destroy$))
86
78
  .subscribe(([scrollTop, scrollLeft]) => {
87
- const [x, y] = this.viewportScroller.getScrollPosition();
88
- if (!this.container) {
89
- this.viewportScroller.scrollToPosition([
90
- this.tuiScrollbar === 'vertical' ? x : scrollLeft,
91
- this.tuiScrollbar === 'vertical' ? scrollTop : y,
92
- ]);
93
- return;
94
- }
95
79
  if (this.tuiScrollbar === 'vertical') {
96
- renderer.setProperty(this.container.nativeElement, 'scrollTop', scrollTop);
80
+ renderer.setProperty(this.element, 'scrollTop', scrollTop);
97
81
  }
98
82
  else {
99
- renderer.setProperty(this.container.nativeElement, 'scrollLeft', scrollLeft);
83
+ renderer.setProperty(this.element, 'scrollLeft', scrollLeft);
100
84
  }
101
85
  });
102
- merge(fromEvent(this.container ? this.container.nativeElement : this.windowRef, 'scroll'), animationFrame$.pipe(throttleTime(POLLING_TIME)))
86
+ merge(animationFrame$.pipe(throttleTime(POLLING_TIME)), tuiScrollFrom(this.element))
103
87
  .pipe(tuiZonefree(ngZone), takeUntil(destroy$))
104
88
  .subscribe(() => {
105
89
  if (this.tuiScrollbar === 'vertical') {
@@ -113,13 +97,13 @@ let TuiScrollbarDirective = class TuiScrollbarDirective {
113
97
  });
114
98
  }
115
99
  get scrolled() {
116
- const { scrollTop, scrollHeight, clientHeight, scrollLeft, scrollWidth, clientWidth, } = this.computedContainer;
100
+ const { scrollTop, scrollHeight, clientHeight, scrollLeft, scrollWidth, clientWidth, } = this.element;
117
101
  return this.tuiScrollbar === 'vertical'
118
102
  ? scrollTop / (scrollHeight - clientHeight)
119
103
  : scrollLeft / (scrollWidth - clientWidth);
120
104
  }
121
105
  get compensation() {
122
- const { clientHeight, scrollHeight, clientWidth, scrollWidth } = this.computedContainer;
106
+ const { clientHeight, scrollHeight, clientWidth, scrollWidth } = this.element;
123
107
  if (((clientHeight * clientHeight) / scrollHeight > MIN_WIDTH &&
124
108
  this.tuiScrollbar === 'vertical') ||
125
109
  ((clientWidth * clientWidth) / scrollWidth > MIN_WIDTH &&
@@ -135,21 +119,19 @@ let TuiScrollbarDirective = class TuiScrollbarDirective {
135
119
  return this.scrolled * (1 - compensation);
136
120
  }
137
121
  get view() {
138
- const { clientHeight, scrollHeight, clientWidth, scrollWidth } = this.computedContainer;
122
+ const { clientHeight, scrollHeight, clientWidth, scrollWidth } = this.element;
139
123
  return this.tuiScrollbar === 'vertical'
140
124
  ? Math.ceil((clientHeight / scrollHeight) * 100) / 100
141
125
  : Math.ceil((clientWidth / scrollWidth) * 100) / 100;
142
126
  }
143
- get computedContainer() {
144
- return this.container
145
- ? this.container.nativeElement
146
- : this.documentRef.scrollingElement;
127
+ get element() {
128
+ return this.container.nativeElement;
147
129
  }
148
130
  getScrolled({ clientY, clientX }, offsetVertical, offsetHorizontal) {
149
- const { offsetHeight, offsetWidth } = this.elementRef.nativeElement;
131
+ const { offsetHeight, offsetWidth } = this.el.nativeElement;
150
132
  const { top, left, width, height } = this.wrapper.nativeElement.getBoundingClientRect();
151
- const maxTop = this.computedContainer.scrollHeight - height;
152
- const maxLeft = this.computedContainer.scrollWidth - width;
133
+ const maxTop = this.element.scrollHeight - height;
134
+ const maxLeft = this.element.scrollWidth - width;
153
135
  const scrolledTop = (clientY - top - offsetHeight * offsetVertical) / (height - offsetHeight);
154
136
  const scrolledLeft = (clientX - left - offsetWidth * offsetHorizontal) / (width - offsetWidth);
155
137
  return [maxTop * scrolledTop, maxLeft * scrolledLeft];
@@ -158,14 +140,12 @@ let TuiScrollbarDirective = class TuiScrollbarDirective {
158
140
  TuiScrollbarDirective.ctorParameters = () => [
159
141
  { type: NgZone, decorators: [{ type: Inject, args: [NgZone,] }] },
160
142
  { type: Renderer2, decorators: [{ type: Inject, args: [Renderer2,] }] },
161
- { type: Observable, decorators: [{ type: Inject, args: [TuiDestroyService,] }] },
143
+ { type: Observable, decorators: [{ type: Self }, { type: Inject, args: [TuiDestroyService,] }] },
162
144
  { type: Observable, decorators: [{ type: Inject, args: [ANIMATION_FRAME,] }] },
163
145
  { type: ElementRef, decorators: [{ type: Inject, args: [TUI_ELEMENT_REF,] }] },
164
- { type: ElementRef, decorators: [{ type: Optional }, { type: Inject, args: [TUI_SCROLL_REF,] }] },
146
+ { type: ElementRef, decorators: [{ type: Inject, args: [TUI_SCROLL_REF,] }] },
165
147
  { type: Document, decorators: [{ type: Inject, args: [DOCUMENT,] }] },
166
- { type: Window, decorators: [{ type: Inject, args: [WINDOW,] }] },
167
- { type: ElementRef, decorators: [{ type: Inject, args: [ElementRef,] }] },
168
- { type: ViewportScroller, decorators: [{ type: Inject, args: [ViewportScroller,] }] }
148
+ { type: ElementRef, decorators: [{ type: Inject, args: [ElementRef,] }] }
169
149
  ];
170
150
  __decorate([
171
151
  Input()
@@ -177,15 +157,12 @@ TuiScrollbarDirective = __decorate([
177
157
  }),
178
158
  __param(0, Inject(NgZone)),
179
159
  __param(1, Inject(Renderer2)),
180
- __param(2, Inject(TuiDestroyService)),
160
+ __param(2, Self()), __param(2, Inject(TuiDestroyService)),
181
161
  __param(3, Inject(ANIMATION_FRAME)),
182
162
  __param(4, Inject(TUI_ELEMENT_REF)),
183
- __param(5, Optional()),
184
163
  __param(5, Inject(TUI_SCROLL_REF)),
185
164
  __param(6, Inject(DOCUMENT)),
186
- __param(7, Inject(WINDOW)),
187
- __param(8, Inject(ElementRef)),
188
- __param(9, Inject(ViewportScroller))
165
+ __param(7, Inject(ElementRef))
189
166
  ], TuiScrollbarDirective);
190
167
  function getOffsetVertical({ clientY }, { top, height }) {
191
168
  return (clientY - top) / height;
@@ -1 +1 @@
1
- {"version":3,"file":"taiga-ui-core-components-scroll-controls.js","sources":["ng://@taiga-ui/core/components/scroll-controls/scroll-controls.component.ts","ng://@taiga-ui/core/components/scroll-controls/scrollbar.directive.ts","ng://@taiga-ui/core/components/scroll-controls/scrollbar-wrapper.directive.ts","ng://@taiga-ui/core/components/scroll-controls/scroll-controls.module.ts","ng://@taiga-ui/core/components/scroll-controls/taiga-ui-core-components-scroll-controls.ts"],"sourcesContent":["import {AnimationOptions} from '@angular/animations';\nimport {DOCUMENT} from '@angular/common';\nimport {\n ChangeDetectionStrategy,\n Component,\n ElementRef,\n Inject,\n NgZone,\n Optional,\n} from '@angular/core';\nimport {ANIMATION_FRAME} from '@ng-web-apis/common';\nimport {tuiZoneOptimized} from '@taiga-ui/cdk';\nimport {tuiFadeIn} from '@taiga-ui/core/animations';\nimport {MODE_PROVIDER} from '@taiga-ui/core/providers';\nimport {TUI_ANIMATION_OPTIONS, TUI_MODE, TUI_SCROLL_REF} from '@taiga-ui/core/tokens';\nimport {TuiBrightness} from '@taiga-ui/core/types';\nimport {Observable} from 'rxjs';\nimport {distinctUntilChanged, map, startWith, throttleTime} from 'rxjs/operators';\n\n// @dynamic\n@Component({\n selector: 'tui-scroll-controls',\n templateUrl: './scroll-controls.template.html',\n styleUrls: ['./scroll-controls.style.less'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n animations: [tuiFadeIn],\n providers: [MODE_PROVIDER],\n host: {\n '($.data-mode.attr)': 'mode$',\n },\n})\nexport class TuiScrollControlsComponent {\n readonly refresh$ = this.animationFrame$.pipe(\n throttleTime(300),\n map(() => this.scrollbars),\n startWith([false, false]),\n distinctUntilChanged((a, b) => a[0] === b[0] && a[1] === b[1]),\n tuiZoneOptimized(this.ngZone),\n );\n\n readonly animation = {\n value: '',\n ...this.options,\n } as const;\n\n constructor(\n @Inject(TUI_ANIMATION_OPTIONS) private readonly options: AnimationOptions,\n @Inject(NgZone) private readonly ngZone: NgZone,\n @Inject(DOCUMENT) private readonly documentRef: Document,\n @Optional()\n @Inject(TUI_SCROLL_REF)\n private readonly scrollRef: ElementRef<HTMLElement> | null,\n @Inject(ANIMATION_FRAME) private readonly animationFrame$: Observable<number>,\n @Inject(TUI_MODE) readonly mode$: Observable<TuiBrightness | null>,\n ) {}\n\n private get scrollbars(): [boolean, boolean] {\n const {clientHeight, scrollHeight, clientWidth, scrollWidth} = this.scrollRef\n ? this.scrollRef.nativeElement\n : this.documentRef.documentElement;\n\n return [\n Math.ceil((clientHeight / scrollHeight) * 100) < 100,\n Math.ceil((clientWidth / scrollWidth) * 100) < 100,\n ];\n }\n}\n","import {DOCUMENT, ViewportScroller} from '@angular/common';\nimport {\n Directive,\n ElementRef,\n Inject,\n Input,\n NgZone,\n Optional,\n Renderer2,\n} from '@angular/core';\nimport {ANIMATION_FRAME, WINDOW} from '@ng-web-apis/common';\nimport {\n POLLING_TIME,\n preventDefault,\n stopPropagation,\n TuiDestroyService,\n tuiZonefree,\n typedFromEvent,\n} from '@taiga-ui/cdk';\nimport {TUI_ELEMENT_REF, TUI_SCROLL_REF} from '@taiga-ui/core/tokens';\nimport {TuiOrientationT} from '@taiga-ui/core/types';\nimport {fromEvent, merge, Observable} from 'rxjs';\nimport {map, switchMap, takeUntil, throttleTime} from 'rxjs/operators';\n\nconst MIN_WIDTH = 24;\n\n// @dynamic\n@Directive({\n selector: '[tuiScrollbar]',\n providers: [TuiDestroyService],\n})\nexport class TuiScrollbarDirective {\n @Input()\n tuiScrollbar: TuiOrientationT = 'vertical';\n\n constructor(\n @Inject(NgZone) ngZone: NgZone,\n @Inject(Renderer2) renderer: Renderer2,\n @Inject(TuiDestroyService) destroy$: Observable<void>,\n @Inject(ANIMATION_FRAME) animationFrame$: Observable<number>,\n @Inject(TUI_ELEMENT_REF) private readonly wrapper: ElementRef<HTMLElement>,\n @Optional()\n @Inject(TUI_SCROLL_REF)\n private readonly container: ElementRef<HTMLElement> | null,\n @Inject(DOCUMENT) private readonly documentRef: Document,\n @Inject(WINDOW) private readonly windowRef: Window,\n @Inject(ElementRef) private readonly elementRef: ElementRef<HTMLElement>,\n @Inject(ViewportScroller) private readonly viewportScroller: ViewportScroller,\n ) {\n const {nativeElement} = this.elementRef;\n const mousedown$ = typedFromEvent(nativeElement, 'mousedown');\n const mousemove$ = typedFromEvent(this.documentRef, 'mousemove');\n const mouseup$ = typedFromEvent(this.documentRef, 'mouseup');\n const mousedownWrapper$ = typedFromEvent(wrapper.nativeElement, 'mousedown');\n\n merge(\n mousedownWrapper$.pipe(\n preventDefault(),\n map(event => this.getScrolled(event, 0.5, 0.5)),\n ),\n mousedown$.pipe(\n preventDefault(),\n stopPropagation(),\n switchMap(event => {\n const rect = nativeElement.getBoundingClientRect();\n const vertical = getOffsetVertical(event, rect);\n const horizontal = getOffsetHorizontal(event, rect);\n\n return mousemove$.pipe(\n map(event => this.getScrolled(event, vertical, horizontal)),\n takeUntil(mouseup$),\n );\n }),\n ),\n )\n .pipe(tuiZonefree(ngZone), takeUntil(destroy$))\n .subscribe(([scrollTop, scrollLeft]) => {\n const [x, y] = this.viewportScroller.getScrollPosition();\n\n if (!this.container) {\n this.viewportScroller.scrollToPosition([\n this.tuiScrollbar === 'vertical' ? x : scrollLeft,\n this.tuiScrollbar === 'vertical' ? scrollTop : y,\n ]);\n\n return;\n }\n\n if (this.tuiScrollbar === 'vertical') {\n renderer.setProperty(\n this.container.nativeElement,\n 'scrollTop',\n scrollTop,\n );\n } else {\n renderer.setProperty(\n this.container.nativeElement,\n 'scrollLeft',\n scrollLeft,\n );\n }\n });\n\n merge(\n fromEvent(\n this.container ? this.container.nativeElement : this.windowRef,\n 'scroll',\n ),\n animationFrame$.pipe(throttleTime(POLLING_TIME)),\n )\n .pipe(tuiZonefree(ngZone), takeUntil(destroy$))\n .subscribe(() => {\n if (this.tuiScrollbar === 'vertical') {\n renderer.setStyle(nativeElement, 'top', `${this.thumb * 100}%`);\n renderer.setStyle(nativeElement, 'height', `${this.view * 100}%`);\n } else {\n renderer.setStyle(nativeElement, 'left', `${this.thumb * 100}%`);\n renderer.setStyle(nativeElement, 'width', `${this.view * 100}%`);\n }\n });\n }\n\n private get scrolled(): number {\n const {\n scrollTop,\n scrollHeight,\n clientHeight,\n scrollLeft,\n scrollWidth,\n clientWidth,\n } = this.computedContainer;\n\n return this.tuiScrollbar === 'vertical'\n ? scrollTop / (scrollHeight - clientHeight)\n : scrollLeft / (scrollWidth - clientWidth);\n }\n\n private get compensation(): number {\n const {clientHeight, scrollHeight, clientWidth, scrollWidth} =\n this.computedContainer;\n\n if (\n ((clientHeight * clientHeight) / scrollHeight > MIN_WIDTH &&\n this.tuiScrollbar === 'vertical') ||\n ((clientWidth * clientWidth) / scrollWidth > MIN_WIDTH &&\n this.tuiScrollbar === 'horizontal')\n ) {\n return 0;\n }\n\n return this.tuiScrollbar === 'vertical'\n ? MIN_WIDTH / clientHeight\n : MIN_WIDTH / clientWidth;\n }\n\n private get thumb(): number {\n const compensation = this.compensation || this.view;\n\n return this.scrolled * (1 - compensation);\n }\n\n private get view(): number {\n const {clientHeight, scrollHeight, clientWidth, scrollWidth} =\n this.computedContainer;\n\n return this.tuiScrollbar === 'vertical'\n ? Math.ceil((clientHeight / scrollHeight) * 100) / 100\n : Math.ceil((clientWidth / scrollWidth) * 100) / 100;\n }\n\n private get computedContainer(): Element {\n return this.container\n ? this.container.nativeElement\n : (this.documentRef.scrollingElement as unknown as Element);\n }\n\n private getScrolled(\n {clientY, clientX}: MouseEvent,\n offsetVertical: number,\n offsetHorizontal: number,\n ): [number, number] {\n const {offsetHeight, offsetWidth} = this.elementRef.nativeElement;\n const {top, left, width, height} =\n this.wrapper.nativeElement.getBoundingClientRect();\n\n const maxTop = this.computedContainer.scrollHeight - height;\n const maxLeft = this.computedContainer.scrollWidth - width;\n const scrolledTop =\n (clientY - top - offsetHeight * offsetVertical) / (height - offsetHeight);\n const scrolledLeft =\n (clientX - left - offsetWidth * offsetHorizontal) / (width - offsetWidth);\n\n return [maxTop * scrolledTop, maxLeft * scrolledLeft];\n }\n}\n\nfunction getOffsetVertical({clientY}: MouseEvent, {top, height}: ClientRect): number {\n return (clientY - top) / height;\n}\n\nfunction getOffsetHorizontal({clientX}: MouseEvent, {left, width}: ClientRect): number {\n return (clientX - left) / width;\n}\n","import {Directive, ElementRef} from '@angular/core';\nimport {TUI_ELEMENT_REF} from '@taiga-ui/core/tokens';\n\n@Directive({\n selector: '[tuiScrollbarWrapper]',\n providers: [\n {\n provide: TUI_ELEMENT_REF,\n useExisting: ElementRef,\n },\n ],\n})\nexport class TuiScrollbarWrapperDirective {}\n","import {CommonModule} from '@angular/common';\nimport {NgModule} from '@angular/core';\nimport {TuiLetModule} from '@taiga-ui/cdk';\n\nimport {TuiScrollControlsComponent} from './scroll-controls.component';\nimport {TuiScrollbarDirective} from './scrollbar.directive';\nimport {TuiScrollbarWrapperDirective} from './scrollbar-wrapper.directive';\n\n@NgModule({\n imports: [CommonModule, TuiLetModule],\n declarations: [\n TuiScrollbarDirective,\n TuiScrollbarWrapperDirective,\n TuiScrollControlsComponent,\n ],\n exports: [TuiScrollControlsComponent],\n})\nexport class TuiScrollControlsModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n\nexport {TuiScrollbarWrapperDirective as ɵa} from './scrollbar-wrapper.directive';"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"taiga-ui-core-components-scroll-controls.js","sources":["ng://@taiga-ui/core/components/scroll-controls/scroll-controls.component.ts","ng://@taiga-ui/core/components/scroll-controls/scrollbar.directive.ts","ng://@taiga-ui/core/components/scroll-controls/scrollbar-wrapper.directive.ts","ng://@taiga-ui/core/components/scroll-controls/scroll-controls.module.ts","ng://@taiga-ui/core/components/scroll-controls/taiga-ui-core-components-scroll-controls.ts"],"sourcesContent":["import {AnimationOptions} from '@angular/animations';\nimport {\n ChangeDetectionStrategy,\n Component,\n ElementRef,\n Inject,\n NgZone,\n} from '@angular/core';\nimport {ANIMATION_FRAME} from '@ng-web-apis/common';\nimport {tuiZoneOptimized} from '@taiga-ui/cdk';\nimport {tuiFadeIn} from '@taiga-ui/core/animations';\nimport {MODE_PROVIDER} from '@taiga-ui/core/providers';\nimport {TUI_ANIMATION_OPTIONS, TUI_MODE, TUI_SCROLL_REF} from '@taiga-ui/core/tokens';\nimport {TuiBrightness} from '@taiga-ui/core/types';\nimport {Observable} from 'rxjs';\nimport {distinctUntilChanged, map, startWith, throttleTime} from 'rxjs/operators';\n\n// @dynamic\n@Component({\n selector: 'tui-scroll-controls',\n templateUrl: './scroll-controls.template.html',\n styleUrls: ['./scroll-controls.style.less'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n animations: [tuiFadeIn],\n providers: [MODE_PROVIDER],\n host: {\n '($.data-mode.attr)': 'mode$',\n },\n})\nexport class TuiScrollControlsComponent {\n readonly refresh$ = this.animationFrame$.pipe(\n throttleTime(300),\n map(() => this.scrollbars),\n startWith([false, false]),\n distinctUntilChanged((a, b) => a[0] === b[0] && a[1] === b[1]),\n tuiZoneOptimized(this.ngZone),\n );\n\n readonly animation = {\n value: '',\n ...this.options,\n } as const;\n\n constructor(\n @Inject(TUI_ANIMATION_OPTIONS) private readonly options: AnimationOptions,\n @Inject(NgZone) private readonly ngZone: NgZone,\n @Inject(TUI_SCROLL_REF) private readonly scrollRef: ElementRef<HTMLElement>,\n @Inject(ANIMATION_FRAME) private readonly animationFrame$: Observable<number>,\n @Inject(TUI_MODE) readonly mode$: Observable<TuiBrightness | null>,\n ) {}\n\n private get scrollbars(): [boolean, boolean] {\n const {clientHeight, scrollHeight, clientWidth, scrollWidth} =\n this.scrollRef.nativeElement;\n\n return [\n Math.ceil((clientHeight / scrollHeight) * 100) < 100,\n Math.ceil((clientWidth / scrollWidth) * 100) < 100,\n ];\n }\n}\n","import {DOCUMENT} from '@angular/common';\nimport {\n Directive,\n ElementRef,\n Inject,\n Input,\n NgZone,\n Renderer2,\n Self,\n} from '@angular/core';\nimport {ANIMATION_FRAME} from '@ng-web-apis/common';\nimport {\n POLLING_TIME,\n TuiDestroyService,\n tuiPreventDefault,\n tuiScrollFrom,\n tuiStopPropagation,\n tuiTypedFromEvent,\n tuiZonefree,\n} from '@taiga-ui/cdk';\nimport {TUI_ELEMENT_REF, TUI_SCROLL_REF} from '@taiga-ui/core/tokens';\nimport {TuiOrientationT} from '@taiga-ui/core/types';\nimport {merge, Observable} from 'rxjs';\nimport {map, switchMap, takeUntil, throttleTime} from 'rxjs/operators';\n\nconst MIN_WIDTH = 24;\n\n// @dynamic\n@Directive({\n selector: '[tuiScrollbar]',\n providers: [TuiDestroyService],\n})\nexport class TuiScrollbarDirective {\n @Input()\n tuiScrollbar: TuiOrientationT = 'vertical';\n\n constructor(\n @Inject(NgZone) ngZone: NgZone,\n @Inject(Renderer2) renderer: Renderer2,\n @Self() @Inject(TuiDestroyService) destroy$: Observable<void>,\n @Inject(ANIMATION_FRAME) animationFrame$: Observable<number>,\n @Inject(TUI_ELEMENT_REF) private readonly wrapper: ElementRef<HTMLElement>,\n @Inject(TUI_SCROLL_REF) private readonly container: ElementRef<HTMLElement>,\n @Inject(DOCUMENT) private readonly doc: Document,\n @Inject(ElementRef) private readonly el: ElementRef<HTMLElement>,\n ) {\n const {nativeElement} = this.el;\n const mousedown$ = tuiTypedFromEvent(nativeElement, 'mousedown');\n const mousemove$ = tuiTypedFromEvent(this.doc, 'mousemove');\n const mouseup$ = tuiTypedFromEvent(this.doc, 'mouseup');\n const mousedownWrapper$ = tuiTypedFromEvent(\n this.wrapper.nativeElement,\n 'mousedown',\n );\n\n merge(\n mousedownWrapper$.pipe(\n tuiPreventDefault(),\n map(event => this.getScrolled(event, 0.5, 0.5)),\n ),\n mousedown$.pipe(\n tuiPreventDefault(),\n tuiStopPropagation(),\n switchMap(event => {\n const rect = nativeElement.getBoundingClientRect();\n const vertical = getOffsetVertical(event, rect);\n const horizontal = getOffsetHorizontal(event, rect);\n\n return mousemove$.pipe(\n map(event => this.getScrolled(event, vertical, horizontal)),\n takeUntil(mouseup$),\n );\n }),\n ),\n )\n .pipe(tuiZonefree(ngZone), takeUntil(destroy$))\n .subscribe(([scrollTop, scrollLeft]) => {\n if (this.tuiScrollbar === 'vertical') {\n renderer.setProperty(this.element, 'scrollTop', scrollTop);\n } else {\n renderer.setProperty(this.element, 'scrollLeft', scrollLeft);\n }\n });\n\n merge(\n animationFrame$.pipe(throttleTime(POLLING_TIME)),\n tuiScrollFrom(this.element),\n )\n .pipe(tuiZonefree(ngZone), takeUntil(destroy$))\n .subscribe(() => {\n if (this.tuiScrollbar === 'vertical') {\n renderer.setStyle(nativeElement, 'top', `${this.thumb * 100}%`);\n renderer.setStyle(nativeElement, 'height', `${this.view * 100}%`);\n } else {\n renderer.setStyle(nativeElement, 'left', `${this.thumb * 100}%`);\n renderer.setStyle(nativeElement, 'width', `${this.view * 100}%`);\n }\n });\n }\n\n private get scrolled(): number {\n const {\n scrollTop,\n scrollHeight,\n clientHeight,\n scrollLeft,\n scrollWidth,\n clientWidth,\n } = this.element;\n\n return this.tuiScrollbar === 'vertical'\n ? scrollTop / (scrollHeight - clientHeight)\n : scrollLeft / (scrollWidth - clientWidth);\n }\n\n private get compensation(): number {\n const {clientHeight, scrollHeight, clientWidth, scrollWidth} = this.element;\n\n if (\n ((clientHeight * clientHeight) / scrollHeight > MIN_WIDTH &&\n this.tuiScrollbar === 'vertical') ||\n ((clientWidth * clientWidth) / scrollWidth > MIN_WIDTH &&\n this.tuiScrollbar === 'horizontal')\n ) {\n return 0;\n }\n\n return this.tuiScrollbar === 'vertical'\n ? MIN_WIDTH / clientHeight\n : MIN_WIDTH / clientWidth;\n }\n\n private get thumb(): number {\n const compensation = this.compensation || this.view;\n\n return this.scrolled * (1 - compensation);\n }\n\n private get view(): number {\n const {clientHeight, scrollHeight, clientWidth, scrollWidth} = this.element;\n\n return this.tuiScrollbar === 'vertical'\n ? Math.ceil((clientHeight / scrollHeight) * 100) / 100\n : Math.ceil((clientWidth / scrollWidth) * 100) / 100;\n }\n\n private get element(): Element {\n return this.container.nativeElement;\n }\n\n private getScrolled(\n {clientY, clientX}: MouseEvent,\n offsetVertical: number,\n offsetHorizontal: number,\n ): [number, number] {\n const {offsetHeight, offsetWidth} = this.el.nativeElement;\n const {top, left, width, height} =\n this.wrapper.nativeElement.getBoundingClientRect();\n\n const maxTop = this.element.scrollHeight - height;\n const maxLeft = this.element.scrollWidth - width;\n const scrolledTop =\n (clientY - top - offsetHeight * offsetVertical) / (height - offsetHeight);\n const scrolledLeft =\n (clientX - left - offsetWidth * offsetHorizontal) / (width - offsetWidth);\n\n return [maxTop * scrolledTop, maxLeft * scrolledLeft];\n }\n}\n\nfunction getOffsetVertical({clientY}: MouseEvent, {top, height}: ClientRect): number {\n return (clientY - top) / height;\n}\n\nfunction getOffsetHorizontal({clientX}: MouseEvent, {left, width}: ClientRect): number {\n return (clientX - left) / width;\n}\n","import {Directive, ElementRef} from '@angular/core';\nimport {TUI_ELEMENT_REF} from '@taiga-ui/core/tokens';\n\n@Directive({\n selector: '[tuiScrollbarWrapper]',\n providers: [\n {\n provide: TUI_ELEMENT_REF,\n useExisting: ElementRef,\n },\n ],\n})\nexport class TuiScrollbarWrapperDirective {}\n","import {CommonModule} from '@angular/common';\nimport {NgModule} from '@angular/core';\nimport {TuiLetModule} from '@taiga-ui/cdk';\n\nimport {TuiScrollControlsComponent} from './scroll-controls.component';\nimport {TuiScrollbarDirective} from './scrollbar.directive';\nimport {TuiScrollbarWrapperDirective} from './scrollbar-wrapper.directive';\n\n@NgModule({\n imports: [CommonModule, TuiLetModule],\n declarations: [\n TuiScrollbarDirective,\n TuiScrollbarWrapperDirective,\n TuiScrollControlsComponent,\n ],\n exports: [TuiScrollControlsComponent],\n})\nexport class TuiScrollControlsModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n\nexport {TuiScrollbarWrapperDirective as ɵa} from './scrollbar-wrapper.directive';"],"names":[],"mappings":"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"}
@@ -1,9 +1,10 @@
1
- import { InjectionToken, inject, isDevMode, NgZone } from '@angular/core';
1
+ import { InjectionToken, inject, isDevMode, NgZone, ElementRef } from '@angular/core';
2
2
  import { extractI18n } from '@taiga-ui/i18n';
3
3
  import { iconsPathFactory, tuiIsMobile } from '@taiga-ui/core/utils';
4
4
  import { WINDOW } from '@ng-web-apis/common';
5
5
  import { typedFromEvent, tuiZoneOptimized, CHAR_NO_BREAK_SPACE, TUI_SANITIZER as TUI_SANITIZER$1 } from '@taiga-ui/cdk';
6
6
  import { share, startWith, map, distinctUntilChanged } from 'rxjs/operators';
7
+ import { DOCUMENT } from '@angular/common';
7
8
  import { svgLinearGradientProcessor } from '@taiga-ui/cdk/utils/svg';
8
9
  import { identity } from 'rxjs';
9
10
 
@@ -133,7 +134,12 @@ const TUI_ORDERED_SHORT_WEEK_DAYS = new InjectionToken(`Ordered calendars i18n t
133
134
 
134
135
  const TUI_SANITIZER = TUI_SANITIZER$1;
135
136
 
136
- const TUI_SCROLL_REF = new InjectionToken(`Scrollable container`);
137
+ /**
138
+ * Scrollable container
139
+ */
140
+ const TUI_SCROLL_REF = new InjectionToken(`[TUI_SCROLL_REF]`, {
141
+ factory: () => new ElementRef(inject(DOCUMENT).documentElement),
142
+ });
137
143
 
138
144
  const TUI_SVG_CONTENT_PROCESSOR = new InjectionToken(`Transform function the contents of the loaded svg file`, { factory: () => svgLinearGradientProcessor });
139
145
 
@@ -1 +1 @@
1
- {"version":3,"file":"taiga-ui-core-tokens.js","sources":["ng://@taiga-ui/core/tokens/animations-duration.ts","ng://@taiga-ui/core/tokens/animation-options.ts","ng://@taiga-ui/core/tokens/assert-enabled.ts","ng://@taiga-ui/core/tokens/data-list-accessor.ts","ng://@taiga-ui/core/tokens/data-list-host.ts","ng://@taiga-ui/core/tokens/document-or-shadow-root.ts","ng://@taiga-ui/core/tokens/dropdown-directive.ts","ng://@taiga-ui/core/tokens/element-ref.ts","ng://@taiga-ui/core/tokens/first-day-of-week.ts","ng://@taiga-ui/core/tokens/i18n.ts","ng://@taiga-ui/core/tokens/icon-place.ts","ng://@taiga-ui/core/tokens/icons.ts","ng://@taiga-ui/core/tokens/icons-path.ts","ng://@taiga-ui/core/tokens/media.ts","ng://@taiga-ui/core/tokens/is-mobile-resolution.ts","ng://@taiga-ui/core/tokens/mode.ts","ng://@taiga-ui/core/tokens/notification-options.ts","ng://@taiga-ui/core/tokens/number-format.ts","ng://@taiga-ui/core/tokens/option-content.ts","ng://@taiga-ui/core/tokens/ordered-short-week-days.ts","ng://@taiga-ui/core/tokens/sanitizer.ts","ng://@taiga-ui/core/tokens/scroll-ref.ts","ng://@taiga-ui/core/tokens/svg-content-processor.ts","ng://@taiga-ui/core/tokens/svg-src-processor.ts","ng://@taiga-ui/core/tokens/textfield-appearance.ts","ng://@taiga-ui/core/tokens/textfield-host.ts","ng://@taiga-ui/core/tokens/theme.ts","ng://@taiga-ui/core/tokens/value-accessor.ts","ng://@taiga-ui/core/tokens/taiga-ui-core-tokens.ts"],"sourcesContent":["import {InjectionToken} from '@angular/core';\n\nexport const TUI_ANIMATIONS_DURATION = new InjectionToken<number>(\n `Duration of all Taiga UI animations in ms`,\n {\n factory: () => 300,\n },\n);\n","import {AnimationOptions} from '@angular/animations';\nimport {inject, InjectionToken} from '@angular/core';\n\nimport {TUI_ANIMATIONS_DURATION} from './animations-duration';\n\nexport const TUI_ANIMATION_OPTIONS = new InjectionToken<AnimationOptions>(\n `Options for Taiga UI animations`,\n {\n factory: () => ({\n params: {\n duration: inject(TUI_ANIMATIONS_DURATION),\n },\n }),\n },\n);\n","import {InjectionToken, isDevMode} from '@angular/core';\n\nexport const TUI_ASSERT_ENABLED = new InjectionToken(\n `Flag to enable assertions across Taiga UI`,\n {\n factory: () => isDevMode(),\n },\n);\n","import {InjectionToken} from '@angular/core';\nimport {TuiDataListAccessor} from '@taiga-ui/core/interfaces';\n\nexport const TUI_DATA_LIST_ACCESSOR = new InjectionToken<TuiDataListAccessor>(\n `Accessor for options`,\n);\n","import {InjectionToken} from '@angular/core';\nimport {TuiDataListHost} from '@taiga-ui/core/interfaces';\n\nexport const TUI_DATA_LIST_HOST = new InjectionToken<TuiDataListHost<unknown>>(\n `DataList controller`,\n);\n","import {InjectionToken} from '@angular/core';\n\nexport const TUI_DOCUMENT_OR_SHADOW_ROOT = new InjectionToken<DocumentOrShadowRoot>(\n `Document or ShadowRoot`,\n);\n","import {InjectionToken} from '@angular/core';\nimport {TuiDropdown} from '@taiga-ui/core/interfaces';\n\nexport const TUI_DROPDOWN_DIRECTIVE = new InjectionToken<TuiDropdown>(\n `Directive controlling TuiDropdownBoxComponent`,\n);\n","import {ElementRef, InjectionToken} from '@angular/core';\n\nexport const TUI_ELEMENT_REF = new InjectionToken<ElementRef>(\n `ElementRef when you cannot use @Input for single time injection`,\n);\n","import {InjectionToken} from '@angular/core';\nimport {TuiDayOfWeek} from '@taiga-ui/cdk';\n\nexport const TUI_FIRST_DAY_OF_WEEK = new InjectionToken<TuiDayOfWeek>(\n `The first day of the week index`,\n {\n factory: () => TuiDayOfWeek.Monday,\n },\n);\n","import {InjectionToken} from '@angular/core';\nimport {extractI18n} from '@taiga-ui/i18n';\n\nexport const TUI_MONTHS = new InjectionToken(`Localized months names`, {\n factory: extractI18n(`months`),\n});\n\nexport const TUI_CLOSE_WORD = new InjectionToken(`i18n 'close' word`, {\n factory: extractI18n(`close`),\n});\n\nexport const TUI_NOTHING_FOUND_MESSAGE = new InjectionToken(\n `i18n 'Nothing found' message`,\n {\n factory: extractI18n(`nothingFoundMessage`),\n },\n);\n\nexport const TUI_DEFAULT_ERROR_MESSAGE = new InjectionToken(`i18n of error message`, {\n factory: extractI18n(`defaultErrorMessage`),\n});\n\nexport const TUI_SPIN_TEXTS = new InjectionToken(`spin i18n texts`, {\n factory: extractI18n(`spinTexts`),\n});\n\nexport const TUI_SHORT_WEEK_DAYS = new InjectionToken(`calendars i18n texts`, {\n factory: extractI18n(`shortWeekDays`),\n});\n","import {InjectionToken} from '@angular/core';\n\nexport const TUI_ICONS_PLACE: InjectionToken<string> = new InjectionToken<string>(\n `Recommended paths to icons from documentation guide`,\n {\n factory: () => `assets/taiga-ui/icons`,\n },\n);\n","import {InjectionToken} from '@angular/core';\n\nexport const TUI_ICONS = new InjectionToken<Record<string, string>>(\n `A key/value dictionary of icon names and src to be defined with TuiSvgService`,\n {\n factory: () => ({}),\n },\n);\n","import {inject, InjectionToken} from '@angular/core';\nimport {TuiStringHandler} from '@taiga-ui/cdk';\nimport {iconsPathFactory} from '@taiga-ui/core/utils';\n\nimport {TUI_ICONS_PLACE} from './icon-place';\n\nexport const TUI_ICONS_PATH: InjectionToken<TuiStringHandler<string>> =\n new InjectionToken<TuiStringHandler<string>>(\n `A handler to retrieve USE id for icon by name`,\n {factory: () => iconsPathFactory(inject(TUI_ICONS_PLACE))},\n );\n","import {InjectionToken} from '@angular/core';\nimport {TuiMedia} from '@taiga-ui/core/interfaces';\n\nexport const TUI_MEDIA = new InjectionToken<TuiMedia>(`Token for media constant`, {\n factory: () => ({\n mobile: 768,\n desktopSmall: 1024,\n desktopLarge: 1280,\n }),\n});\n","import {inject, InjectionToken, NgZone} from '@angular/core';\nimport {WINDOW} from '@ng-web-apis/common';\nimport {tuiZoneOptimized, typedFromEvent} from '@taiga-ui/cdk';\nimport {tuiIsMobile} from '@taiga-ui/core/utils';\nimport {Observable} from 'rxjs';\nimport {distinctUntilChanged, map, share, startWith} from 'rxjs/operators';\n\nimport {TUI_MEDIA} from './media';\n\nexport const TUI_IS_MOBILE_RES = new InjectionToken<Observable<boolean>>(\n `Mobile resolution stream for private providers`,\n {\n factory: () => {\n const windowRef = inject(WINDOW);\n const media = inject(TUI_MEDIA);\n\n return typedFromEvent(windowRef, `resize`).pipe(\n share(),\n startWith(null),\n map(() => tuiIsMobile(windowRef, media)),\n distinctUntilChanged(),\n tuiZoneOptimized(inject(NgZone)),\n );\n },\n },\n);\n","import {InjectionToken} from '@angular/core';\nimport {TuiBrightness} from '@taiga-ui/core/types';\nimport {Observable} from 'rxjs';\n\nexport const TUI_MODE: InjectionToken<Observable<TuiBrightness | null>> =\n new InjectionToken<Observable<TuiBrightness | null>>(\n `Mode stream for private providers`,\n );\n","import {InjectionToken, ValueProvider} from '@angular/core';\nimport {TuiNotification} from '@taiga-ui/core/enums';\nimport {TuiAlertOptions} from '@taiga-ui/core/interfaces';\n\nexport interface TuiNotificationDefaultOptions\n extends Omit<TuiAlertOptions<unknown>, 'data'> {\n readonly defaultAutoCloseTime: number;\n}\n\n/**\n * @deprecated: remove in v3.0, use TuiNotificationDefaultOptions\n */\nexport type NotificationTokenOptions = TuiNotificationDefaultOptions;\n\n/** Default values for the notification options. */\nexport const TUI_NOTIFICATION_DEFAULT_OPTIONS: TuiNotificationDefaultOptions = {\n autoClose: true,\n label: ``,\n status: TuiNotification.Info,\n hasIcon: true,\n hasCloseButton: true,\n defaultAutoCloseTime: 3000,\n};\n\nexport const TUI_NOTIFICATION_OPTIONS = new InjectionToken<TuiNotificationDefaultOptions>(\n `Default parameters for notification alert component`,\n {\n factory: () => TUI_NOTIFICATION_DEFAULT_OPTIONS,\n },\n);\n\nexport function tuiNotificationOptionsProvider(\n options: Partial<TuiNotificationDefaultOptions>,\n): ValueProvider {\n return {\n provide: TUI_NOTIFICATION_OPTIONS,\n useValue: {...TUI_NOTIFICATION_DEFAULT_OPTIONS, ...options},\n };\n}\n","import {InjectionToken} from '@angular/core';\nimport {CHAR_NO_BREAK_SPACE} from '@taiga-ui/cdk';\nimport {TuiNumberFormatSettings} from '@taiga-ui/core/interfaces';\n\nexport const TUI_NUMBER_FORMAT = new InjectionToken<TuiNumberFormatSettings>(\n `Formatting configuration for displayed numbers`,\n {\n factory: () => ({\n decimalSeparator: `,`,\n thousandSeparator: CHAR_NO_BREAK_SPACE,\n zeroPadding: true,\n }),\n },\n);\n","import {InjectionToken, TemplateRef} from '@angular/core';\nimport {TuiContextWithImplicit} from '@taiga-ui/cdk';\nimport {PolymorpheusContent} from '@tinkoff/ng-polymorpheus';\n\nexport const TUI_OPTION_CONTENT = new InjectionToken<\n PolymorpheusContent<TuiContextWithImplicit<TemplateRef<Record<string, unknown>>>>\n>(`Content for tuiOption component`);\n","import {inject, InjectionToken} from '@angular/core';\nimport {Observable} from 'rxjs';\nimport {map} from 'rxjs/operators';\n\nimport {TUI_FIRST_DAY_OF_WEEK, TUI_SHORT_WEEK_DAYS} from './index';\n\nexport type WEEK_DAYS_NAMES = [string, string, string, string, string, string, string];\n\n// TODO: 3.0 Remove export in ivy compilation\nexport const convertToSundayFirstWeekFormat = (\n weekDaysNames: WEEK_DAYS_NAMES,\n): WEEK_DAYS_NAMES => {\n const sundayIndex = weekDaysNames.length - 1;\n\n return [\n weekDaysNames[sundayIndex],\n ...weekDaysNames.slice(0, sundayIndex),\n ] as WEEK_DAYS_NAMES;\n};\n\nexport const TUI_ORDERED_SHORT_WEEK_DAYS = new InjectionToken<\n Observable<WEEK_DAYS_NAMES>\n>(`Ordered calendars i18n texts`, {\n factory: () => {\n const firstDayOfWeekIndex = inject(TUI_FIRST_DAY_OF_WEEK);\n\n return inject(TUI_SHORT_WEEK_DAYS).pipe(\n map(convertToSundayFirstWeekFormat),\n map(\n weekDays =>\n [\n ...weekDays.slice(firstDayOfWeekIndex),\n ...weekDays.slice(0, firstDayOfWeekIndex),\n ] as WEEK_DAYS_NAMES,\n ),\n );\n },\n});\n","import {TUI_SANITIZER as TOKEN} from '@taiga-ui/cdk';\n\nexport const TUI_SANITIZER = TOKEN;\n","import {ElementRef, InjectionToken} from '@angular/core';\n\nexport const TUI_SCROLL_REF = new InjectionToken<ElementRef<HTMLElement>>(\n `Scrollable container`,\n);\n","import {InjectionToken} from '@angular/core';\nimport {TuiStringHandler} from '@taiga-ui/cdk';\nimport {svgLinearGradientProcessor} from '@taiga-ui/cdk/utils/svg';\n\nexport const TUI_SVG_CONTENT_PROCESSOR: InjectionToken<TuiStringHandler<string>> =\n new InjectionToken<TuiStringHandler<string>>(\n `Transform function the contents of the loaded svg file`,\n {factory: () => svgLinearGradientProcessor},\n );\n","import {InjectionToken} from '@angular/core';\nimport {TuiStringHandler} from '@taiga-ui/cdk';\nimport {identity} from 'rxjs';\n\nexport const TUI_SVG_SRC_PROCESSOR: InjectionToken<TuiStringHandler<string>> =\n new InjectionToken<TuiStringHandler<string>>(`Source path processor for svg`, {\n factory: () => identity,\n });\n","import {InjectionToken} from '@angular/core';\nimport {TuiAppearance} from '@taiga-ui/core/enums';\n\nexport const TUI_TEXTFIELD_APPEARANCE = new InjectionToken<string>(\n `Appearance for inputs`,\n {\n factory: () => TuiAppearance.Textfield,\n },\n);\n","import {InjectionToken} from '@angular/core';\nimport {TuiTextfieldHost} from '@taiga-ui/core/interfaces';\n\nexport const TUI_TEXTFIELD_HOST = new InjectionToken<TuiTextfieldHost>(\n `An interface to communicate with textfield based controls`,\n);\n","import {InjectionToken} from '@angular/core';\n\nexport const TUI_THEME = new InjectionToken<string>(`Theme name`, {\n factory: () => `Taiga`,\n});\n","import {InjectionToken} from '@angular/core';\nimport {ControlValueAccessor} from '@angular/forms';\n\nexport const TUI_VALUE_ACCESSOR = new InjectionToken<ControlValueAccessor>(\n `Buffer token to pass NG_VALUE_ACCESSOR to a different Injector`,\n);\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["TOKEN"],"mappings":"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"}
1
+ {"version":3,"file":"taiga-ui-core-tokens.js","sources":["ng://@taiga-ui/core/tokens/animations-duration.ts","ng://@taiga-ui/core/tokens/animation-options.ts","ng://@taiga-ui/core/tokens/assert-enabled.ts","ng://@taiga-ui/core/tokens/data-list-accessor.ts","ng://@taiga-ui/core/tokens/data-list-host.ts","ng://@taiga-ui/core/tokens/document-or-shadow-root.ts","ng://@taiga-ui/core/tokens/dropdown-directive.ts","ng://@taiga-ui/core/tokens/element-ref.ts","ng://@taiga-ui/core/tokens/first-day-of-week.ts","ng://@taiga-ui/core/tokens/i18n.ts","ng://@taiga-ui/core/tokens/icon-place.ts","ng://@taiga-ui/core/tokens/icons.ts","ng://@taiga-ui/core/tokens/icons-path.ts","ng://@taiga-ui/core/tokens/media.ts","ng://@taiga-ui/core/tokens/is-mobile-resolution.ts","ng://@taiga-ui/core/tokens/mode.ts","ng://@taiga-ui/core/tokens/notification-options.ts","ng://@taiga-ui/core/tokens/number-format.ts","ng://@taiga-ui/core/tokens/option-content.ts","ng://@taiga-ui/core/tokens/ordered-short-week-days.ts","ng://@taiga-ui/core/tokens/sanitizer.ts","ng://@taiga-ui/core/tokens/scroll-ref.ts","ng://@taiga-ui/core/tokens/svg-content-processor.ts","ng://@taiga-ui/core/tokens/svg-src-processor.ts","ng://@taiga-ui/core/tokens/textfield-appearance.ts","ng://@taiga-ui/core/tokens/textfield-host.ts","ng://@taiga-ui/core/tokens/theme.ts","ng://@taiga-ui/core/tokens/value-accessor.ts","ng://@taiga-ui/core/tokens/taiga-ui-core-tokens.ts"],"sourcesContent":["import {InjectionToken} from '@angular/core';\n\nexport const TUI_ANIMATIONS_DURATION = new InjectionToken<number>(\n `Duration of all Taiga UI animations in ms`,\n {\n factory: () => 300,\n },\n);\n","import {AnimationOptions} from '@angular/animations';\nimport {inject, InjectionToken} from '@angular/core';\n\nimport {TUI_ANIMATIONS_DURATION} from './animations-duration';\n\nexport const TUI_ANIMATION_OPTIONS = new InjectionToken<AnimationOptions>(\n `Options for Taiga UI animations`,\n {\n factory: () => ({\n params: {\n duration: inject(TUI_ANIMATIONS_DURATION),\n },\n }),\n },\n);\n","import {InjectionToken, isDevMode} from '@angular/core';\n\nexport const TUI_ASSERT_ENABLED = new InjectionToken(\n `Flag to enable assertions across Taiga UI`,\n {\n factory: () => isDevMode(),\n },\n);\n","import {InjectionToken} from '@angular/core';\nimport {TuiDataListAccessor} from '@taiga-ui/core/interfaces';\n\nexport const TUI_DATA_LIST_ACCESSOR = new InjectionToken<TuiDataListAccessor>(\n `Accessor for options`,\n);\n","import {InjectionToken} from '@angular/core';\nimport {TuiDataListHost} from '@taiga-ui/core/interfaces';\n\nexport const TUI_DATA_LIST_HOST = new InjectionToken<TuiDataListHost<unknown>>(\n `DataList controller`,\n);\n","import {InjectionToken} from '@angular/core';\n\nexport const TUI_DOCUMENT_OR_SHADOW_ROOT = new InjectionToken<DocumentOrShadowRoot>(\n `Document or ShadowRoot`,\n);\n","import {InjectionToken} from '@angular/core';\nimport {TuiDropdown} from '@taiga-ui/core/interfaces';\n\nexport const TUI_DROPDOWN_DIRECTIVE = new InjectionToken<TuiDropdown>(\n `Directive controlling TuiDropdownBoxComponent`,\n);\n","import {ElementRef, InjectionToken} from '@angular/core';\n\nexport const TUI_ELEMENT_REF = new InjectionToken<ElementRef>(\n `ElementRef when you cannot use @Input for single time injection`,\n);\n","import {InjectionToken} from '@angular/core';\nimport {TuiDayOfWeek} from '@taiga-ui/cdk';\n\nexport const TUI_FIRST_DAY_OF_WEEK = new InjectionToken<TuiDayOfWeek>(\n `The first day of the week index`,\n {\n factory: () => TuiDayOfWeek.Monday,\n },\n);\n","import {InjectionToken} from '@angular/core';\nimport {extractI18n} from '@taiga-ui/i18n';\n\nexport const TUI_MONTHS = new InjectionToken(`Localized months names`, {\n factory: extractI18n(`months`),\n});\n\nexport const TUI_CLOSE_WORD = new InjectionToken(`i18n 'close' word`, {\n factory: extractI18n(`close`),\n});\n\nexport const TUI_NOTHING_FOUND_MESSAGE = new InjectionToken(\n `i18n 'Nothing found' message`,\n {\n factory: extractI18n(`nothingFoundMessage`),\n },\n);\n\nexport const TUI_DEFAULT_ERROR_MESSAGE = new InjectionToken(`i18n of error message`, {\n factory: extractI18n(`defaultErrorMessage`),\n});\n\nexport const TUI_SPIN_TEXTS = new InjectionToken(`spin i18n texts`, {\n factory: extractI18n(`spinTexts`),\n});\n\nexport const TUI_SHORT_WEEK_DAYS = new InjectionToken(`calendars i18n texts`, {\n factory: extractI18n(`shortWeekDays`),\n});\n","import {InjectionToken} from '@angular/core';\n\nexport const TUI_ICONS_PLACE: InjectionToken<string> = new InjectionToken<string>(\n `Recommended paths to icons from documentation guide`,\n {\n factory: () => `assets/taiga-ui/icons`,\n },\n);\n","import {InjectionToken} from '@angular/core';\n\nexport const TUI_ICONS = new InjectionToken<Record<string, string>>(\n `A key/value dictionary of icon names and src to be defined with TuiSvgService`,\n {\n factory: () => ({}),\n },\n);\n","import {inject, InjectionToken} from '@angular/core';\nimport {TuiStringHandler} from '@taiga-ui/cdk';\nimport {iconsPathFactory} from '@taiga-ui/core/utils';\n\nimport {TUI_ICONS_PLACE} from './icon-place';\n\nexport const TUI_ICONS_PATH: InjectionToken<TuiStringHandler<string>> =\n new InjectionToken<TuiStringHandler<string>>(\n `A handler to retrieve USE id for icon by name`,\n {factory: () => iconsPathFactory(inject(TUI_ICONS_PLACE))},\n );\n","import {InjectionToken} from '@angular/core';\nimport {TuiMedia} from '@taiga-ui/core/interfaces';\n\nexport const TUI_MEDIA = new InjectionToken<TuiMedia>(`Token for media constant`, {\n factory: () => ({\n mobile: 768,\n desktopSmall: 1024,\n desktopLarge: 1280,\n }),\n});\n","import {inject, InjectionToken, NgZone} from '@angular/core';\nimport {WINDOW} from '@ng-web-apis/common';\nimport {tuiZoneOptimized, typedFromEvent} from '@taiga-ui/cdk';\nimport {tuiIsMobile} from '@taiga-ui/core/utils';\nimport {Observable} from 'rxjs';\nimport {distinctUntilChanged, map, share, startWith} from 'rxjs/operators';\n\nimport {TUI_MEDIA} from './media';\n\nexport const TUI_IS_MOBILE_RES = new InjectionToken<Observable<boolean>>(\n `Mobile resolution stream for private providers`,\n {\n factory: () => {\n const windowRef = inject(WINDOW);\n const media = inject(TUI_MEDIA);\n\n return typedFromEvent(windowRef, `resize`).pipe(\n share(),\n startWith(null),\n map(() => tuiIsMobile(windowRef, media)),\n distinctUntilChanged(),\n tuiZoneOptimized(inject(NgZone)),\n );\n },\n },\n);\n","import {InjectionToken} from '@angular/core';\nimport {TuiBrightness} from '@taiga-ui/core/types';\nimport {Observable} from 'rxjs';\n\nexport const TUI_MODE: InjectionToken<Observable<TuiBrightness | null>> =\n new InjectionToken<Observable<TuiBrightness | null>>(\n `Mode stream for private providers`,\n );\n","import {InjectionToken, ValueProvider} from '@angular/core';\nimport {TuiNotification} from '@taiga-ui/core/enums';\nimport {TuiAlertOptions} from '@taiga-ui/core/interfaces';\n\nexport interface TuiNotificationDefaultOptions\n extends Omit<TuiAlertOptions<unknown>, 'data'> {\n readonly defaultAutoCloseTime: number;\n}\n\n/**\n * @deprecated: remove in v3.0, use TuiNotificationDefaultOptions\n */\nexport type NotificationTokenOptions = TuiNotificationDefaultOptions;\n\n/** Default values for the notification options. */\nexport const TUI_NOTIFICATION_DEFAULT_OPTIONS: TuiNotificationDefaultOptions = {\n autoClose: true,\n label: ``,\n status: TuiNotification.Info,\n hasIcon: true,\n hasCloseButton: true,\n defaultAutoCloseTime: 3000,\n};\n\nexport const TUI_NOTIFICATION_OPTIONS = new InjectionToken<TuiNotificationDefaultOptions>(\n `Default parameters for notification alert component`,\n {\n factory: () => TUI_NOTIFICATION_DEFAULT_OPTIONS,\n },\n);\n\nexport function tuiNotificationOptionsProvider(\n options: Partial<TuiNotificationDefaultOptions>,\n): ValueProvider {\n return {\n provide: TUI_NOTIFICATION_OPTIONS,\n useValue: {...TUI_NOTIFICATION_DEFAULT_OPTIONS, ...options},\n };\n}\n","import {InjectionToken} from '@angular/core';\nimport {CHAR_NO_BREAK_SPACE} from '@taiga-ui/cdk';\nimport {TuiNumberFormatSettings} from '@taiga-ui/core/interfaces';\n\nexport const TUI_NUMBER_FORMAT = new InjectionToken<TuiNumberFormatSettings>(\n `Formatting configuration for displayed numbers`,\n {\n factory: () => ({\n decimalSeparator: `,`,\n thousandSeparator: CHAR_NO_BREAK_SPACE,\n zeroPadding: true,\n }),\n },\n);\n","import {InjectionToken, TemplateRef} from '@angular/core';\nimport {TuiContextWithImplicit} from '@taiga-ui/cdk';\nimport {PolymorpheusContent} from '@tinkoff/ng-polymorpheus';\n\nexport const TUI_OPTION_CONTENT = new InjectionToken<\n PolymorpheusContent<TuiContextWithImplicit<TemplateRef<Record<string, unknown>>>>\n>(`Content for tuiOption component`);\n","import {inject, InjectionToken} from '@angular/core';\nimport {Observable} from 'rxjs';\nimport {map} from 'rxjs/operators';\n\nimport {TUI_FIRST_DAY_OF_WEEK, TUI_SHORT_WEEK_DAYS} from './index';\n\nexport type WEEK_DAYS_NAMES = [string, string, string, string, string, string, string];\n\n// TODO: 3.0 Remove export in ivy compilation\nexport const convertToSundayFirstWeekFormat = (\n weekDaysNames: WEEK_DAYS_NAMES,\n): WEEK_DAYS_NAMES => {\n const sundayIndex = weekDaysNames.length - 1;\n\n return [\n weekDaysNames[sundayIndex],\n ...weekDaysNames.slice(0, sundayIndex),\n ] as WEEK_DAYS_NAMES;\n};\n\nexport const TUI_ORDERED_SHORT_WEEK_DAYS = new InjectionToken<\n Observable<WEEK_DAYS_NAMES>\n>(`Ordered calendars i18n texts`, {\n factory: () => {\n const firstDayOfWeekIndex = inject(TUI_FIRST_DAY_OF_WEEK);\n\n return inject(TUI_SHORT_WEEK_DAYS).pipe(\n map(convertToSundayFirstWeekFormat),\n map(\n weekDays =>\n [\n ...weekDays.slice(firstDayOfWeekIndex),\n ...weekDays.slice(0, firstDayOfWeekIndex),\n ] as WEEK_DAYS_NAMES,\n ),\n );\n },\n});\n","import {TUI_SANITIZER as TOKEN} from '@taiga-ui/cdk';\n\nexport const TUI_SANITIZER = TOKEN;\n","import {DOCUMENT} from '@angular/common';\nimport {ElementRef, inject, InjectionToken} from '@angular/core';\n\n/**\n * Scrollable container\n */\nexport const TUI_SCROLL_REF = new InjectionToken<ElementRef<HTMLElement>>(\n `[TUI_SCROLL_REF]`,\n {\n factory: () => new ElementRef(inject(DOCUMENT).documentElement),\n },\n);\n","import {InjectionToken} from '@angular/core';\nimport {TuiStringHandler} from '@taiga-ui/cdk';\nimport {svgLinearGradientProcessor} from '@taiga-ui/cdk/utils/svg';\n\nexport const TUI_SVG_CONTENT_PROCESSOR: InjectionToken<TuiStringHandler<string>> =\n new InjectionToken<TuiStringHandler<string>>(\n `Transform function the contents of the loaded svg file`,\n {factory: () => svgLinearGradientProcessor},\n );\n","import {InjectionToken} from '@angular/core';\nimport {TuiStringHandler} from '@taiga-ui/cdk';\nimport {identity} from 'rxjs';\n\nexport const TUI_SVG_SRC_PROCESSOR: InjectionToken<TuiStringHandler<string>> =\n new InjectionToken<TuiStringHandler<string>>(`Source path processor for svg`, {\n factory: () => identity,\n });\n","import {InjectionToken} from '@angular/core';\nimport {TuiAppearance} from '@taiga-ui/core/enums';\n\nexport const TUI_TEXTFIELD_APPEARANCE = new InjectionToken<string>(\n `Appearance for inputs`,\n {\n factory: () => TuiAppearance.Textfield,\n },\n);\n","import {InjectionToken} from '@angular/core';\nimport {TuiTextfieldHost} from '@taiga-ui/core/interfaces';\n\nexport const TUI_TEXTFIELD_HOST = new InjectionToken<TuiTextfieldHost>(\n `An interface to communicate with textfield based controls`,\n);\n","import {InjectionToken} from '@angular/core';\n\nexport const TUI_THEME = new InjectionToken<string>(`Theme name`, {\n factory: () => `Taiga`,\n});\n","import {InjectionToken} from '@angular/core';\nimport {ControlValueAccessor} from '@angular/forms';\n\nexport const TUI_VALUE_ACCESSOR = new InjectionToken<ControlValueAccessor>(\n `Buffer token to pass NG_VALUE_ACCESSOR to a different Injector`,\n);\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["TOKEN"],"mappings":"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"}
@@ -1,21 +1,20 @@
1
1
  import { __assign, __decorate, __param, __read } from 'tslib';
2
- import { DOCUMENT, ViewportScroller, CommonModule } from '@angular/common';
3
- import { Inject, NgZone, ElementRef, Optional, Component, ChangeDetectionStrategy, Renderer2, Input, Directive, NgModule } from '@angular/core';
4
- import { ANIMATION_FRAME, WINDOW } from '@ng-web-apis/common';
5
- import { tuiZoneOptimized, typedFromEvent, preventDefault, stopPropagation, tuiZonefree, POLLING_TIME, TuiDestroyService, TuiLetModule } from '@taiga-ui/cdk';
2
+ import { Inject, NgZone, ElementRef, Component, ChangeDetectionStrategy, Renderer2, Self, Input, Directive, NgModule } from '@angular/core';
3
+ import { ANIMATION_FRAME } from '@ng-web-apis/common';
4
+ import { tuiZoneOptimized, tuiTypedFromEvent, tuiPreventDefault, tuiStopPropagation, tuiZonefree, POLLING_TIME, tuiScrollFrom, TuiDestroyService, TuiLetModule } from '@taiga-ui/cdk';
6
5
  import { tuiFadeIn } from '@taiga-ui/core/animations';
7
6
  import { MODE_PROVIDER } from '@taiga-ui/core/providers';
8
7
  import { TUI_ANIMATION_OPTIONS, TUI_SCROLL_REF, TUI_MODE, TUI_ELEMENT_REF } from '@taiga-ui/core/tokens';
9
- import { Observable, merge, fromEvent } from 'rxjs';
8
+ import { Observable, merge } from 'rxjs';
10
9
  import { throttleTime, map, startWith, distinctUntilChanged, switchMap, takeUntil } from 'rxjs/operators';
10
+ import { DOCUMENT, CommonModule } from '@angular/common';
11
11
 
12
12
  // @dynamic
13
13
  var TuiScrollControlsComponent = /** @class */ (function () {
14
- function TuiScrollControlsComponent(options, ngZone, documentRef, scrollRef, animationFrame$, mode$) {
14
+ function TuiScrollControlsComponent(options, ngZone, scrollRef, animationFrame$, mode$) {
15
15
  var _this = this;
16
16
  this.options = options;
17
17
  this.ngZone = ngZone;
18
- this.documentRef = documentRef;
19
18
  this.scrollRef = scrollRef;
20
19
  this.animationFrame$ = animationFrame$;
21
20
  this.mode$ = mode$;
@@ -24,9 +23,7 @@ var TuiScrollControlsComponent = /** @class */ (function () {
24
23
  }
25
24
  Object.defineProperty(TuiScrollControlsComponent.prototype, "scrollbars", {
26
25
  get: function () {
27
- var _a = this.scrollRef
28
- ? this.scrollRef.nativeElement
29
- : this.documentRef.documentElement, clientHeight = _a.clientHeight, scrollHeight = _a.scrollHeight, clientWidth = _a.clientWidth, scrollWidth = _a.scrollWidth;
26
+ var _a = this.scrollRef.nativeElement, clientHeight = _a.clientHeight, scrollHeight = _a.scrollHeight, clientWidth = _a.clientWidth, scrollWidth = _a.scrollWidth;
30
27
  return [
31
28
  Math.ceil((clientHeight / scrollHeight) * 100) < 100,
32
29
  Math.ceil((clientWidth / scrollWidth) * 100) < 100,
@@ -38,8 +35,7 @@ var TuiScrollControlsComponent = /** @class */ (function () {
38
35
  TuiScrollControlsComponent.ctorParameters = function () { return [
39
36
  { type: undefined, decorators: [{ type: Inject, args: [TUI_ANIMATION_OPTIONS,] }] },
40
37
  { type: NgZone, decorators: [{ type: Inject, args: [NgZone,] }] },
41
- { type: Document, decorators: [{ type: Inject, args: [DOCUMENT,] }] },
42
- { type: ElementRef, decorators: [{ type: Optional }, { type: Inject, args: [TUI_SCROLL_REF,] }] },
38
+ { type: ElementRef, decorators: [{ type: Inject, args: [TUI_SCROLL_REF,] }] },
43
39
  { type: Observable, decorators: [{ type: Inject, args: [ANIMATION_FRAME,] }] },
44
40
  { type: Observable, decorators: [{ type: Inject, args: [TUI_MODE,] }] }
45
41
  ]; };
@@ -57,11 +53,9 @@ var TuiScrollControlsComponent = /** @class */ (function () {
57
53
  }),
58
54
  __param(0, Inject(TUI_ANIMATION_OPTIONS)),
59
55
  __param(1, Inject(NgZone)),
60
- __param(2, Inject(DOCUMENT)),
61
- __param(3, Optional()),
62
- __param(3, Inject(TUI_SCROLL_REF)),
63
- __param(4, Inject(ANIMATION_FRAME)),
64
- __param(5, Inject(TUI_MODE))
56
+ __param(2, Inject(TUI_SCROLL_REF)),
57
+ __param(3, Inject(ANIMATION_FRAME)),
58
+ __param(4, Inject(TUI_MODE))
65
59
  ], TuiScrollControlsComponent);
66
60
  return TuiScrollControlsComponent;
67
61
  }());
@@ -69,21 +63,19 @@ var TuiScrollControlsComponent = /** @class */ (function () {
69
63
  var MIN_WIDTH = 24;
70
64
  // @dynamic
71
65
  var TuiScrollbarDirective = /** @class */ (function () {
72
- function TuiScrollbarDirective(ngZone, renderer, destroy$, animationFrame$, wrapper, container, documentRef, windowRef, elementRef, viewportScroller) {
66
+ function TuiScrollbarDirective(ngZone, renderer, destroy$, animationFrame$, wrapper, container, doc, el) {
73
67
  var _this = this;
74
68
  this.wrapper = wrapper;
75
69
  this.container = container;
76
- this.documentRef = documentRef;
77
- this.windowRef = windowRef;
78
- this.elementRef = elementRef;
79
- this.viewportScroller = viewportScroller;
70
+ this.doc = doc;
71
+ this.el = el;
80
72
  this.tuiScrollbar = 'vertical';
81
- var nativeElement = this.elementRef.nativeElement;
82
- var mousedown$ = typedFromEvent(nativeElement, 'mousedown');
83
- var mousemove$ = typedFromEvent(this.documentRef, 'mousemove');
84
- var mouseup$ = typedFromEvent(this.documentRef, 'mouseup');
85
- var mousedownWrapper$ = typedFromEvent(wrapper.nativeElement, 'mousedown');
86
- merge(mousedownWrapper$.pipe(preventDefault(), map(function (event) { return _this.getScrolled(event, 0.5, 0.5); })), mousedown$.pipe(preventDefault(), stopPropagation(), switchMap(function (event) {
73
+ var nativeElement = this.el.nativeElement;
74
+ var mousedown$ = tuiTypedFromEvent(nativeElement, 'mousedown');
75
+ var mousemove$ = tuiTypedFromEvent(this.doc, 'mousemove');
76
+ var mouseup$ = tuiTypedFromEvent(this.doc, 'mouseup');
77
+ var mousedownWrapper$ = tuiTypedFromEvent(this.wrapper.nativeElement, 'mousedown');
78
+ merge(mousedownWrapper$.pipe(tuiPreventDefault(), map(function (event) { return _this.getScrolled(event, 0.5, 0.5); })), mousedown$.pipe(tuiPreventDefault(), tuiStopPropagation(), switchMap(function (event) {
87
79
  var rect = nativeElement.getBoundingClientRect();
88
80
  var vertical = getOffsetVertical(event, rect);
89
81
  var horizontal = getOffsetHorizontal(event, rect);
@@ -92,22 +84,14 @@ var TuiScrollbarDirective = /** @class */ (function () {
92
84
  .pipe(tuiZonefree(ngZone), takeUntil(destroy$))
93
85
  .subscribe(function (_a) {
94
86
  var _b = __read(_a, 2), scrollTop = _b[0], scrollLeft = _b[1];
95
- var _c = __read(_this.viewportScroller.getScrollPosition(), 2), x = _c[0], y = _c[1];
96
- if (!_this.container) {
97
- _this.viewportScroller.scrollToPosition([
98
- _this.tuiScrollbar === 'vertical' ? x : scrollLeft,
99
- _this.tuiScrollbar === 'vertical' ? scrollTop : y,
100
- ]);
101
- return;
102
- }
103
87
  if (_this.tuiScrollbar === 'vertical') {
104
- renderer.setProperty(_this.container.nativeElement, 'scrollTop', scrollTop);
88
+ renderer.setProperty(_this.element, 'scrollTop', scrollTop);
105
89
  }
106
90
  else {
107
- renderer.setProperty(_this.container.nativeElement, 'scrollLeft', scrollLeft);
91
+ renderer.setProperty(_this.element, 'scrollLeft', scrollLeft);
108
92
  }
109
93
  });
110
- merge(fromEvent(this.container ? this.container.nativeElement : this.windowRef, 'scroll'), animationFrame$.pipe(throttleTime(POLLING_TIME)))
94
+ merge(animationFrame$.pipe(throttleTime(POLLING_TIME)), tuiScrollFrom(this.element))
111
95
  .pipe(tuiZonefree(ngZone), takeUntil(destroy$))
112
96
  .subscribe(function () {
113
97
  if (_this.tuiScrollbar === 'vertical') {
@@ -122,7 +106,7 @@ var TuiScrollbarDirective = /** @class */ (function () {
122
106
  }
123
107
  Object.defineProperty(TuiScrollbarDirective.prototype, "scrolled", {
124
108
  get: function () {
125
- var _a = this.computedContainer, scrollTop = _a.scrollTop, scrollHeight = _a.scrollHeight, clientHeight = _a.clientHeight, scrollLeft = _a.scrollLeft, scrollWidth = _a.scrollWidth, clientWidth = _a.clientWidth;
109
+ var _a = this.element, scrollTop = _a.scrollTop, scrollHeight = _a.scrollHeight, clientHeight = _a.clientHeight, scrollLeft = _a.scrollLeft, scrollWidth = _a.scrollWidth, clientWidth = _a.clientWidth;
126
110
  return this.tuiScrollbar === 'vertical'
127
111
  ? scrollTop / (scrollHeight - clientHeight)
128
112
  : scrollLeft / (scrollWidth - clientWidth);
@@ -132,7 +116,7 @@ var TuiScrollbarDirective = /** @class */ (function () {
132
116
  });
133
117
  Object.defineProperty(TuiScrollbarDirective.prototype, "compensation", {
134
118
  get: function () {
135
- var _a = this.computedContainer, clientHeight = _a.clientHeight, scrollHeight = _a.scrollHeight, clientWidth = _a.clientWidth, scrollWidth = _a.scrollWidth;
119
+ var _a = this.element, clientHeight = _a.clientHeight, scrollHeight = _a.scrollHeight, clientWidth = _a.clientWidth, scrollWidth = _a.scrollWidth;
136
120
  if (((clientHeight * clientHeight) / scrollHeight > MIN_WIDTH &&
137
121
  this.tuiScrollbar === 'vertical') ||
138
122
  ((clientWidth * clientWidth) / scrollWidth > MIN_WIDTH &&
@@ -156,7 +140,7 @@ var TuiScrollbarDirective = /** @class */ (function () {
156
140
  });
157
141
  Object.defineProperty(TuiScrollbarDirective.prototype, "view", {
158
142
  get: function () {
159
- var _a = this.computedContainer, clientHeight = _a.clientHeight, scrollHeight = _a.scrollHeight, clientWidth = _a.clientWidth, scrollWidth = _a.scrollWidth;
143
+ var _a = this.element, clientHeight = _a.clientHeight, scrollHeight = _a.scrollHeight, clientWidth = _a.clientWidth, scrollWidth = _a.scrollWidth;
160
144
  return this.tuiScrollbar === 'vertical'
161
145
  ? Math.ceil((clientHeight / scrollHeight) * 100) / 100
162
146
  : Math.ceil((clientWidth / scrollWidth) * 100) / 100;
@@ -164,21 +148,19 @@ var TuiScrollbarDirective = /** @class */ (function () {
164
148
  enumerable: true,
165
149
  configurable: true
166
150
  });
167
- Object.defineProperty(TuiScrollbarDirective.prototype, "computedContainer", {
151
+ Object.defineProperty(TuiScrollbarDirective.prototype, "element", {
168
152
  get: function () {
169
- return this.container
170
- ? this.container.nativeElement
171
- : this.documentRef.scrollingElement;
153
+ return this.container.nativeElement;
172
154
  },
173
155
  enumerable: true,
174
156
  configurable: true
175
157
  });
176
158
  TuiScrollbarDirective.prototype.getScrolled = function (_a, offsetVertical, offsetHorizontal) {
177
159
  var clientY = _a.clientY, clientX = _a.clientX;
178
- var _b = this.elementRef.nativeElement, offsetHeight = _b.offsetHeight, offsetWidth = _b.offsetWidth;
160
+ var _b = this.el.nativeElement, offsetHeight = _b.offsetHeight, offsetWidth = _b.offsetWidth;
179
161
  var _c = this.wrapper.nativeElement.getBoundingClientRect(), top = _c.top, left = _c.left, width = _c.width, height = _c.height;
180
- var maxTop = this.computedContainer.scrollHeight - height;
181
- var maxLeft = this.computedContainer.scrollWidth - width;
162
+ var maxTop = this.element.scrollHeight - height;
163
+ var maxLeft = this.element.scrollWidth - width;
182
164
  var scrolledTop = (clientY - top - offsetHeight * offsetVertical) / (height - offsetHeight);
183
165
  var scrolledLeft = (clientX - left - offsetWidth * offsetHorizontal) / (width - offsetWidth);
184
166
  return [maxTop * scrolledTop, maxLeft * scrolledLeft];
@@ -186,14 +168,12 @@ var TuiScrollbarDirective = /** @class */ (function () {
186
168
  TuiScrollbarDirective.ctorParameters = function () { return [
187
169
  { type: NgZone, decorators: [{ type: Inject, args: [NgZone,] }] },
188
170
  { type: Renderer2, decorators: [{ type: Inject, args: [Renderer2,] }] },
189
- { type: Observable, decorators: [{ type: Inject, args: [TuiDestroyService,] }] },
171
+ { type: Observable, decorators: [{ type: Self }, { type: Inject, args: [TuiDestroyService,] }] },
190
172
  { type: Observable, decorators: [{ type: Inject, args: [ANIMATION_FRAME,] }] },
191
173
  { type: ElementRef, decorators: [{ type: Inject, args: [TUI_ELEMENT_REF,] }] },
192
- { type: ElementRef, decorators: [{ type: Optional }, { type: Inject, args: [TUI_SCROLL_REF,] }] },
174
+ { type: ElementRef, decorators: [{ type: Inject, args: [TUI_SCROLL_REF,] }] },
193
175
  { type: Document, decorators: [{ type: Inject, args: [DOCUMENT,] }] },
194
- { type: Window, decorators: [{ type: Inject, args: [WINDOW,] }] },
195
- { type: ElementRef, decorators: [{ type: Inject, args: [ElementRef,] }] },
196
- { type: ViewportScroller, decorators: [{ type: Inject, args: [ViewportScroller,] }] }
176
+ { type: ElementRef, decorators: [{ type: Inject, args: [ElementRef,] }] }
197
177
  ]; };
198
178
  __decorate([
199
179
  Input()
@@ -205,15 +185,12 @@ var TuiScrollbarDirective = /** @class */ (function () {
205
185
  }),
206
186
  __param(0, Inject(NgZone)),
207
187
  __param(1, Inject(Renderer2)),
208
- __param(2, Inject(TuiDestroyService)),
188
+ __param(2, Self()), __param(2, Inject(TuiDestroyService)),
209
189
  __param(3, Inject(ANIMATION_FRAME)),
210
190
  __param(4, Inject(TUI_ELEMENT_REF)),
211
- __param(5, Optional()),
212
191
  __param(5, Inject(TUI_SCROLL_REF)),
213
192
  __param(6, Inject(DOCUMENT)),
214
- __param(7, Inject(WINDOW)),
215
- __param(8, Inject(ElementRef)),
216
- __param(9, Inject(ViewportScroller))
193
+ __param(7, Inject(ElementRef))
217
194
  ], TuiScrollbarDirective);
218
195
  return TuiScrollbarDirective;
219
196
  }());