@hug/ngx-layout 1.1.0 → 1.1.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,177 @@
1
+ import { coerceBooleanProperty } from '@angular/cdk/coercion';
2
+ import * as i3 from '@angular/common';
3
+ import { CommonModule } from '@angular/common';
4
+ import * as i0 from '@angular/core';
5
+ import { EventEmitter, Component, ViewEncapsulation, ChangeDetectionStrategy, Input, Output, ContentChild, HostBinding, ViewChild } from '@angular/core';
6
+ import * as i4 from '@angular/material/button';
7
+ import { MatButtonModule } from '@angular/material/button';
8
+ import * as i5 from '@angular/material/icon';
9
+ import { MatIconModule } from '@angular/material/icon';
10
+ import * as i6 from '@angular/material/sidenav';
11
+ import { MatSidenavModule } from '@angular/material/sidenav';
12
+ import * as i7 from '@angular/material/toolbar';
13
+ import { MatToolbarModule } from '@angular/material/toolbar';
14
+ import * as i8 from '@angular/material/tooltip';
15
+ import { MatTooltipModule } from '@angular/material/tooltip';
16
+ import * as i1 from '@hug/ngx-core';
17
+ import * as i2 from '@hug/ngx-sidenav';
18
+
19
+ class LayoutComponent {
20
+ constructor(mediaService, sidenavService) {
21
+ this.mediaService = mediaService;
22
+ this.sidenavService = sidenavService;
23
+ this.toolbarColor = 'primary';
24
+ this.editorToolbarId = 'editor-toolbar';
25
+ this.closeButtonLabel = 'Fermer';
26
+ this.backButtonLabel = 'Retour';
27
+ this.closeButtonClicked = new EventEmitter();
28
+ this.backButtonClicked = new EventEmitter();
29
+ this.sideFilterClosed = new EventEmitter();
30
+ this.sideFilterOpened = new EventEmitter();
31
+ this.noRight = false;
32
+ this._withEditorToolbar = true;
33
+ this._withSidenav = false;
34
+ this._keepFilterButtonDisplayed = true;
35
+ this._withCloseButton = false;
36
+ this._withBackButton = false;
37
+ this._displayEditorToolbar = true;
38
+ }
39
+ get layoutToolbar() {
40
+ return this.layoutToolbarExternal ?? this.layoutToolbarContent;
41
+ }
42
+ get layoutPrimaryAction() {
43
+ return this.layoutPrimaryActionExternal ?? this.layoutPrimaryActionContent;
44
+ }
45
+ get layoutActions() {
46
+ return this.layoutActionsExternal ?? this.layoutActionsContent;
47
+ }
48
+ get layoutInfoBoxes() {
49
+ return this.layoutInfoBoxesExternal ?? this.layoutInfoBoxesContent;
50
+ }
51
+ get layoutRight() {
52
+ const value = this.layoutRightExternal ?? this.layoutRightContent;
53
+ this.noRight = !value;
54
+ return value;
55
+ }
56
+ set withEditorToolbar(value) {
57
+ this._withEditorToolbar = coerceBooleanProperty(value);
58
+ }
59
+ get withEditorToolbar() {
60
+ return this._withEditorToolbar;
61
+ }
62
+ set withSidenav(value) {
63
+ this._withSidenav = coerceBooleanProperty(value);
64
+ }
65
+ get withSidenav() {
66
+ return this._withSidenav;
67
+ }
68
+ set keepFilterButtonDisplayed(value) {
69
+ this._keepFilterButtonDisplayed = coerceBooleanProperty(value);
70
+ }
71
+ get keepFilterButtonDisplayed() {
72
+ return this._keepFilterButtonDisplayed;
73
+ }
74
+ set withCloseButton(value) {
75
+ this._withCloseButton = coerceBooleanProperty(value);
76
+ }
77
+ get withCloseButton() {
78
+ return this._withCloseButton;
79
+ }
80
+ set withBackButton(value) {
81
+ this._withBackButton = coerceBooleanProperty(value);
82
+ }
83
+ get withBackButton() {
84
+ return this._withBackButton;
85
+ }
86
+ set displayEditorToolbar(value) {
87
+ this._displayEditorToolbar = coerceBooleanProperty(value);
88
+ }
89
+ get displayEditorToolbar() {
90
+ return this._displayEditorToolbar;
91
+ }
92
+ closeSideFilter() {
93
+ void this.sideFilter?.close();
94
+ }
95
+ openSideFilter() {
96
+ void this.sideFilter?.open();
97
+ }
98
+ }
99
+ LayoutComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: LayoutComponent, deps: [{ token: i1.MediaService }, { token: i2.SidenavService }], target: i0.ɵɵFactoryTarget.Component });
100
+ LayoutComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: LayoutComponent, isStandalone: true, selector: "layout", inputs: { toolbarColor: "toolbarColor", editorToolbarId: "editorToolbarId", closeButtonLabel: "closeButtonLabel", backButtonLabel: "backButtonLabel", layoutToolbarExternal: "layoutToolbarExternal", layoutPrimaryActionExternal: "layoutPrimaryActionExternal", layoutActionsExternal: "layoutActionsExternal", layoutInfoBoxesExternal: "layoutInfoBoxesExternal", layoutRightExternal: "layoutRightExternal", withEditorToolbar: "withEditorToolbar", withSidenav: "withSidenav", keepFilterButtonDisplayed: "keepFilterButtonDisplayed", withCloseButton: "withCloseButton", withBackButton: "withBackButton", displayEditorToolbar: "displayEditorToolbar" }, outputs: { closeButtonClicked: "closeButtonClicked", backButtonClicked: "backButtonClicked", sideFilterClosed: "sideFilterClosed", sideFilterOpened: "sideFilterOpened" }, host: { properties: { "class.no-right": "this.noRight" } }, queries: [{ propertyName: "layoutToolbarContent", first: true, predicate: ["layoutToolbar"], descendants: true }, { propertyName: "layoutPrimaryActionContent", first: true, predicate: ["layoutPrimaryAction"], descendants: true }, { propertyName: "layoutActionsContent", first: true, predicate: ["layoutActions"], descendants: true }, { propertyName: "layoutInfoBoxesContent", first: true, predicate: ["layoutInfoBoxes"], descendants: true }, { propertyName: "layoutRightContent", first: true, predicate: ["layoutRight"], descendants: true }], viewQueries: [{ propertyName: "sideFilter", first: true, predicate: ["sideFilter"], descendants: true }], ngImport: i0, template: "<ng-container *ngTemplateOutlet=\"filter\"></ng-container>\n\n<ng-template #content>\n <div class=\"main-content\">\n <span class=\"primary-action-container\" [class.bottom]=\"(mediaService.isHandset$ | async)\" *ngIf=\"layoutPrimaryAction && !((layoutActions || layoutInfoBoxes) && ((mediaService.isHandset$ | async) === false))\">\n <ng-template [ngTemplateOutlet]=\"layoutPrimaryAction\"></ng-template>\n </span>\n <ng-content></ng-content>\n </div>\n <ng-container *ngIf=\"(mediaService.isHandset$ | async) && actionsToolbar\">\n <ng-container *ngTemplateOutlet=\"actionsToolbar\"></ng-container>\n </ng-container>\n</ng-template>\n\n<ng-template #actionsToolbar>\n <mat-toolbar id=\"actions-toolbar\" class=\"actions\" [color]=\"toolbarColor\" [class.bottom]=\"(mediaService.isHandset$ | async)\">\n <span class=\"primary-action-container\" *ngIf=\"layoutPrimaryAction && (layoutActions || layoutInfoBoxes) && ((mediaService.isHandset$ | async) === false)\">\n <ng-template [ngTemplateOutlet]=\"layoutPrimaryAction\"></ng-template>\n </span>\n <ng-container *ngIf=\"layoutActions\">\n <ng-template [ngTemplateOutlet]=\"layoutActions\"></ng-template>\n </ng-container>\n <div class=\"info-boxes-container\" *ngIf=\"layoutInfoBoxes && (mediaService.isHandset$ | async) === false\">\n <ng-template [ngTemplateOutlet]=\"layoutInfoBoxes\"></ng-template>\n </div>\n </mat-toolbar>\n</ng-template>\n\n<ng-template #filter>\n <mat-toolbar id=\"toolbar\" [color]=\"toolbarColor\" *ngIf=\"layoutToolbar || layoutRight\">\n <button type=\"button\" id=\"sidenav-button\" mat-icon-button *ngIf=\"withSidenav && (mediaService.isHandset$ | async) && ((sidenavService.openChanged$ | async) === false)\" (click)=\"sidenavService.toggle()\">\n <mat-icon>menu</mat-icon>\n </button>\n <button type=\"button\" id=\"back-button\" mat-icon-button *ngIf=\"withBackButton\" (click)=\"this.backButtonClicked.emit($event)\" [matTooltip]=\"backButtonLabel\">\n <mat-icon>arrow_back</mat-icon>\n </button>\n <div id=\"toolbar-content-container\">\n <ng-container *ngIf=\"layoutToolbar\">\n <ng-template [ngTemplateOutlet]=\"layoutToolbar\"></ng-template>\n </ng-container>\n </div>\n <button type=\"button\" id=\"filter-button\" mat-icon-button (click)=\"sideFilter.toggle()\" *ngIf=\"sideFilter && (keepFilterButtonDisplayed || (mediaService.isHandset$ | async)) && layoutRight\" matTooltip=\"Afficher/Masquer les filtres\">\n <mat-icon>tune</mat-icon>\n </button>\n <button type=\"button\" id=\"close-button\" mat-icon-button *ngIf=\"withCloseButton\" (click)=\"this.closeButtonClicked.emit($event)\" [matTooltip]=\"closeButtonLabel\">\n <mat-icon>close</mat-icon>\n </button>\n </mat-toolbar>\n <ng-container *ngIf=\"(layoutActions || layoutInfoBoxes) && ((mediaService.isHandset$ | async) === false)\">\n <ng-container *ngTemplateOutlet=\"actionsToolbar\"></ng-container>\n </ng-container>\n <mat-drawer-container *ngIf=\"layoutRight; else content\" autosize=\"true\">\n <mat-drawer-content>\n <ng-container *ngTemplateOutlet=\"content\"></ng-container>\n </mat-drawer-content>\n <mat-drawer id=\"side-filter\" #sideFilter (closed)=\"sideFilterClosed.emit()\" (openedChange)=\"sideFilterOpened.emit()\" class=\"right\" position=\"end\" [attr.role]=\"(mediaService.isHandset$ | async) ? 'dialog' : 'navigation'\" [mode]=\"(mediaService.isHandset$ | async) ? 'over' : 'side'\" [opened]=\"(mediaService.isHandset$ | async) === false\">\n <ng-template [ngTemplateOutlet]=\"layoutRight\"></ng-template>\n </mat-drawer>\n </mat-drawer-container>\n</ng-template>\n", styles: ["layout{display:flex;flex-direction:column;position:absolute;inset:0}layout.no-left.no-right .main-content{padding:0}layout mat-sidenav-container{position:absolute;inset:0}layout mat-sidenav-content,layout mat-drawer-content{display:flex!important;flex-direction:column}layout mat-sidenav{width:200px}layout mat-drawer{width:220px}layout mat-drawer.right{padding:.3rem}layout mat-drawer.right [filters-title]{font-size:1.2rem;display:flex;align-items:center;justify-content:space-between;flex:1 1 auto;font-weight:700;padding:.6rem;margin-bottom:.3rem}layout mat-drawer.right [filters-subtitle]{font-size:1rem;display:flex;align-items:center;justify-content:space-between;flex:1 1 auto;font-weight:600;padding:.4rem .6rem;margin-bottom:.3rem;margin-top:.3rem}layout mat-drawer.right [icons-container]{display:flex;align-items:center}layout mat-drawer.right [filters-icon]{cursor:pointer;transition:color .3s ease-in-out}layout mat-drawer.right [filters-chip-list] .mat-chip-list-wrapper{margin:0;max-height:20vh;overflow-y:auto}layout mat-drawer.right [filters-chip-list] .mat-standard-chip{position:relative}layout mat-drawer.right [filters-chip-list] .mat-standard-chip{padding:.5rem;margin:.1rem;font-size:.75rem;transition:.3s ease-in-out}layout mat-drawer.right [filters-chip-list] .mat-standard-chip:not([disabled]){cursor:pointer}layout mat-drawer.right [filters-chip-list] .mat-standard-chip:not([disabled]):hover:before{content:\"close\";display:flex;align-items:center;justify-content:center;position:absolute;inset:0;font-weight:700;font-size:1.2rem;cursor:pointer;transition:.3s ease-in-out}layout mat-drawer.right [filters-toggle-group]{display:flex}layout mat-drawer.right [filters-toggle-group] .mat-button-toggle{transition:.3s ease-in-out}layout mat-drawer.right [filters-toggle-group] .mat-button-toggle mat-icon{margin-right:1rem}layout mat-drawer.right [filters-toggle-group] .mat-button-toggle .mat-button-toggle-label-content{text-align:start}layout mat-drawer.right [filters-toggle-group] .mat-button-toggle .mat-button-toggle-focus-overlay{height:100%}layout mat-drawer.right mat-form-field{width:100%}layout mat-drawer.right .mat-form-field-infix{width:inherit}layout mat-drawer.right.mat-drawer-side{box-shadow:-3px 0 5px -1px #0003;z-index:10}layout mat-drawer-container{flex:1}layout .mat-toolbar:not(.actions){display:flex;box-shadow:0 3px 5px -1px #0003,0 6px 10px #00000024,0 1px 18px #0000001f;z-index:10}layout .mat-toolbar:not(.actions) #toolbar-content-container{display:flex;flex-grow:1;overflow:hidden}layout .mat-toolbar:not(.actions) [toolbar-title]{overflow:hidden;text-overflow:ellipsis}layout .mat-toolbar:not(.actions)>div{display:flex;align-items:center}layout .mat-toolbar#actions-toolbar{flex:0 0 auto;height:40px;font-size:inherit;padding-right:0}layout .mat-toolbar#actions-toolbar .info-boxes-container{display:flex;flex:1 1 auto;justify-content:flex-end}layout .mat-toolbar#actions-toolbar .info-boxes-container .info-box{display:flex;flex-grow:0;line-height:40px;padding-left:2rem;padding-right:2rem;box-shadow:-3px 0 5px -1px #0003}layout .mat-toolbar#actions-toolbar.bottom#actions-toolbar{display:flex;width:100%;justify-content:space-around}layout .mat-toolbar#actions-toolbar .primary-action-container{z-index:20}layout .main-content{position:relative;display:flex;flex:1 1 auto;overflow:hidden}layout .main-content .primary-action-container{position:absolute;z-index:20;opacity:.8;transition:.3s ease-in-out}layout .main-content .primary-action-container:hover{opacity:1}layout .main-content .primary-action-container.bottom{right:1rem;bottom:1rem}layout .main-content .primary-action-container:not(.bottom){top:1rem;left:1rem}layout ::-webkit-scrollbar{width:12px;height:12px}layout ::-webkit-scrollbar-thumb{-webkit-transition:.3s ease-in-out;transition:.3s ease-in-out;border-radius:6px}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i3.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "pipe", type: i3.AsyncPipe, name: "async" }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i4.MatButton, selector: "button[mat-button], button[mat-raised-button], button[mat-icon-button], button[mat-fab], button[mat-mini-fab], button[mat-stroked-button], button[mat-flat-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i5.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "ngmodule", type: MatSidenavModule }, { kind: "component", type: i6.MatDrawer, selector: "mat-drawer", inputs: ["position", "mode", "disableClose", "autoFocus", "opened"], outputs: ["openedChange", "opened", "openedStart", "closed", "closedStart", "positionChanged"], exportAs: ["matDrawer"] }, { kind: "component", type: i6.MatDrawerContainer, selector: "mat-drawer-container", inputs: ["autosize", "hasBackdrop"], outputs: ["backdropClick"], exportAs: ["matDrawerContainer"] }, { kind: "component", type: i6.MatDrawerContent, selector: "mat-drawer-content" }, { kind: "ngmodule", type: MatToolbarModule }, { kind: "component", type: i7.MatToolbar, selector: "mat-toolbar", inputs: ["color"], exportAs: ["matToolbar"] }, { kind: "ngmodule", type: MatTooltipModule }, { kind: "directive", type: i8.MatTooltip, selector: "[matTooltip]", exportAs: ["matTooltip"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
101
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: LayoutComponent, decorators: [{
102
+ type: Component,
103
+ args: [{ selector: 'layout', encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, standalone: true, imports: [
104
+ CommonModule,
105
+ MatButtonModule,
106
+ MatIconModule,
107
+ MatSidenavModule,
108
+ MatToolbarModule,
109
+ MatTooltipModule
110
+ ], template: "<ng-container *ngTemplateOutlet=\"filter\"></ng-container>\n\n<ng-template #content>\n <div class=\"main-content\">\n <span class=\"primary-action-container\" [class.bottom]=\"(mediaService.isHandset$ | async)\" *ngIf=\"layoutPrimaryAction && !((layoutActions || layoutInfoBoxes) && ((mediaService.isHandset$ | async) === false))\">\n <ng-template [ngTemplateOutlet]=\"layoutPrimaryAction\"></ng-template>\n </span>\n <ng-content></ng-content>\n </div>\n <ng-container *ngIf=\"(mediaService.isHandset$ | async) && actionsToolbar\">\n <ng-container *ngTemplateOutlet=\"actionsToolbar\"></ng-container>\n </ng-container>\n</ng-template>\n\n<ng-template #actionsToolbar>\n <mat-toolbar id=\"actions-toolbar\" class=\"actions\" [color]=\"toolbarColor\" [class.bottom]=\"(mediaService.isHandset$ | async)\">\n <span class=\"primary-action-container\" *ngIf=\"layoutPrimaryAction && (layoutActions || layoutInfoBoxes) && ((mediaService.isHandset$ | async) === false)\">\n <ng-template [ngTemplateOutlet]=\"layoutPrimaryAction\"></ng-template>\n </span>\n <ng-container *ngIf=\"layoutActions\">\n <ng-template [ngTemplateOutlet]=\"layoutActions\"></ng-template>\n </ng-container>\n <div class=\"info-boxes-container\" *ngIf=\"layoutInfoBoxes && (mediaService.isHandset$ | async) === false\">\n <ng-template [ngTemplateOutlet]=\"layoutInfoBoxes\"></ng-template>\n </div>\n </mat-toolbar>\n</ng-template>\n\n<ng-template #filter>\n <mat-toolbar id=\"toolbar\" [color]=\"toolbarColor\" *ngIf=\"layoutToolbar || layoutRight\">\n <button type=\"button\" id=\"sidenav-button\" mat-icon-button *ngIf=\"withSidenav && (mediaService.isHandset$ | async) && ((sidenavService.openChanged$ | async) === false)\" (click)=\"sidenavService.toggle()\">\n <mat-icon>menu</mat-icon>\n </button>\n <button type=\"button\" id=\"back-button\" mat-icon-button *ngIf=\"withBackButton\" (click)=\"this.backButtonClicked.emit($event)\" [matTooltip]=\"backButtonLabel\">\n <mat-icon>arrow_back</mat-icon>\n </button>\n <div id=\"toolbar-content-container\">\n <ng-container *ngIf=\"layoutToolbar\">\n <ng-template [ngTemplateOutlet]=\"layoutToolbar\"></ng-template>\n </ng-container>\n </div>\n <button type=\"button\" id=\"filter-button\" mat-icon-button (click)=\"sideFilter.toggle()\" *ngIf=\"sideFilter && (keepFilterButtonDisplayed || (mediaService.isHandset$ | async)) && layoutRight\" matTooltip=\"Afficher/Masquer les filtres\">\n <mat-icon>tune</mat-icon>\n </button>\n <button type=\"button\" id=\"close-button\" mat-icon-button *ngIf=\"withCloseButton\" (click)=\"this.closeButtonClicked.emit($event)\" [matTooltip]=\"closeButtonLabel\">\n <mat-icon>close</mat-icon>\n </button>\n </mat-toolbar>\n <ng-container *ngIf=\"(layoutActions || layoutInfoBoxes) && ((mediaService.isHandset$ | async) === false)\">\n <ng-container *ngTemplateOutlet=\"actionsToolbar\"></ng-container>\n </ng-container>\n <mat-drawer-container *ngIf=\"layoutRight; else content\" autosize=\"true\">\n <mat-drawer-content>\n <ng-container *ngTemplateOutlet=\"content\"></ng-container>\n </mat-drawer-content>\n <mat-drawer id=\"side-filter\" #sideFilter (closed)=\"sideFilterClosed.emit()\" (openedChange)=\"sideFilterOpened.emit()\" class=\"right\" position=\"end\" [attr.role]=\"(mediaService.isHandset$ | async) ? 'dialog' : 'navigation'\" [mode]=\"(mediaService.isHandset$ | async) ? 'over' : 'side'\" [opened]=\"(mediaService.isHandset$ | async) === false\">\n <ng-template [ngTemplateOutlet]=\"layoutRight\"></ng-template>\n </mat-drawer>\n </mat-drawer-container>\n</ng-template>\n", styles: ["layout{display:flex;flex-direction:column;position:absolute;inset:0}layout.no-left.no-right .main-content{padding:0}layout mat-sidenav-container{position:absolute;inset:0}layout mat-sidenav-content,layout mat-drawer-content{display:flex!important;flex-direction:column}layout mat-sidenav{width:200px}layout mat-drawer{width:220px}layout mat-drawer.right{padding:.3rem}layout mat-drawer.right [filters-title]{font-size:1.2rem;display:flex;align-items:center;justify-content:space-between;flex:1 1 auto;font-weight:700;padding:.6rem;margin-bottom:.3rem}layout mat-drawer.right [filters-subtitle]{font-size:1rem;display:flex;align-items:center;justify-content:space-between;flex:1 1 auto;font-weight:600;padding:.4rem .6rem;margin-bottom:.3rem;margin-top:.3rem}layout mat-drawer.right [icons-container]{display:flex;align-items:center}layout mat-drawer.right [filters-icon]{cursor:pointer;transition:color .3s ease-in-out}layout mat-drawer.right [filters-chip-list] .mat-chip-list-wrapper{margin:0;max-height:20vh;overflow-y:auto}layout mat-drawer.right [filters-chip-list] .mat-standard-chip{position:relative}layout mat-drawer.right [filters-chip-list] .mat-standard-chip{padding:.5rem;margin:.1rem;font-size:.75rem;transition:.3s ease-in-out}layout mat-drawer.right [filters-chip-list] .mat-standard-chip:not([disabled]){cursor:pointer}layout mat-drawer.right [filters-chip-list] .mat-standard-chip:not([disabled]):hover:before{content:\"close\";display:flex;align-items:center;justify-content:center;position:absolute;inset:0;font-weight:700;font-size:1.2rem;cursor:pointer;transition:.3s ease-in-out}layout mat-drawer.right [filters-toggle-group]{display:flex}layout mat-drawer.right [filters-toggle-group] .mat-button-toggle{transition:.3s ease-in-out}layout mat-drawer.right [filters-toggle-group] .mat-button-toggle mat-icon{margin-right:1rem}layout mat-drawer.right [filters-toggle-group] .mat-button-toggle .mat-button-toggle-label-content{text-align:start}layout mat-drawer.right [filters-toggle-group] .mat-button-toggle .mat-button-toggle-focus-overlay{height:100%}layout mat-drawer.right mat-form-field{width:100%}layout mat-drawer.right .mat-form-field-infix{width:inherit}layout mat-drawer.right.mat-drawer-side{box-shadow:-3px 0 5px -1px #0003;z-index:10}layout mat-drawer-container{flex:1}layout .mat-toolbar:not(.actions){display:flex;box-shadow:0 3px 5px -1px #0003,0 6px 10px #00000024,0 1px 18px #0000001f;z-index:10}layout .mat-toolbar:not(.actions) #toolbar-content-container{display:flex;flex-grow:1;overflow:hidden}layout .mat-toolbar:not(.actions) [toolbar-title]{overflow:hidden;text-overflow:ellipsis}layout .mat-toolbar:not(.actions)>div{display:flex;align-items:center}layout .mat-toolbar#actions-toolbar{flex:0 0 auto;height:40px;font-size:inherit;padding-right:0}layout .mat-toolbar#actions-toolbar .info-boxes-container{display:flex;flex:1 1 auto;justify-content:flex-end}layout .mat-toolbar#actions-toolbar .info-boxes-container .info-box{display:flex;flex-grow:0;line-height:40px;padding-left:2rem;padding-right:2rem;box-shadow:-3px 0 5px -1px #0003}layout .mat-toolbar#actions-toolbar.bottom#actions-toolbar{display:flex;width:100%;justify-content:space-around}layout .mat-toolbar#actions-toolbar .primary-action-container{z-index:20}layout .main-content{position:relative;display:flex;flex:1 1 auto;overflow:hidden}layout .main-content .primary-action-container{position:absolute;z-index:20;opacity:.8;transition:.3s ease-in-out}layout .main-content .primary-action-container:hover{opacity:1}layout .main-content .primary-action-container.bottom{right:1rem;bottom:1rem}layout .main-content .primary-action-container:not(.bottom){top:1rem;left:1rem}layout ::-webkit-scrollbar{width:12px;height:12px}layout ::-webkit-scrollbar-thumb{-webkit-transition:.3s ease-in-out;transition:.3s ease-in-out;border-radius:6px}\n"] }]
111
+ }], ctorParameters: function () { return [{ type: i1.MediaService }, { type: i2.SidenavService }]; }, propDecorators: { toolbarColor: [{
112
+ type: Input
113
+ }], editorToolbarId: [{
114
+ type: Input
115
+ }], closeButtonLabel: [{
116
+ type: Input
117
+ }], backButtonLabel: [{
118
+ type: Input
119
+ }], layoutToolbarExternal: [{
120
+ type: Input
121
+ }], layoutPrimaryActionExternal: [{
122
+ type: Input
123
+ }], layoutActionsExternal: [{
124
+ type: Input
125
+ }], layoutInfoBoxesExternal: [{
126
+ type: Input
127
+ }], layoutRightExternal: [{
128
+ type: Input
129
+ }], closeButtonClicked: [{
130
+ type: Output
131
+ }], backButtonClicked: [{
132
+ type: Output
133
+ }], sideFilterClosed: [{
134
+ type: Output
135
+ }], sideFilterOpened: [{
136
+ type: Output
137
+ }], layoutToolbarContent: [{
138
+ type: ContentChild,
139
+ args: ['layoutToolbar']
140
+ }], layoutPrimaryActionContent: [{
141
+ type: ContentChild,
142
+ args: ['layoutPrimaryAction']
143
+ }], layoutActionsContent: [{
144
+ type: ContentChild,
145
+ args: ['layoutActions']
146
+ }], layoutInfoBoxesContent: [{
147
+ type: ContentChild,
148
+ args: ['layoutInfoBoxes']
149
+ }], layoutRightContent: [{
150
+ type: ContentChild,
151
+ args: ['layoutRight']
152
+ }], noRight: [{
153
+ type: HostBinding,
154
+ args: ['class.no-right']
155
+ }], sideFilter: [{
156
+ type: ViewChild,
157
+ args: ['sideFilter']
158
+ }], withEditorToolbar: [{
159
+ type: Input
160
+ }], withSidenav: [{
161
+ type: Input
162
+ }], keepFilterButtonDisplayed: [{
163
+ type: Input
164
+ }], withCloseButton: [{
165
+ type: Input
166
+ }], withBackButton: [{
167
+ type: Input
168
+ }], displayEditorToolbar: [{
169
+ type: Input
170
+ }] } });
171
+
172
+ /**
173
+ * Generated bundle index. Do not edit.
174
+ */
175
+
176
+ export { LayoutComponent };
177
+ //# sourceMappingURL=hug-ngx-layout.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hug-ngx-layout.mjs","sources":["../../../projects/layout/src/layout.component.ts","../../../projects/layout/src/layout.component.html","../../../projects/layout/src/hug-ngx-layout.ts"],"sourcesContent":["import { BooleanInput, coerceBooleanProperty } from '@angular/cdk/coercion';\nimport { CommonModule } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, ContentChild, EventEmitter, HostBinding, Input, Output, TemplateRef, ViewChild, ViewEncapsulation } from '@angular/core';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatDrawer, MatSidenavModule } from '@angular/material/sidenav';\nimport { MatToolbarModule } from '@angular/material/toolbar';\nimport { MatTooltipModule } from '@angular/material/tooltip';\nimport { MediaService } from '@hug/ngx-core';\nimport { SidenavService } from '@hug/ngx-sidenav';\n\n@Component({\n selector: 'layout',\n templateUrl: './layout.component.html',\n styleUrls: ['./layout.component.scss'],\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n standalone: true,\n imports: [\n CommonModule,\n MatButtonModule,\n MatIconModule,\n MatSidenavModule,\n MatToolbarModule,\n MatTooltipModule\n ]\n})\nexport class LayoutComponent {\n @Input() public toolbarColor = 'primary';\n @Input() public editorToolbarId = 'editor-toolbar';\n\n @Input() public closeButtonLabel = 'Fermer';\n @Input() public backButtonLabel = 'Retour';\n\n @Input() public layoutToolbarExternal?: TemplateRef<unknown>;\n @Input() public layoutPrimaryActionExternal?: TemplateRef<unknown>;\n @Input() public layoutActionsExternal?: TemplateRef<unknown>;\n @Input() public layoutInfoBoxesExternal?: TemplateRef<unknown>;\n @Input() public layoutRightExternal?: TemplateRef<unknown>;\n\n @Output() public readonly closeButtonClicked = new EventEmitter<MouseEvent>();\n @Output() public readonly backButtonClicked = new EventEmitter<MouseEvent>();\n @Output() public readonly sideFilterClosed = new EventEmitter<void>();\n @Output() public readonly sideFilterOpened = new EventEmitter<void>();\n\n @ContentChild('layoutToolbar') protected layoutToolbarContent?: TemplateRef<unknown>;\n @ContentChild('layoutPrimaryAction') protected layoutPrimaryActionContent?: TemplateRef<unknown>;\n @ContentChild('layoutActions') protected layoutActionsContent?: TemplateRef<unknown>;\n @ContentChild('layoutInfoBoxes') protected layoutInfoBoxesContent?: TemplateRef<unknown>;\n @ContentChild('layoutRight') protected layoutRightContent?: TemplateRef<unknown>;\n\n @HostBinding('class.no-right') protected noRight = false;\n\n @ViewChild('sideFilter') protected sideFilter?: MatDrawer;\n\n private _withEditorToolbar = true;\n\n public get layoutToolbar(): TemplateRef<unknown> | undefined {\n return this.layoutToolbarExternal ?? this.layoutToolbarContent;\n }\n\n public get layoutPrimaryAction(): TemplateRef<unknown> | undefined {\n return this.layoutPrimaryActionExternal ?? this.layoutPrimaryActionContent;\n }\n\n public get layoutActions(): TemplateRef<unknown> | undefined {\n return this.layoutActionsExternal ?? this.layoutActionsContent;\n }\n\n public get layoutInfoBoxes(): TemplateRef<unknown> | undefined {\n return this.layoutInfoBoxesExternal ?? this.layoutInfoBoxesContent;\n }\n\n public get layoutRight(): TemplateRef<unknown> | undefined {\n const value = this.layoutRightExternal ?? this.layoutRightContent;\n this.noRight = !value;\n return value;\n }\n\n @Input()\n public set withEditorToolbar(value: BooleanInput) {\n this._withEditorToolbar = coerceBooleanProperty(value);\n }\n\n public get withEditorToolbar(): BooleanInput {\n return this._withEditorToolbar;\n }\n\n private _withSidenav = false;\n\n @Input()\n public set withSidenav(value: BooleanInput) {\n this._withSidenav = coerceBooleanProperty(value);\n }\n\n public get withSidenav(): BooleanInput {\n return this._withSidenav;\n }\n\n private _keepFilterButtonDisplayed = true;\n @Input()\n public set keepFilterButtonDisplayed(value: BooleanInput) {\n this._keepFilterButtonDisplayed = coerceBooleanProperty(value);\n }\n\n public get keepFilterButtonDisplayed(): BooleanInput {\n return this._keepFilterButtonDisplayed;\n }\n\n private _withCloseButton = false;\n @Input()\n public set withCloseButton(value: BooleanInput) {\n this._withCloseButton = coerceBooleanProperty(value);\n }\n\n public get withCloseButton(): BooleanInput {\n return this._withCloseButton;\n }\n\n private _withBackButton = false;\n\n @Input()\n public set withBackButton(value: BooleanInput) {\n this._withBackButton = coerceBooleanProperty(value);\n }\n\n public get withBackButton(): BooleanInput {\n return this._withBackButton;\n }\n\n private _displayEditorToolbar = true;\n\n @Input()\n public set displayEditorToolbar(value: BooleanInput) {\n this._displayEditorToolbar = coerceBooleanProperty(value);\n }\n\n public get displayEditorToolbar(): BooleanInput {\n return this._displayEditorToolbar;\n }\n\n public constructor(\n protected mediaService: MediaService,\n protected sidenavService: SidenavService\n ) {\n }\n\n public closeSideFilter(): void {\n void this.sideFilter?.close();\n }\n\n public openSideFilter(): void {\n void this.sideFilter?.open();\n }\n}\n","<ng-container *ngTemplateOutlet=\"filter\"></ng-container>\n\n<ng-template #content>\n <div class=\"main-content\">\n <span class=\"primary-action-container\" [class.bottom]=\"(mediaService.isHandset$ | async)\" *ngIf=\"layoutPrimaryAction && !((layoutActions || layoutInfoBoxes) && ((mediaService.isHandset$ | async) === false))\">\n <ng-template [ngTemplateOutlet]=\"layoutPrimaryAction\"></ng-template>\n </span>\n <ng-content></ng-content>\n </div>\n <ng-container *ngIf=\"(mediaService.isHandset$ | async) && actionsToolbar\">\n <ng-container *ngTemplateOutlet=\"actionsToolbar\"></ng-container>\n </ng-container>\n</ng-template>\n\n<ng-template #actionsToolbar>\n <mat-toolbar id=\"actions-toolbar\" class=\"actions\" [color]=\"toolbarColor\" [class.bottom]=\"(mediaService.isHandset$ | async)\">\n <span class=\"primary-action-container\" *ngIf=\"layoutPrimaryAction && (layoutActions || layoutInfoBoxes) && ((mediaService.isHandset$ | async) === false)\">\n <ng-template [ngTemplateOutlet]=\"layoutPrimaryAction\"></ng-template>\n </span>\n <ng-container *ngIf=\"layoutActions\">\n <ng-template [ngTemplateOutlet]=\"layoutActions\"></ng-template>\n </ng-container>\n <div class=\"info-boxes-container\" *ngIf=\"layoutInfoBoxes && (mediaService.isHandset$ | async) === false\">\n <ng-template [ngTemplateOutlet]=\"layoutInfoBoxes\"></ng-template>\n </div>\n </mat-toolbar>\n</ng-template>\n\n<ng-template #filter>\n <mat-toolbar id=\"toolbar\" [color]=\"toolbarColor\" *ngIf=\"layoutToolbar || layoutRight\">\n <button type=\"button\" id=\"sidenav-button\" mat-icon-button *ngIf=\"withSidenav && (mediaService.isHandset$ | async) && ((sidenavService.openChanged$ | async) === false)\" (click)=\"sidenavService.toggle()\">\n <mat-icon>menu</mat-icon>\n </button>\n <button type=\"button\" id=\"back-button\" mat-icon-button *ngIf=\"withBackButton\" (click)=\"this.backButtonClicked.emit($event)\" [matTooltip]=\"backButtonLabel\">\n <mat-icon>arrow_back</mat-icon>\n </button>\n <div id=\"toolbar-content-container\">\n <ng-container *ngIf=\"layoutToolbar\">\n <ng-template [ngTemplateOutlet]=\"layoutToolbar\"></ng-template>\n </ng-container>\n </div>\n <button type=\"button\" id=\"filter-button\" mat-icon-button (click)=\"sideFilter.toggle()\" *ngIf=\"sideFilter && (keepFilterButtonDisplayed || (mediaService.isHandset$ | async)) && layoutRight\" matTooltip=\"Afficher/Masquer les filtres\">\n <mat-icon>tune</mat-icon>\n </button>\n <button type=\"button\" id=\"close-button\" mat-icon-button *ngIf=\"withCloseButton\" (click)=\"this.closeButtonClicked.emit($event)\" [matTooltip]=\"closeButtonLabel\">\n <mat-icon>close</mat-icon>\n </button>\n </mat-toolbar>\n <ng-container *ngIf=\"(layoutActions || layoutInfoBoxes) && ((mediaService.isHandset$ | async) === false)\">\n <ng-container *ngTemplateOutlet=\"actionsToolbar\"></ng-container>\n </ng-container>\n <mat-drawer-container *ngIf=\"layoutRight; else content\" autosize=\"true\">\n <mat-drawer-content>\n <ng-container *ngTemplateOutlet=\"content\"></ng-container>\n </mat-drawer-content>\n <mat-drawer id=\"side-filter\" #sideFilter (closed)=\"sideFilterClosed.emit()\" (openedChange)=\"sideFilterOpened.emit()\" class=\"right\" position=\"end\" [attr.role]=\"(mediaService.isHandset$ | async) ? 'dialog' : 'navigation'\" [mode]=\"(mediaService.isHandset$ | async) ? 'over' : 'side'\" [opened]=\"(mediaService.isHandset$ | async) === false\">\n <ng-template [ngTemplateOutlet]=\"layoutRight\"></ng-template>\n </mat-drawer>\n </mat-drawer-container>\n</ng-template>\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
@@ -0,0 +1,58 @@
1
+ import { BooleanInput } from '@angular/cdk/coercion';
2
+ import { EventEmitter, TemplateRef } from '@angular/core';
3
+ import { MatDrawer } from '@angular/material/sidenav';
4
+ import { MediaService } from '@hug/ngx-core';
5
+ import { SidenavService } from '@hug/ngx-sidenav';
6
+ import * as i0 from "@angular/core";
7
+ export declare class LayoutComponent {
8
+ protected mediaService: MediaService;
9
+ protected sidenavService: SidenavService;
10
+ toolbarColor: string;
11
+ editorToolbarId: string;
12
+ closeButtonLabel: string;
13
+ backButtonLabel: string;
14
+ layoutToolbarExternal?: TemplateRef<unknown>;
15
+ layoutPrimaryActionExternal?: TemplateRef<unknown>;
16
+ layoutActionsExternal?: TemplateRef<unknown>;
17
+ layoutInfoBoxesExternal?: TemplateRef<unknown>;
18
+ layoutRightExternal?: TemplateRef<unknown>;
19
+ readonly closeButtonClicked: EventEmitter<MouseEvent>;
20
+ readonly backButtonClicked: EventEmitter<MouseEvent>;
21
+ readonly sideFilterClosed: EventEmitter<void>;
22
+ readonly sideFilterOpened: EventEmitter<void>;
23
+ protected layoutToolbarContent?: TemplateRef<unknown>;
24
+ protected layoutPrimaryActionContent?: TemplateRef<unknown>;
25
+ protected layoutActionsContent?: TemplateRef<unknown>;
26
+ protected layoutInfoBoxesContent?: TemplateRef<unknown>;
27
+ protected layoutRightContent?: TemplateRef<unknown>;
28
+ protected noRight: boolean;
29
+ protected sideFilter?: MatDrawer;
30
+ private _withEditorToolbar;
31
+ get layoutToolbar(): TemplateRef<unknown> | undefined;
32
+ get layoutPrimaryAction(): TemplateRef<unknown> | undefined;
33
+ get layoutActions(): TemplateRef<unknown> | undefined;
34
+ get layoutInfoBoxes(): TemplateRef<unknown> | undefined;
35
+ get layoutRight(): TemplateRef<unknown> | undefined;
36
+ set withEditorToolbar(value: BooleanInput);
37
+ get withEditorToolbar(): BooleanInput;
38
+ private _withSidenav;
39
+ set withSidenav(value: BooleanInput);
40
+ get withSidenav(): BooleanInput;
41
+ private _keepFilterButtonDisplayed;
42
+ set keepFilterButtonDisplayed(value: BooleanInput);
43
+ get keepFilterButtonDisplayed(): BooleanInput;
44
+ private _withCloseButton;
45
+ set withCloseButton(value: BooleanInput);
46
+ get withCloseButton(): BooleanInput;
47
+ private _withBackButton;
48
+ set withBackButton(value: BooleanInput);
49
+ get withBackButton(): BooleanInput;
50
+ private _displayEditorToolbar;
51
+ set displayEditorToolbar(value: BooleanInput);
52
+ get displayEditorToolbar(): BooleanInput;
53
+ constructor(mediaService: MediaService, sidenavService: SidenavService);
54
+ closeSideFilter(): void;
55
+ openSideFilter(): void;
56
+ static ɵfac: i0.ɵɵFactoryDeclaration<LayoutComponent, never>;
57
+ static ɵcmp: i0.ɵɵComponentDeclaration<LayoutComponent, "layout", never, { "toolbarColor": "toolbarColor"; "editorToolbarId": "editorToolbarId"; "closeButtonLabel": "closeButtonLabel"; "backButtonLabel": "backButtonLabel"; "layoutToolbarExternal": "layoutToolbarExternal"; "layoutPrimaryActionExternal": "layoutPrimaryActionExternal"; "layoutActionsExternal": "layoutActionsExternal"; "layoutInfoBoxesExternal": "layoutInfoBoxesExternal"; "layoutRightExternal": "layoutRightExternal"; "withEditorToolbar": "withEditorToolbar"; "withSidenav": "withSidenav"; "keepFilterButtonDisplayed": "keepFilterButtonDisplayed"; "withCloseButton": "withCloseButton"; "withBackButton": "withBackButton"; "displayEditorToolbar": "displayEditorToolbar"; }, { "closeButtonClicked": "closeButtonClicked"; "backButtonClicked": "backButtonClicked"; "sideFilterClosed": "sideFilterClosed"; "sideFilterOpened": "sideFilterOpened"; }, ["layoutToolbarContent", "layoutPrimaryActionContent", "layoutActionsContent", "layoutInfoBoxesContent", "layoutRightContent"], ["*"], true>;
58
+ }
package/package.json CHANGED
@@ -1,46 +1,56 @@
1
1
  {
2
- "name": "@hug/ngx-layout",
3
- "version": "1.1.0",
4
- "description": "HUG Angular - layout component",
5
- "homepage": "https://github.com/dsi-hug/ngx-components",
6
- "license": "GPL-3.0-only",
7
- "author": "HUG - Hôpitaux Universitaires Genève",
8
- "contributors": [
9
- "badisi (https://github.com/badisi)",
10
- "vapkse (https://github.com/vapkse)"
11
- ],
12
- "repository": {
13
- "type": "git",
14
- "url": "git+https://github.com/dsi-hug/ngx-components.git"
2
+ "name": "@hug/ngx-layout",
3
+ "version": "1.1.2",
4
+ "description": "HUG Angular - layout component",
5
+ "homepage": "https://github.com/dsi-hug/ngx-components",
6
+ "license": "GPL-3.0-only",
7
+ "author": "HUG - Hôpitaux Universitaires Genève",
8
+ "contributors": [
9
+ "badisi (https://github.com/badisi)",
10
+ "vapkse (https://github.com/vapkse)"
11
+ ],
12
+ "repository": {
13
+ "type": "git",
14
+ "url": "git+https://github.com/dsi-hug/ngx-components.git"
15
+ },
16
+ "keywords": [
17
+ "angular",
18
+ "material",
19
+ "material design",
20
+ "components"
21
+ ],
22
+ "sideEffects": false,
23
+ "peerDependencies": {
24
+ "@angular/common": ">= 14",
25
+ "@angular/core": ">= 14",
26
+ "@angular/cdk": ">= 14",
27
+ "@angular/material": ">= 14",
28
+ "@hug/ngx-core": "1.1.6",
29
+ "@hug/ngx-sidenav": "1.1.1"
30
+ },
31
+ "dependencies": {
32
+ "tslib": "^2.6.3"
33
+ },
34
+ "publishConfig": {
35
+ "access": "public"
36
+ },
37
+ "module": "fesm2015/hug-ngx-layout.mjs",
38
+ "es2020": "fesm2020/hug-ngx-layout.mjs",
39
+ "esm2020": "esm2020/hug-ngx-layout.mjs",
40
+ "fesm2020": "fesm2020/hug-ngx-layout.mjs",
41
+ "fesm2015": "fesm2015/hug-ngx-layout.mjs",
42
+ "typings": "index.d.ts",
43
+ "exports": {
44
+ "./package.json": {
45
+ "default": "./package.json"
15
46
  },
16
- "keywords": [
17
- "angular",
18
- "material",
19
- "material design",
20
- "components"
21
- ],
22
- "sideEffects": false,
23
- "scripts": {
24
- "lint": "eslint . --fix",
25
- "test": "ng test layout",
26
- "test:ci": "ng test layout --watch=false --browsers=ChromeHeadless",
27
- "build:ng": "ng build layout -c=production",
28
- "build": "nx build:ng @hug/ngx-layout --verbose",
29
- "release": "nx release -p=@hug/ngx-layout --yes --verbose",
30
- "release:dry-run": "nx release -p=@hug/ngx-layout --verbose --dry-run"
31
- },
32
- "peerDependencies": {
33
- "@angular/common": ">= 14",
34
- "@angular/core": ">= 14",
35
- "@angular/cdk": ">= 14",
36
- "@angular/material": ">= 14",
37
- "@hug/ngx-core": "1.1.5",
38
- "@hug/ngx-sidenav": "1.1.0"
39
- },
40
- "dependencies": {
41
- "tslib": "^2.6.3"
42
- },
43
- "publishConfig": {
44
- "access": "public"
47
+ ".": {
48
+ "types": "./index.d.ts",
49
+ "esm2020": "./esm2020/hug-ngx-layout.mjs",
50
+ "es2020": "./fesm2020/hug-ngx-layout.mjs",
51
+ "es2015": "./fesm2015/hug-ngx-layout.mjs",
52
+ "node": "./fesm2015/hug-ngx-layout.mjs",
53
+ "default": "./fesm2020/hug-ngx-layout.mjs"
45
54
  }
46
- }
55
+ }
56
+ }
package/karma.conf.js DELETED
@@ -1,45 +0,0 @@
1
- // Karma configuration file, see link for more information
2
- // https://karma-runner.github.io/1.0/config/configuration-file.html
3
-
4
- module.exports = config => {
5
- config.set({
6
- basePath: '',
7
- frameworks: ['jasmine', '@angular-devkit/build-angular'],
8
- plugins: [
9
- require('karma-jasmine'),
10
- require('karma-chrome-launcher'),
11
- require('karma-jasmine-html-reporter'),
12
- require('karma-coverage'),
13
- require('@angular-devkit/build-angular/plugins/karma')
14
- ],
15
- client: {
16
- jasmine: {
17
- // you can add configuration options for Jasmine here
18
- // the possible options are listed at https://jasmine.github.io/api/edge/Configuration.html
19
- // for example, you can disable the random execution with `random: false`
20
- // or set a specific seed with `seed: 4321`
21
- },
22
- clearContext: false // leave Jasmine Spec Runner output visible in browser
23
- },
24
- jasmineHtmlReporter: {
25
- suppressAll: true // removes the duplicated traces
26
- },
27
- coverageReporter: {
28
- dir: require('path').join(__dirname, '../../coverage/layout'),
29
- subdir: '.',
30
- reporters: [
31
- { type: 'html' },
32
- { type: 'text-summary' }
33
- ]
34
- },
35
- reporters: ['progress', 'kjhtml'],
36
- port: 9876,
37
- colors: true,
38
- logLevel: config.LOG_INFO,
39
- autoWatch: true,
40
- browsers: ['Chrome'],
41
- singleRun: false,
42
- failOnEmptyTestSuite: false,
43
- restartOnFileChange: true
44
- });
45
- };
package/ng-package.json DELETED
@@ -1,15 +0,0 @@
1
- {
2
- "$schema": "../../node_modules/ng-packagr/ng-package.schema.json",
3
- "dest": "../../dist/layout",
4
- "assets": [
5
- "CHANGELOG.md",
6
- {
7
- "input": "src/",
8
- "glob": "_layout-theme.scss",
9
- "output": "."
10
- }
11
- ],
12
- "lib": {
13
- "entryFile": "src/index.ts"
14
- }
15
- }
@@ -1,60 +0,0 @@
1
- <ng-container *ngTemplateOutlet="filter"></ng-container>
2
-
3
- <ng-template #content>
4
- <div class="main-content">
5
- <span class="primary-action-container" [class.bottom]="(mediaService.isHandset$ | async)" *ngIf="layoutPrimaryAction && !((layoutActions || layoutInfoBoxes) && ((mediaService.isHandset$ | async) === false))">
6
- <ng-template [ngTemplateOutlet]="layoutPrimaryAction"></ng-template>
7
- </span>
8
- <ng-content></ng-content>
9
- </div>
10
- <ng-container *ngIf="(mediaService.isHandset$ | async) && actionsToolbar">
11
- <ng-container *ngTemplateOutlet="actionsToolbar"></ng-container>
12
- </ng-container>
13
- </ng-template>
14
-
15
- <ng-template #actionsToolbar>
16
- <mat-toolbar id="actions-toolbar" class="actions" [color]="toolbarColor" [class.bottom]="(mediaService.isHandset$ | async)">
17
- <span class="primary-action-container" *ngIf="layoutPrimaryAction && (layoutActions || layoutInfoBoxes) && ((mediaService.isHandset$ | async) === false)">
18
- <ng-template [ngTemplateOutlet]="layoutPrimaryAction"></ng-template>
19
- </span>
20
- <ng-container *ngIf="layoutActions">
21
- <ng-template [ngTemplateOutlet]="layoutActions"></ng-template>
22
- </ng-container>
23
- <div class="info-boxes-container" *ngIf="layoutInfoBoxes && (mediaService.isHandset$ | async) === false">
24
- <ng-template [ngTemplateOutlet]="layoutInfoBoxes"></ng-template>
25
- </div>
26
- </mat-toolbar>
27
- </ng-template>
28
-
29
- <ng-template #filter>
30
- <mat-toolbar id="toolbar" [color]="toolbarColor" *ngIf="layoutToolbar || layoutRight">
31
- <button type="button" id="sidenav-button" mat-icon-button *ngIf="withSidenav && (mediaService.isHandset$ | async) && ((sidenavService.openChanged$ | async) === false)" (click)="sidenavService.toggle()">
32
- <mat-icon>menu</mat-icon>
33
- </button>
34
- <button type="button" id="back-button" mat-icon-button *ngIf="withBackButton" (click)="this.backButtonClicked.emit($event)" [matTooltip]="backButtonLabel">
35
- <mat-icon>arrow_back</mat-icon>
36
- </button>
37
- <div id="toolbar-content-container">
38
- <ng-container *ngIf="layoutToolbar">
39
- <ng-template [ngTemplateOutlet]="layoutToolbar"></ng-template>
40
- </ng-container>
41
- </div>
42
- <button type="button" id="filter-button" mat-icon-button (click)="sideFilter.toggle()" *ngIf="sideFilter && (keepFilterButtonDisplayed || (mediaService.isHandset$ | async)) && layoutRight" matTooltip="Afficher/Masquer les filtres">
43
- <mat-icon>tune</mat-icon>
44
- </button>
45
- <button type="button" id="close-button" mat-icon-button *ngIf="withCloseButton" (click)="this.closeButtonClicked.emit($event)" [matTooltip]="closeButtonLabel">
46
- <mat-icon>close</mat-icon>
47
- </button>
48
- </mat-toolbar>
49
- <ng-container *ngIf="(layoutActions || layoutInfoBoxes) && ((mediaService.isHandset$ | async) === false)">
50
- <ng-container *ngTemplateOutlet="actionsToolbar"></ng-container>
51
- </ng-container>
52
- <mat-drawer-container *ngIf="layoutRight; else content" autosize="true">
53
- <mat-drawer-content>
54
- <ng-container *ngTemplateOutlet="content"></ng-container>
55
- </mat-drawer-content>
56
- <mat-drawer id="side-filter" #sideFilter (closed)="sideFilterClosed.emit()" (openedChange)="sideFilterOpened.emit()" class="right" position="end" [attr.role]="(mediaService.isHandset$ | async) ? 'dialog' : 'navigation'" [mode]="(mediaService.isHandset$ | async) ? 'over' : 'side'" [opened]="(mediaService.isHandset$ | async) === false">
57
- <ng-template [ngTemplateOutlet]="layoutRight"></ng-template>
58
- </mat-drawer>
59
- </mat-drawer-container>
60
- </ng-template>