ngx-auto-logout 1.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.
Files changed (37) hide show
  1. package/README.md +247 -0
  2. package/dist/README.md +247 -0
  3. package/dist/bundles/ngx-auto-logout.umd.js +864 -0
  4. package/dist/bundles/ngx-auto-logout.umd.js.map +1 -0
  5. package/dist/bundles/ngx-auto-logout.umd.min.js +16 -0
  6. package/dist/bundles/ngx-auto-logout.umd.min.js.map +1 -0
  7. package/dist/esm2015/lib/auto-logout.component.js +351 -0
  8. package/dist/esm2015/lib/auto-logout.module.js +26 -0
  9. package/dist/esm2015/lib/auto-logout.service.js +384 -0
  10. package/dist/esm2015/lib/models/auto-logout-config.interface.js +10 -0
  11. package/dist/esm2015/lib/models/auto-logout-config.token.js +7 -0
  12. package/dist/esm2015/lib/provide-auto-logout.js +11 -0
  13. package/dist/esm2015/ngx-auto-logout.js +5 -0
  14. package/dist/esm2015/public-api.js +10 -0
  15. package/dist/esm5/lib/auto-logout.component.js +196 -0
  16. package/dist/esm5/lib/auto-logout.module.js +30 -0
  17. package/dist/esm5/lib/auto-logout.service.js +391 -0
  18. package/dist/esm5/lib/models/auto-logout-config.interface.js +10 -0
  19. package/dist/esm5/lib/models/auto-logout-config.token.js +7 -0
  20. package/dist/esm5/lib/provide-auto-logout.js +11 -0
  21. package/dist/esm5/ngx-auto-logout.js +5 -0
  22. package/dist/esm5/public-api.js +10 -0
  23. package/dist/fesm2015/ngx-auto-logout.js +787 -0
  24. package/dist/fesm2015/ngx-auto-logout.js.map +1 -0
  25. package/dist/fesm5/ngx-auto-logout.js +643 -0
  26. package/dist/fesm5/ngx-auto-logout.js.map +1 -0
  27. package/dist/lib/auto-logout.component.d.ts +81 -0
  28. package/dist/lib/auto-logout.module.d.ts +8 -0
  29. package/dist/lib/auto-logout.service.d.ts +108 -0
  30. package/dist/lib/models/auto-logout-config.interface.d.ts +46 -0
  31. package/dist/lib/models/auto-logout-config.token.d.ts +7 -0
  32. package/dist/lib/provide-auto-logout.d.ts +6 -0
  33. package/dist/ngx-auto-logout.d.ts +4 -0
  34. package/dist/ngx-auto-logout.metadata.json +1 -0
  35. package/dist/package.json +41 -0
  36. package/dist/public-api.d.ts +6 -0
  37. package/package.json +53 -0
@@ -0,0 +1,196 @@
1
+ import { __decorate } from "tslib";
2
+ import { Component, Input, Output, EventEmitter } from '@angular/core';
3
+ import { AutoLogoutService } from './auto-logout.service';
4
+ var AutoLogoutComponent = /** @class */ (function () {
5
+ function AutoLogoutComponent(autoLogout) {
6
+ this.autoLogout = autoLogout;
7
+ // ==================== 输入属性 ====================
8
+ /**
9
+ * 是否显示延长按钮
10
+ */
11
+ this.showExtendButton = true;
12
+ /**
13
+ * 是否显示暂停按钮
14
+ */
15
+ this.showPauseButton = true;
16
+ /**
17
+ * 延长的秒数(默认30分钟)
18
+ */
19
+ this.extendSeconds = 1800;
20
+ // ==================== 输出事件 ====================
21
+ /**
22
+ * 警告事件
23
+ */
24
+ this.onWarning = new EventEmitter();
25
+ /**
26
+ * 超时事件
27
+ */
28
+ this.onTimeout = new EventEmitter();
29
+ /**
30
+ * 延长成功事件
31
+ */
32
+ this.onExtended = new EventEmitter();
33
+ /**
34
+ * 暂停事件
35
+ */
36
+ this.onPaused = new EventEmitter();
37
+ /**
38
+ * 恢复事件
39
+ */
40
+ this.onResumed = new EventEmitter();
41
+ // ==================== 内部状态 ====================
42
+ this.subscription = null;
43
+ this.countdown = '00:00';
44
+ this.isWarning = false;
45
+ this.isUrgent = false;
46
+ this.isPaused = false;
47
+ this.canExtend = true;
48
+ this.remainingExtends = -1;
49
+ }
50
+ AutoLogoutComponent.prototype.ngOnInit = function () {
51
+ var _this = this;
52
+ // 如果提供了自定义配置,启动监控
53
+ if (this.config) {
54
+ this.autoLogout.startMonitoring(this.config);
55
+ }
56
+ // 订阅倒计时
57
+ this.subscription = this.autoLogout.getCountdown().subscribe(function (seconds) {
58
+ var _a;
59
+ _this.countdown = _this.autoLogout.formatCountdown(seconds);
60
+ _this.isWarning = _this.autoLogout.isWarningState(seconds);
61
+ _this.isUrgent = _this.autoLogout.isUrgentState(seconds);
62
+ // 触发警告事件
63
+ var warningTime = ((_a = _this.config) === null || _a === void 0 ? void 0 : _a.warningTime) || 30;
64
+ if (seconds === warningTime) {
65
+ _this.onWarning.emit(seconds);
66
+ }
67
+ // 触发超时事件
68
+ if (seconds <= 0) {
69
+ _this.onTimeout.emit();
70
+ }
71
+ });
72
+ // 定期检查状态
73
+ setInterval(function () {
74
+ _this.updateStatus();
75
+ }, 1000);
76
+ this.updateStatus();
77
+ };
78
+ AutoLogoutComponent.prototype.ngOnDestroy = function () {
79
+ if (this.subscription) {
80
+ this.subscription.unsubscribe();
81
+ }
82
+ };
83
+ // ==================== 公开方法 ====================
84
+ /**
85
+ * 延长会话
86
+ */
87
+ AutoLogoutComponent.prototype.extendSession = function () {
88
+ this.handleExtend();
89
+ };
90
+ /**
91
+ * 暂停
92
+ */
93
+ AutoLogoutComponent.prototype.pause = function () {
94
+ this.handleTogglePause();
95
+ };
96
+ /**
97
+ * 恢复
98
+ */
99
+ AutoLogoutComponent.prototype.resume = function () {
100
+ this.handleTogglePause();
101
+ };
102
+ Object.defineProperty(AutoLogoutComponent.prototype, "templateContext", {
103
+ /**
104
+ * 获取模板上下文(用于自定义模板)
105
+ */
106
+ get: function () {
107
+ var _this = this;
108
+ return {
109
+ countdown: this.countdown,
110
+ isWarning: this.isWarning,
111
+ isUrgent: this.isUrgent,
112
+ isPaused: this.isPaused,
113
+ canExtend: this.canExtend,
114
+ remainingExtends: this.remainingExtends,
115
+ extendSession: function () { return _this.handleExtend(); },
116
+ togglePause: function () { return _this.handleTogglePause(); },
117
+ formatCountdown: function (seconds) { return _this.autoLogout.formatCountdown(seconds); }
118
+ };
119
+ },
120
+ enumerable: true,
121
+ configurable: true
122
+ });
123
+ // ==================== 内部方法 ====================
124
+ AutoLogoutComponent.prototype.updateStatus = function () {
125
+ this.isPaused = this.autoLogout.isAutoLogoutPaused();
126
+ this.canExtend = this.autoLogout.canExtendSession();
127
+ this.remainingExtends = this.autoLogout.getRemainingExtendTimes();
128
+ };
129
+ /**
130
+ * 处理延长会话(模板调用)
131
+ */
132
+ AutoLogoutComponent.prototype.handleExtend = function () {
133
+ var success = this.autoLogout.extendSession(this.extendSeconds);
134
+ if (success) {
135
+ this.onExtended.emit(this.extendSeconds);
136
+ }
137
+ this.updateStatus();
138
+ };
139
+ /**
140
+ * 处理暂停/恢复切换(模板调用)
141
+ */
142
+ AutoLogoutComponent.prototype.handleTogglePause = function () {
143
+ if (this.isPaused) {
144
+ this.autoLogout.resume();
145
+ this.onResumed.emit();
146
+ }
147
+ else {
148
+ this.autoLogout.pause();
149
+ this.onPaused.emit();
150
+ }
151
+ this.updateStatus();
152
+ };
153
+ AutoLogoutComponent.ctorParameters = function () { return [
154
+ { type: AutoLogoutService }
155
+ ]; };
156
+ __decorate([
157
+ Input()
158
+ ], AutoLogoutComponent.prototype, "showExtendButton", void 0);
159
+ __decorate([
160
+ Input()
161
+ ], AutoLogoutComponent.prototype, "showPauseButton", void 0);
162
+ __decorate([
163
+ Input()
164
+ ], AutoLogoutComponent.prototype, "extendSeconds", void 0);
165
+ __decorate([
166
+ Input()
167
+ ], AutoLogoutComponent.prototype, "config", void 0);
168
+ __decorate([
169
+ Input()
170
+ ], AutoLogoutComponent.prototype, "customTemplate", void 0);
171
+ __decorate([
172
+ Output()
173
+ ], AutoLogoutComponent.prototype, "onWarning", void 0);
174
+ __decorate([
175
+ Output()
176
+ ], AutoLogoutComponent.prototype, "onTimeout", void 0);
177
+ __decorate([
178
+ Output()
179
+ ], AutoLogoutComponent.prototype, "onExtended", void 0);
180
+ __decorate([
181
+ Output()
182
+ ], AutoLogoutComponent.prototype, "onPaused", void 0);
183
+ __decorate([
184
+ Output()
185
+ ], AutoLogoutComponent.prototype, "onResumed", void 0);
186
+ AutoLogoutComponent = __decorate([
187
+ Component({
188
+ selector: 'ngx-auto-logout',
189
+ template: "\n <!-- \u9ED8\u8BA4UI\u6A21\u5F0F\uFF08\u50BB\u74DC\u6A21\u5F0F\uFF09 -->\n <div *ngIf=\"!customTemplate\" class=\"ngx-auto-logout-container\">\n <!-- \u5012\u8BA1\u65F6\u663E\u793A -->\n <div class=\"countdown-display\" [class.warning]=\"isWarning\" [class.urgent]=\"isUrgent\" [class.paused]=\"isPaused\">\n <span class=\"icon\">{{ isPaused ? '\u23F8\uFE0F' : '\u23F1\uFE0F' }}</span>\n <span class=\"time\">{{ countdown }}</span>\n <span *ngIf=\"isPaused\" class=\"pause-label\">(\u5DF2\u6682\u505C)</span>\n </div>\n\n <!-- \u63A7\u5236\u6309\u94AE -->\n <div class=\"controls\">\n <!-- \u5EF6\u957F\u4F1A\u8BDD\u6309\u94AE -->\n <button *ngIf=\"showExtendButton && canExtend\" class=\"btn btn-extend\" (click)=\"handleExtend()\" [disabled]=\"!canExtend\" title=\"\u5EF6\u957F30\u5206\u949F\">\n \u2795 \u5EF6\u957F\n <span *ngIf=\"remainingExtends !== -1\" class=\"extend-count\"> ({{ remainingExtends }}) </span>\n </button>\n\n <!-- \u6682\u505C/\u6062\u590D\u6309\u94AE -->\n <button\n *ngIf=\"showPauseButton\"\n class=\"btn btn-pause\"\n [class.paused]=\"isPaused\"\n (click)=\"handleTogglePause()\"\n [title]=\"isPaused ? '\u6062\u590D\u81EA\u52A8\u767B\u51FA' : '\u6682\u505C\u81EA\u52A8\u767B\u51FA'\"\n >\n {{ isPaused ? '\u25B6\uFE0F \u6062\u590D' : '\u23F8\uFE0F \u6682\u505C' }}\n </button>\n </div>\n </div>\n\n <!-- \u81EA\u5B9A\u4E49\u6A21\u677F\u6A21\u5F0F\uFF08\u4E13\u5BB6\u6A21\u5F0F\uFF09 -->\n <ng-container *ngIf=\"customTemplate\">\n <ng-container [ngTemplateOutlet]=\"customTemplate\" [ngTemplateOutletContext]=\"templateContext\"></ng-container>\n </ng-container>\n ",
190
+ styles: ["\n .ngx-auto-logout-container {\n display: inline-flex;\n align-items: center;\n gap: 12px;\n padding: 8px 12px;\n background: #f8f9fa;\n border-radius: 6px;\n font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;\n }\n\n .countdown-display {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 6px 12px;\n background: white;\n border-radius: 4px;\n font-weight: bold;\n font-size: 16px;\n transition: all 0.3s ease;\n }\n\n .countdown-display.warning {\n background: #fff3cd;\n color: #856404;\n animation: blink-warning 1s ease-in-out infinite;\n }\n\n .countdown-display.urgent {\n background: #f8d7da;\n color: #721c24;\n animation: blink-urgent 0.5s ease-in-out infinite;\n }\n\n .countdown-display.paused {\n opacity: 0.6;\n background: #e9ecef;\n }\n\n .icon {\n font-size: 18px;\n }\n\n .time {\n min-width: 50px;\n text-align: center;\n }\n\n .pause-label {\n font-size: 12px;\n color: #6c757d;\n font-weight: normal;\n }\n\n .controls {\n display: flex;\n gap: 8px;\n }\n\n .btn {\n padding: 6px 12px;\n font-size: 13px;\n border: none;\n border-radius: 4px;\n cursor: pointer;\n transition: all 0.2s;\n font-weight: 500;\n }\n\n .btn-extend {\n background: #28a745;\n color: white;\n }\n\n .btn-extend:hover:not(:disabled) {\n background: #218838;\n transform: translateY(-1px);\n }\n\n .btn-extend:disabled {\n background: #ccc;\n cursor: not-allowed;\n opacity: 0.6;\n }\n\n .btn-pause {\n background: #007bff;\n color: white;\n }\n\n .btn-pause:hover {\n background: #0056b3;\n transform: translateY(-1px);\n }\n\n .btn-pause.paused {\n background: #ffc107;\n color: #212529;\n }\n\n .extend-count {\n font-size: 11px;\n opacity: 0.9;\n }\n\n @keyframes blink-warning {\n 0%,\n 100% {\n opacity: 1;\n }\n 50% {\n opacity: 0.7;\n }\n }\n\n @keyframes blink-urgent {\n 0%,\n 100% {\n opacity: 1;\n transform: scale(1);\n }\n 50% {\n opacity: 0.6;\n transform: scale(1.05);\n }\n }\n "]
191
+ })
192
+ ], AutoLogoutComponent);
193
+ return AutoLogoutComponent;
194
+ }());
195
+ export { AutoLogoutComponent };
196
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXV0by1sb2dvdXQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6Im5nOi8vbmd4LWF1dG8tbG9nb3V0LyIsInNvdXJjZXMiOlsibGliL2F1dG8tbG9nb3V0LmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLFlBQVksRUFBa0MsTUFBTSxlQUFlLENBQUM7QUFDdkcsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUE2SzFEO0lBaUVFLDZCQUFvQixVQUE2QjtRQUE3QixlQUFVLEdBQVYsVUFBVSxDQUFtQjtRQWhFakQsaURBQWlEO1FBRWpEOztXQUVHO1FBQ00scUJBQWdCLEdBQUcsSUFBSSxDQUFDO1FBRWpDOztXQUVHO1FBQ00sb0JBQWUsR0FBRyxJQUFJLENBQUM7UUFFaEM7O1dBRUc7UUFDTSxrQkFBYSxHQUFHLElBQUksQ0FBQztRQVk5QixpREFBaUQ7UUFFakQ7O1dBRUc7UUFDTyxjQUFTLEdBQUcsSUFBSSxZQUFZLEVBQVUsQ0FBQztRQUVqRDs7V0FFRztRQUNPLGNBQVMsR0FBRyxJQUFJLFlBQVksRUFBUSxDQUFDO1FBRS9DOztXQUVHO1FBQ08sZUFBVSxHQUFHLElBQUksWUFBWSxFQUFVLENBQUM7UUFFbEQ7O1dBRUc7UUFDTyxhQUFRLEdBQUcsSUFBSSxZQUFZLEVBQVEsQ0FBQztRQUU5Qzs7V0FFRztRQUNPLGNBQVMsR0FBRyxJQUFJLFlBQVksRUFBUSxDQUFDO1FBRS9DLGlEQUFpRDtRQUV6QyxpQkFBWSxHQUF3QixJQUFJLENBQUM7UUFDakQsY0FBUyxHQUFHLE9BQU8sQ0FBQztRQUNwQixjQUFTLEdBQUcsS0FBSyxDQUFDO1FBQ2xCLGFBQVEsR0FBRyxLQUFLLENBQUM7UUFDakIsYUFBUSxHQUFHLEtBQUssQ0FBQztRQUNqQixjQUFTLEdBQUcsSUFBSSxDQUFDO1FBQ2pCLHFCQUFnQixHQUFHLENBQUMsQ0FBQyxDQUFD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REFBc0M7SUFyRHBDLG1CQUFtQjtRQXpLL0IsU0FBUyxDQUFDO1lBQ1QsUUFBUSxFQUFFLGlCQUFpQjtZQUMzQixRQUFRLEVBQUUsbXdEQW1DVDtxQkFFQyxxa0ZBK0hDO1NBRUosQ0FBQztPQUNXLG1CQUFtQixDQWlML0I7SUFBRCwwQkFBQztDQUFBLEFBakxELElBaUxDO1NBakxZLG1CQUFtQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgSW5wdXQsIE91dHB1dCwgRXZlbnRFbWl0dGVyLCBPbkluaXQsIE9uRGVzdHJveSwgVGVtcGxhdGVSZWYgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEF1dG9Mb2dvdXRTZXJ2aWNlIH0gZnJvbSAnLi9hdXRvLWxvZ291dC5zZXJ2aWNlJztcbmltcG9ydCB7IEF1dG9Mb2dvdXRDb25maWcgfSBmcm9tICcuL21vZGVscy9hdXRvLWxvZ291dC1jb25maWcuaW50ZXJmYWNlJztcbmltcG9ydCB7IFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICduZ3gtYXV0by1sb2dvdXQnLFxuICB0ZW1wbGF0ZTogYFxuICAgIDwhLS0g6buY6K6kVUnmqKHlvI/vvIjlgrvnk5zmqKHlvI/vvIkgLS0+XG4gICAgPGRpdiAqbmdJZj1cIiFjdXN0b21UZW1wbGF0ZVwiIGNsYXNzPVwibmd4LWF1dG8tbG9nb3V0LWNvbnRhaW5lclwiPlxuICAgICAgPCEtLSDlgJLorqHml7bmmL7npLogLS0+XG4gICAgICA8ZGl2IGNsYXNzPVwiY291bnRkb3duLWRpc3BsYXlcIiBbY2xhc3Mud2FybmluZ109XCJpc1dhcm5pbmdcIiBbY2xhc3MudXJnZW50XT1cImlzVXJnZW50XCIgW2NsYXNzLnBhdXNlZF09XCJpc1BhdXNlZFwiPlxuICAgICAgICA8c3BhbiBjbGFzcz1cImljb25cIj57eyBpc1BhdXNlZCA/ICfij7jvuI8nIDogJ+KPse+4jycgfX08L3NwYW4+XG4gICAgICAgIDxzcGFuIGNsYXNzPVwidGltZVwiPnt7IGNvdW50ZG93biB9fTwvc3Bhbj5cbiAgICAgICAgPHNwYW4gKm5nSWY9XCJpc1BhdXNlZFwiIGNsYXNzPVwicGF1c2UtbGFiZWxcIj4o5bey5pqC5YGcKTwvc3Bhbj5cbiAgICAgIDwvZGl2PlxuXG4gICAgICA8IS0tIOaOp+WItuaMiemSriAtLT5cbiAgICAgIDxkaXYgY2xhc3M9XCJjb250cm9sc1wiPlxuICAgICAgICA8IS0tIOW7tumVv+S8muivneaMiemSriAtLT5cbiAgICAgICAgPGJ1dHRvbiAqbmdJZj1cInNob3dFeHRlbmRCdXR0b24gJiYgY2FuRXh0ZW5kXCIgY2xhc3M9XCJidG4gYnRuLWV4dGVuZFwiIChjbGljayk9XCJoYW5kbGVFeHRlbmQoKVwiIFtkaXNhYmxlZF09XCIhY2FuRXh0ZW5kXCIgdGl0bGU9XCLlu7bplb8zMOWIhumSn1wiPlxuICAgICAgICAgIOKelSDlu7bplb9cbiAgICAgICAgICA8c3BhbiAqbmdJZj1cInJlbWFpbmluZ0V4dGVuZHMgIT09IC0xXCIgY2xhc3M9XCJleHRlbmQtY291bnRcIj4gKHt7IHJlbWFpbmluZ0V4dGVuZHMgfX0pIDwvc3Bhbj5cbiAgICAgICAgPC9idXR0b24+XG5cbiAgICAgICAgPCEtLSDmmoLlgZwv5oGi5aSN5oyJ6ZKuIC0tPlxuICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgKm5nSWY9XCJzaG93UGF1c2VCdXR0b25cIlxuICAgICAgICAgIGNsYXNzPVwiYnRuIGJ0bi1wYXVzZVwiXG4gICAgICAgICAgW2NsYXNzLnBhdXNlZF09XCJpc1BhdXNlZFwiXG4gICAgICAgICAgKGNsaWNrKT1cImhhbmRsZVRvZ2dsZVBhdXNlKClcIlxuICAgICAgICAgIFt0aXRsZV09XCJpc1BhdXNlZCA/ICfmgaLlpI3oh6rliqjnmbvlh7onIDogJ+aaguWBnOiHquWKqOeZu+WHuidcIlxuICAgICAgICA+XG4gICAgICAgICAge3sgaXNQYXVzZWQgPyAn4pa277iPIOaBouWkjScgOiAn4o+477iPIOaaguWBnCcgfX1cbiAgICAgICAgPC9idXR0b24+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cblxuICAgIDwhLS0g6Ieq5a6a5LmJ5qih5p2/5qih5byP77yI5LiT5a625qih5byP77yJIC0tPlxuICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJjdXN0b21UZW1wbGF0ZVwiPlxuICAgICAgPG5nLWNvbnRhaW5lciBbbmdUZW1wbGF0ZU91dGxldF09XCJjdXN0b21UZW1wbGF0ZVwiIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ0ZW1wbGF0ZUNvbnRleHRcIj48L25nLWNvbnRhaW5lcj5cbiAgICA8L25nLWNvbnRhaW5lcj5cbiAgYCxcbiAgc3R5bGVzOiBbXG4gICAgYFxuICAgICAgLm5neC1hdXRvLWxvZ291dC1jb250YWluZXIge1xuICAgICAgICBkaXNwbGF5OiBpbmxpbmUtZmxleDtcbiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICAgICAgZ2FwOiAxMnB4O1xuICAgICAgICBwYWRkaW5nOiA4cHggMTJweDtcbiAgICAgICAgYmFja2dyb3VuZDogI2Y4ZjlmYTtcbiAgICAgICAgYm9yZGVyLXJhZGl1czogNnB4O1xuICAgICAgICBmb250LWZhbWlseTogLWFwcGxlLXN5c3RlbSwgQmxpbmtNYWNTeXN0ZW1Gb250LCAnU2Vnb2UgVUknLCBSb2JvdG8sIHNhbnMtc2VyaWY7XG4gICAgICB9XG5cbiAgICAgIC5jb3VudGRvd24tZGlzcGxheSB7XG4gICAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAgICAgIGdhcDogOHB4O1xuICAgICAgICBwYWRkaW5nOiA2cHggMTJweDtcbiAgICAgICAgYmFja2dyb3VuZDogd2hpdGU7XG4gICAgICAgIGJvcmRlci1yYWRpdXM6IDRweDtcbiAgICAgICAgZm9udC13ZWlnaHQ6IGJvbGQ7XG4gICAgICAgIGZvbnQtc2l6ZTogMTZweDtcbiAgICAgICAgdHJhbnNpdGlvbjogYWxsIDAuM3MgZWFzZTtcbiAgICAgIH1cblxuICAgICAgLmNvdW50ZG93bi1kaXNwbGF5Lndhcm5pbmcge1xuICAgICAgICBiYWNrZ3JvdW5kOiAjZmZmM2NkO1xuICAgICAgICBjb2xvcjogIzg1NjQwNDtcbiAgICAgICAgYW5pbWF0aW9uOiBibGluay13YXJuaW5nIDFzIGVhc2UtaW4tb3V0IGluZmluaXRlO1xuICAgICAgfVxuXG4gICAgICAuY291bnRkb3duLWRpc3BsYXkudXJnZW50IHtcbiAgICAgICAgYmFja2dyb3VuZDogI2Y4ZDdkYTtcbiAgICAgICAgY29sb3I6ICM3MjFjMjQ7XG4gICAgICAgIGFuaW1hdGlvbjogYmxpbmstdXJnZW50IDAuNXMgZWFzZS1pbi1vdXQgaW5maW5pdGU7XG4gICAgICB9XG5cbiAgICAgIC5jb3VudGRvd24tZGlzcGxheS5wYXVzZWQge1xuICAgICAgICBvcGFjaXR5OiAwLjY7XG4gICAgICAgIGJhY2tncm91bmQ6ICNlOWVjZWY7XG4gICAgICB9XG5cbiAgICAgIC5pY29uIHtcbiAgICAgICAgZm9udC1zaXplOiAxOHB4O1xuICAgICAgfVxuXG4gICAgICAudGltZSB7XG4gICAgICAgIG1pbi13aWR0aDogNTBweDtcbiAgICAgICAgdGV4dC1hbGlnbjogY2VudGVyO1xuICAgICAgfVxuXG4gICAgICAucGF1c2UtbGFiZWwge1xuICAgICAgICBmb250LXNpemU6IDEycHg7XG4gICAgICAgIGNvbG9yOiAjNmM3NTdkO1xuICAgICAgICBmb250LXdlaWdodDogbm9ybWFsO1xuICAgICAgfVxuXG4gICAgICAuY29udHJvbHMge1xuICAgICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgICBnYXA6IDhweDtcbiAgICAgIH1cblxuICAgICAgLmJ0biB7XG4gICAgICAgIHBhZGRpbmc6IDZweCAxMnB4O1xuICAgICAgICBmb250LXNpemU6IDEzcHg7XG4gICAgICAgIGJvcmRlcjogbm9uZTtcbiAgICAgICAgYm9yZGVyLXJhZGl1czogNHB4O1xuICAgICAgICBjdXJzb3I6IHBvaW50ZXI7XG4gICAgICAgIHRyYW5zaXRpb246IGFsbCAwLjJzO1xuICAgICAgICBmb250LXdlaWdodDogNTAwO1xuICAgICAgfVxuXG4gICAgICAuYnRuLWV4dGVuZCB7XG4gICAgICAgIGJhY2tncm91bmQ6ICMyOGE3NDU7XG4gICAgICAgIGNvbG9yOiB3aGl0ZTtcbiAgICAgIH1cblxuICAgICAgLmJ0bi1leHRlbmQ6aG92ZXI6bm90KDpkaXNhYmxlZCkge1xuICAgICAgICBiYWNrZ3JvdW5kOiAjMjE4ODM4O1xuICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLTFweCk7XG4gICAgICB9XG5cbiAgICAgIC5idG4tZXh0ZW5kOmRpc2FibGVkIHtcbiAgICAgICAgYmFja2dyb3VuZDogI2NjYztcbiAgICAgICAgY3Vyc29yOiBub3QtYWxsb3dlZDtcbiAgICAgICAgb3BhY2l0eTogMC42O1xuICAgICAgfVxuXG4gICAgICAuYnRuLXBhdXNlIHtcbiAgICAgICAgYmFja2dyb3VuZDogIzAwN2JmZjtcbiAgICAgICAgY29sb3I6IHdoaXRlO1xuICAgICAgfVxuXG4gICAgICAuYnRuLXBhdXNlOmhvdmVyIHtcbiAgICAgICAgYmFja2dyb3VuZDogIzAwNTZiMztcbiAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKC0xcHgpO1xuICAgICAgfVxuXG4gICAgICAuYnRuLXBhdXNlLnBhdXNlZCB7XG4gICAgICAgIGJhY2tncm91bmQ6ICNmZmMxMDc7XG4gICAgICAgIGNvbG9yOiAjMjEyNTI5O1xuICAgICAgfVxuXG4gICAgICAuZXh0ZW5kLWNvdW50IHtcbiAgICAgICAgZm9udC1zaXplOiAxMXB4O1xuICAgICAgICBvcGFjaXR5OiAwLjk7XG4gICAgICB9XG5cbiAgICAgIEBrZXlmcmFtZXMgYmxpbmstd2FybmluZyB7XG4gICAgICAgIDAlLFxuICAgICAgICAxMDAlIHtcbiAgICAgICAgICBvcGFjaXR5OiAxO1xuICAgICAgICB9XG4gICAgICAgIDUwJSB7XG4gICAgICAgICAgb3BhY2l0eTogMC43O1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIEBrZXlmcmFtZXMgYmxpbmstdXJnZW50IHtcbiAgICAgICAgMCUsXG4gICAgICAgIDEwMCUge1xuICAgICAgICAgIG9wYWNpdHk6IDE7XG4gICAgICAgICAgdHJhbnNmb3JtOiBzY2FsZSgxKTtcbiAgICAgICAgfVxuICAgICAgICA1MCUge1xuICAgICAgICAgIG9wYWNpdHk6IDAuNjtcbiAgICAgICAgICB0cmFuc2Zvcm06IHNjYWxlKDEuMDUpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgYFxuICBdXG59KVxuZXhwb3J0IGNsYXNzIEF1dG9Mb2dvdXRDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSB7XG4gIC8vID09PT09PT09PT09PT09PT09PT09IOi+k+WFpeWxnuaApyA9PT09PT09PT09PT09PT09PT09PVxuXG4gIC8qKlxuICAgKiDmmK/lkKbmmL7npLrlu7bplb/mjInpkq5cbiAgICovXG4gIEBJbnB1dCgpIHNob3dFeHRlbmRCdXR0b24gPSB0cnVlO1xuXG4gIC8qKlxuICAgKiDmmK/lkKbmmL7npLrmmoLlgZzmjInpkq5cbiAgICovXG4gIEBJbnB1dCgpIHNob3dQYXVzZUJ1dHRvbiA9IHRydWU7XG5cbiAgLyoqXG4gICAqIOW7tumVv+eahOenkuaVsO+8iOm7mOiupDMw5YiG6ZKf77yJXG4gICAqL1xuICBASW5wdXQoKSBleHRlbmRTZWNvbmRzID0gMTgwMDtcblxuICAvKipcbiAgICog6Ieq5a6a5LmJ6YWN572u77yI5Lya6KaG55uW5qih5Z2X6YWN572u77yJXG4gICAqL1xuICBASW5wdXQoKSBjb25maWc/OiBQYXJ0aWFsPEF1dG9Mb2dvdXRDb25maWc+O1xuXG4gIC8qKlxuICAgKiDoh6rlrprkuYnmqKHmnb/vvIjkuJPlrrbmqKHlvI/vvIlcbiAgICovXG4gIEBJbnB1dCgpIGN1c3RvbVRlbXBsYXRlPzogVGVtcGxhdGVSZWY8YW55PjtcblxuICAvLyA9PT09PT09PT09PT09PT09PT09PSDovpPlh7rkuovku7YgPT09PT09PT09PT09PT09PT09PT1cblxuICAvKipcbiAgICog6K2m5ZGK5LqL5Lu2XG4gICAqL1xuICBAT3V0cHV0KCkgb25XYXJuaW5nID0gbmV3IEV2ZW50RW1pdHRlcjxudW1iZXI+KCk7XG5cbiAgLyoqXG4gICAqIOi2heaXtuS6i+S7tlxuICAgKi9cbiAgQE91dHB1dCgpIG9uVGltZW91dCA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcblxuICAvKipcbiAgICog5bu26ZW/5oiQ5Yqf5LqL5Lu2XG4gICAqL1xuICBAT3V0cHV0KCkgb25FeHRlbmRlZCA9IG5ldyBFdmVudEVtaXR0ZXI8bnVtYmVyPigpO1xuXG4gIC8qKlxuICAgKiDmmoLlgZzkuovku7ZcbiAgICovXG4gIEBPdXRwdXQoKSBvblBhdXNlZCA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcblxuICAvKipcbiAgICog5oGi5aSN5LqL5Lu2XG4gICAqL1xuICBAT3V0cHV0KCkgb25SZXN1bWVkID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xuXG4gIC8vID09PT09PT09PT09PT09PT09PT09IOWGhemDqOeKtuaAgSA9PT09PT09PT09PT09PT09PT09PVxuXG4gIHByaXZhdGUgc3Vic2NyaXB0aW9uOiBTdWJzY3JpcHRpb24gfCBudWxsID0gbnVsbDtcbiAgY291bnRkb3duID0gJzAwOjAwJztcbiAgaXNXYXJuaW5nID0gZmFsc2U7XG4gIGlzVXJnZW50ID0gZmFsc2U7XG4gIGlzUGF1c2VkID0gZmFsc2U7XG4gIGNhbkV4dGVuZCA9IHRydWU7XG4gIHJlbWFpbmluZ0V4dGVuZHMgPSAtMTtcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGF1dG9Mb2dvdXQ6IEF1dG9Mb2dvdXRTZXJ2aWNlKSB7fVxuXG4gIG5nT25Jbml0KCkge1xuICAgIC8vIOWmguaenOaPkOS+m+S6huiHquWumuS5iemFjee9ru+8jOWQr+WKqOebkeaOp1xuICAgIGlmICh0aGlzLmNvbmZpZykge1xuICAgICAgdGhpcy5hdXRvTG9nb3V0LnN0YXJ0TW9uaXRvcmluZyh0aGlzLmNvbmZpZyk7XG4gICAgfVxuXG4gICAgLy8g6K6i6ZiF5YCS6K6h5pe2XG4gICAgdGhpcy5zdWJzY3JpcHRpb24gPSB0aGlzLmF1dG9Mb2dvdXQuZ2V0Q291bnRkb3duKCkuc3Vic2NyaWJlKChzZWNvbmRzKSA9PiB7XG4gICAgICB0aGlzLmNvdW50ZG93biA9IHRoaXMuYXV0b0xvZ291dC5mb3JtYXRDb3VudGRvd24oc2Vjb25kcyk7XG4gICAgICB0aGlzLmlzV2FybmluZyA9IHRoaXMuYXV0b0xvZ291dC5pc1dhcm5pbmdTdGF0ZShzZWNvbmRzKTtcbiAgICAgIHRoaXMuaXNVcmdlbnQgPSB0aGlzLmF1dG9Mb2dvdXQuaXNVcmdlbnRTdGF0ZShzZWNvbmRzKTtcblxuICAgICAgLy8g6Kem5Y+R6K2m5ZGK5LqL5Lu2XG4gICAgICBjb25zdCB3YXJuaW5nVGltZSA9IHRoaXMuY29uZmlnPy53YXJuaW5nVGltZSB8fCAzMDtcbiAgICAgIGlmIChzZWNvbmRzID09PSB3YXJuaW5nVGltZSkge1xuICAgICAgICB0aGlzLm9uV2FybmluZy5lbWl0KHNlY29uZHMpO1xuICAgICAgfVxuXG4gICAgICAvLyDop6blj5HotoXml7bkuovku7ZcbiAgICAgIGlmIChzZWNvbmRzIDw9IDApIHtcbiAgICAgICAgdGhpcy5vblRpbWVvdXQuZW1pdCgpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgLy8g5a6a5pyf5qOA5p+l54q25oCBXG4gICAgc2V0SW50ZXJ2YWwoKCkgPT4ge1xuICAgICAgdGhpcy51cGRhdGVTdGF0dXMoKTtcbiAgICB9LCAxMDAwKTtcblxuICAgIHRoaXMudXBkYXRlU3RhdHVzKCk7XG4gIH1cblxuICBuZ09uRGVzdHJveSgpIHtcbiAgICBpZiAodGhpcy5zdWJzY3JpcHRpb24pIHtcbiAgICAgIHRoaXMuc3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgfVxuICB9XG5cbiAgLy8gPT09PT09PT09PT09PT09PT09PT0g5YWs5byA5pa55rOVID09PT09PT09PT09PT09PT09PT09XG5cbiAgLyoqXG4gICAqIOW7tumVv+S8muivnVxuICAgKi9cbiAgZXh0ZW5kU2Vzc2lvbigpOiB2b2lkIHtcbiAgICB0aGlzLmhhbmRsZUV4dGVuZCgpO1xuICB9XG5cbiAgLyoqXG4gICAqIOaaguWBnFxuICAgKi9cbiAgcGF1c2UoKTogdm9pZCB7XG4gICAgdGhpcy5oYW5kbGVUb2dnbGVQYXVzZSgpO1xuICB9XG5cbiAgLyoqXG4gICAqIOaBouWkjVxuICAgKi9cbiAgcmVzdW1lKCk6IHZvaWQge1xuICAgIHRoaXMuaGFuZGxlVG9nZ2xlUGF1c2UoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiDojrflj5bmqKHmnb/kuIrkuIvmlofvvIjnlKjkuo7oh6rlrprkuYnmqKHmnb/vvIlcbiAgICovXG4gIGdldCB0ZW1wbGF0ZUNvbnRleHQoKTogYW55IHtcbiAgICByZXR1cm4ge1xuICAgICAgY291bnRkb3duOiB0aGlzLmNvdW50ZG93bixcbiAgICAgIGlzV2FybmluZzogdGhpcy5pc1dhcm5pbmcsXG4gICAgICBpc1VyZ2VudDogdGhpcy5pc1VyZ2VudCxcbiAgICAgIGlzUGF1c2VkOiB0aGlzLmlzUGF1c2VkLFxuICAgICAgY2FuRXh0ZW5kOiB0aGlzLmNhbkV4dGVuZCxcbiAgICAgIHJlbWFpbmluZ0V4dGVuZHM6IHRoaXMucmVtYWluaW5nRXh0ZW5kcyxcbiAgICAgIGV4dGVuZFNlc3Npb246ICgpID0+IHRoaXMuaGFuZGxlRXh0ZW5kKCksXG4gICAgICB0b2dnbGVQYXVzZTogKCkgPT4gdGhpcy5oYW5kbGVUb2dnbGVQYXVzZSgpLFxuICAgICAgZm9ybWF0Q291bnRkb3duOiAoc2Vjb25kczogbnVtYmVyKSA9PiB0aGlzLmF1dG9Mb2dvdXQuZm9ybWF0Q291bnRkb3duKHNlY29uZHMpXG4gICAgfTtcbiAgfVxuXG4gIC8vID09PT09PT09PT09PT09PT09PT09IOWGhemDqOaWueazlSA9PT09PT09PT09PT09PT09PT09PVxuXG4gIHByaXZhdGUgdXBkYXRlU3RhdHVzKCk6IHZvaWQge1xuICAgIHRoaXMuaXNQYXVzZWQgPSB0aGlzLmF1dG9Mb2dvdXQuaXNBdXRvTG9nb3V0UGF1c2VkKCk7XG4gICAgdGhpcy5jYW5FeHRlbmQgPSB0aGlzLmF1dG9Mb2dvdXQuY2FuRXh0ZW5kU2Vzc2lvbigpO1xuICAgIHRoaXMucmVtYWluaW5nRXh0ZW5kcyA9IHRoaXMuYXV0b0xvZ291dC5nZXRSZW1haW5pbmdFeHRlbmRUaW1lcygpO1xuICB9XG5cbiAgLyoqXG4gICAqIOWkhOeQhuW7tumVv+S8muivne+8iOaooeadv+iwg+eUqO+8iVxuICAgKi9cbiAgaGFuZGxlRXh0ZW5kKCk6IHZvaWQge1xuICAgIGNvbnN0IHN1Y2Nlc3MgPSB0aGlzLmF1dG9Mb2dvdXQuZXh0ZW5kU2Vzc2lvbih0aGlzLmV4dGVuZFNlY29uZHMpO1xuICAgIGlmIChzdWNjZXNzKSB7XG4gICAgICB0aGlzLm9uRXh0ZW5kZWQuZW1pdCh0aGlzLmV4dGVuZFNlY29uZHMpO1xuICAgIH1cbiAgICB0aGlzLnVwZGF0ZVN0YXR1cygpO1xuICB9XG5cbiAgLyoqXG4gICAqIOWkhOeQhuaaguWBnC/mgaLlpI3liIfmjaLvvIjmqKHmnb/osIPnlKjvvIlcbiAgICovXG4gIGhhbmRsZVRvZ2dsZVBhdXNlKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmlzUGF1c2VkKSB7XG4gICAgICB0aGlzLmF1dG9Mb2dvdXQucmVzdW1lKCk7XG4gICAgICB0aGlzLm9uUmVzdW1lZC5lbWl0KCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuYXV0b0xvZ291dC5wYXVzZSgpO1xuICAgICAgdGhpcy5vblBhdXNlZC5lbWl0KCk7XG4gICAgfVxuICAgIHRoaXMudXBkYXRlU3RhdHVzKCk7XG4gIH1cbn1cbiJdfQ==
@@ -0,0 +1,30 @@
1
+ import { __decorate } from "tslib";
2
+ import { NgModule } from '@angular/core';
3
+ import { CommonModule } from '@angular/common';
4
+ import { AutoLogoutComponent } from './auto-logout.component';
5
+ /**
6
+ * Auto logout module
7
+ * Note: Service uses providedIn: 'root', module only declares/exports component
8
+ */
9
+ var AutoLogoutModule = /** @class */ (function () {
10
+ function AutoLogoutModule() {
11
+ }
12
+ AutoLogoutModule_1 = AutoLogoutModule;
13
+ AutoLogoutModule.forRoot = function () {
14
+ return {
15
+ ngModule: AutoLogoutModule_1,
16
+ providers: []
17
+ };
18
+ };
19
+ var AutoLogoutModule_1;
20
+ AutoLogoutModule = AutoLogoutModule_1 = __decorate([
21
+ NgModule({
22
+ declarations: [AutoLogoutComponent],
23
+ imports: [CommonModule],
24
+ exports: [AutoLogoutComponent]
25
+ })
26
+ ], AutoLogoutModule);
27
+ return AutoLogoutModule;
28
+ }());
29
+ export { AutoLogoutModule };
30
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXV0by1sb2dvdXQubW9kdWxlLmpzIiwic291cmNlUm9vdCI6Im5nOi8vbmd4LWF1dG8tbG9nb3V0LyIsInNvdXJjZXMiOlsibGliL2F1dG8tbG9nb3V0Lm1vZHVsZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUFFLFFBQVEsRUFBdUIsTUFBTSxlQUFlLENBQUM7QUFDOUQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBRTlEOzs7R0FHRztBQU1IO0lBQUE7SUFPQSxDQUFDO3lCQVBZLGdCQUFnQjtJQUNwQix3QkFBTyxHQUFkO1FBQ0UsT0FBTztZQUNMLFFBQVEsRUFBRSxrQkFBZ0I7WUFDMUIsU0FBUyxFQUFFLEVBQUU7U0FDZCxDQUFDO0lBQ0osQ0FBQzs7SUFOVSxnQkFBZ0I7UUFMNUIsUUFBUSxDQUFDO1lBQ1IsWUFBWSxFQUFFLENBQUMsbUJBQW1CLENBQUM7WUFDbkMsT0FBTyxFQUFFLENBQUMsWUFBWSxDQUFDO1lBQ3ZCLE9BQU8sRUFBRSxDQUFDLG1CQUFtQixDQUFDO1NBQy9CLENBQUM7T0FDVyxnQkFBZ0IsQ0FPNUI7SUFBRCx1QkFBQztDQUFBLEFBUEQsSUFPQztTQVBZLGdCQUFnQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE5nTW9kdWxlLCBNb2R1bGVXaXRoUHJvdmlkZXJzIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgQXV0b0xvZ291dENvbXBvbmVudCB9IGZyb20gJy4vYXV0by1sb2dvdXQuY29tcG9uZW50JztcblxuLyoqXG4gKiBBdXRvIGxvZ291dCBtb2R1bGVcbiAqIE5vdGU6IFNlcnZpY2UgdXNlcyBwcm92aWRlZEluOiAncm9vdCcsIG1vZHVsZSBvbmx5IGRlY2xhcmVzL2V4cG9ydHMgY29tcG9uZW50XG4gKi9cbkBOZ01vZHVsZSh7XG4gIGRlY2xhcmF0aW9uczogW0F1dG9Mb2dvdXRDb21wb25lbnRdLFxuICBpbXBvcnRzOiBbQ29tbW9uTW9kdWxlXSxcbiAgZXhwb3J0czogW0F1dG9Mb2dvdXRDb21wb25lbnRdXG59KVxuZXhwb3J0IGNsYXNzIEF1dG9Mb2dvdXRNb2R1bGUge1xuICBzdGF0aWMgZm9yUm9vdCgpOiBNb2R1bGVXaXRoUHJvdmlkZXJzPEF1dG9Mb2dvdXRNb2R1bGU+IHtcbiAgICByZXR1cm4ge1xuICAgICAgbmdNb2R1bGU6IEF1dG9Mb2dvdXRNb2R1bGUsXG4gICAgICBwcm92aWRlcnM6IFtdXG4gICAgfTtcbiAgfVxufVxuIl19