Your balance: {{ money | tuiAmount: 'RUB' | async }}
Notifications can be shown with template
Your balance: {{ money | tuiAmount: 'RUB' | async }}
If there are many templates, you can use ViewChildren instead of ViewChild or set them IDs with "#" (see code of this sample)
Your balance: {{ money | tuiAmount: 'RUB' | async }}
This notification will be removed after router change (see TypeScript tab)
``` **TypeScript:** ```ts import {NgForOf} from '@angular/common'; import {Component, inject} from '@angular/core'; import {Router} from '@angular/router'; import {changeDetection} from '@demo/emulate/change-detection'; import {encapsulation} from '@demo/emulate/encapsulation'; import {type TuiPopover} from '@taiga-ui/cdk'; import {type TuiAlertOptions, TuiAlertService, TuiButton} from '@taiga-ui/core'; import {injectContext, PolymorpheusComponent} from '@taiga-ui/polymorpheus'; import {switchMap, takeUntil} from 'rxjs'; @Component({ standalone: true, imports: [NgForOf, TuiButton], template: `Yes?
`, changeDetection, }) export class AlertExample { protected readonly context = injectContext``` **TypeScript:** ```ts import {Component, inject} from '@angular/core'; import {Router} from '@angular/router'; import {changeDetection} from '@demo/emulate/change-detection'; import {encapsulation} from '@demo/emulate/encapsulation'; import {type TuiPopover} from '@taiga-ui/cdk'; import {type TuiAlertOptions, TuiAlertService, TuiButton, TuiIcon} from '@taiga-ui/core'; import { injectContext, PolymorpheusComponent, PolymorpheusOutlet, PolymorpheusTemplate, } from '@taiga-ui/polymorpheus'; import {takeUntil} from 'rxjs'; @Component({ standalone: true, imports: [TuiIcon], template: ` `, changeDetection, }) class CustomLabel {} @Component({ standalone: true, imports: [PolymorpheusOutlet, PolymorpheusTemplate], template: `
Step {{ step }}
@tui.
tuiIcon pipe to resolve name
{{ getSetName(index) }} {{ (item[setIndex] || 0) * 1000 | tuiAmount: 'RUB' | async }}
Custom status
Use CSS for support colors
Sizes
tui-block-content css class
All work and no play makes Jack a dull boy
.text-truncate() mixin
.text-truncate() mixin with
Fade
directive
Fade
directive on entire component
itemsLimit: number
tuiAppearanceMode to emulate :checked / :invalid CSS state for outline appearance: ``` **TypeScript:** ```ts import {Component} from '@angular/core'; import {changeDetection} from '@demo/emulate/change-detection'; import {encapsulation} from '@demo/emulate/encapsulation'; import {TuiButton} from '@taiga-ui/core'; import {TuiFade} from '@taiga-ui/kit'; @Component({ standalone: true, imports: [TuiButton, TuiFade], templateUrl: './index.html', styleUrls: ['./index.less'], encapsulation, changeDetection, }) export default class Example {} ``` ### TypeScript ```ts import {Component} from '@angular/core'; import {TuiDocAppearance} from '@demo/components/appearance'; import {TuiDocIcons} from '@demo/components/icons'; import {changeDetection} from '@demo/emulate/change-detection'; import {TuiDemo} from '@demo/utils'; import {TuiButton, type TuiSizeL, type TuiSizeXS} from '@taiga-ui/core'; import {TuiButtonLoading} from '@taiga-ui/kit'; @Component({ standalone: true, imports: [TuiButton, TuiButtonLoading, TuiDemo, TuiDocAppearance, TuiDocIcons], templateUrl: './index.html', changeDetection, }) export default class Page { protected readonly examples = [ 'Sizes', 'Appearance', 'Icons', 'Loading', 'Options with DI', 'Vertical', 'Two labels', ]; protected readonly sizes: ReadonlyArray
Selected month: {{ value }}
Hovered month: {{ hoveredMonth }}
``` **TypeScript:** ```ts import {Component} from '@angular/core'; import {changeDetection} from '@demo/emulate/change-detection'; import {encapsulation} from '@demo/emulate/encapsulation'; import {type TuiMonth} from '@taiga-ui/cdk'; import {TuiCalendarMonth} from '@taiga-ui/kit'; @Component({ standalone: true, imports: [TuiCalendarMonth], templateUrl: './index.html', encapsulation, changeDetection, }) export default class Example { protected value: TuiMonth | null = null; protected hoveredMonth: TuiMonth | null = null; protected onMonthClick(month: TuiMonth): void { this.value = month; } protected onMonthHovered(month: TuiMonth | null): void { this.hoveredMonth = month; } } ``` #### Range **Template:** ```htmlSelected value: {{ value }}
``` **TypeScript:** ```ts import {Component} from '@angular/core'; import {changeDetection} from '@demo/emulate/change-detection'; import {encapsulation} from '@demo/emulate/encapsulation'; import {TuiMonth, TuiMonthRange} from '@taiga-ui/cdk'; import {TuiCalendarMonth, tuiCalendarMonthOptionsProvider} from '@taiga-ui/kit'; @Component({ standalone: true, imports: [TuiCalendarMonth], templateUrl: './index.html', encapsulation, changeDetection, providers: [tuiCalendarMonthOptionsProvider({rangeMode: true})], }) export default class Example { protected value: TuiMonth | TuiMonthRange | null = null; protected max = TuiMonth.currentLocal().append({year: 1}); protected min = new TuiMonth(2019, 7); protected onMonthClick(month: TuiMonth): void { this.value = this.value instanceof TuiMonth ? TuiMonthRange.sort(this.value, month) : month; } } ``` ### TypeScript ```ts import {Component} from '@angular/core'; import {RouterModule} from '@angular/router'; import {changeDetection} from '@demo/emulate/change-detection'; import {DemoRoute} from '@demo/routes'; import {TuiDemo} from '@demo/utils'; import { TUI_FALSE_HANDLER, TUI_FIRST_DAY, TUI_LAST_DAY, type TuiBooleanHandler, TuiDay, TuiMonth, TuiMonthRange, TuiYear, } from '@taiga-ui/cdk'; import {TuiLink} from '@taiga-ui/core'; import {TuiCalendarMonth} from '@taiga-ui/kit'; import {TuiInputMonthRangeModule} from '@taiga-ui/legacy'; @Component({ standalone: true, imports: [RouterModule, TuiCalendarMonth, TuiDemo, TuiInputMonthRangeModule, TuiLink], templateUrl: './index.html', changeDetection, }) export default class Example { protected readonly examples = ['Basic', 'Range']; protected readonly minVariants = [ TUI_FIRST_DAY, new TuiMonth(2019, 2), new TuiMonth(2007, 0), ]; protected readonly maxVariants = [ TUI_LAST_DAY, new TuiMonth(2020, 2), new TuiMonth(2023, 0), new TuiMonth(2019, 4), ]; protected min = this.minVariants[0]!; protected max = this.maxVariants[0]!; protected maxLength = 0; protected minLength = 0; protected readonly disabledItemHandlerVariants: ReadonlyArray< TuiBooleanHandler
You are seeing {{ selected }}.
``` **TypeScript:** ```ts import {NgIf} from '@angular/common'; import {Component} from '@angular/core'; import {changeDetection} from '@demo/emulate/change-detection'; import {encapsulation} from '@demo/emulate/encapsulation'; import {TuiDay, TuiDayRange} from '@taiga-ui/cdk'; import {TuiLink} from '@taiga-ui/core'; import {TuiCalendarRange, TuiDayRangePeriod} from '@taiga-ui/kit'; const today = TuiDay.currentLocal(); const startOfWeek = today.append({day: -today.dayOfWeek()}); const startOfMonth = today.append({day: 1 - today.day}); const startOfQuarter = startOfMonth.append({month: -(startOfMonth.month % 3)}); @Component({ standalone: true, imports: [NgIf, TuiCalendarRange, TuiLink], templateUrl: './index.html', encapsulation, changeDetection, }) export default class Example { protected readonly items = [ new TuiDayRangePeriod( new TuiDayRange(today.append({day: -30}), today), 'Default', ), new TuiDayRangePeriod(new TuiDayRange(startOfWeek, today), 'Week'), new TuiDayRangePeriod(new TuiDayRange(startOfMonth, today), 'Month'), new TuiDayRangePeriod(new TuiDayRange(startOfQuarter, today), 'Quarter'), ]; protected selected: TuiDayRangePeriod | null = this.default; protected value: TuiDayRange | null = this.default.range; public get default(): TuiDayRangePeriod { return this.items[0]!; } public get isDefault(): boolean { return this.selected === this.default; } public get isSelected(): boolean { return !!this.items.find((item) => item === this.selected); } public get isLastVisible(): boolean { return this.selected === this.items[this.items.length - 1]; } public get opposite(): TuiDayRangePeriod | null { if (!this.isSelected) { return null; } switch (this.selected) { case this.default: return null; case this.items[1]: return this.items[2]!; case this.items[2]: return this.items[3]!; case this.items[3]: return null; default: return null; } } public onValue(value: TuiDayRange | null): void { this.value = value; } public reset(): void { this.selected = this.default; this.value = this.selected.range; } public toggle(): void { this.selected = this.opposite; this.value = this.selected?.range ?? null; } } ``` ### TypeScript ```ts import {Component} from '@angular/core'; import {changeDetection} from '@demo/emulate/change-detection'; import {DemoRoute} from '@demo/routes'; import {TuiDemo} from '@demo/utils'; import { TUI_FALSE_HANDLER, TUI_FIRST_DAY, TUI_LAST_DAY, type TuiBooleanHandler, TuiDay, type TuiDayLike, TuiMonth, } from '@taiga-ui/cdk'; import {TuiLink, type TuiMarkerHandler} from '@taiga-ui/core'; import { TuiCalendarRange, tuiCreateDefaultDayRangePeriods, type TuiDayRangePeriod, } from '@taiga-ui/kit'; const TWO_DOTS: [string, string] = [ 'var(--tui-background-accent-1)', 'var(--tui-status-info)', ]; const ONE_DOT: [string] = ['var(--tui-status-positive)']; @Component({ standalone: true, imports: [TuiCalendarRange, TuiDemo, TuiLink], templateUrl: './index.html', changeDetection, }) export default class Example { protected readonly examples = [ 'Basic', 'With value', 'With ranges', 'Localization', 'With another range switcher', ]; protected readonly minVariants = [ TUI_FIRST_DAY, new TuiDay(2017, 2, 5), new TuiDay(1900, 0, 1), ]; protected readonly maxVariants = [ TUI_LAST_DAY, new TuiDay(2018, 9, 30), new TuiDay(2020, 2, 5), new TuiDay(2300, 0, 1), TuiDay.currentLocal(), ]; protected readonly disabledItemHandlerVariants: ReadonlyArray< TuiBooleanHandlerSubtitle
Some clients could encounter an error “Account not found” when selecting the account on the checkout screen
| Project | Version | Description |
|---|---|---|
| Taiga UI | 4.32.0 | Angular UI kit for awesome people |
| Maskito | 3.5.0 | Holy Grail of input masking for the Web |
King Arthur and his Knights of the Round Table embark on a surreal, low-budget search for the Holy Grail, encountering many, very silly obstacles.
It can show arbitrary content and it's very easy to control
You can use Pagination component with size 's' together with it
Use tuiCarouselButtons directive to setup navigation buttons
TuiCardLarge
hostDirectives: [TuiConnected]
{{ currentQuestion + 1 }}. {{ questionTitles[currentQuestion] }}
Your answers
{{ i + 1 }}. {{ questionTitles[i] }}
Use CSS to set a custom priority for the fade:
Form control:
{{ control.value | json }}
Form control:
{{ control.value | json }}
PolymorpheusContent so it can be template too!',
yes: 'That is great!',
no: 'Who cares?',
};
this.dialogs
.openPolymorpheusContent, so it can be anything you like!';
protected onClick(): void {
this.dialogs
.open
Bank account
When you copy, the result will have a space prepended and appended: " Taiga UI " .
{{ value }}
Email: {{ emailValue }}
Chosen date: {{ dateValue }}
Range date: {{ rangeValue }}
Dol - {{ dollar }}, Eur - {{ euro }}
Your balance: {{ money | tuiAmount: 'RUB' | async }}
You can show a dialog with template
Your balance: {{ money | tuiAmount: 'RUB' | async }}
Card payment
Additional information
In user interface design for computer applications, a modal window is a graphical control element subordinate to an application's main window. A modal window creates a mode that disables the main window but keeps it visible, with the modal window as a child window in front of it. Users must interact with the modal window before they can return to the parent application. This avoids interrupting the workflow on the main window. Modal windows are sometimes called heavy windows or modal dialogs because they often display a dialog box.
Additional information
In user interface design for computer applications, a modal window is a graphical control element subordinate to an application's main window. A modal window creates a mode that disables the main window but keeps it visible, with the modal window as a child window in front of it. Users must interact with the modal window before they can return to the parent application. This avoids interrupting the workflow on the main window. Modal windows are sometimes called heavy windows or modal dialogs because they often display a dialog box.
I am some text
Welcome to the website
This is shown fullscreen regardless of content height, you can use margin-top: auto to make sure footer is at the bottom of the page.
Using both built-in "taiga" appearance and custom "compact" appearance to alter built-in styles
Overriding default appearance completely and taking the styles of dialog fully upon oneself, leaving only behavior like focus trap and closable/dismissible interactions to Taiga UI
Lorem ipsum dolor sit amet, consectetur adipisicing elit. Cupiditate perspiciatis exercitationem nemo velit aliquam voluptates non porro, vel, nihil laudantium sapiente ex omnis corrupti assumenda voluptatibus, architecto sequi saepe consectetur ratione qui. Beatae, sapiente explicabo velit facere repudiandae veniam et soluta quia qui expedita voluptate accusamus dolor adipisci. Illo quia sint consequatur unde nulla fuga eum officiis, impedit dolorem? Vel itaque temporibus nihil quia? Provident earum aperiam autem veritatis hic doloremque unde nesciunt accusantium nisi corrupti.
Content
Content
Your content here
Chapman: Mr Wentworth just told me to come in here and say that there was trouble at the mill, that's all - I didn't expect a kind of Spanish Inquisition.
NOBODY expects the Spanish Inquisition!
I am eagerly loaded but hidden
You can use ElasticContainer to animate height changes
Just some more content
Making this section bigger than loaderChapman: Mr Wentworth just told me to come in here and say that there was trouble at the mill, that's all - I didn't expect a kind of Spanish Inquisition.
NOBODY expects the Spanish Inquisition!
Form value: {{ form.value | json }}
Form value: {{ form.value | json }}
Form value: {{ form.value | json }}