@taiga-ui/core 5.18.0 → 5.19.0-canary.b454a40
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/components/calendar/calendar.component.d.ts +1 -1
- package/components/error/error.d.ts +2 -2
- package/components/error/error.directive.d.ts +26 -7
- package/components/input/input.directive.d.ts +30 -3
- package/components/scrollbar/scroll-controls.component.d.ts +3 -2
- package/components/scrollbar/scroll-ref.directive.d.ts +1 -0
- package/components/scrollbar/scrollbar.component.d.ts +1 -1
- package/components/scrollbar/scrollbar.directive.d.ts +2 -3
- package/components/scrollbar/scrollbar.service.d.ts +4 -1
- package/components/textfield/textfield.component.d.ts +12 -2
- package/fesm2022/taiga-ui-core-components-button.mjs +2 -2
- package/fesm2022/taiga-ui-core-components-button.mjs.map +1 -1
- package/fesm2022/taiga-ui-core-components-calendar.mjs +2 -2
- package/fesm2022/taiga-ui-core-components-calendar.mjs.map +1 -1
- package/fesm2022/taiga-ui-core-components-cell.mjs +3 -3
- package/fesm2022/taiga-ui-core-components-cell.mjs.map +1 -1
- package/fesm2022/taiga-ui-core-components-checkbox.mjs +2 -2
- package/fesm2022/taiga-ui-core-components-checkbox.mjs.map +1 -1
- package/fesm2022/taiga-ui-core-components-data-list.mjs +4 -4
- package/fesm2022/taiga-ui-core-components-data-list.mjs.map +1 -1
- package/fesm2022/taiga-ui-core-components-error.mjs +98 -28
- package/fesm2022/taiga-ui-core-components-error.mjs.map +1 -1
- package/fesm2022/taiga-ui-core-components-icon.mjs +2 -2
- package/fesm2022/taiga-ui-core-components-icon.mjs.map +1 -1
- package/fesm2022/taiga-ui-core-components-input.mjs +50 -10
- package/fesm2022/taiga-ui-core-components-input.mjs.map +1 -1
- package/fesm2022/taiga-ui-core-components-label.mjs +3 -3
- package/fesm2022/taiga-ui-core-components-label.mjs.map +1 -1
- package/fesm2022/taiga-ui-core-components-link.mjs +2 -2
- package/fesm2022/taiga-ui-core-components-link.mjs.map +1 -1
- package/fesm2022/taiga-ui-core-components-notification.mjs +2 -2
- package/fesm2022/taiga-ui-core-components-notification.mjs.map +1 -1
- package/fesm2022/taiga-ui-core-components-radio.mjs +2 -2
- package/fesm2022/taiga-ui-core-components-radio.mjs.map +1 -1
- package/fesm2022/taiga-ui-core-components-root.mjs +3 -3
- package/fesm2022/taiga-ui-core-components-root.mjs.map +1 -1
- package/fesm2022/taiga-ui-core-components-scrollbar.mjs +86 -51
- package/fesm2022/taiga-ui-core-components-scrollbar.mjs.map +1 -1
- package/fesm2022/taiga-ui-core-components-textfield.mjs +15 -5
- package/fesm2022/taiga-ui-core-components-textfield.mjs.map +1 -1
- package/fesm2022/taiga-ui-core-components-title.mjs +3 -3
- package/fesm2022/taiga-ui-core-components-title.mjs.map +1 -1
- package/fesm2022/taiga-ui-core-directives-appearance.mjs +3 -3
- package/fesm2022/taiga-ui-core-directives-appearance.mjs.map +1 -1
- package/fesm2022/taiga-ui-core-directives-group.mjs +3 -3
- package/fesm2022/taiga-ui-core-directives-group.mjs.map +1 -1
- package/fesm2022/taiga-ui-core-directives-icons.mjs +3 -3
- package/fesm2022/taiga-ui-core-directives-icons.mjs.map +1 -1
- package/fesm2022/taiga-ui-core-portals-alert.mjs +3 -3
- package/fesm2022/taiga-ui-core-portals-alert.mjs.map +1 -1
- package/fesm2022/taiga-ui-core-portals-dialog.mjs +2 -2
- package/fesm2022/taiga-ui-core-portals-dialog.mjs.map +1 -1
- package/fesm2022/taiga-ui-core-portals-dropdown.mjs +2 -2
- package/fesm2022/taiga-ui-core-portals-hint.mjs +16 -5
- package/fesm2022/taiga-ui-core-portals-hint.mjs.map +1 -1
- package/fesm2022/taiga-ui-core-portals-modal.mjs +3 -3
- package/fesm2022/taiga-ui-core-portals-modal.mjs.map +1 -1
- package/fesm2022/taiga-ui-core-tokens.mjs +4 -2
- package/fesm2022/taiga-ui-core-tokens.mjs.map +1 -1
- package/package.json +36 -36
- package/portals/hint/hint-hover.directive.d.ts +5 -0
- package/portals/hint/hint.component.d.ts +1 -1
- package/tokens/index.d.ts +1 -0
- package/tokens/timeline-support.d.ts +2 -0
|
@@ -1,13 +1,16 @@
|
|
|
1
1
|
import { CdkScrollable } from '@angular/cdk/scrolling';
|
|
2
2
|
import { DOCUMENT, AsyncPipe } from '@angular/common';
|
|
3
3
|
import * as i0 from '@angular/core';
|
|
4
|
-
import { InjectionToken, ElementRef, inject,
|
|
4
|
+
import { InjectionToken, ElementRef, inject, ChangeDetectionStrategy, ViewEncapsulation, Component, Directive, Injectable, input, DestroyRef, effect } from '@angular/core';
|
|
5
5
|
import { TuiAnimated } from '@taiga-ui/cdk/directives/animated';
|
|
6
6
|
import { tuiInjectElement, tuiGetElementOffset } from '@taiga-ui/cdk/utils/dom';
|
|
7
|
+
import { TUI_TIMELINE_SUPPORT } from '@taiga-ui/core/tokens';
|
|
8
|
+
import { Observable, throttleTime, map, startWith, distinctUntilChanged, merge, filter, switchMap, takeUntil, of, timer } from 'rxjs';
|
|
7
9
|
import { WA_ANIMATION_FRAME } from '@ng-web-apis/common';
|
|
8
10
|
import { tuiZonefreeScheduler, tuiZoneOptimized, tuiTypedFromEvent, tuiZonefree, tuiScrollFrom } from '@taiga-ui/cdk/observables';
|
|
9
|
-
import {
|
|
11
|
+
import { TUI_VERSION } from '@taiga-ui/cdk/constants';
|
|
10
12
|
import { tuiProvide, tuiCreateOptions } from '@taiga-ui/cdk/utils/di';
|
|
13
|
+
import { tuiWithStyles } from '@taiga-ui/cdk/utils/miscellaneous';
|
|
11
14
|
import { takeUntilDestroyed } from '@angular/core/rxjs-interop';
|
|
12
15
|
import { WA_IS_IOS } from '@ng-web-apis/platform';
|
|
13
16
|
|
|
@@ -15,15 +18,27 @@ const SCROLL_REF_SELECTOR = '[tuiScrollRef]';
|
|
|
15
18
|
const TUI_SCROLL_REF = new InjectionToken(ngDevMode ? 'TUI_SCROLL_REF' : '', {
|
|
16
19
|
factory: () => new ElementRef(inject(DOCUMENT).documentElement),
|
|
17
20
|
});
|
|
21
|
+
class Styles {
|
|
22
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.25", ngImport: i0, type: Styles, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
23
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.25", type: Styles, isStandalone: true, selector: "ng-component", exportAs: ["tui-scroll-ref-5.19.0-canary.b454a40"], ngImport: i0, template: '', isInline: true, styles: ["[tuiScrollRef]:where(*[data-tui-version=\"5.19.0-canary.b454a40\"]){timeline-scope:--t-scrollbar-y,--t-scrollbar-x;scroll-timeline:--t-scrollbar-x x,--t-scrollbar-y y}[tuiScrollRef]:where(*[data-tui-version=\"5.19.0-canary.b454a40\"]):not(._native){scrollbar-width:none;-ms-overflow-style:none}[tuiScrollRef]:where(*[data-tui-version=\"5.19.0-canary.b454a40\"]):not(._native)::-webkit-scrollbar,[tuiScrollRef]:where(*[data-tui-version=\"5.19.0-canary.b454a40\"]):not(._native)::-webkit-scrollbar-thumb{display:none}[tuiScrollRef]:where(*[data-tui-version=\"5.19.0-canary.b454a40\"]):where(cdk-virtual-scroll-viewport){display:flex;scroll-timeline:--t-scrollbar-x x,--t-scrollbar-y y}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
|
|
24
|
+
}
|
|
25
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.25", ngImport: i0, type: Styles, decorators: [{
|
|
26
|
+
type: Component,
|
|
27
|
+
args: [{ template: '', encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, exportAs: `tui-scroll-ref-${TUI_VERSION}`, styles: ["[tuiScrollRef]:where(*[data-tui-version=\"5.19.0-canary.b454a40\"]){timeline-scope:--t-scrollbar-y,--t-scrollbar-x;scroll-timeline:--t-scrollbar-x x,--t-scrollbar-y y}[tuiScrollRef]:where(*[data-tui-version=\"5.19.0-canary.b454a40\"]):not(._native){scrollbar-width:none;-ms-overflow-style:none}[tuiScrollRef]:where(*[data-tui-version=\"5.19.0-canary.b454a40\"]):not(._native)::-webkit-scrollbar,[tuiScrollRef]:where(*[data-tui-version=\"5.19.0-canary.b454a40\"]):not(._native)::-webkit-scrollbar-thumb{display:none}[tuiScrollRef]:where(*[data-tui-version=\"5.19.0-canary.b454a40\"]):where(cdk-virtual-scroll-viewport){display:flex;scroll-timeline:--t-scrollbar-x x,--t-scrollbar-y y}\n"] }]
|
|
28
|
+
}] });
|
|
18
29
|
class TuiScrollRef {
|
|
30
|
+
constructor() {
|
|
31
|
+
this.nothing = tuiWithStyles(Styles);
|
|
32
|
+
}
|
|
19
33
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.25", ngImport: i0, type: TuiScrollRef, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
|
|
20
|
-
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "19.2.25", type: TuiScrollRef, isStandalone: true, selector: "[tuiScrollRef]", providers: [tuiProvide(TUI_SCROLL_REF, ElementRef)], ngImport: i0 }); }
|
|
34
|
+
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "19.2.25", type: TuiScrollRef, isStandalone: true, selector: "[tuiScrollRef]", host: { attributes: { "data-tui-version": "5.19.0-canary.b454a40", "tuiScrollRef": "" } }, providers: [tuiProvide(TUI_SCROLL_REF, ElementRef)], ngImport: i0 }); }
|
|
21
35
|
}
|
|
22
36
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.25", ngImport: i0, type: TuiScrollRef, decorators: [{
|
|
23
37
|
type: Directive,
|
|
24
38
|
args: [{
|
|
25
39
|
selector: '[tuiScrollRef]',
|
|
26
40
|
providers: [tuiProvide(TUI_SCROLL_REF, ElementRef)],
|
|
41
|
+
host: { 'data-tui-version': TUI_VERSION, tuiScrollRef: '' },
|
|
27
42
|
}]
|
|
28
43
|
}] });
|
|
29
44
|
|
|
@@ -61,17 +76,21 @@ class TuiScrollbarService extends Observable {
|
|
|
61
76
|
})));
|
|
62
77
|
}
|
|
63
78
|
getScrolled({ clientY, clientX }, offsetY, offsetX) {
|
|
79
|
+
const rect = this.el.parentElement.getBoundingClientRect();
|
|
80
|
+
const { top, left, right, width, height } = rect;
|
|
64
81
|
const { offsetHeight, offsetWidth } = this.el;
|
|
65
|
-
const { top, left, right, width, height } = this.el.parentElement.getBoundingClientRect();
|
|
66
82
|
const rtl = this.el.matches('[dir="rtl"] :scope');
|
|
67
83
|
const inline = rtl ? right : left;
|
|
68
84
|
const multiplier = rtl ? -1 : 1;
|
|
69
85
|
const maxTop = this.element.scrollHeight - height;
|
|
70
86
|
const maxLeft = this.element.scrollWidth - width;
|
|
71
|
-
const
|
|
72
|
-
const
|
|
87
|
+
const y = (clientY - top - offsetHeight * offsetY) / (height - offsetHeight);
|
|
88
|
+
const x = (clientX - inline - offsetWidth * offsetX * multiplier) /
|
|
73
89
|
(width - offsetWidth);
|
|
74
|
-
return [
|
|
90
|
+
return [
|
|
91
|
+
width > height ? undefined : maxTop * y,
|
|
92
|
+
width > height ? maxLeft * x : undefined,
|
|
93
|
+
];
|
|
75
94
|
}
|
|
76
95
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.25", ngImport: i0, type: TuiScrollbarService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
77
96
|
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.2.25", ngImport: i0, type: TuiScrollbarService }); }
|
|
@@ -91,27 +110,17 @@ class TuiScrollbarPosition extends Observable {
|
|
|
91
110
|
constructor() {
|
|
92
111
|
super((subscriber) => this.stream$.subscribe(subscriber));
|
|
93
112
|
this.scrollRef = inject(TUI_SCROLL_REF);
|
|
94
|
-
this.stream$ = merge(inject(WA_ANIMATION_FRAME).pipe(throttleTime(100, tuiZonefreeScheduler())), tuiScrollFrom(this.el)).pipe(tuiZonefree(), map(() => {
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
}
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
return this.tuiScrollbar() === 'vertical'
|
|
106
|
-
? {
|
|
107
|
-
top: thumb,
|
|
108
|
-
height: view,
|
|
109
|
-
}
|
|
110
|
-
: {
|
|
111
|
-
insetInlineStart: thumb,
|
|
112
|
-
width: view,
|
|
113
|
-
};
|
|
114
|
-
}));
|
|
113
|
+
this.stream$ = merge(inject(WA_ANIMATION_FRAME).pipe(throttleTime(100, tuiZonefreeScheduler())), tuiScrollFrom(this.el)).pipe(tuiZonefree(), map(() => ({
|
|
114
|
+
scrollTop: this.el.scrollTop,
|
|
115
|
+
scrollHeight: this.el.scrollHeight,
|
|
116
|
+
clientHeight: this.el.clientHeight,
|
|
117
|
+
scrollLeft: this.el.scrollLeft,
|
|
118
|
+
scrollWidth: this.el.scrollWidth,
|
|
119
|
+
clientWidth: this.el.clientWidth,
|
|
120
|
+
})), map((dimensions) => ({
|
|
121
|
+
insetBlockStart: `${this.getThumb(dimensions) * 100}%`,
|
|
122
|
+
blockSize: `${this.getView(dimensions) * 100}%`,
|
|
123
|
+
})));
|
|
115
124
|
this.tuiScrollbar = input('vertical');
|
|
116
125
|
}
|
|
117
126
|
get el() {
|
|
@@ -158,22 +167,16 @@ class TuiScrollbarDirective {
|
|
|
158
167
|
this.scrollSub = inject(TuiScrollbarService)
|
|
159
168
|
.pipe(takeUntilDestroyed())
|
|
160
169
|
.subscribe(([top, left]) => {
|
|
161
|
-
this.scrollRef.nativeElement.
|
|
162
|
-
if (this.tuiScrollbar() === 'horizontal') {
|
|
163
|
-
this.scrollRef.nativeElement.scrollLeft = left;
|
|
164
|
-
}
|
|
165
|
-
else {
|
|
166
|
-
this.scrollRef.nativeElement.scrollTop = top;
|
|
167
|
-
}
|
|
168
|
-
this.scrollRef.nativeElement.style.scrollBehavior = '';
|
|
170
|
+
this.scrollRef.nativeElement.scrollTo({ top, left, behavior: 'instant' });
|
|
169
171
|
});
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
172
|
+
if (!inject(TUI_TIMELINE_SUPPORT)) {
|
|
173
|
+
inject(TuiScrollbarPosition)
|
|
174
|
+
.pipe(takeUntilDestroyed())
|
|
175
|
+
.subscribe((position) => Object.assign(this.style, position));
|
|
176
|
+
}
|
|
174
177
|
}
|
|
175
178
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.25", ngImport: i0, type: TuiScrollbarDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
|
|
176
|
-
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "
|
|
179
|
+
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "19.2.25", type: TuiScrollbarDirective, isStandalone: true, selector: "[tuiScrollbar]", providers: [TuiScrollbarService], hostDirectives: [{ directive: TuiScrollbarPosition, inputs: ["tuiScrollbar", "tuiScrollbar"] }], ngImport: i0 }); }
|
|
177
180
|
}
|
|
178
181
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.25", ngImport: i0, type: TuiScrollbarDirective, decorators: [{
|
|
179
182
|
type: Directive,
|
|
@@ -182,7 +185,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.25", ngImpo
|
|
|
182
185
|
providers: [TuiScrollbarService],
|
|
183
186
|
hostDirectives: [{ directive: TuiScrollbarPosition, inputs: ['tuiScrollbar'] }],
|
|
184
187
|
}]
|
|
185
|
-
}] });
|
|
188
|
+
}], ctorParameters: () => [] });
|
|
186
189
|
|
|
187
190
|
const TUI_DEFAULT_SCROLLBAR_OPTIONS = { mode: 'always' };
|
|
188
191
|
const [TUI_SCROLLBAR_OPTIONS, tuiScrollbarOptionsProvider] = tuiCreateOptions(TUI_DEFAULT_SCROLLBAR_OPTIONS);
|
|
@@ -192,17 +195,20 @@ class TuiScrollControls {
|
|
|
192
195
|
this.scrollable = inject(CdkScrollable, { optional: true, host: true });
|
|
193
196
|
this.el = tuiInjectElement();
|
|
194
197
|
this.nativeScrollbar = inject(TUI_SCROLLBAR_OPTIONS).mode === 'native';
|
|
195
|
-
this.
|
|
198
|
+
this.timeline = inject(TUI_TIMELINE_SUPPORT);
|
|
199
|
+
this.refresh$ = this.timeline
|
|
200
|
+
? of([true, true])
|
|
201
|
+
: inject(TuiScrollControlsService);
|
|
196
202
|
}
|
|
197
203
|
ngOnInit() {
|
|
198
|
-
this.scrollable?.getElementRef().nativeElement.prepend(this.el);
|
|
204
|
+
this.scrollable?.getElementRef().nativeElement.prepend?.(this.el);
|
|
199
205
|
}
|
|
200
206
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.25", ngImport: i0, type: TuiScrollControls, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
201
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.2.25", type: TuiScrollControls, isStandalone: true, selector: "tui-scroll-controls", providers: [TuiScrollControlsService], ngImport: i0, template: "@if (nativeScrollbar) {\n} @else {\n @if (refresh$ | async; as bars) {\n @if (bars[0]) {\n <div\n tuiAnimated\n class=\"t-bar t-bar_vertical\"\n
|
|
207
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.2.25", type: TuiScrollControls, isStandalone: true, selector: "tui-scroll-controls", host: { properties: { "class._timeline": "timeline" } }, providers: [TuiScrollControlsService], ngImport: i0, template: "@if (nativeScrollbar) {\n} @else {\n @if (refresh$ | async; as bars) {\n @if (bars[0]) {\n <div\n tuiAnimated\n class=\"t-bar t-bar_vertical\"\n (mousedown.capture.prevent)=\"(0)\"\n >\n <div\n tuiScrollbar=\"vertical\"\n class=\"t-thumb\"\n ></div>\n </div>\n }\n @if (bars[1]) {\n <div\n tuiAnimated\n class=\"t-bar t-bar_horizontal\"\n (mousedown.capture.prevent)=\"(0)\"\n >\n <div\n tuiScrollbar=\"horizontal\"\n class=\"t-thumb\"\n ></div>\n </div>\n }\n }\n}\n", styles: ["@property --t-scroll-start{syntax: \"<number>\"; inherits: true; initial-value: 0;}@property --t-scroll-end{syntax: \"<number>\"; inherits: true; initial-value: 0;}@keyframes tuiScrollbarStart{0%{--t-scroll-start: 1}to{--t-scroll-start: 0}}@keyframes tuiScrollbarEnd{0%{--t-scroll-end: 0}to{--t-scroll-end: 1}}@keyframes tuiScrollbar{0%,to{--t-opacity: 1}}@keyframes tuiScrollbarX{0%,to{--t-events-x: auto}}@keyframes tuiScrollbarY{0%,to{--t-events-y: auto}}:host{position:sticky;z-index:1;display:block;inset-block-start:0;inset-inline-start:0;min-inline-size:calc(100% - 1px);min-block-size:calc(100% - 1px);max-inline-size:calc(100% - 1px);max-block-size:calc(100% - 1px);margin-inline-end:calc(-100% + 1px);pointer-events:none;overflow:hidden;color:var(--tui-text-primary);container-type:size;animation-name:tuiScrollbarX,tuiScrollbarY;animation-timeline:--t-scrollbar-x,--t-scrollbar-y;--t-events-y: none;--t-events-x: none}:host:not(._timeline){--t-events-y: auto;--t-events-x: auto}:host:not(._timeline) .t-thumb{--t-opacity: 1}::ng-deep [tuiScrollable]{scrollbar-width:none;-ms-overflow-style:none}::ng-deep [tuiScrollable]::-webkit-scrollbar,::ng-deep [tuiScrollable]::-webkit-scrollbar-thumb{display:none}.t-bar{position:absolute;inset-inline-end:0;inset-block:.25rem;inline-size:.875rem;pointer-events:var(--t-events-y)}.t-bar.tui-enter,.t-bar.tui-leave{animation-name:tuiFade}.t-bar_horizontal{writing-mode:vertical-lr;direction:ltr;pointer-events:var(--t-events-x)}:host-context([dir=\"rtl\"]) .t-bar_horizontal{writing-mode:vertical-rl}.t-bar_horizontal .t-thumb{animation-timeline:--t-scrollbar-x;animation-range:0 calc(100% + 100cqi),calc(0% - 100cqi) 100%}.t-thumb{transition-property:all;transition-duration:calc(var(--tui-duration) / 2);transition-timing-function:var(--tui-curve-productive-standard);position:absolute;border-radius:6.25rem;border:.25rem solid transparent;cursor:pointer;-webkit-user-select:none;user-select:none;background:currentColor;background-clip:content-box;box-sizing:border-box;transition-property:width,height,opacity;inline-size:.75rem;min-block-size:1.25rem;inset-block-start:min(calc(100% - var(--t-scroll-start) * 100%),calc(100% - 1.25rem));inset-block-end:calc(100% - var(--t-scroll-end) * 100%);inset-inline-end:0;opacity:calc(.2 * var(--t-opacity));animation-name:tuiScrollbarStart,tuiScrollbarEnd,tuiScrollbar;animation-timing-function:linear;animation-timeline:--t-scrollbar-y;animation-range:0 calc(100% + 100cqb),calc(0% - 100cqb) 100%;animation-fill-mode:both;--t-opacity: 0}.t-thumb:hover{opacity:calc(.24 * var(--t-opacity))}.t-thumb:active{opacity:calc(.48 * var(--t-opacity))}.t-bar:hover .t-thumb,.t-bar .t-thumb:active{inline-size:.875rem}\n"], dependencies: [{ kind: "pipe", type: AsyncPipe, name: "async" }, { kind: "directive", type: TuiAnimated, selector: "[tuiAnimated]" }, { kind: "directive", type: TuiScrollbarDirective, selector: "[tuiScrollbar]" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
202
208
|
}
|
|
203
209
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.25", ngImport: i0, type: TuiScrollControls, decorators: [{
|
|
204
210
|
type: Component,
|
|
205
|
-
args: [{ selector: 'tui-scroll-controls', imports: [AsyncPipe, TuiAnimated, TuiScrollbarDirective], changeDetection: ChangeDetectionStrategy.OnPush, providers: [TuiScrollControlsService], template: "@if (nativeScrollbar) {\n} @else {\n @if (refresh$ | async; as bars) {\n @if (bars[0]) {\n <div\n tuiAnimated\n class=\"t-bar t-bar_vertical\"\n
|
|
211
|
+
args: [{ selector: 'tui-scroll-controls', imports: [AsyncPipe, TuiAnimated, TuiScrollbarDirective], changeDetection: ChangeDetectionStrategy.OnPush, providers: [TuiScrollControlsService], host: { '[class._timeline]': 'timeline' }, template: "@if (nativeScrollbar) {\n} @else {\n @if (refresh$ | async; as bars) {\n @if (bars[0]) {\n <div\n tuiAnimated\n class=\"t-bar t-bar_vertical\"\n (mousedown.capture.prevent)=\"(0)\"\n >\n <div\n tuiScrollbar=\"vertical\"\n class=\"t-thumb\"\n ></div>\n </div>\n }\n @if (bars[1]) {\n <div\n tuiAnimated\n class=\"t-bar t-bar_horizontal\"\n (mousedown.capture.prevent)=\"(0)\"\n >\n <div\n tuiScrollbar=\"horizontal\"\n class=\"t-thumb\"\n ></div>\n </div>\n }\n }\n}\n", styles: ["@property --t-scroll-start{syntax: \"<number>\"; inherits: true; initial-value: 0;}@property --t-scroll-end{syntax: \"<number>\"; inherits: true; initial-value: 0;}@keyframes tuiScrollbarStart{0%{--t-scroll-start: 1}to{--t-scroll-start: 0}}@keyframes tuiScrollbarEnd{0%{--t-scroll-end: 0}to{--t-scroll-end: 1}}@keyframes tuiScrollbar{0%,to{--t-opacity: 1}}@keyframes tuiScrollbarX{0%,to{--t-events-x: auto}}@keyframes tuiScrollbarY{0%,to{--t-events-y: auto}}:host{position:sticky;z-index:1;display:block;inset-block-start:0;inset-inline-start:0;min-inline-size:calc(100% - 1px);min-block-size:calc(100% - 1px);max-inline-size:calc(100% - 1px);max-block-size:calc(100% - 1px);margin-inline-end:calc(-100% + 1px);pointer-events:none;overflow:hidden;color:var(--tui-text-primary);container-type:size;animation-name:tuiScrollbarX,tuiScrollbarY;animation-timeline:--t-scrollbar-x,--t-scrollbar-y;--t-events-y: none;--t-events-x: none}:host:not(._timeline){--t-events-y: auto;--t-events-x: auto}:host:not(._timeline) .t-thumb{--t-opacity: 1}::ng-deep [tuiScrollable]{scrollbar-width:none;-ms-overflow-style:none}::ng-deep [tuiScrollable]::-webkit-scrollbar,::ng-deep [tuiScrollable]::-webkit-scrollbar-thumb{display:none}.t-bar{position:absolute;inset-inline-end:0;inset-block:.25rem;inline-size:.875rem;pointer-events:var(--t-events-y)}.t-bar.tui-enter,.t-bar.tui-leave{animation-name:tuiFade}.t-bar_horizontal{writing-mode:vertical-lr;direction:ltr;pointer-events:var(--t-events-x)}:host-context([dir=\"rtl\"]) .t-bar_horizontal{writing-mode:vertical-rl}.t-bar_horizontal .t-thumb{animation-timeline:--t-scrollbar-x;animation-range:0 calc(100% + 100cqi),calc(0% - 100cqi) 100%}.t-thumb{transition-property:all;transition-duration:calc(var(--tui-duration) / 2);transition-timing-function:var(--tui-curve-productive-standard);position:absolute;border-radius:6.25rem;border:.25rem solid transparent;cursor:pointer;-webkit-user-select:none;user-select:none;background:currentColor;background-clip:content-box;box-sizing:border-box;transition-property:width,height,opacity;inline-size:.75rem;min-block-size:1.25rem;inset-block-start:min(calc(100% - var(--t-scroll-start) * 100%),calc(100% - 1.25rem));inset-block-end:calc(100% - var(--t-scroll-end) * 100%);inset-inline-end:0;opacity:calc(.2 * var(--t-opacity));animation-name:tuiScrollbarStart,tuiScrollbarEnd,tuiScrollbar;animation-timing-function:linear;animation-timeline:--t-scrollbar-y;animation-range:0 calc(100% + 100cqb),calc(0% - 100cqb) 100%;animation-fill-mode:both;--t-opacity: 0}.t-thumb:hover{opacity:calc(.24 * var(--t-opacity))}.t-thumb:active{opacity:calc(.48 * var(--t-opacity))}.t-bar:hover .t-thumb,.t-bar .t-thumb:active{inline-size:.875rem}\n"] }]
|
|
206
212
|
}] });
|
|
207
213
|
|
|
208
214
|
/**
|
|
@@ -214,6 +220,35 @@ const TUI_SCROLL_INTO_VIEW = 'tui-scroll-into-view';
|
|
|
214
220
|
* it should control a nested element.
|
|
215
221
|
*/
|
|
216
222
|
const TUI_SCROLLABLE = 'tui-scrollable';
|
|
223
|
+
/**
|
|
224
|
+
* @deprecated
|
|
225
|
+
* Cannot put it into viewProviders because of https://github.com/angular/angular/issues/65724
|
|
226
|
+
* Cannot put it into providers because it shouldn't leak to content
|
|
227
|
+
* TODO: Remove in v6 together with {@link TuiScrollable}
|
|
228
|
+
*/
|
|
229
|
+
class TuiDelegatedGuard {
|
|
230
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.25", ngImport: i0, type: TuiDelegatedGuard, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
|
|
231
|
+
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "19.2.25", type: TuiDelegatedGuard, isStandalone: true, selector: "[tuiDelegateGuard]", providers: [
|
|
232
|
+
{
|
|
233
|
+
provide: TUI_TIMELINE_SUPPORT,
|
|
234
|
+
useFactory: () => inject(TUI_TIMELINE_SUPPORT, { skipSelf: true }) &&
|
|
235
|
+
!inject(TuiScrollbar).delegated,
|
|
236
|
+
},
|
|
237
|
+
], ngImport: i0 }); }
|
|
238
|
+
}
|
|
239
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.25", ngImport: i0, type: TuiDelegatedGuard, decorators: [{
|
|
240
|
+
type: Directive,
|
|
241
|
+
args: [{
|
|
242
|
+
selector: '[tuiDelegateGuard]',
|
|
243
|
+
providers: [
|
|
244
|
+
{
|
|
245
|
+
provide: TUI_TIMELINE_SUPPORT,
|
|
246
|
+
useFactory: () => inject(TUI_TIMELINE_SUPPORT, { skipSelf: true }) &&
|
|
247
|
+
!inject(TuiScrollbar).delegated,
|
|
248
|
+
},
|
|
249
|
+
],
|
|
250
|
+
}]
|
|
251
|
+
}] });
|
|
217
252
|
class TuiScrollbar {
|
|
218
253
|
constructor() {
|
|
219
254
|
this.el = tuiInjectElement();
|
|
@@ -241,25 +276,25 @@ class TuiScrollbar {
|
|
|
241
276
|
this.scrollRef.scrollTo?.(scrollLeft, scrollTop);
|
|
242
277
|
}
|
|
243
278
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.25", ngImport: i0, type: TuiScrollbar, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
244
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.2.25", type: TuiScrollbar, isStandalone: true, selector: "tui-scrollbar", host: { listeners: { "tui-scrollable.stop": "scrollRef = $event.detail", "tui-scroll-into-view.stop": "scrollIntoView($event.detail)" }, properties: { "class._native
|
|
279
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.2.25", type: TuiScrollbar, isStandalone: true, selector: "tui-scrollbar", host: { listeners: { "tui-scrollable.stop": "scrollRef = $event.detail", "tui-scroll-into-view.stop": "scrollIntoView($event.detail)" }, properties: { "class._native": "options.mode === \"native\" || (isIOS && options.mode !== \"hidden\")" } }, providers: [
|
|
245
280
|
{
|
|
246
281
|
provide: TUI_SCROLL_REF,
|
|
247
282
|
useFactory: () => inject(TuiScrollbar).browserScrollRef,
|
|
248
283
|
},
|
|
249
|
-
], hostDirectives: [{ directive: TuiScrollRef }], ngImport: i0, template: "@if (!isIOS && options.mode !== 'native' && options.mode !== 'hidden') {\n <tui-scroll-controls\n class=\"t-bars\"\n [class.t-hover-mode]=\"options.mode === 'hover'\"\n />\n}\n<div\n class=\"t-content\"\n [class.t-content_delegated]=\"delegated\"\n>\n <ng-content />\n</div>\n", styles: [":host{position:relative;display:flex;max-block-size:100%;isolation:isolate;overflow:auto}:host
|
|
284
|
+
], hostDirectives: [{ directive: TuiScrollRef }], ngImport: i0, template: "@if (!isIOS && options.mode !== 'native' && options.mode !== 'hidden') {\n <tui-scroll-controls\n tuiDelegateGuard\n class=\"t-bars\"\n [class.t-hover-mode]=\"options.mode === 'hover'\"\n />\n}\n<div\n class=\"t-content\"\n [class.t-content_delegated]=\"delegated\"\n>\n <ng-content />\n</div>\n", styles: [":host{position:relative;display:flex;max-block-size:100%;isolation:isolate;overflow:auto}:host .t-hover-mode:not(:active){transition-property:opacity;transition-duration:var(--tui-duration, .3s);transition-timing-function:var(--tui-curve-productive-standard);opacity:0}:host:hover>.t-hover-mode{transition-property:opacity;transition-duration:var(--tui-duration, .3s);transition-timing-function:var(--tui-curve-productive-standard);opacity:1}.t-content{isolation:isolate;flex:1;flex-basis:auto;inline-size:100%;min-inline-size:fit-content;block-size:max-content;view-timeline:--t-scrollbar-x x,--t-scrollbar-y y}.t-content_delegated{block-size:100%}.t-bars{color:var(--tui-text-primary)}\n"], dependencies: [{ kind: "directive", type: TuiDelegatedGuard, selector: "[tuiDelegateGuard]" }, { kind: "component", type: TuiScrollControls, selector: "tui-scroll-controls" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
250
285
|
}
|
|
251
286
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.25", ngImport: i0, type: TuiScrollbar, decorators: [{
|
|
252
287
|
type: Component,
|
|
253
|
-
args: [{ selector: 'tui-scrollbar', imports: [TuiScrollControls], changeDetection: ChangeDetectionStrategy.OnPush, providers: [
|
|
288
|
+
args: [{ selector: 'tui-scrollbar', imports: [TuiDelegatedGuard, TuiScrollControls], changeDetection: ChangeDetectionStrategy.OnPush, providers: [
|
|
254
289
|
{
|
|
255
290
|
provide: TUI_SCROLL_REF,
|
|
256
291
|
useFactory: () => inject(TuiScrollbar).browserScrollRef,
|
|
257
292
|
},
|
|
258
293
|
], hostDirectives: [TuiScrollRef], host: {
|
|
259
|
-
'[class._native
|
|
294
|
+
'[class._native]': 'options.mode === "native" || (isIOS && options.mode !== "hidden")',
|
|
260
295
|
[`(${TUI_SCROLLABLE}.stop)`]: 'scrollRef = $event.detail',
|
|
261
296
|
[`(${TUI_SCROLL_INTO_VIEW}.stop)`]: 'scrollIntoView($event.detail)',
|
|
262
|
-
}, template: "@if (!isIOS && options.mode !== 'native' && options.mode !== 'hidden') {\n <tui-scroll-controls\n class=\"t-bars\"\n [class.t-hover-mode]=\"options.mode === 'hover'\"\n />\n}\n<div\n class=\"t-content\"\n [class.t-content_delegated]=\"delegated\"\n>\n <ng-content />\n</div>\n", styles: [":host{position:relative;display:flex;max-block-size:100%;isolation:isolate;overflow:auto}:host
|
|
297
|
+
}, template: "@if (!isIOS && options.mode !== 'native' && options.mode !== 'hidden') {\n <tui-scroll-controls\n tuiDelegateGuard\n class=\"t-bars\"\n [class.t-hover-mode]=\"options.mode === 'hover'\"\n />\n}\n<div\n class=\"t-content\"\n [class.t-content_delegated]=\"delegated\"\n>\n <ng-content />\n</div>\n", styles: [":host{position:relative;display:flex;max-block-size:100%;isolation:isolate;overflow:auto}:host .t-hover-mode:not(:active){transition-property:opacity;transition-duration:var(--tui-duration, .3s);transition-timing-function:var(--tui-curve-productive-standard);opacity:0}:host:hover>.t-hover-mode{transition-property:opacity;transition-duration:var(--tui-duration, .3s);transition-timing-function:var(--tui-curve-productive-standard);opacity:1}.t-content{isolation:isolate;flex:1;flex-basis:auto;inline-size:100%;min-inline-size:fit-content;block-size:max-content;view-timeline:--t-scrollbar-x x,--t-scrollbar-y y}.t-content_delegated{block-size:100%}.t-bars{color:var(--tui-text-primary)}\n"] }]
|
|
263
298
|
}] });
|
|
264
299
|
|
|
265
300
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"taiga-ui-core-components-scrollbar.mjs","sources":["../../../projects/core/components/scrollbar/scroll-ref.directive.ts","../../../projects/core/components/scrollbar/scroll-controls.service.ts","../../../projects/core/components/scrollbar/scrollbar.service.ts","../../../projects/core/components/scrollbar/scrollbar-position.directive.ts","../../../projects/core/components/scrollbar/scrollbar.directive.ts","../../../projects/core/components/scrollbar/scrollbar.options.ts","../../../projects/core/components/scrollbar/scroll-controls.component.ts","../../../projects/core/components/scrollbar/scroll-controls.template.html","../../../projects/core/components/scrollbar/scrollbar.component.ts","../../../projects/core/components/scrollbar/scrollbar.template.html","../../../projects/core/components/scrollbar/scroll-into-view.directive.ts","../../../projects/core/components/scrollbar/scrollable.directive.ts","../../../projects/core/components/scrollbar/taiga-ui-core-components-scrollbar.ts"],"sourcesContent":["import {DOCUMENT} from '@angular/common';\nimport {Directive, ElementRef, inject, InjectionToken} from '@angular/core';\nimport {tuiProvide} from '@taiga-ui/cdk/utils/di';\n\nexport const SCROLL_REF_SELECTOR = '[tuiScrollRef]';\n\nexport const TUI_SCROLL_REF = new InjectionToken(ngDevMode ? 'TUI_SCROLL_REF' : '', {\n factory: () => new ElementRef(inject(DOCUMENT).documentElement),\n});\n\n@Directive({\n selector: '[tuiScrollRef]',\n providers: [tuiProvide(TUI_SCROLL_REF, ElementRef)],\n})\nexport class TuiScrollRef {}\n","import {inject, Injectable} from '@angular/core';\nimport {WA_ANIMATION_FRAME} from '@ng-web-apis/common';\nimport {tuiZonefreeScheduler, tuiZoneOptimized} from '@taiga-ui/cdk/observables';\nimport {distinctUntilChanged, map, Observable, startWith, throttleTime} from 'rxjs';\n\nimport {TUI_SCROLL_REF} from './scroll-ref.directive';\n\n@Injectable()\nexport class TuiScrollControlsService extends Observable<readonly [boolean, boolean]> {\n private readonly scrollRef = inject(TUI_SCROLL_REF);\n\n private readonly stream$ = inject(WA_ANIMATION_FRAME).pipe(\n throttleTime(300, tuiZonefreeScheduler()),\n map(() => this.scrollbars),\n startWith([false, false] as const),\n distinctUntilChanged((a, b) => a[0] === b[0] && a[1] === b[1]),\n tuiZoneOptimized(),\n );\n\n constructor() {\n super((subscriber) => this.stream$.subscribe(subscriber));\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 {inject, Injectable} from '@angular/core';\nimport {tuiTypedFromEvent, tuiZonefree} from '@taiga-ui/cdk/observables';\nimport {tuiInjectElement} from '@taiga-ui/cdk/utils/dom';\nimport {filter, map, merge, Observable, switchMap, takeUntil} from 'rxjs';\n\nimport {TUI_SCROLL_REF} from './scroll-ref.directive';\n\n@Injectable()\nexport class TuiScrollbarService extends Observable<[number, number]> {\n private readonly el = tuiInjectElement();\n private readonly element = inject(TUI_SCROLL_REF).nativeElement;\n\n private readonly scroll$ = merge(\n tuiTypedFromEvent(this.el.parentElement!, 'mousedown').pipe(\n filter(({target}) => target !== this.el),\n map((event) => this.getScrolled(event, 0.5, 0.5)),\n ),\n tuiTypedFromEvent(this.el, 'mousedown').pipe(\n tuiZonefree(),\n switchMap((event) => {\n const {ownerDocument} = this.el;\n const rect = this.el.getBoundingClientRect();\n const vertical = getOffsetVertical(event, rect);\n const horizontal = getOffsetHorizontal(event, rect);\n\n return tuiTypedFromEvent(ownerDocument, 'mousemove').pipe(\n map((event) => this.getScrolled(event, vertical, horizontal)),\n takeUntil(tuiTypedFromEvent(ownerDocument, 'mouseup')),\n );\n }),\n ),\n );\n\n constructor() {\n super((subscriber) => this.scroll$.subscribe(subscriber));\n }\n\n private getScrolled(\n {clientY, clientX}: MouseEvent,\n offsetY: number,\n offsetX: number,\n ): [number, number] {\n const {offsetHeight, offsetWidth} = this.el;\n\n const {top, left, right, width, height} =\n this.el.parentElement!.getBoundingClientRect();\n\n const rtl = this.el.matches('[dir=\"rtl\"] :scope');\n const inline = rtl ? right : left;\n const multiplier = rtl ? -1 : 1;\n const maxTop = this.element.scrollHeight - height;\n const maxLeft = this.element.scrollWidth - width;\n\n const scrolledTop =\n (clientY - top - offsetHeight * offsetY) / (height - offsetHeight);\n\n const scrolledLeft =\n (clientX - inline - offsetWidth * offsetX * multiplier) /\n (width - offsetWidth);\n\n return [maxTop * scrolledTop, maxLeft * scrolledLeft];\n }\n}\n\nfunction getOffsetVertical({clientY}: MouseEvent, {top, height}: DOMRect): number {\n return (clientY - top) / height;\n}\n\nfunction getOffsetHorizontal({clientX}: MouseEvent, {left, width}: DOMRect): number {\n return (clientX - left) / width;\n}\n","import {Directive, inject, input} from '@angular/core';\nimport {WA_ANIMATION_FRAME} from '@ng-web-apis/common';\nimport {\n tuiScrollFrom,\n tuiZonefree,\n tuiZonefreeScheduler,\n} from '@taiga-ui/cdk/observables';\nimport {map, merge, Observable, throttleTime} from 'rxjs';\n\nimport {TUI_SCROLL_REF} from './scroll-ref.directive';\n\nconst MIN_WIDTH = 24;\n\ninterface ComputedDimension {\n scrollTop: number;\n scrollHeight: number;\n clientHeight: number;\n scrollLeft: number;\n scrollWidth: number;\n clientWidth: number;\n}\n\n@Directive()\nexport class TuiScrollbarPosition extends Observable<Partial<CSSStyleDeclaration>> {\n private readonly scrollRef = inject(TUI_SCROLL_REF);\n\n private readonly stream$ = merge(\n inject(WA_ANIMATION_FRAME).pipe(throttleTime(100, tuiZonefreeScheduler())),\n tuiScrollFrom(this.el),\n ).pipe(\n tuiZonefree(),\n map(() => {\n const dimension: ComputedDimension = {\n scrollTop: this.el.scrollTop,\n scrollHeight: this.el.scrollHeight,\n clientHeight: this.el.clientHeight,\n scrollLeft: this.el.scrollLeft,\n scrollWidth: this.el.scrollWidth,\n clientWidth: this.el.clientWidth,\n };\n\n const thumb = `${this.getThumb(dimension) * 100}%`;\n const view = `${this.getView(dimension) * 100}%`;\n\n return this.tuiScrollbar() === 'vertical'\n ? {\n top: thumb,\n height: view,\n }\n : {\n insetInlineStart: thumb,\n width: view,\n };\n }),\n );\n\n public readonly tuiScrollbar = input<'horizontal' | 'vertical'>('vertical');\n\n constructor() {\n super((subscriber) => this.stream$.subscribe(subscriber));\n }\n\n private get el(): HTMLElement {\n return this.scrollRef.nativeElement;\n }\n\n private getThumb(dimension: ComputedDimension): number {\n const compensation = this.getCompensation(dimension) || this.getView(dimension);\n\n return Math.abs(this.getScrolled(dimension) * (1 - compensation));\n }\n\n private getView(dimension: ComputedDimension): number {\n return this.tuiScrollbar() === 'vertical'\n ? Math.ceil((dimension.clientHeight / dimension.scrollHeight) * 100) / 100\n : Math.ceil((dimension.clientWidth / dimension.scrollWidth) * 100) / 100;\n }\n\n private getScrolled(dimension: ComputedDimension): number {\n return this.tuiScrollbar() === 'vertical'\n ? dimension.scrollTop / (dimension.scrollHeight - dimension.clientHeight)\n : dimension.scrollLeft / (dimension.scrollWidth - dimension.clientWidth);\n }\n\n private getCompensation(dimension: ComputedDimension): number {\n if (\n ((dimension.clientHeight * dimension.clientHeight) / dimension.scrollHeight >\n MIN_WIDTH &&\n this.tuiScrollbar() === 'vertical') ||\n ((dimension.clientWidth * dimension.clientWidth) / dimension.scrollWidth >\n MIN_WIDTH &&\n this.tuiScrollbar() === 'horizontal')\n ) {\n return 0;\n }\n\n return this.tuiScrollbar() === 'vertical'\n ? MIN_WIDTH / dimension.clientHeight\n : MIN_WIDTH / dimension.clientWidth;\n }\n}\n","import {Directive, inject, input} from '@angular/core';\nimport {takeUntilDestroyed} from '@angular/core/rxjs-interop';\nimport {tuiInjectElement} from '@taiga-ui/cdk/utils/dom';\n\nimport {TUI_SCROLL_REF} from './scroll-ref.directive';\nimport {TuiScrollbarService} from './scrollbar.service';\nimport {TuiScrollbarPosition} from './scrollbar-position.directive';\n\n@Directive({\n selector: '[tuiScrollbar]',\n providers: [TuiScrollbarService],\n hostDirectives: [{directive: TuiScrollbarPosition, inputs: ['tuiScrollbar']}],\n})\nexport class TuiScrollbarDirective {\n private readonly scrollRef = inject(TUI_SCROLL_REF);\n private readonly style = tuiInjectElement().style;\n\n protected readonly scrollSub = inject(TuiScrollbarService)\n .pipe(takeUntilDestroyed())\n .subscribe(([top, left]) => {\n this.scrollRef.nativeElement.style.scrollBehavior = 'auto';\n\n if (this.tuiScrollbar() === 'horizontal') {\n this.scrollRef.nativeElement.scrollLeft = left;\n } else {\n this.scrollRef.nativeElement.scrollTop = top;\n }\n\n this.scrollRef.nativeElement.style.scrollBehavior = '';\n });\n\n protected readonly styleSub = inject(TuiScrollbarPosition)\n .pipe(takeUntilDestroyed())\n .subscribe((position) => Object.assign(this.style, position));\n\n public readonly tuiScrollbar = input<'horizontal' | 'vertical'>('vertical');\n}\n","import {tuiCreateOptions} from '@taiga-ui/cdk/utils/di';\n\nexport interface TuiScrollbarOptions {\n mode: 'always' | 'hidden' | 'hover' | 'native';\n}\n\nexport const TUI_DEFAULT_SCROLLBAR_OPTIONS: TuiScrollbarOptions = {mode: 'always'};\n\nexport const [TUI_SCROLLBAR_OPTIONS, tuiScrollbarOptionsProvider] = tuiCreateOptions(\n TUI_DEFAULT_SCROLLBAR_OPTIONS,\n);\n","import {CdkScrollable} from '@angular/cdk/scrolling';\nimport {AsyncPipe} from '@angular/common';\nimport {ChangeDetectionStrategy, Component, inject, type OnInit} from '@angular/core';\nimport {TuiAnimated} from '@taiga-ui/cdk/directives/animated';\nimport {tuiInjectElement} from '@taiga-ui/cdk/utils/dom';\n\nimport {TuiScrollControlsService} from './scroll-controls.service';\nimport {TuiScrollbarDirective} from './scrollbar.directive';\nimport {TUI_SCROLLBAR_OPTIONS} from './scrollbar.options';\n\n@Component({\n selector: 'tui-scroll-controls',\n imports: [AsyncPipe, TuiAnimated, TuiScrollbarDirective],\n templateUrl: './scroll-controls.template.html',\n styleUrl: './scroll-controls.style.less',\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [TuiScrollControlsService],\n})\nexport class TuiScrollControls implements OnInit {\n private readonly scrollable = inject(CdkScrollable, {optional: true, host: true});\n private readonly el = tuiInjectElement();\n\n protected readonly nativeScrollbar = inject(TUI_SCROLLBAR_OPTIONS).mode === 'native';\n protected readonly refresh$ = inject(TuiScrollControlsService);\n\n public ngOnInit(): void {\n this.scrollable?.getElementRef().nativeElement.prepend(this.el);\n }\n}\n","@if (nativeScrollbar) {\n} @else {\n @if (refresh$ | async; as bars) {\n @if (bars[0]) {\n <div\n tuiAnimated\n class=\"t-bar t-bar_vertical\"\n [class.t-bar_has-horizontal]=\"bars[1]\"\n (mousedown.capture.prevent)=\"(0)\"\n >\n <div\n tuiScrollbar=\"vertical\"\n class=\"t-thumb\"\n ></div>\n </div>\n }\n @if (bars[1]) {\n <div\n tuiAnimated\n class=\"t-bar t-bar_horizontal\"\n [class.t-bar_has-vertical]=\"bars[0]\"\n (mousedown.capture.prevent)=\"(0)\"\n >\n <div\n tuiScrollbar=\"horizontal\"\n class=\"t-thumb\"\n ></div>\n </div>\n }\n }\n}\n","import {ChangeDetectionStrategy, Component, ElementRef, inject} from '@angular/core';\nimport {WA_IS_IOS} from '@ng-web-apis/platform';\nimport {tuiGetElementOffset, tuiInjectElement} from '@taiga-ui/cdk/utils/dom';\n\nimport {TuiScrollControls} from './scroll-controls.component';\nimport {TUI_SCROLL_REF, TuiScrollRef} from './scroll-ref.directive';\nimport {TUI_SCROLLBAR_OPTIONS} from './scrollbar.options';\n\n/**\n * An event for scrolling an element into view within {@link TuiScrollbar}.\n */\nexport const TUI_SCROLL_INTO_VIEW = 'tui-scroll-into-view';\n\n/**\n * An event to notify {@link TuiScrollbar} that\n * it should control a nested element.\n */\nexport const TUI_SCROLLABLE = 'tui-scrollable';\n\n@Component({\n selector: 'tui-scrollbar',\n imports: [TuiScrollControls],\n templateUrl: './scrollbar.template.html',\n styleUrl: './scrollbar.style.less',\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [\n {\n provide: TUI_SCROLL_REF,\n useFactory: () => inject(TuiScrollbar).browserScrollRef,\n },\n ],\n hostDirectives: [TuiScrollRef],\n host: {\n '[class._native-hidden]':\n 'options.mode !== \"native\" && (!isIOS || options.mode === \"hidden\")',\n [`(${TUI_SCROLLABLE}.stop)`]: 'scrollRef = $event.detail',\n [`(${TUI_SCROLL_INTO_VIEW}.stop)`]: 'scrollIntoView($event.detail)',\n },\n})\nexport class TuiScrollbar {\n private readonly el = tuiInjectElement();\n\n protected readonly options = inject(TUI_SCROLLBAR_OPTIONS);\n protected readonly isIOS = inject(WA_IS_IOS);\n protected readonly browserScrollRef = new ElementRef(this.el);\n\n protected get delegated(): boolean {\n return this.scrollRef !== this.el || this.options.mode === 'native';\n }\n\n protected get scrollRef(): HTMLElement {\n return this.browserScrollRef.nativeElement;\n }\n\n protected set scrollRef(element: HTMLElement) {\n this.browserScrollRef.nativeElement = element;\n }\n\n protected scrollIntoView(detail: HTMLElement): void {\n if (this.delegated) {\n return;\n }\n\n const {offsetHeight, offsetWidth} = detail;\n const {offsetTop, offsetLeft} = tuiGetElementOffset(this.scrollRef, detail);\n const scrollTop = offsetTop + offsetHeight / 2 - this.scrollRef.clientHeight / 2;\n const scrollLeft = offsetLeft + offsetWidth / 2 - this.scrollRef.clientWidth / 2;\n\n this.scrollRef.scrollTo?.(scrollLeft, scrollTop);\n }\n}\n","@if (!isIOS && options.mode !== 'native' && options.mode !== 'hidden') {\n <tui-scroll-controls\n class=\"t-bars\"\n [class.t-hover-mode]=\"options.mode === 'hover'\"\n />\n}\n<div\n class=\"t-content\"\n [class.t-content_delegated]=\"delegated\"\n>\n <ng-content />\n</div>\n","import {DestroyRef, Directive, effect, inject, input} from '@angular/core';\nimport {takeUntilDestroyed} from '@angular/core/rxjs-interop';\nimport {tuiInjectElement} from '@taiga-ui/cdk/utils/dom';\nimport {timer} from 'rxjs';\n\nimport {TUI_SCROLL_INTO_VIEW} from './scrollbar.component';\n\n/**\n * Directive scrolls element into view inside tui-scrollbar\n */\n@Directive({selector: '[tuiScrollIntoView]'})\nexport class TuiScrollIntoView {\n private readonly el = tuiInjectElement();\n private readonly destroyRef = inject(DestroyRef);\n\n public readonly tuiScrollIntoView = input<boolean>();\n\n protected readonly dispatchEvent = effect(() => {\n const scroll = this.tuiScrollIntoView();\n\n if (!scroll) {\n return;\n }\n\n // Timeout is necessary in order to give element render cycle to get into its final spot\n // (for example if it is inside dropdown box which has to be positioned first)\n timer(0)\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe(() => {\n this.el.dispatchEvent(\n new CustomEvent<Element>(TUI_SCROLL_INTO_VIEW, {\n bubbles: true,\n detail: this.el,\n }),\n );\n });\n });\n}\n","import {Directive, type OnInit} from '@angular/core';\nimport {tuiInjectElement} from '@taiga-ui/cdk/utils/dom';\n\nimport {TuiScrollRef} from './scroll-ref.directive';\nimport {TUI_SCROLLABLE} from './scrollbar.component';\n\n/**\n * @deprecated Use {@link TuiScrollRef} + {@link TuiScrollControls} instead\n * TODO: Drop in v6.0\n */\n@Directive({selector: '[tuiScrollable]', hostDirectives: [TuiScrollRef]})\nexport class TuiScrollable implements OnInit {\n private readonly el = tuiInjectElement();\n\n public ngOnInit(): void {\n this.el.dispatchEvent(\n new CustomEvent(TUI_SCROLLABLE, {bubbles: true, detail: this.el}),\n );\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["i1.TuiScrollbarPosition","i1.TuiScrollRef"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"taiga-ui-core-components-scrollbar.mjs","sources":["../../../projects/core/components/scrollbar/scroll-ref.directive.ts","../../../projects/core/components/scrollbar/scroll-controls.service.ts","../../../projects/core/components/scrollbar/scrollbar.service.ts","../../../projects/core/components/scrollbar/scrollbar-position.directive.ts","../../../projects/core/components/scrollbar/scrollbar.directive.ts","../../../projects/core/components/scrollbar/scrollbar.options.ts","../../../projects/core/components/scrollbar/scroll-controls.component.ts","../../../projects/core/components/scrollbar/scroll-controls.template.html","../../../projects/core/components/scrollbar/scrollbar.component.ts","../../../projects/core/components/scrollbar/scrollbar.template.html","../../../projects/core/components/scrollbar/scroll-into-view.directive.ts","../../../projects/core/components/scrollbar/scrollable.directive.ts","../../../projects/core/components/scrollbar/taiga-ui-core-components-scrollbar.ts"],"sourcesContent":["import {DOCUMENT} from '@angular/common';\nimport {\n ChangeDetectionStrategy,\n Component,\n Directive,\n ElementRef,\n inject,\n InjectionToken,\n ViewEncapsulation,\n} from '@angular/core';\nimport {TUI_VERSION} from '@taiga-ui/cdk/constants';\nimport {tuiProvide} from '@taiga-ui/cdk/utils/di';\nimport {tuiWithStyles} from '@taiga-ui/cdk/utils/miscellaneous';\n\nexport const SCROLL_REF_SELECTOR = '[tuiScrollRef]';\n\nexport const TUI_SCROLL_REF = new InjectionToken(ngDevMode ? 'TUI_SCROLL_REF' : '', {\n factory: () => new ElementRef(inject(DOCUMENT).documentElement),\n});\n\n@Component({\n template: '',\n styles: `\n [data-tui-version='${TUI_VERSION}'] {\n @import './scroll-ref.style.less';\n }\n `,\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n exportAs: `tui-scroll-ref-${TUI_VERSION}`,\n})\nclass Styles {}\n\n@Directive({\n selector: '[tuiScrollRef]',\n providers: [tuiProvide(TUI_SCROLL_REF, ElementRef)],\n host: {'data-tui-version': TUI_VERSION, tuiScrollRef: ''},\n})\nexport class TuiScrollRef {\n protected readonly nothing = tuiWithStyles(Styles);\n}\n","import {inject, Injectable} from '@angular/core';\nimport {WA_ANIMATION_FRAME} from '@ng-web-apis/common';\nimport {tuiZonefreeScheduler, tuiZoneOptimized} from '@taiga-ui/cdk/observables';\nimport {distinctUntilChanged, map, Observable, startWith, throttleTime} from 'rxjs';\n\nimport {TUI_SCROLL_REF} from './scroll-ref.directive';\n\n@Injectable()\nexport class TuiScrollControlsService extends Observable<readonly [boolean, boolean]> {\n private readonly scrollRef = inject(TUI_SCROLL_REF);\n\n private readonly stream$ = inject(WA_ANIMATION_FRAME).pipe(\n throttleTime(300, tuiZonefreeScheduler()),\n map(() => this.scrollbars),\n startWith([false, false] as const),\n distinctUntilChanged((a, b) => a[0] === b[0] && a[1] === b[1]),\n tuiZoneOptimized(),\n );\n\n constructor() {\n super((subscriber) => this.stream$.subscribe(subscriber));\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 {inject, Injectable} from '@angular/core';\nimport {tuiTypedFromEvent, tuiZonefree} from '@taiga-ui/cdk/observables';\nimport {tuiInjectElement} from '@taiga-ui/cdk/utils/dom';\nimport {filter, map, merge, Observable, switchMap, takeUntil} from 'rxjs';\n\nimport {TUI_SCROLL_REF} from './scroll-ref.directive';\n\n@Injectable()\nexport class TuiScrollbarService extends Observable<\n [number | undefined, number | undefined]\n> {\n private readonly el = tuiInjectElement();\n private readonly element = inject(TUI_SCROLL_REF).nativeElement;\n\n private readonly scroll$ = merge(\n tuiTypedFromEvent(this.el.parentElement!, 'mousedown').pipe(\n filter(({target}) => target !== this.el),\n map((event) => this.getScrolled(event, 0.5, 0.5)),\n ),\n tuiTypedFromEvent(this.el, 'mousedown').pipe(\n tuiZonefree(),\n switchMap((event) => {\n const {ownerDocument} = this.el;\n const rect = this.el.getBoundingClientRect();\n const vertical = getOffsetVertical(event, rect);\n const horizontal = getOffsetHorizontal(event, rect);\n\n return tuiTypedFromEvent(ownerDocument, 'mousemove').pipe(\n map((event) => this.getScrolled(event, vertical, horizontal)),\n takeUntil(tuiTypedFromEvent(ownerDocument, 'mouseup')),\n );\n }),\n ),\n );\n\n constructor() {\n super((subscriber) => this.scroll$.subscribe(subscriber));\n }\n\n private getScrolled(\n {clientY, clientX}: MouseEvent,\n offsetY: number,\n offsetX: number,\n ): [number | undefined, number | undefined] {\n const rect = this.el.parentElement!.getBoundingClientRect();\n const {top, left, right, width, height} = rect;\n const {offsetHeight, offsetWidth} = this.el;\n const rtl = this.el.matches('[dir=\"rtl\"] :scope');\n const inline = rtl ? right : left;\n const multiplier = rtl ? -1 : 1;\n const maxTop = this.element.scrollHeight - height;\n const maxLeft = this.element.scrollWidth - width;\n const y = (clientY - top - offsetHeight * offsetY) / (height - offsetHeight);\n\n const x =\n (clientX - inline - offsetWidth * offsetX * multiplier) /\n (width - offsetWidth);\n\n return [\n width > height ? undefined : maxTop * y,\n width > height ? maxLeft * x : undefined,\n ];\n }\n}\n\nfunction getOffsetVertical({clientY}: MouseEvent, {top, height}: DOMRect): number {\n return (clientY - top) / height;\n}\n\nfunction getOffsetHorizontal({clientX}: MouseEvent, {left, width}: DOMRect): number {\n return (clientX - left) / width;\n}\n","import {Directive, inject, input} from '@angular/core';\nimport {WA_ANIMATION_FRAME} from '@ng-web-apis/common';\nimport {\n tuiScrollFrom,\n tuiZonefree,\n tuiZonefreeScheduler,\n} from '@taiga-ui/cdk/observables';\nimport {map, merge, Observable, throttleTime} from 'rxjs';\n\nimport {TUI_SCROLL_REF} from './scroll-ref.directive';\n\nconst MIN_WIDTH = 24;\n\ninterface ComputedDimension {\n scrollTop: number;\n scrollHeight: number;\n clientHeight: number;\n scrollLeft: number;\n scrollWidth: number;\n clientWidth: number;\n}\n\n@Directive()\nexport class TuiScrollbarPosition extends Observable<Partial<CSSStyleDeclaration>> {\n private readonly scrollRef = inject(TUI_SCROLL_REF);\n\n private readonly stream$ = merge(\n inject(WA_ANIMATION_FRAME).pipe(throttleTime(100, tuiZonefreeScheduler())),\n tuiScrollFrom(this.el),\n ).pipe(\n tuiZonefree(),\n map(() => ({\n scrollTop: this.el.scrollTop,\n scrollHeight: this.el.scrollHeight,\n clientHeight: this.el.clientHeight,\n scrollLeft: this.el.scrollLeft,\n scrollWidth: this.el.scrollWidth,\n clientWidth: this.el.clientWidth,\n })),\n map((dimensions) => ({\n insetBlockStart: `${this.getThumb(dimensions) * 100}%`,\n blockSize: `${this.getView(dimensions) * 100}%`,\n })),\n );\n\n public readonly tuiScrollbar = input<'horizontal' | 'vertical'>('vertical');\n\n constructor() {\n super((subscriber) => this.stream$.subscribe(subscriber));\n }\n\n private get el(): HTMLElement {\n return this.scrollRef.nativeElement;\n }\n\n private getThumb(dimension: ComputedDimension): number {\n const compensation = this.getCompensation(dimension) || this.getView(dimension);\n\n return Math.abs(this.getScrolled(dimension) * (1 - compensation));\n }\n\n private getView(dimension: ComputedDimension): number {\n return this.tuiScrollbar() === 'vertical'\n ? Math.ceil((dimension.clientHeight / dimension.scrollHeight) * 100) / 100\n : Math.ceil((dimension.clientWidth / dimension.scrollWidth) * 100) / 100;\n }\n\n private getScrolled(dimension: ComputedDimension): number {\n return this.tuiScrollbar() === 'vertical'\n ? dimension.scrollTop / (dimension.scrollHeight - dimension.clientHeight)\n : dimension.scrollLeft / (dimension.scrollWidth - dimension.clientWidth);\n }\n\n private getCompensation(dimension: ComputedDimension): number {\n if (\n ((dimension.clientHeight * dimension.clientHeight) / dimension.scrollHeight >\n MIN_WIDTH &&\n this.tuiScrollbar() === 'vertical') ||\n ((dimension.clientWidth * dimension.clientWidth) / dimension.scrollWidth >\n MIN_WIDTH &&\n this.tuiScrollbar() === 'horizontal')\n ) {\n return 0;\n }\n\n return this.tuiScrollbar() === 'vertical'\n ? MIN_WIDTH / dimension.clientHeight\n : MIN_WIDTH / dimension.clientWidth;\n }\n}\n","import {Directive, inject} from '@angular/core';\nimport {takeUntilDestroyed} from '@angular/core/rxjs-interop';\nimport {tuiInjectElement} from '@taiga-ui/cdk/utils/dom';\nimport {TUI_TIMELINE_SUPPORT} from '@taiga-ui/core/tokens';\n\nimport {TUI_SCROLL_REF} from './scroll-ref.directive';\nimport {TuiScrollbarService} from './scrollbar.service';\nimport {TuiScrollbarPosition} from './scrollbar-position.directive';\n\n@Directive({\n selector: '[tuiScrollbar]',\n providers: [TuiScrollbarService],\n hostDirectives: [{directive: TuiScrollbarPosition, inputs: ['tuiScrollbar']}],\n})\nexport class TuiScrollbarDirective {\n private readonly scrollRef = inject(TUI_SCROLL_REF);\n private readonly style = tuiInjectElement().style;\n\n protected readonly scrollSub = inject(TuiScrollbarService)\n .pipe(takeUntilDestroyed())\n .subscribe(([top, left]) => {\n this.scrollRef.nativeElement.scrollTo({top, left, behavior: 'instant'});\n });\n\n constructor() {\n if (!inject(TUI_TIMELINE_SUPPORT)) {\n inject(TuiScrollbarPosition)\n .pipe(takeUntilDestroyed())\n .subscribe((position) => Object.assign(this.style, position));\n }\n }\n}\n","import {tuiCreateOptions} from '@taiga-ui/cdk/utils/di';\n\nexport interface TuiScrollbarOptions {\n mode: 'always' | 'hidden' | 'hover' | 'native';\n}\n\nexport const TUI_DEFAULT_SCROLLBAR_OPTIONS: TuiScrollbarOptions = {mode: 'always'};\n\nexport const [TUI_SCROLLBAR_OPTIONS, tuiScrollbarOptionsProvider] = tuiCreateOptions(\n TUI_DEFAULT_SCROLLBAR_OPTIONS,\n);\n","import {CdkScrollable} from '@angular/cdk/scrolling';\nimport {AsyncPipe} from '@angular/common';\nimport {ChangeDetectionStrategy, Component, inject, type OnInit} from '@angular/core';\nimport {TuiAnimated} from '@taiga-ui/cdk/directives/animated';\nimport {tuiInjectElement} from '@taiga-ui/cdk/utils/dom';\nimport {TUI_TIMELINE_SUPPORT} from '@taiga-ui/core/tokens';\nimport {type Observable, of} from 'rxjs';\n\nimport {TuiScrollControlsService} from './scroll-controls.service';\nimport {TuiScrollbarDirective} from './scrollbar.directive';\nimport {TUI_SCROLLBAR_OPTIONS} from './scrollbar.options';\n\n@Component({\n selector: 'tui-scroll-controls',\n imports: [AsyncPipe, TuiAnimated, TuiScrollbarDirective],\n templateUrl: './scroll-controls.template.html',\n styleUrl: './scroll-controls.style.less',\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [TuiScrollControlsService],\n host: {'[class._timeline]': 'timeline'},\n})\nexport class TuiScrollControls implements OnInit {\n private readonly scrollable = inject(CdkScrollable, {optional: true, host: true});\n private readonly el = tuiInjectElement();\n\n protected readonly nativeScrollbar = inject(TUI_SCROLLBAR_OPTIONS).mode === 'native';\n protected readonly timeline = inject(TUI_TIMELINE_SUPPORT);\n\n protected readonly refresh$: Observable<readonly [boolean, boolean]> = this.timeline\n ? of([true, true] as const)\n : inject(TuiScrollControlsService);\n\n public ngOnInit(): void {\n this.scrollable?.getElementRef().nativeElement.prepend?.(this.el);\n }\n}\n","@if (nativeScrollbar) {\n} @else {\n @if (refresh$ | async; as bars) {\n @if (bars[0]) {\n <div\n tuiAnimated\n class=\"t-bar t-bar_vertical\"\n (mousedown.capture.prevent)=\"(0)\"\n >\n <div\n tuiScrollbar=\"vertical\"\n class=\"t-thumb\"\n ></div>\n </div>\n }\n @if (bars[1]) {\n <div\n tuiAnimated\n class=\"t-bar t-bar_horizontal\"\n (mousedown.capture.prevent)=\"(0)\"\n >\n <div\n tuiScrollbar=\"horizontal\"\n class=\"t-thumb\"\n ></div>\n </div>\n }\n }\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n Directive,\n ElementRef,\n inject,\n} from '@angular/core';\nimport {WA_IS_IOS} from '@ng-web-apis/platform';\nimport {tuiGetElementOffset, tuiInjectElement} from '@taiga-ui/cdk/utils/dom';\nimport {TUI_TIMELINE_SUPPORT} from '@taiga-ui/core/tokens';\n\nimport {TuiScrollControls} from './scroll-controls.component';\nimport {TUI_SCROLL_REF, TuiScrollRef} from './scroll-ref.directive';\nimport {TUI_SCROLLBAR_OPTIONS} from './scrollbar.options';\n\n/**\n * An event for scrolling an element into view within {@link TuiScrollbar}.\n */\nexport const TUI_SCROLL_INTO_VIEW = 'tui-scroll-into-view';\n\n/**\n * An event to notify {@link TuiScrollbar} that\n * it should control a nested element.\n */\nexport const TUI_SCROLLABLE = 'tui-scrollable';\n\n/**\n * @deprecated\n * Cannot put it into viewProviders because of https://github.com/angular/angular/issues/65724\n * Cannot put it into providers because it shouldn't leak to content\n * TODO: Remove in v6 together with {@link TuiScrollable}\n */\n@Directive({\n selector: '[tuiDelegateGuard]',\n providers: [\n {\n provide: TUI_TIMELINE_SUPPORT,\n useFactory: () =>\n inject(TUI_TIMELINE_SUPPORT, {skipSelf: true}) &&\n !inject(TuiScrollbar).delegated,\n },\n ],\n})\nclass TuiDelegatedGuard {}\n\n@Component({\n selector: 'tui-scrollbar',\n imports: [TuiDelegatedGuard, TuiScrollControls],\n templateUrl: './scrollbar.template.html',\n styleUrl: './scrollbar.style.less',\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [\n {\n provide: TUI_SCROLL_REF,\n useFactory: () => inject(TuiScrollbar).browserScrollRef,\n },\n ],\n hostDirectives: [TuiScrollRef],\n host: {\n '[class._native]':\n 'options.mode === \"native\" || (isIOS && options.mode !== \"hidden\")',\n [`(${TUI_SCROLLABLE}.stop)`]: 'scrollRef = $event.detail',\n [`(${TUI_SCROLL_INTO_VIEW}.stop)`]: 'scrollIntoView($event.detail)',\n },\n})\nexport class TuiScrollbar {\n private readonly el = tuiInjectElement();\n\n protected readonly options = inject(TUI_SCROLLBAR_OPTIONS);\n protected readonly isIOS = inject(WA_IS_IOS);\n protected readonly browserScrollRef = new ElementRef(this.el);\n\n public get delegated(): boolean {\n return this.scrollRef !== this.el || this.options.mode === 'native';\n }\n\n protected get scrollRef(): HTMLElement {\n return this.browserScrollRef.nativeElement;\n }\n\n protected set scrollRef(element: HTMLElement) {\n this.browserScrollRef.nativeElement = element;\n }\n\n protected scrollIntoView(detail: HTMLElement): void {\n if (this.delegated) {\n return;\n }\n\n const {offsetHeight, offsetWidth} = detail;\n const {offsetTop, offsetLeft} = tuiGetElementOffset(this.scrollRef, detail);\n const scrollTop = offsetTop + offsetHeight / 2 - this.scrollRef.clientHeight / 2;\n const scrollLeft = offsetLeft + offsetWidth / 2 - this.scrollRef.clientWidth / 2;\n\n this.scrollRef.scrollTo?.(scrollLeft, scrollTop);\n }\n}\n","@if (!isIOS && options.mode !== 'native' && options.mode !== 'hidden') {\n <tui-scroll-controls\n tuiDelegateGuard\n class=\"t-bars\"\n [class.t-hover-mode]=\"options.mode === 'hover'\"\n />\n}\n<div\n class=\"t-content\"\n [class.t-content_delegated]=\"delegated\"\n>\n <ng-content />\n</div>\n","import {DestroyRef, Directive, effect, inject, input} from '@angular/core';\nimport {takeUntilDestroyed} from '@angular/core/rxjs-interop';\nimport {tuiInjectElement} from '@taiga-ui/cdk/utils/dom';\nimport {timer} from 'rxjs';\n\nimport {TUI_SCROLL_INTO_VIEW} from './scrollbar.component';\n\n/**\n * Directive scrolls element into view inside tui-scrollbar\n */\n@Directive({selector: '[tuiScrollIntoView]'})\nexport class TuiScrollIntoView {\n private readonly el = tuiInjectElement();\n private readonly destroyRef = inject(DestroyRef);\n\n public readonly tuiScrollIntoView = input<boolean>();\n\n protected readonly dispatchEvent = effect(() => {\n const scroll = this.tuiScrollIntoView();\n\n if (!scroll) {\n return;\n }\n\n // Timeout is necessary in order to give element render cycle to get into its final spot\n // (for example if it is inside dropdown box which has to be positioned first)\n timer(0)\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe(() => {\n this.el.dispatchEvent(\n new CustomEvent<Element>(TUI_SCROLL_INTO_VIEW, {\n bubbles: true,\n detail: this.el,\n }),\n );\n });\n });\n}\n","import {Directive, type OnInit} from '@angular/core';\nimport {tuiInjectElement} from '@taiga-ui/cdk/utils/dom';\n\nimport {TuiScrollRef} from './scroll-ref.directive';\nimport {TUI_SCROLLABLE} from './scrollbar.component';\n\n/**\n * @deprecated Use {@link TuiScrollRef} + {@link TuiScrollControls} instead\n * TODO: Drop in v6.0\n */\n@Directive({selector: '[tuiScrollable]', hostDirectives: [TuiScrollRef]})\nexport class TuiScrollable implements OnInit {\n private readonly el = tuiInjectElement();\n\n public ngOnInit(): void {\n this.el.dispatchEvent(\n new CustomEvent(TUI_SCROLLABLE, {bubbles: true, detail: this.el}),\n );\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["i1.TuiScrollbarPosition","i1.TuiScrollRef"],"mappings":"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"}
|