@hug/ngx-layout 21.0.2 → 22.0.0-alpha.10

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -1,3 +1,154 @@
1
+ ## 22.0.0-alpha.10 (2026-04-22)
2
+
3
+ ### 🐛 Fixes
4
+
5
+ - **layout:** harmonize the selectors for directives and components #DESIGNSYS-115 ([ce50402](https://github.com/DSI-HUG/ngx-components/commit/ce50402))
6
+
7
+ ### ❤️ Thank You
8
+
9
+ - Esther Layat
10
+
11
+ ## 22.0.0-alpha.9 (2026-04-22)
12
+
13
+ ### 🐛 Fixes
14
+
15
+ - **actions-group:** add missing export for action.directive #DESIGNSYS-213 ([0aaf713](https://github.com/DSI-HUG/ngx-components/commit/0aaf713))
16
+
17
+ ### ❤️ Thank You
18
+
19
+ - Esther Layat
20
+
21
+ ## 22.0.0-alpha.8 (2026-04-22)
22
+
23
+ ### 🐛 Fixes
24
+
25
+ - **actions-group:** add NgxActionDirective and update content projection #DESIGNSYS-213 ([b137908](https://github.com/DSI-HUG/ngx-components/commit/b137908))
26
+ - **search-bar-container:** remove focus from the input at startup #DESIGNSYS-115 ([8be134b](https://github.com/DSI-HUG/ngx-components/commit/8be134b))
27
+
28
+ ### ❤️ Thank You
29
+
30
+ - Esther Layat
31
+
32
+ ## 22.0.0-alpha.7 (2026-04-14)
33
+
34
+ This was a version bump only for @hug/ngx-layout to align it with other projects, there were no code changes.
35
+
36
+ ## 22.0.0-alpha.6 (2026-04-02)
37
+
38
+ ### 🐛 Fixes
39
+
40
+ - **package:** update versions to 22.0.0-alpha.2 for multiple components ([4f38846](https://github.com/DSI-HUG/ngx-components/commit/4f38846))
41
+
42
+ ### 🌱 Dependencies
43
+
44
+ - **@hug/ngx-sidenav**: upgraded to `v22.0.0-alpha.3`
45
+ - **@hug/ngx-core**: upgraded to `v22.0.0-alpha.3`
46
+
47
+ ### ❤️ Thank You
48
+
49
+ - Esther Layat
50
+
51
+ ## 22.0.0-alpha.5 (2026-04-01)
52
+
53
+ ### 🚀 Features
54
+
55
+ - **column:** add ngx-column component #DESIGNSYS-214 ([b04757f](https://github.com/DSI-HUG/ngx-components/commit/b04757f))
56
+ - **panel-bar:** update title handling and content projection #DESIGNSYS-104 ([39a25bb](https://github.com/DSI-HUG/ngx-components/commit/39a25bb))
57
+ - **main-bar:** add ngxContentLeft and ngxContentRight #DESIGNSYS-102 ([ffa96c6](https://github.com/DSI-HUG/ngx-components/commit/ffa96c6))
58
+ - **column-bar:** add support for ngxContentLeft and ngxContentRight projection #DESIGNSYS-179 ([9c314fc](https://github.com/DSI-HUG/ngx-components/commit/9c314fc))
59
+
60
+ ### 🐛 Fixes
61
+
62
+ - **search-bar:** correct the variable names #DESIGNSYS-103 ([14d7e32](https://github.com/DSI-HUG/ngx-components/commit/14d7e32))
63
+ - **filters-group:** correct the variable names #DESIGNSYS-177 ([322270a](https://github.com/DSI-HUG/ngx-components/commit/322270a))
64
+ - **layout:** adjust the padding #DESIGNSYS-178 ([eaf75f6](https://github.com/DSI-HUG/ngx-components/commit/eaf75f6))
65
+ - **layout:** wrap ng-content in extra-content div and adjust padding #DESIGNSYS-178 ([7064b0f](https://github.com/DSI-HUG/ngx-components/commit/7064b0f))
66
+ - **panel-bar:** update first-child padding #DESIGNSYS-104 ([ce02016](https://github.com/DSI-HUG/ngx-components/commit/ce02016))
67
+ - **main-bar:** update padding #DESIGNSYS-102 ([ab0c38d](https://github.com/DSI-HUG/ngx-components/commit/ab0c38d))
68
+ - **app-bar:** update padding variable #DESIGNSYS-101 ([5a771a3](https://github.com/DSI-HUG/ngx-components/commit/5a771a3))
69
+ - **app-bar:** add padding to the sides and simplify the padding #DESIGNSYS-101 ([3029772](https://github.com/DSI-HUG/ngx-components/commit/3029772))
70
+ - **column-bar, panel-bar:** update ngxContentLeft and ngxContentRight #DESIGNSYS-179 ([52cf25d](https://github.com/DSI-HUG/ngx-components/commit/52cf25d))
71
+ - **column-bar:** wrap title content in conditional block for better rendering #DESIGNSYS-179 ([2eb7e57](https://github.com/DSI-HUG/ngx-components/commit/2eb7e57))
72
+ - **search-bar-container:** replace hardcoded max-width with CSS variable #DESIGNSYS-103 ([1b53406](https://github.com/DSI-HUG/ngx-components/commit/1b53406))
73
+ - **column-bar:** add min-height variable #DESIGNSYS-179 ([086aae8](https://github.com/DSI-HUG/ngx-components/commit/086aae8))
74
+ - **filters-group:** adjust mat-chip-set styling for better appearance #DESIGNSYS-177 ([ff51834](https://github.com/DSI-HUG/ngx-components/commit/ff51834))
75
+ - **column-bar:** simplify flex behavior for ngx-column-bar elements #DESIGNSYS-179 ([c4ff3c2](https://github.com/DSI-HUG/ngx-components/commit/c4ff3c2))
76
+
77
+ ### 🌱 Dependencies
78
+
79
+ - **@hug/ngx-sidenav**: upgraded to `v22.0.0-alpha.2`
80
+ - **@hug/ngx-core**: upgraded to `v22.0.0-alpha.2`
81
+
82
+ ### ❤️ Thank You
83
+
84
+ - Esther Layat
85
+
86
+ ## 22.0.0-alpha.4 (2026-03-24)
87
+
88
+ ### 🐛 Fixes
89
+
90
+ - **layout:** add exports for column-bar and panel-bar #DESIGNSYS-104 ([0fa772b](https://github.com/DSI-HUG/ngx-components/commit/0fa772b))
91
+
92
+ ### ❤️ Thank You
93
+
94
+ - Esther Layat
95
+
96
+ ## 22.0.0-alpha.3 (2026-03-20)
97
+
98
+ ### 🚀 Features
99
+
100
+ - **column-bar:** add ngx-column-bar component #DESIGNSYS-179 ([7d32d1a](https://github.com/DSI-HUG/ngx-components/commit/7d32d1a))
101
+ - **panel-bar:** add ngx-panel-bar component #DESIGNSYS-104 ([5d4b476](https://github.com/DSI-HUG/ngx-components/commit/5d4b476))
102
+
103
+ ### 🐛 Fixes
104
+
105
+ - **translations:** correction of the German translation for "active" #DESIGNSYS-177 ([82dd0cb](https://github.com/DSI-HUG/ngx-components/commit/82dd0cb))
106
+
107
+ ### ❤️ Thank You
108
+
109
+ - Esther Layat
110
+
111
+ ## 22.0.0-alpha.2 (2026-03-18)
112
+
113
+ ### 🚀 Features
114
+
115
+ - **filters-group:** add filters-group component #DESIGNSYS-177 ([dea1a5f](https://github.com/DSI-HUG/ngx-components/commit/dea1a5f))
116
+
117
+ ### ❤️ Thank You
118
+
119
+ - Esther Layat
120
+
121
+ ## 22.0.0-alpha.1 (2026-03-13)
122
+
123
+ ### 🚀 Features
124
+
125
+ - **layout:** adjust styles + add ellipsis for the search input #DESIGNSYS-103 ([7158e2f](https://github.com/DSI-HUG/ngx-components/commit/7158e2f))
126
+ - **layout:** use CSS variables #DESIGNSYS-178 ([309b56a](https://github.com/DSI-HUG/ngx-components/commit/309b56a))
127
+ - **search-bar-container:** use CSS variables #DESIGNSYS-103 ([c35c5f7](https://github.com/DSI-HUG/ngx-components/commit/c35c5f7))
128
+ - **panel:** use CSS variables #DESIGNSYS-176 ([7e75e7b](https://github.com/DSI-HUG/ngx-components/commit/7e75e7b))
129
+ - **main-bar:** use CSS variables #DESIGNSYS-102 ([4a81e1b](https://github.com/DSI-HUG/ngx-components/commit/4a81e1b))
130
+ - **actions-group:** use CSS variables #DESIGNSYS-180 ([9a96e80](https://github.com/DSI-HUG/ngx-components/commit/9a96e80))
131
+ - **app-bar:** use CSS variables for layout properties #DESIGNSYS-101 ([d22a389](https://github.com/DSI-HUG/ngx-components/commit/d22a389))
132
+ - **layout:** adjust properties for better layout #DESIGNSYS-180 ([888699c](https://github.com/DSI-HUG/ngx-components/commit/888699c))
133
+ - **search-bar:** add translations and internationalization support #DESIGNSYS-103 ([50640a2](https://github.com/DSI-HUG/ngx-components/commit/50640a2))
134
+ - **actions-group:** add translations and internationalization support #DESIGNSYS-180 ([ffece73](https://github.com/DSI-HUG/ngx-components/commit/ffece73))
135
+ - **app-bar:** add translations and internationalization support #DESIGNSYS-101 ([e8e42e5](https://github.com/DSI-HUG/ngx-components/commit/e8e42e5))
136
+ - **panel:** add NgxPanelComponent #DESIGNSYS-176 ([69ae788](https://github.com/DSI-HUG/ngx-components/commit/69ae788))
137
+ - **main-bar:** add NgxMainBarComponent #DESIGNSYS-102 ([b972c4e](https://github.com/DSI-HUG/ngx-components/commit/b972c4e))
138
+ - **search-bar:** add ngx-search-bar-container #DESIGNSYS-103 ([5e8da5c](https://github.com/DSI-HUG/ngx-components/commit/5e8da5c))
139
+ - **layout:** add NgxActionsGroupComponent #DESIGNSYS-180 ([7dc1e4e](https://github.com/DSI-HUG/ngx-components/commit/7dc1e4e))
140
+ - **layout:** add NgxLayoutComponent #DESIGNSYS-178 ([edf93bb](https://github.com/DSI-HUG/ngx-components/commit/edf93bb))
141
+ - **app-bar:** added the ngx-app-bar component #DESIGNSYS-101 ([0cc08f3](https://github.com/DSI-HUG/ngx-components/commit/0cc08f3))
142
+
143
+ ### 🌱 Dependencies
144
+
145
+ - **@hug/ngx-sidenav**: upgraded to `v22.0.0-alpha.1`
146
+ - **@hug/ngx-core**: upgraded to `v22.0.0-alpha.1`
147
+
148
+ ### ❤️ Thank You
149
+
150
+ - Esther Layat
151
+
1
152
  ## 21.0.2 (2026-02-13)
2
153
 
3
154
  ### 🌱 Dependencies
@@ -0,0 +1,184 @@
1
+ import { coerceBooleanProperty } from '@angular/cdk/coercion';
2
+ import { NgTemplateOutlet, AsyncPipe } from '@angular/common';
3
+ import * as i0 from '@angular/core';
4
+ import { Injectable, EventEmitter, inject, ElementRef, Input, ViewChild, ContentChild, Output, ChangeDetectionStrategy, ViewEncapsulation, Component } from '@angular/core';
5
+ import { MatIconButton } from '@angular/material/button';
6
+ import { MatIcon } from '@angular/material/icon';
7
+ import { MatDrawer, MatDrawerContainer, MatDrawerContent } from '@angular/material/sidenav';
8
+ import { MatToolbar } from '@angular/material/toolbar';
9
+ import { MatTooltip } from '@angular/material/tooltip';
10
+ import { NgxAbstractIntl, provideNgxIntl, NgxMediaService } from '@hug/ngx-core';
11
+ import { NgxSidenavService } from '@hug/ngx-sidenav/m2';
12
+
13
+ /**
14
+ * Data for internationalization
15
+ */
16
+ class NgxLayoutIntl extends NgxAbstractIntl {
17
+ closeLabel = '';
18
+ backLabel = '';
19
+ sideFilterLabel = '';
20
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.6", ngImport: i0, type: NgxLayoutIntl, deps: null, target: i0.ɵɵFactoryTarget.Injectable });
21
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.1.6", ngImport: i0, type: NgxLayoutIntl });
22
+ }
23
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.6", ngImport: i0, type: NgxLayoutIntl, decorators: [{
24
+ type: Injectable
25
+ }] });
26
+
27
+ /**
28
+ * Provide the component to the application level.
29
+ * @param options - The component's providing options.
30
+ * @param options.translationsPath - The path to the translations files (default: `translations/ngx-layout`).
31
+ * @param options.customIntl - A custom internationalization class to inject.
32
+ */
33
+ const provideNgxLayout = (options) => provideNgxIntl(NgxLayoutIntl, options?.translationsPath ?? 'translations/ngx-layout', options?.customIntl ?? NgxLayoutIntl);
34
+
35
+ class NgxLayoutComponent {
36
+ toolbarColor = 'primary';
37
+ editorToolbarId = 'editor-toolbar';
38
+ layoutToolbarExternal;
39
+ layoutPrimaryActionExternal;
40
+ layoutActionsExternal;
41
+ layoutInfoBoxesExternal;
42
+ layoutRightExternal;
43
+ closeButtonClicked = new EventEmitter();
44
+ backButtonClicked = new EventEmitter();
45
+ sideFilterClosed = new EventEmitter();
46
+ sideFilterOpened = new EventEmitter();
47
+ layoutToolbarContent;
48
+ layoutPrimaryActionContent;
49
+ layoutActionsContent;
50
+ layoutInfoBoxesContent;
51
+ layoutRightContent;
52
+ sideFilter;
53
+ intl = inject(NgxLayoutIntl, { optional: true });
54
+ mediaService = inject(NgxMediaService);
55
+ sidenavService = inject(NgxSidenavService);
56
+ elementRef = inject(ElementRef);
57
+ get layoutToolbar() {
58
+ return this.layoutToolbarExternal ?? this.layoutToolbarContent;
59
+ }
60
+ get layoutPrimaryAction() {
61
+ return this.layoutPrimaryActionExternal ?? this.layoutPrimaryActionContent;
62
+ }
63
+ get layoutActions() {
64
+ return this.layoutActionsExternal ?? this.layoutActionsContent;
65
+ }
66
+ get layoutInfoBoxes() {
67
+ return this.layoutInfoBoxesExternal ?? this.layoutInfoBoxesContent;
68
+ }
69
+ get layoutRight() {
70
+ const value = this.layoutRightExternal ?? this.layoutRightContent;
71
+ if (!value) {
72
+ this.elementRef.nativeElement.setAttribute('no-right', 'true');
73
+ }
74
+ else {
75
+ this.elementRef.nativeElement.removeAttribute('no-right');
76
+ }
77
+ return value;
78
+ }
79
+ _withSidenav = false;
80
+ set withSidenav(value) {
81
+ this._withSidenav = coerceBooleanProperty(value);
82
+ }
83
+ get withSidenav() {
84
+ return this._withSidenav;
85
+ }
86
+ _keepFilterButtonDisplayed = true;
87
+ set keepFilterButtonDisplayed(value) {
88
+ this._keepFilterButtonDisplayed = coerceBooleanProperty(value);
89
+ }
90
+ get keepFilterButtonDisplayed() {
91
+ return this._keepFilterButtonDisplayed;
92
+ }
93
+ _withCloseButton = false;
94
+ set withCloseButton(value) {
95
+ this._withCloseButton = coerceBooleanProperty(value);
96
+ }
97
+ get withCloseButton() {
98
+ return this._withCloseButton;
99
+ }
100
+ _withBackButton = false;
101
+ set withBackButton(value) {
102
+ this._withBackButton = coerceBooleanProperty(value);
103
+ }
104
+ get withBackButton() {
105
+ return this._withBackButton;
106
+ }
107
+ closeSideFilter() {
108
+ void this.sideFilter?.close();
109
+ }
110
+ openSideFilter() {
111
+ void this.sideFilter?.open();
112
+ }
113
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.6", ngImport: i0, type: NgxLayoutComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
114
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.1.6", type: NgxLayoutComponent, isStandalone: true, selector: "ngx-layout", inputs: { toolbarColor: "toolbarColor", editorToolbarId: "editorToolbarId", layoutToolbarExternal: "layoutToolbarExternal", layoutPrimaryActionExternal: "layoutPrimaryActionExternal", layoutActionsExternal: "layoutActionsExternal", layoutInfoBoxesExternal: "layoutInfoBoxesExternal", layoutRightExternal: "layoutRightExternal", withSidenav: "withSidenav", keepFilterButtonDisplayed: "keepFilterButtonDisplayed", withCloseButton: "withCloseButton", withBackButton: "withBackButton" }, outputs: { closeButtonClicked: "closeButtonClicked", backButtonClicked: "backButtonClicked", sideFilterClosed: "sideFilterClosed", sideFilterOpened: "sideFilterOpened" }, 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 @if (\n layoutPrimaryAction && !((layoutActions || layoutInfoBoxes) && (mediaService.isHandset$ | async) === false)\n ) {\n <span class=\"primary-action-container\" [class.bottom]=\"mediaService.isHandset$ | async\">\n <ng-template [ngTemplateOutlet]=\"layoutPrimaryAction\"></ng-template>\n </span>\n }\n <ng-content></ng-content>\n </div>\n @if ((mediaService.isHandset$ | async) && actionsToolbar) {\n <ng-container *ngTemplateOutlet=\"actionsToolbar\"></ng-container>\n }\n</ng-template>\n\n<ng-template #actionsToolbar>\n <mat-toolbar\n id=\"actions-toolbar\"\n class=\"actions\"\n [color]=\"toolbarColor\"\n [class.bottom]=\"mediaService.isHandset$ | async\">\n @if (layoutPrimaryAction && (layoutActions || layoutInfoBoxes) && (mediaService.isHandset$ | async) === false) {\n <span class=\"primary-action-container\">\n <ng-template [ngTemplateOutlet]=\"layoutPrimaryAction\"></ng-template>\n </span>\n }\n @if (layoutActions) {\n <ng-template [ngTemplateOutlet]=\"layoutActions\"></ng-template>\n }\n @if (layoutInfoBoxes && (mediaService.isHandset$ | async) === false) {\n <div class=\"info-boxes-container\">\n <ng-template [ngTemplateOutlet]=\"layoutInfoBoxes\"></ng-template>\n </div>\n }\n </mat-toolbar>\n</ng-template>\n\n<ng-template #filter>\n @if (layoutToolbar || layoutRight) {\n <mat-toolbar id=\"toolbar\" [color]=\"toolbarColor\">\n @if (withSidenav && (mediaService.isHandset$ | async) && (sidenavService.openChanged$ | async) === false) {\n <button type=\"button\" id=\"sidenav-button\" mat-icon-button (click)=\"sidenavService.toggle()\">\n <mat-icon>menu</mat-icon>\n </button>\n }\n @if (withBackButton) {\n <button\n type=\"button\"\n id=\"back-button\"\n mat-icon-button\n (click)=\"this.backButtonClicked.emit($event)\"\n [matTooltip]=\"intl?.backLabel ?? 'Back'\">\n <mat-icon>arrow_back</mat-icon>\n </button>\n }\n <div id=\"toolbar-content-container\">\n @if (layoutToolbar) {\n <ng-template [ngTemplateOutlet]=\"layoutToolbar\"></ng-template>\n }\n </div>\n @if (sideFilter && (keepFilterButtonDisplayed || (mediaService.isHandset$ | async)) && layoutRight) {\n <button\n type=\"button\"\n id=\"filter-button\"\n mat-icon-button\n (click)=\"sideFilter.toggle()\"\n [matTooltip]=\"intl?.sideFilterLabel ?? 'Show/Hide filters'\">\n <mat-icon>tune</mat-icon>\n </button>\n }\n @if (withCloseButton) {\n <button\n type=\"button\"\n id=\"close-button\"\n mat-icon-button\n (click)=\"this.closeButtonClicked.emit($event)\"\n [matTooltip]=\"intl?.closeLabel ?? 'Close'\">\n <mat-icon>close</mat-icon>\n </button>\n }\n </mat-toolbar>\n }\n\n @if ((layoutActions || layoutInfoBoxes) && (mediaService.isHandset$ | async) === false) {\n <ng-container *ngTemplateOutlet=\"actionsToolbar\"></ng-container>\n }\n @if (layoutRight) {\n <mat-drawer-container autosize=\"true\">\n <mat-drawer-content>\n <ng-container *ngTemplateOutlet=\"content\"></ng-container>\n </mat-drawer-content>\n <mat-drawer\n id=\"side-filter\"\n #sideFilter\n (closed)=\"sideFilterClosed.emit()\"\n (openedChange)=\"sideFilterOpened.emit()\"\n class=\"right\"\n position=\"end\"\n [attr.role]=\"(mediaService.isHandset$ | async) ? 'dialog' : 'navigation'\"\n [mode]=\"(mediaService.isHandset$ | async) ? 'over' : 'side'\"\n [opened]=\"(mediaService.isHandset$ | async) === false\">\n <ng-template [ngTemplateOutlet]=\"layoutRight\"></ng-template>\n </mat-drawer>\n </mat-drawer-container>\n } @else {\n <ng-container *ngTemplateOutlet=\"content\"></ng-container>\n }\n</ng-template>\n", styles: ["ngx-layout{display:flex;flex-direction:column;position:absolute;inset:0}ngx-layout.no-left[no-right=true] .main-content{padding:0}ngx-layout mat-sidenav-container{position:absolute;inset:0}ngx-layout mat-drawer-content,ngx-layout mat-sidenav-content{display:flex!important;flex-direction:column}ngx-layout mat-sidenav{width:200px}ngx-layout mat-drawer#side-filter{width:220px}ngx-layout mat-drawer#side-filter.right{padding:.3rem}ngx-layout mat-drawer#side-filter.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}ngx-layout mat-drawer#side-filter.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}ngx-layout mat-drawer#side-filter.right [icons-container]{display:flex;align-items:center}ngx-layout mat-drawer#side-filter.right [filters-icon]{cursor:pointer;transition:color .3s ease-in-out}ngx-layout mat-drawer#side-filter.right [filters-chip-list] mat-chip-listbox{margin:0;max-height:20vh;overflow-y:auto}ngx-layout mat-drawer#side-filter.right [filters-chip-list] .mat-mdc-chip{position:relative;padding:.5rem;margin:.1rem;font-size:.75rem;transition:.3s ease-in-out}ngx-layout mat-drawer#side-filter.right [filters-chip-list] .mat-mdc-chip:not([disabled]){cursor:pointer}ngx-layout mat-drawer#side-filter.right [filters-chip-list] .mat-mdc-chip:not([disabled]):hover:before{font-family:Material Icons;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}ngx-layout mat-drawer#side-filter.right [filters-toggle-group]{display:flex}ngx-layout mat-drawer#side-filter.right [filters-toggle-group] .mat-button-toggle{transition:.3s ease-in-out}ngx-layout mat-drawer#side-filter.right [filters-toggle-group] .mat-button-toggle mat-icon{margin-right:1rem}ngx-layout mat-drawer#side-filter.right [filters-toggle-group] .mat-button-toggle .mat-button-toggle-label-content{text-align:start}ngx-layout mat-drawer#side-filter.right [filters-toggle-group] .mat-button-toggle .mat-button-toggle-focus-overlay{height:100%}ngx-layout mat-drawer#side-filter.right mat-form-field{width:100%}ngx-layout mat-drawer#side-filter.right .mat-mdc-form-field-infix{width:inherit}ngx-layout mat-drawer#side-filter.right.mat-drawer-side{box-shadow:-3px 0 5px -1px #0003;z-index:10}ngx-layout mat-drawer-container{flex:1}ngx-layout .mat-toolbar:not(.actions){display:flex;flex-shrink:0;box-shadow:0 3px 5px -1px #0003,0 6px 10px #00000024,0 1px 18px #0000001f;z-index:10}ngx-layout .mat-toolbar:not(.actions) #toolbar-content-container{display:flex;flex-grow:1;overflow:hidden}ngx-layout .mat-toolbar:not(.actions) [toolbar-title]{overflow:hidden;text-overflow:ellipsis}ngx-layout .mat-toolbar:not(.actions)>div{display:flex;align-items:center}ngx-layout .mat-toolbar .mat-mdc-icon-button{height:40px;line-height:40px;width:40px;display:flex;justify-content:center;align-items:center;padding:0}ngx-layout .mat-toolbar#actions-toolbar{flex:0 0 auto;height:40px;font-size:inherit;padding-right:0}ngx-layout .mat-toolbar#actions-toolbar .info-boxes-container{display:flex;flex:1 1 auto;justify-content:flex-end}ngx-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}ngx-layout .mat-toolbar#actions-toolbar.bottom#actions-toolbar{display:flex;width:100%;justify-content:space-around}ngx-layout .mat-toolbar#actions-toolbar .primary-action-container{z-index:20}ngx-layout .main-content{position:relative;display:flex;flex:1 1 auto;overflow:hidden}ngx-layout .main-content .primary-action-container{position:absolute;z-index:20;opacity:.8;transition:.3s ease-in-out}ngx-layout .main-content .primary-action-container:hover{opacity:1}ngx-layout .main-content .primary-action-container.bottom{right:1rem;bottom:1rem}ngx-layout .main-content .primary-action-container:not(.bottom){top:1rem;left:1rem}ngx-layout ::-webkit-scrollbar{width:12px;height:12px}ngx-layout ::-webkit-scrollbar-thumb{transition:.3s ease-in-out;border-radius:6px}\n"], dependencies: [{ kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: MatIconButton, selector: "button[mat-icon-button], a[mat-icon-button], button[matIconButton], a[matIconButton]", exportAs: ["matButton", "matAnchor"] }, { kind: "component", type: MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: MatDrawer, selector: "mat-drawer", inputs: ["position", "mode", "disableClose", "autoFocus", "opened"], outputs: ["openedChange", "opened", "openedStart", "closed", "closedStart", "positionChanged"], exportAs: ["matDrawer"] }, { kind: "component", type: MatDrawerContainer, selector: "mat-drawer-container", inputs: ["autosize", "hasBackdrop"], outputs: ["backdropClick"], exportAs: ["matDrawerContainer"] }, { kind: "component", type: MatDrawerContent, selector: "mat-drawer-content" }, { kind: "component", type: MatToolbar, selector: "mat-toolbar", inputs: ["color"], exportAs: ["matToolbar"] }, { kind: "directive", type: MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "pipe", type: AsyncPipe, name: "async" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
115
+ }
116
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.6", ngImport: i0, type: NgxLayoutComponent, decorators: [{
117
+ type: Component,
118
+ args: [{ selector: 'ngx-layout', encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, imports: [
119
+ NgTemplateOutlet,
120
+ AsyncPipe,
121
+ MatIconButton,
122
+ MatIcon,
123
+ MatDrawer,
124
+ MatDrawerContainer,
125
+ MatDrawerContent,
126
+ MatToolbar,
127
+ MatTooltip
128
+ ], template: "<ng-container *ngTemplateOutlet=\"filter\"></ng-container>\n\n<ng-template #content>\n <div class=\"main-content\">\n @if (\n layoutPrimaryAction && !((layoutActions || layoutInfoBoxes) && (mediaService.isHandset$ | async) === false)\n ) {\n <span class=\"primary-action-container\" [class.bottom]=\"mediaService.isHandset$ | async\">\n <ng-template [ngTemplateOutlet]=\"layoutPrimaryAction\"></ng-template>\n </span>\n }\n <ng-content></ng-content>\n </div>\n @if ((mediaService.isHandset$ | async) && actionsToolbar) {\n <ng-container *ngTemplateOutlet=\"actionsToolbar\"></ng-container>\n }\n</ng-template>\n\n<ng-template #actionsToolbar>\n <mat-toolbar\n id=\"actions-toolbar\"\n class=\"actions\"\n [color]=\"toolbarColor\"\n [class.bottom]=\"mediaService.isHandset$ | async\">\n @if (layoutPrimaryAction && (layoutActions || layoutInfoBoxes) && (mediaService.isHandset$ | async) === false) {\n <span class=\"primary-action-container\">\n <ng-template [ngTemplateOutlet]=\"layoutPrimaryAction\"></ng-template>\n </span>\n }\n @if (layoutActions) {\n <ng-template [ngTemplateOutlet]=\"layoutActions\"></ng-template>\n }\n @if (layoutInfoBoxes && (mediaService.isHandset$ | async) === false) {\n <div class=\"info-boxes-container\">\n <ng-template [ngTemplateOutlet]=\"layoutInfoBoxes\"></ng-template>\n </div>\n }\n </mat-toolbar>\n</ng-template>\n\n<ng-template #filter>\n @if (layoutToolbar || layoutRight) {\n <mat-toolbar id=\"toolbar\" [color]=\"toolbarColor\">\n @if (withSidenav && (mediaService.isHandset$ | async) && (sidenavService.openChanged$ | async) === false) {\n <button type=\"button\" id=\"sidenav-button\" mat-icon-button (click)=\"sidenavService.toggle()\">\n <mat-icon>menu</mat-icon>\n </button>\n }\n @if (withBackButton) {\n <button\n type=\"button\"\n id=\"back-button\"\n mat-icon-button\n (click)=\"this.backButtonClicked.emit($event)\"\n [matTooltip]=\"intl?.backLabel ?? 'Back'\">\n <mat-icon>arrow_back</mat-icon>\n </button>\n }\n <div id=\"toolbar-content-container\">\n @if (layoutToolbar) {\n <ng-template [ngTemplateOutlet]=\"layoutToolbar\"></ng-template>\n }\n </div>\n @if (sideFilter && (keepFilterButtonDisplayed || (mediaService.isHandset$ | async)) && layoutRight) {\n <button\n type=\"button\"\n id=\"filter-button\"\n mat-icon-button\n (click)=\"sideFilter.toggle()\"\n [matTooltip]=\"intl?.sideFilterLabel ?? 'Show/Hide filters'\">\n <mat-icon>tune</mat-icon>\n </button>\n }\n @if (withCloseButton) {\n <button\n type=\"button\"\n id=\"close-button\"\n mat-icon-button\n (click)=\"this.closeButtonClicked.emit($event)\"\n [matTooltip]=\"intl?.closeLabel ?? 'Close'\">\n <mat-icon>close</mat-icon>\n </button>\n }\n </mat-toolbar>\n }\n\n @if ((layoutActions || layoutInfoBoxes) && (mediaService.isHandset$ | async) === false) {\n <ng-container *ngTemplateOutlet=\"actionsToolbar\"></ng-container>\n }\n @if (layoutRight) {\n <mat-drawer-container autosize=\"true\">\n <mat-drawer-content>\n <ng-container *ngTemplateOutlet=\"content\"></ng-container>\n </mat-drawer-content>\n <mat-drawer\n id=\"side-filter\"\n #sideFilter\n (closed)=\"sideFilterClosed.emit()\"\n (openedChange)=\"sideFilterOpened.emit()\"\n class=\"right\"\n position=\"end\"\n [attr.role]=\"(mediaService.isHandset$ | async) ? 'dialog' : 'navigation'\"\n [mode]=\"(mediaService.isHandset$ | async) ? 'over' : 'side'\"\n [opened]=\"(mediaService.isHandset$ | async) === false\">\n <ng-template [ngTemplateOutlet]=\"layoutRight\"></ng-template>\n </mat-drawer>\n </mat-drawer-container>\n } @else {\n <ng-container *ngTemplateOutlet=\"content\"></ng-container>\n }\n</ng-template>\n", styles: ["ngx-layout{display:flex;flex-direction:column;position:absolute;inset:0}ngx-layout.no-left[no-right=true] .main-content{padding:0}ngx-layout mat-sidenav-container{position:absolute;inset:0}ngx-layout mat-drawer-content,ngx-layout mat-sidenav-content{display:flex!important;flex-direction:column}ngx-layout mat-sidenav{width:200px}ngx-layout mat-drawer#side-filter{width:220px}ngx-layout mat-drawer#side-filter.right{padding:.3rem}ngx-layout mat-drawer#side-filter.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}ngx-layout mat-drawer#side-filter.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}ngx-layout mat-drawer#side-filter.right [icons-container]{display:flex;align-items:center}ngx-layout mat-drawer#side-filter.right [filters-icon]{cursor:pointer;transition:color .3s ease-in-out}ngx-layout mat-drawer#side-filter.right [filters-chip-list] mat-chip-listbox{margin:0;max-height:20vh;overflow-y:auto}ngx-layout mat-drawer#side-filter.right [filters-chip-list] .mat-mdc-chip{position:relative;padding:.5rem;margin:.1rem;font-size:.75rem;transition:.3s ease-in-out}ngx-layout mat-drawer#side-filter.right [filters-chip-list] .mat-mdc-chip:not([disabled]){cursor:pointer}ngx-layout mat-drawer#side-filter.right [filters-chip-list] .mat-mdc-chip:not([disabled]):hover:before{font-family:Material Icons;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}ngx-layout mat-drawer#side-filter.right [filters-toggle-group]{display:flex}ngx-layout mat-drawer#side-filter.right [filters-toggle-group] .mat-button-toggle{transition:.3s ease-in-out}ngx-layout mat-drawer#side-filter.right [filters-toggle-group] .mat-button-toggle mat-icon{margin-right:1rem}ngx-layout mat-drawer#side-filter.right [filters-toggle-group] .mat-button-toggle .mat-button-toggle-label-content{text-align:start}ngx-layout mat-drawer#side-filter.right [filters-toggle-group] .mat-button-toggle .mat-button-toggle-focus-overlay{height:100%}ngx-layout mat-drawer#side-filter.right mat-form-field{width:100%}ngx-layout mat-drawer#side-filter.right .mat-mdc-form-field-infix{width:inherit}ngx-layout mat-drawer#side-filter.right.mat-drawer-side{box-shadow:-3px 0 5px -1px #0003;z-index:10}ngx-layout mat-drawer-container{flex:1}ngx-layout .mat-toolbar:not(.actions){display:flex;flex-shrink:0;box-shadow:0 3px 5px -1px #0003,0 6px 10px #00000024,0 1px 18px #0000001f;z-index:10}ngx-layout .mat-toolbar:not(.actions) #toolbar-content-container{display:flex;flex-grow:1;overflow:hidden}ngx-layout .mat-toolbar:not(.actions) [toolbar-title]{overflow:hidden;text-overflow:ellipsis}ngx-layout .mat-toolbar:not(.actions)>div{display:flex;align-items:center}ngx-layout .mat-toolbar .mat-mdc-icon-button{height:40px;line-height:40px;width:40px;display:flex;justify-content:center;align-items:center;padding:0}ngx-layout .mat-toolbar#actions-toolbar{flex:0 0 auto;height:40px;font-size:inherit;padding-right:0}ngx-layout .mat-toolbar#actions-toolbar .info-boxes-container{display:flex;flex:1 1 auto;justify-content:flex-end}ngx-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}ngx-layout .mat-toolbar#actions-toolbar.bottom#actions-toolbar{display:flex;width:100%;justify-content:space-around}ngx-layout .mat-toolbar#actions-toolbar .primary-action-container{z-index:20}ngx-layout .main-content{position:relative;display:flex;flex:1 1 auto;overflow:hidden}ngx-layout .main-content .primary-action-container{position:absolute;z-index:20;opacity:.8;transition:.3s ease-in-out}ngx-layout .main-content .primary-action-container:hover{opacity:1}ngx-layout .main-content .primary-action-container.bottom{right:1rem;bottom:1rem}ngx-layout .main-content .primary-action-container:not(.bottom){top:1rem;left:1rem}ngx-layout ::-webkit-scrollbar{width:12px;height:12px}ngx-layout ::-webkit-scrollbar-thumb{transition:.3s ease-in-out;border-radius:6px}\n"] }]
129
+ }], propDecorators: { toolbarColor: [{
130
+ type: Input
131
+ }], editorToolbarId: [{
132
+ type: Input
133
+ }], layoutToolbarExternal: [{
134
+ type: Input
135
+ }], layoutPrimaryActionExternal: [{
136
+ type: Input
137
+ }], layoutActionsExternal: [{
138
+ type: Input
139
+ }], layoutInfoBoxesExternal: [{
140
+ type: Input
141
+ }], layoutRightExternal: [{
142
+ type: Input
143
+ }], closeButtonClicked: [{
144
+ type: Output
145
+ }], backButtonClicked: [{
146
+ type: Output
147
+ }], sideFilterClosed: [{
148
+ type: Output
149
+ }], sideFilterOpened: [{
150
+ type: Output
151
+ }], layoutToolbarContent: [{
152
+ type: ContentChild,
153
+ args: ['layoutToolbar']
154
+ }], layoutPrimaryActionContent: [{
155
+ type: ContentChild,
156
+ args: ['layoutPrimaryAction']
157
+ }], layoutActionsContent: [{
158
+ type: ContentChild,
159
+ args: ['layoutActions']
160
+ }], layoutInfoBoxesContent: [{
161
+ type: ContentChild,
162
+ args: ['layoutInfoBoxes']
163
+ }], layoutRightContent: [{
164
+ type: ContentChild,
165
+ args: ['layoutRight']
166
+ }], sideFilter: [{
167
+ type: ViewChild,
168
+ args: ['sideFilter']
169
+ }], withSidenav: [{
170
+ type: Input
171
+ }], keepFilterButtonDisplayed: [{
172
+ type: Input
173
+ }], withCloseButton: [{
174
+ type: Input
175
+ }], withBackButton: [{
176
+ type: Input
177
+ }] } });
178
+
179
+ /**
180
+ * Generated bundle index. Do not edit.
181
+ */
182
+
183
+ export { NgxLayoutComponent, NgxLayoutIntl, provideNgxLayout };
184
+ //# sourceMappingURL=hug-ngx-layout-m2.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hug-ngx-layout-m2.mjs","sources":["../../../projects/layout/m2/providers/ngx-layout-intl.ts","../../../projects/layout/m2/providers/index.ts","../../../projects/layout/m2/layout.component.ts","../../../projects/layout/m2/layout.component.html","../../../projects/layout/m2/hug-ngx-layout-m2.ts"],"sourcesContent":["import { Injectable } from '@angular/core';\nimport { NgxAbstractIntl } from '@hug/ngx-core';\n\n/**\n * Data for internationalization\n */\n@Injectable()\nexport class NgxLayoutIntl extends NgxAbstractIntl<NgxLayoutIntl> {\n\n public closeLabel = '';\n public backLabel = '';\n public sideFilterLabel = '';\n}\n","import type { EnvironmentProviders } from '@angular/core';\nimport { type NgxOptionsIntl, provideNgxIntl } from '@hug/ngx-core';\n\nimport { NgxLayoutIntl } from './ngx-layout-intl';\n\nexport * from './ngx-layout-intl';\n\n/**\n * Provide the component to the application level.\n * @param options - The component's providing options.\n * @param options.translationsPath - The path to the translations files (default: `translations/ngx-layout`).\n * @param options.customIntl - A custom internationalization class to inject.\n */\nexport const provideNgxLayout = (options?: NgxOptionsIntl<NgxLayoutIntl>): EnvironmentProviders =>\n provideNgxIntl(\n NgxLayoutIntl,\n options?.translationsPath ?? 'translations/ngx-layout',\n options?.customIntl ?? NgxLayoutIntl\n );\n","import { BooleanInput, coerceBooleanProperty } from '@angular/cdk/coercion';\nimport { AsyncPipe, NgTemplateOutlet } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, ContentChild, ElementRef, EventEmitter, inject, Input, Output, TemplateRef, ViewChild, ViewEncapsulation } from '@angular/core';\nimport { MatIconButton } from '@angular/material/button';\nimport { MatIcon } from '@angular/material/icon';\nimport { MatDrawer, MatDrawerContainer, MatDrawerContent } from '@angular/material/sidenav';\nimport { MatToolbar } from '@angular/material/toolbar';\nimport { MatTooltip } from '@angular/material/tooltip';\nimport { NgxMediaService } from '@hug/ngx-core';\nimport { NgxSidenavService } from '@hug/ngx-sidenav/m2';\n\nimport { NgxLayoutIntl } from './providers';\n\n@Component({\n selector: 'ngx-layout',\n templateUrl: './layout.component.html',\n styleUrls: ['./layout.component.scss'],\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [\n NgTemplateOutlet,\n AsyncPipe,\n MatIconButton,\n MatIcon,\n MatDrawer,\n MatDrawerContainer,\n MatDrawerContent,\n MatToolbar,\n MatTooltip\n ]\n})\nexport class NgxLayoutComponent {\n @Input() public toolbarColor = 'primary';\n @Input() public editorToolbarId = 'editor-toolbar';\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 @ViewChild('sideFilter') protected sideFilter?: MatDrawer;\n\n protected readonly intl = inject(NgxLayoutIntl, { optional: true });\n protected readonly mediaService = inject(NgxMediaService);\n protected readonly sidenavService = inject(NgxSidenavService);\n protected readonly elementRef = inject<ElementRef<HTMLElement>>(ElementRef);\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 if (!value) {\n this.elementRef.nativeElement.setAttribute('no-right', 'true');\n } else {\n this.elementRef.nativeElement.removeAttribute('no-right');\n }\n return value;\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\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\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 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 @if (\n layoutPrimaryAction && !((layoutActions || layoutInfoBoxes) && (mediaService.isHandset$ | async) === false)\n ) {\n <span class=\"primary-action-container\" [class.bottom]=\"mediaService.isHandset$ | async\">\n <ng-template [ngTemplateOutlet]=\"layoutPrimaryAction\"></ng-template>\n </span>\n }\n <ng-content></ng-content>\n </div>\n @if ((mediaService.isHandset$ | async) && actionsToolbar) {\n <ng-container *ngTemplateOutlet=\"actionsToolbar\"></ng-container>\n }\n</ng-template>\n\n<ng-template #actionsToolbar>\n <mat-toolbar\n id=\"actions-toolbar\"\n class=\"actions\"\n [color]=\"toolbarColor\"\n [class.bottom]=\"mediaService.isHandset$ | async\">\n @if (layoutPrimaryAction && (layoutActions || layoutInfoBoxes) && (mediaService.isHandset$ | async) === false) {\n <span class=\"primary-action-container\">\n <ng-template [ngTemplateOutlet]=\"layoutPrimaryAction\"></ng-template>\n </span>\n }\n @if (layoutActions) {\n <ng-template [ngTemplateOutlet]=\"layoutActions\"></ng-template>\n }\n @if (layoutInfoBoxes && (mediaService.isHandset$ | async) === false) {\n <div class=\"info-boxes-container\">\n <ng-template [ngTemplateOutlet]=\"layoutInfoBoxes\"></ng-template>\n </div>\n }\n </mat-toolbar>\n</ng-template>\n\n<ng-template #filter>\n @if (layoutToolbar || layoutRight) {\n <mat-toolbar id=\"toolbar\" [color]=\"toolbarColor\">\n @if (withSidenav && (mediaService.isHandset$ | async) && (sidenavService.openChanged$ | async) === false) {\n <button type=\"button\" id=\"sidenav-button\" mat-icon-button (click)=\"sidenavService.toggle()\">\n <mat-icon>menu</mat-icon>\n </button>\n }\n @if (withBackButton) {\n <button\n type=\"button\"\n id=\"back-button\"\n mat-icon-button\n (click)=\"this.backButtonClicked.emit($event)\"\n [matTooltip]=\"intl?.backLabel ?? 'Back'\">\n <mat-icon>arrow_back</mat-icon>\n </button>\n }\n <div id=\"toolbar-content-container\">\n @if (layoutToolbar) {\n <ng-template [ngTemplateOutlet]=\"layoutToolbar\"></ng-template>\n }\n </div>\n @if (sideFilter && (keepFilterButtonDisplayed || (mediaService.isHandset$ | async)) && layoutRight) {\n <button\n type=\"button\"\n id=\"filter-button\"\n mat-icon-button\n (click)=\"sideFilter.toggle()\"\n [matTooltip]=\"intl?.sideFilterLabel ?? 'Show/Hide filters'\">\n <mat-icon>tune</mat-icon>\n </button>\n }\n @if (withCloseButton) {\n <button\n type=\"button\"\n id=\"close-button\"\n mat-icon-button\n (click)=\"this.closeButtonClicked.emit($event)\"\n [matTooltip]=\"intl?.closeLabel ?? 'Close'\">\n <mat-icon>close</mat-icon>\n </button>\n }\n </mat-toolbar>\n }\n\n @if ((layoutActions || layoutInfoBoxes) && (mediaService.isHandset$ | async) === false) {\n <ng-container *ngTemplateOutlet=\"actionsToolbar\"></ng-container>\n }\n @if (layoutRight) {\n <mat-drawer-container autosize=\"true\">\n <mat-drawer-content>\n <ng-container *ngTemplateOutlet=\"content\"></ng-container>\n </mat-drawer-content>\n <mat-drawer\n id=\"side-filter\"\n #sideFilter\n (closed)=\"sideFilterClosed.emit()\"\n (openedChange)=\"sideFilterOpened.emit()\"\n class=\"right\"\n position=\"end\"\n [attr.role]=\"(mediaService.isHandset$ | async) ? 'dialog' : 'navigation'\"\n [mode]=\"(mediaService.isHandset$ | async) ? 'over' : 'side'\"\n [opened]=\"(mediaService.isHandset$ | async) === false\">\n <ng-template [ngTemplateOutlet]=\"layoutRight\"></ng-template>\n </mat-drawer>\n </mat-drawer-container>\n } @else {\n <ng-container *ngTemplateOutlet=\"content\"></ng-container>\n }\n</ng-template>\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}