{"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 {type TuiContext} from '@taiga-ui/cdk/types';\nimport {tuiCreateOptions} from '@taiga-ui/cdk/utils/di';\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, tuiTablePaginationOptionsProvider] =\n    tuiCreateOptions(TUI_TABLE_PAGINATION_DEFAULT_OPTIONS);\n","import {\n    ChangeDetectionStrategy,\n    Component,\n    computed,\n    inject,\n    input,\n    model,\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 {TuiDropdown} from '@taiga-ui/core/portals/dropdown';\nimport {TUI_COMMON_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    selector: 'tui-table-pagination',\n    imports: [PolymorpheusOutlet, TuiButton, TuiDataList, TuiDropdown, TuiIcon, TuiLink],\n    templateUrl: './table-pagination.template.html',\n    styleUrl: './table-pagination.style.less',\n    changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class TuiTablePagination {\n    protected readonly options = inject(TUI_TABLE_PAGINATION_OPTIONS);\n    protected readonly icons = inject(TUI_COMMON_ICONS);\n    protected readonly spinTexts = inject(TUI_SPIN_TEXTS);\n    protected readonly texts = inject(TUI_TABLE_PAGINATION_TEXTS);\n    protected readonly pages = computed(() => Math.ceil(this.total() / this.size()));\n    protected readonly end = computed(() =>\n        Math.min(this.start + this.size(), this.total()),\n    );\n\n    protected readonly rightDisabled = computed(() => this.end() === this.total());\n    protected readonly pagination = computed<TuiTablePaginationEvent>(() => ({\n        page: this.page(),\n        size: this.size(),\n    }));\n\n    public readonly items = input(this.options.items);\n    public readonly total = input(0);\n    public readonly page = model(0);\n    public readonly size = model(this.options.size);\n    public readonly paginationChange = output<TuiTablePaginationEvent>();\n\n    public onItem(size: number): void {\n        const {start} = this;\n\n        this.size.set(size);\n        this.page.set(Math.floor(start / this.size()));\n        this.paginationChange.emit(this.pagination());\n    }\n\n    protected get sizeOptionContent(): TuiTablePaginationOptions['sizeOptionContent'] {\n        return this.options.sizeOptionContent;\n    }\n\n    protected get start(): number {\n        return (\n            Math.min(this.page(), Math.floor(this.total() / this.size())) * this.size()\n        );\n    }\n\n    protected back(): void {\n        this.page.update((page) => page - 1);\n        this.paginationChange.emit(this.pagination());\n    }\n\n    protected forth(): void {\n        this.page.update((page) => page + 1);\n        this.paginationChange.emit(this.pagination());\n    }\n}\n","@if (texts(); as texts) {\n    <span class=\"t-pages\">\n        @if (options.showPages) {\n            {{ texts.pages }}\n            <strong class=\"t-strong\">{{ pages() }}</strong>\n        }\n    </span>\n    <span automation-id=\"tui-table-pagination__lines-per-page-wrapper\">\n        {{ texts.linesPerPage }}\n        @if (total() !== 0) {\n            <button\n                tuiDropdown\n                tuiDropdownAuto\n                tuiLink\n                type=\"button\"\n            >\n                <strong>{{ start + 1 }}–{{ end() }}</strong>\n                <tui-data-list\n                    *tuiDropdown=\"let close\"\n                    size=\"s\"\n                >\n                    @for (item of items(); track item) {\n                        <button\n                            tuiOption\n                            type=\"button\"\n                            class=\"t-item\"\n                            (click)=\"close(); onItem(item)\"\n                        >\n                            <ng-container\n                                *polymorpheusOutlet=\"\n                                    sizeOptionContent as text;\n                                    context: {$implicit: item, total: total()}\n                                \"\n                            >\n                                {{ text }}\n                            </ng-container>\n                            @if (item === size()) {\n                                <tui-icon\n                                    class=\"t-checkmark\"\n                                    [icon]=\"icons.check\"\n                                />\n                            } @else {\n                                <span class=\"t-checkmark\"></span>\n                            }\n                        </button>\n                    }\n                </tui-data-list>\n            </button>\n        } @else {\n            <strong>0 - 0</strong>\n        }\n        {{ texts.of }}\n        <strong class=\"t-strong\">{{ total() }}</strong>\n    </span>\n    @if (spinTexts(); as spinTexts) {\n        <button\n            appearance=\"icon\"\n            size=\"xs\"\n            tuiIconButton\n            type=\"button\"\n            class=\"t-button t-button_back\"\n            [disabled]=\"!start\"\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    }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}