@taiga-ui/kit 4.4.1 → 4.5.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/components/calendar-month/calendar-month.component.d.ts +1 -1
- package/components/calendar-range/calendar-range.component.d.ts +2 -2
- package/components/checkbox/checkbox.options.d.ts +1 -1
- package/components/files/file/file.options.d.ts +1 -1
- package/components/files/files.utils.d.ts +1 -1
- package/components/index.d.ts +1 -0
- package/components/input-password/index.d.ts +2 -0
- package/components/input-password/input-password.component.d.ts +13 -0
- package/components/input-password/input-password.options.d.ts +12 -0
- package/components/input-phone-international/input-phone-international.component.d.ts +2 -1
- package/components/pagination/pagination.component.d.ts +1 -1
- package/components/preview/pagination/preview-pagination.component.d.ts +1 -1
- package/components/radio/radio.options.d.ts +1 -1
- package/components/radio-list/radio-list.component.d.ts +1 -0
- package/esm2022/components/accordion/accordion-item.component.mjs +3 -3
- package/esm2022/components/action-bar/action-bar.component.mjs +3 -3
- package/esm2022/components/avatar/avatar-labeled.component.mjs +3 -3
- package/esm2022/components/avatar/avatar-outline.directive.mjs +2 -2
- package/esm2022/components/avatar/avatar.component.mjs +3 -3
- package/esm2022/components/badge/badge.directive.mjs +2 -2
- package/esm2022/components/badge-notification/badge-notification.component.mjs +3 -3
- package/esm2022/components/badged-content/badged-content.component.mjs +3 -3
- package/esm2022/components/block/block.directive.mjs +2 -2
- package/esm2022/components/breadcrumbs/breadcrumbs.component.mjs +3 -3
- package/esm2022/components/calendar-month/calendar-month.component.mjs +3 -3
- package/esm2022/components/calendar-range/calendar-range.component.mjs +10 -6
- package/esm2022/components/carousel/carousel.component.mjs +3 -3
- package/esm2022/components/checkbox/checkbox.component.mjs +6 -4
- package/esm2022/components/checkbox/checkbox.options.mjs +1 -1
- package/esm2022/components/chip/chip.directive.mjs +2 -2
- package/esm2022/components/comment/comment.directive.mjs +2 -2
- package/esm2022/components/compass/compass.component.mjs +2 -2
- package/esm2022/components/elastic-container/elastic-container.component.mjs +3 -3
- package/esm2022/components/files/file/file.component.mjs +3 -3
- package/esm2022/components/files/file/file.options.mjs +1 -1
- package/esm2022/components/files/files/files.component.mjs +3 -3
- package/esm2022/components/files/files.utils.mjs +1 -1
- package/esm2022/components/files/input-files/input-files.component.mjs +3 -3
- package/esm2022/components/filter/filter.component.mjs +3 -3
- package/esm2022/components/index.mjs +2 -1
- package/esm2022/components/input-inline/input-inline.component.mjs +3 -3
- package/esm2022/components/input-password/index.mjs +3 -0
- package/esm2022/components/input-password/input-password.component.mjs +65 -0
- package/esm2022/components/input-password/input-password.options.mjs +12 -0
- package/esm2022/components/input-password/taiga-ui-kit-components-input-password.mjs +5 -0
- package/esm2022/components/input-phone-international/input-phone-international.component.mjs +6 -4
- package/esm2022/components/items-with-more/items-with-more.service.mjs +4 -4
- package/esm2022/components/line-clamp/line-clamp-box.component.mjs +3 -3
- package/esm2022/components/pagination/pagination.component.mjs +3 -3
- package/esm2022/components/pdf-viewer/pdf-viewer.component.mjs +3 -3
- package/esm2022/components/pin/pin.directive.mjs +2 -2
- package/esm2022/components/preview/pagination/preview-pagination.component.mjs +3 -3
- package/esm2022/components/preview/preview-dialog/preview-dialog.component.mjs +3 -3
- package/esm2022/components/preview/preview.component.mjs +3 -3
- package/esm2022/components/preview/zoom/preview-zoom.component.mjs +3 -3
- package/esm2022/components/progress/progress-bar/progress-bar.component.mjs +2 -2
- package/esm2022/components/progress/progress-bar/progress-color-segments.directive.mjs +3 -3
- package/esm2022/components/progress/progress-circle/progress-circle.component.mjs +3 -3
- package/esm2022/components/progress/progress-label/progress-label.component.mjs +2 -2
- package/esm2022/components/pulse/pulse.component.mjs +3 -3
- package/esm2022/components/push/push-alert.component.mjs +3 -3
- package/esm2022/components/push/push.component.mjs +3 -3
- package/esm2022/components/radio/radio.component.mjs +7 -4
- package/esm2022/components/radio/radio.options.mjs +1 -1
- package/esm2022/components/radio-list/radio-list.component.mjs +5 -2
- package/esm2022/components/range/range.component.mjs +3 -3
- package/esm2022/components/rating/rating.component.mjs +3 -3
- package/esm2022/components/segmented/segmented.component.mjs +5 -5
- package/esm2022/components/slider/helpers/slider-thumb-label.component.mjs +3 -3
- package/esm2022/components/slider/slider.component.mjs +2 -2
- package/esm2022/components/status/status.directive.mjs +2 -2
- package/esm2022/components/stepper/step.component.mjs +3 -3
- package/esm2022/components/switch/switch.component.mjs +2 -2
- package/esm2022/components/tabs/tabs-horizontal.directive.mjs +3 -3
- package/esm2022/components/tabs/tabs-with-more.component.mjs +3 -3
- package/esm2022/components/tabs/tabs.directive.mjs +2 -2
- package/esm2022/components/tiles/tiles.component.mjs +2 -2
- package/esm2022/directives/button-group/button-group.directive.mjs +2 -2
- package/esm2022/directives/connected/connected.directive.mjs +2 -2
- package/esm2022/directives/fade/fade.directive.mjs +3 -3
- package/esm2022/directives/fluid-typography/fluid-typography.directive.mjs +3 -3
- package/esm2022/directives/icon-badge/icon-badge.directive.mjs +2 -2
- package/esm2022/directives/sensitive/sensitive.directive.mjs +5 -5
- package/fesm2022/taiga-ui-kit-components-accordion.mjs +2 -2
- package/fesm2022/taiga-ui-kit-components-accordion.mjs.map +1 -1
- package/fesm2022/taiga-ui-kit-components-action-bar.mjs +2 -2
- package/fesm2022/taiga-ui-kit-components-action-bar.mjs.map +1 -1
- package/fesm2022/taiga-ui-kit-components-avatar.mjs +6 -6
- package/fesm2022/taiga-ui-kit-components-avatar.mjs.map +1 -1
- package/fesm2022/taiga-ui-kit-components-badge-notification.mjs +2 -2
- package/fesm2022/taiga-ui-kit-components-badge-notification.mjs.map +1 -1
- package/fesm2022/taiga-ui-kit-components-badge.mjs +2 -2
- package/fesm2022/taiga-ui-kit-components-badge.mjs.map +1 -1
- package/fesm2022/taiga-ui-kit-components-badged-content.mjs +2 -2
- package/fesm2022/taiga-ui-kit-components-badged-content.mjs.map +1 -1
- package/fesm2022/taiga-ui-kit-components-block.mjs +2 -2
- package/fesm2022/taiga-ui-kit-components-block.mjs.map +1 -1
- package/fesm2022/taiga-ui-kit-components-breadcrumbs.mjs +2 -2
- package/fesm2022/taiga-ui-kit-components-breadcrumbs.mjs.map +1 -1
- package/fesm2022/taiga-ui-kit-components-calendar-month.mjs +2 -2
- package/fesm2022/taiga-ui-kit-components-calendar-month.mjs.map +1 -1
- package/fesm2022/taiga-ui-kit-components-calendar-range.mjs +10 -6
- package/fesm2022/taiga-ui-kit-components-calendar-range.mjs.map +1 -1
- package/fesm2022/taiga-ui-kit-components-carousel.mjs +2 -2
- package/fesm2022/taiga-ui-kit-components-carousel.mjs.map +1 -1
- package/fesm2022/taiga-ui-kit-components-checkbox.mjs +5 -3
- package/fesm2022/taiga-ui-kit-components-checkbox.mjs.map +1 -1
- package/fesm2022/taiga-ui-kit-components-chip.mjs +2 -2
- package/fesm2022/taiga-ui-kit-components-chip.mjs.map +1 -1
- package/fesm2022/taiga-ui-kit-components-comment.mjs +2 -2
- package/fesm2022/taiga-ui-kit-components-comment.mjs.map +1 -1
- package/fesm2022/taiga-ui-kit-components-compass.mjs +2 -2
- package/fesm2022/taiga-ui-kit-components-compass.mjs.map +1 -1
- package/fesm2022/taiga-ui-kit-components-elastic-container.mjs +2 -2
- package/fesm2022/taiga-ui-kit-components-elastic-container.mjs.map +1 -1
- package/fesm2022/taiga-ui-kit-components-files.mjs +6 -6
- package/fesm2022/taiga-ui-kit-components-files.mjs.map +1 -1
- package/fesm2022/taiga-ui-kit-components-filter.mjs +2 -2
- package/fesm2022/taiga-ui-kit-components-filter.mjs.map +1 -1
- package/fesm2022/taiga-ui-kit-components-input-inline.mjs +2 -2
- package/fesm2022/taiga-ui-kit-components-input-inline.mjs.map +1 -1
- package/fesm2022/taiga-ui-kit-components-input-password.mjs +81 -0
- package/fesm2022/taiga-ui-kit-components-input-password.mjs.map +1 -0
- package/fesm2022/taiga-ui-kit-components-input-phone-international.mjs +5 -4
- package/fesm2022/taiga-ui-kit-components-input-phone-international.mjs.map +1 -1
- package/fesm2022/taiga-ui-kit-components-items-with-more.mjs +3 -3
- package/fesm2022/taiga-ui-kit-components-items-with-more.mjs.map +1 -1
- package/fesm2022/taiga-ui-kit-components-line-clamp.mjs +2 -2
- package/fesm2022/taiga-ui-kit-components-line-clamp.mjs.map +1 -1
- package/fesm2022/taiga-ui-kit-components-pagination.mjs +2 -2
- package/fesm2022/taiga-ui-kit-components-pagination.mjs.map +1 -1
- package/fesm2022/taiga-ui-kit-components-pdf-viewer.mjs +2 -2
- package/fesm2022/taiga-ui-kit-components-pdf-viewer.mjs.map +1 -1
- package/fesm2022/taiga-ui-kit-components-pin.mjs +2 -2
- package/fesm2022/taiga-ui-kit-components-pin.mjs.map +1 -1
- package/fesm2022/taiga-ui-kit-components-preview-preview-dialog.mjs +2 -2
- package/fesm2022/taiga-ui-kit-components-preview-preview-dialog.mjs.map +1 -1
- package/fesm2022/taiga-ui-kit-components-preview.mjs +8 -8
- package/fesm2022/taiga-ui-kit-components-preview.mjs.map +1 -1
- package/fesm2022/taiga-ui-kit-components-progress.mjs +8 -8
- package/fesm2022/taiga-ui-kit-components-progress.mjs.map +1 -1
- package/fesm2022/taiga-ui-kit-components-pulse.mjs +2 -2
- package/fesm2022/taiga-ui-kit-components-pulse.mjs.map +1 -1
- package/fesm2022/taiga-ui-kit-components-push.mjs +4 -4
- package/fesm2022/taiga-ui-kit-components-push.mjs.map +1 -1
- package/fesm2022/taiga-ui-kit-components-radio-list.mjs +4 -2
- package/fesm2022/taiga-ui-kit-components-radio-list.mjs.map +1 -1
- package/fesm2022/taiga-ui-kit-components-radio.mjs +6 -4
- package/fesm2022/taiga-ui-kit-components-radio.mjs.map +1 -1
- package/fesm2022/taiga-ui-kit-components-range.mjs +2 -2
- package/fesm2022/taiga-ui-kit-components-range.mjs.map +1 -1
- package/fesm2022/taiga-ui-kit-components-rating.mjs +2 -2
- package/fesm2022/taiga-ui-kit-components-rating.mjs.map +1 -1
- package/fesm2022/taiga-ui-kit-components-segmented.mjs +4 -4
- package/fesm2022/taiga-ui-kit-components-segmented.mjs.map +1 -1
- package/fesm2022/taiga-ui-kit-components-slider.mjs +4 -4
- package/fesm2022/taiga-ui-kit-components-slider.mjs.map +1 -1
- package/fesm2022/taiga-ui-kit-components-status.mjs +2 -2
- package/fesm2022/taiga-ui-kit-components-status.mjs.map +1 -1
- package/fesm2022/taiga-ui-kit-components-stepper.mjs +2 -2
- package/fesm2022/taiga-ui-kit-components-stepper.mjs.map +1 -1
- package/fesm2022/taiga-ui-kit-components-switch.mjs +2 -2
- package/fesm2022/taiga-ui-kit-components-switch.mjs.map +1 -1
- package/fesm2022/taiga-ui-kit-components-tabs.mjs +6 -6
- package/fesm2022/taiga-ui-kit-components-tabs.mjs.map +1 -1
- package/fesm2022/taiga-ui-kit-components-tiles.mjs +2 -2
- package/fesm2022/taiga-ui-kit-components-tiles.mjs.map +1 -1
- package/fesm2022/taiga-ui-kit-components.mjs +1 -0
- package/fesm2022/taiga-ui-kit-components.mjs.map +1 -1
- package/fesm2022/taiga-ui-kit-directives-button-group.mjs +2 -2
- package/fesm2022/taiga-ui-kit-directives-button-group.mjs.map +1 -1
- package/fesm2022/taiga-ui-kit-directives-connected.mjs +2 -2
- package/fesm2022/taiga-ui-kit-directives-connected.mjs.map +1 -1
- package/fesm2022/taiga-ui-kit-directives-fade.mjs +2 -2
- package/fesm2022/taiga-ui-kit-directives-fade.mjs.map +1 -1
- package/fesm2022/taiga-ui-kit-directives-fluid-typography.mjs +2 -2
- package/fesm2022/taiga-ui-kit-directives-fluid-typography.mjs.map +1 -1
- package/fesm2022/taiga-ui-kit-directives-icon-badge.mjs +2 -2
- package/fesm2022/taiga-ui-kit-directives-icon-badge.mjs.map +1 -1
- package/fesm2022/taiga-ui-kit-directives-sensitive.mjs +4 -4
- package/fesm2022/taiga-ui-kit-directives-sensitive.mjs.map +1 -1
- package/package.json +10 -4
- package/styles/components/badge.less +12 -12
- package/styles/components/block.less +2 -2
- package/styles/components/checkbox.less +2 -2
- package/styles/components/chip.less +3 -3
- package/styles/components/comment.less +2 -2
- package/styles/components/compass.less +4 -4
- package/styles/components/pin.less +9 -9
- package/styles/components/progress-bar.less +2 -2
- package/styles/components/radio.less +2 -2
- package/styles/components/status.less +2 -2
- package/styles/components/switch.less +8 -8
- package/tokens/i18n.d.ts +8 -8
|
@@ -1,11 +1,12 @@
|
|
|
1
1
|
import { NgForOf } from '@angular/common';
|
|
2
2
|
import * as i0 from '@angular/core';
|
|
3
|
-
import { computed, Component, ViewEncapsulation, ChangeDetectionStrategy, ViewChildren, Input } from '@angular/core';
|
|
3
|
+
import { inject, computed, Component, ViewEncapsulation, ChangeDetectionStrategy, ViewChildren, Input } from '@angular/core';
|
|
4
4
|
import * as i2 from '@angular/forms';
|
|
5
5
|
import { Validators, NgControl, FormsModule } from '@angular/forms';
|
|
6
6
|
import { TuiControl, tuiAsControl } from '@taiga-ui/cdk/classes';
|
|
7
7
|
import { EMPTY_QUERY, TUI_DEFAULT_IDENTITY_MATCHER, TUI_FALSE_HANDLER } from '@taiga-ui/cdk/constants';
|
|
8
8
|
import { TuiValidator } from '@taiga-ui/cdk/directives/validator';
|
|
9
|
+
import { TuiIdService } from '@taiga-ui/cdk/services';
|
|
9
10
|
import * as i1 from '@taiga-ui/kit/components/radio';
|
|
10
11
|
import { TuiRadio } from '@taiga-ui/kit/components/radio';
|
|
11
12
|
import { PolymorpheusOutlet, PolymorpheusTemplate } from '@taiga-ui/polymorpheus';
|
|
@@ -15,6 +16,7 @@ class TuiRadioList extends TuiControl {
|
|
|
15
16
|
constructor() {
|
|
16
17
|
super(...arguments);
|
|
17
18
|
this.controls = EMPTY_QUERY;
|
|
19
|
+
this.id = inject(TuiIdService).generate();
|
|
18
20
|
this.validator = computed(() => this.invalid() ? ERROR : Validators.nullValidator);
|
|
19
21
|
this.items = [];
|
|
20
22
|
this.size = 'm';
|
|
@@ -23,7 +25,7 @@ class TuiRadioList extends TuiControl {
|
|
|
23
25
|
this.itemContent = ({ $implicit }) => String($implicit);
|
|
24
26
|
}
|
|
25
27
|
get name() {
|
|
26
|
-
return this.control.name
|
|
28
|
+
return `${this.control.name}-${this.id}`;
|
|
27
29
|
}
|
|
28
30
|
onFocusOut() {
|
|
29
31
|
this.controls.forEach((control) => control.control?.markAsTouched());
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"taiga-ui-kit-components-radio-list.mjs","sources":["../../../projects/kit/components/radio-list/radio-list.component.ts","../../../projects/kit/components/radio-list/radio-list.template.html","../../../projects/kit/components/radio-list/taiga-ui-kit-components-radio-list.ts"],"sourcesContent":["import {NgForOf} from '@angular/common';\nimport type
|
|
1
|
+
{"version":3,"file":"taiga-ui-kit-components-radio-list.mjs","sources":["../../../projects/kit/components/radio-list/radio-list.component.ts","../../../projects/kit/components/radio-list/radio-list.template.html","../../../projects/kit/components/radio-list/taiga-ui-kit-components-radio-list.ts"],"sourcesContent":["import {NgForOf} from '@angular/common';\nimport {inject, type QueryList} from '@angular/core';\nimport {\n ChangeDetectionStrategy,\n Component,\n computed,\n Input,\n ViewChildren,\n ViewEncapsulation,\n} from '@angular/core';\nimport type {ValidatorFn} from '@angular/forms';\nimport {FormsModule, NgControl, Validators} from '@angular/forms';\nimport {tuiAsControl, TuiControl} from '@taiga-ui/cdk/classes';\nimport {\n EMPTY_QUERY,\n TUI_DEFAULT_IDENTITY_MATCHER,\n TUI_FALSE_HANDLER,\n} from '@taiga-ui/cdk/constants';\nimport {TuiValidator} from '@taiga-ui/cdk/directives/validator';\nimport {TuiIdService} from '@taiga-ui/cdk/services';\nimport type {TuiBooleanHandler, TuiIdentityMatcher} from '@taiga-ui/cdk/types';\nimport type {TuiSizeS, TuiValueContentContext} from '@taiga-ui/core/types';\nimport {TuiRadio} from '@taiga-ui/kit/components/radio';\nimport type {PolymorpheusContent} from '@taiga-ui/polymorpheus';\nimport {PolymorpheusOutlet, PolymorpheusTemplate} from '@taiga-ui/polymorpheus';\n\nconst ERROR: ValidatorFn = () => ({error: 'Invalid'});\n\n@Component({\n standalone: true,\n selector: 'tui-radio-list',\n imports: [\n NgForOf,\n TuiRadio,\n FormsModule,\n PolymorpheusOutlet,\n PolymorpheusTemplate,\n TuiValidator,\n ],\n templateUrl: './radio-list.template.html',\n styleUrls: ['./radio-list.style.less'],\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [tuiAsControl(TuiRadioList)],\n host: {\n '[attr.data-size]': 'size',\n '(focusout)': 'onFocusOut()',\n },\n})\nexport class TuiRadioList<T> extends TuiControl<T> {\n @ViewChildren(NgControl)\n private readonly controls: QueryList<NgControl> = EMPTY_QUERY;\n\n private readonly id = inject(TuiIdService).generate();\n\n protected validator = computed(() =>\n this.invalid() ? ERROR : Validators.nullValidator,\n );\n\n @Input()\n public items: readonly T[] = [];\n\n @Input()\n public size: TuiSizeS = 'm';\n\n @Input()\n public identityMatcher: TuiIdentityMatcher<T> = TUI_DEFAULT_IDENTITY_MATCHER;\n\n @Input()\n public disabledItemHandler: TuiBooleanHandler<T> = TUI_FALSE_HANDLER;\n\n @Input()\n public itemContent: PolymorpheusContent<TuiValueContentContext<T>> = ({$implicit}) =>\n String($implicit);\n\n protected get name(): string {\n return `${this.control.name}-${this.id}`;\n }\n\n protected onFocusOut(): void {\n this.controls.forEach((control) => control.control?.markAsTouched());\n\n if (!this.touched()) {\n this.onTouched();\n }\n }\n\n protected itemIsActive(item: T): boolean {\n return this.value() === null\n ? item === null\n : this.identityMatcher(this.value(), item);\n }\n}\n","<label\n *ngFor=\"let item of items; index as index\"\n class=\"t-item\"\n [class.t-item_disabled]=\"disabled() || disabledItemHandler(item)\"\n>\n <input\n tuiRadio\n type=\"radio\"\n [disabled]=\"disabled() || disabledItemHandler(item)\"\n [identityMatcher]=\"identityMatcher\"\n [name]=\"name\"\n [ngModel]=\"value()\"\n [ngModelOptions]=\"{standalone: true}\"\n [size]=\"size\"\n [tuiValidator]=\"validator()\"\n [value]=\"item\"\n (ngModelChange)=\"onChange($event)\"\n />\n <ng-container *polymorpheusOutlet=\"itemContent as text; context: {$implicit: item, active: itemIsActive(item)}\">\n {{ text }}\n </ng-container>\n</label>\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
|
|
@@ -4,9 +4,9 @@ import { NgControl, RadioControlValueAccessor } from '@angular/forms';
|
|
|
4
4
|
import * as i2 from '@taiga-ui/cdk/directives/native-validator';
|
|
5
5
|
import { TuiNativeValidator } from '@taiga-ui/cdk/directives/native-validator';
|
|
6
6
|
import { tuiInjectElement } from '@taiga-ui/cdk/utils/dom';
|
|
7
|
+
import { tuiCreateToken, tuiProvideOptions, tuiIsString } from '@taiga-ui/cdk/utils/miscellaneous';
|
|
7
8
|
import * as i1 from '@taiga-ui/core/directives/appearance';
|
|
8
9
|
import { TuiAppearance, TuiWithAppearance } from '@taiga-ui/core/directives/appearance';
|
|
9
|
-
import { tuiCreateToken, tuiProvideOptions } from '@taiga-ui/cdk/utils/miscellaneous';
|
|
10
10
|
import { TUI_DEFAULT_IDENTITY_MATCHER } from '@taiga-ui/cdk/constants';
|
|
11
11
|
|
|
12
12
|
const TUI_RADIO_DEFAULT_OPTIONS = {
|
|
@@ -27,10 +27,12 @@ class TuiRadioComponent {
|
|
|
27
27
|
this.size = this.options.size;
|
|
28
28
|
}
|
|
29
29
|
ngDoCheck() {
|
|
30
|
-
this.appearance.tuiAppearance = this.options.appearance
|
|
30
|
+
this.appearance.tuiAppearance = tuiIsString(this.options.appearance)
|
|
31
|
+
? this.options.appearance
|
|
32
|
+
: this.options.appearance(this.el);
|
|
31
33
|
}
|
|
32
34
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: TuiRadioComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
33
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: TuiRadioComponent, isStandalone: true, selector: "input[type=\"radio\"][tuiRadio]", inputs: { size: "size" }, host: { properties: { "disabled": "!control || control.disabled", "attr.data-size": "size", "class._readonly": "!control" } }, hostDirectives: [{ directive: i1.TuiWithAppearance }, { directive: i2.TuiNativeValidator }], ngImport: i0, template: '', isInline: true, styles: ["[tuiRadio]{--t-size: 1.5rem;transition-property:background,box-shadow;transition-duration:var(--tui-duration, .3s);transition-timing-function:ease-in-out;
|
|
35
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: TuiRadioComponent, isStandalone: true, selector: "input[type=\"radio\"][tuiRadio]", inputs: { size: "size" }, host: { properties: { "disabled": "!control || control.disabled", "attr.data-size": "size", "class._readonly": "!control" } }, hostDirectives: [{ directive: i1.TuiWithAppearance }, { directive: i2.TuiNativeValidator }], ngImport: i0, template: '', isInline: true, styles: ["[tuiRadio]{--t-size: 1.5rem;transition-property:background,box-shadow;transition-duration:var(--tui-duration, .3s);transition-timing-function:ease-in-out;inline-size:var(--t-size);block-size:var(--t-size);cursor:pointer;margin:0;flex-shrink:0;border-radius:100%;color:var(--tui-text-primary-on-accent-1)}[tuiRadio]:disabled._readonly{opacity:1}[tuiRadio]:before{position:absolute;top:0;left:0;inline-size:100%;block-size:100%;transition-property:transform;transition-duration:var(--tui-duration, .3s);transition-timing-function:ease-in-out;content:\"\";border-radius:100%;background:currentColor;transform:scale(0)}[tuiRadio]:checked:before{transform:scale(.5)}[tuiRadio][data-size=s]{--t-size: 1rem}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
|
|
34
36
|
}
|
|
35
37
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: TuiRadioComponent, decorators: [{
|
|
36
38
|
type: Component,
|
|
@@ -38,7 +40,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
|
|
|
38
40
|
'[disabled]': '!control || control.disabled',
|
|
39
41
|
'[attr.data-size]': 'size',
|
|
40
42
|
'[class._readonly]': '!control',
|
|
41
|
-
}, styles: ["[tuiRadio]{--t-size: 1.5rem;transition-property:background,box-shadow;transition-duration:var(--tui-duration, .3s);transition-timing-function:ease-in-out;
|
|
43
|
+
}, styles: ["[tuiRadio]{--t-size: 1.5rem;transition-property:background,box-shadow;transition-duration:var(--tui-duration, .3s);transition-timing-function:ease-in-out;inline-size:var(--t-size);block-size:var(--t-size);cursor:pointer;margin:0;flex-shrink:0;border-radius:100%;color:var(--tui-text-primary-on-accent-1)}[tuiRadio]:disabled._readonly{opacity:1}[tuiRadio]:before{position:absolute;top:0;left:0;inline-size:100%;block-size:100%;transition-property:transform;transition-duration:var(--tui-duration, .3s);transition-timing-function:ease-in-out;content:\"\";border-radius:100%;background:currentColor;transform:scale(0)}[tuiRadio]:checked:before{transform:scale(.5)}[tuiRadio][data-size=s]{--t-size: 1rem}\n"] }]
|
|
42
44
|
}], propDecorators: { size: [{
|
|
43
45
|
type: Input
|
|
44
46
|
}] } });
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"taiga-ui-kit-components-radio.mjs","sources":["../../../projects/kit/components/radio/radio.options.ts","../../../projects/kit/components/radio/radio.component.ts","../../../projects/kit/components/radio/radio.directive.ts","../../../projects/kit/components/radio/radio.ts","../../../projects/kit/components/radio/taiga-ui-kit-components-radio.ts"],"sourcesContent":["import type {Provider} from '@angular/core';\nimport type {TuiStringHandler} from '@taiga-ui/cdk/types';\nimport {tuiCreateToken, tuiProvideOptions} from '@taiga-ui/cdk/utils/miscellaneous';\nimport type {TuiSizeS} from '@taiga-ui/core/types';\n\nexport interface TuiRadioOptions {\n readonly appearance: TuiStringHandler<HTMLInputElement
|
|
1
|
+
{"version":3,"file":"taiga-ui-kit-components-radio.mjs","sources":["../../../projects/kit/components/radio/radio.options.ts","../../../projects/kit/components/radio/radio.component.ts","../../../projects/kit/components/radio/radio.directive.ts","../../../projects/kit/components/radio/radio.ts","../../../projects/kit/components/radio/taiga-ui-kit-components-radio.ts"],"sourcesContent":["import type {Provider} from '@angular/core';\nimport type {TuiStringHandler} from '@taiga-ui/cdk/types';\nimport {tuiCreateToken, tuiProvideOptions} from '@taiga-ui/cdk/utils/miscellaneous';\nimport type {TuiSizeS} from '@taiga-ui/core/types';\n\nexport interface TuiRadioOptions {\n readonly appearance: TuiStringHandler<HTMLInputElement> | string;\n readonly size: TuiSizeS;\n}\n\nexport const TUI_RADIO_DEFAULT_OPTIONS: TuiRadioOptions = {\n size: 'm',\n appearance: ({checked}) => (checked ? 'primary' : 'whiteblock'),\n};\n\nexport const TUI_RADIO_OPTIONS = tuiCreateToken(TUI_RADIO_DEFAULT_OPTIONS);\n\nexport function tuiRadioOptionsProvider(options: Partial<TuiRadioOptions>): Provider {\n return tuiProvideOptions(TUI_RADIO_OPTIONS, options, TUI_RADIO_DEFAULT_OPTIONS);\n}\n","import type {DoCheck} from '@angular/core';\nimport {\n ChangeDetectionStrategy,\n Component,\n inject,\n Input,\n ViewEncapsulation,\n} from '@angular/core';\nimport {NgControl} from '@angular/forms';\nimport {TuiNativeValidator} from '@taiga-ui/cdk/directives/native-validator';\nimport {tuiInjectElement} from '@taiga-ui/cdk/utils/dom';\nimport {tuiIsString} from '@taiga-ui/cdk/utils/miscellaneous';\nimport {TuiAppearance, TuiWithAppearance} from '@taiga-ui/core/directives/appearance';\nimport type {TuiSizeS} from '@taiga-ui/core/types';\n\nimport {TUI_RADIO_OPTIONS} from './radio.options';\n\n@Component({\n standalone: true,\n selector: 'input[type=\"radio\"][tuiRadio]',\n template: '',\n styles: ['@import \"@taiga-ui/kit/styles/components/radio.less\";'],\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n hostDirectives: [TuiWithAppearance, TuiNativeValidator],\n host: {\n '[disabled]': '!control || control.disabled',\n '[attr.data-size]': 'size',\n '[class._readonly]': '!control',\n },\n})\nexport class TuiRadioComponent implements DoCheck {\n private readonly appearance = inject(TuiAppearance);\n private readonly options = inject(TUI_RADIO_OPTIONS);\n private readonly el = tuiInjectElement<HTMLInputElement>();\n\n protected readonly control = inject(NgControl, {self: true, optional: true});\n\n @Input()\n public size: TuiSizeS = this.options.size;\n\n public ngDoCheck(): void {\n this.appearance.tuiAppearance = tuiIsString(this.options.appearance)\n ? this.options.appearance\n : this.options.appearance(this.el);\n }\n}\n","import {Directive, inject, Input} from '@angular/core';\nimport {RadioControlValueAccessor} from '@angular/forms';\nimport {TUI_DEFAULT_IDENTITY_MATCHER} from '@taiga-ui/cdk/constants';\nimport type {TuiIdentityMatcher} from '@taiga-ui/cdk/types';\n\n@Directive({\n standalone: true,\n selector: 'input[type=\"radio\"][tuiRadio][identityMatcher]',\n})\nexport class TuiRadioDirective<T> {\n @Input()\n public identityMatcher: TuiIdentityMatcher<T> = TUI_DEFAULT_IDENTITY_MATCHER;\n\n constructor() {\n const accessor = inject(RadioControlValueAccessor);\n const writeValue = accessor.writeValue.bind(accessor);\n\n accessor.writeValue = (value: T) => {\n if (this.identityMatcher(value, accessor.value)) {\n writeValue(accessor.value);\n } else {\n writeValue(value);\n }\n };\n }\n}\n","import {TuiRadioComponent} from './radio.component';\nimport {TuiRadioDirective} from './radio.directive';\n\nexport const TuiRadio = [TuiRadioComponent, TuiRadioDirective] as const;\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
|
|
@@ -174,7 +174,7 @@ class TuiRange extends TuiControl {
|
|
|
174
174
|
return tuiClamp(distance, this.margin, this.limit) === distance;
|
|
175
175
|
}
|
|
176
176
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: TuiRange, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
|
|
177
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: TuiRange, isStandalone: true, selector: "tui-range", inputs: { min: "min", max: "max", step: "step", size: "size", segments: "segments", keySteps: "keySteps", focusable: "focusable", margin: "margin", limit: "limit" }, host: { listeners: { "focusout": "onTouched()", "keydown.arrowUp.prevent": "changeByStep(1, $event.target)", "keydown.arrowRight.prevent": "changeByStep(1, $event.target)", "keydown.arrowLeft.prevent": "changeByStep(-1, $event.target)", "keydown.arrowDown.prevent": "changeByStep(-1, $event.target)" }, properties: { "attr.data-size": "size", "attr.tabindex": "-1", "attr.aria-disabled": "disabled()", "style.--left.%": "left()", "style.--right.%": "right()", "style.background": "options.trackColor", "class._disabled": "disabled()" } }, providers: [tuiFallbackValueProvider([0, 0])], viewQueries: [{ propertyName: "slidersRefs", predicate: TuiSliderComponent, descendants: true, read: ElementRef }], usesInheritance: true, usesOnChanges: true, hostDirectives: [{ directive: TuiRangeChange, outputs: ["activeThumbChange", "activeThumbChange"] }], ngImport: i0, template: "<div\n class=\"t-track\"\n [style.--bg-size-ratio]=\"1 - segmentWidthRatio\"\n [style.--segment-width.%]=\"segmentWidthRatio * 100\"\n>\n <input\n automation-id=\"tui-range__left\"\n readonly\n step=\"any\"\n tuiSlider\n type=\"range\"\n class=\"t-thumb\"\n [disabled]=\"disabled()\"\n [keySteps]=\"computedKeySteps\"\n [max]=\"max\"\n [min]=\"min\"\n [ngModel]=\"value()[0]\"\n [ngModelOptions]=\"{standalone: true}\"\n [size]=\"size\"\n [tabIndex]=\"focusable ? 0 : -1\"\n />\n <input\n automation-id=\"tui-range__right\"\n readonly\n step=\"any\"\n tuiSlider\n type=\"range\"\n class=\"t-thumb\"\n [disabled]=\"disabled()\"\n [keySteps]=\"computedKeySteps\"\n [max]=\"max\"\n [min]=\"min\"\n [ngModel]=\"value()[1]\"\n [ngModelOptions]=\"{standalone: true}\"\n [size]=\"size\"\n [tabIndex]=\"focusable ? 0 : -1\"\n />\n</div>\n", styles: [":host{position:relative;display:block;
|
|
177
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: TuiRange, isStandalone: true, selector: "tui-range", inputs: { min: "min", max: "max", step: "step", size: "size", segments: "segments", keySteps: "keySteps", focusable: "focusable", margin: "margin", limit: "limit" }, host: { listeners: { "focusout": "onTouched()", "keydown.arrowUp.prevent": "changeByStep(1, $event.target)", "keydown.arrowRight.prevent": "changeByStep(1, $event.target)", "keydown.arrowLeft.prevent": "changeByStep(-1, $event.target)", "keydown.arrowDown.prevent": "changeByStep(-1, $event.target)" }, properties: { "attr.data-size": "size", "attr.tabindex": "-1", "attr.aria-disabled": "disabled()", "style.--left.%": "left()", "style.--right.%": "right()", "style.background": "options.trackColor", "class._disabled": "disabled()" } }, providers: [tuiFallbackValueProvider([0, 0])], viewQueries: [{ propertyName: "slidersRefs", predicate: TuiSliderComponent, descendants: true, read: ElementRef }], usesInheritance: true, usesOnChanges: true, hostDirectives: [{ directive: TuiRangeChange, outputs: ["activeThumbChange", "activeThumbChange"] }], ngImport: i0, template: "<div\n class=\"t-track\"\n [style.--bg-size-ratio]=\"1 - segmentWidthRatio\"\n [style.--segment-width.%]=\"segmentWidthRatio * 100\"\n>\n <input\n automation-id=\"tui-range__left\"\n readonly\n step=\"any\"\n tuiSlider\n type=\"range\"\n class=\"t-thumb\"\n [disabled]=\"disabled()\"\n [keySteps]=\"computedKeySteps\"\n [max]=\"max\"\n [min]=\"min\"\n [ngModel]=\"value()[0]\"\n [ngModelOptions]=\"{standalone: true}\"\n [size]=\"size\"\n [tabIndex]=\"focusable ? 0 : -1\"\n />\n <input\n automation-id=\"tui-range__right\"\n readonly\n step=\"any\"\n tuiSlider\n type=\"range\"\n class=\"t-thumb\"\n [disabled]=\"disabled()\"\n [keySteps]=\"computedKeySteps\"\n [max]=\"max\"\n [min]=\"min\"\n [ngModel]=\"value()[1]\"\n [ngModelOptions]=\"{standalone: true}\"\n [size]=\"size\"\n [tabIndex]=\"focusable ? 0 : -1\"\n />\n</div>\n", styles: [":host{position:relative;display:block;block-size:.125rem;border-radius:var(--tui-radius-m);background:var(--tui-border-normal);cursor:pointer;outline:none;margin:.4375rem 0;touch-action:pan-x}:host:active{cursor:ew-resize}:host:after{content:\"\";position:absolute;top:-.4375rem;bottom:-.4375rem;inline-size:100%}:host._disabled{opacity:var(--tui-disabled-opacity);pointer-events:none}:host[data-size=s] .t-track{position:relative;margin:0 .25rem;block-size:100%}:host[data-size=s] .t-track:before{content:\"\";position:absolute;top:0;left:max(calc(var(--left) - 1px),1px);right:max(var(--right),1px);block-size:100%;background:var(--tui-background-accent-1);margin:0 -.25rem}:host[data-size=s] .t-track:after{position:absolute;top:0;left:0;bottom:0;right:0;content:\"\";left:.125rem;right:.375rem;background-image:repeating-linear-gradient(to right,var(--tui-text-tertiary) 0 .25rem,transparent 0 calc(var(--segment-width) / var(--bg-size-ratio)));background-position-x:right;background-repeat:no-repeat;background-size:calc(100% * var(--bg-size-ratio))}:host[data-size=m] .t-track{position:relative;margin:0 .375rem;block-size:100%}:host[data-size=m] .t-track:before{content:\"\";position:absolute;top:0;left:max(calc(var(--left) - 1px),1px);right:max(var(--right),1px);block-size:100%;background:var(--tui-background-accent-1);margin:0 -.375rem}:host[data-size=m] .t-track:after{position:absolute;top:0;left:0;bottom:0;right:0;content:\"\";left:.25rem;right:.5rem;background-image:repeating-linear-gradient(to right,var(--tui-text-tertiary) 0 .25rem,transparent 0 calc(var(--segment-width) / var(--bg-size-ratio)));background-position-x:right;background-repeat:no-repeat;background-size:calc(100% * var(--bg-size-ratio))}.t-thumb{pointer-events:none;position:absolute;top:.0625rem;left:0;right:0;z-index:1;transform:translateY(-50%)}.t-thumb::-webkit-slider-thumb{pointer-events:all}.t-thumb::-moz-range-thumb{pointer-events:all}input[type=range].t-thumb::-webkit-slider-runnable-track{background:transparent}input[type=range].t-thumb::-moz-range-track{background:transparent}input[type=range].t-thumb::-moz-range-progress{background:transparent}input[type=range].t-thumb::-ms-track{background:transparent}input[type=range].t-thumb::-ms-fill-lower{background:transparent}.t-thumb:last-of-type{--tui-slider-thumb-transform: translateX(50%) translateX(1px)}.t-thumb:first-of-type{--tui-slider-thumb-transform: translateX(-50%) translateX(-1px)}:host._disabled .t-thumb{opacity:1}\n"], dependencies: [{ kind: "component", type: i2.TuiSliderComponent, selector: "input[type=range][tuiSlider]", inputs: ["size", "segments"] }, { kind: "directive", type: i2.TuiSliderKeySteps, selector: "input[tuiSlider][keySteps]", inputs: ["keySteps"] }, { kind: "directive", type: i2.TuiSliderReadonly, selector: "input[tuiSlider][readonly]", inputs: ["readonly"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i3.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i3.RangeValueAccessor, selector: "input[type=range][formControlName],input[type=range][formControl],input[type=range][ngModel]" }, { kind: "directive", type: i3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i3.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
178
178
|
}
|
|
179
179
|
__decorate([
|
|
180
180
|
tuiPure
|
|
@@ -199,7 +199,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
|
|
|
199
199
|
'(keydown.arrowRight.prevent)': 'changeByStep(1, $event.target)',
|
|
200
200
|
'(keydown.arrowLeft.prevent)': 'changeByStep(-1, $event.target)',
|
|
201
201
|
'(keydown.arrowDown.prevent)': 'changeByStep(-1, $event.target)',
|
|
202
|
-
}, template: "<div\n class=\"t-track\"\n [style.--bg-size-ratio]=\"1 - segmentWidthRatio\"\n [style.--segment-width.%]=\"segmentWidthRatio * 100\"\n>\n <input\n automation-id=\"tui-range__left\"\n readonly\n step=\"any\"\n tuiSlider\n type=\"range\"\n class=\"t-thumb\"\n [disabled]=\"disabled()\"\n [keySteps]=\"computedKeySteps\"\n [max]=\"max\"\n [min]=\"min\"\n [ngModel]=\"value()[0]\"\n [ngModelOptions]=\"{standalone: true}\"\n [size]=\"size\"\n [tabIndex]=\"focusable ? 0 : -1\"\n />\n <input\n automation-id=\"tui-range__right\"\n readonly\n step=\"any\"\n tuiSlider\n type=\"range\"\n class=\"t-thumb\"\n [disabled]=\"disabled()\"\n [keySteps]=\"computedKeySteps\"\n [max]=\"max\"\n [min]=\"min\"\n [ngModel]=\"value()[1]\"\n [ngModelOptions]=\"{standalone: true}\"\n [size]=\"size\"\n [tabIndex]=\"focusable ? 0 : -1\"\n />\n</div>\n", styles: [":host{position:relative;display:block;
|
|
202
|
+
}, template: "<div\n class=\"t-track\"\n [style.--bg-size-ratio]=\"1 - segmentWidthRatio\"\n [style.--segment-width.%]=\"segmentWidthRatio * 100\"\n>\n <input\n automation-id=\"tui-range__left\"\n readonly\n step=\"any\"\n tuiSlider\n type=\"range\"\n class=\"t-thumb\"\n [disabled]=\"disabled()\"\n [keySteps]=\"computedKeySteps\"\n [max]=\"max\"\n [min]=\"min\"\n [ngModel]=\"value()[0]\"\n [ngModelOptions]=\"{standalone: true}\"\n [size]=\"size\"\n [tabIndex]=\"focusable ? 0 : -1\"\n />\n <input\n automation-id=\"tui-range__right\"\n readonly\n step=\"any\"\n tuiSlider\n type=\"range\"\n class=\"t-thumb\"\n [disabled]=\"disabled()\"\n [keySteps]=\"computedKeySteps\"\n [max]=\"max\"\n [min]=\"min\"\n [ngModel]=\"value()[1]\"\n [ngModelOptions]=\"{standalone: true}\"\n [size]=\"size\"\n [tabIndex]=\"focusable ? 0 : -1\"\n />\n</div>\n", styles: [":host{position:relative;display:block;block-size:.125rem;border-radius:var(--tui-radius-m);background:var(--tui-border-normal);cursor:pointer;outline:none;margin:.4375rem 0;touch-action:pan-x}:host:active{cursor:ew-resize}:host:after{content:\"\";position:absolute;top:-.4375rem;bottom:-.4375rem;inline-size:100%}:host._disabled{opacity:var(--tui-disabled-opacity);pointer-events:none}:host[data-size=s] .t-track{position:relative;margin:0 .25rem;block-size:100%}:host[data-size=s] .t-track:before{content:\"\";position:absolute;top:0;left:max(calc(var(--left) - 1px),1px);right:max(var(--right),1px);block-size:100%;background:var(--tui-background-accent-1);margin:0 -.25rem}:host[data-size=s] .t-track:after{position:absolute;top:0;left:0;bottom:0;right:0;content:\"\";left:.125rem;right:.375rem;background-image:repeating-linear-gradient(to right,var(--tui-text-tertiary) 0 .25rem,transparent 0 calc(var(--segment-width) / var(--bg-size-ratio)));background-position-x:right;background-repeat:no-repeat;background-size:calc(100% * var(--bg-size-ratio))}:host[data-size=m] .t-track{position:relative;margin:0 .375rem;block-size:100%}:host[data-size=m] .t-track:before{content:\"\";position:absolute;top:0;left:max(calc(var(--left) - 1px),1px);right:max(var(--right),1px);block-size:100%;background:var(--tui-background-accent-1);margin:0 -.375rem}:host[data-size=m] .t-track:after{position:absolute;top:0;left:0;bottom:0;right:0;content:\"\";left:.25rem;right:.5rem;background-image:repeating-linear-gradient(to right,var(--tui-text-tertiary) 0 .25rem,transparent 0 calc(var(--segment-width) / var(--bg-size-ratio)));background-position-x:right;background-repeat:no-repeat;background-size:calc(100% * var(--bg-size-ratio))}.t-thumb{pointer-events:none;position:absolute;top:.0625rem;left:0;right:0;z-index:1;transform:translateY(-50%)}.t-thumb::-webkit-slider-thumb{pointer-events:all}.t-thumb::-moz-range-thumb{pointer-events:all}input[type=range].t-thumb::-webkit-slider-runnable-track{background:transparent}input[type=range].t-thumb::-moz-range-track{background:transparent}input[type=range].t-thumb::-moz-range-progress{background:transparent}input[type=range].t-thumb::-ms-track{background:transparent}input[type=range].t-thumb::-ms-fill-lower{background:transparent}.t-thumb:last-of-type{--tui-slider-thumb-transform: translateX(50%) translateX(1px)}.t-thumb:first-of-type{--tui-slider-thumb-transform: translateX(-50%) translateX(-1px)}:host._disabled .t-thumb{opacity:1}\n"] }]
|
|
203
203
|
}], propDecorators: { min: [{
|
|
204
204
|
type: Input
|
|
205
205
|
}], max: [{
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"taiga-ui-kit-components-range.mjs","sources":["../../../projects/kit/components/range/range-change.directive.ts","../../../projects/kit/components/range/range.component.ts","../../../projects/kit/components/range/range.template.html","../../../projects/kit/components/range/taiga-ui-kit-components-range.ts"],"sourcesContent":["import {DOCUMENT} from '@angular/common';\nimport {Directive, EventEmitter, inject, Output} from '@angular/core';\nimport {takeUntilDestroyed} from '@angular/core/rxjs-interop';\nimport {tuiTypedFromEvent} from '@taiga-ui/cdk/observables';\nimport {tuiInjectElement} from '@taiga-ui/cdk/utils/dom';\nimport {tuiClamp, tuiRound} from '@taiga-ui/cdk/utils/math';\nimport {TUI_FLOATING_PRECISION} from '@taiga-ui/kit/components/slider';\nimport {filter, map, merge, repeat, startWith, switchMap, takeUntil, tap} from 'rxjs';\n\nimport {TuiRange} from './range.component';\n\n@Directive({\n standalone: true,\n})\nexport class TuiRangeChange {\n private readonly doc = inject(DOCUMENT);\n private readonly el = tuiInjectElement();\n private readonly range = inject(TuiRange);\n\n /**\n * TODO replace with pointer events (when all supported browsers can handle them).\n * Don't forget to use setPointerCapture instead of listening all doc events\n */\n private readonly pointerDown$ = tuiTypedFromEvent(this.el, 'pointerdown', {\n passive: true,\n capture: true,\n });\n\n private readonly pointerMove$ = merge(\n tuiTypedFromEvent(this.doc, 'touchmove').pipe(\n filter(({touches}) => touches.length === 1),\n map(({touches}) => touches[0]),\n filter((event): event is Touch => !!event),\n ),\n tuiTypedFromEvent(this.doc, 'mousemove'),\n );\n\n private readonly pointerUp$ = merge(\n tuiTypedFromEvent(this.doc, 'touchend', {passive: true}),\n tuiTypedFromEvent(this.doc, 'mouseup', {passive: true}),\n );\n\n @Output()\n public readonly activeThumbChange = new EventEmitter<'left' | 'right'>();\n\n constructor() {\n let activeThumb: 'left' | 'right';\n\n this.pointerDown$\n .pipe(\n tap(({clientX, target}) => {\n activeThumb = this.detectActiveThumb(clientX, target);\n this.activeThumbChange.emit(activeThumb);\n\n if (this.range.focusable) {\n this.el.focus();\n }\n }),\n switchMap((event) => this.pointerMove$.pipe(startWith(event))),\n map(({clientX}) => this.getFractionFromEvents(clientX ?? 0)),\n takeUntil(this.pointerUp$),\n repeat(),\n takeUntilDestroyed(),\n )\n .subscribe((fraction) => {\n const value = this.range.toValue(fraction);\n\n this.range.processValue(value, activeThumb === 'right');\n });\n }\n\n private getFractionFromEvents(clickClientX: number): number {\n const hostRect = this.el.getBoundingClientRect();\n const value = clickClientX - hostRect.left;\n const total = hostRect.width;\n\n return tuiClamp(tuiRound(value / total, TUI_FLOATING_PRECISION), 0, 1);\n }\n\n private detectActiveThumb(\n clientX: number,\n target: EventTarget | null,\n ): 'left' | 'right' {\n const [leftSliderRef, rightSliderRef] = this.range.slidersRefs;\n\n switch (target) {\n case leftSliderRef?.nativeElement:\n return 'left';\n case rightSliderRef?.nativeElement:\n return 'right';\n default:\n return this.findNearestActiveThumb(clientX);\n }\n }\n\n private findNearestActiveThumb(clientX: number): 'left' | 'right' {\n const fraction = this.getFractionFromEvents(clientX);\n const deltaLeft = fraction * 100 - this.range.left();\n const deltaRight = fraction * 100 - 100 + this.range.right();\n\n return Math.abs(deltaLeft) > Math.abs(deltaRight) ||\n deltaRight > 0 ||\n (this.range.left() === 0 && this.range.right() === 100)\n ? 'right'\n : 'left';\n }\n}\n","import type {OnChanges, QueryList} from '@angular/core';\nimport {\n ChangeDetectionStrategy,\n Component,\n computed,\n ElementRef,\n inject,\n Input,\n signal,\n ViewChildren,\n} from '@angular/core';\nimport {FormsModule} from '@angular/forms';\nimport {TuiControl} from '@taiga-ui/cdk/classes';\nimport {EMPTY_QUERY} from '@taiga-ui/cdk/constants';\nimport {tuiFallbackValueProvider} from '@taiga-ui/cdk/tokens';\nimport {tuiInjectElement} from '@taiga-ui/cdk/utils/dom';\nimport {tuiClamp, tuiQuantize} from '@taiga-ui/cdk/utils/math';\nimport {tuiPure} from '@taiga-ui/cdk/utils/miscellaneous';\nimport type {TuiSizeS} from '@taiga-ui/core/types';\nimport type {TuiKeySteps} from '@taiga-ui/kit/components/slider';\nimport {\n TUI_SLIDER_OPTIONS,\n tuiKeyStepValueToPercentage,\n tuiPercentageToKeyStepValue,\n TuiSlider,\n TuiSliderComponent,\n} from '@taiga-ui/kit/components/slider';\n\nimport {TuiRangeChange} from './range-change.directive';\n\n@Component({\n standalone: true,\n selector: 'tui-range',\n imports: [TuiSlider, FormsModule],\n templateUrl: './range.template.html',\n styleUrls: ['./range.style.less'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [tuiFallbackValueProvider([0, 0])],\n hostDirectives: [\n {\n directive: TuiRangeChange,\n outputs: ['activeThumbChange'],\n },\n ],\n host: {\n '[attr.data-size]': 'size',\n '[attr.tabindex]': '-1',\n '[attr.aria-disabled]': 'disabled()',\n '[style.--left.%]': 'left()',\n '[style.--right.%]': 'right()',\n '[style.background]': 'options.trackColor',\n '[class._disabled]': 'disabled()',\n '(focusout)': 'onTouched()',\n '(keydown.arrowUp.prevent)': 'changeByStep(1, $event.target)',\n '(keydown.arrowRight.prevent)': 'changeByStep(1, $event.target)',\n '(keydown.arrowLeft.prevent)': 'changeByStep(-1, $event.target)',\n '(keydown.arrowDown.prevent)': 'changeByStep(-1, $event.target)',\n },\n})\nexport class TuiRange extends TuiControl<[number, number]> implements OnChanges {\n // TODO: refactor to signal inputs after Angular update\n private readonly changes = signal(1);\n private readonly el = tuiInjectElement();\n\n protected readonly options = inject(TUI_SLIDER_OPTIONS);\n protected lastActiveThumb: 'left' | 'right' = 'right';\n\n @Input()\n public min = 0;\n\n @Input()\n public max = 100;\n\n @Input()\n public step = 1;\n\n @Input()\n public size: TuiSizeS = this.options.size;\n\n @Input()\n public segments = 1;\n\n @Input()\n public keySteps: TuiKeySteps | null = null;\n\n @Input()\n public focusable = true;\n\n @Input()\n public margin = 0;\n\n @Input()\n public limit = Infinity;\n\n @ViewChildren(TuiSliderComponent, {read: ElementRef})\n public readonly slidersRefs: QueryList<ElementRef<HTMLInputElement>> = EMPTY_QUERY;\n\n public readonly left = computed(() => this.toPercent(this.value()[0]));\n public readonly right = computed(() => 100 - this.toPercent(this.value()[1]));\n\n public ngOnChanges(): void {\n this.changes.set(this.changes() + 1);\n }\n\n public processValue(value: number, right: boolean): void {\n if (right) {\n this.updateEnd(value);\n } else {\n this.updateStart(value);\n }\n\n this.lastActiveThumb = right ? 'right' : 'left';\n }\n\n public toValue(fraction: number): number {\n return tuiPercentageToKeyStepValue(\n tuiClamp(tuiQuantize(fraction, this.fractionStep), 0, 1) * 100,\n this.computedKeySteps,\n );\n }\n\n protected get fractionStep(): number {\n return this.step / (this.max - this.min);\n }\n\n protected get computedKeySteps(): TuiKeySteps {\n return this.computePureKeySteps(this.keySteps, this.min, this.max);\n }\n\n protected get segmentWidthRatio(): number {\n return 1 / this.segments;\n }\n\n protected changeByStep(coefficient: number, target: HTMLElement): void {\n const [sliderLeftRef, sliderRightRef] = this.slidersRefs;\n const leftThumbElement = sliderLeftRef?.nativeElement;\n const rightThumbElement = sliderRightRef?.nativeElement;\n\n const isRightThumb =\n target === this.el\n ? this.lastActiveThumb === 'right'\n : target === rightThumbElement;\n const activeThumbElement = isRightThumb ? rightThumbElement : leftThumbElement;\n const previousValue = isRightThumb ? this.value()[1] : this.value()[0];\n /** @bad TODO think about a solution without twice conversion */\n const previousFraction = this.toPercent(previousValue) / 100;\n const newFractionValue = previousFraction + coefficient * this.fractionStep;\n\n this.processValue(this.toValue(newFractionValue), isRightThumb);\n activeThumbElement?.focus();\n }\n\n protected toPercent(value: number): number {\n return (\n this.changes() && tuiKeyStepValueToPercentage(value, this.computedKeySteps)\n );\n }\n\n @tuiPure\n private computePureKeySteps(\n keySteps: TuiKeySteps | null,\n min: number,\n max: number,\n ): TuiKeySteps {\n return (\n keySteps || [\n [0, min],\n [100, max],\n ]\n );\n }\n\n private updateStart(value: number): void {\n const newValue = Math.min(value, this.value()[1]);\n const distance = this.value()[1] - newValue;\n\n if (!this.checkDistance(distance)) {\n return;\n }\n\n this.onChange([newValue, this.value()[1]]);\n }\n\n private updateEnd(value: number): void {\n const newValue = Math.max(value, this.value()[0]);\n const distance = newValue - this.value()[0];\n\n if (!this.checkDistance(distance)) {\n return;\n }\n\n this.onChange([this.value()[0], newValue]);\n }\n\n private checkDistance(distance: number): boolean {\n return tuiClamp(distance, this.margin, this.limit) === distance;\n }\n}\n","<div\n class=\"t-track\"\n [style.--bg-size-ratio]=\"1 - segmentWidthRatio\"\n [style.--segment-width.%]=\"segmentWidthRatio * 100\"\n>\n <input\n automation-id=\"tui-range__left\"\n readonly\n step=\"any\"\n tuiSlider\n type=\"range\"\n class=\"t-thumb\"\n [disabled]=\"disabled()\"\n [keySteps]=\"computedKeySteps\"\n [max]=\"max\"\n [min]=\"min\"\n [ngModel]=\"value()[0]\"\n [ngModelOptions]=\"{standalone: true}\"\n [size]=\"size\"\n [tabIndex]=\"focusable ? 0 : -1\"\n />\n <input\n automation-id=\"tui-range__right\"\n readonly\n step=\"any\"\n tuiSlider\n type=\"range\"\n class=\"t-thumb\"\n [disabled]=\"disabled()\"\n [keySteps]=\"computedKeySteps\"\n [max]=\"max\"\n [min]=\"min\"\n [ngModel]=\"value()[1]\"\n [ngModelOptions]=\"{standalone: true}\"\n [size]=\"size\"\n [tabIndex]=\"focusable ? 0 : -1\"\n />\n</div>\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["i1.TuiRangeChange"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"taiga-ui-kit-components-range.mjs","sources":["../../../projects/kit/components/range/range-change.directive.ts","../../../projects/kit/components/range/range.component.ts","../../../projects/kit/components/range/range.template.html","../../../projects/kit/components/range/taiga-ui-kit-components-range.ts"],"sourcesContent":["import {DOCUMENT} from '@angular/common';\nimport {Directive, EventEmitter, inject, Output} from '@angular/core';\nimport {takeUntilDestroyed} from '@angular/core/rxjs-interop';\nimport {tuiTypedFromEvent} from '@taiga-ui/cdk/observables';\nimport {tuiInjectElement} from '@taiga-ui/cdk/utils/dom';\nimport {tuiClamp, tuiRound} from '@taiga-ui/cdk/utils/math';\nimport {TUI_FLOATING_PRECISION} from '@taiga-ui/kit/components/slider';\nimport {filter, map, merge, repeat, startWith, switchMap, takeUntil, tap} from 'rxjs';\n\nimport {TuiRange} from './range.component';\n\n@Directive({\n standalone: true,\n})\nexport class TuiRangeChange {\n private readonly doc = inject(DOCUMENT);\n private readonly el = tuiInjectElement();\n private readonly range = inject(TuiRange);\n\n /**\n * TODO replace with pointer events (when all supported browsers can handle them).\n * Don't forget to use setPointerCapture instead of listening all doc events\n */\n private readonly pointerDown$ = tuiTypedFromEvent(this.el, 'pointerdown', {\n passive: true,\n capture: true,\n });\n\n private readonly pointerMove$ = merge(\n tuiTypedFromEvent(this.doc, 'touchmove').pipe(\n filter(({touches}) => touches.length === 1),\n map(({touches}) => touches[0]),\n filter((event): event is Touch => !!event),\n ),\n tuiTypedFromEvent(this.doc, 'mousemove'),\n );\n\n private readonly pointerUp$ = merge(\n tuiTypedFromEvent(this.doc, 'touchend', {passive: true}),\n tuiTypedFromEvent(this.doc, 'mouseup', {passive: true}),\n );\n\n @Output()\n public readonly activeThumbChange = new EventEmitter<'left' | 'right'>();\n\n constructor() {\n let activeThumb: 'left' | 'right';\n\n this.pointerDown$\n .pipe(\n tap(({clientX, target}) => {\n activeThumb = this.detectActiveThumb(clientX, target);\n this.activeThumbChange.emit(activeThumb);\n\n if (this.range.focusable) {\n this.el.focus();\n }\n }),\n switchMap((event) => this.pointerMove$.pipe(startWith(event))),\n map(({clientX}) => this.getFractionFromEvents(clientX ?? 0)),\n takeUntil(this.pointerUp$),\n repeat(),\n takeUntilDestroyed(),\n )\n .subscribe((fraction) => {\n const value = this.range.toValue(fraction);\n\n this.range.processValue(value, activeThumb === 'right');\n });\n }\n\n private getFractionFromEvents(clickClientX: number): number {\n const hostRect = this.el.getBoundingClientRect();\n const value = clickClientX - hostRect.left;\n const total = hostRect.width;\n\n return tuiClamp(tuiRound(value / total, TUI_FLOATING_PRECISION), 0, 1);\n }\n\n private detectActiveThumb(\n clientX: number,\n target: EventTarget | null,\n ): 'left' | 'right' {\n const [leftSliderRef, rightSliderRef] = this.range.slidersRefs;\n\n switch (target) {\n case leftSliderRef?.nativeElement:\n return 'left';\n case rightSliderRef?.nativeElement:\n return 'right';\n default:\n return this.findNearestActiveThumb(clientX);\n }\n }\n\n private findNearestActiveThumb(clientX: number): 'left' | 'right' {\n const fraction = this.getFractionFromEvents(clientX);\n const deltaLeft = fraction * 100 - this.range.left();\n const deltaRight = fraction * 100 - 100 + this.range.right();\n\n return Math.abs(deltaLeft) > Math.abs(deltaRight) ||\n deltaRight > 0 ||\n (this.range.left() === 0 && this.range.right() === 100)\n ? 'right'\n : 'left';\n }\n}\n","import type {OnChanges, QueryList} from '@angular/core';\nimport {\n ChangeDetectionStrategy,\n Component,\n computed,\n ElementRef,\n inject,\n Input,\n signal,\n ViewChildren,\n} from '@angular/core';\nimport {FormsModule} from '@angular/forms';\nimport {TuiControl} from '@taiga-ui/cdk/classes';\nimport {EMPTY_QUERY} from '@taiga-ui/cdk/constants';\nimport {tuiFallbackValueProvider} from '@taiga-ui/cdk/tokens';\nimport {tuiInjectElement} from '@taiga-ui/cdk/utils/dom';\nimport {tuiClamp, tuiQuantize} from '@taiga-ui/cdk/utils/math';\nimport {tuiPure} from '@taiga-ui/cdk/utils/miscellaneous';\nimport type {TuiSizeS} from '@taiga-ui/core/types';\nimport type {TuiKeySteps} from '@taiga-ui/kit/components/slider';\nimport {\n TUI_SLIDER_OPTIONS,\n tuiKeyStepValueToPercentage,\n tuiPercentageToKeyStepValue,\n TuiSlider,\n TuiSliderComponent,\n} from '@taiga-ui/kit/components/slider';\n\nimport {TuiRangeChange} from './range-change.directive';\n\n@Component({\n standalone: true,\n selector: 'tui-range',\n imports: [TuiSlider, FormsModule],\n templateUrl: './range.template.html',\n styleUrls: ['./range.style.less'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [tuiFallbackValueProvider([0, 0])],\n hostDirectives: [\n {\n directive: TuiRangeChange,\n outputs: ['activeThumbChange'],\n },\n ],\n host: {\n '[attr.data-size]': 'size',\n '[attr.tabindex]': '-1',\n '[attr.aria-disabled]': 'disabled()',\n '[style.--left.%]': 'left()',\n '[style.--right.%]': 'right()',\n '[style.background]': 'options.trackColor',\n '[class._disabled]': 'disabled()',\n '(focusout)': 'onTouched()',\n '(keydown.arrowUp.prevent)': 'changeByStep(1, $event.target)',\n '(keydown.arrowRight.prevent)': 'changeByStep(1, $event.target)',\n '(keydown.arrowLeft.prevent)': 'changeByStep(-1, $event.target)',\n '(keydown.arrowDown.prevent)': 'changeByStep(-1, $event.target)',\n },\n})\nexport class TuiRange extends TuiControl<[number, number]> implements OnChanges {\n // TODO: refactor to signal inputs after Angular update\n private readonly changes = signal(1);\n private readonly el = tuiInjectElement();\n\n protected readonly options = inject(TUI_SLIDER_OPTIONS);\n protected lastActiveThumb: 'left' | 'right' = 'right';\n\n @Input()\n public min = 0;\n\n @Input()\n public max = 100;\n\n @Input()\n public step = 1;\n\n @Input()\n public size: TuiSizeS = this.options.size;\n\n @Input()\n public segments = 1;\n\n @Input()\n public keySteps: TuiKeySteps | null = null;\n\n @Input()\n public focusable = true;\n\n @Input()\n public margin = 0;\n\n @Input()\n public limit = Infinity;\n\n @ViewChildren(TuiSliderComponent, {read: ElementRef})\n public readonly slidersRefs: QueryList<ElementRef<HTMLInputElement>> = EMPTY_QUERY;\n\n public readonly left = computed(() => this.toPercent(this.value()[0]));\n public readonly right = computed(() => 100 - this.toPercent(this.value()[1]));\n\n public ngOnChanges(): void {\n this.changes.set(this.changes() + 1);\n }\n\n public processValue(value: number, right: boolean): void {\n if (right) {\n this.updateEnd(value);\n } else {\n this.updateStart(value);\n }\n\n this.lastActiveThumb = right ? 'right' : 'left';\n }\n\n public toValue(fraction: number): number {\n return tuiPercentageToKeyStepValue(\n tuiClamp(tuiQuantize(fraction, this.fractionStep), 0, 1) * 100,\n this.computedKeySteps,\n );\n }\n\n protected get fractionStep(): number {\n return this.step / (this.max - this.min);\n }\n\n protected get computedKeySteps(): TuiKeySteps {\n return this.computePureKeySteps(this.keySteps, this.min, this.max);\n }\n\n protected get segmentWidthRatio(): number {\n return 1 / this.segments;\n }\n\n protected changeByStep(coefficient: number, target: HTMLElement): void {\n const [sliderLeftRef, sliderRightRef] = this.slidersRefs;\n const leftThumbElement = sliderLeftRef?.nativeElement;\n const rightThumbElement = sliderRightRef?.nativeElement;\n\n const isRightThumb =\n target === this.el\n ? this.lastActiveThumb === 'right'\n : target === rightThumbElement;\n const activeThumbElement = isRightThumb ? rightThumbElement : leftThumbElement;\n const previousValue = isRightThumb ? this.value()[1] : this.value()[0];\n /** @bad TODO think about a solution without twice conversion */\n const previousFraction = this.toPercent(previousValue) / 100;\n const newFractionValue = previousFraction + coefficient * this.fractionStep;\n\n this.processValue(this.toValue(newFractionValue), isRightThumb);\n activeThumbElement?.focus();\n }\n\n protected toPercent(value: number): number {\n return (\n this.changes() && tuiKeyStepValueToPercentage(value, this.computedKeySteps)\n );\n }\n\n @tuiPure\n private computePureKeySteps(\n keySteps: TuiKeySteps | null,\n min: number,\n max: number,\n ): TuiKeySteps {\n return (\n keySteps || [\n [0, min],\n [100, max],\n ]\n );\n }\n\n private updateStart(value: number): void {\n const newValue = Math.min(value, this.value()[1]);\n const distance = this.value()[1] - newValue;\n\n if (!this.checkDistance(distance)) {\n return;\n }\n\n this.onChange([newValue, this.value()[1]]);\n }\n\n private updateEnd(value: number): void {\n const newValue = Math.max(value, this.value()[0]);\n const distance = newValue - this.value()[0];\n\n if (!this.checkDistance(distance)) {\n return;\n }\n\n this.onChange([this.value()[0], newValue]);\n }\n\n private checkDistance(distance: number): boolean {\n return tuiClamp(distance, this.margin, this.limit) === distance;\n }\n}\n","<div\n class=\"t-track\"\n [style.--bg-size-ratio]=\"1 - segmentWidthRatio\"\n [style.--segment-width.%]=\"segmentWidthRatio * 100\"\n>\n <input\n automation-id=\"tui-range__left\"\n readonly\n step=\"any\"\n tuiSlider\n type=\"range\"\n class=\"t-thumb\"\n [disabled]=\"disabled()\"\n [keySteps]=\"computedKeySteps\"\n [max]=\"max\"\n [min]=\"min\"\n [ngModel]=\"value()[0]\"\n [ngModelOptions]=\"{standalone: true}\"\n [size]=\"size\"\n [tabIndex]=\"focusable ? 0 : -1\"\n />\n <input\n automation-id=\"tui-range__right\"\n readonly\n step=\"any\"\n tuiSlider\n type=\"range\"\n class=\"t-thumb\"\n [disabled]=\"disabled()\"\n [keySteps]=\"computedKeySteps\"\n [max]=\"max\"\n [min]=\"min\"\n [ngModel]=\"value()[1]\"\n [ngModelOptions]=\"{standalone: true}\"\n [size]=\"size\"\n [tabIndex]=\"focusable ? 0 : -1\"\n />\n</div>\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["i1.TuiRangeChange"],"mappings":"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"}
|
|
@@ -53,7 +53,7 @@ class TuiRating extends TuiControl {
|
|
|
53
53
|
: 0;
|
|
54
54
|
}
|
|
55
55
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: TuiRating, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
|
|
56
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: TuiRating, isStandalone: true, selector: "tui-rating", inputs: { icon: "icon", max: "max" }, host: { listeners: { "keydown.capture": "onKeyDown($event)", "pointerdown": "onPointer(1)", "pointercancel": "onPointer(-1)", "document:pointerup": "onPointer(-1)" }, properties: { "class._disabled": "disabled()", "class._readonly": "readOnly()", "class._active": "active" } }, providers: [tuiFallbackValueProvider(0)], usesInheritance: true, ngImport: i0, template: "<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 <div\n *tuiRepeatTimes=\"let index of max\"\n class=\"t-item\"\n [class.t-item_active]=\"isActive(index)\"\n (pointerup)=\"onClick(max - index)\"\n >\n <tui-icon\n *polymorpheusOutlet=\"icon as src; context: {$implicit: max - index}\"\n class=\"t-icon t-icon_blank\"\n [class.t-icon_fraction]=\"isFraction(index)\"\n [icon]=\"src.toString()\"\n [style.--t-cut.%]=\"100 - getCut(index)\"\n />\n <tui-icon\n *polymorpheusOutlet=\"icon as src; context: {$implicit: max - index}\"\n class=\"t-icon\"\n [icon]=\"src.toString()\"\n [style.--t-cut.%]=\"getCut(index)\"\n />\n </div>\n</div>\n", styles: [":host{position:relative;display:block;
|
|
56
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: TuiRating, isStandalone: true, selector: "tui-rating", inputs: { icon: "icon", max: "max" }, host: { listeners: { "keydown.capture": "onKeyDown($event)", "pointerdown": "onPointer(1)", "pointercancel": "onPointer(-1)", "document:pointerup": "onPointer(-1)" }, properties: { "class._disabled": "disabled()", "class._readonly": "readOnly()", "class._active": "active" } }, providers: [tuiFallbackValueProvider(0)], usesInheritance: true, ngImport: i0, template: "<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 <div\n *tuiRepeatTimes=\"let index of max\"\n class=\"t-item\"\n [class.t-item_active]=\"isActive(index)\"\n (pointerup)=\"onClick(max - index)\"\n >\n <tui-icon\n *polymorpheusOutlet=\"icon as src; context: {$implicit: max - index}\"\n class=\"t-icon t-icon_blank\"\n [class.t-icon_fraction]=\"isFraction(index)\"\n [icon]=\"src.toString()\"\n [style.--t-cut.%]=\"100 - getCut(index)\"\n />\n <tui-icon\n *polymorpheusOutlet=\"icon as src; context: {$implicit: max - index}\"\n class=\"t-icon\"\n [icon]=\"src.toString()\"\n [style.--t-cut.%]=\"getCut(index)\"\n />\n </div>\n</div>\n", styles: [":host{position:relative;display:block;inline-size:-webkit-fit-content;inline-size:-moz-fit-content;inline-size:fit-content;min-inline-size:-webkit-fit-content;min-inline-size:-moz-fit-content;min-inline-size:fit-content;font-size:1rem;color:var(--tui-chart-categorical-12);cursor:pointer;-webkit-user-select:none;user-select:none}:host._readonly{pointer-events:none}:host._disabled{pointer-events:none;opacity:var(--tui-disabled-opacity)}.t-range{position:absolute;top:0;left:0;inline-size:100%;block-size:100%;opacity:0;box-sizing:border-box;padding:0 .75em;pointer-events:none}.t-range:focus-visible+.t-items{box-shadow:inset 0 0 0 .125rem var(--tui-border-focus)}.t-items{position:relative;display:flex;flex-direction:row-reverse}.t-items:hover .t-icon{clip-path:inset(0 0 0 0)}.t-items:hover .t-icon_blank{clip-path:inset(0 0 0 100%)}.t-item{position:relative;flex:1 0 0;color:var(--tui-text-tertiary);transition-property:color,transform;transition-duration:var(--tui-duration);transition-timing-function:ease-in-out,cubic-bezier(.35,1.5,.4,2.5)}.t-item:first-child{max-inline-size:2.5em}.t-item:hover,.t-item:hover~.t-item,.t-items:not(:hover) .t-item_active{color:currentColor}.t-items:active .t-item:hover,.t-items:active .t-item:hover~.t-item{transform:scale(.85);transition-duration:var(--tui-duration),calc(var(--tui-duration) / 3);transition-timing-function:ease-in-out}.t-icon{transition-property:clip-path;transition-duration:var(--tui-duration, .3s);transition-timing-function:ease-in-out;inline-size:2.5em;block-size:2.5em;font-size:inherit;clip-path:inset(0 var(--t-cut) 0 0)}.t-icon ::ng-deep>*{font-size:1rem}.t-icon_blank{position:absolute;top:0;left:0;display:none;color:var(--tui-text-tertiary);clip-path:inset(0 0 0 var(--t-cut))}.t-icon_fraction{display:block}@media (any-pointer: coarse){:host._active .t-item_active{transform:scale(.85);transition-timing-function:ease-in-out}.t-range{pointer-events:auto}.t-icon{transition:none}}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1.RangeValueAccessor, selector: "input[type=range][formControlName],input[type=range][formControl],input[type=range][ngModel]" }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: TuiIcon, selector: "tui-icon", inputs: ["icon", "background"] }, { kind: "directive", type: TuiRepeatTimes, selector: "[tuiRepeatTimes][tuiRepeatTimesOf]", inputs: ["tuiRepeatTimesOf"] }, { kind: "directive", type: PolymorpheusOutlet, selector: "[polymorpheusOutlet]", inputs: ["polymorpheusOutlet", "polymorpheusOutletContext"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
57
57
|
}
|
|
58
58
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: TuiRating, decorators: [{
|
|
59
59
|
type: Component,
|
|
@@ -65,7 +65,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
|
|
|
65
65
|
'(pointerdown)': 'onPointer(1)',
|
|
66
66
|
'(pointercancel)': 'onPointer(-1)',
|
|
67
67
|
'(document:pointerup)': 'onPointer(-1)',
|
|
68
|
-
}, template: "<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 <div\n *tuiRepeatTimes=\"let index of max\"\n class=\"t-item\"\n [class.t-item_active]=\"isActive(index)\"\n (pointerup)=\"onClick(max - index)\"\n >\n <tui-icon\n *polymorpheusOutlet=\"icon as src; context: {$implicit: max - index}\"\n class=\"t-icon t-icon_blank\"\n [class.t-icon_fraction]=\"isFraction(index)\"\n [icon]=\"src.toString()\"\n [style.--t-cut.%]=\"100 - getCut(index)\"\n />\n <tui-icon\n *polymorpheusOutlet=\"icon as src; context: {$implicit: max - index}\"\n class=\"t-icon\"\n [icon]=\"src.toString()\"\n [style.--t-cut.%]=\"getCut(index)\"\n />\n </div>\n</div>\n", styles: [":host{position:relative;display:block;
|
|
68
|
+
}, template: "<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 <div\n *tuiRepeatTimes=\"let index of max\"\n class=\"t-item\"\n [class.t-item_active]=\"isActive(index)\"\n (pointerup)=\"onClick(max - index)\"\n >\n <tui-icon\n *polymorpheusOutlet=\"icon as src; context: {$implicit: max - index}\"\n class=\"t-icon t-icon_blank\"\n [class.t-icon_fraction]=\"isFraction(index)\"\n [icon]=\"src.toString()\"\n [style.--t-cut.%]=\"100 - getCut(index)\"\n />\n <tui-icon\n *polymorpheusOutlet=\"icon as src; context: {$implicit: max - index}\"\n class=\"t-icon\"\n [icon]=\"src.toString()\"\n [style.--t-cut.%]=\"getCut(index)\"\n />\n </div>\n</div>\n", styles: [":host{position:relative;display:block;inline-size:-webkit-fit-content;inline-size:-moz-fit-content;inline-size:fit-content;min-inline-size:-webkit-fit-content;min-inline-size:-moz-fit-content;min-inline-size:fit-content;font-size:1rem;color:var(--tui-chart-categorical-12);cursor:pointer;-webkit-user-select:none;user-select:none}:host._readonly{pointer-events:none}:host._disabled{pointer-events:none;opacity:var(--tui-disabled-opacity)}.t-range{position:absolute;top:0;left:0;inline-size:100%;block-size:100%;opacity:0;box-sizing:border-box;padding:0 .75em;pointer-events:none}.t-range:focus-visible+.t-items{box-shadow:inset 0 0 0 .125rem var(--tui-border-focus)}.t-items{position:relative;display:flex;flex-direction:row-reverse}.t-items:hover .t-icon{clip-path:inset(0 0 0 0)}.t-items:hover .t-icon_blank{clip-path:inset(0 0 0 100%)}.t-item{position:relative;flex:1 0 0;color:var(--tui-text-tertiary);transition-property:color,transform;transition-duration:var(--tui-duration);transition-timing-function:ease-in-out,cubic-bezier(.35,1.5,.4,2.5)}.t-item:first-child{max-inline-size:2.5em}.t-item:hover,.t-item:hover~.t-item,.t-items:not(:hover) .t-item_active{color:currentColor}.t-items:active .t-item:hover,.t-items:active .t-item:hover~.t-item{transform:scale(.85);transition-duration:var(--tui-duration),calc(var(--tui-duration) / 3);transition-timing-function:ease-in-out}.t-icon{transition-property:clip-path;transition-duration:var(--tui-duration, .3s);transition-timing-function:ease-in-out;inline-size:2.5em;block-size:2.5em;font-size:inherit;clip-path:inset(0 var(--t-cut) 0 0)}.t-icon ::ng-deep>*{font-size:1rem}.t-icon_blank{position:absolute;top:0;left:0;display:none;color:var(--tui-text-tertiary);clip-path:inset(0 0 0 var(--t-cut))}.t-icon_fraction{display:block}@media (any-pointer: coarse){:host._active .t-item_active{transform:scale(.85);transition-timing-function:ease-in-out}.t-range{pointer-events:auto}.t-icon{transition:none}}\n"] }]
|
|
69
69
|
}], propDecorators: { icon: [{
|
|
70
70
|
type: Input
|
|
71
71
|
}], max: [{
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"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 {Provider} from '@angular/core';\nimport type {TuiContext} from '@taiga-ui/cdk/types';\nimport {tuiCreateToken, tuiProvideOptions} from '@taiga-ui/cdk/utils/miscellaneous';\nimport type {PolymorpheusContent} from '@taiga-ui/polymorpheus';\n\nexport interface TuiRatingOptions {\n readonly icon: PolymorpheusContent<TuiContext<number>>;\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 = tuiCreateToken(TUI_RATING_DEFAULT_OPTIONS);\n\nexport function tuiRatingOptionsProvider(options: Partial<TuiRatingOptions>): Provider {\n return tuiProvideOptions(TUI_RATING_OPTIONS, options, TUI_RATING_DEFAULT_OPTIONS);\n}\n","import {CommonModule} from '@angular/common';\nimport {ChangeDetectionStrategy, Component, inject, Input} from '@angular/core';\nimport {FormsModule} from '@angular/forms';\nimport {TuiControl} from '@taiga-ui/cdk/classes';\nimport {TuiRepeatTimes} from '@taiga-ui/cdk/directives/repeat-times';\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 type {TuiRatingOptions} from './rating.options';\nimport {TUI_RATING_OPTIONS} from './rating.options';\n\n@Component({\n standalone: true,\n selector: 'tui-rating',\n imports: [CommonModule, FormsModule, TuiIcon, TuiRepeatTimes, PolymorpheusOutlet],\n templateUrl: './rating.template.html',\n styleUrls: ['./rating.style.less'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [tuiFallbackValueProvider(0)],\n host: {\n '[class._disabled]': 'disabled()',\n '[class._readonly]': 'readOnly()',\n '[class._active]': 'active',\n '(keydown.capture)': 'onKeyDown($event)',\n '(pointerdown)': 'onPointer(1)',\n '(pointercancel)': 'onPointer(-1)',\n '(document:pointerup)': 'onPointer(-1)',\n },\n})\nexport class TuiRating extends TuiControl<number> {\n private readonly options = inject(TUI_RATING_OPTIONS);\n\n protected active = 0;\n\n @Input()\n public icon: TuiRatingOptions['icon'] = this.options.icon;\n\n @Input()\n public max = 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 = tuiClamp(this.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 <div\n *tuiRepeatTimes=\"let index of max\"\n class=\"t-item\"\n [class.t-item_active]=\"isActive(index)\"\n (pointerup)=\"onClick(max - index)\"\n >\n <tui-icon\n *polymorpheusOutlet=\"icon as src; context: {$implicit: max - index}\"\n class=\"t-icon t-icon_blank\"\n [class.t-icon_fraction]=\"isFraction(index)\"\n [icon]=\"src.toString()\"\n [style.--t-cut.%]=\"100 - getCut(index)\"\n />\n <tui-icon\n *polymorpheusOutlet=\"icon as src; context: {$implicit: max - index}\"\n class=\"t-icon\"\n [icon]=\"src.toString()\"\n [style.--t-cut.%]=\"getCut(index)\"\n />\n </div>\n</div>\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":";;;;;;;;;;;;;AAUa,MAAA,0BAA0B,GAAqB;AACxD,IAAA,IAAI,EAAE,WAAW;AACjB,IAAA,GAAG,EAAE,CAAC;EACR;MAEW,kBAAkB,GAAG,cAAc,CAAC,0BAA0B,EAAE;AAEvE,SAAU,wBAAwB,CAAC,OAAkC,EAAA;IACvE,OAAO,iBAAiB,CAAC,kBAAkB,EAAE,OAAO,EAAE,0BAA0B,CAAC,CAAC;AACtF;;ACNA,MAkBa,SAAU,SAAQ,UAAkB,CAAA;AAlBjD,IAAA,WAAA,GAAA;;AAmBqB,QAAA,IAAA,CAAA,OAAO,GAAG,MAAM,CAAC,kBAAkB,CAAC,CAAC;QAE5C,IAAM,CAAA,MAAA,GAAG,CAAC,CAAC;AAGd,QAAA,IAAA,CAAA,IAAI,GAA6B,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC;AAGnD,QAAA,IAAA,CAAA,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC;AA+BjC,KAAA;AA7Ba,IAAA,SAAS,CAAC,KAAoB,EAAA;AACpC,QAAA,IAAI,IAAI,CAAC,QAAQ,EAAE,EAAE;YACjB,KAAK,CAAC,cAAc,EAAE,CAAC;AAC1B,SAAA;KACJ;AAES,IAAA,SAAS,CAAC,KAAa,EAAA;AAC7B,QAAA,IAAI,CAAC,MAAM,GAAG,QAAQ,CAAC,IAAI,CAAC,MAAM,GAAG,KAAK,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;KACrD;AAES,IAAA,OAAO,CAAC,KAAa,EAAA;QAC3B,IAAI,IAAI,CAAC,MAAM,EAAE;AACb,YAAA,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;AACxB,SAAA;KACJ;AAES,IAAA,QAAQ,CAAC,KAAa,EAAA;AAC5B,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,IAAI,IAAI,CAAC,GAAG,GAAG,KAAK,CAAC;KACtD;AAES,IAAA,UAAU,CAAC,KAAa,EAAA;QAC9B,OAAO,IAAI,CAAC,KAAK,EAAE,GAAG,IAAI,CAAC,GAAG,GAAG,KAAK,GAAG,CAAC,IAAI,IAAI,CAAC,KAAK,EAAE,GAAG,IAAI,CAAC,GAAG,GAAG,KAAK,CAAC;KACjF;AAES,IAAA,MAAM,CAAC,KAAa,EAAA;AAC1B,QAAA,OAAO,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC;AACzB,cAAE,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,GAAG,KAAK,GAAG,IAAI,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;cAClD,CAAC,CAAC;KACX;+GAvCQ,SAAS,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA,EAAA;AAAT,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,SAAS,qXAXP,CAAC,wBAAwB,CAAC,CAAC,CAAC,CAAC,ECpB5C,eAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAAA,wjCAkCA,EDlBc,MAAA,EAAA,CAAA,
|
|
1
|
+
{"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 {Provider} from '@angular/core';\nimport type {TuiContext} from '@taiga-ui/cdk/types';\nimport {tuiCreateToken, tuiProvideOptions} from '@taiga-ui/cdk/utils/miscellaneous';\nimport type {PolymorpheusContent} from '@taiga-ui/polymorpheus';\n\nexport interface TuiRatingOptions {\n readonly icon: PolymorpheusContent<TuiContext<number>>;\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 = tuiCreateToken(TUI_RATING_DEFAULT_OPTIONS);\n\nexport function tuiRatingOptionsProvider(options: Partial<TuiRatingOptions>): Provider {\n return tuiProvideOptions(TUI_RATING_OPTIONS, options, TUI_RATING_DEFAULT_OPTIONS);\n}\n","import {CommonModule} from '@angular/common';\nimport {ChangeDetectionStrategy, Component, inject, Input} from '@angular/core';\nimport {FormsModule} from '@angular/forms';\nimport {TuiControl} from '@taiga-ui/cdk/classes';\nimport {TuiRepeatTimes} from '@taiga-ui/cdk/directives/repeat-times';\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 type {TuiRatingOptions} from './rating.options';\nimport {TUI_RATING_OPTIONS} from './rating.options';\n\n@Component({\n standalone: true,\n selector: 'tui-rating',\n imports: [CommonModule, FormsModule, TuiIcon, TuiRepeatTimes, PolymorpheusOutlet],\n templateUrl: './rating.template.html',\n styleUrls: ['./rating.style.less'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [tuiFallbackValueProvider(0)],\n host: {\n '[class._disabled]': 'disabled()',\n '[class._readonly]': 'readOnly()',\n '[class._active]': 'active',\n '(keydown.capture)': 'onKeyDown($event)',\n '(pointerdown)': 'onPointer(1)',\n '(pointercancel)': 'onPointer(-1)',\n '(document:pointerup)': 'onPointer(-1)',\n },\n})\nexport class TuiRating extends TuiControl<number> {\n private readonly options = inject(TUI_RATING_OPTIONS);\n\n protected active = 0;\n\n @Input()\n public icon: TuiRatingOptions['icon'] = this.options.icon;\n\n @Input()\n public max = 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 = tuiClamp(this.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 <div\n *tuiRepeatTimes=\"let index of max\"\n class=\"t-item\"\n [class.t-item_active]=\"isActive(index)\"\n (pointerup)=\"onClick(max - index)\"\n >\n <tui-icon\n *polymorpheusOutlet=\"icon as src; context: {$implicit: max - index}\"\n class=\"t-icon t-icon_blank\"\n [class.t-icon_fraction]=\"isFraction(index)\"\n [icon]=\"src.toString()\"\n [style.--t-cut.%]=\"100 - getCut(index)\"\n />\n <tui-icon\n *polymorpheusOutlet=\"icon as src; context: {$implicit: max - index}\"\n class=\"t-icon\"\n [icon]=\"src.toString()\"\n [style.--t-cut.%]=\"getCut(index)\"\n />\n </div>\n</div>\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import * as i0 from '@angular/core';
|
|
2
|
-
import { inject, ElementRef, Directive, ContentChildren,
|
|
2
|
+
import { inject, ElementRef, Directive, ContentChildren, EventEmitter, Component, ViewEncapsulation, ChangeDetectionStrategy, Input, Output } from '@angular/core';
|
|
3
3
|
import { takeUntilDestroyed } from '@angular/core/rxjs-interop';
|
|
4
4
|
import { ResizeObserverService } from '@ng-web-apis/resize-observer';
|
|
5
5
|
import { tuiQueryListChanges, tuiControlValue, tuiZonefree } from '@taiga-ui/cdk/observables';
|
|
@@ -70,7 +70,7 @@ class TuiSegmented {
|
|
|
70
70
|
constructor() {
|
|
71
71
|
this.el = tuiInjectElement();
|
|
72
72
|
this.sub = inject(ResizeObserverService, { self: true })
|
|
73
|
-
.pipe(tuiZonefree(
|
|
73
|
+
.pipe(tuiZonefree(), takeUntilDestroyed())
|
|
74
74
|
.subscribe(() => this.refresh());
|
|
75
75
|
this.size = 's';
|
|
76
76
|
this.activeItemIndex = 0;
|
|
@@ -103,13 +103,13 @@ class TuiSegmented {
|
|
|
103
103
|
this.el.style.setProperty('--t-width', tuiPx(this.width));
|
|
104
104
|
}
|
|
105
105
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: TuiSegmented, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
106
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: TuiSegmented, isStandalone: true, selector: "tui-segmented", inputs: { size: "size", activeItemIndex: "activeItemIndex" }, outputs: { activeItemIndexChange: "activeItemIndexChange" }, host: { properties: { "attr.data-size": "size" } }, providers: [ResizeObserverService, tuiBadgeNotificationOptionsProvider({ size: 's' })], usesOnChanges: true, hostDirectives: [{ directive: TuiSegmentedDirective }], ngImport: i0, template: '<ng-content />', isInline: true, styles: ["tui-segmented{position:relative;display:flex;box-sizing:border-box;isolation:isolate;color:var(--tui-background-neutral-1);border:.125rem solid transparent}tui-segmented[data-size=s]{--t-padding: .625rem;--t-gap: .5rem;--t-margin: -.125rem;
|
|
106
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: TuiSegmented, isStandalone: true, selector: "tui-segmented", inputs: { size: "size", activeItemIndex: "activeItemIndex" }, outputs: { activeItemIndexChange: "activeItemIndexChange" }, host: { properties: { "attr.data-size": "size" } }, providers: [ResizeObserverService, tuiBadgeNotificationOptionsProvider({ size: 's' })], usesOnChanges: true, hostDirectives: [{ directive: TuiSegmentedDirective }], ngImport: i0, template: '<ng-content />', isInline: true, styles: ["tui-segmented{position:relative;display:flex;box-sizing:border-box;isolation:isolate;color:var(--tui-background-neutral-1);border:.125rem solid transparent}tui-segmented[data-size=s]{--t-padding: .625rem;--t-gap: .5rem;--t-margin: -.125rem;block-size:var(--tui-height-s);font:var(--tui-font-text-s);border-radius:var(--tui-radius-s)}tui-segmented[data-size=s]>*:before,tui-segmented[data-size=s]>*:after,tui-segmented[data-size=s] tui-icon{font-size:1rem}tui-segmented[data-size=m]{--t-padding: .875rem;--t-gap: 1rem;--t-margin: -.375rem;block-size:var(--tui-height-m);font:var(--tui-font-text-m);border-radius:var(--tui-radius-s)}tui-segmented[data-size=l]{--t-padding: 1.125rem;--t-gap: 1rem;--t-margin: -.375rem;block-size:var(--tui-height-l);font:var(--tui-font-text-l);border-radius:var(--tui-radius-m);border-width:.25rem}tui-segmented[data-size=l]:after{box-shadow:0 0 0 .25rem}tui-segmented>a,tui-segmented>button,tui-segmented>label,tui-segmented>label>input:not([tuiRadio]){transition-property:color;transition-duration:var(--tui-duration, .3s);transition-timing-function:ease-in-out;-webkit-appearance:none;appearance:none;padding:0;border:0;background:none;font-size:inherit;line-height:inherit;text-decoration:none;position:relative;display:flex;align-items:center;justify-content:center;white-space:nowrap;gap:var(--t-gap);margin:0;padding:0 var(--t-padding);color:var(--tui-text-primary);overflow:hidden;cursor:pointer;font:inherit;border-radius:inherit}tui-segmented>a>*,tui-segmented>button>*,tui-segmented>label>*,tui-segmented>label>input:not([tuiRadio])>*,tui-segmented>a:before,tui-segmented>button:before,tui-segmented>label:before,tui-segmented>label>input:not([tuiRadio]):before,tui-segmented>a:after,tui-segmented>button:after,tui-segmented>label:after,tui-segmented>label>input:not([tuiRadio]):after{margin:0 var(--t-margin)}tui-segmented>a:focus-visible,tui-segmented>button:focus-visible,tui-segmented>label:focus-visible,tui-segmented>label>input:not([tuiRadio]):focus-visible{outline:.125rem solid var(--tui-border-focus);outline-offset:-.125rem}tui-segmented>label>input:not([tuiRadio]){position:absolute;top:0;left:0;inline-size:100%;block-size:100%}tui-segmented:after{position:absolute;top:0;left:0;inline-size:100%;block-size:100%;content:\"\";z-index:-1;border-radius:inherit;background:currentColor;box-shadow:0 0 0 .125rem}tui-segmented:before{transition-property:left,width;transition-duration:var(--tui-duration, .3s);transition-timing-function:ease-in-out;content:\"\";position:absolute;left:var(--t-left);block-size:100%;inline-size:var(--t-width);border-radius:inherit;background:currentColor;color:var(--tui-background-base);box-shadow:0 .25rem 1.25rem #0000001a}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
|
|
107
107
|
}
|
|
108
108
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: TuiSegmented, decorators: [{
|
|
109
109
|
type: Component,
|
|
110
110
|
args: [{ standalone: true, selector: 'tui-segmented', template: '<ng-content />', encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, providers: [ResizeObserverService, tuiBadgeNotificationOptionsProvider({ size: 's' })], hostDirectives: [TuiSegmentedDirective], host: {
|
|
111
111
|
'[attr.data-size]': 'size',
|
|
112
|
-
}, styles: ["tui-segmented{position:relative;display:flex;box-sizing:border-box;isolation:isolate;color:var(--tui-background-neutral-1);border:.125rem solid transparent}tui-segmented[data-size=s]{--t-padding: .625rem;--t-gap: .5rem;--t-margin: -.125rem;
|
|
112
|
+
}, styles: ["tui-segmented{position:relative;display:flex;box-sizing:border-box;isolation:isolate;color:var(--tui-background-neutral-1);border:.125rem solid transparent}tui-segmented[data-size=s]{--t-padding: .625rem;--t-gap: .5rem;--t-margin: -.125rem;block-size:var(--tui-height-s);font:var(--tui-font-text-s);border-radius:var(--tui-radius-s)}tui-segmented[data-size=s]>*:before,tui-segmented[data-size=s]>*:after,tui-segmented[data-size=s] tui-icon{font-size:1rem}tui-segmented[data-size=m]{--t-padding: .875rem;--t-gap: 1rem;--t-margin: -.375rem;block-size:var(--tui-height-m);font:var(--tui-font-text-m);border-radius:var(--tui-radius-s)}tui-segmented[data-size=l]{--t-padding: 1.125rem;--t-gap: 1rem;--t-margin: -.375rem;block-size:var(--tui-height-l);font:var(--tui-font-text-l);border-radius:var(--tui-radius-m);border-width:.25rem}tui-segmented[data-size=l]:after{box-shadow:0 0 0 .25rem}tui-segmented>a,tui-segmented>button,tui-segmented>label,tui-segmented>label>input:not([tuiRadio]){transition-property:color;transition-duration:var(--tui-duration, .3s);transition-timing-function:ease-in-out;-webkit-appearance:none;appearance:none;padding:0;border:0;background:none;font-size:inherit;line-height:inherit;text-decoration:none;position:relative;display:flex;align-items:center;justify-content:center;white-space:nowrap;gap:var(--t-gap);margin:0;padding:0 var(--t-padding);color:var(--tui-text-primary);overflow:hidden;cursor:pointer;font:inherit;border-radius:inherit}tui-segmented>a>*,tui-segmented>button>*,tui-segmented>label>*,tui-segmented>label>input:not([tuiRadio])>*,tui-segmented>a:before,tui-segmented>button:before,tui-segmented>label:before,tui-segmented>label>input:not([tuiRadio]):before,tui-segmented>a:after,tui-segmented>button:after,tui-segmented>label:after,tui-segmented>label>input:not([tuiRadio]):after{margin:0 var(--t-margin)}tui-segmented>a:focus-visible,tui-segmented>button:focus-visible,tui-segmented>label:focus-visible,tui-segmented>label>input:not([tuiRadio]):focus-visible{outline:.125rem solid var(--tui-border-focus);outline-offset:-.125rem}tui-segmented>label>input:not([tuiRadio]){position:absolute;top:0;left:0;inline-size:100%;block-size:100%}tui-segmented:after{position:absolute;top:0;left:0;inline-size:100%;block-size:100%;content:\"\";z-index:-1;border-radius:inherit;background:currentColor;box-shadow:0 0 0 .125rem}tui-segmented:before{transition-property:left,width;transition-duration:var(--tui-duration, .3s);transition-timing-function:ease-in-out;content:\"\";position:absolute;left:var(--t-left);block-size:100%;inline-size:var(--t-width);border-radius:inherit;background:currentColor;color:var(--tui-background-base);box-shadow:0 .25rem 1.25rem #0000001a}\n"] }]
|
|
113
113
|
}], propDecorators: { size: [{
|
|
114
114
|
type: Input
|
|
115
115
|
}], activeItemIndex: [{
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"taiga-ui-kit-components-segmented.mjs","sources":["../../../projects/kit/components/segmented/segmented.directive.ts","../../../projects/kit/components/segmented/segmented.component.ts","../../../projects/kit/components/segmented/taiga-ui-kit-components-segmented.ts"],"sourcesContent":["import type {AfterContentChecked, AfterContentInit, QueryList} from '@angular/core';\nimport {ContentChildren, Directive, ElementRef, inject} from '@angular/core';\nimport {NgControl, RadioControlValueAccessor} from '@angular/forms';\nimport {RouterLinkActive} from '@angular/router';\nimport {EMPTY_QUERY} from '@taiga-ui/cdk/constants';\nimport {tuiControlValue, tuiQueryListChanges} from '@taiga-ui/cdk/observables';\nimport {tuiInjectElement} from '@taiga-ui/cdk/utils/dom';\nimport {map, switchMap} from 'rxjs';\n\nimport {TuiSegmented} from './segmented.component';\n\n@Directive({\n standalone: true,\n host: {\n '(click)': 'update($event.target)',\n },\n})\nexport class TuiSegmentedDirective implements AfterContentChecked, AfterContentInit {\n @ContentChildren(NgControl, {descendants: true})\n private readonly controls: QueryList<NgControl> = EMPTY_QUERY;\n\n @ContentChildren(RadioControlValueAccessor, {descendants: true})\n private readonly radios: QueryList<RadioControlValueAccessor> = EMPTY_QUERY;\n\n @ContentChildren(RouterLinkActive)\n private readonly links: QueryList<RouterLinkActive> = EMPTY_QUERY;\n\n @ContentChildren(RouterLinkActive, {read: ElementRef})\n private readonly elements: QueryList<ElementRef<HTMLElement>> = EMPTY_QUERY;\n\n private readonly component = inject(TuiSegmented);\n private readonly el = tuiInjectElement();\n\n public ngAfterContentInit(): void {\n tuiQueryListChanges(this.controls)\n .pipe(\n switchMap(() => tuiControlValue(this.controls.first)),\n map((value) => this.radios.toArray().findIndex((c) => c.value === value)),\n )\n .subscribe((index) => {\n this.component.update(index);\n });\n }\n\n public ngAfterContentChecked(): void {\n if (this.links.length) {\n this.update(this.elements.get(this.linkIndex)?.nativeElement || null);\n }\n }\n\n protected update(target: Element | null): void {\n this.component.update(this.getIndex(target));\n }\n\n private get linkIndex(): number {\n return this.links.toArray().findIndex((link) => link.isActive);\n }\n\n private getIndex(element: Element | null): number {\n return Array.from(this.el.children).findIndex((tab) => tab.contains(element));\n }\n}\n","import type {OnChanges} from '@angular/core';\nimport {\n ChangeDetectionStrategy,\n Component,\n EventEmitter,\n inject,\n Input,\n NgZone,\n Output,\n ViewEncapsulation,\n} from '@angular/core';\nimport {takeUntilDestroyed} from '@angular/core/rxjs-interop';\nimport {ResizeObserverService} from '@ng-web-apis/resize-observer';\nimport {tuiZonefree} from '@taiga-ui/cdk/observables';\nimport {tuiInjectElement, tuiIsHTMLElement} from '@taiga-ui/cdk/utils/dom';\nimport {tuiPx} from '@taiga-ui/cdk/utils/miscellaneous';\nimport type {TuiSizeL, TuiSizeS} from '@taiga-ui/core/types';\nimport {tuiBadgeNotificationOptionsProvider} from '@taiga-ui/kit/components/badge-notification';\n\nimport {TuiSegmentedDirective} from './segmented.directive';\n\n@Component({\n standalone: true,\n selector: 'tui-segmented',\n template: '<ng-content />',\n styleUrls: ['./segmented.style.less'],\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [ResizeObserverService, tuiBadgeNotificationOptionsProvider({size: 's'})],\n hostDirectives: [TuiSegmentedDirective],\n host: {\n '[attr.data-size]': 'size',\n },\n})\nexport class TuiSegmented implements OnChanges {\n private readonly el = tuiInjectElement();\n\n protected readonly sub = inject(ResizeObserverService, {self: true})\n .pipe(tuiZonefree(inject(NgZone)), takeUntilDestroyed())\n .subscribe(() => this.refresh());\n\n @Input()\n public size: TuiSizeL | TuiSizeS = 's';\n\n @Input()\n public activeItemIndex = 0;\n\n @Output()\n public readonly activeItemIndexChange = new EventEmitter<number>();\n\n public ngOnChanges(): void {\n this.refresh();\n }\n\n public update(activeItemIndex: number): void {\n if (activeItemIndex === this.activeItemIndex || activeItemIndex < 0) {\n return;\n }\n\n this.activeItemIndex = activeItemIndex;\n this.activeItemIndexChange.emit(activeItemIndex);\n this.refresh();\n }\n\n private get left(): number {\n const element = this.activeElement;\n\n return tuiIsHTMLElement(element) ? element.offsetLeft : 0;\n }\n\n private get width(): number {\n return this.activeElement?.clientWidth || 0;\n }\n\n private get activeElement(): Element | null {\n return this.el.children.item(this.activeItemIndex);\n }\n\n // TODO: Switch to HostBinding signals in Angular 17+\n private refresh(): void {\n this.el.style.setProperty('--t-left', tuiPx(this.left));\n this.el.style.setProperty('--t-width', tuiPx(this.width));\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"taiga-ui-kit-components-segmented.mjs","sources":["../../../projects/kit/components/segmented/segmented.directive.ts","../../../projects/kit/components/segmented/segmented.component.ts","../../../projects/kit/components/segmented/taiga-ui-kit-components-segmented.ts"],"sourcesContent":["import type {AfterContentChecked, AfterContentInit, QueryList} from '@angular/core';\nimport {ContentChildren, Directive, ElementRef, inject} from '@angular/core';\nimport {NgControl, RadioControlValueAccessor} from '@angular/forms';\nimport {RouterLinkActive} from '@angular/router';\nimport {EMPTY_QUERY} from '@taiga-ui/cdk/constants';\nimport {tuiControlValue, tuiQueryListChanges} from '@taiga-ui/cdk/observables';\nimport {tuiInjectElement} from '@taiga-ui/cdk/utils/dom';\nimport {map, switchMap} from 'rxjs';\n\nimport {TuiSegmented} from './segmented.component';\n\n@Directive({\n standalone: true,\n host: {\n '(click)': 'update($event.target)',\n },\n})\nexport class TuiSegmentedDirective implements AfterContentChecked, AfterContentInit {\n @ContentChildren(NgControl, {descendants: true})\n private readonly controls: QueryList<NgControl> = EMPTY_QUERY;\n\n @ContentChildren(RadioControlValueAccessor, {descendants: true})\n private readonly radios: QueryList<RadioControlValueAccessor> = EMPTY_QUERY;\n\n @ContentChildren(RouterLinkActive)\n private readonly links: QueryList<RouterLinkActive> = EMPTY_QUERY;\n\n @ContentChildren(RouterLinkActive, {read: ElementRef})\n private readonly elements: QueryList<ElementRef<HTMLElement>> = EMPTY_QUERY;\n\n private readonly component = inject(TuiSegmented);\n private readonly el = tuiInjectElement();\n\n public ngAfterContentInit(): void {\n tuiQueryListChanges(this.controls)\n .pipe(\n switchMap(() => tuiControlValue(this.controls.first)),\n map((value) => this.radios.toArray().findIndex((c) => c.value === value)),\n )\n .subscribe((index) => {\n this.component.update(index);\n });\n }\n\n public ngAfterContentChecked(): void {\n if (this.links.length) {\n this.update(this.elements.get(this.linkIndex)?.nativeElement || null);\n }\n }\n\n protected update(target: Element | null): void {\n this.component.update(this.getIndex(target));\n }\n\n private get linkIndex(): number {\n return this.links.toArray().findIndex((link) => link.isActive);\n }\n\n private getIndex(element: Element | null): number {\n return Array.from(this.el.children).findIndex((tab) => tab.contains(element));\n }\n}\n","import type {OnChanges} from '@angular/core';\nimport {\n ChangeDetectionStrategy,\n Component,\n EventEmitter,\n inject,\n Input,\n Output,\n ViewEncapsulation,\n} from '@angular/core';\nimport {takeUntilDestroyed} from '@angular/core/rxjs-interop';\nimport {ResizeObserverService} from '@ng-web-apis/resize-observer';\nimport {tuiZonefree} from '@taiga-ui/cdk/observables';\nimport {tuiInjectElement, tuiIsHTMLElement} from '@taiga-ui/cdk/utils/dom';\nimport {tuiPx} from '@taiga-ui/cdk/utils/miscellaneous';\nimport type {TuiSizeL, TuiSizeS} from '@taiga-ui/core/types';\nimport {tuiBadgeNotificationOptionsProvider} from '@taiga-ui/kit/components/badge-notification';\n\nimport {TuiSegmentedDirective} from './segmented.directive';\n\n@Component({\n standalone: true,\n selector: 'tui-segmented',\n template: '<ng-content />',\n styleUrls: ['./segmented.style.less'],\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [ResizeObserverService, tuiBadgeNotificationOptionsProvider({size: 's'})],\n hostDirectives: [TuiSegmentedDirective],\n host: {\n '[attr.data-size]': 'size',\n },\n})\nexport class TuiSegmented implements OnChanges {\n private readonly el = tuiInjectElement();\n\n protected readonly sub = inject(ResizeObserverService, {self: true})\n .pipe(tuiZonefree(), takeUntilDestroyed())\n .subscribe(() => this.refresh());\n\n @Input()\n public size: TuiSizeL | TuiSizeS = 's';\n\n @Input()\n public activeItemIndex = 0;\n\n @Output()\n public readonly activeItemIndexChange = new EventEmitter<number>();\n\n public ngOnChanges(): void {\n this.refresh();\n }\n\n public update(activeItemIndex: number): void {\n if (activeItemIndex === this.activeItemIndex || activeItemIndex < 0) {\n return;\n }\n\n this.activeItemIndex = activeItemIndex;\n this.activeItemIndexChange.emit(activeItemIndex);\n this.refresh();\n }\n\n private get left(): number {\n const element = this.activeElement;\n\n return tuiIsHTMLElement(element) ? element.offsetLeft : 0;\n }\n\n private get width(): number {\n return this.activeElement?.clientWidth || 0;\n }\n\n private get activeElement(): Element | null {\n return this.el.children.item(this.activeItemIndex);\n }\n\n // TODO: Switch to HostBinding signals in Angular 17+\n private refresh(): void {\n this.el.style.setProperty('--t-left', tuiPx(this.left));\n this.el.style.setProperty('--t-width', tuiPx(this.width));\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
|