{"version":3,"file":"taiga-ui-kit-components-rating.mjs","sources":["../../../projects/kit/components/rating/rating.options.ts","../../../projects/kit/components/rating/rating.component.ts","../../../projects/kit/components/rating/rating.template.html","../../../projects/kit/components/rating/taiga-ui-kit-components-rating.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\nexport interface TuiRatingContext extends TuiContext<number> {\n    readonly value: number;\n    readonly filled: boolean;\n}\n\nexport interface TuiRatingOptions {\n    readonly icon: PolymorpheusContent<TuiRatingContext>;\n    readonly max: number;\n}\n\nexport const TUI_RATING_DEFAULT_OPTIONS: TuiRatingOptions = {\n    icon: '@tui.star',\n    max: 5,\n};\n\nexport const [TUI_RATING_OPTIONS, tuiRatingOptionsProvider] = tuiCreateOptions(\n    TUI_RATING_DEFAULT_OPTIONS,\n);\n","import {\n    ChangeDetectionStrategy,\n    Component,\n    computed,\n    inject,\n    input,\n    signal,\n} from '@angular/core';\nimport {FormsModule} from '@angular/forms';\nimport {TuiControl} from '@taiga-ui/cdk/classes';\nimport {tuiFallbackValueProvider} from '@taiga-ui/cdk/tokens';\nimport {tuiClamp} from '@taiga-ui/cdk/utils/math';\nimport {TuiIcon} from '@taiga-ui/core/components/icon';\nimport {PolymorpheusOutlet} from '@taiga-ui/polymorpheus';\n\nimport {TUI_RATING_OPTIONS} from './rating.options';\n\n@Component({\n    selector: 'tui-rating',\n    imports: [FormsModule, PolymorpheusOutlet, TuiIcon],\n    templateUrl: './rating.template.html',\n    styleUrl: './rating.style.less',\n    changeDetection: ChangeDetectionStrategy.OnPush,\n    providers: [tuiFallbackValueProvider(0)],\n    host: {\n        '[class._active]': 'active()',\n        '[class._disabled]': 'disabled()',\n        '[class._readonly]': 'readOnly()',\n        '(document:pointerup)': 'onPointer(-1)',\n        '(keydown.capture)': 'onKeyDown($event)',\n        '(pointercancel)': 'onPointer(-1)',\n        '(pointerdown)': 'onPointer(1)',\n    },\n})\nexport class TuiRating extends TuiControl<number> {\n    private readonly options = inject(TUI_RATING_OPTIONS);\n    protected readonly active = signal(0);\n    protected readonly array = computed(() => Array.from({length: this.max()}));\n    public readonly icon = input(this.options.icon);\n    public readonly max = input(this.options.max);\n\n    protected onKeyDown(event: KeyboardEvent): void {\n        if (this.readOnly()) {\n            event.preventDefault();\n        }\n    }\n\n    protected onPointer(delta: number): void {\n        this.active.update((active) => tuiClamp(active + delta, 0, 1));\n    }\n\n    protected onClick(value: number): void {\n        if (this.active()) {\n            this.onChange(value);\n        }\n    }\n\n    protected isActive(index: number): boolean {\n        return Math.ceil(this.value()) >= this.max() - index;\n    }\n\n    protected isFraction(index: number): boolean {\n        return this.value() > this.max() - index - 1 && this.value() < this.max() - index;\n    }\n\n    protected getCut(index: number): number {\n        return this.isFraction(index)\n            ? 100 * Math.max(this.max() - index - this.value(), 0)\n            : 0;\n    }\n}\n","<input\n    min=\"1\"\n    type=\"range\"\n    class=\"t-range\"\n    [attr.aria-disabled]=\"readOnly()\"\n    [disabled]=\"disabled()\"\n    [max]=\"max()\"\n    [ngModel]=\"value()\"\n    [ngModelOptions]=\"{standalone: true}\"\n    (blur)=\"onTouched()\"\n    (ngModelChange)=\"onChange($event)\"\n/>\n<div class=\"t-items\">\n    @for (_ of array(); track $index) {\n        @let $implicit = max() - $index;\n        @let filled = $implicit - value() < 1;\n\n        <div\n            class=\"t-item\"\n            [class.t-item_active]=\"isActive($index)\"\n            (pointerup)=\"onClick($implicit)\"\n        >\n            @if (isFraction($index)) {\n                <tui-icon\n                    *polymorpheusOutlet=\"icon() as src; context: {$implicit, filled: false, value: value()}\"\n                    class=\"t-icon t-icon_blank\"\n                    [background]=\"src.toString()\"\n                    [style.--t-cut.%]=\"100 - getCut($index)\"\n                />\n            }\n            <tui-icon\n                *polymorpheusOutlet=\"icon() as src; context: {$implicit, filled, value: value()}\"\n                class=\"t-icon\"\n                [background]=\"src.toString()\"\n                [style.--t-cut.%]=\"getCut($index)\"\n            />\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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"}