{"version":3,"file":"taiga-ui-kit-components-line-clamp.mjs","sources":["../../../projects/kit/components/line-clamp/line-clamp.options.ts","../../../projects/kit/components/line-clamp/line-clamp-box.component.ts","../../../projects/kit/components/line-clamp/line-clamp-position.directive.ts","../../../projects/kit/components/line-clamp/line-clamp.component.ts","../../../projects/kit/components/line-clamp/line-clamp.template.html","../../../projects/kit/components/line-clamp/taiga-ui-kit-components-line-clamp.ts"],"sourcesContent":["import {tuiCreateOptions} from '@taiga-ui/cdk/utils/di';\n\nexport interface TuiLineClampOptions {\n    readonly showHint: boolean;\n}\n\nexport const TUI_LINE_CLAMP_DEFAULT_OPTIONS: TuiLineClampOptions = {showHint: true};\n\n/**\n * Default parameters for LineClamp component\n */\nexport const [TUI_LINE_CLAMP_OPTIONS, tuiLineClampOptionsProvider] = tuiCreateOptions(\n    TUI_LINE_CLAMP_DEFAULT_OPTIONS,\n);\n","import {ChangeDetectionStrategy, Component, inject} from '@angular/core';\nimport {TUI_HINT_PROVIDERS, TuiHintComponent} from '@taiga-ui/core/portals/hint';\nimport {PolymorpheusOutlet} from '@taiga-ui/polymorpheus';\n\nimport {TuiLineClamp} from './line-clamp.component';\n\n@Component({\n    selector: 'tui-line-clamp-box',\n    imports: [PolymorpheusOutlet],\n    template:\n        '<ng-container *polymorpheusOutlet=\"content() as text\">{{ text }}</ng-container>',\n    styleUrl: './line-clamp-box.style.less',\n    changeDetection: ChangeDetectionStrategy.OnPush,\n    providers: TUI_HINT_PROVIDERS,\n    host: {'[style.line-height.px]': 'host.line()', '[style.min-width.px]': 'width'},\n})\nexport class TuiLineClampBox extends TuiHintComponent {\n    protected readonly host = inject(TuiLineClamp);\n\n    protected get width(): number {\n        return this.accessor.getClientRect().width;\n    }\n}\n","import {Directive, inject} from '@angular/core';\nimport {\n    tuiAsPositionAccessor,\n    TuiPositionAccessor,\n    type TuiRectAccessor,\n} from '@taiga-ui/core/classes';\nimport {TuiHintDirective} from '@taiga-ui/core/portals/hint';\nimport {type TuiPoint} from '@taiga-ui/core/types';\n\n@Directive({\n    selector: '[tuiLineClampPosition]',\n    providers: [tuiAsPositionAccessor(TuiLineClampPositionDirective)],\n})\nexport class TuiLineClampPositionDirective extends TuiPositionAccessor {\n    private readonly accessor = inject<TuiRectAccessor>(TuiHintDirective);\n    public readonly type = 'hint';\n\n    public getPosition(): TuiPoint {\n        const {top, left} = this.accessor.getClientRect();\n\n        return [left, top];\n    }\n}\n","import {\n    type AfterViewChecked,\n    ChangeDetectionStrategy,\n    Component,\n    computed,\n    ElementRef,\n    inject,\n    input,\n    viewChild,\n} from '@angular/core';\nimport {outputFromObservable, toObservable, toSignal} from '@angular/core/rxjs-interop';\nimport {TuiTransitioned} from '@taiga-ui/cdk/directives/transitioned';\nimport {tuiInjectElement} from '@taiga-ui/cdk/utils/dom';\nimport {tuiPx} from '@taiga-ui/cdk/utils/miscellaneous';\nimport {TUI_HINT_COMPONENT, TuiHint, TuiHintDirective} from '@taiga-ui/core/portals/hint';\nimport {TUI_FONT_OFFSET} from '@taiga-ui/core/utils/miscellaneous';\nimport {type PolymorpheusContent, PolymorpheusOutlet} from '@taiga-ui/polymorpheus';\nimport {\n    debounceTime,\n    distinctUntilChanged,\n    filter,\n    fromEvent,\n    map,\n    of,\n    pairwise,\n    startWith,\n    Subject,\n    switchMap,\n} from 'rxjs';\n\nimport {TUI_LINE_CLAMP_OPTIONS} from './line-clamp.options';\nimport {TuiLineClampBox} from './line-clamp-box.component';\nimport {TuiLineClampPositionDirective} from './line-clamp-position.directive';\n\n@Component({\n    selector: 'tui-line-clamp',\n    imports: [PolymorpheusOutlet, TuiHint, TuiLineClampPositionDirective],\n    templateUrl: './line-clamp.template.html',\n    styleUrl: './line-clamp.style.less',\n    changeDetection: ChangeDetectionStrategy.OnPush,\n    providers: [{provide: TUI_HINT_COMPONENT, useValue: TuiLineClampBox}],\n    hostDirectives: [TuiTransitioned],\n    host: {\n        '[style.line-height.px]': 'line()',\n        '(mouseenter)': 'update()',\n        '(resize)': 'update()',\n        '(transitionend)': 'update()',\n    },\n})\nexport class TuiLineClamp implements AfterViewChecked {\n    private readonly offset = inject(TUI_FONT_OFFSET);\n    private readonly outlet = viewChild.required(TuiHintDirective, {read: ElementRef});\n    private readonly options = inject(TUI_LINE_CLAMP_OPTIONS);\n    private readonly el = tuiInjectElement();\n    private readonly isOverflown$ = new Subject<boolean>();\n    private readonly maxHeight = computed(() => this.line() * this.linesLimit());\n    public readonly line = computed(() => this.lineHeight() + this.offset());\n    public readonly lineHeight = input(24);\n    public readonly linesLimit = input(1);\n    public readonly content = input<PolymorpheusContent>();\n\n    public readonly overflownChange = outputFromObservable(\n        this.isOverflown$.pipe(debounceTime(0), distinctUntilChanged()),\n    );\n\n    protected readonly lineClamp = toSignal(\n        toObservable(this.linesLimit).pipe(\n            startWith(1),\n            pairwise(),\n            switchMap(([prev, next]) =>\n                next >= prev\n                    ? of(next)\n                    : fromEvent(this.el, 'transitionend').pipe(\n                          filter((e) => e.target === e.currentTarget),\n                          map(() => next),\n                      ),\n            ),\n        ),\n        {initialValue: 0},\n    );\n\n    public ngAfterViewChecked(): void {\n        this.update();\n        this.isOverflown$.next(this.overflown);\n    }\n\n    protected get overflown(): boolean {\n        const {scrollHeight, scrollWidth} = this.outlet().nativeElement;\n        const {clientWidth} = this.el;\n\n        return scrollHeight > this.maxHeight() || scrollWidth > clientWidth;\n    }\n\n    protected get computedContent(): PolymorpheusContent {\n        return this.options.showHint && this.overflown ? this.content() : '';\n    }\n\n    protected update(): void {\n        this.el.style.height = tuiPx(this.outlet().nativeElement.scrollHeight);\n        this.el.style.maxHeight = tuiPx(this.maxHeight());\n        this.el.classList.toggle('_overflown', this.overflown);\n    }\n}\n","<div\n    tuiLineClampPosition\n    class=\"t-wrapper\"\n    [style.-webkit-line-clamp]=\"lineClamp()\"\n    [style.word-break]=\"lineClamp() > 1 ? 'break-word' : 'break-all'\"\n    [tuiHint]=\"computedContent\"\n>\n    <ng-container *polymorpheusOutlet=\"content() as text\">{{ text }}</ng-container>\n</div>\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}