@covalent/core 6.3.0 → 7.0.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/breadcrumbs/breadcrumbs.component.d.ts +1 -1
- package/dialogs/window-dialog/window-dialog.component.d.ts +1 -1
- package/dynamic-menu/dynamic-menu-item/dynamic-menu-item.component.d.ts +1 -1
- package/dynamic-menu/dynamic-menu-item/dynamic-menu-link/dynamic-menu-link.component.d.ts +1 -1
- package/dynamic-menu/dynamic-menu.component.d.ts +1 -1
- package/esm2022/breadcrumbs/breadcrumb/breadcrumb.component.mjs +94 -0
- package/esm2022/breadcrumbs/breadcrumbs.component.mjs +135 -0
- package/{esm2020 → esm2022}/breadcrumbs/breadcrumbs.module.mjs +5 -5
- package/esm2022/common/behaviors/control-value-accesor.mixin.mjs +43 -0
- package/esm2022/common/behaviors/disable-ripple.mixin.mjs +24 -0
- package/{esm2020 → esm2022}/common/behaviors/disabled.mixin.mjs +2 -2
- package/{esm2020 → esm2022}/common/common.module.mjs +17 -17
- package/esm2022/common/directives/fullscreen/fullscreen.directive.mjs +87 -0
- package/esm2022/common/forms/auto-trim/auto-trim.directive.mjs +37 -0
- package/esm2022/common/functions/convert.mjs +84 -0
- package/esm2022/common/functions/download.mjs +75 -0
- package/esm2022/common/pipes/bytes/bytes.pipe.mjs +42 -0
- package/esm2022/common/pipes/decimal-bytes/decimal-bytes.pipe.mjs +42 -0
- package/esm2022/common/pipes/digits/digits.pipe.mjs +41 -0
- package/{esm2020 → esm2022}/common/pipes/time-ago/time-ago.pipe.mjs +4 -4
- package/{esm2020 → esm2022}/common/pipes/time-difference/time-difference.pipe.mjs +4 -4
- package/{esm2020 → esm2022}/common/pipes/time-until/time-until.pipe.mjs +4 -4
- package/esm2022/common/pipes/truncate/truncate.pipe.mjs +27 -0
- package/esm2022/common/services/icon.service.mjs +1087 -0
- package/esm2022/common/services/router-path.service.mjs +30 -0
- package/esm2022/dialogs/alert-dialog/alert-dialog.component.mjs +26 -0
- package/esm2022/dialogs/confirm-dialog/confirm-dialog.component.mjs +31 -0
- package/esm2022/dialogs/dialog.component.mjs +60 -0
- package/{esm2020 → esm2022}/dialogs/dialogs.module.mjs +39 -39
- package/esm2022/dialogs/prompt-dialog/prompt-dialog.component.mjs +84 -0
- package/esm2022/dialogs/resizable-draggable-dialog/resizable-draggable-dialog.mjs +220 -0
- package/esm2022/dialogs/services/dialog.service.mjs +179 -0
- package/esm2022/dialogs/window-dialog/window-dialog.component.mjs +40 -0
- package/esm2022/dynamic-menu/dynamic-menu-item/dynamic-menu-item.component.mjs +30 -0
- package/esm2022/dynamic-menu/dynamic-menu-item/dynamic-menu-link/dynamic-menu-link.component.mjs +23 -0
- package/esm2022/dynamic-menu/dynamic-menu.component.mjs +28 -0
- package/{esm2020 → esm2022}/dynamic-menu/dynamic-menu.module.mjs +19 -19
- package/esm2022/file/directives/file-drop.directive.mjs +145 -0
- package/esm2022/file/directives/file-select.directive.mjs +78 -0
- package/esm2022/file/file-input/file-input.component.mjs +146 -0
- package/esm2022/file/file-upload/file-upload.component.mjs +185 -0
- package/{esm2020 → esm2022}/file/file.module.mjs +21 -21
- package/esm2022/file/services/file.service.mjs +66 -0
- package/esm2022/json-formatter/json-formatter.component.mjs +222 -0
- package/{esm2020 → esm2022}/json-formatter/json-formatter.module.mjs +5 -5
- package/esm2022/layout/layout-card-over/layout-card-over.component.mjs +50 -0
- package/esm2022/layout/layout-footer/layout-footer.component.mjs +36 -0
- package/esm2022/layout/layout-manage-list/layout-manage-list.component.mjs +92 -0
- package/{esm2020 → esm2022}/layout/layout-manage-list/layout-manage-list.directives.mjs +10 -10
- package/esm2022/layout/layout-nav/layout-nav.component.mjs +76 -0
- package/esm2022/layout/layout-nav-list/layout-nav-list.component.mjs +154 -0
- package/{esm2020 → esm2022}/layout/layout-nav-list/layout-nav-list.directives.mjs +10 -10
- package/esm2022/layout/layout-toggle.class.mjs +96 -0
- package/esm2022/layout/layout.component.mjs +91 -0
- package/{esm2020 → esm2022}/layout/layout.directives.mjs +10 -10
- package/{esm2020 → esm2022}/layout/layout.module.mjs +55 -55
- package/esm2022/layout/navigation-drawer/navigation-drawer.component.mjs +221 -0
- package/esm2022/loading/directives/loading.directive.mjs +133 -0
- package/esm2022/loading/loading.component.mjs +193 -0
- package/{esm2020 → esm2022}/loading/loading.module.mjs +13 -13
- package/esm2022/loading/services/loading.factory.mjs +210 -0
- package/esm2022/loading/services/loading.service.mjs +219 -0
- package/{esm2020 → esm2022}/menu/menu.component.mjs +4 -4
- package/{esm2020 → esm2022}/menu/menu.module.mjs +5 -5
- package/esm2022/message/message.component.mjs +222 -0
- package/{esm2020 → esm2022}/message/message.module.mjs +7 -7
- package/esm2022/search/search-box/search-box.component.mjs +198 -0
- package/esm2022/search/search-input/search-input.component.mjs +214 -0
- package/{esm2020 → esm2022}/search/search.module.mjs +13 -13
- package/esm2022/side-sheet/side-sheet-container.mjs +285 -0
- package/esm2022/side-sheet/side-sheet-ref.mjs +30 -0
- package/{esm2020 → esm2022}/side-sheet/side-sheet.config.mjs +2 -5
- package/esm2022/side-sheet/side-sheet.content-directives.mjs +206 -0
- package/esm2022/side-sheet/side-sheet.mjs +236 -0
- package/{esm2020 → esm2022}/side-sheet/side-sheet.module.mjs +14 -14
- package/esm2022/user-profile/user-profile-menu/user-profile-menu.component.mjs +25 -0
- package/esm2022/user-profile/user-profile.component.mjs +21 -0
- package/{esm2020 → esm2022}/user-profile/user-profile.module.mjs +15 -15
- package/{fesm2015 → fesm2022}/covalent-core-breadcrumbs.mjs +28 -22
- package/{fesm2015 → fesm2022}/covalent-core-breadcrumbs.mjs.map +1 -1
- package/{fesm2020 → fesm2022}/covalent-core-common.mjs +1131 -1125
- package/fesm2022/covalent-core-common.mjs.map +1 -0
- package/{fesm2020 → fesm2022}/covalent-core-dialogs.mjs +109 -80
- package/{fesm2020 → fesm2022}/covalent-core-dialogs.mjs.map +1 -1
- package/fesm2022/covalent-core-dynamic-menu.mjs +125 -0
- package/{fesm2015 → fesm2022}/covalent-core-dynamic-menu.mjs.map +1 -1
- package/{fesm2020 → fesm2022}/covalent-core-file.mjs +148 -110
- package/{fesm2020 → fesm2022}/covalent-core-file.mjs.map +1 -1
- package/{fesm2020 → fesm2022}/covalent-core-json-formatter.mjs +26 -21
- package/{fesm2020 → fesm2022}/covalent-core-json-formatter.mjs.map +1 -1
- package/{fesm2020 → fesm2022}/covalent-core-layout.mjs +396 -271
- package/{fesm2015 → fesm2022}/covalent-core-layout.mjs.map +1 -1
- package/{fesm2020 → fesm2022}/covalent-core-loading.mjs +100 -78
- package/{fesm2020 → fesm2022}/covalent-core-loading.mjs.map +1 -1
- package/{fesm2015 → fesm2022}/covalent-core-menu.mjs +7 -7
- package/{fesm2015 → fesm2022}/covalent-core-menu.mjs.map +1 -1
- package/{fesm2020 → fesm2022}/covalent-core-message.mjs +42 -23
- package/{fesm2020 → fesm2022}/covalent-core-message.mjs.map +1 -1
- package/fesm2022/covalent-core-search.mjs +438 -0
- package/fesm2022/covalent-core-search.mjs.map +1 -0
- package/{fesm2020 → fesm2022}/covalent-core-side-sheet.mjs +124 -99
- package/{fesm2020 → fesm2022}/covalent-core-side-sheet.mjs.map +1 -1
- package/fesm2022/covalent-core-user-profile.mjs +87 -0
- package/fesm2022/covalent-core-user-profile.mjs.map +1 -0
- package/file/directives/file-drop.directive.d.ts +1 -1
- package/file/directives/file-select.directive.d.ts +1 -1
- package/file/file-input/file-input.component.d.ts +1 -1
- package/file/file-upload/file-upload.component.d.ts +1 -1
- package/json-formatter/json-formatter.component.d.ts +1 -1
- package/layout/layout-card-over/layout-card-over.component.d.ts +1 -1
- package/layout/layout-footer/layout-footer.component.d.ts +1 -1
- package/layout/layout-manage-list/layout-manage-list.component.d.ts +1 -1
- package/layout/layout-manage-list/layout-manage-list.directives.d.ts +3 -3
- package/layout/layout-nav/layout-nav.component.d.ts +1 -1
- package/layout/layout-nav-list/layout-nav-list.component.d.ts +1 -1
- package/layout/layout-nav-list/layout-nav-list.directives.d.ts +3 -3
- package/layout/layout-toggle.class.d.ts +1 -1
- package/layout/layout.component.d.ts +1 -1
- package/layout/layout.directives.d.ts +3 -3
- package/layout/navigation-drawer/navigation-drawer.component.d.ts +1 -1
- package/loading/directives/loading.directive.d.ts +1 -1
- package/message/message.component.d.ts +1 -1
- package/package.json +55 -91
- package/search/search-box/search-box.component.d.ts +1 -1
- package/search/search-input/search-input.component.d.ts +1 -1
- package/side-sheet/side-sheet.content-directives.d.ts +2 -2
- package/user-profile/user-profile-menu/user-profile-menu.component.d.ts +1 -1
- package/user-profile/user-profile.component.d.ts +1 -1
- package/common/styles/font/README.md +0 -11
- package/dialogs/src/README.md +0 -223
- package/esm2020/breadcrumbs/breadcrumb/breadcrumb.component.mjs +0 -92
- package/esm2020/breadcrumbs/breadcrumbs.component.mjs +0 -131
- package/esm2020/common/behaviors/control-value-accesor.mixin.mjs +0 -41
- package/esm2020/common/behaviors/disable-ripple.mixin.mjs +0 -24
- package/esm2020/common/directives/fullscreen/fullscreen.directive.mjs +0 -85
- package/esm2020/common/forms/auto-trim/auto-trim.directive.mjs +0 -36
- package/esm2020/common/functions/convert.mjs +0 -84
- package/esm2020/common/functions/download.mjs +0 -75
- package/esm2020/common/pipes/bytes/bytes.pipe.mjs +0 -42
- package/esm2020/common/pipes/decimal-bytes/decimal-bytes.pipe.mjs +0 -42
- package/esm2020/common/pipes/digits/digits.pipe.mjs +0 -39
- package/esm2020/common/pipes/truncate/truncate.pipe.mjs +0 -27
- package/esm2020/common/services/icon.service.mjs +0 -1089
- package/esm2020/common/services/router-path.service.mjs +0 -29
- package/esm2020/dialogs/alert-dialog/alert-dialog.component.mjs +0 -23
- package/esm2020/dialogs/confirm-dialog/confirm-dialog.component.mjs +0 -28
- package/esm2020/dialogs/dialog.component.mjs +0 -57
- package/esm2020/dialogs/prompt-dialog/prompt-dialog.component.mjs +0 -75
- package/esm2020/dialogs/resizable-draggable-dialog/resizable-draggable-dialog.mjs +0 -216
- package/esm2020/dialogs/services/dialog.service.mjs +0 -174
- package/esm2020/dialogs/window-dialog/window-dialog.component.mjs +0 -38
- package/esm2020/dynamic-menu/dynamic-menu-item/dynamic-menu-item.component.mjs +0 -30
- package/esm2020/dynamic-menu/dynamic-menu-item/dynamic-menu-link/dynamic-menu-link.component.mjs +0 -24
- package/esm2020/dynamic-menu/dynamic-menu.component.mjs +0 -28
- package/esm2020/file/directives/file-drop.directive.mjs +0 -139
- package/esm2020/file/directives/file-select.directive.mjs +0 -77
- package/esm2020/file/file-input/file-input.component.mjs +0 -128
- package/esm2020/file/file-upload/file-upload.component.mjs +0 -174
- package/esm2020/file/services/file.service.mjs +0 -64
- package/esm2020/json-formatter/json-formatter.component.mjs +0 -217
- package/esm2020/layout/layout-card-over/layout-card-over.component.mjs +0 -40
- package/esm2020/layout/layout-footer/layout-footer.component.mjs +0 -33
- package/esm2020/layout/layout-manage-list/layout-manage-list.component.mjs +0 -93
- package/esm2020/layout/layout-nav/layout-nav.component.mjs +0 -50
- package/esm2020/layout/layout-nav-list/layout-nav-list.component.mjs +0 -128
- package/esm2020/layout/layout-toggle.class.mjs +0 -92
- package/esm2020/layout/layout.component.mjs +0 -92
- package/esm2020/layout/navigation-drawer/navigation-drawer.component.mjs +0 -163
- package/esm2020/loading/directives/loading.directive.mjs +0 -126
- package/esm2020/loading/loading.component.mjs +0 -187
- package/esm2020/loading/services/loading.factory.mjs +0 -207
- package/esm2020/loading/services/loading.service.mjs +0 -213
- package/esm2020/message/message.component.mjs +0 -203
- package/esm2020/search/search-box/search-box.component.mjs +0 -194
- package/esm2020/search/search-input/search-input.component.mjs +0 -207
- package/esm2020/side-sheet/side-sheet-container.mjs +0 -274
- package/esm2020/side-sheet/side-sheet-ref.mjs +0 -26
- package/esm2020/side-sheet/side-sheet.content-directives.mjs +0 -201
- package/esm2020/side-sheet/side-sheet.mjs +0 -228
- package/esm2020/user-profile/user-profile-menu/user-profile-menu.component.mjs +0 -23
- package/esm2020/user-profile/user-profile.component.mjs +0 -19
- package/fesm2015/covalent-core-common.mjs +0 -2281
- package/fesm2015/covalent-core-common.mjs.map +0 -1
- package/fesm2015/covalent-core-dialogs.mjs +0 -668
- package/fesm2015/covalent-core-dialogs.mjs.map +0 -1
- package/fesm2015/covalent-core-dynamic-menu.mjs +0 -126
- package/fesm2015/covalent-core-file.mjs +0 -621
- package/fesm2015/covalent-core-file.mjs.map +0 -1
- package/fesm2015/covalent-core-json-formatter.mjs +0 -298
- package/fesm2015/covalent-core-json-formatter.mjs.map +0 -1
- package/fesm2015/covalent-core-layout.mjs +0 -1024
- package/fesm2015/covalent-core-loading.mjs +0 -766
- package/fesm2015/covalent-core-loading.mjs.map +0 -1
- package/fesm2015/covalent-core-message.mjs +0 -284
- package/fesm2015/covalent-core-message.mjs.map +0 -1
- package/fesm2015/covalent-core-search.mjs +0 -430
- package/fesm2015/covalent-core-search.mjs.map +0 -1
- package/fesm2015/covalent-core-side-sheet.mjs +0 -784
- package/fesm2015/covalent-core-side-sheet.mjs.map +0 -1
- package/fesm2015/covalent-core-user-profile.mjs +0 -83
- package/fesm2015/covalent-core-user-profile.mjs.map +0 -1
- package/fesm2020/covalent-core-breadcrumbs.mjs +0 -243
- package/fesm2020/covalent-core-breadcrumbs.mjs.map +0 -1
- package/fesm2020/covalent-core-common.mjs.map +0 -1
- package/fesm2020/covalent-core-dynamic-menu.mjs +0 -126
- package/fesm2020/covalent-core-dynamic-menu.mjs.map +0 -1
- package/fesm2020/covalent-core-layout.mjs.map +0 -1
- package/fesm2020/covalent-core-menu.mjs +0 -37
- package/fesm2020/covalent-core-menu.mjs.map +0 -1
- package/fesm2020/covalent-core-search.mjs +0 -427
- package/fesm2020/covalent-core-search.mjs.map +0 -1
- package/fesm2020/covalent-core-user-profile.mjs +0 -83
- package/fesm2020/covalent-core-user-profile.mjs.map +0 -1
- package/fesm2020/covalent-core.mjs +0 -4
- package/fesm2020/covalent-core.mjs.map +0 -1
- package/file/src/file-input/README.md +0 -147
- package/file/src/file-upload/README.md +0 -136
- package/layout/src/layout-card-over/README.md +0 -43
- package/layout/src/layout-manage-list/README.md +0 -80
- package/layout/src/layout-nav/README.md +0 -50
- package/layout/src/layout-nav-list/README.md +0 -105
- package/search/src/search-box/README.md +0 -73
- package/search/src/search-input/README.md +0 -74
- /package/{esm2020 → esm2022}/breadcrumbs/covalent-core-breadcrumbs.mjs +0 -0
- /package/{esm2020 → esm2022}/breadcrumbs/public_api.mjs +0 -0
- /package/{esm2020 → esm2022}/common/animations/bounce/bounce.animation.mjs +0 -0
- /package/{esm2020 → esm2022}/common/animations/collapse/collapse.animation.mjs +0 -0
- /package/{esm2020 → esm2022}/common/animations/common/interfaces.mjs +0 -0
- /package/{esm2020 → esm2022}/common/animations/fade/fadeInOut.animation.mjs +0 -0
- /package/{esm2020 → esm2022}/common/animations/flash/flash.animation.mjs +0 -0
- /package/{esm2020 → esm2022}/common/animations/headshake/headshake.animation.mjs +0 -0
- /package/{esm2020 → esm2022}/common/animations/jello/jello.animation.mjs +0 -0
- /package/{esm2020 → esm2022}/common/animations/pulse/pulse.animation.mjs +0 -0
- /package/{esm2020 → esm2022}/common/animations/rotate/rotate.animation.mjs +0 -0
- /package/{esm2020 → esm2022}/common/covalent-core-common.mjs +0 -0
- /package/{esm2020 → esm2022}/common/forms/validators/validators.mjs +0 -0
- /package/{esm2020 → esm2022}/common/functions/clipboard.mjs +0 -0
- /package/{esm2020 → esm2022}/common/functions/file.mjs +0 -0
- /package/{esm2020 → esm2022}/common/public_api.mjs +0 -0
- /package/{esm2020 → esm2022}/covalent-core.mjs +0 -0
- /package/{esm2020 → esm2022}/dialogs/covalent-core-dialogs.mjs +0 -0
- /package/{esm2020 → esm2022}/dialogs/public_api.mjs +0 -0
- /package/{esm2020 → esm2022}/dynamic-menu/covalent-core-dynamic-menu.mjs +0 -0
- /package/{esm2020 → esm2022}/dynamic-menu/dynamic-menu.menu.mjs +0 -0
- /package/{esm2020 → esm2022}/dynamic-menu/public_api.mjs +0 -0
- /package/{esm2020 → esm2022}/file/covalent-core-file.mjs +0 -0
- /package/{esm2020 → esm2022}/file/public_api.mjs +0 -0
- /package/{esm2020 → esm2022}/json-formatter/collapse.animation.mjs +0 -0
- /package/{esm2020 → esm2022}/json-formatter/covalent-core-json-formatter.mjs +0 -0
- /package/{esm2020 → esm2022}/json-formatter/public_api.mjs +0 -0
- /package/{esm2020 → esm2022}/layout/covalent-core-layout.mjs +0 -0
- /package/{esm2020 → esm2022}/layout/public_api.mjs +0 -0
- /package/{esm2020 → esm2022}/loading/covalent-core-loading.mjs +0 -0
- /package/{esm2020 → esm2022}/loading/public_api.mjs +0 -0
- /package/{esm2020 → esm2022}/menu/covalent-core-menu.mjs +0 -0
- /package/{esm2020 → esm2022}/menu/public_api.mjs +0 -0
- /package/{esm2020 → esm2022}/message/collapse.animation.mjs +0 -0
- /package/{esm2020 → esm2022}/message/covalent-core-message.mjs +0 -0
- /package/{esm2020 → esm2022}/message/public_api.mjs +0 -0
- /package/{esm2020 → esm2022}/public_api.mjs +0 -0
- /package/{esm2020 → esm2022}/search/covalent-core-search.mjs +0 -0
- /package/{esm2020 → esm2022}/search/public_api.mjs +0 -0
- /package/{esm2020 → esm2022}/side-sheet/covalent-core-side-sheet.mjs +0 -0
- /package/{esm2020 → esm2022}/side-sheet/public_api.mjs +0 -0
- /package/{esm2020 → esm2022}/side-sheet/side-sheet.animation.mjs +0 -0
- /package/{esm2020 → esm2022}/user-profile/covalent-core-user-profile.mjs +0 -0
- /package/{esm2020 → esm2022}/user-profile/public_api.mjs +0 -0
- /package/{fesm2015 → fesm2022}/covalent-core.mjs +0 -0
- /package/{fesm2015 → fesm2022}/covalent-core.mjs.map +0 -0
@@ -0,0 +1,221 @@
|
|
1
|
+
import { Component, Directive, Input, ContentChildren, forwardRef, Inject, QueryList, SecurityContext, Optional, } from '@angular/core';
|
2
|
+
import { Router } from '@angular/router';
|
3
|
+
import { DomSanitizer } from '@angular/platform-browser';
|
4
|
+
import { Subject } from 'rxjs';
|
5
|
+
import { takeUntil } from 'rxjs/operators';
|
6
|
+
import { TdLayoutComponent } from '../layout.component';
|
7
|
+
import { tdCollapseAnimation } from '@covalent/core/common';
|
8
|
+
import * as i0 from "@angular/core";
|
9
|
+
import * as i1 from "@angular/router";
|
10
|
+
import * as i2 from "@angular/platform-browser";
|
11
|
+
import * as i3 from "@angular/common";
|
12
|
+
import * as i4 from "@angular/material/toolbar";
|
13
|
+
import * as i5 from "@angular/material/button";
|
14
|
+
import * as i6 from "@angular/material/icon";
|
15
|
+
import * as i7 from "../layout.component";
|
16
|
+
export class TdNavigationDrawerMenuDirective {
|
17
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: TdNavigationDrawerMenuDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });
|
18
|
+
static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "16.1.7", type: TdNavigationDrawerMenuDirective, selector: "[tdNavigationDrawerMenu]", ngImport: i0 });
|
19
|
+
}
|
20
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: TdNavigationDrawerMenuDirective, decorators: [{
|
21
|
+
type: Directive,
|
22
|
+
args: [{
|
23
|
+
selector: '[tdNavigationDrawerMenu]',
|
24
|
+
}]
|
25
|
+
}] });
|
26
|
+
export class TdNavigationDrawerToolbarDirective {
|
27
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: TdNavigationDrawerToolbarDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });
|
28
|
+
static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "16.1.7", type: TdNavigationDrawerToolbarDirective, selector: "[tdNavigationDrawerToolbar]", ngImport: i0 });
|
29
|
+
}
|
30
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: TdNavigationDrawerToolbarDirective, decorators: [{
|
31
|
+
type: Directive,
|
32
|
+
args: [{
|
33
|
+
selector: '[tdNavigationDrawerToolbar]',
|
34
|
+
}]
|
35
|
+
}] });
|
36
|
+
export class TdNavigationDrawerComponent {
|
37
|
+
_layout;
|
38
|
+
_router;
|
39
|
+
_sanitize;
|
40
|
+
_menuToggled = false;
|
41
|
+
_backgroundImage;
|
42
|
+
_destroy$ = new Subject();
|
43
|
+
get menuToggled() {
|
44
|
+
return this._menuToggled;
|
45
|
+
}
|
46
|
+
_drawerMenu;
|
47
|
+
_toolbar;
|
48
|
+
/**
|
49
|
+
* Checks if there is a [TdNavigationDrawerMenuDirective] has content.
|
50
|
+
*/
|
51
|
+
get isMenuAvailable() {
|
52
|
+
return this._drawerMenu ? this._drawerMenu.length > 0 : false;
|
53
|
+
}
|
54
|
+
/**
|
55
|
+
* Checks if there is a [TdNavigationDrawerToolbarDirective] has content.
|
56
|
+
*/
|
57
|
+
get isCustomToolbar() {
|
58
|
+
return this._toolbar ? this._toolbar.length > 0 : false;
|
59
|
+
}
|
60
|
+
/**
|
61
|
+
* Checks if there is a background image for the toolbar.
|
62
|
+
*/
|
63
|
+
get isBackgroundAvailable() {
|
64
|
+
return !!this._backgroundImage;
|
65
|
+
}
|
66
|
+
/**
|
67
|
+
* sidenavTitle?: string
|
68
|
+
* Title set in sideNav.
|
69
|
+
*/
|
70
|
+
sidenavTitle;
|
71
|
+
/**
|
72
|
+
* icon?: string
|
73
|
+
*
|
74
|
+
* icon name to be displayed before the title
|
75
|
+
*/
|
76
|
+
icon;
|
77
|
+
/**
|
78
|
+
* logo?: string
|
79
|
+
*
|
80
|
+
* logo icon name to be displayed before the title.
|
81
|
+
* If [icon] is set, then this will not be shown.
|
82
|
+
*/
|
83
|
+
logo;
|
84
|
+
/**
|
85
|
+
* avatar?: string
|
86
|
+
*
|
87
|
+
* avatar url to be displayed before the title
|
88
|
+
* If [icon] or [logo] are set, then this will not be shown.
|
89
|
+
*/
|
90
|
+
avatar;
|
91
|
+
/**
|
92
|
+
* color?: 'accent' | 'primary' | 'warn'
|
93
|
+
*
|
94
|
+
* toolbar color option: primary | accent | warn.
|
95
|
+
* If [color] is not set, default is used.
|
96
|
+
*/
|
97
|
+
color;
|
98
|
+
/**
|
99
|
+
* navigationRoute?: string
|
100
|
+
*
|
101
|
+
* option to set the combined route for the icon, logo, and sidenavTitle.
|
102
|
+
*/
|
103
|
+
navigationRoute;
|
104
|
+
/**
|
105
|
+
* backgroundUrl?: SafeResourceUrl
|
106
|
+
*
|
107
|
+
* image to be displayed as the background of the toolbar.
|
108
|
+
* URL used will be sanitized, but it should be always from a trusted source to avoid XSS.
|
109
|
+
*/
|
110
|
+
set backgroundUrl(backgroundUrl) {
|
111
|
+
if (backgroundUrl) {
|
112
|
+
const sanitizedUrl = this._sanitize.sanitize(SecurityContext.RESOURCE_URL, backgroundUrl);
|
113
|
+
this._backgroundImage = this._sanitize.sanitize(SecurityContext.STYLE, 'url(' + sanitizedUrl + ')');
|
114
|
+
}
|
115
|
+
}
|
116
|
+
get backgroundImage() {
|
117
|
+
return this._backgroundImage;
|
118
|
+
}
|
119
|
+
/**
|
120
|
+
* name?: string
|
121
|
+
*
|
122
|
+
* string to be displayed as part of the navigation drawer sublabel.
|
123
|
+
* if [email] is not set, then [name] will be the toggle menu text.
|
124
|
+
*/
|
125
|
+
name;
|
126
|
+
/**
|
127
|
+
* email?: string
|
128
|
+
*
|
129
|
+
* string to be displayed as part of the navigation drawer sublabel in the [toggle] menu text.
|
130
|
+
* if [email] and [name] are not set, then the toggle menu is not rendered.
|
131
|
+
*/
|
132
|
+
email;
|
133
|
+
/**
|
134
|
+
* Checks if router was injected.
|
135
|
+
*/
|
136
|
+
get routerEnabled() {
|
137
|
+
return !!this._router && !!this.navigationRoute;
|
138
|
+
}
|
139
|
+
constructor(_layout, _router, _sanitize) {
|
140
|
+
this._layout = _layout;
|
141
|
+
this._router = _router;
|
142
|
+
this._sanitize = _sanitize;
|
143
|
+
}
|
144
|
+
ngOnInit() {
|
145
|
+
this._layout.sidenav.openedChange
|
146
|
+
.pipe(takeUntil(this._destroy$))
|
147
|
+
.subscribe((opened) => {
|
148
|
+
if (!opened) {
|
149
|
+
this._menuToggled = false;
|
150
|
+
}
|
151
|
+
});
|
152
|
+
}
|
153
|
+
ngOnDestroy() {
|
154
|
+
this._destroy$.next();
|
155
|
+
}
|
156
|
+
toggleMenu() {
|
157
|
+
if (this.isMenuAvailable) {
|
158
|
+
this._menuToggled = !this._menuToggled;
|
159
|
+
}
|
160
|
+
}
|
161
|
+
handleNavigationClick() {
|
162
|
+
if (this.routerEnabled && this.navigationRoute) {
|
163
|
+
this._router.navigateByUrl(this.navigationRoute);
|
164
|
+
this.close();
|
165
|
+
}
|
166
|
+
}
|
167
|
+
/**
|
168
|
+
* Proxy toggle method to access sidenav from outside (from td-layout template).
|
169
|
+
*/
|
170
|
+
toggle() {
|
171
|
+
return this._layout.toggle();
|
172
|
+
}
|
173
|
+
/**
|
174
|
+
* Proxy open method to access sidenav from outside (from td-layout template).
|
175
|
+
*/
|
176
|
+
open() {
|
177
|
+
return this._layout.open();
|
178
|
+
}
|
179
|
+
/**
|
180
|
+
* Proxy close method to access sidenav from outside (from td-layout template).
|
181
|
+
*/
|
182
|
+
close() {
|
183
|
+
return this._layout.close();
|
184
|
+
}
|
185
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: TdNavigationDrawerComponent, deps: [{ token: forwardRef(() => TdLayoutComponent) }, { token: i1.Router, optional: true }, { token: i2.DomSanitizer }], target: i0.ɵɵFactoryTarget.Component });
|
186
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.7", type: TdNavigationDrawerComponent, selector: "td-navigation-drawer", inputs: { sidenavTitle: "sidenavTitle", icon: "icon", logo: "logo", avatar: "avatar", color: "color", navigationRoute: "navigationRoute", backgroundUrl: "backgroundUrl", name: "name", email: "email" }, queries: [{ propertyName: "_drawerMenu", predicate: TdNavigationDrawerMenuDirective, descendants: true }, { propertyName: "_toolbar", predicate: TdNavigationDrawerToolbarDirective, descendants: true }], ngImport: i0, template: "<mat-toolbar\n [color]=\"color\"\n [style.background-image]=\"backgroundImage\"\n [class.td-toolbar-background]=\"!!isBackgroundAvailable\"\n class=\"td-nagivation-drawer-toolbar\"\n>\n <ng-content select=\"[td-navigation-drawer-toolbar]\"></ng-content>\n <ng-container *ngIf=\"!isCustomToolbar\">\n <div\n *ngIf=\"icon || logo || sidenavTitle || avatar\"\n class=\"td-navigation-drawer-toolbar-content\"\n [class.cursor-pointer]=\"routerEnabled\"\n (click)=\"handleNavigationClick()\"\n >\n <mat-icon *ngIf=\"icon\">{{ icon }}</mat-icon>\n <mat-icon\n *ngIf=\"logo && !icon\"\n class=\"mat-icon-logo\"\n [svgIcon]=\"logo\"\n ></mat-icon>\n <img\n *ngIf=\"avatar && !logo && !icon\"\n class=\"td-nagivation-drawer-toolbar-avatar\"\n [attr.src]=\"avatar\"\n />\n <span *ngIf=\"sidenavTitle\" class=\"td-navigation-drawer-title\">{{\n sidenavTitle\n }}</span>\n </div>\n <div class=\"td-navigation-drawer-name\" *ngIf=\"email && name\">\n {{ name }}\n </div>\n <div\n class=\"td-navigation-drawer-menu-toggle\"\n href\n *ngIf=\"email || name\"\n (click)=\"toggleMenu()\"\n >\n <span class=\"td-navigation-drawer-label\">{{ email || name }}</span>\n <button\n mat-icon-button\n class=\"td-navigation-drawer-menu-button\"\n *ngIf=\"isMenuAvailable\"\n >\n <mat-icon *ngIf=\"!menuToggled\">arrow_drop_down</mat-icon>\n <mat-icon *ngIf=\"menuToggled\">arrow_drop_up</mat-icon>\n </button>\n </div>\n </ng-container>\n</mat-toolbar>\n<div class=\"td-navigation-drawer-content\" [@tdCollapse]=\"menuToggled\">\n <ng-content></ng-content>\n</div>\n<div class=\"td-navigation-drawer-menu-content\" [@tdCollapse]=\"!menuToggled\">\n <ng-content select=\"[td-navigation-drawer-menu]\"></ng-content>\n</div>\n", styles: [":host{width:100%}:host .td-navigation-drawer-content.ng-animating,:host .td-navigation-drawer-menu-content.ng-animating{overflow:hidden}:host mat-toolbar{padding:16px}:host mat-toolbar.td-toolbar-background{background-repeat:no-repeat;background-size:cover}:host mat-toolbar.td-nagivation-drawer-toolbar{flex-direction:column;height:auto!important;display:block!important}:host mat-toolbar .td-navigation-drawer-toolbar-content{flex-direction:row;box-sizing:border-box;display:flex;align-items:center;align-content:center;max-width:100%;justify-content:flex-start}:host mat-toolbar .td-navigation-drawer-toolbar-content .td-nagivation-drawer-toolbar-avatar{border-radius:50%;height:60px;width:60px;margin:0 12px 12px 0}:host mat-toolbar .td-navigation-drawer-toolbar-content .td-navigation-drawer-title{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}:host mat-toolbar .td-navigation-drawer-name{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}:host mat-toolbar .td-navigation-drawer-menu-toggle{flex-direction:row;box-sizing:border-box;display:flex}:host mat-toolbar .td-navigation-drawer-menu-toggle .td-navigation-drawer-label{flex:1;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}:host mat-toolbar .td-navigation-drawer-menu-toggle .td-navigation-drawer-menu-button{width:24px;height:24px;padding:0}:host>div{overflow:hidden}\n"], dependencies: [{ kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i4.MatToolbar, selector: "mat-toolbar", inputs: ["color"], exportAs: ["matToolbar"] }, { kind: "component", type: i5.MatIconButton, selector: "button[mat-icon-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { kind: "component", type: i6.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }], animations: [tdCollapseAnimation] });
|
187
|
+
}
|
188
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: TdNavigationDrawerComponent, decorators: [{
|
189
|
+
type: Component,
|
190
|
+
args: [{ selector: 'td-navigation-drawer', animations: [tdCollapseAnimation], template: "<mat-toolbar\n [color]=\"color\"\n [style.background-image]=\"backgroundImage\"\n [class.td-toolbar-background]=\"!!isBackgroundAvailable\"\n class=\"td-nagivation-drawer-toolbar\"\n>\n <ng-content select=\"[td-navigation-drawer-toolbar]\"></ng-content>\n <ng-container *ngIf=\"!isCustomToolbar\">\n <div\n *ngIf=\"icon || logo || sidenavTitle || avatar\"\n class=\"td-navigation-drawer-toolbar-content\"\n [class.cursor-pointer]=\"routerEnabled\"\n (click)=\"handleNavigationClick()\"\n >\n <mat-icon *ngIf=\"icon\">{{ icon }}</mat-icon>\n <mat-icon\n *ngIf=\"logo && !icon\"\n class=\"mat-icon-logo\"\n [svgIcon]=\"logo\"\n ></mat-icon>\n <img\n *ngIf=\"avatar && !logo && !icon\"\n class=\"td-nagivation-drawer-toolbar-avatar\"\n [attr.src]=\"avatar\"\n />\n <span *ngIf=\"sidenavTitle\" class=\"td-navigation-drawer-title\">{{\n sidenavTitle\n }}</span>\n </div>\n <div class=\"td-navigation-drawer-name\" *ngIf=\"email && name\">\n {{ name }}\n </div>\n <div\n class=\"td-navigation-drawer-menu-toggle\"\n href\n *ngIf=\"email || name\"\n (click)=\"toggleMenu()\"\n >\n <span class=\"td-navigation-drawer-label\">{{ email || name }}</span>\n <button\n mat-icon-button\n class=\"td-navigation-drawer-menu-button\"\n *ngIf=\"isMenuAvailable\"\n >\n <mat-icon *ngIf=\"!menuToggled\">arrow_drop_down</mat-icon>\n <mat-icon *ngIf=\"menuToggled\">arrow_drop_up</mat-icon>\n </button>\n </div>\n </ng-container>\n</mat-toolbar>\n<div class=\"td-navigation-drawer-content\" [@tdCollapse]=\"menuToggled\">\n <ng-content></ng-content>\n</div>\n<div class=\"td-navigation-drawer-menu-content\" [@tdCollapse]=\"!menuToggled\">\n <ng-content select=\"[td-navigation-drawer-menu]\"></ng-content>\n</div>\n", styles: [":host{width:100%}:host .td-navigation-drawer-content.ng-animating,:host .td-navigation-drawer-menu-content.ng-animating{overflow:hidden}:host mat-toolbar{padding:16px}:host mat-toolbar.td-toolbar-background{background-repeat:no-repeat;background-size:cover}:host mat-toolbar.td-nagivation-drawer-toolbar{flex-direction:column;height:auto!important;display:block!important}:host mat-toolbar .td-navigation-drawer-toolbar-content{flex-direction:row;box-sizing:border-box;display:flex;align-items:center;align-content:center;max-width:100%;justify-content:flex-start}:host mat-toolbar .td-navigation-drawer-toolbar-content .td-nagivation-drawer-toolbar-avatar{border-radius:50%;height:60px;width:60px;margin:0 12px 12px 0}:host mat-toolbar .td-navigation-drawer-toolbar-content .td-navigation-drawer-title{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}:host mat-toolbar .td-navigation-drawer-name{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}:host mat-toolbar .td-navigation-drawer-menu-toggle{flex-direction:row;box-sizing:border-box;display:flex}:host mat-toolbar .td-navigation-drawer-menu-toggle .td-navigation-drawer-label{flex:1;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}:host mat-toolbar .td-navigation-drawer-menu-toggle .td-navigation-drawer-menu-button{width:24px;height:24px;padding:0}:host>div{overflow:hidden}\n"] }]
|
191
|
+
}], ctorParameters: function () { return [{ type: i7.TdLayoutComponent, decorators: [{
|
192
|
+
type: Inject,
|
193
|
+
args: [forwardRef(() => TdLayoutComponent)]
|
194
|
+
}] }, { type: i1.Router, decorators: [{
|
195
|
+
type: Optional
|
196
|
+
}] }, { type: i2.DomSanitizer }]; }, propDecorators: { _drawerMenu: [{
|
197
|
+
type: ContentChildren,
|
198
|
+
args: [TdNavigationDrawerMenuDirective, { descendants: true }]
|
199
|
+
}], _toolbar: [{
|
200
|
+
type: ContentChildren,
|
201
|
+
args: [TdNavigationDrawerToolbarDirective, { descendants: true }]
|
202
|
+
}], sidenavTitle: [{
|
203
|
+
type: Input
|
204
|
+
}], icon: [{
|
205
|
+
type: Input
|
206
|
+
}], logo: [{
|
207
|
+
type: Input
|
208
|
+
}], avatar: [{
|
209
|
+
type: Input
|
210
|
+
}], color: [{
|
211
|
+
type: Input
|
212
|
+
}], navigationRoute: [{
|
213
|
+
type: Input
|
214
|
+
}], backgroundUrl: [{
|
215
|
+
type: Input
|
216
|
+
}], name: [{
|
217
|
+
type: Input
|
218
|
+
}], email: [{
|
219
|
+
type: Input
|
220
|
+
}] } });
|
221
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmF2aWdhdGlvbi1kcmF3ZXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9hbmd1bGFyL2xheW91dC9zcmMvbmF2aWdhdGlvbi1kcmF3ZXIvbmF2aWdhdGlvbi1kcmF3ZXIuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9hbmd1bGFyL2xheW91dC9zcmMvbmF2aWdhdGlvbi1kcmF3ZXIvbmF2aWdhdGlvbi1kcmF3ZXIuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLFNBQVMsRUFDVCxTQUFTLEVBQ1QsS0FBSyxFQUNMLGVBQWUsRUFHZixVQUFVLEVBQ1YsTUFBTSxFQUNOLFNBQVMsRUFDVCxlQUFlLEVBQ2YsUUFBUSxHQUNULE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUN6QyxPQUFPLEVBQWEsWUFBWSxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFHcEUsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUMvQixPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFM0MsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFFeEQsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7Ozs7Ozs7OztBQUs1RCxNQUFNLE9BQU8sK0JBQStCO3VHQUEvQiwrQkFBK0I7MkZBQS9CLCtCQUErQjs7MkZBQS9CLCtCQUErQjtrQkFIM0MsU0FBUzttQkFBQztvQkFDVCxRQUFRLEVBQUUsMEJBQTBCO2lCQUNyQzs7QUFNRCxNQUFNLE9BQU8sa0NBQWtDO3VHQUFsQyxrQ0FBa0M7MkZBQWxDLGtDQUFrQzs7MkZBQWxDLGtDQUFrQztrQkFIOUMsU0FBUzttQkFBQztvQkFDVCxRQUFRLEVBQUUsNkJBQTZC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O3NCQUFiLEtBQUs7Z0JBT0csZUFBZTtzQkFBdkIsS0FBSztnQkFXRixhQUFhO3NCQUhoQixLQUFLO2dCQXlCRyxJQUFJO3NCQUFaLEtBQUs7Z0JBUUcsS0FBSztzQkFBYixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQ29tcG9uZW50LFxuICBEaXJlY3RpdmUsXG4gIElucHV0LFxuICBDb250ZW50Q2hpbGRyZW4sXG4gIE9uSW5pdCxcbiAgT25EZXN0cm95LFxuICBmb3J3YXJkUmVmLFxuICBJbmplY3QsXG4gIFF1ZXJ5TGlzdCxcbiAgU2VjdXJpdHlDb250ZXh0LFxuICBPcHRpb25hbCxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBSb3V0ZXIgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuaW1wb3J0IHsgU2FmZVN0eWxlLCBEb21TYW5pdGl6ZXIgfSBmcm9tICdAYW5ndWxhci9wbGF0Zm9ybS1icm93c2VyJztcbmltcG9ydCB7IE1hdERyYXdlclRvZ2dsZVJlc3VsdCB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3NpZGVuYXYnO1xuXG5pbXBvcnQgeyBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyB0YWtlVW50aWwgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5cbmltcG9ydCB7IFRkTGF5b3V0Q29tcG9uZW50IH0gZnJvbSAnLi4vbGF5b3V0LmNvbXBvbmVudCc7XG5cbmltcG9ydCB7IHRkQ29sbGFwc2VBbmltYXRpb24gfSBmcm9tICdAY292YWxlbnQvY29yZS9jb21tb24nO1xuXG5ARGlyZWN0aXZlKHtcbiAgc2VsZWN0b3I6ICdbdGROYXZpZ2F0aW9uRHJhd2VyTWVudV0nLFxufSlcbmV4cG9ydCBjbGFzcyBUZE5hdmlnYXRpb25EcmF3ZXJNZW51RGlyZWN0aXZlIHt9XG5cbkBEaXJlY3RpdmUoe1xuICBzZWxlY3RvcjogJ1t0ZE5hdmlnYXRpb25EcmF3ZXJUb29sYmFyXScsXG59KVxuZXhwb3J0IGNsYXNzIFRkTmF2aWdhdGlvbkRyYXdlclRvb2xiYXJEaXJlY3RpdmUge31cblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAndGQtbmF2aWdhdGlvbi1kcmF3ZXInLFxuICBzdHlsZVVybHM6IFsnLi9uYXZpZ2F0aW9uLWRyYXdlci5jb21wb25lbnQuc2NzcyddLFxuICB0ZW1wbGF0ZVVybDogJy4vbmF2aWdhdGlvbi1kcmF3ZXIuY29tcG9uZW50Lmh0bWwnLFxuICBhbmltYXRpb25zOiBbdGRDb2xsYXBzZUFuaW1hdGlvbl0sXG59KVxuZXhwb3J0IGNsYXNzIFRkTmF2aWdhdGlvbkRyYXdlckNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95IHtcbiAgcHJpdmF0ZSBfbWVudVRvZ2dsZWQgPSBmYWxzZTtcbiAgcHJpdmF0ZSBfYmFja2dyb3VuZEltYWdlITogU2FmZVN0eWxlIHwgbnVsbDtcbiAgcHJpdmF0ZSBfZGVzdHJveSQgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xuXG4gIGdldCBtZW51VG9nZ2xlZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5fbWVudVRvZ2dsZWQ7XG4gIH1cblxuICBAQ29udGVudENoaWxkcmVuKFRkTmF2aWdhdGlvbkRyYXdlck1lbnVEaXJlY3RpdmUsIHsgZGVzY2VuZGFudHM6IHRydWUgfSlcbiAgX2RyYXdlck1lbnUhOiBRdWVyeUxpc3Q8VGROYXZpZ2F0aW9uRHJhd2VyTWVudURpcmVjdGl2ZT47XG5cbiAgQENvbnRlbnRDaGlsZHJlbihUZE5hdmlnYXRpb25EcmF3ZXJUb29sYmFyRGlyZWN0aXZlLCB7IGRlc2NlbmRhbnRzOiB0cnVlIH0pXG4gIF90b29sYmFyITogUXVlcnlMaXN0PFRkTmF2aWdhdGlvbkRyYXdlclRvb2xiYXJEaXJlY3RpdmU+O1xuXG4gIC8qKlxuICAgKiBDaGVja3MgaWYgdGhlcmUgaXMgYSBbVGROYXZpZ2F0aW9uRHJhd2VyTWVudURpcmVjdGl2ZV0gaGFzIGNvbnRlbnQuXG4gICAqL1xuICBnZXQgaXNNZW51QXZhaWxhYmxlKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLl9kcmF3ZXJNZW51ID8gdGhpcy5fZHJhd2VyTWVudS5sZW5ndGggPiAwIDogZmFsc2U7XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2tzIGlmIHRoZXJlIGlzIGEgW1RkTmF2aWdhdGlvbkRyYXdlclRvb2xiYXJEaXJlY3RpdmVdIGhhcyBjb250ZW50LlxuICAgKi9cbiAgZ2V0IGlzQ3VzdG9tVG9vbGJhcigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5fdG9vbGJhciA/IHRoaXMuX3Rvb2xiYXIubGVuZ3RoID4gMCA6IGZhbHNlO1xuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrcyBpZiB0aGVyZSBpcyBhIGJhY2tncm91bmQgaW1hZ2UgZm9yIHRoZSB0b29sYmFyLlxuICAgKi9cbiAgZ2V0IGlzQmFja2dyb3VuZEF2YWlsYWJsZSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gISF0aGlzLl9iYWNrZ3JvdW5kSW1hZ2U7XG4gIH1cblxuICAvKipcbiAgICogc2lkZW5hdlRpdGxlPzogc3RyaW5nXG4gICAqIFRpdGxlIHNldCBpbiBzaWRlTmF2LlxuICAgKi9cbiAgQElucHV0KCkgc2lkZW5hdlRpdGxlPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBpY29uPzogc3RyaW5nXG4gICAqXG4gICAqIGljb24gbmFtZSB0byBiZSBkaXNwbGF5ZWQgYmVmb3JlIHRoZSB0aXRsZVxuICAgKi9cbiAgQElucHV0KCkgaWNvbj86IHN0cmluZztcblxuICAvKipcbiAgICogbG9nbz86IHN0cmluZ1xuICAgKlxuICAgKiBsb2dvIGljb24gbmFtZSB0byBiZSBkaXNwbGF5ZWQgYmVmb3JlIHRoZSB0aXRsZS5cbiAgICogSWYgW2ljb25dIGlzIHNldCwgdGhlbiB0aGlzIHdpbGwgbm90IGJlIHNob3duLlxuICAgKi9cbiAgQElucHV0KCkgbG9nbz86IHN0cmluZztcblxuICAvKipcbiAgICogYXZhdGFyPzogc3RyaW5nXG4gICAqXG4gICAqIGF2YXRhciB1cmwgdG8gYmUgZGlzcGxheWVkIGJlZm9yZSB0aGUgdGl0bGVcbiAgICogSWYgW2ljb25dIG9yIFtsb2dvXSBhcmUgc2V0LCB0aGVuIHRoaXMgd2lsbCBub3QgYmUgc2hvd24uXG4gICAqL1xuICBASW5wdXQoKSBhdmF0YXI/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIGNvbG9yPzogJ2FjY2VudCcgfCAncHJpbWFyeScgfCAnd2FybidcbiAgICpcbiAgICogdG9vbGJhciBjb2xvciBvcHRpb246IHByaW1hcnkgfCBhY2NlbnQgfCB3YXJuLlxuICAgKiBJZiBbY29sb3JdIGlzIG5vdCBzZXQsIGRlZmF1bHQgaXMgdXNlZC5cbiAgICovXG4gIEBJbnB1dCgpIGNvbG9yPzogJ2FjY2VudCcgfCAncHJpbWFyeScgfCAnd2Fybic7XG5cbiAgLyoqXG4gICAqIG5hdmlnYXRpb25Sb3V0ZT86IHN0cmluZ1xuICAgKlxuICAgKiBvcHRpb24gdG8gc2V0IHRoZSBjb21iaW5lZCByb3V0ZSBmb3IgdGhlIGljb24sIGxvZ28sIGFuZCBzaWRlbmF2VGl0bGUuXG4gICAqL1xuICBASW5wdXQoKSBuYXZpZ2F0aW9uUm91dGU/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIGJhY2tncm91bmRVcmw/OiBTYWZlUmVzb3VyY2VVcmxcbiAgICpcbiAgICogaW1hZ2UgdG8gYmUgZGlzcGxheWVkIGFzIHRoZSBiYWNrZ3JvdW5kIG9mIHRoZSB0b29sYmFyLlxuICAgKiBVUkwgdXNlZCB3aWxsIGJlIHNhbml0aXplZCwgYnV0IGl0IHNob3VsZCBiZSBhbHdheXMgZnJvbSBhIHRydXN0ZWQgc291cmNlIHRvIGF2b2lkIFhTUy5cbiAgICovXG4gIEBJbnB1dCgpXG4gIC8vIFRPRE8gQW5ndWxhciBjb21wbGFpbnMgd2l0aCB3YXJuaW5ncyBpZiB0aGlzIGlzIHR5cGUgW1NhZmVSZXNvdXJjZVVybF0uLiBzbyB3ZSB3aWxsIG1ha2UgaXQgPGFueT4gdW50aWwgaXRzIGZpeGVkLlxuICAvLyBodHRwczovL2dpdGh1Yi5jb20vd2VicGFjay93ZWJwYWNrL2lzc3Vlcy8yOTc3XG4gIHNldCBiYWNrZ3JvdW5kVXJsKGJhY2tncm91bmRVcmw6IGFueSkge1xuICAgIGlmIChiYWNrZ3JvdW5kVXJsKSB7XG4gICAgICBjb25zdCBzYW5pdGl6ZWRVcmwgPSB0aGlzLl9zYW5pdGl6ZS5zYW5pdGl6ZShcbiAgICAgICAgU2VjdXJpdHlDb250ZXh0LlJFU09VUkNFX1VSTCxcbiAgICAgICAgYmFja2dyb3VuZFVybFxuICAgICAgKTtcbiAgICAgIHRoaXMuX2JhY2tncm91bmRJbWFnZSA9IHRoaXMuX3Nhbml0aXplLnNhbml0aXplKFxuICAgICAgICBTZWN1cml0eUNvbnRleHQuU1RZTEUsXG4gICAgICAgICd1cmwoJyArIHNhbml0aXplZFVybCArICcpJ1xuICAgICAgKTtcbiAgICB9XG4gIH1cbiAgZ2V0IGJhY2tncm91bmRJbWFnZSgpOiBTYWZlU3R5bGUgfCBudWxsIHtcbiAgICByZXR1cm4gdGhpcy5fYmFja2dyb3VuZEltYWdlO1xuICB9XG5cbiAgLyoqXG4gICAqIG5hbWU/OiBzdHJpbmdcbiAgICpcbiAgICogc3RyaW5nIHRvIGJlIGRpc3BsYXllZCBhcyBwYXJ0IG9mIHRoZSBuYXZpZ2F0aW9uIGRyYXdlciBzdWJsYWJlbC5cbiAgICogaWYgW2VtYWlsXSBpcyBub3Qgc2V0LCB0aGVuIFtuYW1lXSB3aWxsIGJlIHRoZSB0b2dnbGUgbWVudSB0ZXh0LlxuICAgKi9cbiAgQElucHV0KCkgbmFtZT86IHN0cmluZztcblxuICAvKipcbiAgICogZW1haWw/OiBzdHJpbmdcbiAgICpcbiAgICogc3RyaW5nIHRvIGJlIGRpc3BsYXllZCBhcyBwYXJ0IG9mIHRoZSBuYXZpZ2F0aW9uIGRyYXdlciBzdWJsYWJlbCBpbiB0aGUgW3RvZ2dsZV0gbWVudSB0ZXh0LlxuICAgKiBpZiBbZW1haWxdIGFuZCBbbmFtZV0gYXJlIG5vdCBzZXQsIHRoZW4gdGhlIHRvZ2dsZSBtZW51IGlzIG5vdCByZW5kZXJlZC5cbiAgICovXG4gIEBJbnB1dCgpIGVtYWlsPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBDaGVja3MgaWYgcm91dGVyIHdhcyBpbmplY3RlZC5cbiAgICovXG4gIGdldCByb3V0ZXJFbmFibGVkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAhIXRoaXMuX3JvdXRlciAmJiAhIXRoaXMubmF2aWdhdGlvblJvdXRlO1xuICB9XG5cbiAgY29uc3RydWN0b3IoXG4gICAgQEluamVjdChmb3J3YXJkUmVmKCgpID0+IFRkTGF5b3V0Q29tcG9uZW50KSlcbiAgICBwcml2YXRlIF9sYXlvdXQ6IFRkTGF5b3V0Q29tcG9uZW50LFxuICAgIEBPcHRpb25hbCgpIHByaXZhdGUgX3JvdXRlcjogUm91dGVyLFxuICAgIHByaXZhdGUgX3Nhbml0aXplOiBEb21TYW5pdGl6ZXJcbiAgKSB7fVxuXG4gIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIHRoaXMuX2xheW91dC5zaWRlbmF2Lm9wZW5lZENoYW5nZVxuICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMuX2Rlc3Ryb3kkKSlcbiAgICAgIC5zdWJzY3JpYmUoKG9wZW5lZDogYm9vbGVhbikgPT4ge1xuICAgICAgICBpZiAoIW9wZW5lZCkge1xuICAgICAgICAgIHRoaXMuX21lbnVUb2dnbGVkID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICB9XG5cbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgdGhpcy5fZGVzdHJveSQubmV4dCgpO1xuICB9XG5cbiAgdG9nZ2xlTWVudSgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5pc01lbnVBdmFpbGFibGUpIHtcbiAgICAgIHRoaXMuX21lbnVUb2dnbGVkID0gIXRoaXMuX21lbnVUb2dnbGVkO1xuICAgIH1cbiAgfVxuXG4gIGhhbmRsZU5hdmlnYXRpb25DbGljaygpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5yb3V0ZXJFbmFibGVkICYmIHRoaXMubmF2aWdhdGlvblJvdXRlKSB7XG4gICAgICB0aGlzLl9yb3V0ZXIubmF2aWdhdGVCeVVybCh0aGlzLm5hdmlnYXRpb25Sb3V0ZSk7XG4gICAgICB0aGlzLmNsb3NlKCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFByb3h5IHRvZ2dsZSBtZXRob2QgdG8gYWNjZXNzIHNpZGVuYXYgZnJvbSBvdXRzaWRlIChmcm9tIHRkLWxheW91dCB0ZW1wbGF0ZSkuXG4gICAqL1xuICBwdWJsaWMgdG9nZ2xlKCk6IFByb21pc2U8TWF0RHJhd2VyVG9nZ2xlUmVzdWx0PiB7XG4gICAgcmV0dXJuIHRoaXMuX2xheW91dC50b2dnbGUoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBQcm94eSBvcGVuIG1ldGhvZCB0byBhY2Nlc3Mgc2lkZW5hdiBmcm9tIG91dHNpZGUgKGZyb20gdGQtbGF5b3V0IHRlbXBsYXRlKS5cbiAgICovXG4gIHB1YmxpYyBvcGVuKCk6IFByb21pc2U8TWF0RHJhd2VyVG9nZ2xlUmVzdWx0PiB7XG4gICAgcmV0dXJuIHRoaXMuX2xheW91dC5vcGVuKCk7XG4gIH1cblxuICAvKipcbiAgICogUHJveHkgY2xvc2UgbWV0aG9kIHRvIGFjY2VzcyBzaWRlbmF2IGZyb20gb3V0c2lkZSAoZnJvbSB0ZC1sYXlvdXQgdGVtcGxhdGUpLlxuICAgKi9cbiAgcHVibGljIGNsb3NlKCk6IFByb21pc2U8TWF0RHJhd2VyVG9nZ2xlUmVzdWx0PiB7XG4gICAgcmV0dXJuIHRoaXMuX2xheW91dC5jbG9zZSgpO1xuICB9XG59XG4iLCI8bWF0LXRvb2xiYXJcbiAgW2NvbG9yXT1cImNvbG9yXCJcbiAgW3N0eWxlLmJhY2tncm91bmQtaW1hZ2VdPVwiYmFja2dyb3VuZEltYWdlXCJcbiAgW2NsYXNzLnRkLXRvb2xiYXItYmFja2dyb3VuZF09XCIhIWlzQmFja2dyb3VuZEF2YWlsYWJsZVwiXG4gIGNsYXNzPVwidGQtbmFnaXZhdGlvbi1kcmF3ZXItdG9vbGJhclwiXG4+XG4gIDxuZy1jb250ZW50IHNlbGVjdD1cIlt0ZC1uYXZpZ2F0aW9uLWRyYXdlci10b29sYmFyXVwiPjwvbmctY29udGVudD5cbiAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFpc0N1c3RvbVRvb2xiYXJcIj5cbiAgICA8ZGl2XG4gICAgICAqbmdJZj1cImljb24gfHwgbG9nbyB8fCBzaWRlbmF2VGl0bGUgfHwgYXZhdGFyXCJcbiAgICAgIGNsYXNzPVwidGQtbmF2aWdhdGlvbi1kcmF3ZXItdG9vbGJhci1jb250ZW50XCJcbiAgICAgIFtjbGFzcy5jdXJzb3ItcG9pbnRlcl09XCJyb3V0ZXJFbmFibGVkXCJcbiAgICAgIChjbGljayk9XCJoYW5kbGVOYXZpZ2F0aW9uQ2xpY2soKVwiXG4gICAgPlxuICAgICAgPG1hdC1pY29uICpuZ0lmPVwiaWNvblwiPnt7IGljb24gfX08L21hdC1pY29uPlxuICAgICAgPG1hdC1pY29uXG4gICAgICAgICpuZ0lmPVwibG9nbyAmJiAhaWNvblwiXG4gICAgICAgIGNsYXNzPVwibWF0LWljb24tbG9nb1wiXG4gICAgICAgIFtzdmdJY29uXT1cImxvZ29cIlxuICAgICAgPjwvbWF0LWljb24+XG4gICAgICA8aW1nXG4gICAgICAgICpuZ0lmPVwiYXZhdGFyICYmICFsb2dvICYmICFpY29uXCJcbiAgICAgICAgY2xhc3M9XCJ0ZC1uYWdpdmF0aW9uLWRyYXdlci10b29sYmFyLWF2YXRhclwiXG4gICAgICAgIFthdHRyLnNyY109XCJhdmF0YXJcIlxuICAgICAgLz5cbiAgICAgIDxzcGFuICpuZ0lmPVwic2lkZW5hdlRpdGxlXCIgY2xhc3M9XCJ0ZC1uYXZpZ2F0aW9uLWRyYXdlci10aXRsZVwiPnt7XG4gICAgICAgIHNpZGVuYXZUaXRsZVxuICAgICAgfX08L3NwYW4+XG4gICAgPC9kaXY+XG4gICAgPGRpdiBjbGFzcz1cInRkLW5hdmlnYXRpb24tZHJhd2VyLW5hbWVcIiAqbmdJZj1cImVtYWlsICYmIG5hbWVcIj5cbiAgICAgIHt7IG5hbWUgfX1cbiAgICA8L2Rpdj5cbiAgICA8ZGl2XG4gICAgICBjbGFzcz1cInRkLW5hdmlnYXRpb24tZHJhd2VyLW1lbnUtdG9nZ2xlXCJcbiAgICAgIGhyZWZcbiAgICAgICpuZ0lmPVwiZW1haWwgfHwgbmFtZVwiXG4gICAgICAoY2xpY2spPVwidG9nZ2xlTWVudSgpXCJcbiAgICA+XG4gICAgICA8c3BhbiBjbGFzcz1cInRkLW5hdmlnYXRpb24tZHJhd2VyLWxhYmVsXCI+e3sgZW1haWwgfHwgbmFtZSB9fTwvc3Bhbj5cbiAgICAgIDxidXR0b25cbiAgICAgICAgbWF0LWljb24tYnV0dG9uXG4gICAgICAgIGNsYXNzPVwidGQtbmF2aWdhdGlvbi1kcmF3ZXItbWVudS1idXR0b25cIlxuICAgICAgICAqbmdJZj1cImlzTWVudUF2YWlsYWJsZVwiXG4gICAgICA+XG4gICAgICAgIDxtYXQtaWNvbiAqbmdJZj1cIiFtZW51VG9nZ2xlZFwiPmFycm93X2Ryb3BfZG93bjwvbWF0LWljb24+XG4gICAgICAgIDxtYXQtaWNvbiAqbmdJZj1cIm1lbnVUb2dnbGVkXCI+YXJyb3dfZHJvcF91cDwvbWF0LWljb24+XG4gICAgICA8L2J1dHRvbj5cbiAgICA8L2Rpdj5cbiAgPC9uZy1jb250YWluZXI+XG48L21hdC10b29sYmFyPlxuPGRpdiBjbGFzcz1cInRkLW5hdmlnYXRpb24tZHJhd2VyLWNvbnRlbnRcIiBbQHRkQ29sbGFwc2VdPVwibWVudVRvZ2dsZWRcIj5cbiAgPG5nLWNvbnRlbnQ+PC9uZy1jb250ZW50PlxuPC9kaXY+XG48ZGl2IGNsYXNzPVwidGQtbmF2aWdhdGlvbi1kcmF3ZXItbWVudS1jb250ZW50XCIgW0B0ZENvbGxhcHNlXT1cIiFtZW51VG9nZ2xlZFwiPlxuICA8bmctY29udGVudCBzZWxlY3Q9XCJbdGQtbmF2aWdhdGlvbi1kcmF3ZXItbWVudV1cIj48L25nLWNvbnRlbnQ+XG48L2Rpdj5cbiJdfQ==
|
@@ -0,0 +1,133 @@
|
|
1
|
+
import { Directive, Input } from '@angular/core';
|
2
|
+
import { ViewContainerRef, TemplateRef } from '@angular/core';
|
3
|
+
import { LoadingType, LoadingMode, LoadingStrategy, } from '../loading.component';
|
4
|
+
import { TdLoadingService } from '../services/loading.service';
|
5
|
+
import * as i0 from "@angular/core";
|
6
|
+
import * as i1 from "../services/loading.service";
|
7
|
+
/**
|
8
|
+
* Context class for variable reference
|
9
|
+
*/
|
10
|
+
export class TdLoadingContext {
|
11
|
+
$implicit = undefined;
|
12
|
+
tdLoading = undefined;
|
13
|
+
}
|
14
|
+
// Constant for generation of the id for the next component
|
15
|
+
let TD_LOADING_NEXT_ID = 0;
|
16
|
+
export class TdLoadingDirective {
|
17
|
+
_viewContainerRef;
|
18
|
+
_templateRef;
|
19
|
+
_loadingService;
|
20
|
+
_context = new TdLoadingContext();
|
21
|
+
_loadingRef;
|
22
|
+
/**
|
23
|
+
* tdLoading: string
|
24
|
+
* Name reference of the loading mask, used to register/resolve requests to the mask.
|
25
|
+
*/
|
26
|
+
name;
|
27
|
+
/**
|
28
|
+
* tdLoadingUntil?: any
|
29
|
+
* If its null, undefined or false it will be used to register requests to the mask.
|
30
|
+
* Else if its any value that can be resolved as true, it will resolve the mask.
|
31
|
+
* [name] is optional when using [until], but can still be used to register/resolve it manually.
|
32
|
+
*/
|
33
|
+
set until(until) {
|
34
|
+
if (!this.name) {
|
35
|
+
this.name = 'td-loading-until-' + TD_LOADING_NEXT_ID++;
|
36
|
+
}
|
37
|
+
this._context.$implicit = this._context.tdLoading = until;
|
38
|
+
if (!until) {
|
39
|
+
this._loadingService.register(this.name);
|
40
|
+
}
|
41
|
+
else {
|
42
|
+
this._loadingService.resolveAll(this.name);
|
43
|
+
}
|
44
|
+
}
|
45
|
+
/**
|
46
|
+
* tdLoadingType?: LoadingType or ['linear' | 'circular']
|
47
|
+
* Sets the type of loading mask depending on value.
|
48
|
+
* Defaults to [LoadingType.Circular | 'circular'].
|
49
|
+
*/
|
50
|
+
type = LoadingType.Circular;
|
51
|
+
/**
|
52
|
+
* tdLoadingMode?: LoadingMode or ['determinate' | 'indeterminate']
|
53
|
+
* Sets the mode of loading mask depending on value.
|
54
|
+
* Defaults to [LoadingMode.Indeterminate | 'indeterminate'].
|
55
|
+
*/
|
56
|
+
mode = LoadingMode.Indeterminate;
|
57
|
+
/**
|
58
|
+
* tdLoadingStrategy?: LoadingStrategy or ['replace' | 'overlay']
|
59
|
+
* Sets the strategy of loading mask depending on value.
|
60
|
+
* Defaults to [LoadingMode.Replace | 'replace'].
|
61
|
+
*/
|
62
|
+
strategy = LoadingStrategy.Replace;
|
63
|
+
/**
|
64
|
+
* tdLoadingColor?: "primary" | "accent" | "warn"
|
65
|
+
* Sets the theme color of the loading component. Defaults to "primary"
|
66
|
+
*/
|
67
|
+
color = 'primary';
|
68
|
+
constructor(_viewContainerRef, _templateRef, _loadingService) {
|
69
|
+
this._viewContainerRef = _viewContainerRef;
|
70
|
+
this._templateRef = _templateRef;
|
71
|
+
this._loadingService = _loadingService;
|
72
|
+
}
|
73
|
+
/**
|
74
|
+
* Registers component in the DOM, so it will be available when calling resolve/register.
|
75
|
+
*/
|
76
|
+
ngOnInit() {
|
77
|
+
this._registerComponent();
|
78
|
+
}
|
79
|
+
/**
|
80
|
+
* Remove component when directive is destroyed.
|
81
|
+
*/
|
82
|
+
ngOnDestroy() {
|
83
|
+
this._loadingService.removeComponent(this.name);
|
84
|
+
this._loadingRef = undefined;
|
85
|
+
}
|
86
|
+
/**
|
87
|
+
* Creates [TdLoadingComponent] and attaches it to this directive's [ViewContainerRef].
|
88
|
+
* Passes this directive's [TemplateRef] to modify DOM depending on loading `strategy`.
|
89
|
+
*/
|
90
|
+
_registerComponent() {
|
91
|
+
if (!this.name) {
|
92
|
+
throw new Error('Name is needed to register loading directive');
|
93
|
+
}
|
94
|
+
// Check if `TdLoadingComponent` has been created before trying to add one again.
|
95
|
+
// There is a weird edge case when using `[routerLinkActive]` that calls the `ngOnInit` twice in a row
|
96
|
+
if (!this._loadingRef) {
|
97
|
+
this._loadingRef = this._loadingService.createComponent({
|
98
|
+
name: this.name,
|
99
|
+
type: this.type,
|
100
|
+
mode: this.mode,
|
101
|
+
color: this.color,
|
102
|
+
strategy: this.strategy,
|
103
|
+
}, this._viewContainerRef, this._templateRef, this._context);
|
104
|
+
}
|
105
|
+
}
|
106
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: TdLoadingDirective, deps: [{ token: i0.ViewContainerRef }, { token: i0.TemplateRef }, { token: i1.TdLoadingService }], target: i0.ɵɵFactoryTarget.Directive });
|
107
|
+
static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "16.1.7", type: TdLoadingDirective, selector: "[tdLoading]", inputs: { name: ["tdLoading", "name"], until: ["tdLoadingUntil", "until"], type: ["tdLoadingType", "type"], mode: ["tdLoadingMode", "mode"], strategy: ["tdLoadingStrategy", "strategy"], color: ["tdLoadingColor", "color"] }, ngImport: i0 });
|
108
|
+
}
|
109
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: TdLoadingDirective, decorators: [{
|
110
|
+
type: Directive,
|
111
|
+
args: [{
|
112
|
+
selector: '[tdLoading]',
|
113
|
+
}]
|
114
|
+
}], ctorParameters: function () { return [{ type: i0.ViewContainerRef }, { type: i0.TemplateRef }, { type: i1.TdLoadingService }]; }, propDecorators: { name: [{
|
115
|
+
type: Input,
|
116
|
+
args: ['tdLoading']
|
117
|
+
}], until: [{
|
118
|
+
type: Input,
|
119
|
+
args: ['tdLoadingUntil']
|
120
|
+
}], type: [{
|
121
|
+
type: Input,
|
122
|
+
args: ['tdLoadingType']
|
123
|
+
}], mode: [{
|
124
|
+
type: Input,
|
125
|
+
args: ['tdLoadingMode']
|
126
|
+
}], strategy: [{
|
127
|
+
type: Input,
|
128
|
+
args: ['tdLoadingStrategy']
|
129
|
+
}], color: [{
|
130
|
+
type: Input,
|
131
|
+
args: ['tdLoadingColor']
|
132
|
+
}] } });
|
133
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9hZGluZy5kaXJlY3RpdmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzL2FuZ3VsYXIvbG9hZGluZy9zcmMvZGlyZWN0aXZlcy9sb2FkaW5nLmRpcmVjdGl2ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBcUIsTUFBTSxlQUFlLENBQUM7QUFDcEUsT0FBTyxFQUFFLGdCQUFnQixFQUFFLFdBQVcsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUU5RCxPQUFPLEVBQ0wsV0FBVyxFQUNYLFdBQVcsRUFDWCxlQUFlLEdBQ2hCLE1BQU0sc0JBQXNCLENBQUM7QUFDOUIsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sNkJBQTZCLENBQUM7OztBQUcvRDs7R0FFRztBQUNILE1BQU0sT0FBTyxnQkFBZ0I7SUFDcEIsU0FBUyxHQUFRLFNBQVMsQ0FBQztJQUMzQixTQUFTLEdBQVEsU0FBUyxDQUFDO0NBQ25DO0FBRUQsMkRBQTJEO0FBQzNELElBQUksa0JBQWtCLEdBQUcsQ0FBQyxDQUFDO0FBSzNCLE1BQU0sT0FBTyxrQkFBa0I7SUE2RG5CO0lBQ0E7SUFDQTtJQTlERixRQUFRLEdBQXFCLElBQUksZ0JBQWdCLEVBQUUsQ0FBQztJQUNwRCxXQUFXLENBQWU7SUFFbEM7OztPQUdHO0lBRUgsSUFBSSxDQUFVO0lBRWQ7Ozs7O09BS0c7SUFDSCxJQUNJLEtBQUssQ0FBQyxLQUFVO1FBQ2xCLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFO1lBQ2QsSUFBSSxDQUFDLElBQUksR0FBRyxtQkFBbUIsR0FBRyxrQkFBa0IsRUFBRSxDQUFDO1NBQ3hEO1FBQ0QsSUFBSSxDQUFDLFFBQVEsQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxTQUFTLEdBQUcsS0FBSyxDQUFDO1FBQzFELElBQUksQ0FBQyxLQUFLLEVBQUU7WUFDVixJQUFJLENBQUMsZUFBZSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7U0FDMUM7YUFBTTtZQUNMLElBQUksQ0FBQyxlQUFlLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztTQUM1QztJQUNILENBQUM7SUFFRDs7OztPQUlHO0lBRUgsSUFBSSxHQUFnQixXQUFXLENBQUMsUUFBUSxDQUFDO0lBRXpDOzs7O09BSUc7SUFDcUIsSUFBSSxHQUFnQixXQUFXLENBQUMsYUFBYSxDQUFDO0lBRXRFOzs7O09BSUc7SUFFSCxRQUFRLEdBQ04sZUFBZSxDQUFDLE9BQU8sQ0FBQztJQUUxQjs7O09BR0c7SUFDc0IsS0FBSyxHQUFrQyxTQUFTLENBQUM7SUFFMUUsWUFDVSxpQkFBbUMsRUFDbkMsWUFBMkMsRUFDM0MsZUFBaUM7UUFGakMsc0JBQWlCLEdBQWpCLGlCQUFpQixDQUFrQjtRQUNuQyxpQkFBWSxHQUFaLFlBQVksQ0FBK0I7UUFDM0Msb0JBQWUsR0FBZixlQUFlLENBQWtCO0lBQ3hDLENBQUM7SUFFSjs7T0FFRztJQUNILFFBQVE7UUFDTixJQUFJLENBQUMsa0JBQWtCLEVBQUUsQ0FBQztJQUM1QixDQUFDO0lBRUQ7O09BRUc7SUFDSCxXQUFXO1FBQ1QsSUFBSSxDQUFDLGVBQWUsQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ2hELElBQUksQ0FBQyxXQUFXLEdBQUcsU0FBUyxDQUFDO0lBQy9CLENBQUM7SUFFRDs7O09BR0c7SUFDSyxrQkFBa0I7UUFDeEIsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUU7WUFDZCxNQUFNLElBQUksS0FBSyxDQUFDLDhDQUE4QyxDQUFDLENBQUM7U0FDakU7UUFDRCxpRkFBaUY7UUFDakYsc0dBQXNHO1FBQ3RHLElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFO1lBQ3JCLElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxlQUFlLENBQ3JEO2dCQUNFLElBQUksRUFBRSxJQUFJLENBQUMsSUFBSTtnQkFDZixJQUFJLEVBQUUsSUFBSSxDQUFDLElBQUk7Z0JBQ2YsSUFBSSxFQUFFLElBQUksQ0FBQyxJQUFJO2dCQUNmLEtBQUssRUFBRSxJQUFJLENBQUMsS0FBSztnQkFDakIsUUFBUSxFQUFFLElBQUksQ0FBQyxRQUFRO2FBQ3hCLEVBQ0QsSUFBSSxDQUFDLGlCQUFpQixFQUN0QixJQUFJLENBQUMsWUFBWSxFQUNqQixJQUFJLENBQUMsUUFBUSxDQUNkLENBQUM7U0FDSDtJQUNILENBQUM7dUdBekdVLGtCQUFrQjsyRkFBbEIsa0JBQWtCOzsyRkFBbEIsa0JBQWtCO2tCQUg5QixTQUFTO21CQUFDO29CQUNULFFBQVEsRUFBRSxhQUFhO2lCQUN4QjtnS0FVQyxJQUFJO3NCQURILEtBQUs7dUJBQUMsV0FBVztnQkFVZCxLQUFLO3NCQURSLEtBQUs7dUJBQUMsZ0JBQWdCO2dCQW1CdkIsSUFBSTtzQkFESCxLQUFLO3VCQUFDLGVBQWU7Z0JBUUUsSUFBSTtzQkFBM0IsS0FBSzt1QkFBQyxlQUFlO2dCQVF0QixRQUFRO3NCQURQLEtBQUs7dUJBQUMsbUJBQW1CO2dCQVFELEtBQUs7c0JBQTdCLEtBQUs7dUJBQUMsZ0JBQWdCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRGlyZWN0aXZlLCBJbnB1dCwgT25Jbml0LCBPbkRlc3Ryb3kgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFZpZXdDb250YWluZXJSZWYsIFRlbXBsYXRlUmVmIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbmltcG9ydCB7XG4gIExvYWRpbmdUeXBlLFxuICBMb2FkaW5nTW9kZSxcbiAgTG9hZGluZ1N0cmF0ZWd5LFxufSBmcm9tICcuLi9sb2FkaW5nLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBUZExvYWRpbmdTZXJ2aWNlIH0gZnJvbSAnLi4vc2VydmljZXMvbG9hZGluZy5zZXJ2aWNlJztcbmltcG9ydCB7IElMb2FkaW5nUmVmIH0gZnJvbSAnLi4vc2VydmljZXMvbG9hZGluZy5mYWN0b3J5JztcblxuLyoqXG4gKiBDb250ZXh0IGNsYXNzIGZvciB2YXJpYWJsZSByZWZlcmVuY2VcbiAqL1xuZXhwb3J0IGNsYXNzIFRkTG9hZGluZ0NvbnRleHQge1xuICBwdWJsaWMgJGltcGxpY2l0OiBhbnkgPSB1bmRlZmluZWQ7XG4gIHB1YmxpYyB0ZExvYWRpbmc6IGFueSA9IHVuZGVmaW5lZDtcbn1cblxuLy8gQ29uc3RhbnQgZm9yIGdlbmVyYXRpb24gb2YgdGhlIGlkIGZvciB0aGUgbmV4dCBjb21wb25lbnRcbmxldCBURF9MT0FESU5HX05FWFRfSUQgPSAwO1xuXG5ARGlyZWN0aXZlKHtcbiAgc2VsZWN0b3I6ICdbdGRMb2FkaW5nXScsXG59KVxuZXhwb3J0IGNsYXNzIFRkTG9hZGluZ0RpcmVjdGl2ZSBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95IHtcbiAgcHJpdmF0ZSBfY29udGV4dDogVGRMb2FkaW5nQ29udGV4dCA9IG5ldyBUZExvYWRpbmdDb250ZXh0KCk7XG4gIHByaXZhdGUgX2xvYWRpbmdSZWY/OiBJTG9hZGluZ1JlZjtcblxuICAvKipcbiAgICogdGRMb2FkaW5nOiBzdHJpbmdcbiAgICogTmFtZSByZWZlcmVuY2Ugb2YgdGhlIGxvYWRpbmcgbWFzaywgdXNlZCB0byByZWdpc3Rlci9yZXNvbHZlIHJlcXVlc3RzIHRvIHRoZSBtYXNrLlxuICAgKi9cbiAgQElucHV0KCd0ZExvYWRpbmcnKVxuICBuYW1lITogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiB0ZExvYWRpbmdVbnRpbD86IGFueVxuICAgKiBJZiBpdHMgbnVsbCwgdW5kZWZpbmVkIG9yIGZhbHNlIGl0IHdpbGwgYmUgdXNlZCB0byByZWdpc3RlciByZXF1ZXN0cyB0byB0aGUgbWFzay5cbiAgICogRWxzZSBpZiBpdHMgYW55IHZhbHVlIHRoYXQgY2FuIGJlIHJlc29sdmVkIGFzIHRydWUsIGl0IHdpbGwgcmVzb2x2ZSB0aGUgbWFzay5cbiAgICogW25hbWVdIGlzIG9wdGlvbmFsIHdoZW4gdXNpbmcgW3VudGlsXSwgYnV0IGNhbiBzdGlsbCBiZSB1c2VkIHRvIHJlZ2lzdGVyL3Jlc29sdmUgaXQgbWFudWFsbHkuXG4gICAqL1xuICBASW5wdXQoJ3RkTG9hZGluZ1VudGlsJylcbiAgc2V0IHVudGlsKHVudGlsOiBhbnkpIHtcbiAgICBpZiAoIXRoaXMubmFtZSkge1xuICAgICAgdGhpcy5uYW1lID0gJ3RkLWxvYWRpbmctdW50aWwtJyArIFREX0xPQURJTkdfTkVYVF9JRCsrO1xuICAgIH1cbiAgICB0aGlzLl9jb250ZXh0LiRpbXBsaWNpdCA9IHRoaXMuX2NvbnRleHQudGRMb2FkaW5nID0gdW50aWw7XG4gICAgaWYgKCF1bnRpbCkge1xuICAgICAgdGhpcy5fbG9hZGluZ1NlcnZpY2UucmVnaXN0ZXIodGhpcy5uYW1lKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5fbG9hZGluZ1NlcnZpY2UucmVzb2x2ZUFsbCh0aGlzLm5hbWUpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiB0ZExvYWRpbmdUeXBlPzogTG9hZGluZ1R5cGUgb3IgWydsaW5lYXInIHwgJ2NpcmN1bGFyJ11cbiAgICogU2V0cyB0aGUgdHlwZSBvZiBsb2FkaW5nIG1hc2sgZGVwZW5kaW5nIG9uIHZhbHVlLlxuICAgKiBEZWZhdWx0cyB0byBbTG9hZGluZ1R5cGUuQ2lyY3VsYXIgfCAnY2lyY3VsYXInXS5cbiAgICovXG4gIEBJbnB1dCgndGRMb2FkaW5nVHlwZScpXG4gIHR5cGU6IExvYWRpbmdUeXBlID0gTG9hZGluZ1R5cGUuQ2lyY3VsYXI7XG5cbiAgLyoqXG4gICAqIHRkTG9hZGluZ01vZGU/OiBMb2FkaW5nTW9kZSBvciBbJ2RldGVybWluYXRlJyB8ICdpbmRldGVybWluYXRlJ11cbiAgICogU2V0cyB0aGUgbW9kZSBvZiBsb2FkaW5nIG1hc2sgZGVwZW5kaW5nIG9uIHZhbHVlLlxuICAgKiBEZWZhdWx0cyB0byBbTG9hZGluZ01vZGUuSW5kZXRlcm1pbmF0ZSB8ICdpbmRldGVybWluYXRlJ10uXG4gICAqL1xuICBASW5wdXQoJ3RkTG9hZGluZ01vZGUnKSBtb2RlOiBMb2FkaW5nTW9kZSA9IExvYWRpbmdNb2RlLkluZGV0ZXJtaW5hdGU7XG5cbiAgLyoqXG4gICAqIHRkTG9hZGluZ1N0cmF0ZWd5PzogTG9hZGluZ1N0cmF0ZWd5IG9yIFsncmVwbGFjZScgfCAnb3ZlcmxheSddXG4gICAqIFNldHMgdGhlIHN0cmF0ZWd5IG9mIGxvYWRpbmcgbWFzayBkZXBlbmRpbmcgb24gdmFsdWUuXG4gICAqIERlZmF1bHRzIHRvIFtMb2FkaW5nTW9kZS5SZXBsYWNlIHwgJ3JlcGxhY2UnXS5cbiAgICovXG4gIEBJbnB1dCgndGRMb2FkaW5nU3RyYXRlZ3knKVxuICBzdHJhdGVneTogTG9hZGluZ1N0cmF0ZWd5Lk92ZXJsYXkgfCBMb2FkaW5nU3RyYXRlZ3kuUmVwbGFjZSA9XG4gICAgTG9hZGluZ1N0cmF0ZWd5LlJlcGxhY2U7XG5cbiAgLyoqXG4gICAqIHRkTG9hZGluZ0NvbG9yPzogXCJwcmltYXJ5XCIgfCBcImFjY2VudFwiIHwgXCJ3YXJuXCJcbiAgICogU2V0cyB0aGUgdGhlbWUgY29sb3Igb2YgdGhlIGxvYWRpbmcgY29tcG9uZW50LiBEZWZhdWx0cyB0byBcInByaW1hcnlcIlxuICAgKi9cbiAgQElucHV0KCd0ZExvYWRpbmdDb2xvcicpIGNvbG9yOiAncHJpbWFyeScgfCAnYWNjZW50JyB8ICd3YXJuJyA9ICdwcmltYXJ5JztcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIF92aWV3Q29udGFpbmVyUmVmOiBWaWV3Q29udGFpbmVyUmVmLFxuICAgIHByaXZhdGUgX3RlbXBsYXRlUmVmOiBUZW1wbGF0ZVJlZjxUZExvYWRpbmdDb250ZXh0PixcbiAgICBwcml2YXRlIF9sb2FkaW5nU2VydmljZTogVGRMb2FkaW5nU2VydmljZVxuICApIHt9XG5cbiAgLyoqXG4gICAqIFJlZ2lzdGVycyBjb21wb25lbnQgaW4gdGhlIERPTSwgc28gaXQgd2lsbCBiZSBhdmFpbGFibGUgd2hlbiBjYWxsaW5nIHJlc29sdmUvcmVnaXN0ZXIuXG4gICAqL1xuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLl9yZWdpc3RlckNvbXBvbmVudCgpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlbW92ZSBjb21wb25lbnQgd2hlbiBkaXJlY3RpdmUgaXMgZGVzdHJveWVkLlxuICAgKi9cbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgdGhpcy5fbG9hZGluZ1NlcnZpY2UucmVtb3ZlQ29tcG9uZW50KHRoaXMubmFtZSk7XG4gICAgdGhpcy5fbG9hZGluZ1JlZiA9IHVuZGVmaW5lZDtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGVzIFtUZExvYWRpbmdDb21wb25lbnRdIGFuZCBhdHRhY2hlcyBpdCB0byB0aGlzIGRpcmVjdGl2ZSdzIFtWaWV3Q29udGFpbmVyUmVmXS5cbiAgICogUGFzc2VzIHRoaXMgZGlyZWN0aXZlJ3MgW1RlbXBsYXRlUmVmXSB0byBtb2RpZnkgRE9NIGRlcGVuZGluZyBvbiBsb2FkaW5nIGBzdHJhdGVneWAuXG4gICAqL1xuICBwcml2YXRlIF9yZWdpc3RlckNvbXBvbmVudCgpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMubmFtZSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdOYW1lIGlzIG5lZWRlZCB0byByZWdpc3RlciBsb2FkaW5nIGRpcmVjdGl2ZScpO1xuICAgIH1cbiAgICAvLyBDaGVjayBpZiBgVGRMb2FkaW5nQ29tcG9uZW50YCBoYXMgYmVlbiBjcmVhdGVkIGJlZm9yZSB0cnlpbmcgdG8gYWRkIG9uZSBhZ2Fpbi5cbiAgICAvLyBUaGVyZSBpcyBhIHdlaXJkIGVkZ2UgY2FzZSB3aGVuIHVzaW5nIGBbcm91dGVyTGlua0FjdGl2ZV1gIHRoYXQgY2FsbHMgdGhlIGBuZ09uSW5pdGAgdHdpY2UgaW4gYSByb3dcbiAgICBpZiAoIXRoaXMuX2xvYWRpbmdSZWYpIHtcbiAgICAgIHRoaXMuX2xvYWRpbmdSZWYgPSB0aGlzLl9sb2FkaW5nU2VydmljZS5jcmVhdGVDb21wb25lbnQoXG4gICAgICAgIHtcbiAgICAgICAgICBuYW1lOiB0aGlzLm5hbWUsXG4gICAgICAgICAgdHlwZTogdGhpcy50eXBlLFxuICAgICAgICAgIG1vZGU6IHRoaXMubW9kZSxcbiAgICAgICAgICBjb2xvcjogdGhpcy5jb2xvcixcbiAgICAgICAgICBzdHJhdGVneTogdGhpcy5zdHJhdGVneSxcbiAgICAgICAgfSxcbiAgICAgICAgdGhpcy5fdmlld0NvbnRhaW5lclJlZixcbiAgICAgICAgdGhpcy5fdGVtcGxhdGVSZWYsXG4gICAgICAgIHRoaXMuX2NvbnRleHRcbiAgICAgICk7XG4gICAgfVxuICB9XG59XG4iXX0=
|
@@ -0,0 +1,193 @@
|
|
1
|
+
import { Component, ChangeDetectorRef, ElementRef, } from '@angular/core';
|
2
|
+
import { tdFadeInOutAnimation } from '@covalent/core/common';
|
3
|
+
import * as i0 from "@angular/core";
|
4
|
+
import * as i1 from "@angular/common";
|
5
|
+
import * as i2 from "@angular/material/progress-bar";
|
6
|
+
import * as i3 from "@angular/material/progress-spinner";
|
7
|
+
import * as i4 from "@angular/cdk/portal";
|
8
|
+
export var LoadingType;
|
9
|
+
(function (LoadingType) {
|
10
|
+
LoadingType["Circular"] = "circular";
|
11
|
+
LoadingType["Linear"] = "linear";
|
12
|
+
})(LoadingType || (LoadingType = {}));
|
13
|
+
export var LoadingMode;
|
14
|
+
(function (LoadingMode) {
|
15
|
+
LoadingMode["Determinate"] = "determinate";
|
16
|
+
LoadingMode["Indeterminate"] = "indeterminate";
|
17
|
+
})(LoadingMode || (LoadingMode = {}));
|
18
|
+
export var LoadingStrategy;
|
19
|
+
(function (LoadingStrategy) {
|
20
|
+
LoadingStrategy["Overlay"] = "overlay";
|
21
|
+
LoadingStrategy["Replace"] = "replace";
|
22
|
+
})(LoadingStrategy || (LoadingStrategy = {}));
|
23
|
+
export var LoadingStyle;
|
24
|
+
(function (LoadingStyle) {
|
25
|
+
LoadingStyle["FullScreen"] = "fullscreen";
|
26
|
+
LoadingStyle["Overlay"] = "overlay";
|
27
|
+
LoadingStyle["None"] = "none";
|
28
|
+
})(LoadingStyle || (LoadingStyle = {}));
|
29
|
+
export const TD_CIRCLE_DIAMETER = 40;
|
30
|
+
export class TdLoadingComponent {
|
31
|
+
_elementRef;
|
32
|
+
_changeDetectorRef;
|
33
|
+
_mode = LoadingMode.Indeterminate;
|
34
|
+
_defaultMode = LoadingMode.Indeterminate;
|
35
|
+
_value = 0;
|
36
|
+
_circleDiameter = TD_CIRCLE_DIAMETER;
|
37
|
+
/**
|
38
|
+
* Flag for animation
|
39
|
+
*/
|
40
|
+
animation = false;
|
41
|
+
/**
|
42
|
+
* Content injected into loading component.
|
43
|
+
*/
|
44
|
+
content;
|
45
|
+
/**
|
46
|
+
* Sets mode of [TdLoadingComponent] to LoadingMode.Determinate or LoadingMode.Indeterminate
|
47
|
+
*/
|
48
|
+
set mode(mode) {
|
49
|
+
this._defaultMode = mode;
|
50
|
+
}
|
51
|
+
get mode() {
|
52
|
+
return this._mode;
|
53
|
+
}
|
54
|
+
/**
|
55
|
+
* Sets value of [TdLoadingComponent] if mode is 'LoadingMode.Determinate'
|
56
|
+
*/
|
57
|
+
set value(value) {
|
58
|
+
this._value = value;
|
59
|
+
// Check for changes for `OnPush` change detection
|
60
|
+
this._changeDetectorRef.markForCheck();
|
61
|
+
}
|
62
|
+
get value() {
|
63
|
+
return this._value;
|
64
|
+
}
|
65
|
+
style = LoadingStyle.None;
|
66
|
+
/**
|
67
|
+
* height: number
|
68
|
+
* Sets height of [TdLoadingComponent].
|
69
|
+
*/
|
70
|
+
height = 100;
|
71
|
+
/**
|
72
|
+
* type: LoadingType
|
73
|
+
* Sets type of [TdLoadingComponent] rendered.
|
74
|
+
*/
|
75
|
+
type = LoadingType.Circular;
|
76
|
+
/**
|
77
|
+
* color: primary' | 'accent' | 'warn'
|
78
|
+
* Sets theme color of [TdLoadingComponent] rendered.
|
79
|
+
*/
|
80
|
+
color = 'primary';
|
81
|
+
constructor(_elementRef, _changeDetectorRef) {
|
82
|
+
this._elementRef = _elementRef;
|
83
|
+
this._changeDetectorRef = _changeDetectorRef;
|
84
|
+
}
|
85
|
+
ngDoCheck() {
|
86
|
+
// When overlay is used and the host width has a value greater than 1px
|
87
|
+
// set the circle diameter when possible incase the loading component was rendered in a hidden state
|
88
|
+
if (this.isOverlay() && this._hostHeight() > 1 && this.animation) {
|
89
|
+
this._setCircleDiameter();
|
90
|
+
this._changeDetectorRef.markForCheck();
|
91
|
+
}
|
92
|
+
}
|
93
|
+
getHeight() {
|
94
|
+
// Ignore height if style is `overlay` or `fullscreen`.
|
95
|
+
// Add height if child elements have a height and style is `none`, else return default height.
|
96
|
+
if (this.isOverlay() || this.isFullScreen()) {
|
97
|
+
return undefined;
|
98
|
+
}
|
99
|
+
else {
|
100
|
+
return this.height ? `${this.height}px` : '150px';
|
101
|
+
}
|
102
|
+
}
|
103
|
+
getCircleDiameter() {
|
104
|
+
return this._circleDiameter;
|
105
|
+
}
|
106
|
+
getCircleStrokeWidth() {
|
107
|
+
// we calculate the stroke width by setting it as 10% of its diameter
|
108
|
+
const strokeWidth = this.getCircleDiameter() / 10;
|
109
|
+
return Math.abs(strokeWidth);
|
110
|
+
}
|
111
|
+
isCircular() {
|
112
|
+
return this.type === LoadingType.Circular;
|
113
|
+
}
|
114
|
+
isLinear() {
|
115
|
+
return this.type === LoadingType.Linear;
|
116
|
+
}
|
117
|
+
isFullScreen() {
|
118
|
+
return this.style === LoadingStyle.FullScreen;
|
119
|
+
}
|
120
|
+
isOverlay() {
|
121
|
+
return this.style === LoadingStyle.Overlay;
|
122
|
+
}
|
123
|
+
/**
|
124
|
+
* Starts in animation and returns an observable for completition event.
|
125
|
+
*/
|
126
|
+
show() {
|
127
|
+
/* need to switch back to the selected mode, so we have saved it in another variable
|
128
|
+
* and then recover it. (issue with protractor)
|
129
|
+
*/
|
130
|
+
this._mode = this._defaultMode;
|
131
|
+
// Set values before the animations starts
|
132
|
+
this._setCircleDiameter();
|
133
|
+
// Check for changes for `OnPush` change detection
|
134
|
+
this.animation = true;
|
135
|
+
this._changeDetectorRef.markForCheck();
|
136
|
+
}
|
137
|
+
/**
|
138
|
+
* Starts out animation and returns an observable for completition event.
|
139
|
+
*/
|
140
|
+
hide() {
|
141
|
+
this.animation = false;
|
142
|
+
/* need to switch back and forth from determinate/indeterminate so the setInterval()
|
143
|
+
* inside mat-progress-spinner stops and protractor doesnt timeout waiting to sync.
|
144
|
+
*/
|
145
|
+
this._mode = LoadingMode.Determinate;
|
146
|
+
// Check for changes for `OnPush` change detection
|
147
|
+
/* little hack to reset the loader value and animation before removing it from DOM
|
148
|
+
* else, the loader will appear with prev value when its registered again
|
149
|
+
* and will do an animation going prev value to 0.
|
150
|
+
*/
|
151
|
+
this.value = 0;
|
152
|
+
// Check for changes for `OnPush` change detection
|
153
|
+
this._changeDetectorRef.markForCheck();
|
154
|
+
}
|
155
|
+
/**
|
156
|
+
* Calculate the proper diameter for the circle and set it
|
157
|
+
*/
|
158
|
+
_setCircleDiameter() {
|
159
|
+
// we set a default diameter of 100 since this is the default in material
|
160
|
+
let diameter = TD_CIRCLE_DIAMETER;
|
161
|
+
// if height is provided, then we take that as diameter
|
162
|
+
if (this.height) {
|
163
|
+
diameter = this.height;
|
164
|
+
// else if its not provided, then we take the host height
|
165
|
+
}
|
166
|
+
else if (this.height === undefined) {
|
167
|
+
diameter = this._hostHeight();
|
168
|
+
}
|
169
|
+
// if the diameter is over TD_CIRCLE_DIAMETER, we set TD_CIRCLE_DIAMETER
|
170
|
+
if (diameter <= TD_CIRCLE_DIAMETER) {
|
171
|
+
this._circleDiameter = Math.floor(diameter);
|
172
|
+
}
|
173
|
+
else {
|
174
|
+
this._circleDiameter = TD_CIRCLE_DIAMETER;
|
175
|
+
}
|
176
|
+
}
|
177
|
+
/**
|
178
|
+
* Returns the host height of the loading component
|
179
|
+
*/
|
180
|
+
_hostHeight() {
|
181
|
+
if (this._elementRef.nativeElement) {
|
182
|
+
return (this._elementRef.nativeElement).getBoundingClientRect().height;
|
183
|
+
}
|
184
|
+
return 0;
|
185
|
+
}
|
186
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: TdLoadingComponent, deps: [{ token: i0.ElementRef }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
|
187
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.7", type: TdLoadingComponent, selector: "td-loading", ngImport: i0, template: "<div\n class=\"td-loading-wrapper\"\n [style.min-height]=\"getHeight()\"\n [class.td-overlay-circular]=\"(isOverlay() || isFullScreen()) && !isLinear()\"\n [class.td-overlay]=\"isOverlay() || isFullScreen()\"\n [class.td-fullscreen]=\"isFullScreen()\"\n>\n <div\n [@tdFadeInOut]=\"animation\"\n [style.min-height]=\"getHeight()\"\n class=\"td-loading\"\n >\n <mat-progress-spinner\n *ngIf=\"isCircular()\"\n [mode]=\"mode\"\n [value]=\"value\"\n [color]=\"color\"\n [diameter]=\"getCircleDiameter()\"\n [strokeWidth]=\"getCircleStrokeWidth()\"\n ></mat-progress-spinner>\n <mat-progress-bar\n *ngIf=\"isLinear()\"\n [mode]=\"mode\"\n [value]=\"value\"\n [color]=\"color\"\n ></mat-progress-bar>\n </div>\n <ng-template [cdkPortalOutlet]=\"content\"></ng-template>\n</div>\n", styles: [".td-loading-wrapper{position:relative;display:block}.td-loading-wrapper.td-fullscreen{position:inherit}.td-loading-wrapper .td-loading{box-sizing:border-box;display:flex;flex-direction:row;align-items:center;align-content:center;max-width:100%;justify-content:center;flex:1}.td-loading-wrapper.td-overlay .td-loading{position:absolute;margin:0;top:0;left:0;right:0;z-index:1000}.td-loading-wrapper.td-overlay .td-loading mat-progress-bar{position:absolute;top:0;left:0;right:0}.td-loading-wrapper.td-overlay-circular .td-loading{bottom:0}\n"], dependencies: [{ kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i2.MatProgressBar, selector: "mat-progress-bar", inputs: ["color", "value", "bufferValue", "mode"], outputs: ["animationEnd"], exportAs: ["matProgressBar"] }, { kind: "component", type: i3.MatProgressSpinner, selector: "mat-progress-spinner, mat-spinner", inputs: ["color", "mode", "value", "diameter", "strokeWidth"], exportAs: ["matProgressSpinner"] }, { kind: "directive", type: i4.CdkPortalOutlet, selector: "[cdkPortalOutlet]", inputs: ["cdkPortalOutlet"], outputs: ["attached"], exportAs: ["cdkPortalOutlet"] }], animations: [tdFadeInOutAnimation] });
|
188
|
+
}
|
189
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: TdLoadingComponent, decorators: [{
|
190
|
+
type: Component,
|
191
|
+
args: [{ selector: 'td-loading', animations: [tdFadeInOutAnimation], template: "<div\n class=\"td-loading-wrapper\"\n [style.min-height]=\"getHeight()\"\n [class.td-overlay-circular]=\"(isOverlay() || isFullScreen()) && !isLinear()\"\n [class.td-overlay]=\"isOverlay() || isFullScreen()\"\n [class.td-fullscreen]=\"isFullScreen()\"\n>\n <div\n [@tdFadeInOut]=\"animation\"\n [style.min-height]=\"getHeight()\"\n class=\"td-loading\"\n >\n <mat-progress-spinner\n *ngIf=\"isCircular()\"\n [mode]=\"mode\"\n [value]=\"value\"\n [color]=\"color\"\n [diameter]=\"getCircleDiameter()\"\n [strokeWidth]=\"getCircleStrokeWidth()\"\n ></mat-progress-spinner>\n <mat-progress-bar\n *ngIf=\"isLinear()\"\n [mode]=\"mode\"\n [value]=\"value\"\n [color]=\"color\"\n ></mat-progress-bar>\n </div>\n <ng-template [cdkPortalOutlet]=\"content\"></ng-template>\n</div>\n", styles: [".td-loading-wrapper{position:relative;display:block}.td-loading-wrapper.td-fullscreen{position:inherit}.td-loading-wrapper .td-loading{box-sizing:border-box;display:flex;flex-direction:row;align-items:center;align-content:center;max-width:100%;justify-content:center;flex:1}.td-loading-wrapper.td-overlay .td-loading{position:absolute;margin:0;top:0;left:0;right:0;z-index:1000}.td-loading-wrapper.td-overlay .td-loading mat-progress-bar{position:absolute;top:0;left:0;right:0}.td-loading-wrapper.td-overlay-circular .td-loading{bottom:0}\n"] }]
|
192
|
+
}], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: i0.ChangeDetectorRef }]; } });
|
193
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9hZGluZy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9saWJzL2FuZ3VsYXIvbG9hZGluZy9zcmMvbG9hZGluZy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9saWJzL2FuZ3VsYXIvbG9hZGluZy9zcmMvbG9hZGluZy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsU0FBUyxFQUNULGlCQUFpQixFQUNqQixVQUFVLEdBRVgsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7Ozs7OztBQUc3RCxNQUFNLENBQU4sSUFBWSxXQUdYO0FBSEQsV0FBWSxXQUFXO0lBQ3JCLG9DQUFxQixDQUFBO0lBQ3JCLGdDQUFpQixDQUFBO0FBQ25CLENBQUMsRUFIVyxXQUFXLEtBQVgsV0FBVyxRQUd0QjtBQUVELE1BQU0sQ0FBTixJQUFZLFdBR1g7QUFIRCxXQUFZLFdBQVc7SUFDckIsMENBQTJCLENBQUE7SUFDM0IsOENBQStCLENBQUE7QUFDakMsQ0FBQyxFQUhXLFdBQVcsS0FBWCxXQUFXLFFBR3RCO0FBRUQsTUFBTSxDQUFOLElBQVksZUFHWDtBQUhELFdBQVksZUFBZTtJQUN6QixzQ0FBbUIsQ0FBQTtJQUNuQixzQ0FBbUIsQ0FBQTtBQUNyQixDQUFDLEVBSFcsZUFBZSxLQUFmLGVBQWUsUUFHMUI7QUFFRCxNQUFNLENBQU4sSUFBWSxZQUlYO0FBSkQsV0FBWSxZQUFZO0lBQ3RCLHlDQUF5QixDQUFBO0lBQ3pCLG1DQUFtQixDQUFBO0lBQ25CLDZCQUFhLENBQUE7QUFDZixDQUFDLEVBSlcsWUFBWSxLQUFaLFlBQVksUUFJdkI7QUFFRCxNQUFNLENBQUMsTUFBTSxrQkFBa0IsR0FBRyxFQUFFLENBQUM7QUFRckMsTUFBTSxPQUFPLGtCQUFrQjtJQTJEbkI7SUFDQTtJQTNERixLQUFLLEdBQWdCLFdB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LENBQUMscUJBQXFCLEVBQUUsQ0FBQyxNQUFNLENBQUM7U0FDbkM7UUFDRCxPQUFPLENBQUMsQ0FBQztJQUNYLENBQUM7dUdBN0tVLGtCQUFrQjsyRkFBbEIsa0JBQWtCLGtEQ3RDL0IsdTFCQTZCQSw2c0NET2MsQ0FBQyxvQkFBb0IsQ0FBQzs7MkZBRXZCLGtCQUFrQjtrQkFOOUIsU0FBUzsrQkFDRSxZQUFZLGNBR1YsQ0FBQyxvQkFBb0IsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIENvbXBvbmVudCxcbiAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gIEVsZW1lbnRSZWYsXG4gIERvQ2hlY2ssXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgdGRGYWRlSW5PdXRBbmltYXRpb24gfSBmcm9tICdAY292YWxlbnQvY29yZS9jb21tb24nO1xuaW1wb3J0IHsgVGVtcGxhdGVQb3J0YWwgfSBmcm9tICdAYW5ndWxhci9jZGsvcG9ydGFsJztcblxuZXhwb3J0IGVudW0gTG9hZGluZ1R5cGUge1xuICBDaXJjdWxhciA9ICdjaXJjdWxhcicsXG4gIExpbmVhciA9ICdsaW5lYXInLFxufVxuXG5leHBvcnQgZW51bSBMb2FkaW5nTW9kZSB7XG4gIERldGVybWluYXRlID0gJ2RldGVybWluYXRlJyxcbiAgSW5kZXRlcm1pbmF0ZSA9ICdpbmRldGVybWluYXRlJyxcbn1cblxuZXhwb3J0IGVudW0gTG9hZGluZ1N0cmF0ZWd5IHtcbiAgT3ZlcmxheSA9ICdvdmVybGF5JyxcbiAgUmVwbGFjZSA9ICdyZXBsYWNlJyxcbn1cblxuZXhwb3J0IGVudW0gTG9hZGluZ1N0eWxlIHtcbiAgRnVsbFNjcmVlbiA9ICdmdWxsc2NyZWVuJyxcbiAgT3ZlcmxheSA9ICdvdmVybGF5JyxcbiAgTm9uZSA9ICdub25lJyxcbn1cblxuZXhwb3J0IGNvbnN0IFREX0NJUkNMRV9ESUFNRVRFUiA9IDQwO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICd0ZC1sb2FkaW5nJyxcbiAgc3R5bGVVcmxzOiBbJy4vbG9hZGluZy5jb21wb25lbnQuc2NzcyddLFxuICB0ZW1wbGF0ZVVybDogJy4vbG9hZGluZy5jb21wb25lbnQuaHRtbCcsXG4gIGFuaW1hdGlvbnM6IFt0ZEZhZGVJbk91dEFuaW1hdGlvbl0sXG59KVxuZXhwb3J0IGNsYXNzIFRkTG9hZGluZ0NvbXBvbmVudCBpbXBsZW1lbnRzIERvQ2hlY2sge1xuICBwcml2YXRlIF9tb2RlOiBMb2FkaW5nTW9kZSA9IExvYWRpbmdNb2RlLkluZGV0ZXJtaW5hdGU7XG4gIHByaXZhdGUgX2RlZmF1bHRNb2RlOiBMb2FkaW5nTW9kZSA9IExvYWRpbmdNb2RlLkluZGV0ZXJtaW5hdGU7XG4gIHByaXZhdGUgX3ZhbHVlID0gMDtcbiAgcHJpdmF0ZSBfY2lyY2xlRGlhbWV0ZXI6IG51bWJlciA9IFREX0NJUkNMRV9ESUFNRVRFUjtcblxuICAvKipcbiAgICogRmxhZyBmb3IgYW5pbWF0aW9uXG4gICAqL1xuICBhbmltYXRpb24gPSBmYWxzZTtcblxuICAvKipcbiAgICogQ29udGVudCBpbmplY3RlZCBpbnRvIGxvYWRpbmcgY29tcG9uZW50LlxuICAgKi9cbiAgY29udGVudCE6IFRlbXBsYXRlUG9ydGFsPGFueT47XG5cbiAgLyoqXG4gICAqIFNldHMgbW9kZSBvZiBbVGRMb2FkaW5nQ29tcG9uZW50XSB0byBMb2FkaW5nTW9kZS5EZXRlcm1pbmF0ZSBvciBMb2FkaW5nTW9kZS5JbmRldGVybWluYXRlXG4gICAqL1xuICBzZXQgbW9kZShtb2RlOiBMb2FkaW5nTW9kZSkge1xuICAgIHRoaXMuX2RlZmF1bHRNb2RlID0gbW9kZTtcbiAgfVxuICBnZXQgbW9kZSgpOiBMb2FkaW5nTW9kZSB7XG4gICAgcmV0dXJuIHRoaXMuX21vZGU7XG4gIH1cblxuICAvKipcbiAgICogU2V0cyB2YWx1ZSBvZiBbVGRMb2FkaW5nQ29tcG9uZW50XSBpZiBtb2RlIGlzICdMb2FkaW5nTW9kZS5EZXRlcm1pbmF0ZSdcbiAgICovXG4gIHNldCB2YWx1ZSh2YWx1ZTogbnVtYmVyKSB7XG4gICAgdGhpcy5fdmFsdWUgPSB2YWx1ZTtcbiAgICAvLyBDaGVjayBmb3IgY2hhbmdlcyBmb3IgYE9uUHVzaGAgY2hhbmdlIGRldGVjdGlvblxuICAgIHRoaXMuX2NoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpO1xuICB9XG4gIGdldCB2YWx1ZSgpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLl92YWx1ZTtcbiAgfVxuXG4gIHN0eWxlOiBMb2FkaW5nU3R5bGUgPSBMb2FkaW5nU3R5bGUuTm9uZTtcblxuICAvKipcbiAgICogaGVpZ2h0OiBudW1iZXJcbiAgICogU2V0cyBoZWlnaHQgb2YgW1RkTG9hZGluZ0NvbXBvbmVudF0uXG4gICAqL1xuICBoZWlnaHQgPSAxMDA7XG5cbiAgLyoqXG4gICAqIHR5cGU6IExvYWRpbmdUeXBlXG4gICAqIFNldHMgdHlwZSBvZiBbVGRMb2FkaW5nQ29tcG9uZW50XSByZW5kZXJlZC5cbiAgICovXG4gIHR5cGU6IExvYWRpbmdUeXBlID0gTG9hZGluZ1R5cGUuQ2lyY3VsYXI7XG5cbiAgLyoqXG4gICAqIGNvbG9yOiBwcmltYXJ5JyB8ICdhY2NlbnQnIHwgJ3dhcm4nXG4gICAqIFNldHMgdGhlbWUgY29sb3Igb2YgW1RkTG9hZGluZ0NvbXBvbmVudF0gcmVuZGVyZWQuXG4gICAqL1xuICBjb2xvcjogJ3ByaW1hcnknIHwgJ2FjY2VudCcgfCAnd2FybicgPSAncHJpbWFyeSc7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBfZWxlbWVudFJlZjogRWxlbWVudFJlZixcbiAgICBwcml2YXRlIF9jaGFuZ2VEZXRlY3RvclJlZjogQ2hhbmdlRGV0ZWN0b3JSZWZcbiAgKSB7fVxuXG4gIG5nRG9DaGVjaygpOiB2b2lkIHtcbiAgICAvLyBXaGVuIG92ZXJsYXkgaXMgdXNlZCBhbmQgdGhlIGhvc3Qgd2lkdGggaGFzIGEgdmFsdWUgZ3JlYXRlciB0aGFuIDFweFxuICAgIC8vIHNldCB0aGUgY2lyY2xlIGRpYW1ldGVyIHdoZW4gcG9zc2libGUgaW5jYXNlIHRoZSBsb2FkaW5nIGNvbXBvbmVudCB3YXMgcmVuZGVyZWQgaW4gYSBoaWRkZW4gc3RhdGVcbiAgICBpZiAodGhpcy5pc092ZXJsYXkoKSAmJiB0aGlzLl9ob3N0SGVpZ2h0KCkgPiAxICYmIHRoaXMuYW5pbWF0aW9uKSB7XG4gICAgICB0aGlzLl9zZXRDaXJjbGVEaWFtZXRlcigpO1xuICAgICAgdGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWYubWFya0ZvckNoZWNrKCk7XG4gICAgfVxuICB9XG5cbiAgZ2V0SGVpZ2h0KCk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gICAgLy8gSWdub3JlIGhlaWdodCBpZiBzdHlsZSBpcyBgb3ZlcmxheWAgb3IgYGZ1bGxzY3JlZW5gLlxuICAgIC8vIEFkZCBoZWlnaHQgaWYgY2hpbGQgZWxlbWVudHMgaGF2ZSBhIGhlaWdodCBhbmQgc3R5bGUgaXMgYG5vbmVgLCBlbHNlIHJldHVybiBkZWZhdWx0IGhlaWdodC5cbiAgICBpZiAodGhpcy5pc092ZXJsYXkoKSB8fCB0aGlzLmlzRnVsbFNjcmVlbigpKSB7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gdGhpcy5oZWlnaHQgPyBgJHt0aGlzLmhlaWdodH1weGAgOiAnMTUwcHgnO1xuICAgIH1cbiAgfVxuXG4gIGdldENpcmNsZURpYW1ldGVyKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuX2NpcmNsZURpYW1ldGVyO1xuICB9XG5cbiAgZ2V0Q2lyY2xlU3Ryb2tlV2lkdGgoKTogbnVtYmVyIHtcbiAgICAvLyB3ZSBjYWxjdWxhdGUgdGhlIHN0cm9rZSB3aWR0aCBieSBzZXR0aW5nIGl0IGFzIDEwJSBvZiBpdHMgZGlhbWV0ZXJcbiAgICBjb25zdCBzdHJva2VXaWR0aDogbnVtYmVyID0gdGhpcy5nZXRDaXJjbGVEaWFtZXRlcigpIC8gMTA7XG4gICAgcmV0dXJuIE1hdGguYWJzKHN0cm9rZVdpZHRoKTtcbiAgfVxuXG4gIGlzQ2lyY3VsYXIoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMudHlwZSA9PT0gTG9hZGluZ1R5cGUuQ2lyY3VsYXI7XG4gIH1cblxuICBpc0xpbmVhcigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy50eXBlID09PSBMb2FkaW5nVHlwZS5MaW5lYXI7XG4gIH1cblxuICBpc0Z1bGxTY3JlZW4oKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuc3R5bGUgPT09IExvYWRpbmdTdHlsZS5GdWxsU2NyZWVuO1xuICB9XG5cbiAgaXNPdmVybGF5KCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLnN0eWxlID09PSBMb2FkaW5nU3R5bGUuT3ZlcmxheTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTdGFydHMgaW4gYW5pbWF0aW9uIGFuZCByZXR1cm5zIGFuIG9ic2VydmFibGUgZm9yIGNvbXBsZXRpdGlvbiBldmVudC5cbiAgICovXG4gIHNob3coKTogdm9pZCB7XG4gICAgLyogbmVlZCB0byBzd2l0Y2ggYmFjayB0byB0aGUgc2VsZWN0ZWQgbW9kZSwgc28gd2UgaGF2ZSBzYXZlZCBpdCBpbiBhbm90aGVyIHZhcmlhYmxlXG4gICAgICogIGFuZCB0aGVuIHJlY292ZXIgaXQuIChpc3N1ZSB3aXRoIHByb3RyYWN0b3IpXG4gICAgICovXG4gICAgdGhpcy5fbW9kZSA9IHRoaXMuX2RlZmF1bHRNb2RlO1xuICAgIC8vIFNldCB2YWx1ZXMgYmVmb3JlIHRoZSBhbmltYXRpb25zIHN0YXJ0c1xuICAgIHRoaXMuX3NldENpcmNsZURpYW1ldGVyKCk7XG4gICAgLy8gQ2hlY2sgZm9yIGNoYW5nZXMgZm9yIGBPblB1c2hgIGNoYW5nZSBkZXRlY3Rpb25cbiAgICB0aGlzLmFuaW1hdGlvbiA9IHRydWU7XG4gICAgdGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWYubWFya0ZvckNoZWNrKCk7XG4gIH1cblxuICAvKipcbiAgICogU3RhcnRzIG91dCBhbmltYXRpb24gYW5kIHJldHVybnMgYW4gb2JzZXJ2YWJsZSBmb3IgY29tcGxldGl0aW9uIGV2ZW50LlxuICAgKi9cbiAgaGlkZSgpOiB2b2lkIHtcbiAgICB0aGlzLmFuaW1hdGlvbiA9IGZhbHNlO1xuICAgIC8qIG5lZWQgdG8gc3dpdGNoIGJhY2sgYW5kIGZvcnRoIGZyb20gZGV0ZXJtaW5hdGUvaW5kZXRlcm1pbmF0ZSBzbyB0aGUgc2V0SW50ZXJ2YWwoKVxuICAgICAqIGluc2lkZSBtYXQtcHJvZ3Jlc3Mtc3Bpbm5lciBzdG9wcyBhbmQgcHJvdHJhY3RvciBkb2VzbnQgdGltZW91dCB3YWl0aW5nIHRvIHN5bmMuXG4gICAgICovXG4gICAgdGhpcy5fbW9kZSA9IExvYWRpbmdNb2RlLkRldGVybWluYXRlO1xuICAgIC8vIENoZWNrIGZvciBjaGFuZ2VzIGZvciBgT25QdXNoYCBjaGFuZ2UgZGV0ZWN0aW9uXG4gICAgLyogbGl0dGxlIGhhY2sgdG8gcmVzZXQgdGhlIGxvYWRlciB2YWx1ZSBhbmQgYW5pbWF0aW9uIGJlZm9yZSByZW1vdmluZyBpdCBmcm9tIERPTVxuICAgICAqIGVsc2UsIHRoZSBsb2FkZXIgd2lsbCBhcHBlYXIgd2l0aCBwcmV2IHZhbHVlIHdoZW4gaXRzIHJlZ2lzdGVyZWQgYWdhaW5cbiAgICAgKiBhbmQgd2lsbCBkbyBhbiBhbmltYXRpb24gZ29pbmcgcHJldiB2YWx1ZSB0byAwLlxuICAgICAqL1xuICAgIHRoaXMudmFsdWUgPSAwO1xuICAgIC8vIENoZWNrIGZvciBjaGFuZ2VzIGZvciBgT25QdXNoYCBjaGFuZ2UgZGV0ZWN0aW9uXG4gICAgdGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWYubWFya0ZvckNoZWNrKCk7XG4gIH1cblxuICAvKipcbiAgICogQ2FsY3VsYXRlIHRoZSBwcm9wZXIgZGlhbWV0ZXIgZm9yIHRoZSBjaXJjbGUgYW5kIHNldCBpdFxuICAgKi9cbiAgcHJpdmF0ZSBfc2V0Q2lyY2xlRGlhbWV0ZXIoKTogdm9pZCB7XG4gICAgLy8gd2Ugc2V0IGEgZGVmYXVsdCBkaWFtZXRlciBvZiAxMDAgc2luY2UgdGhpcyBpcyB0aGUgZGVmYXVsdCBpbiBtYXRlcmlhbFxuICAgIGxldCBkaWFtZXRlcjogbnVtYmVyID0gVERfQ0lSQ0xFX0RJQU1FVEVSO1xuICAgIC8vIGlmIGhlaWdodCBpcyBwcm92aWRlZCwgdGhlbiB3ZSB0YWtlIHRoYXQgYXMgZGlhbWV0ZXJcbiAgICBpZiAodGhpcy5oZWlnaHQpIHtcbiAgICAgIGRpYW1ldGVyID0gdGhpcy5oZWlnaHQ7XG4gICAgICAvLyBlbHNlIGlmIGl0cyBub3QgcHJvdmlkZWQsIHRoZW4gd2UgdGFrZSB0aGUgaG9zdCBoZWlnaHRcbiAgICB9IGVsc2UgaWYgKHRoaXMuaGVpZ2h0ID09PSB1bmRlZmluZWQpIHtcbiAgICAgIGRpYW1ldGVyID0gdGhpcy5faG9zdEhlaWdodCgpO1xuICAgIH1cbiAgICAvLyBpZiB0aGUgZGlhbWV0ZXIgaXMgb3ZlciBURF9DSVJDTEVfRElBTUVURVIsIHdlIHNldCBURF9DSVJDTEVfRElBTUVURVJcbiAgICBpZiAoZGlhbWV0ZXIgPD0gVERfQ0lSQ0xFX0RJQU1FVEVSKSB7XG4gICAgICB0aGlzLl9jaXJjbGVEaWFtZXRlciA9IE1hdGguZmxvb3IoZGlhbWV0ZXIpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLl9jaXJjbGVEaWFtZXRlciA9IFREX0NJUkNMRV9ESUFNRVRFUjtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyB0aGUgaG9zdCBoZWlnaHQgb2YgdGhlIGxvYWRpbmcgY29tcG9uZW50XG4gICAqL1xuICBwcml2YXRlIF9ob3N0SGVpZ2h0KCk6IG51bWJlciB7XG4gICAgaWYgKDxIVE1MRWxlbWVudD50aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQpIHtcbiAgICAgIHJldHVybiAoPEhUTUxFbGVtZW50PihcbiAgICAgICAgdGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50XG4gICAgICApKS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5oZWlnaHQ7XG4gICAgfVxuICAgIHJldHVybiAwO1xuICB9XG59XG4iLCI8ZGl2XG4gIGNsYXNzPVwidGQtbG9hZGluZy13cmFwcGVyXCJcbiAgW3N0eWxlLm1pbi1oZWlnaHRdPVwiZ2V0SGVpZ2h0KClcIlxuICBbY2xhc3MudGQtb3ZlcmxheS1jaXJjdWxhcl09XCIoaXNPdmVybGF5KCkgfHwgaXNGdWxsU2NyZWVuKCkpICYmICFpc0xpbmVhcigpXCJcbiAgW2NsYXNzLnRkLW92ZXJsYXldPVwiaXNPdmVybGF5KCkgfHwgaXNGdWxsU2NyZWVuKClcIlxuICBbY2xhc3MudGQtZnVsbHNjcmVlbl09XCJpc0Z1bGxTY3JlZW4oKVwiXG4+XG4gIDxkaXZcbiAgICBbQHRkRmFkZUluT3V0XT1cImFuaW1hdGlvblwiXG4gICAgW3N0eWxlLm1pbi1oZWlnaHRdPVwiZ2V0SGVpZ2h0KClcIlxuICAgIGNsYXNzPVwidGQtbG9hZGluZ1wiXG4gID5cbiAgICA8bWF0LXByb2dyZXNzLXNwaW5uZXJcbiAgICAgICpuZ0lmPVwiaXNDaXJjdWxhcigpXCJcbiAgICAgIFttb2RlXT1cIm1vZGVcIlxuICAgICAgW3ZhbHVlXT1cInZhbHVlXCJcbiAgICAgIFtjb2xvcl09XCJjb2xvclwiXG4gICAgICBbZGlhbWV0ZXJdPVwiZ2V0Q2lyY2xlRGlhbWV0ZXIoKVwiXG4gICAgICBbc3Ryb2tlV2lkdGhdPVwiZ2V0Q2lyY2xlU3Ryb2tlV2lkdGgoKVwiXG4gICAgPjwvbWF0LXByb2dyZXNzLXNwaW5uZXI+XG4gICAgPG1hdC1wcm9ncmVzcy1iYXJcbiAgICAgICpuZ0lmPVwiaXNMaW5lYXIoKVwiXG4gICAgICBbbW9kZV09XCJtb2RlXCJcbiAgICAgIFt2YWx1ZV09XCJ2YWx1ZVwiXG4gICAgICBbY29sb3JdPVwiY29sb3JcIlxuICAgID48L21hdC1wcm9ncmVzcy1iYXI+XG4gIDwvZGl2PlxuICA8bmctdGVtcGxhdGUgW2Nka1BvcnRhbE91dGxldF09XCJjb250ZW50XCI+PC9uZy10ZW1wbGF0ZT5cbjwvZGl2PlxuIl19
|