@evotor-dev/ui-kit 6.17.1 → 6.17.2
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/bundles/evotor-dev-ui-kit.umd.js +379 -0
- package/bundles/evotor-dev-ui-kit.umd.js.map +1 -1
- package/esm2015/lib/components/evo-navigation-tabs/evo-navigation-tab.directive.js +52 -0
- package/esm2015/lib/components/evo-navigation-tabs/evo-navigation-tabs.component.js +112 -0
- package/esm2015/lib/components/evo-navigation-tabs/evo-navigation-tabs.module.js +20 -0
- package/esm2015/lib/components/evo-navigation-tabs/index.js +2 -0
- package/esm2015/lib/components/evo-navigation-tabs/public-api.js +5 -0
- package/esm2015/lib/components/evo-navigation-tabs/types/evo-navigation-tabs-size.js +2 -0
- package/esm2015/lib/services/mutation-observer.service.js +59 -0
- package/esm2015/lib/services/router-link-active.service.js +41 -0
- package/esm2015/lib/utils/observables/zone-free.js +64 -0
- package/esm2015/lib/utils/tokens/animation-frame.js +27 -0
- package/esm2015/public_api.js +2 -1
- package/fesm2015/evotor-dev-ui-kit.js +341 -5
- package/fesm2015/evotor-dev-ui-kit.js.map +1 -1
- package/lib/components/evo-navigation-tabs/evo-navigation-tab.directive.d.ts +19 -0
- package/lib/components/evo-navigation-tabs/evo-navigation-tabs.component.d.ts +32 -0
- package/lib/components/evo-navigation-tabs/evo-navigation-tabs.module.d.ts +10 -0
- package/lib/components/evo-navigation-tabs/index.d.ts +1 -0
- package/lib/components/evo-navigation-tabs/public-api.d.ts +4 -0
- package/lib/components/evo-navigation-tabs/types/evo-navigation-tabs-size.d.ts +1 -0
- package/lib/services/mutation-observer.service.d.ts +34 -0
- package/lib/services/router-link-active.service.d.ts +16 -0
- package/lib/utils/observables/zone-free.d.ts +54 -0
- package/lib/utils/tokens/animation-frame.d.ts +10 -0
- package/package.json +1 -1
- package/public_api.d.ts +1 -0
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { ElementRef, OnDestroy } from '@angular/core';
|
|
2
|
+
import { RouterLinkActive } from '@angular/router';
|
|
3
|
+
import { RouterLinkActiveService } from '../../services/router-link-active.service';
|
|
4
|
+
import { MutationObserverService } from '../../services/mutation-observer.service';
|
|
5
|
+
import * as i0 from "@angular/core";
|
|
6
|
+
export declare const EVO_TAB_ACTIVATE = "evo-tab-activate";
|
|
7
|
+
export declare class EvoNavigationTabDirective implements OnDestroy {
|
|
8
|
+
private readonly el;
|
|
9
|
+
private readonly routerLinkActiveService;
|
|
10
|
+
private readonly rla;
|
|
11
|
+
private readonly mutation;
|
|
12
|
+
tabClass: boolean;
|
|
13
|
+
private readonly destroy$;
|
|
14
|
+
constructor(el: ElementRef, routerLinkActiveService: RouterLinkActiveService, rla: RouterLinkActive, mutation: MutationObserverService);
|
|
15
|
+
ngOnDestroy(): void;
|
|
16
|
+
private initSubscriptions;
|
|
17
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<EvoNavigationTabDirective, [null, null, { optional: true; }, { optional: true; }]>;
|
|
18
|
+
static ɵdir: i0.ɵɵDirectiveDeclaration<EvoNavigationTabDirective, "button[evoNavigationTab]:not([routerLink]), button[evoNavigationTab][routerLink][routerLinkActive]", never, {}, {}, never>;
|
|
19
|
+
}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import { AfterViewChecked, AfterViewInit, ElementRef, EventEmitter, OnDestroy } from '@angular/core';
|
|
2
|
+
import { EvoNavigationTabsSize } from './types/evo-navigation-tabs-size';
|
|
3
|
+
import * as i0 from "@angular/core";
|
|
4
|
+
export declare class EvoNavigationTabsComponent implements AfterViewInit, AfterViewChecked, OnDestroy {
|
|
5
|
+
private readonly el;
|
|
6
|
+
tabs: {
|
|
7
|
+
label: string;
|
|
8
|
+
link?: string;
|
|
9
|
+
disabled?: boolean;
|
|
10
|
+
}[];
|
|
11
|
+
size: EvoNavigationTabsSize;
|
|
12
|
+
set setActiveIndex(index: number);
|
|
13
|
+
set setDisabled(disabled: boolean);
|
|
14
|
+
activeItemIndexChange: EventEmitter<number>;
|
|
15
|
+
disabled: boolean;
|
|
16
|
+
private activeIndex;
|
|
17
|
+
private readonly disabledSubject$;
|
|
18
|
+
private readonly nextRenderSubject$;
|
|
19
|
+
private readonly destroy$;
|
|
20
|
+
constructor(el: ElementRef);
|
|
21
|
+
ngAfterViewInit(): void;
|
|
22
|
+
ngAfterViewChecked(): void;
|
|
23
|
+
ngOnDestroy(): void;
|
|
24
|
+
onActivate(event: Event, element: HTMLButtonElement): void;
|
|
25
|
+
private get tabsList();
|
|
26
|
+
private get activeElement();
|
|
27
|
+
private markTabAsActive;
|
|
28
|
+
private markTabAsDisabled;
|
|
29
|
+
private initSubscriptions;
|
|
30
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<EvoNavigationTabsComponent, never>;
|
|
31
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<EvoNavigationTabsComponent, "evo-navigation-tabs", never, { "tabs": "tabs"; "size": "size"; "setActiveIndex": "activeIndex"; "setDisabled": "disabled"; }, { "activeItemIndexChange": "activeItemIndexChange"; }, never, ["[position=start]", "*"]>;
|
|
32
|
+
}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import * as i0 from "@angular/core";
|
|
2
|
+
import * as i1 from "./evo-navigation-tabs.component";
|
|
3
|
+
import * as i2 from "./evo-navigation-tab.directive";
|
|
4
|
+
import * as i3 from "@angular/common";
|
|
5
|
+
import * as i4 from "@angular/router";
|
|
6
|
+
export declare class EvoNavigationTabsModule {
|
|
7
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<EvoNavigationTabsModule, never>;
|
|
8
|
+
static ɵmod: i0.ɵɵNgModuleDeclaration<EvoNavigationTabsModule, [typeof i1.EvoNavigationTabsComponent, typeof i2.EvoNavigationTabDirective], [typeof i3.CommonModule, typeof i4.RouterModule], [typeof i1.EvoNavigationTabsComponent, typeof i2.EvoNavigationTabDirective]>;
|
|
9
|
+
static ɵinj: i0.ɵɵInjectorDeclaration<EvoNavigationTabsModule>;
|
|
10
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from './public-api';
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare type EvoNavigationTabsSize = 'small' | 'normal';
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import { Observable } from 'rxjs';
|
|
2
|
+
import * as i0 from "@angular/core";
|
|
3
|
+
/**
|
|
4
|
+
* Безопасная обёртка над `MutationObserver`, которая гарантирует,
|
|
5
|
+
* что код не упадёт в средах, где `MutationObserver` недоступен
|
|
6
|
+
* (например, серверный рендеринг или тесты без DOM).
|
|
7
|
+
*
|
|
8
|
+
* Если `MutationObserver` существует — используется он.
|
|
9
|
+
* Если нет — используется заглушка с пустыми методами.
|
|
10
|
+
*/
|
|
11
|
+
export declare const SafeObserver: {
|
|
12
|
+
new (callback: MutationCallback): MutationObserver;
|
|
13
|
+
prototype: MutationObserver;
|
|
14
|
+
};
|
|
15
|
+
/**
|
|
16
|
+
* Сервис `MutationObserverService` предоставляет поток `Observable<MutationRecord[]>`,
|
|
17
|
+
* который эмитит записи изменений DOM для текущего элемента (`ElementRef`).
|
|
18
|
+
*
|
|
19
|
+
* Наблюдает за изменениями потомков, текстового содержимого и вложенных структур (`subtree: true`).
|
|
20
|
+
*
|
|
21
|
+
* Используется `SafeObserver`, чтобы гарантировать совместимость с SSR и тестовой средой.
|
|
22
|
+
*
|
|
23
|
+
* ⚠️ Важно: требует, чтобы `ElementRef` был доступен через DI-контекст (т.е. работает в компонентах/директивах).
|
|
24
|
+
*
|
|
25
|
+
* @example
|
|
26
|
+
* this.mutationObserverService.subscribe(records => {
|
|
27
|
+
* console.log('Mutation detected!', records);
|
|
28
|
+
* });
|
|
29
|
+
*/
|
|
30
|
+
export declare class MutationObserverService extends Observable<readonly MutationRecord[]> {
|
|
31
|
+
constructor();
|
|
32
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<MutationObserverService, never>;
|
|
33
|
+
static ɵprov: i0.ɵɵInjectableDeclaration<MutationObserverService>;
|
|
34
|
+
}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { NgZone } from '@angular/core';
|
|
2
|
+
import { RouterLinkActive } from '@angular/router';
|
|
3
|
+
import { Observable } from 'rxjs';
|
|
4
|
+
import * as i0 from "@angular/core";
|
|
5
|
+
/**
|
|
6
|
+
* Сервис создает поток, отслеживающий состояние активности
|
|
7
|
+
* `RouterLinkActive` в реальном времени с использованием `requestAnimationFrame`.
|
|
8
|
+
*
|
|
9
|
+
* Наследуется от `Observable<boolean>` и эмитит `true` или `false`, когда состояние `isActive`
|
|
10
|
+
* меняется. Если `RouterLinkActive` не передан — поток будет пустым (`EMPTY`).
|
|
11
|
+
*/
|
|
12
|
+
export declare class RouterLinkActiveService extends Observable<boolean> {
|
|
13
|
+
constructor(routerLinkActive: RouterLinkActive | null, ngZone: NgZone, animationFrame$: Observable<number>);
|
|
14
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<RouterLinkActiveService, [{ optional: true; }, null, null]>;
|
|
15
|
+
static ɵprov: i0.ɵɵInjectableDeclaration<RouterLinkActiveService>;
|
|
16
|
+
}
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
import { NgZone } from '@angular/core';
|
|
2
|
+
import { MonoTypeOperatorFunction } from 'rxjs';
|
|
3
|
+
/**
|
|
4
|
+
* Кратко:
|
|
5
|
+
* 🔥 evoZonefull — тащит всё в Angular-зону.
|
|
6
|
+
* 🧊 evoZonefree — игнорирует Angular-зону, экономит CD.
|
|
7
|
+
* ⚖️ evoZoneOptimized — как утро с кофе: просыпаешься вовремя и не дергаешь лишний раз change detection.
|
|
8
|
+
*/
|
|
9
|
+
/**
|
|
10
|
+
* Оператор `evoZonefull` обеспечивает полное выполнение потока внутри зоны Angular.
|
|
11
|
+
*
|
|
12
|
+
* Все `next`, `error` и `complete` вызовы оборачиваются в `NgZone.run`, чтобы гарантировать
|
|
13
|
+
* корректный запуск change detection.
|
|
14
|
+
*
|
|
15
|
+
* Используй, если поток формируется вне зоны или ты не уверен, что Angular узнает об изменениях.
|
|
16
|
+
*
|
|
17
|
+
* @param zone Сервис `NgZone` из Angular DI.
|
|
18
|
+
* @returns Оператор, оборачивающий поток в `NgZone.run()`.
|
|
19
|
+
*
|
|
20
|
+
* @example
|
|
21
|
+
* source$.pipe(evoZonefull(this.ngZone)).subscribe(...);
|
|
22
|
+
*/
|
|
23
|
+
export declare function evoZonefull<T>(zone: NgZone): MonoTypeOperatorFunction<T>;
|
|
24
|
+
/**
|
|
25
|
+
* Оператор `evoZonefree` исполняет весь поток вне зоны Angular.
|
|
26
|
+
*
|
|
27
|
+
* Это помогает избежать лишних срабатываний change detection и повысить производительность,
|
|
28
|
+
* особенно для часто испускаемых потоков (например, `scroll`, `animationFrame`, таймеры).
|
|
29
|
+
*
|
|
30
|
+
* Используй, если тебе не нужно обновлять Angular view внутри этого потока.
|
|
31
|
+
*
|
|
32
|
+
* @param zone Сервис `NgZone` из Angular DI.
|
|
33
|
+
* @returns Оператор, исполняющий подписку вне Angular-зоны.
|
|
34
|
+
*
|
|
35
|
+
* @example
|
|
36
|
+
* source$.pipe(evoZonefree(this.ngZone)).subscribe(...);
|
|
37
|
+
*/
|
|
38
|
+
export declare function evoZonefree<T>(zone: NgZone): MonoTypeOperatorFunction<T>;
|
|
39
|
+
/**
|
|
40
|
+
* Оператор `evoZoneOptimized` — комбо из `evoZonefree` и `evoZonefull`.
|
|
41
|
+
*
|
|
42
|
+
* Сначала поток исполняется вне Angular-зоны (`runOutsideAngular`), чтобы избежать лишнего
|
|
43
|
+
* change detection. Но события `next`, `error` и `complete` всё равно возвращаются в Angular-зону.
|
|
44
|
+
*
|
|
45
|
+
* Это идеальный баланс, если тебе нужен быстрый поток без лишнего CD, но ты всё равно хочешь,
|
|
46
|
+
* чтобы Angular знал о результатах.
|
|
47
|
+
*
|
|
48
|
+
* @param zone Сервис `NgZone` из Angular DI.
|
|
49
|
+
* @returns Оператор, оптимизированный по производительности.
|
|
50
|
+
*
|
|
51
|
+
* @example
|
|
52
|
+
* source$.pipe(evoZoneOptimized(this.ngZone)).subscribe(...);
|
|
53
|
+
*/
|
|
54
|
+
export declare function evoZoneOptimized<T>(zone: NgZone): MonoTypeOperatorFunction<T>;
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { InjectionToken } from '@angular/core';
|
|
2
|
+
import { Observable } from 'rxjs';
|
|
3
|
+
/**
|
|
4
|
+
* Токен `ANIMATION_FRAME` предоставляет поток значений времени из `requestAnimationFrame`,
|
|
5
|
+
* испускаемый каждый кадр анимации.
|
|
6
|
+
*
|
|
7
|
+
* Может быть полезен для задач, которые требуют частого обновления, например, отслеживания
|
|
8
|
+
* активности или плавной анимации в UI.
|
|
9
|
+
*/
|
|
10
|
+
export declare const ANIMATION_FRAME: InjectionToken<Observable<number>>;
|
package/package.json
CHANGED
package/public_api.d.ts
CHANGED
|
@@ -52,6 +52,7 @@ export * from './lib/components/evo-dropdown/index';
|
|
|
52
52
|
export * from './lib/components/evo-navbar/index';
|
|
53
53
|
export * from './lib/components/evo-navigation-button/index';
|
|
54
54
|
export * from './lib/components/evo-tooltip/index';
|
|
55
|
+
export * from './lib/components/evo-navigation-tabs/index';
|
|
55
56
|
export * from './lib/pipes/index';
|
|
56
57
|
export * from './lib/services/index';
|
|
57
58
|
export * from './lib/components/evo-portal/index';
|