{"version":3,"file":"taiga-ui-kit-components-pager.mjs","sources":["../../../projects/kit/components/pager/pager.component.ts","../../../projects/kit/components/pager/pager.component.html","../../../projects/kit/components/pager/taiga-ui-kit-components-pager.ts"],"sourcesContent":["import {NgTemplateOutlet} from '@angular/common';\nimport {\n    type AfterViewInit,\n    ChangeDetectionStrategy,\n    Component,\n    computed,\n    type ElementRef,\n    inject,\n    input,\n    type OnChanges,\n    signal,\n    type TemplateRef,\n    viewChildren,\n} from '@angular/core';\nimport {takeUntilDestroyed, toSignal} from '@angular/core/rxjs-interop';\nimport {\n    WA_MUTATION_OBSERVER_INIT,\n    WaMutationObserverService,\n} from '@ng-web-apis/mutation-observer';\nimport {tuiWatch} from '@taiga-ui/cdk/observables';\nimport {type TuiSizeS} from '@taiga-ui/core/types';\nimport {delay, map} from 'rxjs';\n\n@Component({\n    selector: 'tui-pager',\n    imports: [NgTemplateOutlet],\n    templateUrl: './pager.component.html',\n    styleUrl: './pager.styles.less',\n    changeDetection: ChangeDetectionStrategy.OnPush,\n    providers: [\n        WaMutationObserverService,\n        {\n            provide: WA_MUTATION_OBSERVER_INIT,\n            useValue: {\n                attributeOldValue: true,\n                characterData: true,\n                childList: true,\n                subtree: true,\n            },\n        },\n    ],\n    host: {\n        '[attr.data-size]': 'size()',\n        '[style.--t-gap.px]': 'gap()',\n        '[style.max-width.px]': 'maxWidth()',\n    },\n})\nexport class TuiPager implements OnChanges, AfterViewInit {\n    protected readonly items = viewChildren<ElementRef<HTMLElement>>('item');\n    protected readonly start = signal(0);\n    protected readonly end = signal(0);\n    protected readonly left = signal(0);\n    protected readonly gap = computed(() => (this.size() === 'm' ? 9 : 7));\n\n    protected readonly maxWidth = toSignal(\n        inject(WaMutationObserverService, {self: true}).pipe(\n            delay(0),\n            map(() => this.visibleWidth),\n            tuiWatch(),\n            takeUntilDestroyed(),\n        ),\n        {initialValue: 0},\n    );\n\n    public readonly max = input(6);\n    public readonly count = input(6);\n    public readonly size = input<TuiSizeS>('m');\n    public readonly valueContent = input<TemplateRef<unknown>>();\n    public readonly index = input(0);\n\n    public ngOnChanges(): void {\n        this.move();\n    }\n\n    public ngAfterViewInit(): void {\n        this.move();\n    }\n\n    private get visibleRange(): [start: number, end: number] {\n        const max = this.max() > this.count() ? this.count() : this.max();\n\n        const start = Math.min(\n            Math.max(this.index() - Math.floor(max / 2), 0),\n            this.count() - max,\n        );\n\n        return [start, start + (max - 1)];\n    }\n\n    private get visibleWidth(): number {\n        return (\n            this.items()\n                .map((item) => item.nativeElement.offsetWidth)\n                .slice(this.start(), this.end() + 1)\n                .reduce((sum, item) => sum + item + this.gap(), 0) - this.gap()\n        );\n    }\n\n    private move(): void {\n        const [start, end] = this.visibleRange;\n\n        this.start.set(start);\n        this.end.set(end);\n\n        let left = this.start() * this.gap();\n\n        for (let i = 0; i < this.start(); i++) {\n            left += this.items()[i]?.nativeElement.offsetWidth ?? 0;\n        }\n\n        this.left.set(-1 * left);\n    }\n}\n","<div\n    class=\"t-items\"\n    [style.transform]=\"`translateX(calc(var(--tui-inline) * ${left()}px))`\"\n>\n    @for (_ of '-'.repeat(count()); track $index) {\n        <div\n            #item\n            class=\"t-item\"\n            [attr.data-index]=\"$index\"\n            [class._active]=\"$index === index()\"\n            [class._last]=\"$index === count() - 1\"\n            [class._post-active]=\"$index === index() + 1\"\n            [class._pre-active]=\"$index === index() - 1\"\n            [class._pre-last]=\"$index === count() - 2\"\n            [class._visible]=\"$index >= start() && $index <= end()\"\n        >\n            <ng-container *ngTemplateOutlet=\"valueContent() || null; context: {$implicit: $index}\" />\n        </div>\n    }\n</div>\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}