{"version":3,"file":"taiga-ui-addon-table-components-table-pagination.mjs","sources":["../../../projects/addon-table/components/table-pagination/table-pagination.options.ts","../../../projects/addon-table/components/table-pagination/table-pagination.component.ts","../../../projects/addon-table/components/table-pagination/table-pagination.template.html","../../../projects/addon-table/components/table-pagination/taiga-ui-addon-table-components-table-pagination.ts"],"sourcesContent":["import {InjectionToken, type Provider} from '@angular/core';\nimport {type TuiContext} from '@taiga-ui/cdk/types';\nimport {tuiProvideOptions} from '@taiga-ui/cdk/utils/miscellaneous';\nimport {type PolymorpheusContent} from '@taiga-ui/polymorpheus';\n\nfunction defaultSizeOptionContent({$implicit}: TuiContext<number>): string {\n    return `${$implicit}`;\n}\n\nexport interface TuiTablePaginationOptions {\n    readonly items: readonly number[];\n    readonly showPages: boolean;\n    readonly size: number;\n    readonly sizeOptionContent: PolymorpheusContent<TuiContext<number> & {total: number}>;\n}\n\nexport const TUI_TABLE_PAGINATION_DEFAULT_OPTIONS: TuiTablePaginationOptions = {\n    sizeOptionContent: defaultSizeOptionContent,\n    showPages: true,\n    items: [10, 20, 50, 100],\n    size: 10,\n};\n\n/**\n * Default parameters for TablePagination component\n */\nexport const TUI_TABLE_PAGINATION_OPTIONS = new InjectionToken(\n    ngDevMode ? 'TUI_TABLE_PAGINATION_OPTIONS' : '',\n    {\n        factory: () => TUI_TABLE_PAGINATION_DEFAULT_OPTIONS,\n    },\n);\n\nexport function tuiTablePaginationOptionsProvider(\n    options: Partial<TuiTablePaginationOptions>,\n): Provider {\n    return tuiProvideOptions(\n        TUI_TABLE_PAGINATION_OPTIONS,\n        options,\n        TUI_TABLE_PAGINATION_DEFAULT_OPTIONS,\n    );\n}\n","import {AsyncPipe, NgForOf, NgIf} from '@angular/common';\nimport {\n    ChangeDetectionStrategy,\n    Component,\n    EventEmitter,\n    inject,\n    Input,\n    Output,\n} from '@angular/core';\nimport {TUI_TABLE_PAGINATION_TEXTS} from '@taiga-ui/addon-table/tokens';\nimport {TuiButton} from '@taiga-ui/core/components/button';\nimport {TuiDataList} from '@taiga-ui/core/components/data-list';\nimport {TuiIcon} from '@taiga-ui/core/components/icon';\nimport {TuiLink} from '@taiga-ui/core/components/link';\nimport {TuiDropdownDirective, TuiDropdownOpen} from '@taiga-ui/core/directives/dropdown';\nimport {TUI_COMMON_ICONS, TUI_SPIN_ICONS, TUI_SPIN_TEXTS} from '@taiga-ui/core/tokens';\nimport {PolymorpheusOutlet} from '@taiga-ui/polymorpheus';\n\nimport {\n    TUI_TABLE_PAGINATION_OPTIONS,\n    type TuiTablePaginationOptions,\n} from './table-pagination.options';\n\nexport interface TuiTablePaginationEvent {\n    readonly page: number;\n    readonly size: number;\n}\n\n@Component({\n    standalone: true,\n    selector: 'tui-table-pagination',\n    imports: [\n        AsyncPipe,\n        NgForOf,\n        NgIf,\n        PolymorpheusOutlet,\n        TuiButton,\n        TuiDataList,\n        TuiDropdownDirective,\n        TuiDropdownOpen,\n        TuiIcon,\n        TuiLink,\n    ],\n    templateUrl: './table-pagination.template.html',\n    styleUrls: ['./table-pagination.style.less'],\n    changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class TuiTablePagination {\n    private readonly options = inject(TUI_TABLE_PAGINATION_OPTIONS);\n\n    protected open = false;\n    protected readonly icons = inject(TUI_SPIN_ICONS);\n    protected readonly spinTexts$ = inject(TUI_SPIN_TEXTS);\n    protected readonly texts$ = inject(TUI_TABLE_PAGINATION_TEXTS);\n    protected readonly commonIcons = inject(TUI_COMMON_ICONS);\n\n    @Input()\n    public items: readonly number[] = this.options.items;\n\n    @Input()\n    public total = 0;\n\n    @Input()\n    public page = 0;\n\n    @Input()\n    public size = this.options.size;\n\n    @Output()\n    public readonly paginationChange = new EventEmitter<TuiTablePaginationEvent>();\n\n    public onItem(size: number): void {\n        const {start} = this;\n\n        this.size = size;\n        this.open = false;\n        this.page = Math.floor(start / this.size);\n        this.paginationChange.emit(this.pagination);\n    }\n\n    protected get pages(): number {\n        return Math.ceil(this.total / this.size);\n    }\n\n    protected get showPages(): boolean {\n        return this.options.showPages;\n    }\n\n    protected get sizeOptionContent(): TuiTablePaginationOptions['sizeOptionContent'] {\n        return this.options.sizeOptionContent;\n    }\n\n    protected get start(): number {\n        return Math.min(this.page, Math.floor(this.total / this.size)) * this.size;\n    }\n\n    protected get end(): number {\n        return Math.min(this.start + this.size, this.total);\n    }\n\n    protected get leftDisabled(): boolean {\n        return !this.start;\n    }\n\n    protected get rightDisabled(): boolean {\n        return this.end === this.total;\n    }\n\n    protected get pagination(): TuiTablePaginationEvent {\n        return {\n            page: this.page,\n            size: this.size,\n        };\n    }\n\n    protected back(): void {\n        this.page--;\n        this.paginationChange.emit(this.pagination);\n    }\n\n    protected forth(): void {\n        this.page++;\n        this.paginationChange.emit(this.pagination);\n    }\n}\n","<ng-container *ngIf=\"texts$ | async as texts\">\n    <span class=\"t-pages\">\n        <ng-container *ngIf=\"showPages\">\n            {{ texts.pages }}\n            <strong class=\"t-strong\">{{ pages }}</strong>\n        </ng-container>\n    </span>\n    <span automation-id=\"tui-table-pagination__lines-per-page-wrapper\">\n        {{ texts.linesPerPage }}\n\n        <button\n            *ngIf=\"total !== 0; else zeroTotal\"\n            tuiLink\n            type=\"button\"\n            [tuiDropdown]=\"content\"\n            [(tuiDropdownOpen)]=\"open\"\n        >\n            <strong>{{ start + 1 }}–{{ end }}</strong>\n        </button>\n        <ng-template #zeroTotal>\n            <strong>0 - 0</strong>\n        </ng-template>\n        <ng-template #content>\n            <tui-data-list size=\"s\">\n                <ng-container *ngFor=\"let item of items\">\n                    <button\n                        tuiOption\n                        type=\"button\"\n                        class=\"t-item\"\n                        (click)=\"onItem(item)\"\n                    >\n                        <ng-container\n                            *polymorpheusOutlet=\"sizeOptionContent as text; context: {$implicit: item, total: total}\"\n                        >\n                            {{ text }}\n                        </ng-container>\n                        <tui-icon\n                            *ngIf=\"item === size; else fakeIcon\"\n                            class=\"t-checkmark\"\n                            [icon]=\"commonIcons.check\"\n                        />\n\n                        <ng-template #fakeIcon>\n                            <span class=\"t-checkmark\"></span>\n                        </ng-template>\n                    </button>\n                </ng-container>\n            </tui-data-list>\n        </ng-template>\n        {{ texts.of }}\n        <strong class=\"t-strong\">{{ total }}</strong>\n    </span>\n    <ng-container *ngIf=\"spinTexts$ | async as spinTexts\">\n        <button\n            appearance=\"icon\"\n            size=\"xs\"\n            tuiIconButton\n            type=\"button\"\n            class=\"t-button t-button_back\"\n            [disabled]=\"leftDisabled\"\n            [iconStart]=\"icons.decrement\"\n            (click)=\"back()\"\n        >\n            {{ spinTexts[0] }}\n        </button>\n        <button\n            appearance=\"icon\"\n            size=\"xs\"\n            tuiIconButton\n            type=\"button\"\n            class=\"t-button\"\n            [disabled]=\"rightDisabled\"\n            [iconStart]=\"icons.increment\"\n            (click)=\"forth()\"\n        >\n            {{ spinTexts[1] }}\n        </button>\n    </ng-container>\n</ng-container>\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}