@factor_ec/ui 1.0.18 → 2.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/README.md +1 -1
- package/esm2020/lib/io/avatar/avatar.component.mjs +74 -0
- package/esm2020/lib/io/icon/icon.component.mjs +97 -0
- package/esm2020/lib/io/image/image.component.mjs +80 -0
- package/esm2020/lib/io/io.module.mjs +81 -0
- package/esm2020/lib/io/listview/listview.component.mjs +11 -0
- package/esm2020/lib/io/message/message.component.mjs +30 -0
- package/esm2020/lib/io/message-content/message-content.component.mjs +19 -0
- package/esm2020/lib/io/message.service.mjs +58 -0
- package/esm2020/lib/io/observe-intersecting.directive.mjs +43 -0
- package/esm2020/lib/io/progress/progress.component.mjs +42 -0
- package/esm2020/lib/io/progress.service.mjs +48 -0
- package/esm2020/lib/io/rating/rating.component.mjs +60 -0
- package/esm2020/lib/io/timeline/timeline.component.mjs +101 -0
- package/esm2020/lib/models/task.mjs +2 -0
- package/esm2020/lib/navigation/list/list.component.mjs +7 -7
- package/esm2020/lib/navigation/navbar/navbar.component.mjs +11 -13
- package/esm2020/lib/navigation/navigation.module.mjs +18 -18
- package/esm2020/lib/navigation/searchbox/searchbox.component.mjs +7 -20
- package/esm2020/lib/navigation/toolbar/toolbar.component.mjs +10 -10
- package/esm2020/lib/ui.module.mjs +12 -27
- package/esm2020/public-api.mjs +15 -13
- package/fesm2015/factor_ec-ui.mjs +248 -192
- package/fesm2015/factor_ec-ui.mjs.map +1 -1
- package/fesm2020/factor_ec-ui.mjs +248 -192
- package/fesm2020/factor_ec-ui.mjs.map +1 -1
- package/lib/{display → io}/avatar/avatar.component.d.ts +2 -3
- package/lib/{display → io}/icon/icon.component.d.ts +2 -3
- package/lib/{display → io}/image/image.component.d.ts +3 -3
- package/lib/io/io.module.d.ts +20 -0
- package/lib/io/listview/listview.component.d.ts +5 -0
- package/lib/{display → io}/message/message.component.d.ts +3 -3
- package/lib/io/message-content/message-content.component.d.ts +7 -0
- package/lib/{display → io}/message.service.d.ts +1 -1
- package/lib/{display → io}/observe-intersecting.directive.d.ts +3 -3
- package/lib/{display → io}/progress/progress.component.d.ts +2 -3
- package/lib/{display → io}/progress.service.d.ts +3 -3
- package/lib/{inputs → io}/rating/rating.component.d.ts +2 -4
- package/lib/io/timeline/timeline.component.d.ts +18 -0
- package/lib/models/task.d.ts +10 -0
- package/lib/navigation/list/list.component.d.ts +1 -1
- package/lib/navigation/navbar/navbar.component.d.ts +3 -7
- package/lib/navigation/navigation.module.d.ts +4 -4
- package/lib/navigation/searchbox/searchbox.component.d.ts +5 -5
- package/lib/navigation/toolbar/toolbar.component.d.ts +2 -3
- package/lib/ui.module.d.ts +3 -7
- package/package.json +5 -5
- package/public-api.d.ts +14 -12
- package/esm2020/lib/display/avatar/avatar.component.mjs +0 -74
- package/esm2020/lib/display/content/content.component.mjs +0 -19
- package/esm2020/lib/display/display.module.mjs +0 -66
- package/esm2020/lib/display/icon/icon.component.mjs +0 -97
- package/esm2020/lib/display/image/image.component.mjs +0 -80
- package/esm2020/lib/display/message/message.component.mjs +0 -30
- package/esm2020/lib/display/message.service.mjs +0 -58
- package/esm2020/lib/display/observe-intersecting.directive.mjs +0 -43
- package/esm2020/lib/display/progress/progress.component.mjs +0 -42
- package/esm2020/lib/display/progress.service.mjs +0 -50
- package/esm2020/lib/inputs/inputs.module.mjs +0 -24
- package/esm2020/lib/inputs/rating/rating.component.mjs +0 -73
- package/esm2020/lib/models/module-configuration.mjs +0 -2
- package/lib/display/content/content.component.d.ts +0 -7
- package/lib/display/display.module.d.ts +0 -17
- package/lib/inputs/inputs.module.d.ts +0 -8
- package/lib/models/module-configuration.d.ts +0 -6
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import { Component, HostBinding, Input } from '@angular/core';
|
|
2
|
+
import * as i0 from "@angular/core";
|
|
3
|
+
import * as i1 from "@angular/common";
|
|
4
|
+
export class ProgressComponent {
|
|
5
|
+
constructor() {
|
|
6
|
+
this.class = '';
|
|
7
|
+
this.mode = 'indeterminate';
|
|
8
|
+
this.overlay = false;
|
|
9
|
+
}
|
|
10
|
+
ngOnInit() {
|
|
11
|
+
this.value = 0;
|
|
12
|
+
}
|
|
13
|
+
get hostClasses() {
|
|
14
|
+
return [
|
|
15
|
+
'ft-progress',
|
|
16
|
+
this.overlay ? 'ft-progress--overlay' : '',
|
|
17
|
+
this.class
|
|
18
|
+
].join(' ');
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
ProgressComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.0.2", ngImport: i0, type: ProgressComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
22
|
+
ProgressComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.0.2", type: ProgressComponent, selector: "ft-progress", inputs: { class: "class", color: "color", mode: "mode", overlay: "overlay", size: "size", value: "value" }, host: { properties: { "class": "this.hostClasses" } }, ngImport: i0, template: "<svg [ngStyle]=\"{'--bar-color': color}\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 100 100\"\n preserveAspectRatio=\"xMidYMid\">\n <circle class=\"ft-track\" cx=\"50\" cy=\"50\" r=\"40\" />\n <circle class=\"ft-bar\" [ngClass]=\"mode\" cx=\"50\" cy=\"50\" r=\"40\"\n [ngStyle]=\"{'stroke-dashoffset': mode=='determinate'? 'calc((3.14159265 * 40 * 2 * (100 - '+value+')) / 100)' : null}\">\n </circle>\n</svg>", styles: [":host{--track-color: rgba(0, 0, 0, .08);--bar-color: var(--primary);line-height:0;display:inline-block}:host.ft-progress--1{font-size:1rem}:host.ft-progress--2{font-size:1.5rem}:host.ft-progress--3{font-size:2rem}:host.ft-progress--4{font-size:3rem}:host.ft-progress--5{font-size:4.5rem}:host.ft-progress--6{font-size:8rem}:host.ft-progress--7{font-size:16rem}:host.ft-progress--8{font-size:32rem}:host.ft-progress--overlay{position:fixed;display:flex;align-items:center;justify-content:center;pointer-events:none;z-index:var(--z-index-modal, 1000);inset:0;font-size:42px}:host.ft-progress--overlay svg{background:rgba(255,255,255,.6);-webkit-backdrop-filter:saturate(50%) blur(3px);backdrop-filter:saturate(50%) blur(3px);box-shadow:0 3px 3px -2px #0003,0 3px 4px #00000024,0 1px 8px #0000001f;border-radius:100vh;padding:.3125rem;animation:progress-reveal .2s;animation-fill-mode:forwards}:host.ft-progress--overlay svg .track{display:none}svg{width:1em;height:1em;vertical-align:middle}svg .ft-track{fill:none;stroke-width:10;stroke:var(--track-color)}svg .ft-bar{fill:none;stroke-opacity:.9;stroke-width:6;stroke:var(--bar-color)}svg .ft-bar.ft-bar--indeterminate{animation:progress-rotation 2s infinite linear}svg .ft-bar.ft-bar--determinate{stroke-dasharray:251.327412288}@keyframes progress-reveal{0%{transform:translateY(-100%);opacity:0}to{transform:translateY(0);opacity:1}}@keyframes progress-rotation{0%{stroke-dashoffset:0;stroke-dasharray:150.6 100.4}50%{stroke-dasharray:1 250}to{stroke-dashoffset:502;stroke-dasharray:150.6 100.4}}\n"], dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }] });
|
|
23
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.2", ngImport: i0, type: ProgressComponent, decorators: [{
|
|
24
|
+
type: Component,
|
|
25
|
+
args: [{ selector: 'ft-progress', template: "<svg [ngStyle]=\"{'--bar-color': color}\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 100 100\"\n preserveAspectRatio=\"xMidYMid\">\n <circle class=\"ft-track\" cx=\"50\" cy=\"50\" r=\"40\" />\n <circle class=\"ft-bar\" [ngClass]=\"mode\" cx=\"50\" cy=\"50\" r=\"40\"\n [ngStyle]=\"{'stroke-dashoffset': mode=='determinate'? 'calc((3.14159265 * 40 * 2 * (100 - '+value+')) / 100)' : null}\">\n </circle>\n</svg>", styles: [":host{--track-color: rgba(0, 0, 0, .08);--bar-color: var(--primary);line-height:0;display:inline-block}:host.ft-progress--1{font-size:1rem}:host.ft-progress--2{font-size:1.5rem}:host.ft-progress--3{font-size:2rem}:host.ft-progress--4{font-size:3rem}:host.ft-progress--5{font-size:4.5rem}:host.ft-progress--6{font-size:8rem}:host.ft-progress--7{font-size:16rem}:host.ft-progress--8{font-size:32rem}:host.ft-progress--overlay{position:fixed;display:flex;align-items:center;justify-content:center;pointer-events:none;z-index:var(--z-index-modal, 1000);inset:0;font-size:42px}:host.ft-progress--overlay svg{background:rgba(255,255,255,.6);-webkit-backdrop-filter:saturate(50%) blur(3px);backdrop-filter:saturate(50%) blur(3px);box-shadow:0 3px 3px -2px #0003,0 3px 4px #00000024,0 1px 8px #0000001f;border-radius:100vh;padding:.3125rem;animation:progress-reveal .2s;animation-fill-mode:forwards}:host.ft-progress--overlay svg .track{display:none}svg{width:1em;height:1em;vertical-align:middle}svg .ft-track{fill:none;stroke-width:10;stroke:var(--track-color)}svg .ft-bar{fill:none;stroke-opacity:.9;stroke-width:6;stroke:var(--bar-color)}svg .ft-bar.ft-bar--indeterminate{animation:progress-rotation 2s infinite linear}svg .ft-bar.ft-bar--determinate{stroke-dasharray:251.327412288}@keyframes progress-reveal{0%{transform:translateY(-100%);opacity:0}to{transform:translateY(0);opacity:1}}@keyframes progress-rotation{0%{stroke-dashoffset:0;stroke-dasharray:150.6 100.4}50%{stroke-dasharray:1 250}to{stroke-dashoffset:502;stroke-dasharray:150.6 100.4}}\n"] }]
|
|
26
|
+
}], ctorParameters: function () { return []; }, propDecorators: { class: [{
|
|
27
|
+
type: Input
|
|
28
|
+
}], color: [{
|
|
29
|
+
type: Input
|
|
30
|
+
}], mode: [{
|
|
31
|
+
type: Input
|
|
32
|
+
}], overlay: [{
|
|
33
|
+
type: Input
|
|
34
|
+
}], size: [{
|
|
35
|
+
type: Input
|
|
36
|
+
}], value: [{
|
|
37
|
+
type: Input
|
|
38
|
+
}], hostClasses: [{
|
|
39
|
+
type: HostBinding,
|
|
40
|
+
args: ['class']
|
|
41
|
+
}] } });
|
|
42
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvZ3Jlc3MuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdWkvc3JjL2xpYi9pby9wcm9ncmVzcy9wcm9ncmVzcy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy91aS9zcmMvbGliL2lvL3Byb2dyZXNzL3Byb2dyZXNzLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsV0FBVyxFQUFFLEtBQUssRUFBRSxNQUFNLGVBQWUsQ0FBQzs7O0FBTzlELE1BQU0sT0FBTyxpQkFBaUI7SUFRNUI7UUFQUyxVQUFLLEdBQVcsRUFBRSxDQUFDO1FBRW5CLFNBQUksR0FBb0MsZUFBZSxDQUFDO1FBQ3hELFlBQU8sR0FBWSxLQUFLLENBQUM7SUFJbEIsQ0FBQztJQUVqQixRQUFRO1FBQ04sSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUM7SUFDakIsQ0FBQztJQUNELElBQ0ksV0FBVztRQUNiLE9BQU87WUFDTCxhQUFhO1lBQ2IsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsc0JBQXNCLENBQUMsQ0FBQyxDQUFDLEVBQUU7WUFDMUMsSUFBSSxDQUFDLEtBQUs7U0FDWCxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNkLENBQUM7OzhHQXBCVSxpQkFBaUI7a0dBQWpCLGlCQUFpQixzTkNQOUIsdWJBTU07MkZEQ08saUJBQWlCO2tCQUw3QixTQUFTOytCQUNFLGFBQWE7MEVBS2QsS0FBSztzQkFBYixLQUFLO2dCQUNHLEtBQUs7c0JBQWIsS0FBSztnQkFDRyxJQUFJO3NCQUFaLEtBQUs7Z0JBQ0csT0FBTztzQkFBZixLQUFLO2dCQUNHLElBQUk7c0JBQVosS0FBSztnQkFDRyxLQUFLO3NCQUFiLEtBQUs7Z0JBUUYsV0FBVztzQkFEZCxXQUFXO3VCQUFDLE9BQU8iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIEhvc3RCaW5kaW5nLCBJbnB1dCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdmdC1wcm9ncmVzcycsXG4gIHRlbXBsYXRlVXJsOiAnLi9wcm9ncmVzcy5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL3Byb2dyZXNzLmNvbXBvbmVudC5zY3NzJ11cbn0pXG5leHBvcnQgY2xhc3MgUHJvZ3Jlc3NDb21wb25lbnQge1xuICBASW5wdXQoKSBjbGFzczogc3RyaW5nID0gJyc7XG4gIEBJbnB1dCgpIGNvbG9yITogc3RyaW5nO1xuICBASW5wdXQoKSBtb2RlOiAnZGV0ZXJtaW5hdGUnIHwgJ2luZGV0ZXJtaW5hdGUnID0gJ2luZGV0ZXJtaW5hdGUnO1xuICBASW5wdXQoKSBvdmVybGF5OiBib29sZWFuID0gZmFsc2U7XG4gIEBJbnB1dCgpIHNpemUhOiBudW1iZXI7XG4gIEBJbnB1dCgpIHZhbHVlITogbnVtYmVyO1xuXG4gIGNvbnN0cnVjdG9yKCkgeyB9XG5cbiAgbmdPbkluaXQoKSB7XG4gICAgdGhpcy52YWx1ZSA9IDA7XG4gIH1cbiAgQEhvc3RCaW5kaW5nKCdjbGFzcycpXG4gIGdldCBob3N0Q2xhc3NlcygpOiBzdHJpbmcge1xuICAgIHJldHVybiBbXG4gICAgICAnZnQtcHJvZ3Jlc3MnLFxuICAgICAgdGhpcy5vdmVybGF5ID8gJ2Z0LXByb2dyZXNzLS1vdmVybGF5JyA6ICcnLFxuICAgICAgdGhpcy5jbGFzc1xuICAgIF0uam9pbignICcpO1xuICB9XG59XG4iLCI8c3ZnIFtuZ1N0eWxlXT1cInsnLS1iYXItY29sb3InOiBjb2xvcn1cIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgdmlld0JveD1cIjAgMCAxMDAgMTAwXCJcbiAgICBwcmVzZXJ2ZUFzcGVjdFJhdGlvPVwieE1pZFlNaWRcIj5cbiAgICA8Y2lyY2xlIGNsYXNzPVwiZnQtdHJhY2tcIiBjeD1cIjUwXCIgY3k9XCI1MFwiIHI9XCI0MFwiIC8+XG4gICAgPGNpcmNsZSBjbGFzcz1cImZ0LWJhclwiIFtuZ0NsYXNzXT1cIm1vZGVcIiBjeD1cIjUwXCIgY3k9XCI1MFwiIHI9XCI0MFwiXG4gICAgICAgIFtuZ1N0eWxlXT1cInsnc3Ryb2tlLWRhc2hvZmZzZXQnOiBtb2RlPT0nZGV0ZXJtaW5hdGUnPyAnY2FsYygoMy4xNDE1OTI2NSAqIDQwICogMiAqICgxMDAgLSAnK3ZhbHVlKycpKSAvIDEwMCknIDogbnVsbH1cIj5cbiAgICA8L2NpcmNsZT5cbjwvc3ZnPiJdfQ==
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
import { ApplicationRef, Injectable } from '@angular/core';
|
|
2
|
+
import { ProgressComponent } from './progress/progress.component';
|
|
3
|
+
import * as i0 from "@angular/core";
|
|
4
|
+
export class ProgressService {
|
|
5
|
+
constructor(viewContainerRef, injector) {
|
|
6
|
+
this.viewContainerRef = viewContainerRef;
|
|
7
|
+
this.injector = injector;
|
|
8
|
+
}
|
|
9
|
+
show() {
|
|
10
|
+
if (!this.componentRef) {
|
|
11
|
+
this.appRef = this.injector.get(ApplicationRef);
|
|
12
|
+
// 1. Create a component reference from the component
|
|
13
|
+
this.componentRef = this.viewContainerRef.createComponent(ProgressComponent);
|
|
14
|
+
// 2. Attach component to the appRef so that it's inside the ng component tree
|
|
15
|
+
this.appRef.attachView(this.componentRef.hostView);
|
|
16
|
+
this.componentRef.instance.overlay = true;
|
|
17
|
+
// 3. Get DOM element from component
|
|
18
|
+
const domElem = this.componentRef.hostView
|
|
19
|
+
.rootNodes[0];
|
|
20
|
+
// 4. Append DOM element to the body
|
|
21
|
+
document.body.appendChild(domElem);
|
|
22
|
+
return true;
|
|
23
|
+
}
|
|
24
|
+
else {
|
|
25
|
+
return false;
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
hide() {
|
|
29
|
+
if (this.componentRef) {
|
|
30
|
+
this.appRef.detachView(this.componentRef.hostView);
|
|
31
|
+
this.componentRef.destroy();
|
|
32
|
+
this.componentRef = null;
|
|
33
|
+
return true;
|
|
34
|
+
}
|
|
35
|
+
else {
|
|
36
|
+
return false;
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
ProgressService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.0.2", ngImport: i0, type: ProgressService, deps: [{ token: i0.ViewContainerRef }, { token: i0.Injector }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
41
|
+
ProgressService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.0.2", ngImport: i0, type: ProgressService, providedIn: 'root' });
|
|
42
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.2", ngImport: i0, type: ProgressService, decorators: [{
|
|
43
|
+
type: Injectable,
|
|
44
|
+
args: [{
|
|
45
|
+
providedIn: 'root'
|
|
46
|
+
}]
|
|
47
|
+
}], ctorParameters: function () { return [{ type: i0.ViewContainerRef }, { type: i0.Injector }]; } });
|
|
48
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvZ3Jlc3Muc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3VpL3NyYy9saWIvaW8vcHJvZ3Jlc3Muc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsY0FBYyxFQUFpQyxVQUFVLEVBQThCLE1BQU0sZUFBZSxDQUFDO0FBQ3RILE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLCtCQUErQixDQUFDOztBQUtsRSxNQUFNLE9BQU8sZUFBZTtJQUsxQixZQUNVLGdCQUFrQyxFQUNsQyxRQUFrQjtRQURsQixxQkFBZ0IsR0FBaEIsZ0JBQWdCLENBQWtCO1FBQ2xDLGFBQVEsR0FBUixRQUFRLENBQVU7SUFDeEIsQ0FBQztJQUVMLElBQUk7UUFDRixJQUFJLENBQUMsSUFBSSxDQUFDLFlBQVksRUFBRTtZQUN0QixJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLGNBQWMsQ0FBQyxDQUFDO1lBQ2hELHNEQUFzRDtZQUN0RCxJQUFJLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxlQUFlLENBQUMsaUJBQWlCLENBQUMsQ0FBQztZQUU3RSw4RUFBOEU7WUFDOUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxRQUFRLENBQUMsQ0FBQztZQUNuRCxJQUFJLENBQUMsWUFBWSxDQUFDLFFBQVEsQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDO1lBRTFDLG9DQUFvQztZQUNwQyxNQUFNLE9BQU8sR0FBSSxJQUFJLENBQUMsWUFBWSxDQUFDLFFBQWlDO2lCQUNqRSxTQUFTLENBQUMsQ0FBQyxDQUFnQixDQUFDO1lBRS9CLG9DQUFvQztZQUNwQyxRQUFRLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxPQUFPLENBQUMsQ0FBQztZQUNuQyxPQUFPLElBQUksQ0FBQztTQUNiO2FBQU07WUFDTCxPQUFPLEtBQUssQ0FBQztTQUNkO0lBQ0gsQ0FBQztJQUNELElBQUk7UUFDRixJQUFJLElBQUksQ0FBQyxZQUFZLEVBQUU7WUFDckIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxRQUFRLENBQUMsQ0FBQztZQUNuRCxJQUFJLENBQUMsWUFBWSxDQUFDLE9BQU8sRUFBRSxDQUFDO1lBQzVCLElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDO1lBQ3pCLE9BQU8sSUFBSSxDQUFDO1NBQ2I7YUFBTTtZQUNMLE9BQU8sS0FBSyxDQUFDO1NBQ2Q7SUFDSCxDQUFDOzs0R0F4Q1UsZUFBZTtnSEFBZixlQUFlLGNBRmQsTUFBTTsyRkFFUCxlQUFlO2tCQUgzQixVQUFVO21CQUFDO29CQUNWLFVBQVUsRUFBRSxNQUFNO2lCQUNuQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFwcGxpY2F0aW9uUmVmLCBDb21wb25lbnRSZWYsIEVtYmVkZGVkVmlld1JlZiwgSW5qZWN0YWJsZSwgSW5qZWN0b3IsIFZpZXdDb250YWluZXJSZWYgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFByb2dyZXNzQ29tcG9uZW50IH0gZnJvbSAnLi9wcm9ncmVzcy9wcm9ncmVzcy5jb21wb25lbnQnO1xuXG5ASW5qZWN0YWJsZSh7XG4gIHByb3ZpZGVkSW46ICdyb290J1xufSlcbmV4cG9ydCBjbGFzcyBQcm9ncmVzc1NlcnZpY2Uge1xuICBhcHBSZWYhOiBBcHBsaWNhdGlvblJlZjtcbiAgY29tcG9uZW50UmVmITogQ29tcG9uZW50UmVmPFByb2dyZXNzQ29tcG9uZW50PiB8IG51bGw7XG4gIGRvbUVsZW0hOiBIVE1MRWxlbWVudDtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIHZpZXdDb250YWluZXJSZWY6IFZpZXdDb250YWluZXJSZWYsXG4gICAgcHJpdmF0ZSBpbmplY3RvcjogSW5qZWN0b3JcbiAgKSB7IH1cblxuICBzaG93KCk6IGJvb2xlYW4ge1xuICAgIGlmICghdGhpcy5jb21wb25lbnRSZWYpIHtcbiAgICAgIHRoaXMuYXBwUmVmID0gdGhpcy5pbmplY3Rvci5nZXQoQXBwbGljYXRpb25SZWYpO1xuICAgICAgLy8gMS4gQ3JlYXRlIGEgY29tcG9uZW50IHJlZmVyZW5jZSBmcm9tIHRoZSBjb21wb25lbnQgXG4gICAgICB0aGlzLmNvbXBvbmVudFJlZiA9IHRoaXMudmlld0NvbnRhaW5lclJlZi5jcmVhdGVDb21wb25lbnQoUHJvZ3Jlc3NDb21wb25lbnQpO1xuXG4gICAgICAvLyAyLiBBdHRhY2ggY29tcG9uZW50IHRvIHRoZSBhcHBSZWYgc28gdGhhdCBpdCdzIGluc2lkZSB0aGUgbmcgY29tcG9uZW50IHRyZWVcbiAgICAgIHRoaXMuYXBwUmVmLmF0dGFjaFZpZXcodGhpcy5jb21wb25lbnRSZWYuaG9zdFZpZXcpO1xuICAgICAgdGhpcy5jb21wb25lbnRSZWYuaW5zdGFuY2Uub3ZlcmxheSA9IHRydWU7XG5cbiAgICAgIC8vIDMuIEdldCBET00gZWxlbWVudCBmcm9tIGNvbXBvbmVudFxuICAgICAgY29uc3QgZG9tRWxlbSA9ICh0aGlzLmNvbXBvbmVudFJlZi5ob3N0VmlldyBhcyBFbWJlZGRlZFZpZXdSZWY8YW55PilcbiAgICAgICAgLnJvb3ROb2Rlc1swXSBhcyBIVE1MRWxlbWVudDtcblxuICAgICAgLy8gNC4gQXBwZW5kIERPTSBlbGVtZW50IHRvIHRoZSBib2R5XG4gICAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGRvbUVsZW0pO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cbiAgaGlkZSgpOiBib29sZWFuIHtcbiAgICBpZiAodGhpcy5jb21wb25lbnRSZWYpIHtcbiAgICAgIHRoaXMuYXBwUmVmLmRldGFjaFZpZXcodGhpcy5jb21wb25lbnRSZWYuaG9zdFZpZXcpO1xuICAgICAgdGhpcy5jb21wb25lbnRSZWYuZGVzdHJveSgpO1xuICAgICAgdGhpcy5jb21wb25lbnRSZWYgPSBudWxsO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cbn1cbiJdfQ==
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
import { Component, Input } from '@angular/core';
|
|
2
|
+
import * as i0 from "@angular/core";
|
|
3
|
+
import * as i1 from "@angular/common";
|
|
4
|
+
export class RatingComponent {
|
|
5
|
+
constructor() {
|
|
6
|
+
this.disabled = false;
|
|
7
|
+
this.propagateChange = (_) => { };
|
|
8
|
+
this.readOnly = false;
|
|
9
|
+
this.stars = [
|
|
10
|
+
{ value: 1 },
|
|
11
|
+
{ value: 2 },
|
|
12
|
+
{ value: 3 },
|
|
13
|
+
{ value: 4 },
|
|
14
|
+
{ value: 5 }
|
|
15
|
+
];
|
|
16
|
+
}
|
|
17
|
+
ngOnInit() {
|
|
18
|
+
}
|
|
19
|
+
get value() {
|
|
20
|
+
return this._value;
|
|
21
|
+
}
|
|
22
|
+
set value(value) {
|
|
23
|
+
this._value = value;
|
|
24
|
+
this.propagateChange(this._value);
|
|
25
|
+
}
|
|
26
|
+
registerOnChange(fn) {
|
|
27
|
+
this.propagateChange = fn;
|
|
28
|
+
}
|
|
29
|
+
registerOnTouched(fn) {
|
|
30
|
+
//this.propagateChange = fn;
|
|
31
|
+
}
|
|
32
|
+
setDisabledState(isDisabled) {
|
|
33
|
+
this.disabled = isDisabled;
|
|
34
|
+
}
|
|
35
|
+
setRate(value, isHover) {
|
|
36
|
+
if (isHover) {
|
|
37
|
+
this.hoverValue = value;
|
|
38
|
+
}
|
|
39
|
+
else {
|
|
40
|
+
this.value = value;
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
updateValue(event) {
|
|
44
|
+
this.value = event.target.value;
|
|
45
|
+
}
|
|
46
|
+
writeValue(value) {
|
|
47
|
+
this.value = value;
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
RatingComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.0.2", ngImport: i0, type: RatingComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
51
|
+
RatingComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.0.2", type: RatingComponent, selector: "ft-rating", inputs: { readOnly: "readOnly", value: "value" }, ngImport: i0, template: "<ng-container *ngFor=\"let star of stars\">\n <ng-container *ngTemplateOutlet=\"!readOnly? buttonTemplate : starTemplate; context:{star:star}\"></ng-container>\n</ng-container>\n<ng-template #buttonTemplate let-star=\"star\">\n <button type=\"button\" *ngIf=\"!readOnly; else starTemplate\" [disabled]=\"disabled\"\n (mouseover)=\"setRate(star.value, true)\" (focus)=\"setRate(star.value, true)\" (blur)=\"setRate(0, true)\"\n (mouseout)=\"setRate(0, true)\" (click)=\"setRate(star.value)\">\n <ng-container *ngTemplateOutlet=\"starTemplate; context:{star:star}\"></ng-container>\n </button>\n</ng-template>\n<ng-template #starTemplate let-star=\"star\">\n <svg [ngClass]=\"{hover: hoverValue >= star.value, active: value >= star.value}\" viewBox=\"0 0 24 24\">\n <path\n d=\"M17.93 21.315c-.534.408-5.22-3.186-5.881-3.181-.663 0-5.307 3.656-5.846 3.254-.537-.403 1.29-6.165 1.081-6.822-.209-.656-4.972-4.138-4.772-4.796.201-.658 6.015-.627 6.55-1.036.533-.41 2.233-6.215 2.895-6.219.663 0 2.43 5.779 2.968 6.182.539.403 6.352.297 6.56.953.21.656-4.513 4.197-4.714 4.856-.2.658 1.692 6.398 1.159 6.808z\" />\n </svg>\n</ng-template>", styles: [":host{line-height:0;display:inline-flex}:host:hover button{color:var(--primary)}:host:hover button svg:not(.hover){color:var(--gray)}:host[size=\"1\"]{font-size:1rem}:host[size=\"2\"]{font-size:1.5rem}:host[size=\"3\"]{font-size:2rem}:host[size=\"4\"]{font-size:3rem}:host[size=\"5\"]{font-size:4.5rem}:host[size=\"6\"]{font-size:8rem}:host[size=\"7\"]{font-size:16rem}:host[size=\"8\"]{font-size:32rem}svg{width:1em;height:1em;display:block}svg path{fill:none;stroke-width:1;stroke:currentColor}svg.hover path,svg.active path{fill:currentColor}button{border:0;background:transparent;padding:0}button:focus,button:active{outline:none}\n"], dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }] });
|
|
52
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.2", ngImport: i0, type: RatingComponent, decorators: [{
|
|
53
|
+
type: Component,
|
|
54
|
+
args: [{ selector: 'ft-rating', template: "<ng-container *ngFor=\"let star of stars\">\n <ng-container *ngTemplateOutlet=\"!readOnly? buttonTemplate : starTemplate; context:{star:star}\"></ng-container>\n</ng-container>\n<ng-template #buttonTemplate let-star=\"star\">\n <button type=\"button\" *ngIf=\"!readOnly; else starTemplate\" [disabled]=\"disabled\"\n (mouseover)=\"setRate(star.value, true)\" (focus)=\"setRate(star.value, true)\" (blur)=\"setRate(0, true)\"\n (mouseout)=\"setRate(0, true)\" (click)=\"setRate(star.value)\">\n <ng-container *ngTemplateOutlet=\"starTemplate; context:{star:star}\"></ng-container>\n </button>\n</ng-template>\n<ng-template #starTemplate let-star=\"star\">\n <svg [ngClass]=\"{hover: hoverValue >= star.value, active: value >= star.value}\" viewBox=\"0 0 24 24\">\n <path\n d=\"M17.93 21.315c-.534.408-5.22-3.186-5.881-3.181-.663 0-5.307 3.656-5.846 3.254-.537-.403 1.29-6.165 1.081-6.822-.209-.656-4.972-4.138-4.772-4.796.201-.658 6.015-.627 6.55-1.036.533-.41 2.233-6.215 2.895-6.219.663 0 2.43 5.779 2.968 6.182.539.403 6.352.297 6.56.953.21.656-4.513 4.197-4.714 4.856-.2.658 1.692 6.398 1.159 6.808z\" />\n </svg>\n</ng-template>", styles: [":host{line-height:0;display:inline-flex}:host:hover button{color:var(--primary)}:host:hover button svg:not(.hover){color:var(--gray)}:host[size=\"1\"]{font-size:1rem}:host[size=\"2\"]{font-size:1.5rem}:host[size=\"3\"]{font-size:2rem}:host[size=\"4\"]{font-size:3rem}:host[size=\"5\"]{font-size:4.5rem}:host[size=\"6\"]{font-size:8rem}:host[size=\"7\"]{font-size:16rem}:host[size=\"8\"]{font-size:32rem}svg{width:1em;height:1em;display:block}svg path{fill:none;stroke-width:1;stroke:currentColor}svg.hover path,svg.active path{fill:currentColor}button{border:0;background:transparent;padding:0}button:focus,button:active{outline:none}\n"] }]
|
|
55
|
+
}], ctorParameters: function () { return []; }, propDecorators: { readOnly: [{
|
|
56
|
+
type: Input
|
|
57
|
+
}], value: [{
|
|
58
|
+
type: Input
|
|
59
|
+
}] } });
|
|
60
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmF0aW5nLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3VpL3NyYy9saWIvaW8vcmF0aW5nL3JhdGluZy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy91aS9zcmMvbGliL2lvL3JhdGluZy9yYXRpbmcuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsTUFBTSxlQUFlLENBQUM7OztBQU9qRCxNQUFNLE9BQU8sZUFBZTtJQWMxQjtRQWJBLGFBQVEsR0FBWSxLQUFLLENBQUM7UUFFMUIsb0JBQWUsR0FBRyxDQUFDLENBQU0sRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDO1FBQ3pCLGFBQVEsR0FBWSxLQUFLLENBQUM7UUFDbkMsVUFBSyxHQUFVO1lBQ2IsRUFBRSxLQUFLLEVBQUUsQ0FBQyxFQUFFO1lBQ1osRUFBRSxLQUFLLEVBQUUsQ0FBQyxFQUFFO1lBQ1osRUFBRSxLQUFLLEVBQUUsQ0FBQyxFQUFFO1lBQ1osRUFBRSxLQUFLLEVBQUUsQ0FBQyxFQUFFO1lBQ1osRUFBRSxLQUFLLEVBQUUsQ0FBQyxFQUFFO1NBQ2IsQ0FBQztJQUdjLENBQUM7SUFFakIsUUFBUTtJQUNSLENBQUM7SUFDRCxJQUFJLEtBQUs7UUFDUCxPQUFPLElBQUksQ0FBQyxNQUFNLENBQUM7SUFDckIsQ0FBQztJQUNELElBQWEsS0FBSyxDQUFDLEtBQVU7UUFDM0IsSUFBSSxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUM7UUFDcEIsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDcEMsQ0FBQztJQUNELGdCQUFnQixDQUFDLEVBQW9CO1FBQ25DLElBQUksQ0FBQyxlQUFlLEdBQUcsRUFBRSxDQUFDO0lBQzVCLENBQUM7SUFDRCxpQkFBaUIsQ0FBQyxFQUFvQjtRQUNwQyw0QkFBNEI7SUFDOUIsQ0FBQztJQUNELGdCQUFnQixDQUFDLFVBQW1CO1FBQ2xDLElBQUksQ0FBQyxRQUFRLEdBQUcsVUFBVSxDQUFDO0lBQzdCLENBQUM7SUFDRCxPQUFPLENBQUMsS0FBYSxFQUFFLE9BQWlCO1FBQ3RDLElBQUksT0FBTyxFQUFFO1lBQ1gsSUFBSSxDQUFDLFVBQVUsR0FBRyxLQUFLLENBQUM7U0FDekI7YUFBTTtZQUNMLElBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDO1NBQ3BCO0lBQ0gsQ0FBQztJQUNELFdBQVcsQ0FBQyxLQUFVO1FBQ3BCLElBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUM7SUFDbEMsQ0FBQztJQUNELFVBQVUsQ0FBQyxLQUFhO1FBQ3RCLElBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDO0lBQ3JCLENBQUM7OzRHQTlDVSxlQUFlO2dHQUFmLGVBQWUsbUdDUDVCLG9xQ0FlYzsyRkRSRCxlQUFlO2tCQUwzQixTQUFTOytCQUNFLFdBQVc7MEVBUVosUUFBUTtzQkFBaEIsS0FBSztnQkFpQk8sS0FBSztzQkFBakIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgSW5wdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnZnQtcmF0aW5nJyxcbiAgdGVtcGxhdGVVcmw6ICcuL3JhdGluZy5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL3JhdGluZy5jb21wb25lbnQuc2NzcyddXG59KVxuZXhwb3J0IGNsYXNzIFJhdGluZ0NvbXBvbmVudCB7XG4gIGRpc2FibGVkOiBib29sZWFuID0gZmFsc2U7XG4gIGhvdmVyVmFsdWUhOiBudW1iZXI7XG4gIHByb3BhZ2F0ZUNoYW5nZSA9IChfOiBhbnkpID0+IHsgfTtcbiAgQElucHV0KCkgcmVhZE9ubHk6IGJvb2xlYW4gPSBmYWxzZTtcbiAgc3RhcnM6IGFueVtdID0gW1xuICAgIHsgdmFsdWU6IDEgfSxcbiAgICB7IHZhbHVlOiAyIH0sXG4gICAgeyB2YWx1ZTogMyB9LFxuICAgIHsgdmFsdWU6IDQgfSxcbiAgICB7IHZhbHVlOiA1IH1cbiAgXTtcbiAgX3ZhbHVlITogbnVtYmVyO1xuXG4gIGNvbnN0cnVjdG9yKCkgeyB9XG5cbiAgbmdPbkluaXQoKSB7XG4gIH1cbiAgZ2V0IHZhbHVlKCkge1xuICAgIHJldHVybiB0aGlzLl92YWx1ZTtcbiAgfVxuICBASW5wdXQoKSBzZXQgdmFsdWUodmFsdWU6IGFueSkge1xuICAgIHRoaXMuX3ZhbHVlID0gdmFsdWU7XG4gICAgdGhpcy5wcm9wYWdhdGVDaGFuZ2UodGhpcy5fdmFsdWUpO1xuICB9XG4gIHJlZ2lzdGVyT25DaGFuZ2UoZm46IChfOiBhbnkpID0+IHZvaWQpIHtcbiAgICB0aGlzLnByb3BhZ2F0ZUNoYW5nZSA9IGZuO1xuICB9XG4gIHJlZ2lzdGVyT25Ub3VjaGVkKGZuOiAoXzogYW55KSA9PiB2b2lkKSB7XG4gICAgLy90aGlzLnByb3BhZ2F0ZUNoYW5nZSA9IGZuO1xuICB9XG4gIHNldERpc2FibGVkU3RhdGUoaXNEaXNhYmxlZDogYm9vbGVhbik6IHZvaWQge1xuICAgIHRoaXMuZGlzYWJsZWQgPSBpc0Rpc2FibGVkO1xuICB9XG4gIHNldFJhdGUodmFsdWU6IG51bWJlciwgaXNIb3Zlcj86IGJvb2xlYW4pIHtcbiAgICBpZiAoaXNIb3Zlcikge1xuICAgICAgdGhpcy5ob3ZlclZhbHVlID0gdmFsdWU7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMudmFsdWUgPSB2YWx1ZTtcbiAgICB9XG4gIH1cbiAgdXBkYXRlVmFsdWUoZXZlbnQ6IGFueSkge1xuICAgIHRoaXMudmFsdWUgPSBldmVudC50YXJnZXQudmFsdWU7XG4gIH1cbiAgd3JpdGVWYWx1ZSh2YWx1ZTogc3RyaW5nKSB7XG4gICAgdGhpcy52YWx1ZSA9IHZhbHVlO1xuICB9XG59XG4iLCI8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBzdGFyIG9mIHN0YXJzXCI+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cIiFyZWFkT25seT8gYnV0dG9uVGVtcGxhdGUgOiBzdGFyVGVtcGxhdGU7IGNvbnRleHQ6e3N0YXI6c3Rhcn1cIj48L25nLWNvbnRhaW5lcj5cbjwvbmctY29udGFpbmVyPlxuPG5nLXRlbXBsYXRlICNidXR0b25UZW1wbGF0ZSBsZXQtc3Rhcj1cInN0YXJcIj5cbiAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiAqbmdJZj1cIiFyZWFkT25seTsgZWxzZSBzdGFyVGVtcGxhdGVcIiBbZGlzYWJsZWRdPVwiZGlzYWJsZWRcIlxuICAgICAgICAobW91c2VvdmVyKT1cInNldFJhdGUoc3Rhci52YWx1ZSwgdHJ1ZSlcIiAoZm9jdXMpPVwic2V0UmF0ZShzdGFyLnZhbHVlLCB0cnVlKVwiIChibHVyKT1cInNldFJhdGUoMCwgdHJ1ZSlcIlxuICAgICAgICAobW91c2VvdXQpPVwic2V0UmF0ZSgwLCB0cnVlKVwiIChjbGljayk9XCJzZXRSYXRlKHN0YXIudmFsdWUpXCI+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJzdGFyVGVtcGxhdGU7IGNvbnRleHQ6e3N0YXI6c3Rhcn1cIj48L25nLWNvbnRhaW5lcj5cbiAgICA8L2J1dHRvbj5cbjwvbmctdGVtcGxhdGU+XG48bmctdGVtcGxhdGUgI3N0YXJUZW1wbGF0ZSBsZXQtc3Rhcj1cInN0YXJcIj5cbiAgICA8c3ZnIFtuZ0NsYXNzXT1cIntob3ZlcjogaG92ZXJWYWx1ZSA+PSBzdGFyLnZhbHVlLCBhY3RpdmU6IHZhbHVlID49IHN0YXIudmFsdWV9XCIgdmlld0JveD1cIjAgMCAyNCAyNFwiPlxuICAgICAgICA8cGF0aFxuICAgICAgICAgICAgZD1cIk0xNy45MyAyMS4zMTVjLS41MzQuNDA4LTUuMjItMy4xODYtNS44ODEtMy4xODEtLjY2MyAwLTUuMzA3IDMuNjU2LTUuODQ2IDMuMjU0LS41MzctLjQwMyAxLjI5LTYuMTY1IDEuMDgxLTYuODIyLS4yMDktLjY1Ni00Ljk3Mi00LjEzOC00Ljc3Mi00Ljc5Ni4yMDEtLjY1OCA2LjAxNS0uNjI3IDYuNTUtMS4wMzYuNTMzLS40MSAyLjIzMy02LjIxNSAyLjg5NS02LjIxOS42NjMgMCAyLjQzIDUuNzc5IDIuOTY4IDYuMTgyLjUzOS40MDMgNi4zNTIuMjk3IDYuNTYuOTUzLjIxLjY1Ni00LjUxMyA0LjE5Ny00LjcxNCA0Ljg1Ni0uMi42NTggMS42OTIgNi4zOTggMS4xNTkgNi44MDh6XCIgLz5cbiAgICA8L3N2Zz5cbjwvbmctdGVtcGxhdGU+Il19
|
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
import { Component, HostBinding, Input } from '@angular/core';
|
|
2
|
+
import * as i0 from "@angular/core";
|
|
3
|
+
import * as i1 from "@angular/common";
|
|
4
|
+
export class TimelineComponent {
|
|
5
|
+
constructor() {
|
|
6
|
+
this.startDate = new Date();
|
|
7
|
+
this.data = [];
|
|
8
|
+
this.dataParsed = {
|
|
9
|
+
months: [],
|
|
10
|
+
days: [],
|
|
11
|
+
weekends: []
|
|
12
|
+
};
|
|
13
|
+
this.class = '';
|
|
14
|
+
}
|
|
15
|
+
get hostClasses() {
|
|
16
|
+
return [
|
|
17
|
+
'ft-timeline',
|
|
18
|
+
this.class
|
|
19
|
+
].join(' ');
|
|
20
|
+
}
|
|
21
|
+
;
|
|
22
|
+
ngOnInit() {
|
|
23
|
+
this.addMonth(this.calcStartDate());
|
|
24
|
+
}
|
|
25
|
+
addMonth(date) {
|
|
26
|
+
const month = this.getMonth(date.getMonth(), date.getFullYear());
|
|
27
|
+
const currentDays = this.dataParsed.days.length;
|
|
28
|
+
this.dataParsed.months = [...this.dataParsed.months, { date: month.days[0], daysInMonth: month.days.length }];
|
|
29
|
+
this.dataParsed.days = [...this.dataParsed.days, ...month.days];
|
|
30
|
+
this.dataParsed.weekends = [...this.dataParsed.weekends, ...month.weekends];
|
|
31
|
+
if (!this.currentDate && month.currentDate) {
|
|
32
|
+
this.currentDate = currentDays + month.currentDate;
|
|
33
|
+
}
|
|
34
|
+
this.dataParsed.days.some((day, index) => {
|
|
35
|
+
if ([0, 6].includes(day.getDay())) {
|
|
36
|
+
this.dataParsed.weekendStart = index;
|
|
37
|
+
return true;
|
|
38
|
+
}
|
|
39
|
+
return false;
|
|
40
|
+
});
|
|
41
|
+
this.parseTasks();
|
|
42
|
+
}
|
|
43
|
+
calcStartDate() {
|
|
44
|
+
return new Date();
|
|
45
|
+
}
|
|
46
|
+
getMonth(month, year) {
|
|
47
|
+
const days = [];
|
|
48
|
+
const weekends = [];
|
|
49
|
+
let currentDate = null;
|
|
50
|
+
let today = new Date();
|
|
51
|
+
const date = new Date(year, month + 1, 0);
|
|
52
|
+
for (let i = 1; i <= date.getDate(); i++) {
|
|
53
|
+
const idate = new Date(year, month, i);
|
|
54
|
+
if ([0, 6].includes(idate.getDay())) {
|
|
55
|
+
if (idate.getDay() === 6) {
|
|
56
|
+
weekends.push([idate]);
|
|
57
|
+
}
|
|
58
|
+
else {
|
|
59
|
+
weekends[weekends.length - 1].push(idate);
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
if (idate.getTime() === new Date(today.getFullYear(), today.getMonth(), today.getDate()).getTime()) {
|
|
63
|
+
currentDate = i - 1;
|
|
64
|
+
}
|
|
65
|
+
days.push(idate);
|
|
66
|
+
}
|
|
67
|
+
const data = { days, weekends };
|
|
68
|
+
if (currentDate) {
|
|
69
|
+
data.currentDate = currentDate;
|
|
70
|
+
}
|
|
71
|
+
return data;
|
|
72
|
+
}
|
|
73
|
+
parseTasks() {
|
|
74
|
+
let tasks = this.data.filter(task => task.endAt) /*.sort((a, b) => a.)*/;
|
|
75
|
+
this.dataParsed.tasks = tasks.map((task) => {
|
|
76
|
+
return {
|
|
77
|
+
label: task.label,
|
|
78
|
+
start: 10,
|
|
79
|
+
type: task.type,
|
|
80
|
+
size: 1
|
|
81
|
+
};
|
|
82
|
+
});
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
TimelineComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.0.2", ngImport: i0, type: TimelineComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
86
|
+
TimelineComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.0.2", type: TimelineComponent, selector: "ft-timeline", inputs: { data: "data", class: "class" }, host: { properties: { "style.--current-date": "this.currentDate", "class": "this.hostClasses" } }, ngImport: i0, template: "<div class=\"ft-weekends\" [style.--start]=\"dataParsed.weekendStart\">\n <div class=\"ft-weekends__item\" [style.--weekend-size]=\"weekend.length\" *ngFor=\"let weekend of dataParsed.weekends\">\n </div>\n</div>\n<div class=\"ft-current-date\" *ngIf=\"currentDate\"></div>\n<div class=\"ft-header\">\n <div class=\"ft-header__months\">\n <div [style.--days-in-month]=\"month.daysInMonth\" *ngFor=\"let month of dataParsed.months; let i = index\">{{\n month.date\n | date: 'MMMM, yyyy' }}</div>\n </div>\n <div class=\"ft-header__days\">\n <div *ngFor=\"let day of dataParsed.days; let i = index\">\n <div [ngClass]=\"{active: currentDate && currentDate === i}\">{{ day | date:'d' }}</div>\n </div>\n </div>\n</div>\n<div class=\"ft-tasks\">\n <button type=\"button\" class=\"ft-tasks__item\" [class.tasks__item--milestone]=\"task.type === 'milestone'\"\n [style.--start]=\"task.start\" [style.--days]=\"task.type === 'milestone' ? 1 : task.size\"\n style=\" --color-rgb: 130, 121, 210;\" *ngFor=\"let task of dataParsed.tasks;\">{{ task.label }}</button>\n</div>", styles: [":host{position:relative;display:flex;flex-direction:column;--background-color: #fff;--column-width: 30px;--current-date-color: #ff9800}.ft-header{background-color:var(--background-color);border-bottom:1px solid rgba(0,0,0,.1);font-size:.75rem;font-weight:100;padding-bottom:.25rem;position:sticky;top:0;z-index:4;width:-moz-fit-content;width:fit-content}.ft-header__months{display:flex}.ft-header__months>div{background-color:var(--background-color);box-sizing:border-box;font-weight:400;padding:.5rem;white-space:nowrap;width:calc(var(--column-width) * var(--days-in-month))}.ft-header__days{display:flex}.ft-header__days>div{display:flex;align-items:center;justify-content:center;min-width:var(--column-width);padding:.25rem;border-radius:100vh;box-sizing:border-box}.ft-header__days>div>.ft-active{display:flex;align-items:center;justify-content:center;width:100%;height:20px;background-color:var(--current-date-color);color:var(--background-color);border-radius:100vh;box-sizing:border-box}.ft-weekends{position:absolute;inset:0;display:flex;padding-left:calc(var(--column-width) * var(--start))}.ft-weekends__item{min-width:calc(var(--column-width) * var(--weekend-size, 2));background-image:url(https://factor.ec/timesheet/es/bg-weekend.aff6b9d13e42ca0e1023.svg);background-size:25px;z-index:1;top:0;bottom:0}.ft-weekends__item~.ft-weekends__item{margin-left:calc(var(--column-width) * 5)}.ft-current-date{position:absolute;width:var(--column-width);left:calc(var(--column-width) * var(--current-date));z-index:2;top:0;bottom:0;background-color:var(--current-date-color);opacity:.1}.ft-tasks{position:relative;z-index:3;display:flex;padding-top:.5rem;gap:.5rem;flex-direction:column}.ft-tasks__item{border:1px solid transparent;height:28px;background-color:var(--background-color);background-image:linear-gradient(rgba(var(--color-rgb),.1),rgba(var(--color-rgb),.1));border-radius:.25rem;width:calc(var(--column-width) * var(--days));margin-left:calc(var(--column-width) * var(--start));white-space:nowrap;font-size:.875rem;display:flex;align-items:center;padding:0 8px;cursor:pointer;box-sizing:border-box}.ft-tasks__item:hover:not(.tasks__item--milestone){background-image:linear-gradient(rgba(var(--color-rgb),.2),rgba(var(--color-rgb),.2))}.ft-tasks__item:focus:not(.tasks__item--milestone),.ft-tasks__item:active:not(.tasks__item--milestone){background-image:linear-gradient(rgba(var(--color-rgb),.3),rgba(var(--color-rgb),.3))}.ft-tasks__item--milestone{background-color:unset;background-image:unset}.ft-tasks__item--milestone:before{border-radius:6px;min-height:12px;min-width:12px;margin-right:.5rem;content:\"\";background-color:rgba(var(--color-rgb),1)}.ft-tasks__item--milestone:hover:before{transform:scale(1.2)}.ft-tasks__item--milestone:focus:before,.ft-tasks__item--milestone:active:before{transform:scale(.9)}\n"], dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "pipe", type: i1.DatePipe, name: "date" }] });
|
|
87
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.2", ngImport: i0, type: TimelineComponent, decorators: [{
|
|
88
|
+
type: Component,
|
|
89
|
+
args: [{ selector: 'ft-timeline', template: "<div class=\"ft-weekends\" [style.--start]=\"dataParsed.weekendStart\">\n <div class=\"ft-weekends__item\" [style.--weekend-size]=\"weekend.length\" *ngFor=\"let weekend of dataParsed.weekends\">\n </div>\n</div>\n<div class=\"ft-current-date\" *ngIf=\"currentDate\"></div>\n<div class=\"ft-header\">\n <div class=\"ft-header__months\">\n <div [style.--days-in-month]=\"month.daysInMonth\" *ngFor=\"let month of dataParsed.months; let i = index\">{{\n month.date\n | date: 'MMMM, yyyy' }}</div>\n </div>\n <div class=\"ft-header__days\">\n <div *ngFor=\"let day of dataParsed.days; let i = index\">\n <div [ngClass]=\"{active: currentDate && currentDate === i}\">{{ day | date:'d' }}</div>\n </div>\n </div>\n</div>\n<div class=\"ft-tasks\">\n <button type=\"button\" class=\"ft-tasks__item\" [class.tasks__item--milestone]=\"task.type === 'milestone'\"\n [style.--start]=\"task.start\" [style.--days]=\"task.type === 'milestone' ? 1 : task.size\"\n style=\" --color-rgb: 130, 121, 210;\" *ngFor=\"let task of dataParsed.tasks;\">{{ task.label }}</button>\n</div>", styles: [":host{position:relative;display:flex;flex-direction:column;--background-color: #fff;--column-width: 30px;--current-date-color: #ff9800}.ft-header{background-color:var(--background-color);border-bottom:1px solid rgba(0,0,0,.1);font-size:.75rem;font-weight:100;padding-bottom:.25rem;position:sticky;top:0;z-index:4;width:-moz-fit-content;width:fit-content}.ft-header__months{display:flex}.ft-header__months>div{background-color:var(--background-color);box-sizing:border-box;font-weight:400;padding:.5rem;white-space:nowrap;width:calc(var(--column-width) * var(--days-in-month))}.ft-header__days{display:flex}.ft-header__days>div{display:flex;align-items:center;justify-content:center;min-width:var(--column-width);padding:.25rem;border-radius:100vh;box-sizing:border-box}.ft-header__days>div>.ft-active{display:flex;align-items:center;justify-content:center;width:100%;height:20px;background-color:var(--current-date-color);color:var(--background-color);border-radius:100vh;box-sizing:border-box}.ft-weekends{position:absolute;inset:0;display:flex;padding-left:calc(var(--column-width) * var(--start))}.ft-weekends__item{min-width:calc(var(--column-width) * var(--weekend-size, 2));background-image:url(https://factor.ec/timesheet/es/bg-weekend.aff6b9d13e42ca0e1023.svg);background-size:25px;z-index:1;top:0;bottom:0}.ft-weekends__item~.ft-weekends__item{margin-left:calc(var(--column-width) * 5)}.ft-current-date{position:absolute;width:var(--column-width);left:calc(var(--column-width) * var(--current-date));z-index:2;top:0;bottom:0;background-color:var(--current-date-color);opacity:.1}.ft-tasks{position:relative;z-index:3;display:flex;padding-top:.5rem;gap:.5rem;flex-direction:column}.ft-tasks__item{border:1px solid transparent;height:28px;background-color:var(--background-color);background-image:linear-gradient(rgba(var(--color-rgb),.1),rgba(var(--color-rgb),.1));border-radius:.25rem;width:calc(var(--column-width) * var(--days));margin-left:calc(var(--column-width) * var(--start));white-space:nowrap;font-size:.875rem;display:flex;align-items:center;padding:0 8px;cursor:pointer;box-sizing:border-box}.ft-tasks__item:hover:not(.tasks__item--milestone){background-image:linear-gradient(rgba(var(--color-rgb),.2),rgba(var(--color-rgb),.2))}.ft-tasks__item:focus:not(.tasks__item--milestone),.ft-tasks__item:active:not(.tasks__item--milestone){background-image:linear-gradient(rgba(var(--color-rgb),.3),rgba(var(--color-rgb),.3))}.ft-tasks__item--milestone{background-color:unset;background-image:unset}.ft-tasks__item--milestone:before{border-radius:6px;min-height:12px;min-width:12px;margin-right:.5rem;content:\"\";background-color:rgba(var(--color-rgb),1)}.ft-tasks__item--milestone:hover:before{transform:scale(1.2)}.ft-tasks__item--milestone:focus:before,.ft-tasks__item--milestone:active:before{transform:scale(.9)}\n"] }]
|
|
90
|
+
}], ctorParameters: function () { return []; }, propDecorators: { data: [{
|
|
91
|
+
type: Input
|
|
92
|
+
}], currentDate: [{
|
|
93
|
+
type: HostBinding,
|
|
94
|
+
args: ['style.--current-date']
|
|
95
|
+
}], class: [{
|
|
96
|
+
type: Input
|
|
97
|
+
}], hostClasses: [{
|
|
98
|
+
type: HostBinding,
|
|
99
|
+
args: ['class']
|
|
100
|
+
}] } });
|
|
101
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGltZWxpbmUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdWkvc3JjL2xpYi9pby90aW1lbGluZS90aW1lbGluZS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy91aS9zcmMvbGliL2lvL3RpbWVsaW5lL3RpbWVsaW5lLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsV0FBVyxFQUFFLEtBQUssRUFBRSxNQUFNLGVBQWUsQ0FBQzs7O0FBUTlELE1BQU0sT0FBTyxpQkFBaUI7SUFtQjVCO1FBbEJBLGNBQVMsR0FBa0IsSUFBSSxJQUFJLEVBQUUsQ0FBQztRQUM3QixTQUFJLEdBQVcsRUFBRSxDQUFDO1FBRzNCLGVBQVUsR0FBUTtZQUNoQixNQUFNLEVBQUUsRUFBRTtZQUNWLElBQUksRUFBRSxFQUFFO1lBQ1IsUUFBUSxFQUFFLEVBQUU7U0FDYixDQUFDO1FBRU8sVUFBSyxHQUFXLEVBQUUsQ0FBQztJQVFaLENBQUM7SUFQakIsSUFBMEIsV0FBVztRQUNuQyxPQUFPO1lBQ0wsYUFBYTtZQUNiLElBQUksQ0FBQyxLQUFLO1NBQ1gsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDZCxDQUFDO0lBQUEsQ0FBQztJQUlGLFFBQVE7UUFDTixJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQyxDQUFDO0lBQ3RDLENBQUM7SUFDRCxRQUFRLENBQUMsSUFBVTtRQUNqQixNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsRUFBRSxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUMsQ0FBQztRQUNqRSxNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUM7UUFDaEQsSUFBSSxDQUFDLFVBQVUsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsTUFBTSxFQUFFLEVBQUUsSUFBSSxFQUFFLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsV0FBVyxFQUFFLEtBQUssQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQztRQUM5RyxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLEVBQUUsR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDaEUsSUFBSSxDQUFDLFVBQVUsQ0FBQyxRQUFRLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsUUFBUSxFQUFFLEdBQUcsS0FBSyxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQzVFLElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxJQUFJLEtBQUssQ0FBQyxXQUFXLEVBQUU7WUFDMUMsSUFBSSxDQUFDLFdBQVcsR0FBRyxXQUFXLEdBQUcsS0FBSyxDQUFDLFdBQVcsQ0FBQztTQUNwRDtRQUNELElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQVMsRUFBRSxLQUFhLEVBQUUsRUFBRTtZQUNyRCxJQUFJLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRTtnQkFDakMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxZQUFZLEdBQUcsS0FBSyxDQUFDO2dCQUNyQyxPQUFPLElBQUksQ0FBQzthQUNiO1lBQ0QsT0FBTyxLQUFLLENBQUM7UUFDZixDQUFDLENBQUMsQ0FBQztRQUNILElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztJQUNwQixDQUFDO0lBQ0QsYUFBYTtRQUNYLE9BQU8sSUFBSSxJQUFJLEVBQUUsQ0FBQztJQUNwQixDQUFDO0lBQ0QsUUFBUSxDQUFDLEtBQWEsRUFBRSxJQUFZO1FBQ2xDLE1BQU0sSUFBSSxHQUFHLEVBQUUsQ0FBQztRQUNoQixNQUFNLFFBQVEsR0FBRyxFQUFFLENBQUM7UUFDcEIsSUFBSSxXQUFXLEdBQWtCLElBQUksQ0FBQztRQUN0QyxJQUFJLEtBQUssR0FBRyxJQUFJLElBQUksRUFBRSxDQUFDO1FBQ3ZCLE1BQU0sSUFBSSxHQUFHLElBQUksSUFBSSxDQUFDLElBQUksRUFBRSxLQUFLLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQzFDLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsSUFBSSxJQUFJLENBQUMsT0FBTyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUU7WUFDeEMsTUFBTSxLQUFLLEdBQUcsSUFBSSxJQUFJLENBQUMsSUFBSSxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUMsQ0FBQztZQUN2QyxJQUFJLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRTtnQkFDbkMsSUFBSSxLQUFLLENBQUMsTUFBTSxFQUFFLEtBQUssQ0FBQyxFQUFFO29CQUN4QixRQUFRLENBQUMsSUFBSSxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztpQkFDeEI7cUJBQU07b0JBQ0wsUUFBUSxDQUFDLFFBQVEsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO2lCQUMzQzthQUNGO1lBQ0QsSUFBSSxLQUFLLENBQUMsT0FBTyxFQUFFLEtBQUssSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLFdBQVcsRUFBRSxFQUFFLEtBQUssQ0FBQyxRQUFRLEVBQUUsRUFBRSxLQUFLLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQyxPQUFPLEVBQUUsRUFBRTtnQkFDbEcsV0FBVyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7YUFDckI7WUFDRCxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1NBQ2xCO1FBQ0QsTUFBTSxJQUFJLEdBQVEsRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLENBQUM7UUFDckMsSUFBSSxXQUFXLEVBQUU7WUFDZixJQUFJLENBQUMsV0FBVyxHQUFHLFdBQVcsQ0FBQztTQUNoQztRQUNELE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUNELFVBQVU7UUFDUixJQUFJLEtBQUssR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQSx1QkFBdUIsQ0FBQztRQUN4RSxJQUFJLENBQUMsVUFBVSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUU7WUFDekMsT0FBTztnQkFDTCxLQUFLLEVBQUUsSUFBSSxDQUFDLEtBQUs7Z0JBQ2pCLEtBQUssRUFBRSxFQUFFO2dCQUNULElBQUksRUFBRSxJQUFJLENBQUMsSUFBSTtnQkFDZixJQUFJLEVBQUUsQ0FBQzthQUNSLENBQUM7UUFDSixDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7OzhHQWpGVSxpQkFBaUI7a0dBQWpCLGlCQUFpQixnTUNSOUIsa29DQXFCTTsyRkRiTyxpQkFBaUI7a0JBTDdCLFNBQVM7K0JBQ0UsYUFBYTswRUFNZCxJQUFJO3NCQUFaLEtBQUs7Z0JBRU4sV0FBVztzQkFEVixXQUFXO3VCQUFDLHNCQUFzQjtnQkFRMUIsS0FBSztzQkFBYixLQUFLO2dCQUNvQixXQUFXO3NCQUFwQyxXQUFXO3VCQUFDLE9BQU8iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIEhvc3RCaW5kaW5nLCBJbnB1dCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgVGFzayB9IGZyb20gJy4uLy4uL21vZGVscy90YXNrJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnZnQtdGltZWxpbmUnLFxuICB0ZW1wbGF0ZVVybDogJy4vdGltZWxpbmUuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi90aW1lbGluZS5jb21wb25lbnQuc2NzcyddXG59KVxuZXhwb3J0IGNsYXNzIFRpbWVsaW5lQ29tcG9uZW50IHtcbiAgc3RhcnREYXRlOiBEYXRlIHwgc3RyaW5nID0gbmV3IERhdGUoKTtcbiAgQElucHV0KCkgZGF0YTogVGFza1tdID0gW107XG4gIEBIb3N0QmluZGluZygnc3R5bGUuLS1jdXJyZW50LWRhdGUnKVxuICBjdXJyZW50RGF0ZSE6IG51bWJlcjtcbiAgZGF0YVBhcnNlZDogYW55ID0ge1xuICAgIG1vbnRoczogW10sXG4gICAgZGF5czogW10sXG4gICAgd2Vla2VuZHM6IFtdXG4gIH07XG5cbiAgQElucHV0KCkgY2xhc3M6IHN0cmluZyA9ICcnO1xuICBASG9zdEJpbmRpbmcoJ2NsYXNzJykgZ2V0IGhvc3RDbGFzc2VzKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIFtcbiAgICAgICdmdC10aW1lbGluZScsXG4gICAgICB0aGlzLmNsYXNzXG4gICAgXS5qb2luKCcgJyk7XG4gIH07XG5cbiAgY29uc3RydWN0b3IoKSB7IH1cblxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLmFkZE1vbnRoKHRoaXMuY2FsY1N0YXJ0RGF0ZSgpKTtcbiAgfVxuICBhZGRNb250aChkYXRlOiBEYXRlKTogdm9pZCB7XG4gICAgY29uc3QgbW9udGggPSB0aGlzLmdldE1vbnRoKGRhdGUuZ2V0TW9udGgoKSwgZGF0ZS5nZXRGdWxsWWVhcigpKTtcbiAgICBjb25zdCBjdXJyZW50RGF5cyA9IHRoaXMuZGF0YVBhcnNlZC5kYXlzLmxlbmd0aDtcbiAgICB0aGlzLmRhdGFQYXJzZWQubW9udGhzID0gWy4uLnRoaXMuZGF0YVBhcnNlZC5tb250aHMsIHsgZGF0ZTogbW9udGguZGF5c1swXSwgZGF5c0luTW9udGg6IG1vbnRoLmRheXMubGVuZ3RoIH1dO1xuICAgIHRoaXMuZGF0YVBhcnNlZC5kYXlzID0gWy4uLnRoaXMuZGF0YVBhcnNlZC5kYXlzLCAuLi5tb250aC5kYXlzXTtcbiAgICB0aGlzLmRhdGFQYXJzZWQud2Vla2VuZHMgPSBbLi4udGhpcy5kYXRhUGFyc2VkLndlZWtlbmRzLCAuLi5tb250aC53ZWVrZW5kc107XG4gICAgaWYgKCF0aGlzLmN1cnJlbnREYXRlICYmIG1vbnRoLmN1cnJlbnREYXRlKSB7XG4gICAgICB0aGlzLmN1cnJlbnREYXRlID0gY3VycmVudERheXMgKyBtb250aC5jdXJyZW50RGF0ZTtcbiAgICB9XG4gICAgdGhpcy5kYXRhUGFyc2VkLmRheXMuc29tZSgoZGF5OiBEYXRlLCBpbmRleDogbnVtYmVyKSA9PiB7XG4gICAgICBpZiAoWzAsIDZdLmluY2x1ZGVzKGRheS5nZXREYXkoKSkpIHtcbiAgICAgICAgdGhpcy5kYXRhUGFyc2VkLndlZWtlbmRTdGFydCA9IGluZGV4O1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9KTtcbiAgICB0aGlzLnBhcnNlVGFza3MoKTtcbiAgfVxuICBjYWxjU3RhcnREYXRlKCk6IERhdGUge1xuICAgIHJldHVybiBuZXcgRGF0ZSgpO1xuICB9XG4gIGdldE1vbnRoKG1vbnRoOiBudW1iZXIsIHllYXI6IG51bWJlcik6IGFueSB7XG4gICAgY29uc3QgZGF5cyA9IFtdO1xuICAgIGNvbnN0IHdlZWtlbmRzID0gW107XG4gICAgbGV0IGN1cnJlbnREYXRlOiBudW1iZXIgfCBudWxsID0gbnVsbDtcbiAgICBsZXQgdG9kYXkgPSBuZXcgRGF0ZSgpO1xuICAgIGNvbnN0IGRhdGUgPSBuZXcgRGF0ZSh5ZWFyLCBtb250aCArIDEsIDApO1xuICAgIGZvciAobGV0IGkgPSAxOyBpIDw9IGRhdGUuZ2V0RGF0ZSgpOyBpKyspIHtcbiAgICAgIGNvbnN0IGlkYXRlID0gbmV3IERhdGUoeWVhciwgbW9udGgsIGkpO1xuICAgICAgaWYgKFswLCA2XS5pbmNsdWRlcyhpZGF0ZS5nZXREYXkoKSkpIHtcbiAgICAgICAgaWYgKGlkYXRlLmdldERheSgpID09PSA2KSB7XG4gICAgICAgICAgd2Vla2VuZHMucHVzaChbaWRhdGVdKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB3ZWVrZW5kc1t3ZWVrZW5kcy5sZW5ndGggLSAxXS5wdXNoKGlkYXRlKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKGlkYXRlLmdldFRpbWUoKSA9PT0gbmV3IERhdGUodG9kYXkuZ2V0RnVsbFllYXIoKSwgdG9kYXkuZ2V0TW9udGgoKSwgdG9kYXkuZ2V0RGF0ZSgpKS5nZXRUaW1lKCkpIHtcbiAgICAgICAgY3VycmVudERhdGUgPSBpIC0gMTtcbiAgICAgIH1cbiAgICAgIGRheXMucHVzaChpZGF0ZSk7XG4gICAgfVxuICAgIGNvbnN0IGRhdGE6IGFueSA9IHsgZGF5cywgd2Vla2VuZHMgfTtcbiAgICBpZiAoY3VycmVudERhdGUpIHtcbiAgICAgIGRhdGEuY3VycmVudERhdGUgPSBjdXJyZW50RGF0ZTtcbiAgICB9XG4gICAgcmV0dXJuIGRhdGE7XG4gIH1cbiAgcGFyc2VUYXNrcygpOiB2b2lkIHtcbiAgICBsZXQgdGFza3MgPSB0aGlzLmRhdGEuZmlsdGVyKHRhc2sgPT4gdGFzay5lbmRBdCkvKi5zb3J0KChhLCBiKSA9PiBhLikqLztcbiAgICB0aGlzLmRhdGFQYXJzZWQudGFza3MgPSB0YXNrcy5tYXAoKHRhc2spID0+IHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGxhYmVsOiB0YXNrLmxhYmVsLFxuICAgICAgICBzdGFydDogMTAsXG4gICAgICAgIHR5cGU6IHRhc2sudHlwZSxcbiAgICAgICAgc2l6ZTogMVxuICAgICAgfTtcbiAgICB9KTtcbiAgfVxufVxuIiwiPGRpdiBjbGFzcz1cImZ0LXdlZWtlbmRzXCIgW3N0eWxlLi0tc3RhcnRdPVwiZGF0YVBhcnNlZC53ZWVrZW5kU3RhcnRcIj5cbiAgICA8ZGl2IGNsYXNzPVwiZnQtd2Vla2VuZHNfX2l0ZW1cIiBbc3R5bGUuLS13ZWVrZW5kLXNpemVdPVwid2Vla2VuZC5sZW5ndGhcIiAqbmdGb3I9XCJsZXQgd2Vla2VuZCBvZiBkYXRhUGFyc2VkLndlZWtlbmRzXCI+XG4gICAgPC9kaXY+XG48L2Rpdj5cbjxkaXYgY2xhc3M9XCJmdC1jdXJyZW50LWRhdGVcIiAqbmdJZj1cImN1cnJlbnREYXRlXCI+PC9kaXY+XG48ZGl2IGNsYXNzPVwiZnQtaGVhZGVyXCI+XG4gICAgPGRpdiBjbGFzcz1cImZ0LWhlYWRlcl9fbW9udGhzXCI+XG4gICAgICAgIDxkaXYgW3N0eWxlLi0tZGF5cy1pbi1tb250aF09XCJtb250aC5kYXlzSW5Nb250aFwiICpuZ0Zvcj1cImxldCBtb250aCBvZiBkYXRhUGFyc2VkLm1vbnRoczsgbGV0IGkgPSBpbmRleFwiPnt7XG4gICAgICAgICAgICBtb250aC5kYXRlXG4gICAgICAgICAgICB8IGRhdGU6ICdNTU1NLCB5eXl5JyB9fTwvZGl2PlxuICAgIDwvZGl2PlxuICAgIDxkaXYgY2xhc3M9XCJmdC1oZWFkZXJfX2RheXNcIj5cbiAgICAgICAgPGRpdiAqbmdGb3I9XCJsZXQgZGF5IG9mIGRhdGFQYXJzZWQuZGF5czsgbGV0IGkgPSBpbmRleFwiPlxuICAgICAgICAgICAgPGRpdiBbbmdDbGFzc109XCJ7YWN0aXZlOiBjdXJyZW50RGF0ZSAmJiBjdXJyZW50RGF0ZSA9PT0gaX1cIj57eyBkYXkgfCBkYXRlOidkJyB9fTwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbjwvZGl2PlxuPGRpdiBjbGFzcz1cImZ0LXRhc2tzXCI+XG4gICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJmdC10YXNrc19faXRlbVwiIFtjbGFzcy50YXNrc19faXRlbS0tbWlsZXN0b25lXT1cInRhc2sudHlwZSA9PT0gJ21pbGVzdG9uZSdcIlxuICAgICAgICBbc3R5bGUuLS1zdGFydF09XCJ0YXNrLnN0YXJ0XCIgW3N0eWxlLi0tZGF5c109XCJ0YXNrLnR5cGUgPT09ICdtaWxlc3RvbmUnID8gMSA6IHRhc2suc2l6ZVwiXG4gICAgICAgIHN0eWxlPVwiIC0tY29sb3ItcmdiOiAxMzAsIDEyMSwgMjEwO1wiICpuZ0Zvcj1cImxldCB0YXNrIG9mIGRhdGFQYXJzZWQudGFza3M7XCI+e3sgdGFzay5sYWJlbCB9fTwvYnV0dG9uPlxuPC9kaXY+Il19
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
export {};
|
|
2
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFzay5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3VpL3NyYy9saWIvbW9kZWxzL3Rhc2sudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBpbnRlcmZhY2UgVGFzayB7XG4gICAgaWQ6IHN0cmluZztcbiAgICBsYWJlbDogc3RyaW5nO1xuICAgIHR5cGU6ICd0YXNrJyB8ICdtaWxlc3RvbmUnO1xuICAgIHN0YXJ0QXQ/OiBEYXRlIHwgc3RyaW5nO1xuICAgIGVuZEF0PzogRGF0ZSB8IHN0cmluZztcbiAgICBjbGFzcz86IHN0cmluZztcbiAgICBjb2xvcj86IHN0cmluZztcbiAgICBjaGlsZHJlbj86IFRhc2tbXTtcbn0iXX0=
|
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import { Component, EventEmitter,
|
|
1
|
+
import { Component, EventEmitter, HostBinding, Input, Output } from '@angular/core';
|
|
2
2
|
import * as i0 from "@angular/core";
|
|
3
3
|
import * as i1 from "@angular/router";
|
|
4
4
|
import * as i2 from "@angular/common";
|
|
5
|
-
import * as i3 from "../../
|
|
5
|
+
import * as i3 from "../../io/icon/icon.component";
|
|
6
6
|
export class ListComponent {
|
|
7
7
|
constructor(router) {
|
|
8
8
|
this.router = router;
|
|
@@ -44,11 +44,11 @@ export class ListComponent {
|
|
|
44
44
|
this.change.emit(action);
|
|
45
45
|
}
|
|
46
46
|
}
|
|
47
|
-
ListComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
48
|
-
ListComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "
|
|
49
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
47
|
+
ListComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.0.2", ngImport: i0, type: ListComponent, deps: [{ token: i1.Router }], target: i0.ɵɵFactoryTarget.Component });
|
|
48
|
+
ListComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.0.2", type: ListComponent, selector: "ft-list", inputs: { iconCollection: "iconCollection", iconNameField: "iconNameField", iconPath: "iconPath", labelField: "labelField", items: "items", class: "class" }, outputs: { change: "change" }, host: { properties: { "class": "this.hostClasses" } }, ngImport: i0, template: "<ng-container *ngTemplateOutlet=\"switch; context: { children: items }\"></ng-container>\n<ng-template #switch let-children=\"children\" let-level=\"level\">\n <ng-container *ngFor=\"let item of children\" [ngSwitch]=\"item.type\">\n <ng-container *ngSwitchCase=\"'collapsible'\">\n <ng-container *ngTemplateOutlet=\"collapsible; context: { item: item }\"></ng-container>\n </ng-container>\n <ng-container *ngSwitchCase=\"'header'\">\n <ng-container *ngTemplateOutlet=\"header; context: { item: item }\"></ng-container>\n </ng-container>\n <ng-container *ngSwitchDefault>\n <ng-container *ngTemplateOutlet=\"action; context: { item: item }\"></ng-container>\n </ng-container>\n </ng-container>\n</ng-template>\n<ng-template #action let-item=\"item\">\n <ng-container [ngSwitch]=\"getComponentType(item)\">\n <button *ngSwitchCase=\"'button'\" type=\"button\" matRipple class=\"ft-list__item\" [ngClass]=\"item.class\"\n (click)=\"setItem(item)\">\n <ng-container *ngTemplateOutlet=\"text; context: { item: item }\"></ng-container>\n </button>\n <a *ngSwitchCase=\"'link'\" [routerLink]=\"item.url\" routerLinkActive=\"ft-active\" matRipple class=\"ft-list__item\"\n [ngClass]=\"item.class\" (click)=\"setItem(item)\">\n <ng-container *ngTemplateOutlet=\"text; context: { item: item }\"></ng-container>\n </a>\n </ng-container>\n</ng-template>\n<ng-template #collapsible let-item=\"item\">\n <button type=\"button\" matRipple class=\"ft-collapsible-header ft-list__item\"\n [ngClass]=\"{ 'ft-show': item.metadata?.show }\" (click)=\"toggleCollapsible(item)\">\n <div class=\"ft-item\">\n <ft-icon class=\"ft-item__icon\" *ngIf=\"item[iconNameField]\" [name]=\"item[iconNameField]\"\n [collection]=\"iconCollection\" [path]=\"iconPath\"></ft-icon>\n <div class=\"ft-item__label\">{{ item[labelField] }}</div>\n <ft-icon class=\"ft-item__toggle\" name=\"angle-right\" size=\"1\"></ft-icon>\n </div>\n </button>\n <div class=\"ft-collapsible\" [ngClass]=\"{ 'ft-show': item.metadata?.show }\" *ngIf=\"item.children\">\n <ng-container *ngTemplateOutlet=\"switch; context: { children: item.children }\"></ng-container>\n </div>\n</ng-template>\n<ng-template #header let-item=\"item\">\n <div class=\"ft-header\" [ngClass]=\"item.class\">\n {{ item[labelField] }}\n </div>\n</ng-template>\n<ng-template #text let-item=\"item\">\n <div class=\"ft-item\">\n <ft-icon class=\"ft-item__icon\" *ngIf=\"item[iconNameField]\" [name]=\"item[iconNameField]\" [collection]=\"iconCollection\"\n [path]=\"iconPath\"></ft-icon>\n <div class=\"ft-item__label\">{{ item[labelField] }}</div>\n </div>\n</ng-template>", styles: [".ft-list{display:block;overflow:auto}.ft-list__item{border:0;box-sizing:border-box;color:var(--ft-text-color);background-color:var(--ft-background-color);cursor:pointer;display:flex;outline:none;transition:background-color .3s,color .3s;text-align:left;padding:.75rem 1.5rem;width:100%}.ft-list__item:hover{text-decoration:none}.ft-list__item:hover:not(.active){--ft-background-color: var(--ft-background-color-hover);--ft-text-color: var(--text-color-hover)}.ft-list__item.ft-active,.ft-list__item:active{--ft-background-color: var(--ft-background-color-active);--ft-text-color: var(--ft-text-color-active)}.ft-list__item .ft-item{max-width:100%;display:flex;align-items:center;gap:.25rem}.ft-list__item .ft-item__icon{font-size:1.5rem}.ft-list__item .ft-item__icon+.ft-item__label{display:block;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.ft-list__item .ft-item__icon,.ft-list__item .ft-item__label{transition:margin-left .3s}.ft-list__item .ft-item__toggle{transition:transform .2s}.ft-list__item .ft-item__label{flex-grow:1}.ft-collapsible{overflow:hidden;transition:max-height .2s;max-height:100vh}.ft-collapsible-header{font-weight:500}.ft-collapsible-header>div{display:flex;align-items:center;flex-grow:1}.ft-collapsible-header.ft-show .ft-item__toggle{transform:rotate(90deg)}.ft-collapsible:not(.ft-show){max-height:0;background-color:transparent}.ft-header{text-transform:uppercase;font-weight:700;padding:.75rem 1.5rem .25rem;font-size:.75rem;opacity:.3}\n"], dependencies: [{ kind: "directive", type: i2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i2.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { kind: "directive", type: i2.NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { kind: "directive", type: i2.NgSwitchDefault, selector: "[ngSwitchDefault]" }, { kind: "component", type: i3.IconComponent, selector: "ft-icon", inputs: ["class", "collection", "mode", "name", "path", "size", "src"] }, { kind: "directive", type: i1.RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "directive", type: i1.RouterLinkActive, selector: "[routerLinkActive]", inputs: ["routerLinkActiveOptions", "ariaCurrentWhenActive", "routerLinkActive"], outputs: ["isActiveChange"], exportAs: ["routerLinkActive"] }] });
|
|
49
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.2", ngImport: i0, type: ListComponent, decorators: [{
|
|
50
50
|
type: Component,
|
|
51
|
-
args: [{ selector: 'ft-list', template: "<ng-container *ngTemplateOutlet=\"switch; context: { children: items }\"></ng-container>\n<ng-template #switch let-children=\"children\" let-level=\"level\">\n <ng-container *ngFor=\"let item of children\" [ngSwitch]=\"item.type\">\n <ng-container *ngSwitchCase=\"'collapsible'\">\n <ng-container *ngTemplateOutlet=\"collapsible; context: { item: item }\"></ng-container>\n </ng-container>\n <ng-container *ngSwitchCase=\"'header'\">\n <ng-container *ngTemplateOutlet=\"header; context: { item: item }\"></ng-container>\n </ng-container>\n <ng-container *ngSwitchDefault>\n <ng-container *ngTemplateOutlet=\"action; context: { item: item }\"></ng-container>\n </ng-container>\n </ng-container>\n</ng-template>\n<ng-template #action let-item=\"item\">\n <ng-container [ngSwitch]=\"getComponentType(item)\">\n <button *ngSwitchCase=\"'button'\" type=\"button\" matRipple class=\"ft-list__item\" [ngClass]=\"item.class\"\n (click)=\"setItem(item)\">\n <ng-container *ngTemplateOutlet=\"text; context: { item: item }\"></ng-container>\n </button>\n <a *ngSwitchCase=\"'link'\" [routerLink]=\"item.url\" routerLinkActive=\"ft-active\" matRipple class=\"ft-list__item\"\n [ngClass]=\"item.class\" (click)=\"setItem(item)\">\n <ng-container *ngTemplateOutlet=\"text; context: { item: item }\"></ng-container>\n </a>\n </ng-container>\n</ng-template>\n<ng-template #collapsible let-item=\"item\">\n <button type=\"button\" matRipple class=\"ft-collapsible-header ft-list__item\"\n [ngClass]=\"{ 'ft-show': item.metadata?.show }\" (click)=\"toggleCollapsible(item)\">\n <div class=\"ft-item\">\n <ft-icon class=\"ft-item__icon\" *ngIf=\"item[iconNameField]\" [name]=\"item[iconNameField]\"\n [collection]=\"iconCollection\" [path]=\"iconPath\"></ft-icon>\n <div class=\"ft-item__label\">{{ item[labelField] }}</div>\n <ft-icon class=\"ft-item__toggle\" name=\"angle-right\" size=\"1\"></ft-icon>\n </div>\n </button>\n <div class=\"ft-collapsible\" [ngClass]=\"{ 'ft-show': item.metadata?.show }\" *ngIf=\"item.children\">\n <ng-container *ngTemplateOutlet=\"switch; context: { children: item.children }\"></ng-container>\n </div>\n</ng-template>\n<ng-template #header let-item=\"item\">\n <div class=\"ft-header\" [ngClass]=\"item.class\">\n {{ item[labelField] }}\n </div>\n</ng-template>\n<ng-template #text let-item=\"item\">\n <div class=\"ft-item\">\n <ft-icon class=\"ft-item__icon\" *ngIf=\"item[iconNameField]\" [name]=\"item[iconNameField]\" [collection]=\"iconCollection\"\n [path]=\"iconPath\"></ft-icon>\n <div class=\"ft-item__label\">{{ item[labelField] }}</div>\n </div>\n</ng-template>", styles: [".ft-list{display:block;overflow:auto}.ft-list__item{border:0;box-sizing:border-box;color:var(--ft-text-color);background-color:var(--ft-background-color);cursor:pointer;display:flex;outline:none;transition:background-color .3s,color .3s;text-align:left;padding:.75rem 1.5rem;width:100%}.ft-list__item:hover{text-decoration:none}.ft-list__item:hover:not(.active){--ft-background-color: var(--ft-background-color-hover);--ft-text-color: var(--text-color-hover)}.ft-list__item.ft-active,.ft-list__item:active{--ft-background-color: var(--ft-background-color-active);--ft-text-color: var(--ft-text-color-active)}.ft-list__item .ft-item{max-width:100%;display:flex;align-items:center;gap:.25rem}.ft-list__item .ft-item__icon{font-size:1.5rem}.ft-list__item .ft-item__icon+.ft-item__label{display:block;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.ft-list__item .ft-item__icon,.ft-list__item .ft-item__label{transition:margin-left .3s}.ft-list__item .ft-item__toggle{transition:transform .2s}.ft-list__item .ft-item__label{flex-grow:1}.ft-collapsible{overflow:hidden;transition:max-height .2s;max-height:100vh
|
|
51
|
+
args: [{ selector: 'ft-list', template: "<ng-container *ngTemplateOutlet=\"switch; context: { children: items }\"></ng-container>\n<ng-template #switch let-children=\"children\" let-level=\"level\">\n <ng-container *ngFor=\"let item of children\" [ngSwitch]=\"item.type\">\n <ng-container *ngSwitchCase=\"'collapsible'\">\n <ng-container *ngTemplateOutlet=\"collapsible; context: { item: item }\"></ng-container>\n </ng-container>\n <ng-container *ngSwitchCase=\"'header'\">\n <ng-container *ngTemplateOutlet=\"header; context: { item: item }\"></ng-container>\n </ng-container>\n <ng-container *ngSwitchDefault>\n <ng-container *ngTemplateOutlet=\"action; context: { item: item }\"></ng-container>\n </ng-container>\n </ng-container>\n</ng-template>\n<ng-template #action let-item=\"item\">\n <ng-container [ngSwitch]=\"getComponentType(item)\">\n <button *ngSwitchCase=\"'button'\" type=\"button\" matRipple class=\"ft-list__item\" [ngClass]=\"item.class\"\n (click)=\"setItem(item)\">\n <ng-container *ngTemplateOutlet=\"text; context: { item: item }\"></ng-container>\n </button>\n <a *ngSwitchCase=\"'link'\" [routerLink]=\"item.url\" routerLinkActive=\"ft-active\" matRipple class=\"ft-list__item\"\n [ngClass]=\"item.class\" (click)=\"setItem(item)\">\n <ng-container *ngTemplateOutlet=\"text; context: { item: item }\"></ng-container>\n </a>\n </ng-container>\n</ng-template>\n<ng-template #collapsible let-item=\"item\">\n <button type=\"button\" matRipple class=\"ft-collapsible-header ft-list__item\"\n [ngClass]=\"{ 'ft-show': item.metadata?.show }\" (click)=\"toggleCollapsible(item)\">\n <div class=\"ft-item\">\n <ft-icon class=\"ft-item__icon\" *ngIf=\"item[iconNameField]\" [name]=\"item[iconNameField]\"\n [collection]=\"iconCollection\" [path]=\"iconPath\"></ft-icon>\n <div class=\"ft-item__label\">{{ item[labelField] }}</div>\n <ft-icon class=\"ft-item__toggle\" name=\"angle-right\" size=\"1\"></ft-icon>\n </div>\n </button>\n <div class=\"ft-collapsible\" [ngClass]=\"{ 'ft-show': item.metadata?.show }\" *ngIf=\"item.children\">\n <ng-container *ngTemplateOutlet=\"switch; context: { children: item.children }\"></ng-container>\n </div>\n</ng-template>\n<ng-template #header let-item=\"item\">\n <div class=\"ft-header\" [ngClass]=\"item.class\">\n {{ item[labelField] }}\n </div>\n</ng-template>\n<ng-template #text let-item=\"item\">\n <div class=\"ft-item\">\n <ft-icon class=\"ft-item__icon\" *ngIf=\"item[iconNameField]\" [name]=\"item[iconNameField]\" [collection]=\"iconCollection\"\n [path]=\"iconPath\"></ft-icon>\n <div class=\"ft-item__label\">{{ item[labelField] }}</div>\n </div>\n</ng-template>", styles: [".ft-list{display:block;overflow:auto}.ft-list__item{border:0;box-sizing:border-box;color:var(--ft-text-color);background-color:var(--ft-background-color);cursor:pointer;display:flex;outline:none;transition:background-color .3s,color .3s;text-align:left;padding:.75rem 1.5rem;width:100%}.ft-list__item:hover{text-decoration:none}.ft-list__item:hover:not(.active){--ft-background-color: var(--ft-background-color-hover);--ft-text-color: var(--text-color-hover)}.ft-list__item.ft-active,.ft-list__item:active{--ft-background-color: var(--ft-background-color-active);--ft-text-color: var(--ft-text-color-active)}.ft-list__item .ft-item{max-width:100%;display:flex;align-items:center;gap:.25rem}.ft-list__item .ft-item__icon{font-size:1.5rem}.ft-list__item .ft-item__icon+.ft-item__label{display:block;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.ft-list__item .ft-item__icon,.ft-list__item .ft-item__label{transition:margin-left .3s}.ft-list__item .ft-item__toggle{transition:transform .2s}.ft-list__item .ft-item__label{flex-grow:1}.ft-collapsible{overflow:hidden;transition:max-height .2s;max-height:100vh}.ft-collapsible-header{font-weight:500}.ft-collapsible-header>div{display:flex;align-items:center;flex-grow:1}.ft-collapsible-header.ft-show .ft-item__toggle{transform:rotate(90deg)}.ft-collapsible:not(.ft-show){max-height:0;background-color:transparent}.ft-header{text-transform:uppercase;font-weight:700;padding:.75rem 1.5rem .25rem;font-size:.75rem;opacity:.3}\n"] }]
|
|
52
52
|
}], ctorParameters: function () { return [{ type: i1.Router }]; }, propDecorators: { change: [{
|
|
53
53
|
type: Output
|
|
54
54
|
}], iconCollection: [{
|
|
@@ -67,4 +67,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.0", ngImpor
|
|
|
67
67
|
type: HostBinding,
|
|
68
68
|
args: ['class']
|
|
69
69
|
}] } });
|
|
70
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
70
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGlzdC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy91aS9zcmMvbGliL25hdmlnYXRpb24vbGlzdC9saXN0LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3VpL3NyYy9saWIvbmF2aWdhdGlvbi9saXN0L2xpc3QuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsV0FBVyxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7Ozs7O0FBVXBGLE1BQU0sT0FBTyxhQUFhO0lBZ0J4QixZQUNVLE1BQWM7UUFBZCxXQUFNLEdBQU4sTUFBTSxDQUFRO1FBaEJkLFdBQU0sR0FBRyxJQUFJLFlBQVksRUFBVSxDQUFDO1FBRXJDLGtCQUFhLEdBQVcsVUFBVSxDQUFDO1FBRW5DLGVBQVUsR0FBVyxPQUFPLENBQUM7UUFHN0IsVUFBSyxHQUFXLEVBQUUsQ0FBQztJQVV4QixDQUFDO0lBVEwsSUFBMEIsV0FBVztRQUNuQyxPQUFPO1lBQ0wsU0FBUztZQUNULElBQUksQ0FBQyxLQUFLO1NBQ1gsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDZCxDQUFDO0lBQUEsQ0FBQztJQU1GLGdCQUFnQixDQUFDLElBQVk7UUFDM0IsSUFBSSxJQUFJLEdBQVcsTUFBTSxDQUFDO1FBQzFCLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLGdGQUFnRixDQUFDLEVBQUU7WUFDakgsSUFBSSxHQUFHLFFBQVEsQ0FBQztTQUNqQjthQUFNO1lBQ0wsSUFBSSxHQUFHLE1BQU0sQ0FBQztTQUNmO1FBQ0QsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBQ0QsT0FBTyxDQUFDLElBQVk7UUFDbEIsSUFBSSxJQUFJLENBQUMsR0FBRyxFQUFFO1lBQ1osSUFBSSxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxnRkFBZ0YsQ0FBQyxFQUFFO2dCQUNwRyxNQUFNLENBQUMsUUFBUSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDO2FBQ2pDO1NBQ0Y7YUFBTSxJQUFJLElBQUksQ0FBQyxLQUFLLEVBQUU7WUFDckIsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO1NBQ2Q7SUFDSCxDQUFDO0lBQ0QsaUJBQWlCLENBQUMsTUFBYztRQUM5QixNQUFNLENBQUMsUUFBUSxHQUFHLE1BQU0sQ0FBQyxRQUFRLElBQUksRUFBRSxDQUFDO1FBQ3hDLE1BQU0sQ0FBQyxRQUFRLENBQUMsSUFBSSxHQUFHLENBQUMsTUFBTSxDQUFDLFFBQVEsRUFBRSxJQUFJLENBQUM7UUFDOUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDM0IsQ0FBQzs7MEdBMUNVLGFBQWE7OEZBQWIsYUFBYSxtU0NWMUIsZ3FGQW1EYzsyRkR6Q0QsYUFBYTtrQkFMekIsU0FBUzsrQkFDRSxTQUFTOzZGQUtULE1BQU07c0JBQWYsTUFBTTtnQkFDRSxjQUFjO3NCQUF0QixLQUFLO2dCQUNHLGFBQWE7c0JBQXJCLEtBQUs7Z0JBQ0csUUFBUTtzQkFBaEIsS0FBSztnQkFDRyxVQUFVO3NCQUFsQixLQUFLO2dCQUNHLEtBQUs7c0JBQWIsS0FBSztnQkFFRyxLQUFLO3NCQUFiLEtBQUs7Z0JBQ29CLFdBQVc7c0JBQXBDLFdBQVc7dUJBQUMsT0FBTyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgRXZlbnRFbWl0dGVyLCBIb3N0QmluZGluZywgSW5wdXQsIE91dHB1dCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgUm91dGVyIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcblxuaW1wb3J0IHsgQWN0aW9uIH0gZnJvbSAnLi4vLi4vbW9kZWxzL2FjdGlvbic7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2Z0LWxpc3QnLFxuICB0ZW1wbGF0ZVVybDogJy4vbGlzdC5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL2xpc3QuY29tcG9uZW50LnNjc3MnXVxufSlcbmV4cG9ydCBjbGFzcyBMaXN0Q29tcG9uZW50IHtcbiAgQE91dHB1dCgpIGNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8QWN0aW9uPigpO1xuICBASW5wdXQoKSBpY29uQ29sbGVjdGlvbiE6IHN0cmluZztcbiAgQElucHV0KCkgaWNvbk5hbWVGaWVsZDogc3RyaW5nID0gJ2ljb25OYW1lJztcbiAgQElucHV0KCkgaWNvblBhdGghOiBzdHJpbmc7XG4gIEBJbnB1dCgpIGxhYmVsRmllbGQ6IHN0cmluZyA9ICdsYWJlbCc7XG4gIEBJbnB1dCgpIGl0ZW1zITogQWN0aW9uW107XG5cbiAgQElucHV0KCkgY2xhc3M6IHN0cmluZyA9ICcnO1xuICBASG9zdEJpbmRpbmcoJ2NsYXNzJykgZ2V0IGhvc3RDbGFzc2VzKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIFtcbiAgICAgICdmdC1saXN0JyxcbiAgICAgIHRoaXMuY2xhc3NcbiAgICBdLmpvaW4oJyAnKTtcbiAgfTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIHJvdXRlcjogUm91dGVyXG4gICkgeyB9XG5cbiAgZ2V0Q29tcG9uZW50VHlwZShpdGVtOiBBY3Rpb24pOiBzdHJpbmcge1xuICAgIGxldCB0eXBlOiBzdHJpbmcgPSAndGV4dCc7XG4gICAgaWYgKCFpdGVtLnVybCB8fCBpdGVtLnVybC5tYXRjaCgvXihodHRwfGh0dHBzKTpcXC9cXC8oXFx3Kzp7MCwxfVxcdypAKT8oXFxTKykoOlswLTldKyk/KFxcL3xcXC8oW1xcdyMhOi4/Kz0mJUAhXFwtXFwvXSkpPy8pKSB7XG4gICAgICB0eXBlID0gJ2J1dHRvbic7XG4gICAgfSBlbHNlIHtcbiAgICAgIHR5cGUgPSAnbGluayc7XG4gICAgfVxuICAgIHJldHVybiB0eXBlO1xuICB9XG4gIHNldEl0ZW0oaXRlbTogQWN0aW9uKTogdm9pZCB7XG4gICAgaWYgKGl0ZW0udXJsKSB7XG4gICAgICBpZiAoaXRlbS51cmwubWF0Y2goL14oaHR0cHxodHRwcyk6XFwvXFwvKFxcdys6ezAsMX1cXHcqQCk/KFxcUyspKDpbMC05XSspPyhcXC98XFwvKFtcXHcjITouPys9JiVAIVxcLVxcL10pKT8vKSkge1xuICAgICAgICB3aW5kb3cubG9jYXRpb24uaHJlZiA9IGl0ZW0udXJsO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoaXRlbS5jbGljaykge1xuICAgICAgaXRlbS5jbGljaygpO1xuICAgIH1cbiAgfVxuICB0b2dnbGVDb2xsYXBzaWJsZShhY3Rpb246IEFjdGlvbik6IHZvaWQge1xuICAgIGFjdGlvbi5tZXRhZGF0YSA9IGFjdGlvbi5tZXRhZGF0YSB8fCB7fTtcbiAgICBhY3Rpb24ubWV0YWRhdGEuc2hvdyA9ICFhY3Rpb24ubWV0YWRhdGE/LnNob3c7XG4gICAgdGhpcy5jaGFuZ2UuZW1pdChhY3Rpb24pO1xuICB9XG59XG4iLCI8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwic3dpdGNoOyBjb250ZXh0OiB7IGNoaWxkcmVuOiBpdGVtcyB9XCI+PC9uZy1jb250YWluZXI+XG48bmctdGVtcGxhdGUgI3N3aXRjaCBsZXQtY2hpbGRyZW49XCJjaGlsZHJlblwiIGxldC1sZXZlbD1cImxldmVsXCI+XG4gIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGl0ZW0gb2YgY2hpbGRyZW5cIiBbbmdTd2l0Y2hdPVwiaXRlbS50eXBlXCI+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiJ2NvbGxhcHNpYmxlJ1wiPlxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImNvbGxhcHNpYmxlOyBjb250ZXh0OiB7IGl0ZW06IGl0ZW0gfVwiPjwvbmctY29udGFpbmVyPlxuICAgIDwvbmctY29udGFpbmVyPlxuICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cIidoZWFkZXInXCI+XG4gICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiaGVhZGVyOyBjb250ZXh0OiB7IGl0ZW06IGl0ZW0gfVwiPjwvbmctY29udGFpbmVyPlxuICAgIDwvbmctY29udGFpbmVyPlxuICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoRGVmYXVsdD5cbiAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJhY3Rpb247IGNvbnRleHQ6IHsgaXRlbTogaXRlbSB9XCI+PC9uZy1jb250YWluZXI+XG4gICAgPC9uZy1jb250YWluZXI+XG4gIDwvbmctY29udGFpbmVyPlxuPC9uZy10ZW1wbGF0ZT5cbjxuZy10ZW1wbGF0ZSAjYWN0aW9uIGxldC1pdGVtPVwiaXRlbVwiPlxuICA8bmctY29udGFpbmVyIFtuZ1N3aXRjaF09XCJnZXRDb21wb25lbnRUeXBlKGl0ZW0pXCI+XG4gICAgPGJ1dHRvbiAqbmdTd2l0Y2hDYXNlPVwiJ2J1dHRvbidcIiB0eXBlPVwiYnV0dG9uXCIgbWF0UmlwcGxlIGNsYXNzPVwiZnQtbGlzdF9faXRlbVwiIFtuZ0NsYXNzXT1cIml0ZW0uY2xhc3NcIlxuICAgICAgKGNsaWNrKT1cInNldEl0ZW0oaXRlbSlcIj5cbiAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJ0ZXh0OyBjb250ZXh0OiB7IGl0ZW06IGl0ZW0gfVwiPjwvbmctY29udGFpbmVyPlxuICAgIDwvYnV0dG9uPlxuICAgIDxhICpuZ1N3aXRjaENhc2U9XCInbGluaydcIiBbcm91dGVyTGlua109XCJpdGVtLnVybFwiIHJvdXRlckxpbmtBY3RpdmU9XCJmdC1hY3RpdmVcIiBtYXRSaXBwbGUgY2xhc3M9XCJmdC1saXN0X19pdGVtXCJcbiAgICAgIFtuZ0NsYXNzXT1cIml0ZW0uY2xhc3NcIiAoY2xpY2spPVwic2V0SXRlbShpdGVtKVwiPlxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cInRleHQ7IGNvbnRleHQ6IHsgaXRlbTogaXRlbSB9XCI+PC9uZy1jb250YWluZXI+XG4gICAgPC9hPlxuICA8L25nLWNvbnRhaW5lcj5cbjwvbmctdGVtcGxhdGU+XG48bmctdGVtcGxhdGUgI2NvbGxhcHNpYmxlIGxldC1pdGVtPVwiaXRlbVwiPlxuICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBtYXRSaXBwbGUgY2xhc3M9XCJmdC1jb2xsYXBzaWJsZS1oZWFkZXIgZnQtbGlzdF9faXRlbVwiXG4gICAgW25nQ2xhc3NdPVwieyAnZnQtc2hvdyc6IGl0ZW0ubWV0YWRhdGE/LnNob3cgfVwiIChjbGljayk9XCJ0b2dnbGVDb2xsYXBzaWJsZShpdGVtKVwiPlxuICAgIDxkaXYgY2xhc3M9XCJmdC1pdGVtXCI+XG4gICAgICA8ZnQtaWNvbiBjbGFzcz1cImZ0LWl0ZW1fX2ljb25cIiAqbmdJZj1cIml0ZW1baWNvbk5hbWVGaWVsZF1cIiBbbmFtZV09XCJpdGVtW2ljb25OYW1lRmllbGRdXCJcbiAgICAgICAgW2NvbGxlY3Rpb25dPVwiaWNvbkNvbGxlY3Rpb25cIiBbcGF0aF09XCJpY29uUGF0aFwiPjwvZnQtaWNvbj5cbiAgICAgIDxkaXYgY2xhc3M9XCJmdC1pdGVtX19sYWJlbFwiPnt7IGl0ZW1bbGFiZWxGaWVsZF0gfX08L2Rpdj5cbiAgICAgIDxmdC1pY29uIGNsYXNzPVwiZnQtaXRlbV9fdG9nZ2xlXCIgbmFtZT1cImFuZ2xlLXJpZ2h0XCIgc2l6ZT1cIjFcIj48L2Z0LWljb24+XG4gICAgPC9kaXY+XG4gIDwvYnV0dG9uPlxuICA8ZGl2IGNsYXNzPVwiZnQtY29sbGFwc2libGVcIiBbbmdDbGFzc109XCJ7ICdmdC1zaG93JzogaXRlbS5tZXRhZGF0YT8uc2hvdyB9XCIgKm5nSWY9XCJpdGVtLmNoaWxkcmVuXCI+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cInN3aXRjaDsgY29udGV4dDogeyBjaGlsZHJlbjogaXRlbS5jaGlsZHJlbiB9XCI+PC9uZy1jb250YWluZXI+XG4gIDwvZGl2PlxuPC9uZy10ZW1wbGF0ZT5cbjxuZy10ZW1wbGF0ZSAjaGVhZGVyIGxldC1pdGVtPVwiaXRlbVwiPlxuICA8ZGl2IGNsYXNzPVwiZnQtaGVhZGVyXCIgW25nQ2xhc3NdPVwiaXRlbS5jbGFzc1wiPlxuICAgIHt7IGl0ZW1bbGFiZWxGaWVsZF0gfX1cbiAgPC9kaXY+XG48L25nLXRlbXBsYXRlPlxuPG5nLXRlbXBsYXRlICN0ZXh0IGxldC1pdGVtPVwiaXRlbVwiPlxuICA8ZGl2IGNsYXNzPVwiZnQtaXRlbVwiPlxuICAgIDxmdC1pY29uIGNsYXNzPVwiZnQtaXRlbV9faWNvblwiICpuZ0lmPVwiaXRlbVtpY29uTmFtZUZpZWxkXVwiIFtuYW1lXT1cIml0ZW1baWNvbk5hbWVGaWVsZF1cIiBbY29sbGVjdGlvbl09XCJpY29uQ29sbGVjdGlvblwiXG4gICAgICBbcGF0aF09XCJpY29uUGF0aFwiPjwvZnQtaWNvbj5cbiAgICA8ZGl2IGNsYXNzPVwiZnQtaXRlbV9fbGFiZWxcIj57eyBpdGVtW2xhYmVsRmllbGRdIH19PC9kaXY+XG4gIDwvZGl2PlxuPC9uZy10ZW1wbGF0ZT4iXX0=
|
|
@@ -1,11 +1,10 @@
|
|
|
1
|
-
import { Component,
|
|
1
|
+
import { Component, HostBinding, Input } from '@angular/core';
|
|
2
2
|
import * as i0 from "@angular/core";
|
|
3
|
-
import * as i1 from "@angular/
|
|
4
|
-
import * as i2 from "
|
|
5
|
-
import * as i3 from "
|
|
3
|
+
import * as i1 from "@angular/common";
|
|
4
|
+
import * as i2 from "../../io/icon/icon.component";
|
|
5
|
+
import * as i3 from "@angular/router";
|
|
6
6
|
export class NavbarComponent {
|
|
7
|
-
constructor(
|
|
8
|
-
this.router = router;
|
|
7
|
+
constructor() {
|
|
9
8
|
this.iconNameField = 'iconName';
|
|
10
9
|
this.labelField = 'label';
|
|
11
10
|
this.labelPlacement = 'auto';
|
|
@@ -20,7 +19,6 @@ export class NavbarComponent {
|
|
|
20
19
|
].join(' ');
|
|
21
20
|
}
|
|
22
21
|
;
|
|
23
|
-
ngOnInit() { }
|
|
24
22
|
getComponentType(item) {
|
|
25
23
|
let type = 'text';
|
|
26
24
|
if (!item.url || item.url.match(/^(http|https):\/\/(\w+:{0,1}\w*@)?(\S+)(:[0-9]+)?(\/|\/([\w#!:.?+=&%@!\-\/]))?/)) {
|
|
@@ -48,12 +46,12 @@ export class NavbarComponent {
|
|
|
48
46
|
return `${item.label} ${item.url}`;
|
|
49
47
|
}
|
|
50
48
|
}
|
|
51
|
-
NavbarComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
52
|
-
NavbarComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "
|
|
53
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
49
|
+
NavbarComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.0.2", ngImport: i0, type: NavbarComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
50
|
+
NavbarComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.0.2", type: NavbarComponent, selector: "ft-navbar", inputs: { iconCollection: "iconCollection", iconNameField: "iconNameField", labelField: "labelField", labelPlacement: "labelPlacement", items: "items", position: "position", class: "class" }, host: { properties: { "class": "this.hostClasses" } }, ngImport: i0, template: "<ng-content select=\"[ftStart]\"></ng-content>\n<div class=\"list\" *ngIf=\"items\">\n <ng-container *ngFor=\"let item of items; trackBy: trackByItem\">\n <ng-container *ngTemplateOutlet=\"actionTemplate; context: { item: item }\"></ng-container>\n </ng-container>\n</div>\n<ng-content select=\"[ftEnd]\"></ng-content>\n<ng-template #actionTemplate let-item=\"item\">\n <ng-container [ngSwitch]=\"getComponentType(item)\">\n <button *ngSwitchCase=\"'button'\" type=\"button\" matRipple class=\"list__item\"\n [ngClass]=\"[labelPlacement, item.class || '' ]\" (click)=\"setItem(item)\">\n <ng-container *ngTemplateOutlet=\"textTemplate; context: { item: item }\"></ng-container>\n </button>\n <a *ngSwitchCase=\"'link'\" [routerLink]=\"item.url\" routerLinkActive=\"active\" matRipple class=\"list__item\"\n [ngClass]=\"[labelPlacement, item.class || '' ]\" (click)=\"setItem(item)\">\n <ng-container *ngTemplateOutlet=\"textTemplate; context: { item: item }\"></ng-container>\n </a>\n </ng-container>\n</ng-template>\n<ng-template #textTemplate let-item=\"item\">\n <div class=\"item\">\n <ft-icon class=\"item__icon\" *ngIf=\"item[iconNameField]\" [name]=\"item[iconNameField]\"\n [collection]=\"iconCollection\" [title]=\"labelPlacement === 'none' ? item[labelField] : '' \"></ft-icon>\n <div class=\"item__label\" *ngIf=\"labelPlacement !== 'none'\">{{ item[labelField] }}</div>\n </div>\n</ng-template>", styles: [""], dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i1.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { kind: "directive", type: i1.NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { kind: "component", type: i2.IconComponent, selector: "ft-icon", inputs: ["class", "collection", "mode", "name", "path", "size", "src"] }, { kind: "directive", type: i3.RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "directive", type: i3.RouterLinkActive, selector: "[routerLinkActive]", inputs: ["routerLinkActiveOptions", "ariaCurrentWhenActive", "routerLinkActive"], outputs: ["isActiveChange"], exportAs: ["routerLinkActive"] }] });
|
|
51
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.2", ngImport: i0, type: NavbarComponent, decorators: [{
|
|
54
52
|
type: Component,
|
|
55
|
-
args: [{ selector: 'ft-navbar', template: "<ng-content select=\"[ftStart]\"></ng-content>\n<div class=\"list\" *ngIf=\"items\">\n
|
|
56
|
-
}], ctorParameters: function () { return [
|
|
53
|
+
args: [{ selector: 'ft-navbar', template: "<ng-content select=\"[ftStart]\"></ng-content>\n<div class=\"list\" *ngIf=\"items\">\n <ng-container *ngFor=\"let item of items; trackBy: trackByItem\">\n <ng-container *ngTemplateOutlet=\"actionTemplate; context: { item: item }\"></ng-container>\n </ng-container>\n</div>\n<ng-content select=\"[ftEnd]\"></ng-content>\n<ng-template #actionTemplate let-item=\"item\">\n <ng-container [ngSwitch]=\"getComponentType(item)\">\n <button *ngSwitchCase=\"'button'\" type=\"button\" matRipple class=\"list__item\"\n [ngClass]=\"[labelPlacement, item.class || '' ]\" (click)=\"setItem(item)\">\n <ng-container *ngTemplateOutlet=\"textTemplate; context: { item: item }\"></ng-container>\n </button>\n <a *ngSwitchCase=\"'link'\" [routerLink]=\"item.url\" routerLinkActive=\"active\" matRipple class=\"list__item\"\n [ngClass]=\"[labelPlacement, item.class || '' ]\" (click)=\"setItem(item)\">\n <ng-container *ngTemplateOutlet=\"textTemplate; context: { item: item }\"></ng-container>\n </a>\n </ng-container>\n</ng-template>\n<ng-template #textTemplate let-item=\"item\">\n <div class=\"item\">\n <ft-icon class=\"item__icon\" *ngIf=\"item[iconNameField]\" [name]=\"item[iconNameField]\"\n [collection]=\"iconCollection\" [title]=\"labelPlacement === 'none' ? item[labelField] : '' \"></ft-icon>\n <div class=\"item__label\" *ngIf=\"labelPlacement !== 'none'\">{{ item[labelField] }}</div>\n </div>\n</ng-template>" }]
|
|
54
|
+
}], ctorParameters: function () { return []; }, propDecorators: { iconCollection: [{
|
|
57
55
|
type: Input
|
|
58
56
|
}], iconNameField: [{
|
|
59
57
|
type: Input
|
|
@@ -71,4 +69,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.0", ngImpor
|
|
|
71
69
|
type: HostBinding,
|
|
72
70
|
args: ['class']
|
|
73
71
|
}] } });
|
|
74
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
72
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmF2YmFyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3VpL3NyYy9saWIvbmF2aWdhdGlvbi9uYXZiYXIvbmF2YmFyLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3VpL3NyYy9saWIvbmF2aWdhdGlvbi9uYXZiYXIvbmF2YmFyLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsV0FBVyxFQUFFLEtBQUssRUFBRSxNQUFNLGVBQWUsQ0FBQzs7Ozs7QUFTOUQsTUFBTSxPQUFPLGVBQWU7SUFpQjFCO1FBZlMsa0JBQWEsR0FBVyxVQUFVLENBQUM7UUFDbkMsZUFBVSxHQUFXLE9BQU8sQ0FBQztRQUM3QixtQkFBYyxHQUEwRCxNQUFNLENBQUM7UUFFL0UsYUFBUSxHQUFpRCxNQUFNLENBQUM7UUFFaEUsVUFBSyxHQUFXLEVBQUUsQ0FBQztJQVNaLENBQUM7SUFSakIsSUFBMEIsV0FBVztRQUNuQyxPQUFPO1lBQ0wsV0FBVztZQUNYLElBQUksQ0FBQyxLQUFLO1lBQ1YsSUFBSSxDQUFDLFFBQVE7U0FDZCxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNkLENBQUM7SUFBQSxDQUFDO0lBSUYsZ0JBQWdCLENBQUMsSUFBWTtRQUMzQixJQUFJLElBQUksR0FBVyxNQUFNLENBQUM7UUFDMUIsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLElBQUksSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsZ0ZBQWdGLENBQUMsRUFBRTtZQUNqSCxJQUFJLEdBQUcsUUFBUSxDQUFDO1NBQ2pCO2FBQU07WUFDTCxJQUFJLEdBQUcsTUFBTSxDQUFDO1NBQ2Y7UUFDRCxPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUFDRCxPQUFPLENBQUMsSUFBWTtRQUNsQixJQUFJLElBQUksQ0FBQyxHQUFHLEVBQUU7WUFDWixJQUFJLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLGdGQUFnRixDQUFDLEVBQUU7Z0JBQ3BHLE1BQU0sQ0FBQyxRQUFRLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUM7YUFDakM7U0FDRjthQUFNLElBQUksSUFBSSxDQUFDLEtBQUssRUFBRTtZQUNyQixJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7U0FDZDtJQUNILENBQUM7SUFDRCxpQkFBaUIsQ0FBQyxNQUFjO1FBQzlCLE1BQU0sQ0FBQyxRQUFRLENBQUMsSUFBSSxHQUFHLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUM7SUFDL0MsQ0FBQztJQUNELFdBQVcsQ0FBQyxLQUFhLEVBQUUsSUFBWTtRQUNyQyxPQUFPLEdBQUcsSUFBSSxDQUFDLEtBQUssSUFBSSxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUM7SUFDckMsQ0FBQzs7NEdBMUNVLGVBQWU7Z0dBQWYsZUFBZSx3U0NUNUIsMC9DQXlCYzsyRkRoQkQsZUFBZTtrQkFMM0IsU0FBUzsrQkFDRSxXQUFXOzBFQUtaLGNBQWM7c0JBQXRCLEtBQUs7Z0JBQ0csYUFBYTtzQkFBckIsS0FBSztnQkFDRyxVQUFVO3NCQUFsQixLQUFLO2dCQUNHLGNBQWM7c0JBQXRCLEtBQUs7Z0JBQ0csS0FBSztzQkFBYixLQUFLO2dCQUNHLFFBQVE7c0JBQWhCLEtBQUs7Z0JBRUcsS0FBSztzQkFBYixLQUFLO2dCQUNvQixXQUFXO3NCQUFwQyxXQUFXO3VCQUFDLE9BQU8iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIEhvc3RCaW5kaW5nLCBJbnB1dCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5pbXBvcnQgeyBBY3Rpb24gfSBmcm9tICcuLi8uLi9tb2RlbHMvYWN0aW9uJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnZnQtbmF2YmFyJyxcbiAgdGVtcGxhdGVVcmw6ICcuL25hdmJhci5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL25hdmJhci5jb21wb25lbnQuc2NzcyddXG59KVxuZXhwb3J0IGNsYXNzIE5hdmJhckNvbXBvbmVudCB7XG4gIEBJbnB1dCgpIGljb25Db2xsZWN0aW9uITogc3RyaW5nO1xuICBASW5wdXQoKSBpY29uTmFtZUZpZWxkOiBzdHJpbmcgPSAnaWNvbk5hbWUnO1xuICBASW5wdXQoKSBsYWJlbEZpZWxkOiBzdHJpbmcgPSAnbGFiZWwnO1xuICBASW5wdXQoKSBsYWJlbFBsYWNlbWVudDogJ3RvcCcgfCAncmlnaHQnIHwgJ2JvdHRvbScgfCAnbGVmdCcgfCAnYXV0bycgfCAnbm9uZScgPSAnYXV0byc7XG4gIEBJbnB1dCgpIGl0ZW1zITogQWN0aW9uW107XG4gIEBJbnB1dCgpIHBvc2l0aW9uOiAndG9wJyB8ICdyaWdodCcgfCAnYm90dG9tJyB8ICdsZWZ0JyB8ICdhdXRvJyA9ICdhdXRvJztcblxuICBASW5wdXQoKSBjbGFzczogc3RyaW5nID0gJyc7XG4gIEBIb3N0QmluZGluZygnY2xhc3MnKSBnZXQgaG9zdENsYXNzZXMoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gW1xuICAgICAgJ2Z0LW5hdmJhcicsXG4gICAgICB0aGlzLmNsYXNzLFxuICAgICAgdGhpcy5wb3NpdGlvblxuICAgIF0uam9pbignICcpO1xuICB9O1xuXG4gIGNvbnN0cnVjdG9yKCkgeyB9XG5cbiAgZ2V0Q29tcG9uZW50VHlwZShpdGVtOiBBY3Rpb24pOiBzdHJpbmcge1xuICAgIGxldCB0eXBlOiBzdHJpbmcgPSAndGV4dCc7XG4gICAgaWYgKCFpdGVtLnVybCB8fCBpdGVtLnVybC5tYXRjaCgvXihodHRwfGh0dHBzKTpcXC9cXC8oXFx3Kzp7MCwxfVxcdypAKT8oXFxTKykoOlswLTldKyk/KFxcL3xcXC8oW1xcdyMhOi4/Kz0mJUAhXFwtXFwvXSkpPy8pKSB7XG4gICAgICB0eXBlID0gJ2J1dHRvbic7XG4gICAgfSBlbHNlIHtcbiAgICAgIHR5cGUgPSAnbGluayc7XG4gICAgfVxuICAgIHJldHVybiB0eXBlO1xuICB9XG4gIHNldEl0ZW0oaXRlbTogQWN0aW9uKTogdm9pZCB7XG4gICAgaWYgKGl0ZW0udXJsKSB7XG4gICAgICBpZiAoaXRlbS51cmwubWF0Y2goL14oaHR0cHxodHRwcyk6XFwvXFwvKFxcdys6ezAsMX1cXHcqQCk/KFxcUyspKDpbMC05XSspPyhcXC98XFwvKFtcXHcjITouPys9JiVAIVxcLVxcL10pKT8vKSkge1xuICAgICAgICB3aW5kb3cubG9jYXRpb24uaHJlZiA9IGl0ZW0udXJsO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoaXRlbS5jbGljaykge1xuICAgICAgaXRlbS5jbGljaygpO1xuICAgIH1cbiAgfVxuICB0b2dnbGVDb2xsYXBzaWJsZShhY3Rpb246IEFjdGlvbik6IHZvaWQge1xuICAgIGFjdGlvbi5tZXRhZGF0YS5zaG93ID0gIWFjdGlvbi5tZXRhZGF0YS5zaG93O1xuICB9XG4gIHRyYWNrQnlJdGVtKGluZGV4OiBudW1iZXIsIGl0ZW06IEFjdGlvbik6IHN0cmluZyB7XG4gICAgcmV0dXJuIGAke2l0ZW0ubGFiZWx9ICR7aXRlbS51cmx9YDtcbiAgfVxufVxuIiwiPG5nLWNvbnRlbnQgc2VsZWN0PVwiW2Z0U3RhcnRdXCI+PC9uZy1jb250ZW50PlxuPGRpdiBjbGFzcz1cImxpc3RcIiAqbmdJZj1cIml0ZW1zXCI+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgaXRlbSBvZiBpdGVtczsgdHJhY2tCeTogdHJhY2tCeUl0ZW1cIj5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImFjdGlvblRlbXBsYXRlOyBjb250ZXh0OiB7IGl0ZW06IGl0ZW0gfVwiPjwvbmctY29udGFpbmVyPlxuICAgIDwvbmctY29udGFpbmVyPlxuPC9kaXY+XG48bmctY29udGVudCBzZWxlY3Q9XCJbZnRFbmRdXCI+PC9uZy1jb250ZW50PlxuPG5nLXRlbXBsYXRlICNhY3Rpb25UZW1wbGF0ZSBsZXQtaXRlbT1cIml0ZW1cIj5cbiAgICA8bmctY29udGFpbmVyIFtuZ1N3aXRjaF09XCJnZXRDb21wb25lbnRUeXBlKGl0ZW0pXCI+XG4gICAgICAgIDxidXR0b24gKm5nU3dpdGNoQ2FzZT1cIididXR0b24nXCIgdHlwZT1cImJ1dHRvblwiIG1hdFJpcHBsZSBjbGFzcz1cImxpc3RfX2l0ZW1cIlxuICAgICAgICAgICAgW25nQ2xhc3NdPVwiW2xhYmVsUGxhY2VtZW50LCBpdGVtLmNsYXNzIHx8ICcnIF1cIiAoY2xpY2spPVwic2V0SXRlbShpdGVtKVwiPlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cInRleHRUZW1wbGF0ZTsgY29udGV4dDogeyBpdGVtOiBpdGVtIH1cIj48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPC9idXR0b24+XG4gICAgICAgIDxhICpuZ1N3aXRjaENhc2U9XCInbGluaydcIiBbcm91dGVyTGlua109XCJpdGVtLnVybFwiIHJvdXRlckxpbmtBY3RpdmU9XCJhY3RpdmVcIiBtYXRSaXBwbGUgY2xhc3M9XCJsaXN0X19pdGVtXCJcbiAgICAgICAgICAgIFtuZ0NsYXNzXT1cIltsYWJlbFBsYWNlbWVudCwgaXRlbS5jbGFzcyB8fCAnJyBdXCIgKGNsaWNrKT1cInNldEl0ZW0oaXRlbSlcIj5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJ0ZXh0VGVtcGxhdGU7IGNvbnRleHQ6IHsgaXRlbTogaXRlbSB9XCI+PC9uZy1jb250YWluZXI+XG4gICAgICAgIDwvYT5cbiAgICA8L25nLWNvbnRhaW5lcj5cbjwvbmctdGVtcGxhdGU+XG48bmctdGVtcGxhdGUgI3RleHRUZW1wbGF0ZSBsZXQtaXRlbT1cIml0ZW1cIj5cbiAgICA8ZGl2IGNsYXNzPVwiaXRlbVwiPlxuICAgICAgICA8ZnQtaWNvbiBjbGFzcz1cIml0ZW1fX2ljb25cIiAqbmdJZj1cIml0ZW1baWNvbk5hbWVGaWVsZF1cIiBbbmFtZV09XCJpdGVtW2ljb25OYW1lRmllbGRdXCJcbiAgICAgICAgICAgIFtjb2xsZWN0aW9uXT1cImljb25Db2xsZWN0aW9uXCIgW3RpdGxlXT1cImxhYmVsUGxhY2VtZW50ID09PSAnbm9uZScgPyBpdGVtW2xhYmVsRmllbGRdIDogJycgXCI+PC9mdC1pY29uPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiaXRlbV9fbGFiZWxcIiAqbmdJZj1cImxhYmVsUGxhY2VtZW50ICE9PSAnbm9uZSdcIj57eyBpdGVtW2xhYmVsRmllbGRdIH19PC9kaXY+XG4gICAgPC9kaXY+XG48L25nLXRlbXBsYXRlPiJdfQ==
|