From fbe6563f1dcf76b20abf021d6a27245826c4f702 Mon Sep 17 00:00:00 2001
From: waterplea
Date: Fri, 25 Dec 2020 15:34:00 +0300
Subject: [PATCH 1/2] feat(demo): some translation fixes
---
.../directives/ripple/ripple.directive.ts | 5 +-
.../notification/notification.component.ts | 10 +--
.../notification/notification.template.html | 4 +-
.../test/notification.component.spec.ts | 26 ++++---
.../components/wrapper/wrapper.component.ts | 2 +-
projects/core/karma.conf.js | 2 +-
.../notification-alert.template.html | 19 ++++-
.../app/home/examples/angular-json-styles.txt | 3 +-
.../app/home/examples/app-module-icons.txt | 9 ---
.../app/home/examples/app-module-optional.txt | 2 -
.../modules/app/home/examples/ie-support.txt | 16 ++---
.../src/modules/app/home/home.template.html | 71 ++++++++++++-------
.../line-days-chart/examples/2/index.html | 2 +-
.../components/button/button.template.html | 2 +-
.../data-list/data-list.template.html | 6 +-
.../components/editor/editor.template.html | 7 +-
.../marker-icon/marker-icon.template.html | 2 +-
.../mobile-themes/examples/1/index.html | 4 +-
.../mobile-themes/examples/1/index.ts | 15 ++++
.../mobile-themes/examples/2/index.html | 6 +-
.../mobile-themes/examples/2/index.ts | 15 ++++
.../mobile-themes/mobile-themes.module.ts | 9 ++-
.../mobile-themes/mobile-themes.template.html | 2 +-
.../notification/examples/1/index.html | 2 +-
.../notification/examples/1/index.ts | 4 +-
.../examples/import/insert-template.txt | 11 +--
.../notification/notification.component.ts | 1 -
.../notification/notification.template.html | 16 ++---
.../pull-to-refresh.template.html | 2 +-
.../scrollbar/scrollbar.template.html | 6 +-
.../components/tabs/tabs.template.html | 2 +-
.../modules/info/browsers/browsers.module.ts | 2 +
.../info/browsers/browsers.template.html | 17 ++++-
.../src/modules/info/doc/doc.template.html | 19 ++---
.../info/related/related.template.html | 32 ++++++---
.../markup/colors/colors.template.html | 2 +-
.../modules/markup/grid/examples/1/index.html | 41 -----------
.../src/modules/markup/icons/icons.module.ts | 2 +
.../modules/markup/icons/icons.template.html | 12 +---
.../modules/markup/shadows/shadows.style.less | 21 +++---
.../markup/shadows/shadows.template.html | 55 ++++++--------
.../markup/skeleton/examples/1/index.html | 6 +-
.../1/{index.style.less => index.less} | 4 ++
.../markup/skeleton/examples/1/index.ts | 2 +-
.../markup/skeleton/examples/2/index.html | 6 +-
.../2/{index.style.less => index.less} | 1 +
.../markup/skeleton/examples/2/index.ts | 2 +-
.../markup/skeleton/skeleton.component.ts | 4 +-
.../markup/skeleton/skeleton.module.ts | 3 +-
.../markup/skeleton/skeleton.template.html | 2 +-
.../markup/spaces/spaces.template.html | 17 ++---
.../modules/markup/tables/tables.module.ts | 5 +-
.../markup/tables/tables.template.html | 6 ++
.../modules/markup/theme/theme.template.html | 9 +--
.../services/dialogs/dialogs.template.html | 12 +---
.../notifications/notifications.template.html | 2 +-
.../table-bar/table-bar.template.html | 2 +-
.../themes/bootstrap/bootstrap.style.less | 2 +
.../themes/material/material.style.less | 5 +-
59 files changed, 304 insertions(+), 272 deletions(-)
rename projects/demo/src/modules/markup/skeleton/examples/1/{index.style.less => index.less} (83%)
rename projects/demo/src/modules/markup/skeleton/examples/2/{index.style.less => index.less} (78%)
diff --git a/projects/addon-mobile/directives/ripple/ripple.directive.ts b/projects/addon-mobile/directives/ripple/ripple.directive.ts
index d5fa1cfdfd4a..1683b219c080 100644
--- a/projects/addon-mobile/directives/ripple/ripple.directive.ts
+++ b/projects/addon-mobile/directives/ripple/ripple.directive.ts
@@ -22,7 +22,6 @@ import {
TUI_RIPPLE_START,
} from './ripple.providers';
-const RIPPLE_SELECTOR = '[tuiRipple]';
const TOUCH_MOVE_DELAY = 100;
const STYLE = `
@keyframes ${RIPPLE_ON} {
@@ -49,7 +48,7 @@ const STYLE = `
}
}
-*${RIPPLE_SELECTOR} {
+*[tuiRipple] {
position: relative;
overflow: hidden;
}
@@ -67,7 +66,7 @@ const STYLE = `
`;
@Directive({
- selector: RIPPLE_SELECTOR,
+ selector: '[tuiRipple]',
providers: TUI_RIPPLE_PROVIDERS,
})
export class TuiRippleDirective {
diff --git a/projects/core/components/notification/notification.component.ts b/projects/core/components/notification/notification.component.ts
index 646d03b6532b..aeb379173aba 100644
--- a/projects/core/components/notification/notification.component.ts
+++ b/projects/core/components/notification/notification.component.ts
@@ -31,11 +31,6 @@ export class TuiNotificationComponent {
@tuiDefaultProp()
hasIcon = true;
- @Input()
- @tuiDefaultProp()
- @HostBinding('class._has-close-button')
- hasCloseButton = true;
-
@Input()
@HostBinding('attr.data-tui-host-status')
@tuiDefaultProp()
@@ -50,7 +45,8 @@ export class TuiNotificationComponent {
return STATUS_ICON[this.status];
}
- onCloseClick() {
- this.close.emit();
+ @HostBinding('class._has-close-button')
+ get hasClose(): boolean {
+ return !!this.close.observers.length;
}
}
diff --git a/projects/core/components/notification/notification.template.html b/projects/core/components/notification/notification.template.html
index 28f8d0b9252c..9a63982299ce 100644
--- a/projects/core/components/notification/notification.template.html
+++ b/projects/core/components/notification/notification.template.html
@@ -8,7 +8,7 @@
diff --git a/projects/core/components/notification/test/notification.component.spec.ts b/projects/core/components/notification/test/notification.component.spec.ts
index 16af986b62a9..ea4f37d18fe0 100644
--- a/projects/core/components/notification/test/notification.component.spec.ts
+++ b/projects/core/components/notification/test/notification.component.spec.ts
@@ -12,26 +12,33 @@ describe('Notification', () => {
@Component({
template: `
Короткое простое информационное сообщение
+
+
+ Короткое простое информационное сообщение
+
+
`,
})
class TestComponent {
- @ViewChild(TuiNotificationComponent, {static: true})
+ @ViewChild(TuiNotificationComponent, {static: false})
component: TuiNotificationComponent;
hasCloseButton = true;
hasIcon = true;
status: TuiNotification = TuiNotification.Info;
+
+ onClose() {}
}
let fixture: ComponentFixture;
let testComponent: TestComponent;
- let component: TuiNotificationComponent;
let pageObject: PageObject;
function getIcon(): DebugElement {
@@ -55,7 +62,6 @@ describe('Notification', () => {
pageObject = new PageObject(fixture);
testComponent = fixture.componentInstance;
fixture.detectChanges();
- component = testComponent.component;
});
describe('icon', () => {
@@ -64,19 +70,19 @@ describe('Notification', () => {
});
it('выбирается правильно в зависимости от статуса', () => {
- expect(component.icon).toBe(STATUS_ICON[testComponent.status]);
+ expect(testComponent.component.icon).toBe(STATUS_ICON[testComponent.status]);
testComponent.status = TuiNotification.Success;
fixture.detectChanges();
- expect(component.icon).toBe(STATUS_ICON[testComponent.status]);
+ expect(testComponent.component.icon).toBe(STATUS_ICON[testComponent.status]);
testComponent.status = TuiNotification.Error;
fixture.detectChanges();
- expect(component.icon).toBe(STATUS_ICON[testComponent.status]);
+ expect(testComponent.component.icon).toBe(STATUS_ICON[testComponent.status]);
testComponent.status = TuiNotification.Warning;
fixture.detectChanges();
- expect(component.icon).toBe(STATUS_ICON[testComponent.status]);
+ expect(testComponent.component.icon).toBe(STATUS_ICON[testComponent.status]);
});
it('при hasIcon=false отсутствует', () => {
@@ -88,11 +94,11 @@ describe('Notification', () => {
});
describe('крестик закрытия', () => {
- it('по умолчанию присутствует', () => {
+ it('присутствует при подписке на close', () => {
expect(getClose()).not.toBeNull();
});
- it('при hasCloseButton=false отсутствует', () => {
+ it('без подписки на close отсутствует', () => {
testComponent.hasCloseButton = false;
fixture.detectChanges();
diff --git a/projects/core/components/wrapper/wrapper.component.ts b/projects/core/components/wrapper/wrapper.component.ts
index e4d66c635e86..3f3c9349c520 100644
--- a/projects/core/components/wrapper/wrapper.component.ts
+++ b/projects/core/components/wrapper/wrapper.component.ts
@@ -74,7 +74,7 @@ export class TuiWrapperComponent {
return TuiInteractiveState.Readonly;
}
- if (this.pressed) {
+ if (this.pressed && !this.isMobile) {
return TuiInteractiveState.Pressed;
}
diff --git a/projects/core/karma.conf.js b/projects/core/karma.conf.js
index c743656e3c38..d5fc3979853c 100644
--- a/projects/core/karma.conf.js
+++ b/projects/core/karma.conf.js
@@ -1,4 +1,4 @@
-const base = require('../../karma.conf');
+const base = require('../../karma.config');
module.exports = function (config) {
base(config);
diff --git a/projects/core/modules/notifications/notification-alert/notification-alert.template.html b/projects/core/modules/notifications/notification-alert/notification-alert.template.html
index c8cc7bf42784..2bebc02d8d07 100644
--- a/projects/core/modules/notifications/notification-alert/notification-alert.template.html
+++ b/projects/core/modules/notifications/notification-alert/notification-alert.template.html
@@ -1,5 +1,5 @@
@@ -17,3 +17,20 @@
[context]="context"
>
+
+
+
+ {{safeItem.label}}
+
+
+
+
diff --git a/projects/demo/src/modules/app/home/examples/angular-json-styles.txt b/projects/demo/src/modules/app/home/examples/angular-json-styles.txt
index a76ea0a8306e..270970bc2644 100644
--- a/projects/demo/src/modules/app/home/examples/angular-json-styles.txt
+++ b/projects/demo/src/modules/app/home/examples/angular-json-styles.txt
@@ -6,7 +6,8 @@
"options": {
"styles": [
"src/styles.scss",
- "node_modules/@taiga-ui/core/styles/taiga-ui-angular-global.less"
+ "node_modules/@taiga-ui/core/styles/taiga-ui-global.less",
+ "node_modules/@taiga-ui/core/styles/taiga-ui-theme.less"
]
}
}
diff --git a/projects/demo/src/modules/app/home/examples/app-module-icons.txt b/projects/demo/src/modules/app/home/examples/app-module-icons.txt
index d57efbdd756d..0022308c9bc7 100644
--- a/projects/demo/src/modules/app/home/examples/app-module-icons.txt
+++ b/projects/demo/src/modules/app/home/examples/app-module-icons.txt
@@ -1,18 +1,9 @@
-import {TUI_SANITIZER} from '@taiga-ui/cdk';
import {iconsPathFactory, TUI_ICONS_PATH} from '@taiga-ui/core';
...
-const unsafeSanitizer: Sanitizer = {
- sanitize: (_: any, value: any) => value,
-};
-
@NgModule({
...
providers: [
- {
- provide: TUI_SANITIZER,
- useValue: unsafeSanitizer,
- },
{
provide: TUI_ICONS_PATH,
useValue: iconsPathFactory('assets/taiga-ui/icons/'),
diff --git a/projects/demo/src/modules/app/home/examples/app-module-optional.txt b/projects/demo/src/modules/app/home/examples/app-module-optional.txt
index a7716afe8345..ebca15d643b4 100644
--- a/projects/demo/src/modules/app/home/examples/app-module-optional.txt
+++ b/projects/demo/src/modules/app/home/examples/app-module-optional.txt
@@ -1,6 +1,5 @@
import {NgModule} from '@angular/core';
import {BrowserModule} from '@angular/platform-browser';
-import {TuiTableBarsHostModule} from '@taiga-ui/addon-tablebars';
import {
TuiNotificationsModule,
TuiDialogModule,
@@ -16,7 +15,6 @@ import {AppComponent} from './app.component';
imports: [
BrowserModule,
TuiRootModule,
- TuiTableBarsHostModule,
TuiNotificationsModule,
TuiDialogModule,
AppRoutingModule,
diff --git a/projects/demo/src/modules/app/home/examples/ie-support.txt b/projects/demo/src/modules/app/home/examples/ie-support.txt
index bc61d6d0c7ca..39441eec9955 100644
--- a/projects/demo/src/modules/app/home/examples/ie-support.txt
+++ b/projects/demo/src/modules/app/home/examples/ie-support.txt
@@ -5,20 +5,14 @@ import {areCssVarsSupported} from '@taiga-ui/core/utils/dom';
import cssVars from 'css-vars-ponyfill';
export function bootstrapListenerFactory(
- documentRef: Document,
- cssRef: any, // TODO: change it to CSS if you have TS 3.9+ (https://github.com/ng-web-apis/common/pull/6)
+ rootElement: Document,
+ cssRef: CSS,
userAgent: string,
): () => void {
const factory = () => {
- if (areCssVarsSupported(cssRef, userAgent)) {
- return;
+ if (!areCssVarsSupported(cssRef, userAgent)) {
+ cssVars({rootElement, onlyLegacy: false, watch: true});
}
-
- cssVars({
- rootElement: documentRef,
- onlyLegacy: false,
- watch: true,
- });
};
return factory;
@@ -35,4 +29,4 @@ export function bootstrapListenerFactory(
}
],
})
-export class AppModule {}
\ No newline at end of file
+export class AppModule {}
diff --git a/projects/demo/src/modules/app/home/home.template.html b/projects/demo/src/modules/app/home/home.template.html
index cc44e1e0cfc6..61dc43252102 100644
--- a/projects/demo/src/modules/app/home/home.template.html
+++ b/projects/demo/src/modules/app/home/home.template.html
@@ -115,15 +115,14 @@
- Otherwise, do not forget about file type if you import styles
- directly from our library
+ For non-LESS environment, do not forget about file type if you
+ import styles directly from our library
Many of our components need your app to be wrapped into
tui-root
. Import TuiRootModule
in your
- main module and add TuiRootScroller
into providers for
- correct working of Angular router
+ main module.
Wrap all content of your app with root component
+
+ Note: your window
will no longer scroll. To control
+ scrolling when modal dialogs are shown,
+ tui-root
tag will be topmost scroll container.
+
+
- Taiga UI has also optional modules for dialogs, notifications and
- tablebars. If you need these features, add modules into your
- app.module.ts
+ Taiga UI also has optional modules for dialogs and notifications. If
+ you need these features, add modules into your app.module.ts
- Icons do not included into library bundle. Add our standart icon
- pack providing token TUI_ICONS_PATH
with a function
- that gets icon name and returs path to it.
+ Icons are not included in the bundle. To add icons provide
+ TUI_ICONS_PATH
token with a function that gets icon
+ name and returns path to it.
First of all, add icons into assets of your app:
@@ -164,21 +168,7 @@
[code]="examples.assets"
>
-
- Then you should provide path with a token. Moreover,
- Sanitizer
of Angular removes SVG
code
- and that is why you also need to reassign
- TUI_SANITIZER
token that is used to sanitize icons.
- If you use safe icons, you can reassign it with unsafe sanitizer
- from the sample below. Otherwise, we recommend you using our
- library
- ng-dompurify
-
+ Then you should provide path with a token:
Taiga UI uses CSS custom properties for styling that is not
supported by Internet Explorer.
- If you need to support IE 11 , use this package
+ If you need to support IE 11 , use
css-vars-ponyfill
+ css-vars-ponyfill
+
+ package
Install it:
@@ -222,6 +214,31 @@
filename="app.module.ts"
[code]="examples.ieSupport"
>
+
+
+ Internet Explorer also does not support native
+ SVG
inlining. Taiga UI icons will be automatically
+ downloaded and inlined directly into DOM. However, Angular
+ Sanitizer
removes SVG
code in that
+ case. To use custom sanitizer that properly supports
+ SVG
provide TUI_SANITIZER
token. We
+ recommend you using our library
+
+ ng-dompurify
+
+ to properly sanitize code with
+
+ DOMPurify
+
+
diff --git a/projects/demo/src/modules/charts/line-days-chart/examples/2/index.html b/projects/demo/src/modules/charts/line-days-chart/examples/2/index.html
index eb8bafc621cc..988972e5b229 100644
--- a/projects/demo/src/modules/charts/line-days-chart/examples/2/index.html
+++ b/projects/demo/src/modules/charts/line-days-chart/examples/2/index.html
@@ -1,4 +1,4 @@
-
+
TuiLineDaysChart
is used to show data of several months to
simplify working with different number of days in months
diff --git a/projects/demo/src/modules/components/button/button.template.html b/projects/demo/src/modules/components/button/button.template.html
index b4490e884cbc..28bc7588c84c 100644
--- a/projects/demo/src/modules/components/button/button.template.html
+++ b/projects/demo/src/modules/components/button/button.template.html
@@ -14,7 +14,7 @@
[content]="example1"
>
-
+
Link cannot be disabled
. If you want to make an
unactive link, remove href
attribute or send an
empty string into routerLink
. To prevent keyboard
diff --git a/projects/demo/src/modules/components/data-list/data-list.template.html b/projects/demo/src/modules/components/data-list/data-list.template.html
index 76a302b3b22b..dea43751ebdc 100644
--- a/projects/demo/src/modules/components/data-list/data-list.template.html
+++ b/projects/demo/src/modules/components/data-list/data-list.template.html
@@ -12,11 +12,7 @@
heading="Links"
[content]="example1"
>
-
+
Import TuiArrowModule
if you need a rotated arrow
diff --git a/projects/demo/src/modules/components/editor/editor.template.html b/projects/demo/src/modules/components/editor/editor.template.html
index b116e7f0be6f..90d5d41144aa 100644
--- a/projects/demo/src/modules/components/editor/editor.template.html
+++ b/projects/demo/src/modules/components/editor/editor.template.html
@@ -2,12 +2,7 @@
Rich Text Editor for using with Angular forms
-
+
This component is experimental. Use it with caution.
diff --git a/projects/demo/src/modules/components/marker-icon/marker-icon.template.html b/projects/demo/src/modules/components/marker-icon/marker-icon.template.html
index 42325eea8510..1037b7547ddf 100644
--- a/projects/demo/src/modules/components/marker-icon/marker-icon.template.html
+++ b/projects/demo/src/modules/components/marker-icon/marker-icon.template.html
@@ -5,7 +5,7 @@
mode
param to choose appearance or set it with custom
styles
-
+
Marker icons should be 48х48px or smaller. If icon is smaller, it
will be cantered.
diff --git a/projects/demo/src/modules/components/mobile-themes/examples/1/index.html b/projects/demo/src/modules/components/mobile-themes/examples/1/index.html
index bd490e7dc5e6..0a16c2b4e7e4 100644
--- a/projects/demo/src/modules/components/mobile-themes/examples/1/index.html
+++ b/projects/demo/src/modules/components/mobile-themes/examples/1/index.html
@@ -2,7 +2,7 @@
Button:
-Hello
+Hello
Link:
@@ -12,4 +12,4 @@
Island:
- Wow!
+Wow!
diff --git a/projects/demo/src/modules/components/mobile-themes/examples/1/index.ts b/projects/demo/src/modules/components/mobile-themes/examples/1/index.ts
index f6fb88738109..2a9e62ec7adf 100644
--- a/projects/demo/src/modules/components/mobile-themes/examples/1/index.ts
+++ b/projects/demo/src/modules/components/mobile-themes/examples/1/index.ts
@@ -1,4 +1,5 @@
import {Component} from '@angular/core';
+import {TUI_IS_ANDROID, TUI_IS_IOS, TUI_IS_MOBILE} from '@taiga-ui/cdk';
import {changeDetection} from '../../../../../change-detection-strategy';
import {encapsulation} from '../../../../../view-encapsulation';
@@ -7,5 +8,19 @@ import {encapsulation} from '../../../../../view-encapsulation';
templateUrl: './index.html',
changeDetection,
encapsulation,
+ providers: [
+ {
+ provide: TUI_IS_MOBILE,
+ useValue: true,
+ },
+ {
+ provide: TUI_IS_ANDROID,
+ useValue: true,
+ },
+ {
+ provide: TUI_IS_IOS,
+ useValue: false,
+ },
+ ],
})
export class TuiMobileThemesExample1 {}
diff --git a/projects/demo/src/modules/components/mobile-themes/examples/2/index.html b/projects/demo/src/modules/components/mobile-themes/examples/2/index.html
index 0c5fa476006c..7d7e667e6c6f 100644
--- a/projects/demo/src/modules/components/mobile-themes/examples/2/index.html
+++ b/projects/demo/src/modules/components/mobile-themes/examples/2/index.html
@@ -2,14 +2,14 @@
Button:
-Hello
+Hello
Link:
-
+
Let's check it
Island:
- Wow!
+Wow!
diff --git a/projects/demo/src/modules/components/mobile-themes/examples/2/index.ts b/projects/demo/src/modules/components/mobile-themes/examples/2/index.ts
index d83de71c9779..d79c3807491e 100644
--- a/projects/demo/src/modules/components/mobile-themes/examples/2/index.ts
+++ b/projects/demo/src/modules/components/mobile-themes/examples/2/index.ts
@@ -1,4 +1,5 @@
import {Component} from '@angular/core';
+import {TUI_IS_ANDROID, TUI_IS_IOS, TUI_IS_MOBILE} from '@taiga-ui/cdk';
import {changeDetection} from '../../../../../change-detection-strategy';
import {encapsulation} from '../../../../../view-encapsulation';
@@ -7,5 +8,19 @@ import {encapsulation} from '../../../../../view-encapsulation';
templateUrl: './index.html',
changeDetection,
encapsulation,
+ providers: [
+ {
+ provide: TUI_IS_MOBILE,
+ useValue: true,
+ },
+ {
+ provide: TUI_IS_ANDROID,
+ useValue: false,
+ },
+ {
+ provide: TUI_IS_IOS,
+ useValue: true,
+ },
+ ],
})
export class TuiMobileThemesExample2 {}
diff --git a/projects/demo/src/modules/components/mobile-themes/mobile-themes.module.ts b/projects/demo/src/modules/components/mobile-themes/mobile-themes.module.ts
index 617af22b7333..c17ffd9fb728 100644
--- a/projects/demo/src/modules/components/mobile-themes/mobile-themes.module.ts
+++ b/projects/demo/src/modules/components/mobile-themes/mobile-themes.module.ts
@@ -2,7 +2,12 @@ import {CommonModule} from '@angular/common';
import {NgModule} from '@angular/core';
import {RouterModule} from '@angular/router';
import {generateRoutes, TUI_DOC_PAGE_MODULES} from '@taiga-ui/addon-doc';
-import {TuiThemeAndroidModule, TuiThemeIosModule} from '@taiga-ui/addon-mobile';
+import {
+ TuiRippleModule,
+ TuiThemeAndroidModule,
+ TuiThemeIosModule,
+ TuiTouchableModule,
+} from '@taiga-ui/addon-mobile';
import {TuiButtonModule, TuiLinkModule} from '@taiga-ui/core';
import {TuiIslandModule} from '@taiga-ui/kit';
import {TuiMobileThemesExample1} from './examples/1';
@@ -18,6 +23,8 @@ import {ExampleTuiMobileThemesComponent} from './mobile-themes.component';
TuiButtonModule,
TuiLinkModule,
TuiIslandModule,
+ TuiRippleModule,
+ TuiTouchableModule,
...TUI_DOC_PAGE_MODULES,
RouterModule.forChild(generateRoutes(ExampleTuiMobileThemesComponent)),
],
diff --git a/projects/demo/src/modules/components/mobile-themes/mobile-themes.template.html b/projects/demo/src/modules/components/mobile-themes/mobile-themes.template.html
index fab943d2163c..14b999413bbf 100644
--- a/projects/demo/src/modules/components/mobile-themes/mobile-themes.template.html
+++ b/projects/demo/src/modules/components/mobile-themes/mobile-themes.template.html
@@ -1,7 +1,7 @@
Import TuiThemeAndroidModule
into your app.module and add
- tui-theme-android
compoent to enable anroid theme.
+ tui-theme-android
component to enable Android theme.
TUI_IS_ANDROID
can help to recognize Android user
diff --git a/projects/demo/src/modules/components/notification/examples/1/index.html b/projects/demo/src/modules/components/notification/examples/1/index.html
index 1e717c68b4d8..89242a2bc24e 100644
--- a/projects/demo/src/modules/components/notification/examples/1/index.html
+++ b/projects/demo/src/modules/components/notification/examples/1/index.html
@@ -1,5 +1,5 @@
-
+
A short simple informative message. It can
be multiline if you need it
diff --git a/projects/demo/src/modules/components/notification/examples/1/index.ts b/projects/demo/src/modules/components/notification/examples/1/index.ts
index 04cebb5b3667..e654a484f989 100644
--- a/projects/demo/src/modules/components/notification/examples/1/index.ts
+++ b/projects/demo/src/modules/components/notification/examples/1/index.ts
@@ -9,4 +9,6 @@ import {encapsulation} from '../../../../../view-encapsulation';
changeDetection,
encapsulation,
})
-export class TuiNotificationExample1 {}
+export class TuiNotificationExample1 {
+ onClose() {}
+}
diff --git a/projects/demo/src/modules/components/notification/examples/import/insert-template.txt b/projects/demo/src/modules/components/notification/examples/import/insert-template.txt
index 1e9618d28651..5537425fc4e9 100644
--- a/projects/demo/src/modules/components/notification/examples/import/insert-template.txt
+++ b/projects/demo/src/modules/components/notification/examples/import/insert-template.txt
@@ -1,4 +1,7 @@
-Some content
+
+ Some content
+
diff --git a/projects/demo/src/modules/components/notification/notification.component.ts b/projects/demo/src/modules/components/notification/notification.component.ts
index 682a22b4125f..52ebde1d9dd7 100644
--- a/projects/demo/src/modules/components/notification/notification.component.ts
+++ b/projects/demo/src/modules/components/notification/notification.component.ts
@@ -26,7 +26,6 @@ export class ExampleTuiNotificationComponent {
};
hasIcon = true;
- hasCloseButton = true;
readonly statusVariants: ReadonlyArray = [
TuiNotification.Info,
diff --git a/projects/demo/src/modules/components/notification/notification.template.html b/projects/demo/src/modules/components/notification/notification.template.html
index 107f0f7d5822..ad0300dd8a91 100644
--- a/projects/demo/src/modules/components/notification/notification.template.html
+++ b/projects/demo/src/modules/components/notification/notification.template.html
@@ -18,23 +18,14 @@
A short simple informative message
+ A short simple informative message
+
-
- Enables close cross
-
- Emits click on close cross
+ Emits click on close cross. When subscribed to, close button
+ appears.
diff --git a/projects/demo/src/modules/components/pull-to-refresh/pull-to-refresh.template.html b/projects/demo/src/modules/components/pull-to-refresh/pull-to-refresh.template.html
index 2863935e2926..a25ea4110e23 100644
--- a/projects/demo/src/modules/components/pull-to-refresh/pull-to-refresh.template.html
+++ b/projects/demo/src/modules/components/pull-to-refresh/pull-to-refresh.template.html
@@ -5,7 +5,7 @@
of native iOS and Android components
-
+
It emits
(pulled)
event when user wants to start
loading.
diff --git a/projects/demo/src/modules/components/scrollbar/scrollbar.template.html b/projects/demo/src/modules/components/scrollbar/scrollbar.template.html
index 889e5b83b513..aac017238c2f 100644
--- a/projects/demo/src/modules/components/scrollbar/scrollbar.template.html
+++ b/projects/demo/src/modules/components/scrollbar/scrollbar.template.html
@@ -9,11 +9,7 @@
Native scrollbar is hidden to keep native platform scroll expirience
-
+
Use TUI_SCROLL_REF
token to get a scrollable container.
For example, when working with virtual scroll.
diff --git a/projects/demo/src/modules/components/tabs/tabs.template.html b/projects/demo/src/modules/components/tabs/tabs.template.html
index a693995e28f6..a684a03a88dd 100644
--- a/projects/demo/src/modules/components/tabs/tabs.template.html
+++ b/projects/demo/src/modules/components/tabs/tabs.template.html
@@ -5,7 +5,7 @@
native iOS and Android components.
-
+
If you use routerLink
, add also
routerLinkActive
directive.
diff --git a/projects/demo/src/modules/info/browsers/browsers.module.ts b/projects/demo/src/modules/info/browsers/browsers.module.ts
index 6f8f2c994bcb..66261197f4a1 100644
--- a/projects/demo/src/modules/info/browsers/browsers.module.ts
+++ b/projects/demo/src/modules/info/browsers/browsers.module.ts
@@ -1,10 +1,12 @@
import {NgModule} from '@angular/core';
import {RouterModule} from '@angular/router';
import {generateRoutes, TUI_DOC_PAGE_MODULES} from '@taiga-ui/addon-doc';
+import {TuiLinkModule} from '@taiga-ui/core';
import {BrowsersComponent} from './browsers.component';
@NgModule({
imports: [
+ TuiLinkModule,
...TUI_DOC_PAGE_MODULES,
RouterModule.forChild(generateRoutes(BrowsersComponent)),
],
diff --git a/projects/demo/src/modules/info/browsers/browsers.template.html b/projects/demo/src/modules/info/browsers/browsers.template.html
index 6b6d501f18c4..8b09c008b228 100644
--- a/projects/demo/src/modules/info/browsers/browsers.template.html
+++ b/projects/demo/src/modules/info/browsers/browsers.template.html
@@ -28,7 +28,22 @@ Desktop
Microsoft Internet Explorer
- 11+
+
+ 11+
+
+
Edge (EdgeHTML)
diff --git a/projects/demo/src/modules/info/doc/doc.template.html b/projects/demo/src/modules/info/doc/doc.template.html
index 326e2a116f8a..3054bc767de0 100644
--- a/projects/demo/src/modules/info/doc/doc.template.html
+++ b/projects/demo/src/modules/info/doc/doc.template.html
@@ -7,12 +7,15 @@
npm install @taiga-ui/addon-doc
- And setup with project README intructions:
-
- README.md
-
+
+ And use with project
+
+ README.md
+
+ instructions.
+
diff --git a/projects/demo/src/modules/info/related/related.template.html b/projects/demo/src/modules/info/related/related.template.html
index 91c11e991b00..dea607f0af04 100644
--- a/projects/demo/src/modules/info/related/related.template.html
+++ b/projects/demo/src/modules/info/related/related.template.html
@@ -1,7 +1,7 @@
- We maintain these projects by ourselves and higly recommend them for
- modern Angular app
+ We maintain these projects ourselves and higly recommend them for modern
+ Angular apps
@@ -20,9 +20,10 @@
- A tiny library for polymorphic templates in Angular that
- abstracts over different ways of view customization in
- Angular with one simple attribute component
+ A tiny library that abstracts over different ways of view
+ customization in Angular with one simple attribute
+ component.
+ Included with @taiga-ui/cdk
@@ -35,10 +36,15 @@
- A tiny (1KB gzip) library for optimizing change detection
- cycles for performance sensitive events (such as touchmove,
- scroll, drag etc.) and declarative preventDefault() and
- stopPropagation().
+ Angular event plugins library for optimizing change
+ detection cycles for performance sensitive events (such as
+ touchmove
, scroll
,
+ drag
etc.) and declarative
+ preventDefault()
and
+ stopPropagation()
as well as capture phase
+ listeners.
+ Included with @taiga-ui/cdk
+ and enabled by TuiRootModule
@@ -84,7 +90,13 @@
High quality lightweight wrappers for native Web APIs for
- idiomatic use with Angular
+ idiomatic use with Angular.
+
+ @ng-web-apis/common
,
+ @ng-web-apis/mutation-observer
and
+ @ng-web-apis/resize-observer
are included
+ with @taiga-ui/cdk
+
diff --git a/projects/demo/src/modules/markup/colors/colors.template.html b/projects/demo/src/modules/markup/colors/colors.template.html
index a4b87f4b1c92..15c2692c0a4b 100644
--- a/projects/demo/src/modules/markup/colors/colors.template.html
+++ b/projects/demo/src/modules/markup/colors/colors.template.html
@@ -4,7 +4,7 @@
-
+
diff --git a/projects/demo/src/modules/markup/grid/examples/1/index.html b/projects/demo/src/modules/markup/grid/examples/1/index.html
index 648a597b708c..46d1a85d82b4 100644
--- a/projects/demo/src/modules/markup/grid/examples/1/index.html
+++ b/projects/demo/src/modules/markup/grid/examples/1/index.html
@@ -104,44 +104,3 @@
-Temporary layout for SME transition
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/projects/demo/src/modules/markup/icons/icons.module.ts b/projects/demo/src/modules/markup/icons/icons.module.ts
index bef18fb83507..bd753d7c6207 100644
--- a/projects/demo/src/modules/markup/icons/icons.module.ts
+++ b/projects/demo/src/modules/markup/icons/icons.module.ts
@@ -5,6 +5,7 @@ import {RouterModule} from '@angular/router';
import {generateRoutes, TUI_DOC_PAGE_MODULES} from '@taiga-ui/addon-doc';
import {
TuiButtonModule,
+ TuiHintControllerModule,
TuiLinkModule,
TuiSvgModule,
TuiTextfieldControllerModule,
@@ -23,6 +24,7 @@ import {IconsComponent} from './icons.component';
TuiInputModule,
TuiButtonModule,
TuiTextfieldControllerModule,
+ TuiHintControllerModule,
...TUI_DOC_PAGE_MODULES,
RouterModule.forChild(generateRoutes(IconsComponent)),
],
diff --git a/projects/demo/src/modules/markup/icons/icons.template.html b/projects/demo/src/modules/markup/icons/icons.template.html
index 35c9c36393bf..d8a90ab5a202 100644
--- a/projects/demo/src/modules/markup/icons/icons.template.html
+++ b/projects/demo/src/modules/markup/icons/icons.template.html
@@ -1,22 +1,14 @@
-
- Icons can be imported in a component or can be used
- by its name. You can copy icon's name with a click
-
-
- Use CSS color
style to set an icon color. You can also
- use fill
for icons with two colors:
-
-
Search by name
- Input icons name to highlight
+ Input icon name to highlight
Логотипы
diff --git a/projects/demo/src/modules/markup/shadows/shadows.style.less b/projects/demo/src/modules/markup/shadows/shadows.style.less
index ae348454d667..ecd3ad0eaf64 100644
--- a/projects/demo/src/modules/markup/shadows/shadows.style.less
+++ b/projects/demo/src/modules/markup/shadows/shadows.style.less
@@ -1,10 +1,5 @@
@import 'taiga-ui-local';
-.wrapper {
- display: flex;
- align-items: flex-start;
-}
-
.example {
display: flex;
flex: 1;
@@ -12,10 +7,6 @@
padding: 20px;
}
-.code {
- flex: 1;
-}
-
.item {
.transition(box-shadow);
display: flex;
@@ -23,14 +14,14 @@
justify-content: center;
margin-top: 40px;
margin-left: 40px;
- width: 160px;
+ width: 280px;
height: 80px;
border-radius: var(--tui-radius);
color: var(--tui-text-03);
cursor: pointer;
text-align: center;
- &_standart {
+ &_default {
.shadow();
&:hover {
@@ -49,4 +40,12 @@
&_sidebar {
.shadow(4);
}
+
+ &_navigation {
+ .shadow(6);
+ }
+
+ &_mobile {
+ .shadow(7);
+ }
}
diff --git a/projects/demo/src/modules/markup/shadows/shadows.template.html b/projects/demo/src/modules/markup/shadows/shadows.template.html
index 36ac9ec59f38..53331182b133 100644
--- a/projects/demo/src/modules/markup/shadows/shadows.template.html
+++ b/projects/demo/src/modules/markup/shadows/shadows.template.html
@@ -1,39 +1,28 @@
-
-
-
Basic shadow
-
Dropdown shadow
-
Modal shadow
-
+
Different kinds of shadows can be applied with mixin:
+
+
+
+ Basic shadow: .shadow(1)
with
+ .shadow(5)
when hovered
+
+
+
+ Dropdown shadow: .shadow(2)
+
+
+ Modal shadow: .shadow(3)
+
+
+
+ Navigation shadow: .shadow(6)
+
+
+ Mobile modal shadow: .shadow(7)
-
- .item {
- // Card
- &_standart {
- .shadow();
-
- &:hover {
- .shadow(5);
- }
- }
-
- // Dropdown
- &_dropdown {
- .shadow(2);
- }
-
- // Modal
- &_modal {
- .shadow(3);
- }
-
- // Sidebar
- &_dialog {
- .shadow(4);
- }
- }
-
diff --git a/projects/demo/src/modules/markup/skeleton/examples/1/index.html b/projects/demo/src/modules/markup/skeleton/examples/1/index.html
index e3180b0e2c16..fefb9b9921c8 100644
--- a/projects/demo/src/modules/markup/skeleton/examples/1/index.html
+++ b/projects/demo/src/modules/markup/skeleton/examples/1/index.html
@@ -13,7 +13,11 @@
-
+
diff --git a/projects/demo/src/modules/markup/skeleton/examples/1/index.style.less b/projects/demo/src/modules/markup/skeleton/examples/1/index.less
similarity index 83%
rename from projects/demo/src/modules/markup/skeleton/examples/1/index.style.less
rename to projects/demo/src/modules/markup/skeleton/examples/1/index.less
index b5ac74334fd2..d302a1f2fdb2 100644
--- a/projects/demo/src/modules/markup/skeleton/examples/1/index.style.less
+++ b/projects/demo/src/modules/markup/skeleton/examples/1/index.less
@@ -4,6 +4,10 @@
&_dark {
background-image: linear-gradient(225deg, #3023ae, #c86dd7);
+
+ & * {
+ color: var(--tui-text-01-night);
+ }
}
}
diff --git a/projects/demo/src/modules/markup/skeleton/examples/1/index.ts b/projects/demo/src/modules/markup/skeleton/examples/1/index.ts
index 37454976489b..55e0974ff7a4 100644
--- a/projects/demo/src/modules/markup/skeleton/examples/1/index.ts
+++ b/projects/demo/src/modules/markup/skeleton/examples/1/index.ts
@@ -6,7 +6,7 @@ import {encapsulation} from '../../../../../view-encapsulation';
@Component({
selector: 'tui-skeleton-example-1',
templateUrl: './index.html',
- styleUrls: ['./index.style.less'],
+ styleUrls: ['./index.less'],
changeDetection,
encapsulation,
})
diff --git a/projects/demo/src/modules/markup/skeleton/examples/2/index.html b/projects/demo/src/modules/markup/skeleton/examples/2/index.html
index dce479a6ce27..000f7ef18ba7 100644
--- a/projects/demo/src/modules/markup/skeleton/examples/2/index.html
+++ b/projects/demo/src/modules/markup/skeleton/examples/2/index.html
@@ -16,7 +16,11 @@
-
+ >
diff --git a/projects/addon-charts/components/line-days-chart/line-days-chart.template.html b/projects/addon-charts/components/line-days-chart/line-days-chart.template.html
index 170fa48ed28a..8dde776b3d30 100644
--- a/projects/addon-charts/components/line-days-chart/line-days-chart.template.html
+++ b/projects/addon-charts/components/line-days-chart/line-days-chart.template.html
@@ -14,8 +14,9 @@
[xStringify]="xStringify ? daysStringify : null"
>
-
+ >
diff --git a/projects/addon-charts/components/pie-chart/pie-chart.template.html b/projects/addon-charts/components/pie-chart/pie-chart.template.html
index 515d8020c18d..b4426b96b233 100644
--- a/projects/addon-charts/components/pie-chart/pie-chart.template.html
+++ b/projects/addon-charts/components/pie-chart/pie-chart.template.html
@@ -41,9 +41,10 @@
-
+ >
diff --git a/projects/addon-charts/components/ring-chart/ring-chart.template.html b/projects/addon-charts/components/ring-chart/ring-chart.template.html
index b1a075fb78fa..4120d3f2a9ee 100644
--- a/projects/addon-charts/components/ring-chart/ring-chart.template.html
+++ b/projects/addon-charts/components/ring-chart/ring-chart.template.html
@@ -1,10 +1,11 @@
=6.0.0",
"@angular/core": ">=6.0.0",
- "@tinkoff/ng-polymorpheus": ">=2.0.0",
+ "@tinkoff/ng-polymorpheus": ">=3.0.0",
"@taiga-ui/cdk": "1.6.5",
"@taiga-ui/core": "1.6.5"
},
diff --git a/projects/addon-commerce/package.json b/projects/addon-commerce/package.json
index f53a0ad1f1bc..3da0bb7ddfb1 100644
--- a/projects/addon-commerce/package.json
+++ b/projects/addon-commerce/package.json
@@ -17,7 +17,7 @@
"@angular/common": ">=6.0.0",
"@angular/core": ">=6.0.0",
"@angular/forms": ">=6.0.0",
- "@tinkoff/ng-polymorpheus": ">=2.0.0",
+ "@tinkoff/ng-polymorpheus": ">=3.0.0",
"@taiga-ui/cdk": "1.6.5",
"@taiga-ui/core": "1.6.5",
"angular2-text-mask": "9.0.0",
diff --git a/projects/addon-doc/package.json b/projects/addon-doc/package.json
index 694b4d450962..dc505feaf5d1 100644
--- a/projects/addon-doc/package.json
+++ b/projects/addon-doc/package.json
@@ -20,7 +20,7 @@
"@angular/forms": ">=6.0.0",
"@angular/router": ">=6.0.0",
"@angular-devkit/schematics": "^8.3.21",
- "@tinkoff/ng-polymorpheus": ">=2.0.0",
+ "@tinkoff/ng-polymorpheus": ">=3.0.0",
"@taiga-ui/cdk": "1.6.5",
"@taiga-ui/core": "1.6.5",
"@taiga-ui/kit": "1.6.5",
diff --git a/projects/addon-doc/src/internal/source-code/source-code.template.html b/projects/addon-doc/src/internal/source-code/source-code.template.html
index c9b59b0dd251..3aa8a4680e84 100644
--- a/projects/addon-doc/src/internal/source-code/source-code.template.html
+++ b/projects/addon-doc/src/internal/source-code/source-code.template.html
@@ -1,4 +1,5 @@
-
-
+
diff --git a/projects/addon-mobile/components/mobile-dialog/mobile-dialog.template.html b/projects/addon-mobile/components/mobile-dialog/mobile-dialog.template.html
index e21e38f4f869..16d0f37ef681 100644
--- a/projects/addon-mobile/components/mobile-dialog/mobile-dialog.template.html
+++ b/projects/addon-mobile/components/mobile-dialog/mobile-dialog.template.html
@@ -1,11 +1,12 @@
{{internal.label}}
-
+>
+>
diff --git a/projects/addon-mobile/package.json b/projects/addon-mobile/package.json
index dfaa0f827a39..5a1f6dd6678f 100644
--- a/projects/addon-mobile/package.json
+++ b/projects/addon-mobile/package.json
@@ -14,7 +14,7 @@
"@angular/cdk": ">=7.0.0",
"@angular/common": ">=7.0.0",
"@angular/core": ">=7.0.0",
- "@tinkoff/ng-polymorpheus": ">=2.0.0",
+ "@tinkoff/ng-polymorpheus": ">=3.0.0",
"@taiga-ui/cdk": "1.6.5",
"@taiga-ui/core": "1.6.5",
"@taiga-ui/kit": "1.6.5",
diff --git a/projects/addon-table/package.json b/projects/addon-table/package.json
index 13dd6a0d85ae..ec41f4d83875 100644
--- a/projects/addon-table/package.json
+++ b/projects/addon-table/package.json
@@ -16,7 +16,7 @@
"@angular/cdk": ">=7.0.0",
"@angular/common": ">=7.0.0",
"@angular/core": ">=7.0.0",
- "@tinkoff/ng-polymorpheus": ">=2.0.0",
+ "@tinkoff/ng-polymorpheus": ">=3.0.0",
"@taiga-ui/cdk": "1.6.5",
"@taiga-ui/core": "1.6.5",
"rxjs": ">=6.0.0"
diff --git a/projects/addon-tablebars/components/table-bars-host/table-bars-host.template.html b/projects/addon-tablebars/components/table-bars-host/table-bars-host.template.html
index a743ae1e3c47..07c7b48cf60d 100644
--- a/projects/addon-tablebars/components/table-bars-host/table-bars-host.template.html
+++ b/projects/addon-tablebars/components/table-bars-host/table-bars-host.template.html
@@ -10,11 +10,12 @@
[class.tui-container_adaptive]="item.adaptive"
>
=6.0.0",
"@angular/core": ">=6.0.0",
- "@tinkoff/ng-polymorpheus": ">=2.0.0",
+ "@tinkoff/ng-polymorpheus": ">=3.0.0",
"@taiga-ui/cdk": "1.6.5",
"@taiga-ui/core": "1.6.5",
"rxjs": ">=6.0.0"
diff --git a/projects/cdk/components/dialog-host/dialog-host.template.html b/projects/cdk/components/dialog-host/dialog-host.template.html
index 205402abd68b..a10b53d0a7b5 100644
--- a/projects/cdk/components/dialog-host/dialog-host.template.html
+++ b/projects/cdk/components/dialog-host/dialog-host.template.html
@@ -1,4 +1,5 @@
-
+>
diff --git a/projects/cdk/decorators/default-prop.ts b/projects/cdk/decorators/default-prop.ts
index b7147d9354f7..b3a01f2a98e9 100644
--- a/projects/cdk/decorators/default-prop.ts
+++ b/projects/cdk/decorators/default-prop.ts
@@ -1,5 +1,5 @@
import {tuiAssert} from '@taiga-ui/cdk/classes';
-import {TuiAssertion} from '@taiga-ui/cdk/types';
+import {TuiBooleanHandler} from '@taiga-ui/cdk/types';
/**
* Decorator for checking input values for undefined. You can also pass
@@ -10,7 +10,7 @@ import {TuiAssertion} from '@taiga-ui/cdk/types';
* CAUTION: This decorator overwrites other getters and setters.
*/
export function tuiDefaultProp(
- assertion?: TuiAssertion,
+ assertion?: TuiBooleanHandler,
...args: any[]
): PropertyDecorator {
return (target, key) => {
@@ -33,7 +33,7 @@ export function tuiDefaultProp(
if (isValid && assertion) {
tuiAssert.assert(
- assertion(initialValue, this),
+ assertion.call(this, initialValue),
`${String(key)} in ${name} received:`,
initialValue,
...args,
@@ -56,7 +56,7 @@ export function tuiDefaultProp(
if (isValid && assertion) {
tuiAssert.assert(
- assertion(value, this),
+ assertion.call(this, value),
`${String(key)} in ${name} received:`,
value,
...args,
diff --git a/projects/cdk/decorators/required-setter.ts b/projects/cdk/decorators/required-setter.ts
index 687c7108e84e..5aa483931873 100644
--- a/projects/cdk/decorators/required-setter.ts
+++ b/projects/cdk/decorators/required-setter.ts
@@ -1,5 +1,5 @@
import {tuiAssert} from '@taiga-ui/cdk/classes';
-import {TuiAssertion} from '@taiga-ui/cdk/types';
+import {TuiBooleanHandler} from '@taiga-ui/cdk/types';
/**
* Decorator for checking input setter values against a custom assertion which
@@ -8,7 +8,7 @@ import {TuiAssertion} from '@taiga-ui/cdk/types';
* original setter in this case.
*/
export function tuiRequiredSetter(
- assertion?: TuiAssertion,
+ assertion?: TuiBooleanHandler,
...args: any[]
): MethodDecorator {
return (
@@ -25,7 +25,7 @@ export function tuiRequiredSetter(
set(this: T, value: T[K]) {
if (value !== undefined && assertion) {
tuiAssert.assert(
- assertion(value, this),
+ assertion.call(this, value),
`${String(key)} in ${name} received:`,
value,
...args,
diff --git a/projects/cdk/package.json b/projects/cdk/package.json
index 16cb21667398..9c6d814fdf2a 100644
--- a/projects/cdk/package.json
+++ b/projects/cdk/package.json
@@ -15,11 +15,11 @@
"repository": "https://github.com/TinkoffCreditSystems/taiga-ui",
"homepage": "https://github.com/TinkoffCreditSystems/taiga-ui",
"dependencies": {
- "@ng-web-apis/common": "1.7.0",
+ "@ng-web-apis/common": "1.9.0",
"@ng-web-apis/mutation-observer": "1.1.0",
"@ng-web-apis/resize-observer": "1.0.3",
"@tinkoff/ng-event-plugins": "2.0.0",
- "@tinkoff/ng-polymorpheus": "2.1.0",
+ "@tinkoff/ng-polymorpheus": "3.0.0",
"@types/resize-observer-browser": "0.1.3"
},
"peerDependencies": {
diff --git a/projects/cdk/types/assertion.ts b/projects/cdk/types/assertion.ts
deleted file mode 100644
index 1d73802d8424..000000000000
--- a/projects/cdk/types/assertion.ts
+++ /dev/null
@@ -1,4 +0,0 @@
-export type TuiAssertion = (
- item: C[K],
- context: C,
-) => boolean;
diff --git a/projects/cdk/types/index.ts b/projects/cdk/types/index.ts
index 53f524678eaf..3b50d35d7ff2 100644
--- a/projects/cdk/types/index.ts
+++ b/projects/cdk/types/index.ts
@@ -1,4 +1,3 @@
-export * from './assertion';
export * from './event-with';
export * from './handler';
export * from './mapper';
diff --git a/projects/core/components/button/button.template.html b/projects/core/components/button/button.template.html
index c4ca9dd282a9..f2e312bdeb33 100644
--- a/projects/core/components/button/button.template.html
+++ b/projects/core/components/button/button.template.html
@@ -7,13 +7,14 @@
[focused]="computedFocusVisible"
>
-
+
-
+
-
-
+
= context.minViewedMonth.month;
-}
-
-const incorrectMaxMessage = 'Min value must be less than max value';
-const incorrectMaxMonthMessage =
- 'Min month value must be equal or less than max month value';
-
// @dynamic
@Component({
selector: 'tui-calendar',
@@ -62,7 +47,7 @@ export class TuiCalendarComponent implements TuiWithOptionalMinMax {
min = TUI_FIRST_DAY;
@Input()
- @tuiDefaultProp(maxDayAssertion, incorrectMaxMessage)
+ @tuiDefaultProp()
max = TUI_LAST_DAY;
@Input()
@@ -70,7 +55,7 @@ export class TuiCalendarComponent implements TuiWithOptionalMinMax {
minViewedMonth: TuiMonth = TUI_FIRST_DAY;
@Input()
- @tuiDefaultProp(maxMonthAssertion, incorrectMaxMonthMessage)
+ @tuiDefaultProp()
maxViewedMonth: TuiMonth = TUI_LAST_DAY;
@Input()
diff --git a/projects/core/components/dropdown-box/dropdown-box.template.html b/projects/core/components/dropdown-box/dropdown-box.template.html
index fce55479ef96..e6a35f4a5df5 100644
--- a/projects/core/components/dropdown-box/dropdown-box.template.html
+++ b/projects/core/components/dropdown-box/dropdown-box.template.html
@@ -6,11 +6,12 @@
>
-
+ >
diff --git a/projects/core/components/error/error.template.html b/projects/core/components/error/error.template.html
index 240d13564a29..2dd92dc6b8ae 100644
--- a/projects/core/components/error/error.template.html
+++ b/projects/core/components/error/error.template.html
@@ -1,4 +1,5 @@
-
+>
diff --git a/projects/core/components/expand/expand.template.html b/projects/core/components/expand/expand.template.html
index 76a9be13a030..299eed0ef339 100644
--- a/projects/core/components/expand/expand.template.html
+++ b/projects/core/components/expand/expand.template.html
@@ -2,7 +2,7 @@
-
+
diff --git a/projects/core/components/hints-host/hints-host.template.html b/projects/core/components/hints-host/hints-host.template.html
index 5e7fd55fd7a8..1fcfbf8c659e 100644
--- a/projects/core/components/hints-host/hints-host.template.html
+++ b/projects/core/components/hints-host/hints-host.template.html
@@ -8,9 +8,9 @@
[hint]="hint"
(tuiHoveredChange)="onHovered($event, hint)"
>
-
+
{{text}}
-
+
diff --git a/projects/core/components/label/label.template.html b/projects/core/components/label/label.template.html
index 6271a53eb0c8..ac4b02b9c9be 100644
--- a/projects/core/components/label/label.template.html
+++ b/projects/core/components/label/label.template.html
@@ -1,6 +1,6 @@
-
+
{{text}}
-
+
diff --git a/projects/core/components/loader/loader.template.html b/projects/core/components/loader/loader.template.html
index 32dd4c3c956a..ca44605ae30f 100644
--- a/projects/core/components/loader/loader.template.html
+++ b/projects/core/components/loader/loader.template.html
@@ -30,11 +30,12 @@
>
-
+ >
diff --git a/projects/core/components/primitive-textfield/primitive-textfield.template.html b/projects/core/components/primitive-textfield/primitive-textfield.template.html
index 6a5ea0e3d23f..c91ff40956a9 100644
--- a/projects/core/components/primitive-textfield/primitive-textfield.template.html
+++ b/projects/core/components/primitive-textfield/primitive-textfield.template.html
@@ -45,7 +45,8 @@
-
-
+
-
-
+
diff --git a/projects/core/modules/notifications/notification-alert/notification-alert.template.html b/projects/core/modules/notifications/notification-alert/notification-alert.template.html
index 2bebc02d8d07..45df38ac9c10 100644
--- a/projects/core/modules/notifications/notification-alert/notification-alert.template.html
+++ b/projects/core/modules/notifications/notification-alert/notification-alert.template.html
@@ -10,12 +10,13 @@
>
{{safeItem.label}}
-
+ >
@@ -26,11 +27,12 @@
>
{{safeItem.label}}
-
+ >
diff --git a/projects/core/package.json b/projects/core/package.json
index 9a1050841d61..fa7e21b6cc74 100644
--- a/projects/core/package.json
+++ b/projects/core/package.json
@@ -23,7 +23,7 @@
"@angular/platform-browser": ">=6.0.0",
"@angular/router": ">=6.0.0",
"@tinkoff/ng-event-plugins": ">=2.0.0",
- "@tinkoff/ng-polymorpheus": ">=2.0.0",
+ "@tinkoff/ng-polymorpheus": ">=3.0.0",
"rxjs": ">=6.0.0"
}
}
diff --git a/projects/demo/src/assets/images/card.jpg b/projects/demo/src/assets/images/card.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..e81847e8f3e7eb34c6a312da32c5be697ce2750e
GIT binary patch
literal 105533
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