@factor_ec/ui 2.1.3 → 3.0.1

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 (47) hide show
  1. package/esm2020/lib/io/expression-builder/expression-builder.component.mjs +1 -1
  2. package/esm2020/lib/io/icon/icon.component.mjs +2 -4
  3. package/esm2020/lib/io/image/image.component.mjs +2 -2
  4. package/esm2020/lib/io/io.module.mjs +1 -6
  5. package/esm2020/lib/io/message/message.component.mjs +3 -3
  6. package/esm2020/lib/layout/collapsible/collapsible.component.mjs +37 -0
  7. package/esm2020/lib/layout/layout.module.mjs +28 -0
  8. package/esm2020/lib/models/action.mjs +1 -1
  9. package/esm2020/lib/navigation/list/list.component.mjs +55 -25
  10. package/esm2020/lib/navigation/navigation.module.mjs +9 -15
  11. package/esm2020/lib/navigation/toolbar/toolbar.component.mjs +1 -1
  12. package/esm2020/lib/ui.module.mjs +8 -1
  13. package/esm2020/public-api.mjs +3 -5
  14. package/fesm2015/factor_ec-ui.mjs +120 -205
  15. package/fesm2015/factor_ec-ui.mjs.map +1 -1
  16. package/fesm2020/factor_ec-ui.mjs +119 -204
  17. package/fesm2020/factor_ec-ui.mjs.map +1 -1
  18. package/lib/io/icon/icon.component.d.ts +1 -2
  19. package/lib/io/io.module.d.ts +7 -8
  20. package/lib/layout/collapsible/collapsible.component.d.ts +10 -0
  21. package/lib/layout/layout.module.d.ts +9 -0
  22. package/lib/models/action.d.ts +0 -1
  23. package/lib/navigation/list/list.component.d.ts +10 -8
  24. package/lib/navigation/navigation.module.d.ts +8 -9
  25. package/lib/ui.module.d.ts +3 -2
  26. package/package.json +1 -1
  27. package/public-api.d.ts +2 -4
  28. package/scss/all.scss +5 -5
  29. package/scss/components/collapsible.scss +46 -0
  30. package/scss/components/dropdown.scss +56 -0
  31. package/scss/components/list.scss +24 -42
  32. package/scss/components/ph.scss +27 -0
  33. package/scss/components/popup.scss +7 -0
  34. package/scss/components.scss +8 -5
  35. package/scss/mixins/breakpoints.scss +123 -0
  36. package/scss/mixins.scss +1 -0
  37. package/scss/reboot.scss +20 -15
  38. package/scss/root.scss +34 -21
  39. package/scss/variables.scss +76 -1
  40. package/esm2020/lib/io/listview/listview.component.mjs +0 -11
  41. package/esm2020/lib/navigation/navbar/navbar.component.mjs +0 -72
  42. package/esm2020/lib/navigation/searchbox/searchbox.component.mjs +0 -96
  43. package/lib/io/listview/listview.component.d.ts +0 -5
  44. package/lib/navigation/navbar/navbar.component.d.ts +0 -19
  45. package/lib/navigation/searchbox/searchbox.component.d.ts +0 -34
  46. package/scss/components/button.scss +0 -23
  47. package/scss/layout.scss +0 -12
@@ -1,5 +1,5 @@
1
1
  import * as i0 from '@angular/core';
2
- import { Component, Input, HostBinding, Inject, EventEmitter, Output, Injectable, ApplicationRef, PLATFORM_ID, Directive, NgModule, ViewChild } from '@angular/core';
2
+ import { Component, Input, HostBinding, Inject, EventEmitter, Output, Injectable, ApplicationRef, PLATFORM_ID, Directive, NgModule } from '@angular/core';
3
3
  import * as i1 from '@factor_ec/utils';
4
4
  import * as i1$1 from '@angular/common';
5
5
  import { isPlatformBrowser, CommonModule } from '@angular/common';
@@ -10,7 +10,7 @@ import { MAT_DIALOG_DATA, MatDialogModule } from '@angular/material/dialog';
10
10
  import * as i2 from '@angular/material/button';
11
11
  import { MatButtonModule } from '@angular/material/button';
12
12
  import { ReplaySubject } from 'rxjs';
13
- import * as i1$3 from '@angular/router';
13
+ import * as i4 from '@angular/router';
14
14
  import { RouterModule } from '@angular/router';
15
15
  import * as i5 from '@angular/material/menu';
16
16
  import { MatMenuModule } from '@angular/material/menu';
@@ -153,7 +153,7 @@ class IconComponent {
153
153
  }
154
154
  }
155
155
  IconComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.0.2", ngImport: i0, type: IconComponent, deps: [{ token: 'FactorUiConfiguration' }], target: i0.ɵɵFactoryTarget.Component });
156
- IconComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.0.2", type: IconComponent, selector: "ft-icon", inputs: { collection: "collection", mode: "mode", name: "name", path: "path", size: "size", src: "src", class: "class" }, host: { properties: { "class": "this.hostClasses" } }, ngImport: i0, template: "<svg *ngIf=\"!src; else imageTemplate\">\n <use attr.xlink:href=\"{{ url }}\" attr.href=\"{{ url }}\" />\n</svg>\n<ng-template #imageTemplate>\n <img [src]=\"src\" />\n</ng-template>", dependencies: [{ kind: "directive", type: i1$1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }] });
156
+ IconComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.0.2", type: IconComponent, selector: "ft-icon", inputs: { collection: "collection", mode: "mode", name: "name", path: "path", src: "src", class: "class" }, host: { properties: { "class": "this.hostClasses" } }, ngImport: i0, template: "<svg *ngIf=\"!src; else imageTemplate\">\n <use attr.xlink:href=\"{{ url }}\" attr.href=\"{{ url }}\" />\n</svg>\n<ng-template #imageTemplate>\n <img [src]=\"src\" />\n</ng-template>", dependencies: [{ kind: "directive", type: i1$1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }] });
157
157
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.2", ngImport: i0, type: IconComponent, decorators: [{
158
158
  type: Component,
159
159
  args: [{ selector: 'ft-icon', template: "<svg *ngIf=\"!src; else imageTemplate\">\n <use attr.xlink:href=\"{{ url }}\" attr.href=\"{{ url }}\" />\n</svg>\n<ng-template #imageTemplate>\n <img [src]=\"src\" />\n</ng-template>" }]
@@ -170,8 +170,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.2", ngImpor
170
170
  type: Input
171
171
  }], path: [{
172
172
  type: Input
173
- }], size: [{
174
- type: Input
175
173
  }], src: [{
176
174
  type: Input
177
175
  }], class: [{
@@ -238,10 +236,10 @@ class ImageComponent {
238
236
  }
239
237
  }
240
238
  ImageComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.0.2", ngImport: i0, type: ImageComponent, deps: [{ token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Component });
241
- ImageComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.0.2", type: ImageComponent, selector: "ft-image", inputs: { class: "class", src: "src" }, host: { properties: { "class.ft-image--error": "this.error", "class.ft-image--loading": "this.loading", "class": "this.hostClasses" } }, ngImport: i0, template: "<img *ngIf=\"shown\" [src]=\"src\" />\n<ft-icon name=\"warning\" size=\"2\" *ngIf=\"error\"></ft-icon>\n", styles: [":host{display:inline-block;overflow:hidden;display:flex;align-items:center;justify-content:center}:host.ft-image--loading{background-color:#00000008;position:relative;overflow:hidden}:host.ft-image--loading:after{content:\"\";display:block;background-color:#00000005;position:absolute;top:0;bottom:0;width:100%;height:100%;transform:translate(0);animation:1.5s placeholder-loading ease-in-out infinite}:host.ft-image--error{background-color:#ff000008}:host.ft-image--error ft-icon{color:var(--danger)}img{position:relative;z-index:1;max-width:100%;max-height:100%;animation:fade-in .3s}@keyframes fade-in{0%{opacity:0}to{opacity:1}}@keyframes placeholder-loading{0%{transform:translate(-100%)}to{transform:translate(100%)}}\n"], dependencies: [{ kind: "directive", type: i1$1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: IconComponent, selector: "ft-icon", inputs: ["collection", "mode", "name", "path", "size", "src", "class"] }] });
239
+ ImageComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.0.2", type: ImageComponent, selector: "ft-image", inputs: { class: "class", src: "src" }, host: { properties: { "class.ft-image--error": "this.error", "class.ft-image--loading": "this.loading", "class": "this.hostClasses" } }, ngImport: i0, template: "<img *ngIf=\"shown\" [src]=\"src\" />\n<ft-icon name=\"warning\" size=\"2\" *ngIf=\"error\"></ft-icon>\n", styles: [":host{display:inline-block;overflow:hidden;display:flex;align-items:center;justify-content:center}:host.ft-image--loading{background-color:#00000008;position:relative;overflow:hidden}:host.ft-image--loading:after{content:\"\";display:block;background-color:#00000005;position:absolute;top:0;bottom:0;width:100%;height:100%;transform:translate(0);animation:1.5s ft-placeholder-loading ease-in-out infinite}:host.ft-image--error{background-color:#ff000008}:host.ft-image--error ft-icon{color:var(--danger)}img{position:relative;z-index:1;max-width:100%;max-height:100%;animation:ft-fade-in .3s}@keyframes ft-fade-in{0%{opacity:0}to{opacity:1}}@keyframes ft-placeholder-loading{0%{transform:translate(-100%)}to{transform:translate(100%)}}\n"], dependencies: [{ kind: "directive", type: i1$1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: IconComponent, selector: "ft-icon", inputs: ["collection", "mode", "name", "path", "src", "class"] }] });
242
240
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.2", ngImport: i0, type: ImageComponent, decorators: [{
243
241
  type: Component,
244
- args: [{ selector: 'ft-image', template: "<img *ngIf=\"shown\" [src]=\"src\" />\n<ft-icon name=\"warning\" size=\"2\" *ngIf=\"error\"></ft-icon>\n", styles: [":host{display:inline-block;overflow:hidden;display:flex;align-items:center;justify-content:center}:host.ft-image--loading{background-color:#00000008;position:relative;overflow:hidden}:host.ft-image--loading:after{content:\"\";display:block;background-color:#00000005;position:absolute;top:0;bottom:0;width:100%;height:100%;transform:translate(0);animation:1.5s placeholder-loading ease-in-out infinite}:host.ft-image--error{background-color:#ff000008}:host.ft-image--error ft-icon{color:var(--danger)}img{position:relative;z-index:1;max-width:100%;max-height:100%;animation:fade-in .3s}@keyframes fade-in{0%{opacity:0}to{opacity:1}}@keyframes placeholder-loading{0%{transform:translate(-100%)}to{transform:translate(100%)}}\n"] }]
242
+ args: [{ selector: 'ft-image', template: "<img *ngIf=\"shown\" [src]=\"src\" />\n<ft-icon name=\"warning\" size=\"2\" *ngIf=\"error\"></ft-icon>\n", styles: [":host{display:inline-block;overflow:hidden;display:flex;align-items:center;justify-content:center}:host.ft-image--loading{background-color:#00000008;position:relative;overflow:hidden}:host.ft-image--loading:after{content:\"\";display:block;background-color:#00000005;position:absolute;top:0;bottom:0;width:100%;height:100%;transform:translate(0);animation:1.5s ft-placeholder-loading ease-in-out infinite}:host.ft-image--error{background-color:#ff000008}:host.ft-image--error ft-icon{color:var(--danger)}img{position:relative;z-index:1;max-width:100%;max-height:100%;animation:ft-fade-in .3s}@keyframes ft-fade-in{0%{opacity:0}to{opacity:1}}@keyframes ft-placeholder-loading{0%{transform:translate(-100%)}to{transform:translate(100%)}}\n"] }]
245
243
  }], ctorParameters: function () { return [{ type: i0.ElementRef }]; }, propDecorators: { class: [{
246
244
  type: Input
247
245
  }], error: [{
@@ -286,10 +284,10 @@ class MessageComponent {
286
284
  }
287
285
  }
288
286
  MessageComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.0.2", ngImport: i0, type: MessageComponent, deps: [{ token: MAT_DIALOG_DATA }], target: i0.ɵɵFactoryTarget.Component });
289
- MessageComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.0.2", type: MessageComponent, selector: "ft-message", outputs: { beforeSelect: "beforeSelect" }, ngImport: i0, template: "<h1 mat-dialog-title class=\"ft-message__title\" *ngIf=\"data.options?.title\">\n <ft-icon *ngIf=\"data.options?.titleIcon\" [name]=\"data.options?.titleIcon?.name\"\n [collection]=\"data.options?.titleIcon?.collection\" [ngClass]=\"data.options?.titleIcon?.class\"\n [size]=\"data.options?.titleIcon?.size || 2\"></ft-icon>\n <div>{{ data.options?.title }}</div>\n</h1>\n<div mat-dialog-content class=\"ft-message__content\" [ngClass]=\"data.options?.class\">\n <ft-icon *ngIf=\"data.options?.icon\" [name]=\"data.options?.icon?.name\" [collection]=\"data.options?.icon?.collection\"\n [ngClass]=\"data.options?.icon?.class\" [size]=\"data.options?.icon?.size || 2\"></ft-icon>\n <ng-container [ngSwitch]=\"data.message?.type\">\n <div *ngSwitchCase=\"'html'\" [innerHTML]=\"data.message?.content\"></div>\n <ng-container *ngSwitchDefault>{{ data.message?.content }}</ng-container>\n </ng-container>\n</div>\n<div mat-dialog-actions class=\"ft-message__actions\" *ngIf=\"data.options.actionsVisible\">\n <ng-container *ngIf=\"data.options?.actions?.length > 0; else acceptTemplate\">\n <ng-container *ngFor=\"let action of data.options?.actions; let i = index\">\n <ng-container [ngSwitch]=\"action.type\">\n <button type=\"button\" *ngSwitchCase=\"'raised'\" mat-raised-button [color]=\"action.metadata?.color\"\n (click)=\"select(action.value)\" autofocus>{{ action.label }}</button>\n <button type=\"button\" *ngSwitchCase=\"'flat'\" mat-flat-button [color]=\"action.metadata?.color\"\n (click)=\"select(action.value)\" autofocus>{{ action.label }}</button>\n <button type=\"button\" *ngSwitchCase=\"'stroked'\" mat-stroked-button [color]=\"action.metadata?.color\"\n (click)=\"select(action.value)\" autofocus>{{ action.label }}</button>\n <button type=\"button\" *ngSwitchDefault mat-button [color]=\"action.metadata?.color\"\n (click)=\"select(action.value)\">{{ action.label }}</button>\n </ng-container>\n </ng-container>\n </ng-container>\n</div>\n<ng-template #acceptTemplate>\n <button type=\"button\" mat-stroked-button color=\"primary\" autofocus (click)=\"select('-1')\" i18n>Accept</button>\n</ng-template>", styles: [".mat-mdc-dialog-title{display:flex;align-items:center;gap:.5rem}.mat-mdc-dialog-content{display:flex;align-items:center;margin-bottom:.5rem}.mat-mdc-dialog-content ft-icon{margin-right:.5rem}.mat-mdc-dialog-actions{display:flex;align-items:center;justify-content:flex-end;padding-bottom:1.5rem}\n"], dependencies: [{ kind: "directive", type: i1$1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1$1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1$1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1$1.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { kind: "directive", type: i1$1.NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { kind: "directive", type: i1$1.NgSwitchDefault, selector: "[ngSwitchDefault]" }, { kind: "component", type: i2.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { kind: "directive", type: i3.MatDialogTitle, selector: "[mat-dialog-title], [matDialogTitle]", inputs: ["id"], exportAs: ["matDialogTitle"] }, { kind: "directive", type: i3.MatDialogContent, selector: "[mat-dialog-content], mat-dialog-content, [matDialogContent]" }, { kind: "directive", type: i3.MatDialogActions, selector: "[mat-dialog-actions], mat-dialog-actions, [matDialogActions]", inputs: ["align"] }, { kind: "component", type: IconComponent, selector: "ft-icon", inputs: ["collection", "mode", "name", "path", "size", "src", "class"] }] });
287
+ MessageComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.0.2", type: MessageComponent, selector: "ft-message", outputs: { beforeSelect: "beforeSelect" }, ngImport: i0, template: "<h1 mat-dialog-title class=\"ft-message__title\" *ngIf=\"data.options?.title\">\n <ft-icon *ngIf=\"data.options?.titleIcon\" [name]=\"data.options?.titleIcon?.name\"\n [collection]=\"data.options?.titleIcon?.collection\" [ngClass]=\"data.options?.titleIcon?.class\"></ft-icon>\n <div>{{ data.options?.title }}</div>\n</h1>\n<div mat-dialog-content class=\"ft-message__content\" [ngClass]=\"data.options?.class\">\n <ft-icon *ngIf=\"data.options?.icon\" [name]=\"data.options?.icon?.name\" [collection]=\"data.options?.icon?.collection\"\n [ngClass]=\"data.options?.icon?.class\"></ft-icon>\n <ng-container [ngSwitch]=\"data.message?.type\">\n <div *ngSwitchCase=\"'html'\" [innerHTML]=\"data.message?.content\"></div>\n <ng-container *ngSwitchDefault>{{ data.message?.content }}</ng-container>\n </ng-container>\n</div>\n<div mat-dialog-actions class=\"ft-message__actions\" *ngIf=\"data.options.actionsVisible\">\n <ng-container *ngIf=\"data.options?.actions?.length > 0; else acceptTemplate\">\n <ng-container *ngFor=\"let action of data.options?.actions; let i = index\">\n <ng-container [ngSwitch]=\"action.type\">\n <button type=\"button\" *ngSwitchCase=\"'raised'\" mat-raised-button [color]=\"action.metadata?.color\"\n (click)=\"select(action.value)\" autofocus>{{ action.label }}</button>\n <button type=\"button\" *ngSwitchCase=\"'flat'\" mat-flat-button [color]=\"action.metadata?.color\"\n (click)=\"select(action.value)\" autofocus>{{ action.label }}</button>\n <button type=\"button\" *ngSwitchCase=\"'stroked'\" mat-stroked-button [color]=\"action.metadata?.color\"\n (click)=\"select(action.value)\" autofocus>{{ action.label }}</button>\n <button type=\"button\" *ngSwitchDefault mat-button [color]=\"action.metadata?.color\"\n (click)=\"select(action.value)\">{{ action.label }}</button>\n </ng-container>\n </ng-container>\n </ng-container>\n</div>\n<ng-template #acceptTemplate>\n <button type=\"button\" mat-stroked-button color=\"primary\" autofocus (click)=\"select('-1')\" i18n>Accept</button>\n</ng-template>", styles: [".mat-mdc-dialog-title{display:flex;align-items:center;gap:.5rem}.mat-mdc-dialog-content{display:flex;align-items:center;margin-bottom:.5rem}.mat-mdc-dialog-content ft-icon{margin-right:.5rem}.mat-mdc-dialog-actions{display:flex;align-items:center;justify-content:flex-end;padding-bottom:1.5rem}\n"], dependencies: [{ kind: "directive", type: i1$1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1$1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1$1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1$1.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { kind: "directive", type: i1$1.NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { kind: "directive", type: i1$1.NgSwitchDefault, selector: "[ngSwitchDefault]" }, { kind: "component", type: i2.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { kind: "directive", type: i3.MatDialogTitle, selector: "[mat-dialog-title], [matDialogTitle]", inputs: ["id"], exportAs: ["matDialogTitle"] }, { kind: "directive", type: i3.MatDialogContent, selector: "[mat-dialog-content], mat-dialog-content, [matDialogContent]" }, { kind: "directive", type: i3.MatDialogActions, selector: "[mat-dialog-actions], mat-dialog-actions, [matDialogActions]", inputs: ["align"] }, { kind: "component", type: IconComponent, selector: "ft-icon", inputs: ["collection", "mode", "name", "path", "src", "class"] }] });
290
288
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.2", ngImport: i0, type: MessageComponent, decorators: [{
291
289
  type: Component,
292
- args: [{ selector: 'ft-message', template: "<h1 mat-dialog-title class=\"ft-message__title\" *ngIf=\"data.options?.title\">\n <ft-icon *ngIf=\"data.options?.titleIcon\" [name]=\"data.options?.titleIcon?.name\"\n [collection]=\"data.options?.titleIcon?.collection\" [ngClass]=\"data.options?.titleIcon?.class\"\n [size]=\"data.options?.titleIcon?.size || 2\"></ft-icon>\n <div>{{ data.options?.title }}</div>\n</h1>\n<div mat-dialog-content class=\"ft-message__content\" [ngClass]=\"data.options?.class\">\n <ft-icon *ngIf=\"data.options?.icon\" [name]=\"data.options?.icon?.name\" [collection]=\"data.options?.icon?.collection\"\n [ngClass]=\"data.options?.icon?.class\" [size]=\"data.options?.icon?.size || 2\"></ft-icon>\n <ng-container [ngSwitch]=\"data.message?.type\">\n <div *ngSwitchCase=\"'html'\" [innerHTML]=\"data.message?.content\"></div>\n <ng-container *ngSwitchDefault>{{ data.message?.content }}</ng-container>\n </ng-container>\n</div>\n<div mat-dialog-actions class=\"ft-message__actions\" *ngIf=\"data.options.actionsVisible\">\n <ng-container *ngIf=\"data.options?.actions?.length > 0; else acceptTemplate\">\n <ng-container *ngFor=\"let action of data.options?.actions; let i = index\">\n <ng-container [ngSwitch]=\"action.type\">\n <button type=\"button\" *ngSwitchCase=\"'raised'\" mat-raised-button [color]=\"action.metadata?.color\"\n (click)=\"select(action.value)\" autofocus>{{ action.label }}</button>\n <button type=\"button\" *ngSwitchCase=\"'flat'\" mat-flat-button [color]=\"action.metadata?.color\"\n (click)=\"select(action.value)\" autofocus>{{ action.label }}</button>\n <button type=\"button\" *ngSwitchCase=\"'stroked'\" mat-stroked-button [color]=\"action.metadata?.color\"\n (click)=\"select(action.value)\" autofocus>{{ action.label }}</button>\n <button type=\"button\" *ngSwitchDefault mat-button [color]=\"action.metadata?.color\"\n (click)=\"select(action.value)\">{{ action.label }}</button>\n </ng-container>\n </ng-container>\n </ng-container>\n</div>\n<ng-template #acceptTemplate>\n <button type=\"button\" mat-stroked-button color=\"primary\" autofocus (click)=\"select('-1')\" i18n>Accept</button>\n</ng-template>", styles: [".mat-mdc-dialog-title{display:flex;align-items:center;gap:.5rem}.mat-mdc-dialog-content{display:flex;align-items:center;margin-bottom:.5rem}.mat-mdc-dialog-content ft-icon{margin-right:.5rem}.mat-mdc-dialog-actions{display:flex;align-items:center;justify-content:flex-end;padding-bottom:1.5rem}\n"] }]
290
+ args: [{ selector: 'ft-message', template: "<h1 mat-dialog-title class=\"ft-message__title\" *ngIf=\"data.options?.title\">\n <ft-icon *ngIf=\"data.options?.titleIcon\" [name]=\"data.options?.titleIcon?.name\"\n [collection]=\"data.options?.titleIcon?.collection\" [ngClass]=\"data.options?.titleIcon?.class\"></ft-icon>\n <div>{{ data.options?.title }}</div>\n</h1>\n<div mat-dialog-content class=\"ft-message__content\" [ngClass]=\"data.options?.class\">\n <ft-icon *ngIf=\"data.options?.icon\" [name]=\"data.options?.icon?.name\" [collection]=\"data.options?.icon?.collection\"\n [ngClass]=\"data.options?.icon?.class\"></ft-icon>\n <ng-container [ngSwitch]=\"data.message?.type\">\n <div *ngSwitchCase=\"'html'\" [innerHTML]=\"data.message?.content\"></div>\n <ng-container *ngSwitchDefault>{{ data.message?.content }}</ng-container>\n </ng-container>\n</div>\n<div mat-dialog-actions class=\"ft-message__actions\" *ngIf=\"data.options.actionsVisible\">\n <ng-container *ngIf=\"data.options?.actions?.length > 0; else acceptTemplate\">\n <ng-container *ngFor=\"let action of data.options?.actions; let i = index\">\n <ng-container [ngSwitch]=\"action.type\">\n <button type=\"button\" *ngSwitchCase=\"'raised'\" mat-raised-button [color]=\"action.metadata?.color\"\n (click)=\"select(action.value)\" autofocus>{{ action.label }}</button>\n <button type=\"button\" *ngSwitchCase=\"'flat'\" mat-flat-button [color]=\"action.metadata?.color\"\n (click)=\"select(action.value)\" autofocus>{{ action.label }}</button>\n <button type=\"button\" *ngSwitchCase=\"'stroked'\" mat-stroked-button [color]=\"action.metadata?.color\"\n (click)=\"select(action.value)\" autofocus>{{ action.label }}</button>\n <button type=\"button\" *ngSwitchDefault mat-button [color]=\"action.metadata?.color\"\n (click)=\"select(action.value)\">{{ action.label }}</button>\n </ng-container>\n </ng-container>\n </ng-container>\n</div>\n<ng-template #acceptTemplate>\n <button type=\"button\" mat-stroked-button color=\"primary\" autofocus (click)=\"select('-1')\" i18n>Accept</button>\n</ng-template>", styles: [".mat-mdc-dialog-title{display:flex;align-items:center;gap:.5rem}.mat-mdc-dialog-content{display:flex;align-items:center;margin-bottom:.5rem}.mat-mdc-dialog-content ft-icon{margin-right:.5rem}.mat-mdc-dialog-actions{display:flex;align-items:center;justify-content:flex-end;padding-bottom:1.5rem}\n"] }]
293
291
  }], ctorParameters: function () {
294
292
  return [{ type: undefined, decorators: [{
295
293
  type: Inject,
@@ -631,15 +629,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.2", ngImpor
631
629
  args: ['class']
632
630
  }] } });
633
631
 
634
- class ListviewComponent {
635
- }
636
- ListviewComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.0.2", ngImport: i0, type: ListviewComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
637
- ListviewComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.0.2", type: ListviewComponent, selector: "ft-listview", ngImport: i0, template: "<p>listview works!</p>\n", styles: [""] });
638
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.2", ngImport: i0, type: ListviewComponent, decorators: [{
639
- type: Component,
640
- args: [{ selector: 'ft-listview', template: "<p>listview works!</p>\n" }]
641
- }] });
642
-
643
632
  class ExpressionBuilderComponent {
644
633
  constructor() {
645
634
  this.properties = [
@@ -702,7 +691,7 @@ class ExpressionBuilderComponent {
702
691
  }
703
692
  }
704
693
  ExpressionBuilderComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.0.2", ngImport: i0, type: ExpressionBuilderComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
705
- ExpressionBuilderComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.0.2", type: ExpressionBuilderComponent, selector: "ft-expression-builder", ngImport: i0, template: "<ng-container [ngTemplateOutlet]=\"filterGroupTemplate\" [ngTemplateOutletContext]=\"{filter:filters, parent:null}\">\n</ng-container>\n<ng-template #filterGroupTemplate let-filter=\"filter\" let-parent=\"parent\">\n <div class=\"ft-filter\">\n <div class=\"ft-filter__tools\">\n <button type=\"button\" class=\"filter__button filter__button--icon filter__button--toggle\"\n (click)=\"filter.collapsed = !filter.collapsed\" *ngIf=\"filter.children && filter.children.length > 0\">\n <ft-icon name=\"angle-right\" [ngClass]=\"{'ft-icon--open': !filter.collapsed}\"></ft-icon>\n </button>\n <div class=\"ft-filter__button-group\">\n <button type=\"button\" class=\"filter__button\"\n [ngClass]=\"{'ft-filter__button--active': filter.operator === operator.value}\"\n *ngFor=\"let operator of groupOperators\" (click)=\"filter.operator = operator.value\">{{ operator.label\n }}</button>\n </div>\n <button type=\"button\" class=\"ft-filter__button\" (click)=\"add('filter', filter)\" *ngIf=\"filter.operator\">Agregar\n filtro</button>\n <button type=\"button\" class=\"ft-filter__button\" (click)=\"add('group', filter)\" *ngIf=\"filter.operator\">Agregar\n grupo</button>\n <button type=\"button\" class=\"ft-filter__button filter__button--icon filter__button--remove\"\n (click)=\"remove(filter, parent)\" *ngIf=\"parent\">\n <ft-icon name=\"close\"></ft-icon>\n </button>\n </div>\n <div class=\"ft-filter__children\" *ngIf=\"filter.children && filter.children.length > 0 && !filter.collapsed\">\n <ng-container *ngFor=\"let child of filter.children\">\n <ng-container [ngTemplateOutlet]=\"child.type === 'group' ? filterGroupTemplate : filterTemplate\"\n [ngTemplateOutletContext]=\"{filter:child, parent:filter.children}\">\n </ng-container>\n </ng-container>\n </div>\n </div>\n</ng-template>\n<ng-template #filterTemplate let-filter=\"filter\" let-parent=\"parent\">\n <div class=\"ft-filter\">\n <div class=\"ft-filter__tools\">\n <select class=\"filter__input\">\n <option *ngFor=\"let property of properties\" value=\"property.value\">{{ property.label }}</option>\n </select>\n <select class=\"ft-filter__input\">\n <option>Mayor que</option>\n <option>Mayor igual que</option>\n <option>Igual que</option>\n <option>Menor que</option>\n <option>Menor igual que</option>\n </select>\n <input type=\"text\" class=\"ft-filter__input\" />\n <button type=\"button\" class=\"filter__button filter__button--icon\" (click)=\"remove(filter, parent)\">\n <ft-icon name=\"close\"></ft-icon>\n </button>\n </div>\n </div>\n</ng-template>", styles: [":host{display:block;padding:2rem}.ft-filter{--focus-color: #00bcd4;--focus-color-rgb: 0, 188, 212;display:inline-flex;flex-direction:column;align-items:flex-start;gap:.5rem}.ft-filter__tools{display:inline-flex;align-items:center;gap:.5rem;padding:.5rem;background-color:#0000000d;border:1px solid rgba(0,0,0,.1);border-radius:.5rem;overflow:hidden}.ft-filter__children{padding-left:1rem;position:relative;display:inline-flex;flex-direction:column;align-items:flex-start;gap:.5rem}.ft-filter__button{border:1px solid rgba(0,0,0,.2);background-color:transparent;border-radius:.25rem;padding:.25rem .5rem;background-color:#ffffff4d}.ft-filter__button--icon{border-color:transparent;background-color:transparent;padding:.25rem}.ft-filter__button--active{background-color:var(--focus-color);color:#fff}.ft-filter__button:not(.ft-filter__button--active):hover{border-color:var(--focus-color);background-color:rgba(var(--focus-color-rgb),.1)}.ft-filter__button:not(.ft-filter__button--active):active{background-color:rgba(var(--focus-color-rgb),.3)}.ft-filter__button:focus{outline:none;border-color:var(--focus-color)}.ft-filter__button .ft-icon{display:block;transition:transform .2s}.ft-filter__button .ft-icon--open{transform:rotate(90deg)}.ft-filter__button-group .ft-filter__button{border-radius:0}.ft-filter__button-group .ft-filter__button:first-child{border-top-left-radius:.25rem;border-bottom-left-radius:.25rem;border-right:0}.ft-filter__button-group .ft-filter__button:last-child{border-top-right-radius:.25rem;border-bottom-right-radius:.25rem}.ft-filter__input{background-color:#fff;border:1px solid rgba(0,0,0,.2);border-radius:.25rem;padding:.25rem;transition:box-shadow .2s}.ft-filter__input:hover{border-color:var(--focus-color)}.ft-filter__input:focus{outline:none;border-color:var(--focus-color);box-shadow:0 0 0 2px rgba(var(--focus-color-rgb),.2)}.ft-filter select.ft-filter__input{background-image:url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill='none' stroke='%23343a40' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='m2 5 6 6 6-6'/%3e%3c/svg%3e\");background-repeat:no-repeat;background-position:right .5rem center;background-size:.625rem;padding-right:1.5rem;-webkit-appearance:none;appearance:none}@keyframes slide-right{0%{margin-left:calc(-40px + .5rem)}to{margin-left:0}}\n"], dependencies: [{ kind: "directive", type: i1$1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1$1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1$1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1$1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: IconComponent, selector: "ft-icon", inputs: ["collection", "mode", "name", "path", "size", "src", "class"] }] });
694
+ ExpressionBuilderComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.0.2", type: ExpressionBuilderComponent, selector: "ft-expression-builder", ngImport: i0, template: "<ng-container [ngTemplateOutlet]=\"filterGroupTemplate\" [ngTemplateOutletContext]=\"{filter:filters, parent:null}\">\n</ng-container>\n<ng-template #filterGroupTemplate let-filter=\"filter\" let-parent=\"parent\">\n <div class=\"ft-filter\">\n <div class=\"ft-filter__tools\">\n <button type=\"button\" class=\"filter__button filter__button--icon filter__button--toggle\"\n (click)=\"filter.collapsed = !filter.collapsed\" *ngIf=\"filter.children && filter.children.length > 0\">\n <ft-icon name=\"angle-right\" [ngClass]=\"{'ft-icon--open': !filter.collapsed}\"></ft-icon>\n </button>\n <div class=\"ft-filter__button-group\">\n <button type=\"button\" class=\"filter__button\"\n [ngClass]=\"{'ft-filter__button--active': filter.operator === operator.value}\"\n *ngFor=\"let operator of groupOperators\" (click)=\"filter.operator = operator.value\">{{ operator.label\n }}</button>\n </div>\n <button type=\"button\" class=\"ft-filter__button\" (click)=\"add('filter', filter)\" *ngIf=\"filter.operator\">Agregar\n filtro</button>\n <button type=\"button\" class=\"ft-filter__button\" (click)=\"add('group', filter)\" *ngIf=\"filter.operator\">Agregar\n grupo</button>\n <button type=\"button\" class=\"ft-filter__button filter__button--icon filter__button--remove\"\n (click)=\"remove(filter, parent)\" *ngIf=\"parent\">\n <ft-icon name=\"close\"></ft-icon>\n </button>\n </div>\n <div class=\"ft-filter__children\" *ngIf=\"filter.children && filter.children.length > 0 && !filter.collapsed\">\n <ng-container *ngFor=\"let child of filter.children\">\n <ng-container [ngTemplateOutlet]=\"child.type === 'group' ? filterGroupTemplate : filterTemplate\"\n [ngTemplateOutletContext]=\"{filter:child, parent:filter.children}\">\n </ng-container>\n </ng-container>\n </div>\n </div>\n</ng-template>\n<ng-template #filterTemplate let-filter=\"filter\" let-parent=\"parent\">\n <div class=\"ft-filter\">\n <div class=\"ft-filter__tools\">\n <select class=\"filter__input\">\n <option *ngFor=\"let property of properties\" value=\"property.value\">{{ property.label }}</option>\n </select>\n <select class=\"ft-filter__input\">\n <option>Mayor que</option>\n <option>Mayor igual que</option>\n <option>Igual que</option>\n <option>Menor que</option>\n <option>Menor igual que</option>\n </select>\n <input type=\"text\" class=\"ft-filter__input\" />\n <button type=\"button\" class=\"filter__button filter__button--icon\" (click)=\"remove(filter, parent)\">\n <ft-icon name=\"close\"></ft-icon>\n </button>\n </div>\n </div>\n</ng-template>", styles: [":host{display:block;padding:2rem}.ft-filter{--focus-color: #00bcd4;--focus-color-rgb: 0, 188, 212;display:inline-flex;flex-direction:column;align-items:flex-start;gap:.5rem}.ft-filter__tools{display:inline-flex;align-items:center;gap:.5rem;padding:.5rem;background-color:#0000000d;border:1px solid rgba(0,0,0,.1);border-radius:.5rem;overflow:hidden}.ft-filter__children{padding-left:1rem;position:relative;display:inline-flex;flex-direction:column;align-items:flex-start;gap:.5rem}.ft-filter__button{border:1px solid rgba(0,0,0,.2);background-color:transparent;border-radius:.25rem;padding:.25rem .5rem;background-color:#ffffff4d}.ft-filter__button--icon{border-color:transparent;background-color:transparent;padding:.25rem}.ft-filter__button--active{background-color:var(--focus-color);color:#fff}.ft-filter__button:not(.ft-filter__button--active):hover{border-color:var(--focus-color);background-color:rgba(var(--focus-color-rgb),.1)}.ft-filter__button:not(.ft-filter__button--active):active{background-color:rgba(var(--focus-color-rgb),.3)}.ft-filter__button:focus{outline:none;border-color:var(--focus-color)}.ft-filter__button .ft-icon{display:block;transition:transform .2s}.ft-filter__button .ft-icon--open{transform:rotate(90deg)}.ft-filter__button-group .ft-filter__button{border-radius:0}.ft-filter__button-group .ft-filter__button:first-child{border-top-left-radius:.25rem;border-bottom-left-radius:.25rem;border-right:0}.ft-filter__button-group .ft-filter__button:last-child{border-top-right-radius:.25rem;border-bottom-right-radius:.25rem}.ft-filter__input{background-color:#fff;border:1px solid rgba(0,0,0,.2);border-radius:.25rem;padding:.25rem;transition:box-shadow .2s}.ft-filter__input:hover{border-color:var(--focus-color)}.ft-filter__input:focus{outline:none;border-color:var(--focus-color);box-shadow:0 0 0 2px rgba(var(--focus-color-rgb),.2)}.ft-filter select.ft-filter__input{background-image:url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill='none' stroke='%23343a40' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='m2 5 6 6 6-6'/%3e%3c/svg%3e\");background-repeat:no-repeat;background-position:right .5rem center;background-size:.625rem;padding-right:1.5rem;-webkit-appearance:none;appearance:none}@keyframes slide-right{0%{margin-left:calc(-40px + .5rem)}to{margin-left:0}}\n"], dependencies: [{ kind: "directive", type: i1$1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1$1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1$1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1$1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: IconComponent, selector: "ft-icon", inputs: ["collection", "mode", "name", "path", "src", "class"] }] });
706
695
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.2", ngImport: i0, type: ExpressionBuilderComponent, decorators: [{
707
696
  type: Component,
708
697
  args: [{ selector: 'ft-expression-builder', template: "<ng-container [ngTemplateOutlet]=\"filterGroupTemplate\" [ngTemplateOutletContext]=\"{filter:filters, parent:null}\">\n</ng-container>\n<ng-template #filterGroupTemplate let-filter=\"filter\" let-parent=\"parent\">\n <div class=\"ft-filter\">\n <div class=\"ft-filter__tools\">\n <button type=\"button\" class=\"filter__button filter__button--icon filter__button--toggle\"\n (click)=\"filter.collapsed = !filter.collapsed\" *ngIf=\"filter.children && filter.children.length > 0\">\n <ft-icon name=\"angle-right\" [ngClass]=\"{'ft-icon--open': !filter.collapsed}\"></ft-icon>\n </button>\n <div class=\"ft-filter__button-group\">\n <button type=\"button\" class=\"filter__button\"\n [ngClass]=\"{'ft-filter__button--active': filter.operator === operator.value}\"\n *ngFor=\"let operator of groupOperators\" (click)=\"filter.operator = operator.value\">{{ operator.label\n }}</button>\n </div>\n <button type=\"button\" class=\"ft-filter__button\" (click)=\"add('filter', filter)\" *ngIf=\"filter.operator\">Agregar\n filtro</button>\n <button type=\"button\" class=\"ft-filter__button\" (click)=\"add('group', filter)\" *ngIf=\"filter.operator\">Agregar\n grupo</button>\n <button type=\"button\" class=\"ft-filter__button filter__button--icon filter__button--remove\"\n (click)=\"remove(filter, parent)\" *ngIf=\"parent\">\n <ft-icon name=\"close\"></ft-icon>\n </button>\n </div>\n <div class=\"ft-filter__children\" *ngIf=\"filter.children && filter.children.length > 0 && !filter.collapsed\">\n <ng-container *ngFor=\"let child of filter.children\">\n <ng-container [ngTemplateOutlet]=\"child.type === 'group' ? filterGroupTemplate : filterTemplate\"\n [ngTemplateOutletContext]=\"{filter:child, parent:filter.children}\">\n </ng-container>\n </ng-container>\n </div>\n </div>\n</ng-template>\n<ng-template #filterTemplate let-filter=\"filter\" let-parent=\"parent\">\n <div class=\"ft-filter\">\n <div class=\"ft-filter__tools\">\n <select class=\"filter__input\">\n <option *ngFor=\"let property of properties\" value=\"property.value\">{{ property.label }}</option>\n </select>\n <select class=\"ft-filter__input\">\n <option>Mayor que</option>\n <option>Mayor igual que</option>\n <option>Igual que</option>\n <option>Menor que</option>\n <option>Menor igual que</option>\n </select>\n <input type=\"text\" class=\"ft-filter__input\" />\n <button type=\"button\" class=\"filter__button filter__button--icon\" (click)=\"remove(filter, parent)\">\n <ft-icon name=\"close\"></ft-icon>\n </button>\n </div>\n </div>\n</ng-template>", styles: [":host{display:block;padding:2rem}.ft-filter{--focus-color: #00bcd4;--focus-color-rgb: 0, 188, 212;display:inline-flex;flex-direction:column;align-items:flex-start;gap:.5rem}.ft-filter__tools{display:inline-flex;align-items:center;gap:.5rem;padding:.5rem;background-color:#0000000d;border:1px solid rgba(0,0,0,.1);border-radius:.5rem;overflow:hidden}.ft-filter__children{padding-left:1rem;position:relative;display:inline-flex;flex-direction:column;align-items:flex-start;gap:.5rem}.ft-filter__button{border:1px solid rgba(0,0,0,.2);background-color:transparent;border-radius:.25rem;padding:.25rem .5rem;background-color:#ffffff4d}.ft-filter__button--icon{border-color:transparent;background-color:transparent;padding:.25rem}.ft-filter__button--active{background-color:var(--focus-color);color:#fff}.ft-filter__button:not(.ft-filter__button--active):hover{border-color:var(--focus-color);background-color:rgba(var(--focus-color-rgb),.1)}.ft-filter__button:not(.ft-filter__button--active):active{background-color:rgba(var(--focus-color-rgb),.3)}.ft-filter__button:focus{outline:none;border-color:var(--focus-color)}.ft-filter__button .ft-icon{display:block;transition:transform .2s}.ft-filter__button .ft-icon--open{transform:rotate(90deg)}.ft-filter__button-group .ft-filter__button{border-radius:0}.ft-filter__button-group .ft-filter__button:first-child{border-top-left-radius:.25rem;border-bottom-left-radius:.25rem;border-right:0}.ft-filter__button-group .ft-filter__button:last-child{border-top-right-radius:.25rem;border-bottom-right-radius:.25rem}.ft-filter__input{background-color:#fff;border:1px solid rgba(0,0,0,.2);border-radius:.25rem;padding:.25rem;transition:box-shadow .2s}.ft-filter__input:hover{border-color:var(--focus-color)}.ft-filter__input:focus{outline:none;border-color:var(--focus-color);box-shadow:0 0 0 2px rgba(var(--focus-color-rgb),.2)}.ft-filter select.ft-filter__input{background-image:url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill='none' stroke='%23343a40' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='m2 5 6 6 6-6'/%3e%3c/svg%3e\");background-repeat:no-repeat;background-position:right .5rem center;background-size:.625rem;padding-right:1.5rem;-webkit-appearance:none;appearance:none}@keyframes slide-right{0%{margin-left:calc(-40px + .5rem)}to{margin-left:0}}\n"] }]
@@ -719,7 +708,6 @@ IoModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "15.0
719
708
  RatingComponent,
720
709
  ObserveIntersectingDirective,
721
710
  TimelineComponent,
722
- ListviewComponent,
723
711
  MessageContentComponent,
724
712
  ExpressionBuilderComponent], imports: [CommonModule,
725
713
  MatButtonModule,
@@ -732,7 +720,6 @@ IoModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "15.0
732
720
  RatingComponent,
733
721
  ObserveIntersectingDirective,
734
722
  TimelineComponent,
735
- ListviewComponent,
736
723
  MessageContentComponent,
737
724
  ExpressionBuilderComponent] });
738
725
  IoModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "15.0.2", ngImport: i0, type: IoModule, imports: [CommonModule,
@@ -751,7 +738,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.2", ngImpor
751
738
  RatingComponent,
752
739
  ObserveIntersectingDirective,
753
740
  TimelineComponent,
754
- ListviewComponent,
755
741
  MessageContentComponent,
756
742
  ExpressionBuilderComponent
757
743
  ],
@@ -770,235 +756,162 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.2", ngImpor
770
756
  RatingComponent,
771
757
  ObserveIntersectingDirective,
772
758
  TimelineComponent,
773
- ListviewComponent,
774
759
  MessageContentComponent,
775
760
  ExpressionBuilderComponent
776
761
  ]
777
762
  }]
778
763
  }] });
779
764
 
780
- class ListComponent {
781
- constructor(router) {
782
- this.router = router;
783
- this.change = new EventEmitter();
784
- this.iconNameField = 'iconName';
785
- this.labelField = 'label';
765
+ class CollapsibleComponent {
766
+ constructor() {
786
767
  this.class = '';
768
+ this.expanded = true;
769
+ this.header = '';
787
770
  }
788
771
  get hostClasses() {
789
772
  return [
790
- 'ft-list',
773
+ 'ft-collapsible',
774
+ this.expanded ? 'ft-collapsible--show' : '',
791
775
  this.class
792
776
  ].join(' ');
793
777
  }
794
778
  ;
795
- getComponentType(item) {
796
- let type = 'text';
797
- if (!item.url || item.url.match(/^(http|https):\/\/(\w+:{0,1}\w*@)?(\S+)(:[0-9]+)?(\/|\/([\w#!:.?+=&%@!\-\/]))?/)) {
798
- type = 'button';
799
- }
800
- else {
801
- type = 'link';
802
- }
803
- return type;
804
- }
805
- setItem(item) {
806
- if (item.url) {
807
- if (item.url.match(/^(http|https):\/\/(\w+:{0,1}\w*@)?(\S+)(:[0-9]+)?(\/|\/([\w#!:.?+=&%@!\-\/]))?/)) {
808
- window.location.href = item.url;
809
- }
810
- }
811
- else if (item.click) {
812
- item.click();
813
- }
814
- }
815
- toggleCollapsible(action) {
816
- var _a;
817
- action.metadata = action.metadata || {};
818
- action.metadata.show = !((_a = action.metadata) === null || _a === void 0 ? void 0 : _a.show);
819
- this.change.emit(action);
779
+ toggleCollapsible() {
780
+ this.expanded = !this.expanded;
820
781
  }
821
782
  }
822
- ListComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.0.2", ngImport: i0, type: ListComponent, deps: [{ token: i1$3.Router }], target: i0.ɵɵFactoryTarget.Component });
823
- 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-button 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-list__item--active\" matRipple\n class=\"ft-button ft-list__item\" [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-button ft-list__item ft-list__item--header\"\n [ngClass]=\"{ 'ft-list__item--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-list__collapsible\" [ngClass]=\"{ 'ft-collapsible--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-list__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]\"\n [collection]=\"iconCollection\" [path]=\"iconPath\"></ft-icon>\n <div class=\"ft-item__label\">{{ item[labelField] }}</div>\n </div>\n</ng-template>", styles: [""], dependencies: [{ kind: "directive", type: i1$1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1$1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1$1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1$1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i1$1.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { kind: "directive", type: i1$1.NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { kind: "directive", type: i1$1.NgSwitchDefault, selector: "[ngSwitchDefault]" }, { kind: "component", type: IconComponent, selector: "ft-icon", inputs: ["collection", "mode", "name", "path", "size", "src", "class"] }, { kind: "directive", type: i1$3.RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "directive", type: i1$3.RouterLinkActive, selector: "[routerLinkActive]", inputs: ["routerLinkActiveOptions", "ariaCurrentWhenActive", "routerLinkActive"], outputs: ["isActiveChange"], exportAs: ["routerLinkActive"] }] });
824
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.2", ngImport: i0, type: ListComponent, decorators: [{
783
+ CollapsibleComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.0.2", ngImport: i0, type: CollapsibleComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
784
+ CollapsibleComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.0.2", type: CollapsibleComponent, selector: "ft-collapsible", inputs: { class: "class", expanded: "expanded", header: "header" }, host: { properties: { "class": "this.hostClasses" } }, ngImport: i0, template: "<button type=\"button\" class=\"ft-button ft-collapsible__header\" (click)=\"toggleCollapsible()\">\n <div class=\"ft-item\">\n <div class=\"ft-item__label\">{{ header }}</div>\n <ft-icon class=\"ft-item__toggle\" name=\"angle-down\"></ft-icon>\n </div>\n</button>\n<div class=\"ft-collapsible__content\">\n <ng-content></ng-content>\n</div>", dependencies: [{ kind: "component", type: IconComponent, selector: "ft-icon", inputs: ["collection", "mode", "name", "path", "src", "class"] }] });
785
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.2", ngImport: i0, type: CollapsibleComponent, decorators: [{
825
786
  type: Component,
826
- 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-button 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-list__item--active\" matRipple\n class=\"ft-button ft-list__item\" [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-button ft-list__item ft-list__item--header\"\n [ngClass]=\"{ 'ft-list__item--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-list__collapsible\" [ngClass]=\"{ 'ft-collapsible--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-list__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]\"\n [collection]=\"iconCollection\" [path]=\"iconPath\"></ft-icon>\n <div class=\"ft-item__label\">{{ item[labelField] }}</div>\n </div>\n</ng-template>" }]
827
- }], ctorParameters: function () { return [{ type: i1$3.Router }]; }, propDecorators: { change: [{
828
- type: Output
829
- }], iconCollection: [{
830
- type: Input
831
- }], iconNameField: [{
832
- type: Input
833
- }], iconPath: [{
834
- type: Input
835
- }], labelField: [{
836
- type: Input
837
- }], items: [{
838
- type: Input
839
- }], class: [{
787
+ args: [{ selector: 'ft-collapsible', template: "<button type=\"button\" class=\"ft-button ft-collapsible__header\" (click)=\"toggleCollapsible()\">\n <div class=\"ft-item\">\n <div class=\"ft-item__label\">{{ header }}</div>\n <ft-icon class=\"ft-item__toggle\" name=\"angle-down\"></ft-icon>\n </div>\n</button>\n<div class=\"ft-collapsible__content\">\n <ng-content></ng-content>\n</div>" }]
788
+ }], propDecorators: { class: [{
840
789
  type: Input
841
790
  }], hostClasses: [{
842
791
  type: HostBinding,
843
792
  args: ['class']
793
+ }], expanded: [{
794
+ type: Input
795
+ }], header: [{
796
+ type: Input
844
797
  }] } });
845
798
 
846
- class NavbarComponent {
799
+ class LayoutModule {
800
+ }
801
+ LayoutModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.0.2", ngImport: i0, type: LayoutModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
802
+ LayoutModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "15.0.2", ngImport: i0, type: LayoutModule, declarations: [CollapsibleComponent], imports: [CommonModule,
803
+ IoModule], exports: [CollapsibleComponent] });
804
+ LayoutModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "15.0.2", ngImport: i0, type: LayoutModule, imports: [CommonModule,
805
+ IoModule] });
806
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.2", ngImport: i0, type: LayoutModule, decorators: [{
807
+ type: NgModule,
808
+ args: [{
809
+ declarations: [
810
+ CollapsibleComponent
811
+ ],
812
+ exports: [
813
+ CollapsibleComponent
814
+ ],
815
+ imports: [
816
+ CommonModule,
817
+ IoModule
818
+ ]
819
+ }]
820
+ }] });
821
+
822
+ class ListComponent {
847
823
  constructor() {
824
+ this.actionSelected = new EventEmitter();
848
825
  this.iconNameField = 'iconName';
849
826
  this.labelField = 'label';
850
- this.labelPlacement = 'auto';
851
- this.position = 'auto';
827
+ this.selectable = null;
828
+ this.selection = [];
852
829
  this.class = '';
830
+ this.actionSelected.subscribe((action) => {
831
+ switch (this.selectable) {
832
+ case 'single':
833
+ this.selection = [action];
834
+ break;
835
+ case 'multiple':
836
+ this.selection.push(action);
837
+ break;
838
+ }
839
+ });
853
840
  }
854
841
  get hostClasses() {
855
842
  return [
856
- 'ft-navbar',
857
- this.class,
858
- this.position
843
+ 'ft-list',
844
+ this.class
859
845
  ].join(' ');
860
846
  }
861
847
  ;
862
- getComponentType(item) {
863
- let type = 'text';
864
- if (!item.url || item.url.match(/^(http|https):\/\/(\w+:{0,1}\w*@)?(\S+)(:[0-9]+)?(\/|\/([\w#!:.?+=&%@!\-\/]))?/)) {
865
- type = 'button';
848
+ updateAction(action) {
849
+ action.metadata = action.metadata || {};
850
+ if (!action.id) {
851
+ action.id = Math.floor(Math.random() * 1000000).toString();
852
+ }
853
+ if (!action.url) {
854
+ action.metadata.componentType = 'button';
866
855
  }
867
856
  else {
868
- type = 'link';
857
+ action.metadata.componentType = 'link';
858
+ const urlParts = action.url.split('?');
859
+ if (urlParts.length > 1) {
860
+ const queryString = urlParts.at(-1);
861
+ const searchParams = new URLSearchParams(queryString);
862
+ action.url = urlParts[0];
863
+ action.metadata.queryParams = Object.fromEntries(searchParams.entries());
864
+ }
869
865
  }
870
- return type;
866
+ return action;
871
867
  }
872
- setItem(item) {
873
- if (item.url) {
874
- if (item.url.match(/^(http|https):\/\/(\w+:{0,1}\w*@)?(\S+)(:[0-9]+)?(\/|\/([\w#!:.?+=&%@!\-\/]))?/)) {
875
- window.location.href = item.url;
876
- }
868
+ handleClick(action) {
869
+ this.actionSelected.emit(action);
870
+ if (action.url && action.url.match(/^(http|https):\/\/(\w+:{0,1}\w*@)?(\S+)(:[0-9]+)?(\/|\/([\w#!:.?+=&%@!\-\/]))?/)) {
871
+ window.location.href = action.url;
877
872
  }
878
- else if (item.click) {
879
- item.click();
873
+ else if (typeof action.click === 'function') {
874
+ action.click();
880
875
  }
881
876
  }
882
877
  toggleCollapsible(action) {
883
- action.metadata.show = !action.metadata.show;
878
+ var _a;
879
+ action.metadata = action.metadata || {};
880
+ action.metadata.show = !((_a = action.metadata) === null || _a === void 0 ? void 0 : _a.show);
881
+ this.actionSelected.emit(action);
884
882
  }
885
- trackByItem(index, item) {
886
- return `${item.label} ${item.url}`;
883
+ trackById(index, action) {
884
+ return action.id || index;
887
885
  }
888
886
  }
889
- NavbarComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.0.2", ngImport: i0, type: NavbarComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
890
- 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$1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1$1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1$1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1$1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i1$1.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { kind: "directive", type: i1$1.NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { kind: "component", type: IconComponent, selector: "ft-icon", inputs: ["collection", "mode", "name", "path", "size", "src", "class"] }, { kind: "directive", type: i1$3.RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "directive", type: i1$3.RouterLinkActive, selector: "[routerLinkActive]", inputs: ["routerLinkActiveOptions", "ariaCurrentWhenActive", "routerLinkActive"], outputs: ["isActiveChange"], exportAs: ["routerLinkActive"] }] });
891
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.2", ngImport: i0, type: NavbarComponent, decorators: [{
887
+ ListComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.0.2", ngImport: i0, type: ListComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
888
+ 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", selectable: "selectable", selection: "selection", itemTemplate: "itemTemplate", class: "class" }, outputs: { actionSelected: "actionSelected" }, host: { properties: { "class": "this.hostClasses" } }, ngImport: i0, template: "<ng-container *ngTemplateOutlet=\"switchTemplate; context: { children: items }\"></ng-container>\n<ng-template #switchTemplate let-children=\"children\" let-level=\"level\">\n <ng-container *ngFor=\"let action of children; trackBy: trackById\" [ngSwitch]=\"action.type\">\n <ng-container *ngSwitchCase=\"'collapsible'\">\n <ng-container *ngTemplateOutlet=\"collapsibleTemplate; context: { action: action }\"></ng-container>\n </ng-container>\n <ng-container *ngSwitchCase=\"'header'\">\n <ng-container *ngTemplateOutlet=\"headerTemplate; context: { action: action }\"></ng-container>\n </ng-container>\n <ng-container *ngSwitchDefault>\n <ng-container *ngTemplateOutlet=\"actionTemplate; context: { action: updateAction(action) }\"></ng-container>\n </ng-container>\n </ng-container>\n</ng-template>\n<ng-template #actionTemplate let-action=\"action\">\n <ng-container [ngSwitch]=\"action.metadata.componentType\">\n <button *ngSwitchCase=\"'button'\" type=\"button\" class=\"ft-button ft-list__item\"\n [ngClass]=\"[action.class || '', selectable && selection.indexOf(action) !== -1 ? 'ft-list__item--selected' : '']\"\n (click)=\"handleClick(action)\" [disabled]=\"action.disabled\">\n <ng-container *ngTemplateOutlet=\"itemTemplate || textTemplate; context: { action: action }\"></ng-container>\n </button>\n <a *ngSwitchCase=\"'link'\" [routerLink]=\"action.url\" [queryParams]=\"action.metadata?.queryParams\"\n routerLinkActive=\"ft-list__item--active\" class=\"ft-button ft-list__item\"\n [ngClass]=\"[action.class || '', selectable && selection.indexOf(action) !== -1 ? 'ft-list__item--selected' : '']\"\n (click)=\"handleClick(action)\">\n <ng-container *ngTemplateOutlet=\"itemTemplate || textTemplate; context: { action: action }\"></ng-container>\n </a>\n </ng-container>\n</ng-template>\n<ng-template #collapsibleTemplate let-action=\"action\">\n <ft-collapsible [header]=\"action[labelField]\" [expanded]=\"action.metadata?.show\">\n <div class=\"ft-list\">\n <ng-container *ngTemplateOutlet=\"switchTemplate; context: { children: action.children }\"></ng-container>\n </div>\n </ft-collapsible>\n</ng-template>\n<ng-template #headerTemplate let-action=\"action\">\n <div class=\"ft-list__header\" [ngClass]=\"action.class\">\n {{ action[labelField] }}\n </div>\n</ng-template>\n<ng-template #textTemplate let-action=\"action\">\n <div class=\"ft-item\">\n <ft-icon class=\"ft-item__icon\" *ngIf=\"action[iconNameField] || (selectable && selection.indexOf(action) !== -1)\"\n [name]=\"action[iconNameField]\" [collection]=\"iconCollection\" [path]=\"iconPath\"></ft-icon>\n <div class=\"ft-item__label\">{{ action[labelField] }}</div>\n </div>\n</ng-template>", dependencies: [{ kind: "directive", type: i1$1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1$1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1$1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1$1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i1$1.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { kind: "directive", type: i1$1.NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { kind: "directive", type: i1$1.NgSwitchDefault, selector: "[ngSwitchDefault]" }, { kind: "component", type: IconComponent, selector: "ft-icon", inputs: ["collection", "mode", "name", "path", "src", "class"] }, { kind: "component", type: CollapsibleComponent, selector: "ft-collapsible", inputs: ["class", "expanded", "header"] }, { kind: "directive", type: i4.RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "directive", type: i4.RouterLinkActive, selector: "[routerLinkActive]", inputs: ["routerLinkActiveOptions", "ariaCurrentWhenActive", "routerLinkActive"], outputs: ["isActiveChange"], exportAs: ["routerLinkActive"] }] });
889
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.2", ngImport: i0, type: ListComponent, decorators: [{
892
890
  type: Component,
893
- 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>" }]
894
- }], ctorParameters: function () { return []; }, propDecorators: { iconCollection: [{
891
+ args: [{ selector: 'ft-list', template: "<ng-container *ngTemplateOutlet=\"switchTemplate; context: { children: items }\"></ng-container>\n<ng-template #switchTemplate let-children=\"children\" let-level=\"level\">\n <ng-container *ngFor=\"let action of children; trackBy: trackById\" [ngSwitch]=\"action.type\">\n <ng-container *ngSwitchCase=\"'collapsible'\">\n <ng-container *ngTemplateOutlet=\"collapsibleTemplate; context: { action: action }\"></ng-container>\n </ng-container>\n <ng-container *ngSwitchCase=\"'header'\">\n <ng-container *ngTemplateOutlet=\"headerTemplate; context: { action: action }\"></ng-container>\n </ng-container>\n <ng-container *ngSwitchDefault>\n <ng-container *ngTemplateOutlet=\"actionTemplate; context: { action: updateAction(action) }\"></ng-container>\n </ng-container>\n </ng-container>\n</ng-template>\n<ng-template #actionTemplate let-action=\"action\">\n <ng-container [ngSwitch]=\"action.metadata.componentType\">\n <button *ngSwitchCase=\"'button'\" type=\"button\" class=\"ft-button ft-list__item\"\n [ngClass]=\"[action.class || '', selectable && selection.indexOf(action) !== -1 ? 'ft-list__item--selected' : '']\"\n (click)=\"handleClick(action)\" [disabled]=\"action.disabled\">\n <ng-container *ngTemplateOutlet=\"itemTemplate || textTemplate; context: { action: action }\"></ng-container>\n </button>\n <a *ngSwitchCase=\"'link'\" [routerLink]=\"action.url\" [queryParams]=\"action.metadata?.queryParams\"\n routerLinkActive=\"ft-list__item--active\" class=\"ft-button ft-list__item\"\n [ngClass]=\"[action.class || '', selectable && selection.indexOf(action) !== -1 ? 'ft-list__item--selected' : '']\"\n (click)=\"handleClick(action)\">\n <ng-container *ngTemplateOutlet=\"itemTemplate || textTemplate; context: { action: action }\"></ng-container>\n </a>\n </ng-container>\n</ng-template>\n<ng-template #collapsibleTemplate let-action=\"action\">\n <ft-collapsible [header]=\"action[labelField]\" [expanded]=\"action.metadata?.show\">\n <div class=\"ft-list\">\n <ng-container *ngTemplateOutlet=\"switchTemplate; context: { children: action.children }\"></ng-container>\n </div>\n </ft-collapsible>\n</ng-template>\n<ng-template #headerTemplate let-action=\"action\">\n <div class=\"ft-list__header\" [ngClass]=\"action.class\">\n {{ action[labelField] }}\n </div>\n</ng-template>\n<ng-template #textTemplate let-action=\"action\">\n <div class=\"ft-item\">\n <ft-icon class=\"ft-item__icon\" *ngIf=\"action[iconNameField] || (selectable && selection.indexOf(action) !== -1)\"\n [name]=\"action[iconNameField]\" [collection]=\"iconCollection\" [path]=\"iconPath\"></ft-icon>\n <div class=\"ft-item__label\">{{ action[labelField] }}</div>\n </div>\n</ng-template>" }]
892
+ }], ctorParameters: function () { return []; }, propDecorators: { actionSelected: [{
893
+ type: Output
894
+ }], iconCollection: [{
895
895
  type: Input
896
896
  }], iconNameField: [{
897
897
  type: Input
898
- }], labelField: [{
898
+ }], iconPath: [{
899
899
  type: Input
900
- }], labelPlacement: [{
900
+ }], labelField: [{
901
901
  type: Input
902
902
  }], items: [{
903
903
  type: Input
904
- }], position: [{
904
+ }], selectable: [{
905
905
  type: Input
906
- }], class: [{
906
+ }], selection: [{
907
907
  type: Input
908
- }], hostClasses: [{
909
- type: HostBinding,
910
- args: ['class']
911
- }] } });
912
-
913
- class SearchboxComponent {
914
- constructor() {
915
- this.execute = new EventEmitter();
916
- this.showChange = new EventEmitter();
917
- this.class = '';
918
- this.onChange = (_) => { };
919
- this.onTouched = (_) => { };
920
- }
921
- get hostClasses() {
922
- return [
923
- 'ft-searchbox',
924
- this.class,
925
- this.shown ? 'show' : ''
926
- ].join(' ');
927
- }
928
- ;
929
- set show(value) {
930
- this.shown = value;
931
- if (value) {
932
- setTimeout(() => {
933
- this.getNativeElement().focus();
934
- }, 300);
935
- }
936
- }
937
- set value(value) {
938
- this._value = value || '';
939
- this.getNativeElement().value = this._value;
940
- this.onChange(this._value);
941
- this.onTouched(this._value);
942
- }
943
- get value() {
944
- return this._value;
945
- }
946
- ngOnInit() {
947
- }
948
- closeSearch() {
949
- this.showChange.emit(false);
950
- }
951
- getNativeElement() {
952
- const input = this.placeholder ? this.inputPlaceholder : this.input;
953
- return input.nativeElement;
954
- }
955
- registerOnChange(fn) {
956
- this.onChange = fn;
957
- }
958
- registerOnTouched(fn) {
959
- this.onTouched = fn;
960
- }
961
- setDisabledState(isDisabled) {
962
- this.disabled = isDisabled;
963
- }
964
- onSearch(event) {
965
- event.preventDefault();
966
- this.getNativeElement().value = '';
967
- this.execute.emit(this._value);
968
- }
969
- updateValue(event) {
970
- this.value = event.target.value;
971
- }
972
- writeValue(value) {
973
- this.value = value;
974
- }
975
- }
976
- SearchboxComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.0.2", ngImport: i0, type: SearchboxComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
977
- SearchboxComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.0.2", type: SearchboxComponent, selector: "ft-searchbox", inputs: { placeholder: "placeholder", class: "class", show: "show", value: "value" }, outputs: { execute: "execute", showChange: "showChange" }, host: { properties: { "class": "this.hostClasses" } }, viewQueries: [{ propertyName: "input", first: true, predicate: ["input"], descendants: true }, { propertyName: "inputPlaceholder", first: true, predicate: ["inputPlaceholder"], descendants: true }], ngImport: i0, template: "<form (submit)=\"onSearch($event)\" class=\"container p-2 p-sm-3 pb-md-3 pt-md-5 px-md-3 px-lg-5\">\n <div class=\"d-flex align-items-center\">\n <button type=\"button\" mat-icon-button class=\"p-2 mr-2\" (click)=\"closeSearch()\">\n <ft-icon name=\"arrow-left\" size=\"2\"></ft-icon>\n </button>\n <input #input type=\"search\" matInput class=\"flex-grow-1\" i18n-placeholder placeholder=\"Search criteria\"\n [disabled]=\"disabled\" (change)=\"updateValue($event)\" (keyup)=\"updateValue($event)\" *ngIf=\"!placeholder\" />\n <input #inputPlaceholder type=\"search\" matInput class=\"flex-grow-1\" [placeholder]=\"placeholder\"\n [disabled]=\"disabled\" (change)=\"updateValue($event)\" (keyup)=\"updateValue($event)\" *ngIf=\"placeholder\" />\n <button type=\"submit\" mat-icon-button class=\"p-2 ml-2\">\n <ft-icon name=\"search\" size=\"2\"></ft-icon>\n </button>\n </div>\n</form>", styles: [""], dependencies: [{ kind: "directive", type: i1$1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: IconComponent, selector: "ft-icon", inputs: ["collection", "mode", "name", "path", "size", "src", "class"] }, { kind: "component", type: i2.MatIconButton, selector: "button[mat-icon-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }] });
978
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.2", ngImport: i0, type: SearchboxComponent, decorators: [{
979
- type: Component,
980
- args: [{ selector: 'ft-searchbox', template: "<form (submit)=\"onSearch($event)\" class=\"container p-2 p-sm-3 pb-md-3 pt-md-5 px-md-3 px-lg-5\">\n <div class=\"d-flex align-items-center\">\n <button type=\"button\" mat-icon-button class=\"p-2 mr-2\" (click)=\"closeSearch()\">\n <ft-icon name=\"arrow-left\" size=\"2\"></ft-icon>\n </button>\n <input #input type=\"search\" matInput class=\"flex-grow-1\" i18n-placeholder placeholder=\"Search criteria\"\n [disabled]=\"disabled\" (change)=\"updateValue($event)\" (keyup)=\"updateValue($event)\" *ngIf=\"!placeholder\" />\n <input #inputPlaceholder type=\"search\" matInput class=\"flex-grow-1\" [placeholder]=\"placeholder\"\n [disabled]=\"disabled\" (change)=\"updateValue($event)\" (keyup)=\"updateValue($event)\" *ngIf=\"placeholder\" />\n <button type=\"submit\" mat-icon-button class=\"p-2 ml-2\">\n <ft-icon name=\"search\" size=\"2\"></ft-icon>\n </button>\n </div>\n</form>" }]
981
- }], ctorParameters: function () { return []; }, propDecorators: { input: [{
982
- type: ViewChild,
983
- args: ['input', { static: false }]
984
- }], inputPlaceholder: [{
985
- type: ViewChild,
986
- args: ['inputPlaceholder', { static: false }]
987
- }], placeholder: [{
908
+ }], itemTemplate: [{
988
909
  type: Input
989
- }], execute: [{
990
- type: Output
991
- }], showChange: [{
992
- type: Output
993
910
  }], class: [{
994
911
  type: Input
995
912
  }], hostClasses: [{
996
913
  type: HostBinding,
997
914
  args: ['class']
998
- }], show: [{
999
- type: Input
1000
- }], value: [{
1001
- type: Input
1002
915
  }] } });
1003
916
 
1004
917
  class ToolbarComponent {
@@ -1028,7 +941,7 @@ class ToolbarComponent {
1028
941
  }
1029
942
  }
1030
943
  ToolbarComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.0.2", ngImport: i0, type: ToolbarComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
1031
- ToolbarComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.0.2", type: ToolbarComponent, selector: "ft-toolbar", inputs: { actionOptions: "actionOptions", currentTitleOption: "currentTitleOption", title: "title", titleOptions: "titleOptions", class: "class" }, host: { properties: { "class": "this.hostClasses" } }, ngImport: i0, template: "<div (ftObserveIntersecting)=\"setOverlapped($event)\" [ftObserveIntersectingOptions]=\"rootMargin\"></div>\n<div class=\"content\">\n <div class=\"container p-2 p-sm-3 pb-md-3 pt-md-5 px-md-3 px-lg-5\">\n <div class=\"d-flex align-items-center\">\n <h5 class=\"title ml-2 ml-md-0 mb-0 mr-auto\" *ngIf=\"!titleOptions; else titleForm\">{{ title }}</h5>\n <ng-container *ngFor=\"let option of actionOptions\">\n <button type=\"button\" class=\"p-2\" mat-button [ngClass]=\"option.class || ''\" *ngIf=\"!option.children\"\n (click)=\"option.click ? option.click($event) : null\" title=\"{{ option.label }}\">\n <div class=\"d-flex align-items-center\">\n <ft-icon *ngIf=\"option.iconName\" [name]=\"option.iconName\" size=\"2\"></ft-icon>\n <div *ngIf=\"option.label\" class=\"label d-none d-sm-inline-block ml-1\">{{ option.label }}</div>\n </div>\n </button>\n <ng-container *ngIf=\"option.children\">\n <button type=\"button\" class=\"p-2\" mat-button [matMenuTriggerFor]=\"menu\"\n [ngClass]=\"option.class || ''\" title=\"{{ option.label }}\">\n <div class=\"d-flex align-items-center\">\n <ft-icon *ngIf=\"option.iconName\" [name]=\"option.iconName\" size=\"2\"></ft-icon>\n <div *ngIf=\"option.label\" class=\"label d-none d-sm-inline-block ml-1\">{{ option.label }}\n </div>\n </div>\n </button>\n <mat-menu #menu=\"matMenu\">\n <button mat-menu-item *ngFor=\"let childOption of option.children\"\n (click)=\"childOption.click ? childOption.click($event): null\">{{ childOption.label\n }}</button>\n </mat-menu>\n </ng-container>\n </ng-container>\n </div>\n </div>\n</div>\n<ng-template #titleForm>\n <button type=\"button\" class=\"title p-2 pl-3 mr-auto\" mat-button [matMenuTriggerFor]=\"titleMenu\">\n <div class=\"d-flex align-items-center\">\n <div class=\"label mr-1\">{{ currentTitleOption.label }}</div>\n <ft-icon name=\"angle-down\" size=\"1\"></ft-icon>\n </div>\n </button>\n <mat-menu #titleMenu=\"matMenu\">\n <button class=\"mr-4\" mat-menu-item [disabled]=\"option == currentTitleOption\" *ngFor=\"let option of titleOptions\"\n (click)=\"currentTitleOption = option; option.click ? option.click($event) : null\">\n <div class=\"d-flex align-items-center\">\n <ft-icon [name]=\"option == currentTitleOption? 'check' : ''\" class=\"mr-1\"></ft-icon>\n <div>{{ option.label }}</div>\n </div>\n </button>\n </mat-menu>\n</ng-template>", styles: [""], dependencies: [{ kind: "directive", type: i1$1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1$1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1$1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: IconComponent, selector: "ft-icon", inputs: ["collection", "mode", "name", "path", "size", "src", "class"] }, { kind: "directive", type: ObserveIntersectingDirective, selector: "[ftObserveIntersecting]", inputs: ["ftObserveIntersectingOptions"], outputs: ["ftObserveIntersecting"] }, { kind: "component", type: i2.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { kind: "component", type: i5.MatMenu, selector: "mat-menu", exportAs: ["matMenu"] }, { kind: "component", type: i5.MatMenuItem, selector: "[mat-menu-item]", inputs: ["disabled", "disableRipple", "role"], exportAs: ["matMenuItem"] }, { kind: "directive", type: i5.MatMenuTrigger, selector: "[mat-menu-trigger-for], [matMenuTriggerFor]", exportAs: ["matMenuTrigger"] }] });
944
+ ToolbarComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.0.2", type: ToolbarComponent, selector: "ft-toolbar", inputs: { actionOptions: "actionOptions", currentTitleOption: "currentTitleOption", title: "title", titleOptions: "titleOptions", class: "class" }, host: { properties: { "class": "this.hostClasses" } }, ngImport: i0, template: "<div (ftObserveIntersecting)=\"setOverlapped($event)\" [ftObserveIntersectingOptions]=\"rootMargin\"></div>\n<div class=\"content\">\n <div class=\"container p-2 p-sm-3 pb-md-3 pt-md-5 px-md-3 px-lg-5\">\n <div class=\"d-flex align-items-center\">\n <h5 class=\"title ml-2 ml-md-0 mb-0 mr-auto\" *ngIf=\"!titleOptions; else titleForm\">{{ title }}</h5>\n <ng-container *ngFor=\"let option of actionOptions\">\n <button type=\"button\" class=\"p-2\" mat-button [ngClass]=\"option.class || ''\" *ngIf=\"!option.children\"\n (click)=\"option.click ? option.click($event) : null\" title=\"{{ option.label }}\">\n <div class=\"d-flex align-items-center\">\n <ft-icon *ngIf=\"option.iconName\" [name]=\"option.iconName\" size=\"2\"></ft-icon>\n <div *ngIf=\"option.label\" class=\"label d-none d-sm-inline-block ml-1\">{{ option.label }}</div>\n </div>\n </button>\n <ng-container *ngIf=\"option.children\">\n <button type=\"button\" class=\"p-2\" mat-button [matMenuTriggerFor]=\"menu\"\n [ngClass]=\"option.class || ''\" title=\"{{ option.label }}\">\n <div class=\"d-flex align-items-center\">\n <ft-icon *ngIf=\"option.iconName\" [name]=\"option.iconName\" size=\"2\"></ft-icon>\n <div *ngIf=\"option.label\" class=\"label d-none d-sm-inline-block ml-1\">{{ option.label }}\n </div>\n </div>\n </button>\n <mat-menu #menu=\"matMenu\">\n <button mat-menu-item *ngFor=\"let childOption of option.children\"\n (click)=\"childOption.click ? childOption.click($event): null\">{{ childOption.label\n }}</button>\n </mat-menu>\n </ng-container>\n </ng-container>\n </div>\n </div>\n</div>\n<ng-template #titleForm>\n <button type=\"button\" class=\"title p-2 pl-3 mr-auto\" mat-button [matMenuTriggerFor]=\"titleMenu\">\n <div class=\"d-flex align-items-center\">\n <div class=\"label mr-1\">{{ currentTitleOption.label }}</div>\n <ft-icon name=\"angle-down\" size=\"1\"></ft-icon>\n </div>\n </button>\n <mat-menu #titleMenu=\"matMenu\">\n <button class=\"mr-4\" mat-menu-item [disabled]=\"option == currentTitleOption\" *ngFor=\"let option of titleOptions\"\n (click)=\"currentTitleOption = option; option.click ? option.click($event) : null\">\n <div class=\"d-flex align-items-center\">\n <ft-icon [name]=\"option == currentTitleOption? 'check' : ''\" class=\"mr-1\"></ft-icon>\n <div>{{ option.label }}</div>\n </div>\n </button>\n </mat-menu>\n</ng-template>", styles: [""], dependencies: [{ kind: "directive", type: i1$1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1$1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1$1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: IconComponent, selector: "ft-icon", inputs: ["collection", "mode", "name", "path", "src", "class"] }, { kind: "directive", type: ObserveIntersectingDirective, selector: "[ftObserveIntersecting]", inputs: ["ftObserveIntersectingOptions"], outputs: ["ftObserveIntersecting"] }, { kind: "component", type: i2.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { kind: "component", type: i5.MatMenu, selector: "mat-menu", exportAs: ["matMenu"] }, { kind: "component", type: i5.MatMenuItem, selector: "[mat-menu-item]", inputs: ["disabled", "disableRipple", "role"], exportAs: ["matMenuItem"] }, { kind: "directive", type: i5.MatMenuTrigger, selector: "[mat-menu-trigger-for], [matMenuTriggerFor]", exportAs: ["matMenuTrigger"] }] });
1032
945
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.2", ngImport: i0, type: ToolbarComponent, decorators: [{
1033
946
  type: Component,
1034
947
  args: [{ selector: 'ft-toolbar', template: "<div (ftObserveIntersecting)=\"setOverlapped($event)\" [ftObserveIntersectingOptions]=\"rootMargin\"></div>\n<div class=\"content\">\n <div class=\"container p-2 p-sm-3 pb-md-3 pt-md-5 px-md-3 px-lg-5\">\n <div class=\"d-flex align-items-center\">\n <h5 class=\"title ml-2 ml-md-0 mb-0 mr-auto\" *ngIf=\"!titleOptions; else titleForm\">{{ title }}</h5>\n <ng-container *ngFor=\"let option of actionOptions\">\n <button type=\"button\" class=\"p-2\" mat-button [ngClass]=\"option.class || ''\" *ngIf=\"!option.children\"\n (click)=\"option.click ? option.click($event) : null\" title=\"{{ option.label }}\">\n <div class=\"d-flex align-items-center\">\n <ft-icon *ngIf=\"option.iconName\" [name]=\"option.iconName\" size=\"2\"></ft-icon>\n <div *ngIf=\"option.label\" class=\"label d-none d-sm-inline-block ml-1\">{{ option.label }}</div>\n </div>\n </button>\n <ng-container *ngIf=\"option.children\">\n <button type=\"button\" class=\"p-2\" mat-button [matMenuTriggerFor]=\"menu\"\n [ngClass]=\"option.class || ''\" title=\"{{ option.label }}\">\n <div class=\"d-flex align-items-center\">\n <ft-icon *ngIf=\"option.iconName\" [name]=\"option.iconName\" size=\"2\"></ft-icon>\n <div *ngIf=\"option.label\" class=\"label d-none d-sm-inline-block ml-1\">{{ option.label }}\n </div>\n </div>\n </button>\n <mat-menu #menu=\"matMenu\">\n <button mat-menu-item *ngFor=\"let childOption of option.children\"\n (click)=\"childOption.click ? childOption.click($event): null\">{{ childOption.label\n }}</button>\n </mat-menu>\n </ng-container>\n </ng-container>\n </div>\n </div>\n</div>\n<ng-template #titleForm>\n <button type=\"button\" class=\"title p-2 pl-3 mr-auto\" mat-button [matMenuTriggerFor]=\"titleMenu\">\n <div class=\"d-flex align-items-center\">\n <div class=\"label mr-1\">{{ currentTitleOption.label }}</div>\n <ft-icon name=\"angle-down\" size=\"1\"></ft-icon>\n </div>\n </button>\n <mat-menu #titleMenu=\"matMenu\">\n <button class=\"mr-4\" mat-menu-item [disabled]=\"option == currentTitleOption\" *ngFor=\"let option of titleOptions\"\n (click)=\"currentTitleOption = option; option.click ? option.click($event) : null\">\n <div class=\"d-flex align-items-center\">\n <ft-icon [name]=\"option == currentTitleOption? 'check' : ''\" class=\"mr-1\"></ft-icon>\n <div>{{ option.label }}</div>\n </div>\n </button>\n </mat-menu>\n</ng-template>" }]
@@ -1051,18 +964,16 @@ class NavigationModule {
1051
964
  }
1052
965
  NavigationModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.0.2", ngImport: i0, type: NavigationModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
1053
966
  NavigationModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "15.0.2", ngImport: i0, type: NavigationModule, declarations: [ListComponent,
1054
- NavbarComponent,
1055
- ToolbarComponent,
1056
- SearchboxComponent], imports: [CommonModule,
967
+ ToolbarComponent], imports: [CommonModule,
1057
968
  IoModule,
969
+ LayoutModule,
1058
970
  RouterModule,
1059
971
  MatButtonModule,
1060
972
  MatMenuModule], exports: [ListComponent,
1061
- NavbarComponent,
1062
- ToolbarComponent,
1063
- SearchboxComponent] });
973
+ ToolbarComponent] });
1064
974
  NavigationModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "15.0.2", ngImport: i0, type: NavigationModule, imports: [CommonModule,
1065
975
  IoModule,
976
+ LayoutModule,
1066
977
  RouterModule,
1067
978
  MatButtonModule,
1068
979
  MatMenuModule] });
@@ -1071,19 +982,16 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.2", ngImpor
1071
982
  args: [{
1072
983
  declarations: [
1073
984
  ListComponent,
1074
- NavbarComponent,
1075
- ToolbarComponent,
1076
- SearchboxComponent
985
+ ToolbarComponent
1077
986
  ],
1078
987
  exports: [
1079
988
  ListComponent,
1080
- NavbarComponent,
1081
- ToolbarComponent,
1082
- SearchboxComponent
989
+ ToolbarComponent
1083
990
  ],
1084
991
  imports: [
1085
992
  CommonModule,
1086
993
  IoModule,
994
+ LayoutModule,
1087
995
  RouterModule,
1088
996
  MatButtonModule,
1089
997
  MatMenuModule
@@ -1104,11 +1012,15 @@ class UiModule {
1104
1012
  UiModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.0.2", ngImport: i0, type: UiModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
1105
1013
  UiModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "15.0.2", ngImport: i0, type: UiModule, imports: [CommonModule,
1106
1014
  IoModule,
1015
+ LayoutModule,
1107
1016
  NavigationModule], exports: [IoModule,
1017
+ LayoutModule,
1108
1018
  NavigationModule] });
1109
1019
  UiModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "15.0.2", ngImport: i0, type: UiModule, imports: [CommonModule,
1110
1020
  IoModule,
1021
+ LayoutModule,
1111
1022
  NavigationModule, IoModule,
1023
+ LayoutModule,
1112
1024
  NavigationModule] });
1113
1025
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.2", ngImport: i0, type: UiModule, decorators: [{
1114
1026
  type: NgModule,
@@ -1117,10 +1029,12 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.2", ngImpor
1117
1029
  imports: [
1118
1030
  CommonModule,
1119
1031
  IoModule,
1032
+ LayoutModule,
1120
1033
  NavigationModule
1121
1034
  ],
1122
1035
  exports: [
1123
1036
  IoModule,
1037
+ LayoutModule,
1124
1038
  NavigationModule
1125
1039
  ]
1126
1040
  }]
@@ -1134,5 +1048,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.2", ngImpor
1134
1048
  * Generated bundle index. Do not edit.
1135
1049
  */
1136
1050
 
1137
- export { AvatarComponent, ExpressionBuilderComponent, IconComponent, ImageComponent, IoModule, ListComponent, ListviewComponent, MessageComponent, MessageContentComponent, MessageService, NavbarComponent, NavigationModule, ObserveIntersectingDirective, ProgressComponent, ProgressService, RatingComponent, SearchboxComponent, TimelineComponent, ToolbarComponent, UiModule };
1051
+ export { AvatarComponent, CollapsibleComponent, ExpressionBuilderComponent, IconComponent, ImageComponent, IoModule, LayoutModule, ListComponent, MessageComponent, MessageContentComponent, MessageService, NavigationModule, ObserveIntersectingDirective, ProgressComponent, ProgressService, RatingComponent, TimelineComponent, ToolbarComponent, UiModule };
1052
+ //# sourceMappingURL=factor_ec-ui.mjs.map
1138
1053
  //# sourceMappingURL=factor_ec-ui.mjs.map