@hug/ngx-layout 22.0.0-alpha.3 → 22.0.0-alpha.4

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,13 @@
1
+ ## 22.0.0-alpha.4 (2026-03-24)
2
+
3
+ ### 🐛 Fixes
4
+
5
+ - **layout:** add exports for column-bar and panel-bar #DESIGNSYS-104 ([0fa772b](https://github.com/DSI-HUG/ngx-components/commit/0fa772b))
6
+
7
+ ### ❤️ Thank You
8
+
9
+ - Esther Layat
10
+
1
11
  ## 22.0.0-alpha.3 (2026-03-20)
2
12
 
3
13
  ### 🚀 Features
@@ -151,7 +151,7 @@ class NgxAppBarComponent {
151
151
  title = input.required(...(ngDevMode ? [{ debugName: "title" }] : []));
152
152
  subtitle = input(...(ngDevMode ? [undefined, { debugName: "subtitle" }] : []));
153
153
  helpUrl = input(...(ngDevMode ? [undefined, { debugName: "helpUrl" }] : []));
154
- withBackIcon = input(false, ...(ngDevMode ? [{ debugName: "withBackIcon" }] : []));
154
+ withBackButton = input(false, ...(ngDevMode ? [{ debugName: "withBackButton" }] : []));
155
155
  goBack = output();
156
156
  intl = inject(NgxLayoutIntl, { optional: true });
157
157
  helpPopup;
@@ -171,15 +171,15 @@ class NgxAppBarComponent {
171
171
  this.goBack.emit();
172
172
  }
173
173
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.1", ngImport: i0, type: NgxAppBarComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
174
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.1.1", type: NgxAppBarComponent, isStandalone: true, selector: "ngx-app-bar", inputs: { mode: { classPropertyName: "mode", publicName: "mode", isSignal: true, isRequired: false, transformFunction: null }, title: { classPropertyName: "title", publicName: "title", isSignal: true, isRequired: true, transformFunction: null }, subtitle: { classPropertyName: "subtitle", publicName: "subtitle", isSignal: true, isRequired: false, transformFunction: null }, helpUrl: { classPropertyName: "helpUrl", publicName: "helpUrl", isSignal: true, isRequired: false, transformFunction: null }, withBackIcon: { classPropertyName: "withBackIcon", publicName: "withBackIcon", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { goBack: "goBack" }, host: { properties: { "class.condensed": "mode()===\"condensed\"" } }, ngImport: i0, template: "@if (withBackIcon()) {\n <button matIconButton matTooltip=\"{{ intl?.back ?? 'Back' }}\" (click)=\"triggerGoBack()\">\n <mat-icon>arrow_back</mat-icon>\n </button>\n}\n\n<header class=\"{{ mode() }}\">\n <h1 class=\"title\">{{ title() }}</h1>\n @if (subtitle()) {\n @if (mode() === 'condensed') {\n <mat-icon>chevron_right</mat-icon>\n }\n <h2 class=\"subtitle\">{{ subtitle() }}</h2>\n }\n</header>\n\n<section class=\"actions\">\n <ng-content />\n @if (helpUrl()) {\n <button matIconButton matTooltip=\"{{ intl?.help ?? 'Help' }}\" (click)=\"openHelp()\">\n <mat-icon>help</mat-icon>\n </button>\n }\n</section>\n", styles: ["ngx-app-bar{display:flex;flex-direction:row;align-items:center;min-height:var(--ngx-app-bar-min-height, 3.5rem);box-sizing:border-box;gap:var(--ngx-app-bar-gap, .25rem)}ngx-app-bar:has(.subtitle):has(:not(.condensed)){padding-block:var(--ngx-app-bar-with-subtitle-padding-block, .25rem)}ngx-app-bar header{color:var(--mat-sys-on-surface-variant)}ngx-app-bar header.condensed{display:flex;flex-direction:row;align-items:center;gap:var(--ngx-app-bar-condensed-gap, .5rem)}ngx-app-bar header.condensed mat-icon{color:var(--mat-sys-outline)}ngx-app-bar header .title,ngx-app-bar header .subtitle{margin:0;white-space:nowrap}ngx-app-bar header .title{font:var(--ngx-app-bar-title-font, var(--mat-sys-headline-medium));letter-spacing:var(--ngx-app-bar-title-letter-spacing, var(--mat-sys-headline-medium-tracking))}ngx-app-bar header .subtitle{font:var(--ngx-app-bar-subtitle-font, var(--mat-sys-headline-small));letter-spacing:var(--ngx-app-bar-subtitle-letter-spacing, var(--mat-sys-headline-small-tracking))}ngx-app-bar .actions{display:flex;justify-content:flex-end;flex-grow:1;gap:var(--ngx-app-bar-actions-gap, .5rem)}\n"], dependencies: [{ kind: "component", type: MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: MatIconButton, selector: "button[mat-icon-button], a[mat-icon-button], button[matIconButton], a[matIconButton]", exportAs: ["matButton", "matAnchor"] }, { kind: "directive", type: MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
174
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.1.1", type: NgxAppBarComponent, isStandalone: true, selector: "ngx-app-bar", inputs: { mode: { classPropertyName: "mode", publicName: "mode", isSignal: true, isRequired: false, transformFunction: null }, title: { classPropertyName: "title", publicName: "title", isSignal: true, isRequired: true, transformFunction: null }, subtitle: { classPropertyName: "subtitle", publicName: "subtitle", isSignal: true, isRequired: false, transformFunction: null }, helpUrl: { classPropertyName: "helpUrl", publicName: "helpUrl", isSignal: true, isRequired: false, transformFunction: null }, withBackButton: { classPropertyName: "withBackButton", publicName: "withBackButton", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { goBack: "goBack" }, host: { properties: { "class.condensed": "mode()===\"condensed\"" } }, ngImport: i0, template: "@if (withBackButton()) {\n <button matIconButton matTooltip=\"{{ intl?.back ?? 'Back' }}\" (click)=\"triggerGoBack()\">\n <mat-icon>arrow_back</mat-icon>\n </button>\n}\n\n<header class=\"{{ mode() }}\">\n <h1 class=\"title\">{{ title() }}</h1>\n @if (subtitle()) {\n @if (mode() === 'condensed') {\n <mat-icon>chevron_right</mat-icon>\n }\n <h2 class=\"subtitle\">{{ subtitle() }}</h2>\n }\n</header>\n\n<section class=\"actions\">\n <ng-content />\n @if (helpUrl()) {\n <button matIconButton matTooltip=\"{{ intl?.help ?? 'Help' }}\" (click)=\"openHelp()\">\n <mat-icon>help</mat-icon>\n </button>\n }\n</section>\n", styles: ["ngx-app-bar{display:flex;flex-direction:row;align-items:center;min-height:var(--ngx-app-bar-min-height, 3.5rem);box-sizing:border-box;gap:var(--ngx-app-bar-gap, .25rem)}ngx-app-bar:has(.subtitle):has(:not(.condensed)){padding-block:var(--ngx-app-bar-with-subtitle-padding-block, .25rem)}ngx-app-bar header{color:var(--mat-sys-on-surface-variant)}ngx-app-bar header.condensed{display:flex;flex-direction:row;align-items:center;gap:var(--ngx-app-bar-condensed-gap, .5rem)}ngx-app-bar header.condensed mat-icon{color:var(--mat-sys-outline)}ngx-app-bar header .title,ngx-app-bar header .subtitle{margin:0;white-space:nowrap}ngx-app-bar header .title{font:var(--ngx-app-bar-title-font, var(--mat-sys-headline-medium));letter-spacing:var(--ngx-app-bar-title-letter-spacing, var(--mat-sys-headline-medium-tracking))}ngx-app-bar header .subtitle{font:var(--ngx-app-bar-subtitle-font, var(--mat-sys-headline-small));letter-spacing:var(--ngx-app-bar-subtitle-letter-spacing, var(--mat-sys-headline-small-tracking))}ngx-app-bar .actions{display:flex;justify-content:flex-end;flex-grow:1;gap:var(--ngx-app-bar-actions-gap, .5rem)}\n"], dependencies: [{ kind: "component", type: MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: MatIconButton, selector: "button[mat-icon-button], a[mat-icon-button], button[matIconButton], a[matIconButton]", exportAs: ["matButton", "matAnchor"] }, { kind: "directive", type: MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
175
175
  }
176
176
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.1", ngImport: i0, type: NgxAppBarComponent, decorators: [{
177
177
  type: Component,
178
178
  args: [{ selector: 'ngx-app-bar', encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, imports: [MatIcon, MatIconButton, MatTooltip], host: {
179
179
  // eslint-disable-next-line @typescript-eslint/naming-convention
180
180
  '[class.condensed]': 'mode()==="condensed"'
181
- }, template: "@if (withBackIcon()) {\n <button matIconButton matTooltip=\"{{ intl?.back ?? 'Back' }}\" (click)=\"triggerGoBack()\">\n <mat-icon>arrow_back</mat-icon>\n </button>\n}\n\n<header class=\"{{ mode() }}\">\n <h1 class=\"title\">{{ title() }}</h1>\n @if (subtitle()) {\n @if (mode() === 'condensed') {\n <mat-icon>chevron_right</mat-icon>\n }\n <h2 class=\"subtitle\">{{ subtitle() }}</h2>\n }\n</header>\n\n<section class=\"actions\">\n <ng-content />\n @if (helpUrl()) {\n <button matIconButton matTooltip=\"{{ intl?.help ?? 'Help' }}\" (click)=\"openHelp()\">\n <mat-icon>help</mat-icon>\n </button>\n }\n</section>\n", styles: ["ngx-app-bar{display:flex;flex-direction:row;align-items:center;min-height:var(--ngx-app-bar-min-height, 3.5rem);box-sizing:border-box;gap:var(--ngx-app-bar-gap, .25rem)}ngx-app-bar:has(.subtitle):has(:not(.condensed)){padding-block:var(--ngx-app-bar-with-subtitle-padding-block, .25rem)}ngx-app-bar header{color:var(--mat-sys-on-surface-variant)}ngx-app-bar header.condensed{display:flex;flex-direction:row;align-items:center;gap:var(--ngx-app-bar-condensed-gap, .5rem)}ngx-app-bar header.condensed mat-icon{color:var(--mat-sys-outline)}ngx-app-bar header .title,ngx-app-bar header .subtitle{margin:0;white-space:nowrap}ngx-app-bar header .title{font:var(--ngx-app-bar-title-font, var(--mat-sys-headline-medium));letter-spacing:var(--ngx-app-bar-title-letter-spacing, var(--mat-sys-headline-medium-tracking))}ngx-app-bar header .subtitle{font:var(--ngx-app-bar-subtitle-font, var(--mat-sys-headline-small));letter-spacing:var(--ngx-app-bar-subtitle-letter-spacing, var(--mat-sys-headline-small-tracking))}ngx-app-bar .actions{display:flex;justify-content:flex-end;flex-grow:1;gap:var(--ngx-app-bar-actions-gap, .5rem)}\n"] }]
182
- }], propDecorators: { mode: [{ type: i0.Input, args: [{ isSignal: true, alias: "mode", required: false }] }], title: [{ type: i0.Input, args: [{ isSignal: true, alias: "title", required: true }] }], subtitle: [{ type: i0.Input, args: [{ isSignal: true, alias: "subtitle", required: false }] }], helpUrl: [{ type: i0.Input, args: [{ isSignal: true, alias: "helpUrl", required: false }] }], withBackIcon: [{ type: i0.Input, args: [{ isSignal: true, alias: "withBackIcon", required: false }] }], goBack: [{ type: i0.Output, args: ["goBack"] }] } });
181
+ }, template: "@if (withBackButton()) {\n <button matIconButton matTooltip=\"{{ intl?.back ?? 'Back' }}\" (click)=\"triggerGoBack()\">\n <mat-icon>arrow_back</mat-icon>\n </button>\n}\n\n<header class=\"{{ mode() }}\">\n <h1 class=\"title\">{{ title() }}</h1>\n @if (subtitle()) {\n @if (mode() === 'condensed') {\n <mat-icon>chevron_right</mat-icon>\n }\n <h2 class=\"subtitle\">{{ subtitle() }}</h2>\n }\n</header>\n\n<section class=\"actions\">\n <ng-content />\n @if (helpUrl()) {\n <button matIconButton matTooltip=\"{{ intl?.help ?? 'Help' }}\" (click)=\"openHelp()\">\n <mat-icon>help</mat-icon>\n </button>\n }\n</section>\n", styles: ["ngx-app-bar{display:flex;flex-direction:row;align-items:center;min-height:var(--ngx-app-bar-min-height, 3.5rem);box-sizing:border-box;gap:var(--ngx-app-bar-gap, .25rem)}ngx-app-bar:has(.subtitle):has(:not(.condensed)){padding-block:var(--ngx-app-bar-with-subtitle-padding-block, .25rem)}ngx-app-bar header{color:var(--mat-sys-on-surface-variant)}ngx-app-bar header.condensed{display:flex;flex-direction:row;align-items:center;gap:var(--ngx-app-bar-condensed-gap, .5rem)}ngx-app-bar header.condensed mat-icon{color:var(--mat-sys-outline)}ngx-app-bar header .title,ngx-app-bar header .subtitle{margin:0;white-space:nowrap}ngx-app-bar header .title{font:var(--ngx-app-bar-title-font, var(--mat-sys-headline-medium));letter-spacing:var(--ngx-app-bar-title-letter-spacing, var(--mat-sys-headline-medium-tracking))}ngx-app-bar header .subtitle{font:var(--ngx-app-bar-subtitle-font, var(--mat-sys-headline-small));letter-spacing:var(--ngx-app-bar-subtitle-letter-spacing, var(--mat-sys-headline-small-tracking))}ngx-app-bar .actions{display:flex;justify-content:flex-end;flex-grow:1;gap:var(--ngx-app-bar-actions-gap, .5rem)}\n"] }]
182
+ }], propDecorators: { mode: [{ type: i0.Input, args: [{ isSignal: true, alias: "mode", required: false }] }], title: [{ type: i0.Input, args: [{ isSignal: true, alias: "title", required: true }] }], subtitle: [{ type: i0.Input, args: [{ isSignal: true, alias: "subtitle", required: false }] }], helpUrl: [{ type: i0.Input, args: [{ isSignal: true, alias: "helpUrl", required: false }] }], withBackButton: [{ type: i0.Input, args: [{ isSignal: true, alias: "withBackButton", required: false }] }], goBack: [{ type: i0.Output, args: ["goBack"] }] } });
183
183
 
184
184
  // eslint-disable-next-line @typescript-eslint/naming-convention
185
185
  const FILTER_TOKEN = new InjectionToken('FILTER_TOKEN');
@@ -351,40 +351,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.1", ngImpor
351
351
  ], template: "@if (folded()) {\n <section\n class=\"filter-container\"\n #container\n [matBadge]=\"activeFiltersAmount()\"\n [matBadgeHidden]=\"activeFiltersAmount() <= 0\">\n <button\n mat-icon-button\n aria-label=\"All filters\"\n cdkOverlayOrigin\n #trigger=\"cdkOverlayOrigin\"\n (click)=\"\n this.overlayOrigin.set(trigger);\n this.overlayContent.set(moreFilters);\n this.overlayOpen.set(true);\n this.moreFiltersOverlay.set(true)\n \"\n matTooltip=\"{{ intl?.allFilters ?? 'All filters' }}\">\n <mat-icon>filter_alt</mat-icon>\n </button>\n </section>\n} @else {\n @if (allFilters()) {\n <section #measureRow class=\"measure-row\">\n <mat-chip-set>\n @for (f of allFilters(); track $index) {\n <mat-chip-option [selectable]=\"false\" [selected]=\"f.active()\">\n {{ f.label() }}\n @if (f.type === 'complex' && f.selectedFilterLabel()) {\n <span class=\"selected-label\">: {{ f.selectedFilterLabel() }}</span>\n }\n @if (f.type === 'complex') {\n <mat-icon matChipTrailingIcon>arrow_drop_down</mat-icon>\n }\n </mat-chip-option>\n }\n <mat-chip #overflowMeasure>\n +00 {{ intl?.filters ?? 'Filters' | lowercase }} (00 {{ intl?.actives ?? 'Actives' | lowercase }})\n <mat-icon matChipTrailingIcon>arrow_drop_down</mat-icon>\n </mat-chip>\n </mat-chip-set>\n </section>\n }\n\n <section class=\"filter-container\" #container>\n <mat-chip-set>\n @if (this.visibleFilters().length) {\n @for (f of visibleFilters(); track $index) {\n @if (f.type === 'toggle') {\n <mat-chip-option\n selectable=\"true\"\n [selected]=\"f.active()\"\n (selectionChange)=\"f.active.set($event.selected)\">\n {{ f.label() }}\n </mat-chip-option>\n } @else {\n <mat-chip-option\n [selectable]=\"false\"\n [selected]=\"f.active()\"\n cdkOverlayOrigin\n #trigger=\"cdkOverlayOrigin\"\n (click)=\"\n this.overlayOrigin.set(trigger);\n this.overlayContent.set(f.templateRef);\n this.overlayOpen.set(true);\n this.moreFiltersOverlay.set(false)\n \">\n {{ f.label() }}\n @if (f.selectedFilterLabel()) {\n <span class=\"selected-label\">: {{ f.selectedFilterLabel() }}</span>\n }\n <mat-icon\n [class.is-overlay-open]=\"this.overlayOpen() && this.overlayContent() === f.templateRef\"\n matChipTrailingIcon>\n arrow_drop_down\n </mat-icon>\n </mat-chip-option>\n }\n }\n }\n </mat-chip-set>\n <section class=\"static\" #static>\n @if (invisibleFilters().length; as invisibleFiltersAmount) {\n <mat-chip-set>\n <mat-chip\n cdkOverlayOrigin\n [class.filter-active]=\"activeFiltersAmount()\"\n #trigger=\"cdkOverlayOrigin\"\n (click)=\"\n this.overlayOrigin.set(trigger);\n this.overlayContent.set(moreFilters);\n this.overlayOpen.set(true);\n this.moreFiltersOverlay.set(true)\n \">\n +{{ invisibleFiltersAmount }} {{ intl?.filters ?? 'Filters' | lowercase }} ({{\n activeFiltersAmount()\n }}\n {{ intl?.actives ?? 'Actives' | lowercase }})\n <mat-icon\n [class.is-overlay-open]=\"this.overlayOpen() && this.overlayContent() === moreFilters\"\n matChipTrailingIcon>\n arrow_drop_down\n </mat-icon>\n </mat-chip>\n </mat-chip-set>\n }\n <button\n mat-icon-button\n aria-label=\"Reset filters\"\n (click)=\"emitResetClicked()\"\n matTooltip=\"{{ intl?.reset ?? 'Reset' }}\">\n <mat-icon>settings_backup_restore</mat-icon>\n </button>\n </section>\n </section>\n}\n\n<ng-template #moreFilters>\n @if (allFilters()) {\n @for (f of allFilters(); track $index) {\n @if (f.type === 'toggle') {\n <section class=\"filter\">\n <mat-slide-toggle labelPosition=\"before\" [(ngModel)]=\"f.active\">\n {{ f.label() }}\n </mat-slide-toggle>\n </section>\n } @else {\n <section class=\"filter\">\n <div class=\"title\">\n <span class=\"label\">{{ f.label() }}</span>\n <span class=\"value\">{{ f.selectedFilterLabel() }}</span>\n </div>\n @if (f.templateRef) {\n <ng-container *ngTemplateOutlet=\"f.templateRef\"></ng-container>\n }\n </section>\n }\n }\n }\n</ng-template>\n\n@let overlayOrigin = this.overlayOrigin();\n@let overlayOpen = this.overlayOpen();\n@let overlayContent = this.overlayContent();\n@if (overlayOrigin && overlayOpen && overlayContent) {\n <ng-template\n cdkConnectedOverlay\n [cdkConnectedOverlayOrigin]=\"overlayOrigin\"\n [cdkConnectedOverlayOpen]=\"overlayOpen\"\n (detach)=\"this.overlayOpen.set(false)\"\n cdkConnectedOverlayHasBackdrop=\"true\"\n backdrop\n (backdropClick)=\"this.overlayOpen.set(false)\"\n cdkConnectedOverlayPanelClass=\"filter-group--overlay\"\n cdkConnectedOverlayBackdropClass=\"filter-group--overlay--backdrop--transparent\"\n [cdkConnectedOverlayPositions]=\"overlayPositions\"\n [cdkConnectedOverlayFlexibleDimensions]=\"true\"\n [cdkConnectedOverlayGrowAfterOpen]=\"true\"\n [cdkConnectedOverlayFlexibleDimensions]=\"true\"\n [cdkConnectedOverlayViewportMargin]=\"32\">\n @if (moreFiltersOverlay()) {\n <div class=\"filters--title\">\n <span>{{ intl?.filters ?? 'Filters' }}</span>\n <button\n mat-icon-button\n aria-label=\"Reset filters\"\n (click)=\"emitResetClicked()\"\n matTooltip=\"{{ intl?.reset ?? 'Reset' }}\">\n <mat-icon>settings_backup_restore</mat-icon>\n </button>\n </div>\n }\n <div class=\"filters--content\">\n <ng-container *ngTemplateOutlet=\"overlayContent\"></ng-container>\n </div>\n </ng-template>\n}\n", styles: ["ngx-filters-group{flex:1;display:flex;flex-direction:row;justify-content:end}ngx-filters-group .selected-label{max-width:var(--ngx-filters-group-selected-label-max-width, 27ch);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;display:inline-block}ngx-filters-group .measure-row{display:flex;flex-direction:row;gap:var(--ngx-filters-group-gap, .5rem);position:absolute;visibility:hidden;pointer-events:none}ngx-filters-group .filter-container{display:flex;flex-direction:row;align-items:center;gap:var(--ngx-filters-group-gap, .5rem);block-size:var(--ngx-filters-group-block-size, 3rem);border-radius:var(--ngx-filters-group-border-radius, 2rem);padding-inline:var(--ngx-filters-group-padding-inline, .5rem);background-color:var(--mat-sys-surface-container-low)}ngx-filters-group .filter-container .static{display:flex;flex-direction:row;gap:var(--ngx-filters-group-static-gap, .5rem)}ngx-filters-group .filter-container .static mat-chip:first-child{--mat-chip-container-shape-radius: var(--ngx-filters-group-first-chip-shape-radius, .5rem)}ngx-filters-group .filter-container .static mat-chip.filter-active{--mat-chip-elevated-container-color: var(--mat-sys-secondary-container);--mat-chip-outline-color: transparent}ngx-filters-group .filter-container mat-chip-set>div{flex-wrap:nowrap}ngx-filters-group .filter-container mat-chip,ngx-filters-group .filter-container mat-chip-option{min-width:0}ngx-filters-group .filter-container mat-chip:first-child,ngx-filters-group .filter-container mat-chip-option:first-child{--mat-chip-container-shape-radius: var(--ngx-filters-group-first-chip-option-shape-radius, 1rem .5rem .5rem 1rem)}ngx-filters-group .filter-container mat-chip .mat-mdc-chip-action-label,ngx-filters-group .filter-container mat-chip-option .mat-mdc-chip-action-label{display:flex;align-items:center}ngx-filters-group .filter-container mat-chip .is-overlay-open,ngx-filters-group .filter-container mat-chip-option .is-overlay-open{transform:rotate(180deg)}ngx-filters-group .filter-container:has(>button:only-of-type){padding-inline:var(--ngx-filters-group-folded-padding-inline, .25rem)}.filter-group--overlay{display:flex;flex-direction:column;background-color:var(--mat-sys-surface-container-high);border-radius:var(--ngx-filters-group-overlay-border-radius, .5rem);overflow:hidden}.filter-group--overlay mat-slide-toggle>*{width:100%;justify-content:space-between}.filter-group--overlay mat-slide-toggle>* label{margin:0}.filter-group--overlay .filters--title{font:var(--mat-sys-title-medium);letter-spacing:var(--mat-sys-title-medium-tracking);color:var(--mat-sys-on-surface-variant);border-block-end:1px solid var(--mat-sys-outline-variant);display:flex;flex-direction:row;align-items:center;justify-content:space-between;padding-inline:var(--ngx-filters-group-overlay-title-padding-inline, 1rem);padding-block:calc(var(--ngx-filters-group-overlay-title-padding-block, 1rem) / 4)}.filter-group--overlay .filters--content{min-width:18.75rem;overflow:auto;display:flex;flex-direction:column;justify-items:stretch;gap:var(--ngx-filters-group-overlay-content-gap, .5rem);padding:var(--ngx-filters-group-overlay-filter-padding, 1rem)}.filter-group--overlay .filters--content .filter{display:flex;flex-direction:column;gap:var(--ngx-filters-group-overlay-content-filter-gap, .5rem);padding-block:var(--ngx-filters-group-overlay-filter-padding, 1rem)}.filter-group--overlay .filters--content .filter:not(:last-child){border-bottom:1px dashed var(--mat-sys-outline-variant)}.filter-group--overlay .filters--content .filter:last-child{padding-block-end:unset}.filter-group--overlay .filters--content .filter:first-child{padding-block-start:unset}.filter-group--overlay .filters--content .filter .title{display:inline-flex;justify-content:space-between;align-items:baseline}.filter-group--overlay .filters--content .filter .title .label{font:var(--mat-sys-label-large)}.filter-group--overlay .filters--content .filter .title .value{font:var(--mat-sys-label-medium);max-width:var(--ngx-filters-group-title-overlay-max-width, 27ch);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.filter-group--overlay .filters--content .filter>[no-padding]{margin-inline:-1rem}.filter-group--overlay--backdrop--transparent{background-color:transparent}\n"] }]
352
352
  }], propDecorators: { resetFilters: [{ type: i0.Output, args: ["resetFilters"] }], folded: [{ type: i0.Input, args: [{ isSignal: true, alias: "folded", required: false }] }], allFilters: [{ type: i0.ContentChildren, args: [i0.forwardRef(() => FILTER_TOKEN), { isSignal: true }] }], filterContainerRef: [{ type: i0.ViewChild, args: ['container', { isSignal: true }] }], measureRowRef: [{ type: i0.ViewChild, args: ['measureRow', { isSignal: true }] }], staticFieldsRef: [{ type: i0.ViewChild, args: ['static', { isSignal: true }] }] } });
353
353
 
354
- class NgxLayoutComponent {
355
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.1", ngImport: i0, type: NgxLayoutComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
356
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "21.1.1", type: NgxLayoutComponent, isStandalone: true, selector: "ngx-layout", ngImport: i0, template: "<ng-content select=\"ngx-app-bar\"></ng-content>\n<ng-content select=\"ngx-main-bar\"></ng-content>\n<!--\n The ng-content's is not clearly defined yet. The potential use-cases are:\n - Display GPD bars\n - Display warnings\n -->\n<ng-content></ng-content>\n<section class=\"content\">\n <ng-content select=\"ngx-panel\"></ng-content>\n</section>\n", styles: [":host{display:flex;flex-direction:column;flex:1 1 0;background-color:var(--mat-sys-surface-container);padding-block-end:var(--ngx-layout-padding-block-end, .75rem);padding-inline:var(--ngx-layout-padding-inline, 1rem);box-sizing:border-box}:host .content{display:flex;flex:1 1 0;overflow:hidden;gap:var(--ngx-layout-content-gap, .5rem);padding-block:var(--ngx-layout-content-padding-block, .25rem)}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush });
357
- }
358
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.1", ngImport: i0, type: NgxLayoutComponent, decorators: [{
359
- type: Component,
360
- args: [{ selector: 'ngx-layout', changeDetection: ChangeDetectionStrategy.OnPush, template: "<ng-content select=\"ngx-app-bar\"></ng-content>\n<ng-content select=\"ngx-main-bar\"></ng-content>\n<!--\n The ng-content's is not clearly defined yet. The potential use-cases are:\n - Display GPD bars\n - Display warnings\n -->\n<ng-content></ng-content>\n<section class=\"content\">\n <ng-content select=\"ngx-panel\"></ng-content>\n</section>\n", styles: [":host{display:flex;flex-direction:column;flex:1 1 0;background-color:var(--mat-sys-surface-container);padding-block-end:var(--ngx-layout-padding-block-end, .75rem);padding-inline:var(--ngx-layout-padding-inline, 1rem);box-sizing:border-box}:host .content{display:flex;flex:1 1 0;overflow:hidden;gap:var(--ngx-layout-content-gap, .5rem);padding-block:var(--ngx-layout-content-padding-block, .25rem)}\n"] }]
361
- }] });
362
-
363
- class NgxMainBarComponent {
364
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.1", ngImport: i0, type: NgxMainBarComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
365
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "21.1.1", type: NgxMainBarComponent, isStandalone: true, selector: "ngx-main-bar", ngImport: i0, template: "<ng-content select=\"ngx-actions-group\"></ng-content>\n\n<div class=\"right\">\n <ng-content select=\"ngx-filters-group\"></ng-content>\n <ng-content select=\"ngx-search-bar-container\"></ng-content>\n</div>\n", styles: ["ngx-main-bar{display:flex;align-items:center;padding-block:var(--ngx-main-bar-padding-block, .25rem);gap:var(--ngx-main-bar-gap, .75rem)}ngx-main-bar .right{flex:1;display:flex;justify-content:flex-end;gap:var(--ngx-main-bar-right-gap, .75rem)}ngx-main-bar ngx-actions-group{flex:1;min-inline-size:var(--ngx-main-bar-action-min-inline-size, 3rem)}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
366
- }
367
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.1", ngImport: i0, type: NgxMainBarComponent, decorators: [{
368
- type: Component,
369
- args: [{ selector: 'ngx-main-bar', encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, template: "<ng-content select=\"ngx-actions-group\"></ng-content>\n\n<div class=\"right\">\n <ng-content select=\"ngx-filters-group\"></ng-content>\n <ng-content select=\"ngx-search-bar-container\"></ng-content>\n</div>\n", styles: ["ngx-main-bar{display:flex;align-items:center;padding-block:var(--ngx-main-bar-padding-block, .25rem);gap:var(--ngx-main-bar-gap, .75rem)}ngx-main-bar .right{flex:1;display:flex;justify-content:flex-end;gap:var(--ngx-main-bar-right-gap, .75rem)}ngx-main-bar ngx-actions-group{flex:1;min-inline-size:var(--ngx-main-bar-action-min-inline-size, 3rem)}\n"] }]
370
- }] });
371
-
372
- class NgxPanelComponent {
373
- appearance = input(undefined, ...(ngDevMode ? [{ debugName: "appearance" }] : []));
374
- contentPadding = input(undefined, { ...(ngDevMode ? { debugName: "contentPadding" } : {}), alias: 'content-padding' });
375
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.1", ngImport: i0, type: NgxPanelComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
376
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "21.1.1", type: NgxPanelComponent, isStandalone: true, selector: "ngx-panel", inputs: { appearance: { classPropertyName: "appearance", publicName: "appearance", isSignal: true, isRequired: false, transformFunction: null }, contentPadding: { classPropertyName: "contentPadding", publicName: "content-padding", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "attr.appearance": "this.appearance()", "attr.content-padding": "this.contentPadding()" } }, ngImport: i0, template: "<ng-content select=\"ngx-panel-bar[primary]\"></ng-content>\n<ng-content select=\"ngx-panel-bar\"></ng-content>\n<section class=\"content\">\n <ng-content></ng-content>\n</section>\n", styles: ["ngx-panel{display:flex;flex-direction:column;overflow:hidden;box-sizing:border-box;block-size:100%;border-radius:var(--ngx-panel-radius, 2rem);padding-block:var(--ngx-panel-padding-block, .25rem);background-color:var(--mat-sys-surface-container-lowest);min-width:min-content}ngx-panel[appearance=transparent]{background-color:transparent}ngx-panel .content{overflow:auto;display:flex;flex-direction:column;gap:var(--ngx-panel-content-gap, .5rem);flex:1;padding-inline:var(--ngx-panel-content-padding-inline, .5rem);padding-block-end:var(--ngx-panel-content-padding-block-end, .75rem)}ngx-panel[content-padding=none] .content{padding-inline:0}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
377
- }
378
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.1", ngImport: i0, type: NgxPanelComponent, decorators: [{
379
- type: Component,
380
- args: [{ selector: 'ngx-panel', encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, host: {
381
- // eslint-disable-next-line @typescript-eslint/naming-convention
382
- '[attr.appearance]': 'this.appearance()',
383
- // eslint-disable-next-line @typescript-eslint/naming-convention
384
- '[attr.content-padding]': 'this.contentPadding()'
385
- }, template: "<ng-content select=\"ngx-panel-bar[primary]\"></ng-content>\n<ng-content select=\"ngx-panel-bar\"></ng-content>\n<section class=\"content\">\n <ng-content></ng-content>\n</section>\n", styles: ["ngx-panel{display:flex;flex-direction:column;overflow:hidden;box-sizing:border-box;block-size:100%;border-radius:var(--ngx-panel-radius, 2rem);padding-block:var(--ngx-panel-padding-block, .25rem);background-color:var(--mat-sys-surface-container-lowest);min-width:min-content}ngx-panel[appearance=transparent]{background-color:transparent}ngx-panel .content{overflow:auto;display:flex;flex-direction:column;gap:var(--ngx-panel-content-gap, .5rem);flex:1;padding-inline:var(--ngx-panel-content-padding-inline, .5rem);padding-block-end:var(--ngx-panel-content-padding-block-end, .75rem)}ngx-panel[content-padding=none] .content{padding-inline:0}\n"] }]
386
- }], propDecorators: { appearance: [{ type: i0.Input, args: [{ isSignal: true, alias: "appearance", required: false }] }], contentPadding: [{ type: i0.Input, args: [{ isSignal: true, alias: "content-padding", required: false }] }] } });
387
-
388
354
  class NgxSearchInputDirective {
389
355
  blurred = signal(false, ...(ngDevMode ? [{ debugName: "blurred" }] : []));
390
356
  value;
@@ -486,9 +452,78 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.1", ngImpor
486
452
  args: [{ selector: 'ngx-search-bar-container', encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, imports: [MatIcon, MatIconButton, MatTooltip], template: "@if (isFolded()) {\n <button\n matIconButton\n aria-label=\"Open search bar\"\n (click)=\"toggleFolded()\"\n matTooltip=\"{{ intl?.openSearchBar ?? 'Open search bar' }}\">\n <mat-icon>search</mat-icon>\n </button>\n} @else {\n <ng-content select=\"[ngx-search-input]\"></ng-content>\n\n @if (searchText()) {\n <button\n matIconButton\n aria-label=\"Clear button\"\n (click)=\"resetInput()\"\n matTooltip=\"{{ intl?.deleteSearch ?? 'Clear search' }}\">\n <mat-icon>close</mat-icon>\n </button>\n } @else {\n <mat-icon class=\"icon-search-bar\" aria-hidden=\"false\" aria-label=\"Search icon\" fontIcon=\"search\" />\n }\n}\n", styles: ["ngx-search-bar-container{display:flex;flex:1 1 auto;max-width:400px;align-items:center;block-size:var(--ngx-search-bar-container-block-size, 3rem);border-radius:var(--ngx-search-bar-container-radius, 2rem);padding-inline-start:var(--ngx-search-bar-container-padding-inline-start, 1.125rem);padding-inline-end:var(--ngx-search-bar-container-padding-inline-end, .25rem);background-color:var(--mat-sys-surface-container-high);gap:var(--ngx-search-bar-container-gap, .125rem)}ngx-search-bar-container:has(button:only-child){width:fit-content;padding:var(--ngx-search-bar-folded-container-padding, 0 .25rem);flex:0}ngx-search-bar-container>input[ngx-search-input]{font:var(--mat-sys-body-large);letter-spacing:var(--mat-sys-body-large-tracking);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;width:10px}ngx-search-bar-container>input[ngx-search-input]::placeholder{color:var(--mat-sys-on-surface-variant)}ngx-search-bar-container mat-icon.icon-search-bar{padding:var(--ngx-search-bar-icon-padding, .5rem);color:var(--mat-sys-on-surface-variant)}ngx-search-bar-container [ngx-search-input]{flex:1;background:none;border:none}ngx-search-bar-container [ngx-search-input]:focus{outline:none}\n"] }]
487
453
  }], ctorParameters: () => [], propDecorators: { folded: [{ type: i0.Input, args: [{ isSignal: true, alias: "folded", required: false }] }], searchInput: [{ type: i0.ContentChild, args: [i0.forwardRef(() => NgxSearchInputDirective), { isSignal: true }] }] } });
488
454
 
455
+ class NgxColumnBarComponent {
456
+ hasRightContent = computed(() => this.filtersGroup() ?? this.searchBarContainer(), ...(ngDevMode ? [{ debugName: "hasRightContent" }] : []));
457
+ filtersGroup = contentChild(NgxFiltersGroupComponent, ...(ngDevMode ? [{ debugName: "filtersGroup" }] : []));
458
+ searchBarContainer = contentChild(NgxSearchBarContainerComponent, ...(ngDevMode ? [{ debugName: "searchBarContainer" }] : []));
459
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.1", ngImport: i0, type: NgxColumnBarComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
460
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.1.1", type: NgxColumnBarComponent, isStandalone: true, selector: "ngx-column-bar", queries: [{ propertyName: "filtersGroup", first: true, predicate: NgxFiltersGroupComponent, descendants: true, isSignal: true }, { propertyName: "searchBarContainer", first: true, predicate: NgxSearchBarContainerComponent, descendants: true, isSignal: true }], ngImport: i0, template: "<ng-content select=\"h1,h2,h3,h4,h5,h6\"></ng-content>\n<ng-content select=\"ngx-actions-group\"></ng-content>\n\n@if (hasRightContent()) {\n <div class=\"right\">\n <ng-content select=\"ngx-filters-group\"></ng-content>\n <ng-content select=\"ngx-search-bar-container\"></ng-content>\n </div>\n}\n", styles: ["ngx-column-bar{display:flex;align-items:center;padding:var(--ngx-column-bar-padding, .25rem .5rem);gap:var(--ngx-column-bar-gap, .75rem)}ngx-column-bar h1,ngx-column-bar h2,ngx-column-bar h3,ngx-column-bar h4,ngx-column-bar h5,ngx-column-bar h6{white-space:nowrap;margin:0;font:var(--mat-sys-title-large);letter-spacing:var(--mat-sys-title-large-tracking);color:var(--mat-sys-on-surface-variant);overflow:hidden;min-width:var(--ngx-column-bar-title-min-width, 6ch);text-overflow:ellipsis}ngx-column-bar h1:first-child,ngx-column-bar h2:first-child,ngx-column-bar h3:first-child,ngx-column-bar h4:first-child,ngx-column-bar h5:first-child,ngx-column-bar h6:first-child{padding-inline-start:var(--ngx-column-bar-title-first-child-padding-inline-start, .25rem)}ngx-column-bar:has(h1,h2,h3,h4,h5,h6) ngx-actions-group{justify-content:flex-end}ngx-column-bar:not(:has(ngx-actions-group)) .right{flex:1}ngx-column-bar .right,ngx-column-bar ngx-actions-group{display:flex;align-items:center;gap:var(--ngx-column-bar-elements-gap, .75rem)}ngx-column-bar .right{justify-content:flex-end}ngx-column-bar ngx-actions-group{flex:1;min-inline-size:var(--ngx-column-bar-actions-group-min-inline-size, 3rem)}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
461
+ }
462
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.1", ngImport: i0, type: NgxColumnBarComponent, decorators: [{
463
+ type: Component,
464
+ args: [{ selector: 'ngx-column-bar', encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, template: "<ng-content select=\"h1,h2,h3,h4,h5,h6\"></ng-content>\n<ng-content select=\"ngx-actions-group\"></ng-content>\n\n@if (hasRightContent()) {\n <div class=\"right\">\n <ng-content select=\"ngx-filters-group\"></ng-content>\n <ng-content select=\"ngx-search-bar-container\"></ng-content>\n </div>\n}\n", styles: ["ngx-column-bar{display:flex;align-items:center;padding:var(--ngx-column-bar-padding, .25rem .5rem);gap:var(--ngx-column-bar-gap, .75rem)}ngx-column-bar h1,ngx-column-bar h2,ngx-column-bar h3,ngx-column-bar h4,ngx-column-bar h5,ngx-column-bar h6{white-space:nowrap;margin:0;font:var(--mat-sys-title-large);letter-spacing:var(--mat-sys-title-large-tracking);color:var(--mat-sys-on-surface-variant);overflow:hidden;min-width:var(--ngx-column-bar-title-min-width, 6ch);text-overflow:ellipsis}ngx-column-bar h1:first-child,ngx-column-bar h2:first-child,ngx-column-bar h3:first-child,ngx-column-bar h4:first-child,ngx-column-bar h5:first-child,ngx-column-bar h6:first-child{padding-inline-start:var(--ngx-column-bar-title-first-child-padding-inline-start, .25rem)}ngx-column-bar:has(h1,h2,h3,h4,h5,h6) ngx-actions-group{justify-content:flex-end}ngx-column-bar:not(:has(ngx-actions-group)) .right{flex:1}ngx-column-bar .right,ngx-column-bar ngx-actions-group{display:flex;align-items:center;gap:var(--ngx-column-bar-elements-gap, .75rem)}ngx-column-bar .right{justify-content:flex-end}ngx-column-bar ngx-actions-group{flex:1;min-inline-size:var(--ngx-column-bar-actions-group-min-inline-size, 3rem)}\n"] }]
465
+ }], propDecorators: { filtersGroup: [{ type: i0.ContentChild, args: [i0.forwardRef(() => NgxFiltersGroupComponent), { isSignal: true }] }], searchBarContainer: [{ type: i0.ContentChild, args: [i0.forwardRef(() => NgxSearchBarContainerComponent), { isSignal: true }] }] } });
466
+
467
+ class NgxLayoutComponent {
468
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.1", ngImport: i0, type: NgxLayoutComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
469
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "21.1.1", type: NgxLayoutComponent, isStandalone: true, selector: "ngx-layout", ngImport: i0, template: "<ng-content select=\"ngx-app-bar\"></ng-content>\n<ng-content select=\"ngx-main-bar\"></ng-content>\n<!--\n The ng-content's is not clearly defined yet. The potential use-cases are:\n - Display GPD bars\n - Display warnings\n -->\n<ng-content></ng-content>\n<section class=\"content\">\n <ng-content select=\"ngx-panel\"></ng-content>\n</section>\n", styles: [":host{display:flex;flex-direction:column;flex:1 1 0;background-color:var(--mat-sys-surface-container);padding-block-end:var(--ngx-layout-padding-block-end, .75rem);padding-inline:var(--ngx-layout-padding-inline, 1rem);box-sizing:border-box}:host .content{display:flex;flex:1 1 0;overflow:hidden;gap:var(--ngx-layout-content-gap, .5rem);padding-block:var(--ngx-layout-content-padding-block, .25rem)}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush });
470
+ }
471
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.1", ngImport: i0, type: NgxLayoutComponent, decorators: [{
472
+ type: Component,
473
+ args: [{ selector: 'ngx-layout', changeDetection: ChangeDetectionStrategy.OnPush, template: "<ng-content select=\"ngx-app-bar\"></ng-content>\n<ng-content select=\"ngx-main-bar\"></ng-content>\n<!--\n The ng-content's is not clearly defined yet. The potential use-cases are:\n - Display GPD bars\n - Display warnings\n -->\n<ng-content></ng-content>\n<section class=\"content\">\n <ng-content select=\"ngx-panel\"></ng-content>\n</section>\n", styles: [":host{display:flex;flex-direction:column;flex:1 1 0;background-color:var(--mat-sys-surface-container);padding-block-end:var(--ngx-layout-padding-block-end, .75rem);padding-inline:var(--ngx-layout-padding-inline, 1rem);box-sizing:border-box}:host .content{display:flex;flex:1 1 0;overflow:hidden;gap:var(--ngx-layout-content-gap, .5rem);padding-block:var(--ngx-layout-content-padding-block, .25rem)}\n"] }]
474
+ }] });
475
+
476
+ class NgxMainBarComponent {
477
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.1", ngImport: i0, type: NgxMainBarComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
478
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "21.1.1", type: NgxMainBarComponent, isStandalone: true, selector: "ngx-main-bar", ngImport: i0, template: "<ng-content select=\"ngx-actions-group\"></ng-content>\n\n<div class=\"right\">\n <ng-content select=\"ngx-filters-group\"></ng-content>\n <ng-content select=\"ngx-search-bar-container\"></ng-content>\n</div>\n", styles: ["ngx-main-bar{display:flex;align-items:center;padding-block:var(--ngx-main-bar-padding-block, .25rem);gap:var(--ngx-main-bar-gap, .75rem)}ngx-main-bar .right{flex:1;display:flex;justify-content:flex-end;gap:var(--ngx-main-bar-right-gap, .75rem)}ngx-main-bar ngx-actions-group{flex:1;min-inline-size:var(--ngx-main-bar-action-min-inline-size, 3rem)}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
479
+ }
480
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.1", ngImport: i0, type: NgxMainBarComponent, decorators: [{
481
+ type: Component,
482
+ args: [{ selector: 'ngx-main-bar', encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, template: "<ng-content select=\"ngx-actions-group\"></ng-content>\n\n<div class=\"right\">\n <ng-content select=\"ngx-filters-group\"></ng-content>\n <ng-content select=\"ngx-search-bar-container\"></ng-content>\n</div>\n", styles: ["ngx-main-bar{display:flex;align-items:center;padding-block:var(--ngx-main-bar-padding-block, .25rem);gap:var(--ngx-main-bar-gap, .75rem)}ngx-main-bar .right{flex:1;display:flex;justify-content:flex-end;gap:var(--ngx-main-bar-right-gap, .75rem)}ngx-main-bar ngx-actions-group{flex:1;min-inline-size:var(--ngx-main-bar-action-min-inline-size, 3rem)}\n"] }]
483
+ }] });
484
+
485
+ class NgxPanelComponent {
486
+ appearance = input(undefined, ...(ngDevMode ? [{ debugName: "appearance" }] : []));
487
+ contentPadding = input(undefined, ...(ngDevMode ? [{ debugName: "contentPadding" }] : []));
488
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.1", ngImport: i0, type: NgxPanelComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
489
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "21.1.1", type: NgxPanelComponent, isStandalone: true, selector: "ngx-panel", inputs: { appearance: { classPropertyName: "appearance", publicName: "appearance", isSignal: true, isRequired: false, transformFunction: null }, contentPadding: { classPropertyName: "contentPadding", publicName: "contentPadding", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "attr.appearance": "this.appearance()" } }, ngImport: i0, template: "<ng-content select=\"ngx-panel-bar\"></ng-content>\n<section class=\"content\" [class.no-padding]=\"contentPadding() === 'none'\">\n <ng-content></ng-content>\n</section>\n", styles: ["ngx-panel{display:flex;flex-direction:column;overflow:hidden;box-sizing:border-box;block-size:100%;border-radius:var(--ngx-panel-radius, 2rem);padding-block:var(--ngx-panel-padding-block, .25rem);background-color:var(--mat-sys-surface-container-lowest);min-width:min-content}ngx-panel[appearance=transparent]{background-color:transparent}ngx-panel .content{overflow:auto;display:flex;flex-direction:column;gap:var(--ngx-panel-content-gap, .5rem);padding-inline:var(--ngx-panel-content-padding-inline, .5rem);padding-block-end:var(--ngx-panel-content-padding-block-end, .75rem);flex:1}ngx-panel .content.no-padding{padding:0}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
490
+ }
491
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.1", ngImport: i0, type: NgxPanelComponent, decorators: [{
492
+ type: Component,
493
+ args: [{ selector: 'ngx-panel', encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, host: {
494
+ // eslint-disable-next-line @typescript-eslint/naming-convention
495
+ '[attr.appearance]': 'this.appearance()'
496
+ }, template: "<ng-content select=\"ngx-panel-bar\"></ng-content>\n<section class=\"content\" [class.no-padding]=\"contentPadding() === 'none'\">\n <ng-content></ng-content>\n</section>\n", styles: ["ngx-panel{display:flex;flex-direction:column;overflow:hidden;box-sizing:border-box;block-size:100%;border-radius:var(--ngx-panel-radius, 2rem);padding-block:var(--ngx-panel-padding-block, .25rem);background-color:var(--mat-sys-surface-container-lowest);min-width:min-content}ngx-panel[appearance=transparent]{background-color:transparent}ngx-panel .content{overflow:auto;display:flex;flex-direction:column;gap:var(--ngx-panel-content-gap, .5rem);padding-inline:var(--ngx-panel-content-padding-inline, .5rem);padding-block-end:var(--ngx-panel-content-padding-block-end, .75rem);flex:1}ngx-panel .content.no-padding{padding:0}\n"] }]
497
+ }], propDecorators: { appearance: [{ type: i0.Input, args: [{ isSignal: true, alias: "appearance", required: false }] }], contentPadding: [{ type: i0.Input, args: [{ isSignal: true, alias: "contentPadding", required: false }] }] } });
498
+
499
+ class NgxPanelBarComponent {
500
+ // inputs
501
+ hasBackButton = input(...(ngDevMode ? [undefined, { debugName: "hasBackButton" }] : []));
502
+ closable = input(...(ngDevMode ? [undefined, { debugName: "closable" }] : []));
503
+ // output
504
+ backClicked = output();
505
+ closeClicked = output();
506
+ intl = inject(NgxLayoutIntl, { optional: true });
507
+ hasRightContent = computed(() => !!((this.searchBarContainer() ?? this.filtersGroup()) ?? this.closable()), ...(ngDevMode ? [{ debugName: "hasRightContent" }] : []));
508
+ filtersGroup = contentChild(NgxFiltersGroupComponent, ...(ngDevMode ? [{ debugName: "filtersGroup" }] : []));
509
+ searchBarContainer = contentChild(NgxSearchBarContainerComponent, ...(ngDevMode ? [{ debugName: "searchBarContainer" }] : []));
510
+ emitBackClicked() {
511
+ this.backClicked.emit();
512
+ }
513
+ emitCloseClicked() {
514
+ this.closeClicked.emit();
515
+ }
516
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.1", ngImport: i0, type: NgxPanelBarComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
517
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.1.1", type: NgxPanelBarComponent, isStandalone: true, selector: "ngx-panel-bar", inputs: { hasBackButton: { classPropertyName: "hasBackButton", publicName: "hasBackButton", isSignal: true, isRequired: false, transformFunction: null }, closable: { classPropertyName: "closable", publicName: "closable", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { backClicked: "backClicked", closeClicked: "closeClicked" }, queries: [{ propertyName: "filtersGroup", first: true, predicate: NgxFiltersGroupComponent, descendants: true, isSignal: true }, { propertyName: "searchBarContainer", first: true, predicate: NgxSearchBarContainerComponent, descendants: true, isSignal: true }], ngImport: i0, template: "@if (hasBackButton()) {\n <button\n mat-icon-button\n aria-label=\"Back button\"\n matTooltip=\"{{ intl?.back ?? 'Back' }}\"\n (click)=\"emitBackClicked()\">\n <mat-icon>arrow_back</mat-icon>\n </button>\n}\n\n<ng-content select=\"h1,h2,h3,h4,h5,h6\"></ng-content>\n<ng-content select=\"ngx-actions-group\"></ng-content>\n\n@if (hasRightContent()) {\n <div class=\"right\">\n <ng-content select=\"ngx-filters-group\"></ng-content>\n <ng-content select=\"ngx-search-bar-container\"></ng-content>\n @if (closable()) {\n <button\n mat-icon-button\n class=\"close-button\"\n aria-label=\"Close button\"\n matTooltip=\"{{ intl?.close ?? 'Close' }}\"\n (click)=\"emitCloseClicked()\">\n <mat-icon>close</mat-icon>\n </button>\n }\n </div>\n}\n", styles: ["ngx-panel-bar{display:flex;align-items:center;padding:var(--ngx-panel-bar-padding, .25rem .5rem);gap:var(--ngx-panel-bar-gap, .75rem);min-height:var(--ngx-panel-bar-min-height, 3rem);flex-wrap:nowrap}ngx-panel-bar h1,ngx-panel-bar h2,ngx-panel-bar h3,ngx-panel-bar h4,ngx-panel-bar h5,ngx-panel-bar h6{flex:1;white-space:nowrap;margin:0;font:var(--mat-sys-title-large);letter-spacing:var(--mat-sys-title-large-tracking);color:var(--mat-sys-on-surface-variant);overflow:hidden;min-width:var(--ngx-panel-bar-title-min-width, 6ch);text-overflow:ellipsis}ngx-panel-bar h1:first-child,ngx-panel-bar h2:first-child,ngx-panel-bar h3:first-child,ngx-panel-bar h4:first-child,ngx-panel-bar h5:first-child,ngx-panel-bar h6:first-child{padding-inline-start:var(--ngx-panel-bar-title-first-child-padding-start, .25rem)}ngx-panel-bar:has(h1,h2,h3,h4,h5,h6) ngx-actions-group{justify-content:flex-end}ngx-panel-bar .right,ngx-panel-bar ngx-actions-group{display:flex;align-items:center;gap:var(--ngx-panel-bar-elements-gap, .75rem)}ngx-panel-bar .right{flex:1;justify-content:flex-end}ngx-panel-bar ngx-actions-group{flex:1;min-inline-size:var(--ngx-panel-bar-actions-group-min-inline-size, 3rem)}\n"], dependencies: [{ kind: "component", type: MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: MatIconButton, selector: "button[mat-icon-button], a[mat-icon-button], button[matIconButton], a[matIconButton]", exportAs: ["matButton", "matAnchor"] }, { kind: "directive", type: MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
518
+ }
519
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.1", ngImport: i0, type: NgxPanelBarComponent, decorators: [{
520
+ type: Component,
521
+ args: [{ selector: 'ngx-panel-bar', encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, imports: [MatIcon, MatIconButton, MatTooltip], template: "@if (hasBackButton()) {\n <button\n mat-icon-button\n aria-label=\"Back button\"\n matTooltip=\"{{ intl?.back ?? 'Back' }}\"\n (click)=\"emitBackClicked()\">\n <mat-icon>arrow_back</mat-icon>\n </button>\n}\n\n<ng-content select=\"h1,h2,h3,h4,h5,h6\"></ng-content>\n<ng-content select=\"ngx-actions-group\"></ng-content>\n\n@if (hasRightContent()) {\n <div class=\"right\">\n <ng-content select=\"ngx-filters-group\"></ng-content>\n <ng-content select=\"ngx-search-bar-container\"></ng-content>\n @if (closable()) {\n <button\n mat-icon-button\n class=\"close-button\"\n aria-label=\"Close button\"\n matTooltip=\"{{ intl?.close ?? 'Close' }}\"\n (click)=\"emitCloseClicked()\">\n <mat-icon>close</mat-icon>\n </button>\n }\n </div>\n}\n", styles: ["ngx-panel-bar{display:flex;align-items:center;padding:var(--ngx-panel-bar-padding, .25rem .5rem);gap:var(--ngx-panel-bar-gap, .75rem);min-height:var(--ngx-panel-bar-min-height, 3rem);flex-wrap:nowrap}ngx-panel-bar h1,ngx-panel-bar h2,ngx-panel-bar h3,ngx-panel-bar h4,ngx-panel-bar h5,ngx-panel-bar h6{flex:1;white-space:nowrap;margin:0;font:var(--mat-sys-title-large);letter-spacing:var(--mat-sys-title-large-tracking);color:var(--mat-sys-on-surface-variant);overflow:hidden;min-width:var(--ngx-panel-bar-title-min-width, 6ch);text-overflow:ellipsis}ngx-panel-bar h1:first-child,ngx-panel-bar h2:first-child,ngx-panel-bar h3:first-child,ngx-panel-bar h4:first-child,ngx-panel-bar h5:first-child,ngx-panel-bar h6:first-child{padding-inline-start:var(--ngx-panel-bar-title-first-child-padding-start, .25rem)}ngx-panel-bar:has(h1,h2,h3,h4,h5,h6) ngx-actions-group{justify-content:flex-end}ngx-panel-bar .right,ngx-panel-bar ngx-actions-group{display:flex;align-items:center;gap:var(--ngx-panel-bar-elements-gap, .75rem)}ngx-panel-bar .right{flex:1;justify-content:flex-end}ngx-panel-bar ngx-actions-group{flex:1;min-inline-size:var(--ngx-panel-bar-actions-group-min-inline-size, 3rem)}\n"] }]
522
+ }], propDecorators: { hasBackButton: [{ type: i0.Input, args: [{ isSignal: true, alias: "hasBackButton", required: false }] }], closable: [{ type: i0.Input, args: [{ isSignal: true, alias: "closable", required: false }] }], backClicked: [{ type: i0.Output, args: ["backClicked"] }], closeClicked: [{ type: i0.Output, args: ["closeClicked"] }], filtersGroup: [{ type: i0.ContentChild, args: [i0.forwardRef(() => NgxFiltersGroupComponent), { isSignal: true }] }], searchBarContainer: [{ type: i0.ContentChild, args: [i0.forwardRef(() => NgxSearchBarContainerComponent), { isSignal: true }] }] } });
523
+
489
524
  /**
490
525
  * Generated bundle index. Do not edit.
491
526
  */
492
527
 
493
- export { NgxActionsGroupComponent, NgxAppBarComponent, NgxFilterDirective, NgxFilterToggleDirective, NgxFiltersGroupComponent, NgxLayoutComponent, NgxLayoutIntl, NgxMainBarComponent, NgxPanelComponent, NgxSearchBarContainerComponent, NgxSearchInputDirective, provideNgxLayout };
528
+ export { NgxActionsGroupComponent, NgxAppBarComponent, NgxColumnBarComponent, NgxFilterDirective, NgxFilterToggleDirective, NgxFiltersGroupComponent, NgxLayoutComponent, NgxLayoutIntl, NgxMainBarComponent, NgxPanelBarComponent, NgxPanelComponent, NgxSearchBarContainerComponent, NgxSearchInputDirective, provideNgxLayout };
494
529
  //# sourceMappingURL=hug-ngx-layout.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"hug-ngx-layout.mjs","sources":["../../../projects/layout/src/providers/ngx-layout-intl.ts","../../../projects/layout/src/providers/index.ts","../../../projects/layout/src/actions-group/actions-group.component.ts","../../../projects/layout/src/actions-group/actions-group.component.html","../../../projects/layout/src/app-bar/app-bar.component.ts","../../../projects/layout/src/app-bar/app-bar.component.html","../../../projects/layout/src/filters-group/filter-chip.model.ts","../../../projects/layout/src/filters-group/filter-chip.directive.ts","../../../projects/layout/src/filters-group/filter-toggle.directive.ts","../../../projects/layout/src/filters-group/filters-group.component.ts","../../../projects/layout/src/filters-group/filters-group.component.html","../../../projects/layout/src/layout.component.ts","../../../projects/layout/src/layout.component.html","../../../projects/layout/src/main-bar/main-bar.component.ts","../../../projects/layout/src/main-bar/main-bar.component.html","../../../projects/layout/src/panel/panel.component.ts","../../../projects/layout/src/panel/panel.component.html","../../../projects/layout/src/search-bar-container/directives/search-input.directive.ts","../../../projects/layout/src/search-bar-container/search-bar-container.component.ts","../../../projects/layout/src/search-bar-container/search-bar-container.component.html","../../../projects/layout/src/hug-ngx-layout.ts"],"sourcesContent":["import { Injectable } from '@angular/core';\nimport { NgxAbstractIntl } from '@hug/ngx-core';\n/**\n * Data for internationalization\n */\n@Injectable()\nexport class NgxLayoutIntl extends NgxAbstractIntl<NgxLayoutIntl> {\n public help = '';\n public back = '';\n public deleteSearch = '';\n public openSearchBar = '';\n public moreActions = '';\n public allFilters = '';\n public filters = '';\n public actives = '';\n public reset = '';\n public close = '';\n}\n","import { EnvironmentProviders } from '@angular/core';\nimport { 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 = (\n options?: NgxOptionsIntl<NgxLayoutIntl>\n): EnvironmentProviders =>\n provideNgxIntl(\n NgxLayoutIntl,\n options?.translationsPath ?? 'translations/ngx-layout',\n options?.customIntl ?? NgxLayoutIntl\n );\n","import { ChangeDetectionStrategy, Component, computed, contentChildren, effect, ElementRef, inject, Renderer2, type Signal, signal, viewChild, ViewEncapsulation } from '@angular/core';\nimport { MatIconButton } from '@angular/material/button';\nimport { MatIcon } from '@angular/material/icon';\nimport { MatMenu, MatMenuTrigger } from '@angular/material/menu';\nimport { MatTooltip } from '@angular/material/tooltip';\n\nimport { NgxLayoutIntl } from '../providers';\n\nconst buttonGap = 12;\nconst buttonDimensions = 40;\n\n/**\n *\n * @param element\n * @param destroyRef\n * @param box\n * @param defaultSize\n */\nconst resizeSignal = (\n element: () => ElementRef<HTMLElement> | undefined,\n box: ResizeObserverBoxOptions = 'border-box'\n): Signal<ResizeObserverEntry | undefined> => {\n\n const value = signal<ResizeObserverEntry | undefined>(undefined);\n\n effect(onCleanup => {\n const el = element()?.nativeElement;\n if (!el) {\n return;\n }\n\n const initialValue: ResizeObserverEntry = {\n borderBoxSize: [],\n contentRect: new DOMRect(),\n contentBoxSize: [],\n devicePixelContentBoxSize: [],\n target: el\n };\n\n value.set(initialValue);\n\n const ro = new ResizeObserver(entries => {\n value.set(entries[0] || initialValue);\n });\n\n ro.observe(el, { box });\n onCleanup(() => {\n ro.disconnect();\n });\n });\n\n return value;\n};\n\n@Component({\n selector: 'ngx-actions-group',\n templateUrl: './actions-group.component.html',\n styleUrl: './actions-group.component.scss',\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [\n MatIcon,\n MatIconButton,\n MatTooltip,\n MatMenu,\n MatMenuTrigger\n ]\n})\nexport class NgxActionsGroupComponent {\n protected readonly hiddenActions = computed(() => {\n const maxVisible = this.getMaxVisibleAction(this.hostWidth());\n return this.iconButtons().slice(maxVisible);\n });\n\n protected readonly intl = inject(NgxLayoutIntl, { optional: true });\n\n private readonly iconButtons = contentChildren<MatIconButton, ElementRef<HTMLElement>>(MatIconButton, { read: ElementRef });\n\n private readonly container = viewChild.required<ElementRef<HTMLElement>>('container');\n private readonly hiddenContainer = viewChild.required<ElementRef<HTMLElement>>('hiddenContainer');\n\n private readonly hostElement = inject<ElementRef<HTMLElement>>(ElementRef);\n private readonly renderer = inject(Renderer2);\n\n private readonly hostSize = resizeSignal(() => this.hostElement);\n private readonly hostWidth = computed(() => Math.ceil(this.hostSize()?.contentRect.width || 0));\n\n private readonly visibleActions = computed(() => {\n const maxVisible = this.getMaxVisibleAction(this.hostWidth());\n return this.iconButtons().slice(0, maxVisible);\n });\n\n public constructor() {\n\n effect(() => {\n const buttons = this.iconButtons();\n\n if (buttons.length === 0) {\n return;\n }\n\n const visibleButtons = this.visibleActions();\n const containerEl = this.container();\n visibleButtons.forEach(button => {\n const element = button.nativeElement;\n containerEl.nativeElement.appendChild(element);\n });\n\n const hiddenButtons = this.hiddenActions();\n const hiddenContainerEl = this.hiddenContainer();\n if (hiddenButtons.length > 0) {\n hiddenButtons.forEach(button => {\n const element = button.nativeElement;\n\n const hasMenu =\n element.classList.contains('mat-mdc-menu-trigger');\n\n if (hasMenu) {\n this.renderer.listen(element, 'click', (event: MouseEvent) => {\n event.stopPropagation();\n });\n }\n\n hiddenContainerEl.nativeElement.appendChild(element);\n });\n }\n });\n }\n\n private getMaxVisibleAction(width: number): number {\n\n const maxNumberOfActions = Math.floor(width / (buttonDimensions + buttonGap));\n\n const maxVisibleActions = Math.max(1, maxNumberOfActions);\n\n const totalButtons = this.iconButtons().length;\n\n if (maxVisibleActions >= totalButtons) {\n return totalButtons;\n }\n\n // -1 => Allows for the more button to be displayed\n return maxVisibleActions - 1;\n }\n}\n","<div #container class=\"container\">\n <ng-content></ng-content>\n @if (hiddenActions().length > 0) {\n <button\n matIconButton\n class=\"more-actions-button\"\n [matMenuTriggerFor]=\"menuActionsGroup\"\n matTooltip=\"{{ intl?.moreActions ?? 'More actions' }}\">\n <mat-icon>more_horiz</mat-icon>\n </button>\n }\n <mat-menu #menuActionsGroup=\"matMenu\" class=\"actions-group-menu\">\n <div #hiddenContainer></div>\n </mat-menu>\n</div>\n","import { ChangeDetectionStrategy, Component, inject, input, output, ViewEncapsulation } from '@angular/core';\nimport { MatIconButton } from '@angular/material/button';\nimport { MatIcon } from '@angular/material/icon';\nimport { MatTooltip } from '@angular/material/tooltip';\n\nimport { NgxLayoutIntl } from '../providers';\n\ntype AppBarMode = 'standard' | 'condensed';\n\n@Component({\n selector: 'ngx-app-bar',\n templateUrl: './app-bar.component.html',\n styleUrl: './app-bar.component.scss',\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [MatIcon, MatIconButton, MatTooltip],\n host: {\n // eslint-disable-next-line @typescript-eslint/naming-convention\n '[class.condensed]': 'mode()===\"condensed\"'\n }\n})\nexport class NgxAppBarComponent {\n public mode = input<AppBarMode>('standard');\n public title = input.required<string>();\n public subtitle = input<string>();\n public helpUrl = input<string | URL>();\n public withBackIcon = input<boolean>(false);\n\n public readonly goBack = output();\n\n protected readonly intl = inject(NgxLayoutIntl, { optional: true });\n\n private helpPopup: Window | undefined;\n\n protected openHelp(): void {\n const params = [\n `height=${screen.height}`,\n `width=${screen.width}`,\n 'fullscreen=yes'\n ].join(',');\n\n if (this.helpPopup) {\n this.helpPopup.close();\n }\n\n this.helpPopup = window.open(this.helpUrl(), 'help_popup', params) ?? undefined;\n this.helpPopup?.moveTo(0, 0);\n }\n\n protected triggerGoBack(): void {\n this.goBack.emit();\n }\n}\n","@if (withBackIcon()) {\n <button matIconButton matTooltip=\"{{ intl?.back ?? 'Back' }}\" (click)=\"triggerGoBack()\">\n <mat-icon>arrow_back</mat-icon>\n </button>\n}\n\n<header class=\"{{ mode() }}\">\n <h1 class=\"title\">{{ title() }}</h1>\n @if (subtitle()) {\n @if (mode() === 'condensed') {\n <mat-icon>chevron_right</mat-icon>\n }\n <h2 class=\"subtitle\">{{ subtitle() }}</h2>\n }\n</header>\n\n<section class=\"actions\">\n <ng-content />\n @if (helpUrl()) {\n <button matIconButton matTooltip=\"{{ intl?.help ?? 'Help' }}\" (click)=\"openHelp()\">\n <mat-icon>help</mat-icon>\n </button>\n }\n</section>\n","import { InjectionToken, type InputSignal, type ModelSignal, type TemplateRef } from '@angular/core';\n\nexport type FilterType = 'toggle' | 'complex';\n\ninterface NgxBaseFilter {\n readonly label: InputSignal<string>;\n readonly active: InputSignal<boolean>;\n readonly type: FilterType;\n}\n\nexport interface NgxToggleFilter extends NgxBaseFilter {\n readonly type: 'toggle';\n readonly active: ModelSignal<boolean>;\n}\n\nexport interface NgxComplexFilter extends NgxBaseFilter {\n readonly selectedFilterLabel: InputSignal<string>;\n readonly templateRef: TemplateRef<unknown>;\n readonly type: 'complex';\n}\n\nexport type NgxFilter = NgxToggleFilter | NgxComplexFilter;\n\n// eslint-disable-next-line @typescript-eslint/naming-convention\nexport const FILTER_TOKEN = new InjectionToken<NgxFilter>('FILTER_TOKEN');\n","import { Directive, forwardRef, inject, input, TemplateRef } from '@angular/core';\n\nimport { FILTER_TOKEN, type NgxComplexFilter } from './filter-chip.model';\n\n\n@Directive({\n selector: 'ng-template[ngx-filter]',\n standalone: true,\n providers: [{ provide: FILTER_TOKEN, useExisting: forwardRef(() => NgxFilterDirective) }]\n\n})\nexport class NgxFilterDirective implements NgxComplexFilter {\n public readonly type = 'complex';\n public readonly label = input.required<string>();\n public readonly active = input.required<boolean>();\n public readonly selectedFilterLabel = input('');\n public readonly templateRef = inject<TemplateRef<unknown>>(TemplateRef);\n}\n","import { Directive, forwardRef, input, model } from '@angular/core';\n\nimport { FILTER_TOKEN, type NgxToggleFilter } from './filter-chip.model';\n\n\n@Directive({\n selector: 'ng-template[ngx-filter-toggle]',\n standalone: true,\n providers: [{ provide: FILTER_TOKEN, useExisting: forwardRef(() => NgxFilterToggleDirective) }]\n})\nexport class NgxFilterToggleDirective implements NgxToggleFilter {\n public readonly type = 'toggle';\n public readonly label = input.required<string>();\n public readonly active = model.required<boolean>();\n}\n","import { CdkConnectedOverlay, CdkOverlayOrigin, type ConnectionPositionPair } from '@angular/cdk/overlay';\nimport { LowerCasePipe, NgTemplateOutlet } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, computed, contentChildren, effect, ElementRef, inject, input, output, type Signal, signal, type TemplateRef, viewChild, ViewEncapsulation } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { MatBadge } from '@angular/material/badge';\nimport { MatIconButton } from '@angular/material/button';\nimport { MatChip, MatChipOption, MatChipSet, MatChipTrailingIcon } from '@angular/material/chips';\nimport { MatIcon } from '@angular/material/icon';\nimport { MatSlideToggle } from '@angular/material/slide-toggle';\nimport { MatTooltip } from '@angular/material/tooltip';\n\nimport { NgxLayoutIntl } from '../providers';\nimport { FILTER_TOKEN } from './filter-chip.model';\n\nconst resizeSignal = (\n element: () => ElementRef<HTMLElement> | undefined,\n box: ResizeObserverBoxOptions = 'border-box'\n): Signal<ResizeObserverEntry | undefined> => {\n\n const value = signal<ResizeObserverEntry | undefined>(undefined);\n\n effect(onCleanup => {\n const el = element()?.nativeElement;\n if (!el) {\n return;\n }\n\n const initialValue: ResizeObserverEntry = {\n borderBoxSize: [],\n contentRect: new DOMRect(),\n contentBoxSize: [],\n devicePixelContentBoxSize: [],\n target: el\n };\n\n value.set(initialValue);\n\n const ro = new ResizeObserver(entries => {\n value.set(entries[0] || initialValue);\n });\n\n ro.observe(el, { box });\n onCleanup(() => {\n ro.disconnect();\n });\n });\n\n return value;\n};\n\n@Component({\n selector: 'ngx-filters-group',\n templateUrl: './filters-group.component.html',\n styleUrl: './filters-group.component.scss',\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [\n MatIcon,\n MatIconButton,\n MatChip,\n MatChipOption,\n MatChipTrailingIcon,\n MatChipSet,\n MatTooltip,\n NgTemplateOutlet,\n CdkConnectedOverlay,\n CdkOverlayOrigin,\n MatSlideToggle,\n FormsModule,\n MatBadge,\n LowerCasePipe\n ]\n})\nexport class NgxFiltersGroupComponent {\n public readonly resetFilters = output();\n public readonly folded = input<boolean>();\n\n protected readonly intl = inject(NgxLayoutIntl, { optional: true });\n\n // #region Overlay\n protected readonly overlayOrigin = signal<CdkOverlayOrigin | undefined>(undefined);\n protected readonly overlayContent = signal<TemplateRef<unknown> | undefined>(undefined);\n protected readonly overlayOpen = signal<boolean>(false);\n protected readonly moreFiltersOverlay = signal<boolean>(false);\n protected readonly overlayPositions: ConnectionPositionPair[] = [{\n originX: 'center',\n originY: 'bottom',\n overlayX: 'center',\n overlayY: 'top',\n offsetY: 16\n }, {\n originX: 'end',\n originY: 'bottom',\n overlayX: 'end',\n overlayY: 'top',\n offsetY: 16\n }];\n // #endregion\n\n // #region Filters\n protected allFilters = contentChildren(FILTER_TOKEN);\n protected readonly activeFiltersAmount = computed(() => this.invisibleFilters().filter(filter => filter.active()).length);\n\n protected readonly visibleFilters = computed(() => {\n const lastFittingIndex = this.lastFittingIndex();\n if (lastFittingIndex < 0) {\n return [];\n }\n\n return this.allFilters().slice(0, lastFittingIndex);\n });\n\n protected readonly invisibleFilters = computed(() => {\n const lastFittingIndex = this.lastFittingIndex();\n if (lastFittingIndex < 0) {\n return this.allFilters();\n }\n\n return this.allFilters().slice(lastFittingIndex);\n });\n\n private readonly filterContainerRef = viewChild.required<ElementRef<HTMLElement>>('container');\n private readonly filterContainerPadding = computed(() => Number.parseFloat(globalThis.getComputedStyle(this.filterContainerRef().nativeElement).paddingInline));\n\n // #endregion\n\n // #region Host\n private readonly hostElement = inject<ElementRef<HTMLElement>>(ElementRef);\n private readonly hostSize = resizeSignal(() => this.hostElement);\n private readonly hostWidth = computed(() => Math.ceil(this.hostSize()?.contentRect.width || 0));\n // #endregion\n\n // #region MeasureRow\n private readonly measureRowRef = viewChild<ElementRef<HTMLElement>>('measureRow');\n private readonly measureRowSize = resizeSignal(() => this.measureRowRef());\n private readonly measureRowWidth = computed(() => Math.ceil(this.measureRowSize()?.contentRect.width || 0));\n // #endregion\n\n // #region StaticFields\n private readonly staticFieldsRef = viewChild<ElementRef<HTMLElement>>('static');\n private readonly staticFieldsSize = resizeSignal(() => this.staticFieldsRef());\n private readonly staticFieldsWidth = computed(() => Math.ceil(this.staticFieldsSize()?.contentRect.width || 0));\n // #endregion\n\n private readonly lastFittingIndex = computed(() => {\n const hostWidth = this.hostWidth();\n if (!hostWidth) {\n return -1;\n }\n\n const availableSpace = hostWidth - (this.staticFieldsWidth() + (2 * this.filterContainerPadding()));\n const filters = Array.from(this.measureRowRef()?.nativeElement.querySelectorAll<HTMLElement>('mat-chip-option') ?? []);\n\n if (availableSpace - this.measureRowWidth() >= 0) {\n return filters.length;\n }\n\n return this.getLastFittingIndex(availableSpace, filters);\n });\n\n protected emitResetClicked(): void {\n this.resetFilters.emit();\n }\n\n private getLastFittingIndex(availableSpace: number, elements: readonly HTMLElement[]): number {\n const firstEl = elements[0];\n\n if (!firstEl || availableSpace <= 0 || availableSpace - firstEl.offsetWidth < 0) {\n return -1;\n }\n\n let residualAvailableSpace = availableSpace;\n\n const lastFittingIndex = elements.findIndex(el => {\n residualAvailableSpace -= el.offsetWidth + 16;\n return residualAvailableSpace <= 0;\n });\n\n return lastFittingIndex >= 0 ? lastFittingIndex : elements.length - 1;\n }\n}\n","@if (folded()) {\n <section\n class=\"filter-container\"\n #container\n [matBadge]=\"activeFiltersAmount()\"\n [matBadgeHidden]=\"activeFiltersAmount() <= 0\">\n <button\n mat-icon-button\n aria-label=\"All filters\"\n cdkOverlayOrigin\n #trigger=\"cdkOverlayOrigin\"\n (click)=\"\n this.overlayOrigin.set(trigger);\n this.overlayContent.set(moreFilters);\n this.overlayOpen.set(true);\n this.moreFiltersOverlay.set(true)\n \"\n matTooltip=\"{{ intl?.allFilters ?? 'All filters' }}\">\n <mat-icon>filter_alt</mat-icon>\n </button>\n </section>\n} @else {\n @if (allFilters()) {\n <section #measureRow class=\"measure-row\">\n <mat-chip-set>\n @for (f of allFilters(); track $index) {\n <mat-chip-option [selectable]=\"false\" [selected]=\"f.active()\">\n {{ f.label() }}\n @if (f.type === 'complex' && f.selectedFilterLabel()) {\n <span class=\"selected-label\">: {{ f.selectedFilterLabel() }}</span>\n }\n @if (f.type === 'complex') {\n <mat-icon matChipTrailingIcon>arrow_drop_down</mat-icon>\n }\n </mat-chip-option>\n }\n <mat-chip #overflowMeasure>\n +00 {{ intl?.filters ?? 'Filters' | lowercase }} (00 {{ intl?.actives ?? 'Actives' | lowercase }})\n <mat-icon matChipTrailingIcon>arrow_drop_down</mat-icon>\n </mat-chip>\n </mat-chip-set>\n </section>\n }\n\n <section class=\"filter-container\" #container>\n <mat-chip-set>\n @if (this.visibleFilters().length) {\n @for (f of visibleFilters(); track $index) {\n @if (f.type === 'toggle') {\n <mat-chip-option\n selectable=\"true\"\n [selected]=\"f.active()\"\n (selectionChange)=\"f.active.set($event.selected)\">\n {{ f.label() }}\n </mat-chip-option>\n } @else {\n <mat-chip-option\n [selectable]=\"false\"\n [selected]=\"f.active()\"\n cdkOverlayOrigin\n #trigger=\"cdkOverlayOrigin\"\n (click)=\"\n this.overlayOrigin.set(trigger);\n this.overlayContent.set(f.templateRef);\n this.overlayOpen.set(true);\n this.moreFiltersOverlay.set(false)\n \">\n {{ f.label() }}\n @if (f.selectedFilterLabel()) {\n <span class=\"selected-label\">: {{ f.selectedFilterLabel() }}</span>\n }\n <mat-icon\n [class.is-overlay-open]=\"this.overlayOpen() && this.overlayContent() === f.templateRef\"\n matChipTrailingIcon>\n arrow_drop_down\n </mat-icon>\n </mat-chip-option>\n }\n }\n }\n </mat-chip-set>\n <section class=\"static\" #static>\n @if (invisibleFilters().length; as invisibleFiltersAmount) {\n <mat-chip-set>\n <mat-chip\n cdkOverlayOrigin\n [class.filter-active]=\"activeFiltersAmount()\"\n #trigger=\"cdkOverlayOrigin\"\n (click)=\"\n this.overlayOrigin.set(trigger);\n this.overlayContent.set(moreFilters);\n this.overlayOpen.set(true);\n this.moreFiltersOverlay.set(true)\n \">\n +{{ invisibleFiltersAmount }} {{ intl?.filters ?? 'Filters' | lowercase }} ({{\n activeFiltersAmount()\n }}\n {{ intl?.actives ?? 'Actives' | lowercase }})\n <mat-icon\n [class.is-overlay-open]=\"this.overlayOpen() && this.overlayContent() === moreFilters\"\n matChipTrailingIcon>\n arrow_drop_down\n </mat-icon>\n </mat-chip>\n </mat-chip-set>\n }\n <button\n mat-icon-button\n aria-label=\"Reset filters\"\n (click)=\"emitResetClicked()\"\n matTooltip=\"{{ intl?.reset ?? 'Reset' }}\">\n <mat-icon>settings_backup_restore</mat-icon>\n </button>\n </section>\n </section>\n}\n\n<ng-template #moreFilters>\n @if (allFilters()) {\n @for (f of allFilters(); track $index) {\n @if (f.type === 'toggle') {\n <section class=\"filter\">\n <mat-slide-toggle labelPosition=\"before\" [(ngModel)]=\"f.active\">\n {{ f.label() }}\n </mat-slide-toggle>\n </section>\n } @else {\n <section class=\"filter\">\n <div class=\"title\">\n <span class=\"label\">{{ f.label() }}</span>\n <span class=\"value\">{{ f.selectedFilterLabel() }}</span>\n </div>\n @if (f.templateRef) {\n <ng-container *ngTemplateOutlet=\"f.templateRef\"></ng-container>\n }\n </section>\n }\n }\n }\n</ng-template>\n\n@let overlayOrigin = this.overlayOrigin();\n@let overlayOpen = this.overlayOpen();\n@let overlayContent = this.overlayContent();\n@if (overlayOrigin && overlayOpen && overlayContent) {\n <ng-template\n cdkConnectedOverlay\n [cdkConnectedOverlayOrigin]=\"overlayOrigin\"\n [cdkConnectedOverlayOpen]=\"overlayOpen\"\n (detach)=\"this.overlayOpen.set(false)\"\n cdkConnectedOverlayHasBackdrop=\"true\"\n backdrop\n (backdropClick)=\"this.overlayOpen.set(false)\"\n cdkConnectedOverlayPanelClass=\"filter-group--overlay\"\n cdkConnectedOverlayBackdropClass=\"filter-group--overlay--backdrop--transparent\"\n [cdkConnectedOverlayPositions]=\"overlayPositions\"\n [cdkConnectedOverlayFlexibleDimensions]=\"true\"\n [cdkConnectedOverlayGrowAfterOpen]=\"true\"\n [cdkConnectedOverlayFlexibleDimensions]=\"true\"\n [cdkConnectedOverlayViewportMargin]=\"32\">\n @if (moreFiltersOverlay()) {\n <div class=\"filters--title\">\n <span>{{ intl?.filters ?? 'Filters' }}</span>\n <button\n mat-icon-button\n aria-label=\"Reset filters\"\n (click)=\"emitResetClicked()\"\n matTooltip=\"{{ intl?.reset ?? 'Reset' }}\">\n <mat-icon>settings_backup_restore</mat-icon>\n </button>\n </div>\n }\n <div class=\"filters--content\">\n <ng-container *ngTemplateOutlet=\"overlayContent\"></ng-container>\n </div>\n </ng-template>\n}\n","import { ChangeDetectionStrategy, Component } from '@angular/core';\n\n\n@Component({\n selector: 'ngx-layout',\n templateUrl: './layout.component.html',\n styleUrl: './layout.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class NgxLayoutComponent {\n}\n","<ng-content select=\"ngx-app-bar\"></ng-content>\n<ng-content select=\"ngx-main-bar\"></ng-content>\n<!--\n The ng-content's is not clearly defined yet. The potential use-cases are:\n - Display GPD bars\n - Display warnings\n -->\n<ng-content></ng-content>\n<section class=\"content\">\n <ng-content select=\"ngx-panel\"></ng-content>\n</section>\n","import { ChangeDetectionStrategy, Component, ViewEncapsulation } from '@angular/core';\n\n\n@Component({\n selector: 'ngx-main-bar',\n templateUrl: './main-bar.component.html',\n styleUrl: './main-bar.component.scss',\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class NgxMainBarComponent { }\n","<ng-content select=\"ngx-actions-group\"></ng-content>\n\n<div class=\"right\">\n <ng-content select=\"ngx-filters-group\"></ng-content>\n <ng-content select=\"ngx-search-bar-container\"></ng-content>\n</div>\n","import { ChangeDetectionStrategy, Component, input, ViewEncapsulation } from '@angular/core';\n\ntype Appearance = 'transparent' | 'default';\ntype ContentPadding = 'none' | 'regular';\n\n@Component({\n selector: 'ngx-panel',\n templateUrl: './panel.component.html',\n styleUrl: './panel.component.scss',\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n // eslint-disable-next-line @typescript-eslint/naming-convention\n '[attr.appearance]': 'this.appearance()',\n // eslint-disable-next-line @typescript-eslint/naming-convention\n '[attr.content-padding]': 'this.contentPadding()'\n }\n})\nexport class NgxPanelComponent {\n public readonly appearance = input<Appearance | undefined>(undefined);\n public readonly contentPadding = input<ContentPadding | undefined>(undefined, { alias: 'content-padding' });\n}\n","<ng-content select=\"ngx-panel-bar[primary]\"></ng-content>\n<ng-content select=\"ngx-panel-bar\"></ng-content>\n<section class=\"content\">\n <ng-content></ng-content>\n</section>\n","import { Directive, ElementRef, inject, type Signal, signal } from '@angular/core';\nimport { toSignal } from '@angular/core/rxjs-interop';\nimport { type FormControl, NgControl } from '@angular/forms';\n\n@Directive({\n selector: 'input[ngx-search-input]',\n /* eslint-disable @typescript-eslint/naming-convention */\n host: {\n '(blur)': 'blurred.set(true);',\n '(focus)': 'blurred.set(false);'\n }\n})\nexport class NgxSearchInputDirective {\n public readonly blurred = signal<boolean>(false);\n public readonly value: Signal<string>;\n\n private readonly ngControl = inject(NgControl);\n private readonly input = inject<ElementRef<HTMLInputElement>>(ElementRef);\n private readonly control = this.ngControl.control as FormControl<string>;\n\n public constructor() {\n this.value = toSignal(this.control.valueChanges, { initialValue: '' });\n }\n\n public focus(): void {\n this.input.nativeElement.focus();\n }\n\n public reset(): void {\n this.control.reset();\n }\n}\n","import { afterRenderEffect, ChangeDetectionStrategy, Component, computed, contentChild, effect, inject, input, signal, untracked, ViewEncapsulation } from '@angular/core';\nimport { MatIconButton } from '@angular/material/button';\nimport { MatIcon } from '@angular/material/icon';\nimport { MatTooltip } from '@angular/material/tooltip';\n\nimport { NgxLayoutIntl } from '../providers';\nimport { NgxSearchInputDirective } from './directives/search-input.directive';\n\n// type SearchBarContainerSize = 'medium' | 'small';\n\n@Component({\n selector: 'ngx-search-bar-container',\n templateUrl: './search-bar-container.component.html',\n styleUrl: './search-bar-container.component.scss',\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [MatIcon, MatIconButton, MatTooltip]\n /*\n host: {\n '[class.small]': 'size()===\"small\"'\n }\n */\n})\nexport class NgxSearchBarContainerComponent {\n // inputs\n public readonly folded = input<boolean>(false);\n\n /*\n protected size = input<SearchBarContainerSize>('medium');\n protected sizeButtonAttributeName = input<string>();\n protected sizeButtonAttributeValue = input<string>();\n */\n\n protected readonly intl = inject(NgxLayoutIntl, { optional: true });\n\n protected readonly manualFoldingState = signal<boolean>(true);\n protected readonly isFolded = computed(() => this.folded() && this.manualFoldingState() && !this.searchText());\n\n protected readonly searchInput = contentChild(NgxSearchInputDirective);\n protected readonly searchText = computed(() => this.searchInput()?.value());\n\n /*\n private hostElement = inject(ElementRef);\n private renderer = inject(Renderer2);\n */\n\n public constructor() {\n\n /*\n afterRender(() => {\n const containerElement = this.hostElement.nativeElement;\n const buttons = containerElement.querySelectorAll('button') as NodeListOf<HTMLElement>;\n\n buttons.forEach((button: HTMLElement) => {\n if (this.sizeButtonAttributeName()?.trim() && this.sizeButtonAttributeValue()?.trim()) {\n this.renderer.setAttribute(button, this.sizeButtonAttributeName(), this.sizeButtonAttributeValue());\n }\n\n });\n });\n */\n\n afterRenderEffect(() => {\n const searchInput = this.searchInput();\n if (!searchInput) {\n return;\n }\n\n if (!this.isFolded()) {\n searchInput.focus();\n }\n });\n\n effect(() => {\n const baseFoldStatus = this.folded();\n\n if (baseFoldStatus) {\n const searchText = untracked(this.searchText);\n const blurred = this.searchInput()?.blurred();\n\n if (blurred && !searchText) {\n this.manualFoldingState.set(true);\n }\n }\n });\n }\n\n protected toggleFolded(): void {\n this.manualFoldingState.update(folded => !folded);\n }\n\n protected resetInput(): void {\n const searchInput = this.searchInput();\n\n if (!searchInput) {\n return;\n }\n\n searchInput.reset();\n searchInput.focus();\n }\n}\n\n","@if (isFolded()) {\n <button\n matIconButton\n aria-label=\"Open search bar\"\n (click)=\"toggleFolded()\"\n matTooltip=\"{{ intl?.openSearchBar ?? 'Open search bar' }}\">\n <mat-icon>search</mat-icon>\n </button>\n} @else {\n <ng-content select=\"[ngx-search-input]\"></ng-content>\n\n @if (searchText()) {\n <button\n matIconButton\n aria-label=\"Clear button\"\n (click)=\"resetInput()\"\n matTooltip=\"{{ intl?.deleteSearch ?? 'Clear search' }}\">\n <mat-icon>close</mat-icon>\n </button>\n } @else {\n <mat-icon class=\"icon-search-bar\" aria-hidden=\"false\" aria-label=\"Search icon\" fontIcon=\"search\" />\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["resizeSignal"],"mappings":"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"}
1
+ {"version":3,"file":"hug-ngx-layout.mjs","sources":["../../../projects/layout/src/providers/ngx-layout-intl.ts","../../../projects/layout/src/providers/index.ts","../../../projects/layout/src/actions-group/actions-group.component.ts","../../../projects/layout/src/actions-group/actions-group.component.html","../../../projects/layout/src/app-bar/app-bar.component.ts","../../../projects/layout/src/app-bar/app-bar.component.html","../../../projects/layout/src/filters-group/filter-chip.model.ts","../../../projects/layout/src/filters-group/filter-chip.directive.ts","../../../projects/layout/src/filters-group/filter-toggle.directive.ts","../../../projects/layout/src/filters-group/filters-group.component.ts","../../../projects/layout/src/filters-group/filters-group.component.html","../../../projects/layout/src/search-bar-container/directives/search-input.directive.ts","../../../projects/layout/src/search-bar-container/search-bar-container.component.ts","../../../projects/layout/src/search-bar-container/search-bar-container.component.html","../../../projects/layout/src/column-bar/column-bar.component.ts","../../../projects/layout/src/column-bar/column-bar.component.html","../../../projects/layout/src/layout.component.ts","../../../projects/layout/src/layout.component.html","../../../projects/layout/src/main-bar/main-bar.component.ts","../../../projects/layout/src/main-bar/main-bar.component.html","../../../projects/layout/src/panel/panel.component.ts","../../../projects/layout/src/panel/panel.component.html","../../../projects/layout/src/panel-bar/panel-bar.component.ts","../../../projects/layout/src/panel-bar/panel-bar.component.html","../../../projects/layout/src/hug-ngx-layout.ts"],"sourcesContent":["import { Injectable } from '@angular/core';\nimport { NgxAbstractIntl } from '@hug/ngx-core';\n/**\n * Data for internationalization\n */\n@Injectable()\nexport class NgxLayoutIntl extends NgxAbstractIntl<NgxLayoutIntl> {\n public help = '';\n public back = '';\n public deleteSearch = '';\n public openSearchBar = '';\n public moreActions = '';\n public allFilters = '';\n public filters = '';\n public actives = '';\n public reset = '';\n public close = '';\n}\n","import { EnvironmentProviders } from '@angular/core';\nimport { 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 = (\n options?: NgxOptionsIntl<NgxLayoutIntl>\n): EnvironmentProviders =>\n provideNgxIntl(\n NgxLayoutIntl,\n options?.translationsPath ?? 'translations/ngx-layout',\n options?.customIntl ?? NgxLayoutIntl\n );\n","import { ChangeDetectionStrategy, Component, computed, contentChildren, effect, ElementRef, inject, Renderer2, type Signal, signal, viewChild, ViewEncapsulation } from '@angular/core';\nimport { MatIconButton } from '@angular/material/button';\nimport { MatIcon } from '@angular/material/icon';\nimport { MatMenu, MatMenuTrigger } from '@angular/material/menu';\nimport { MatTooltip } from '@angular/material/tooltip';\n\nimport { NgxLayoutIntl } from '../providers';\n\nconst buttonGap = 12;\nconst buttonDimensions = 40;\n\n/**\n *\n * @param element\n * @param destroyRef\n * @param box\n * @param defaultSize\n */\nconst resizeSignal = (\n element: () => ElementRef<HTMLElement> | undefined,\n box: ResizeObserverBoxOptions = 'border-box'\n): Signal<ResizeObserverEntry | undefined> => {\n\n const value = signal<ResizeObserverEntry | undefined>(undefined);\n\n effect(onCleanup => {\n const el = element()?.nativeElement;\n if (!el) {\n return;\n }\n\n const initialValue: ResizeObserverEntry = {\n borderBoxSize: [],\n contentRect: new DOMRect(),\n contentBoxSize: [],\n devicePixelContentBoxSize: [],\n target: el\n };\n\n value.set(initialValue);\n\n const ro = new ResizeObserver(entries => {\n value.set(entries[0] || initialValue);\n });\n\n ro.observe(el, { box });\n onCleanup(() => {\n ro.disconnect();\n });\n });\n\n return value;\n};\n\n@Component({\n selector: 'ngx-actions-group',\n templateUrl: './actions-group.component.html',\n styleUrl: './actions-group.component.scss',\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [\n MatIcon,\n MatIconButton,\n MatTooltip,\n MatMenu,\n MatMenuTrigger\n ]\n})\nexport class NgxActionsGroupComponent {\n protected readonly hiddenActions = computed(() => {\n const maxVisible = this.getMaxVisibleAction(this.hostWidth());\n return this.iconButtons().slice(maxVisible);\n });\n\n protected readonly intl = inject(NgxLayoutIntl, { optional: true });\n\n private readonly iconButtons = contentChildren<MatIconButton, ElementRef<HTMLElement>>(MatIconButton, { read: ElementRef });\n\n private readonly container = viewChild.required<ElementRef<HTMLElement>>('container');\n private readonly hiddenContainer = viewChild.required<ElementRef<HTMLElement>>('hiddenContainer');\n\n private readonly hostElement = inject<ElementRef<HTMLElement>>(ElementRef);\n private readonly renderer = inject(Renderer2);\n\n private readonly hostSize = resizeSignal(() => this.hostElement);\n private readonly hostWidth = computed(() => Math.ceil(this.hostSize()?.contentRect.width || 0));\n\n private readonly visibleActions = computed(() => {\n const maxVisible = this.getMaxVisibleAction(this.hostWidth());\n return this.iconButtons().slice(0, maxVisible);\n });\n\n public constructor() {\n\n effect(() => {\n const buttons = this.iconButtons();\n\n if (buttons.length === 0) {\n return;\n }\n\n const visibleButtons = this.visibleActions();\n const containerEl = this.container();\n visibleButtons.forEach(button => {\n const element = button.nativeElement;\n containerEl.nativeElement.appendChild(element);\n });\n\n const hiddenButtons = this.hiddenActions();\n const hiddenContainerEl = this.hiddenContainer();\n if (hiddenButtons.length > 0) {\n hiddenButtons.forEach(button => {\n const element = button.nativeElement;\n\n const hasMenu =\n element.classList.contains('mat-mdc-menu-trigger');\n\n if (hasMenu) {\n this.renderer.listen(element, 'click', (event: MouseEvent) => {\n event.stopPropagation();\n });\n }\n\n hiddenContainerEl.nativeElement.appendChild(element);\n });\n }\n });\n }\n\n private getMaxVisibleAction(width: number): number {\n\n const maxNumberOfActions = Math.floor(width / (buttonDimensions + buttonGap));\n\n const maxVisibleActions = Math.max(1, maxNumberOfActions);\n\n const totalButtons = this.iconButtons().length;\n\n if (maxVisibleActions >= totalButtons) {\n return totalButtons;\n }\n\n // -1 => Allows for the more button to be displayed\n return maxVisibleActions - 1;\n }\n}\n","<div #container class=\"container\">\n <ng-content></ng-content>\n @if (hiddenActions().length > 0) {\n <button\n matIconButton\n class=\"more-actions-button\"\n [matMenuTriggerFor]=\"menuActionsGroup\"\n matTooltip=\"{{ intl?.moreActions ?? 'More actions' }}\">\n <mat-icon>more_horiz</mat-icon>\n </button>\n }\n <mat-menu #menuActionsGroup=\"matMenu\" class=\"actions-group-menu\">\n <div #hiddenContainer></div>\n </mat-menu>\n</div>\n","import { ChangeDetectionStrategy, Component, inject, input, output, ViewEncapsulation } from '@angular/core';\nimport { MatIconButton } from '@angular/material/button';\nimport { MatIcon } from '@angular/material/icon';\nimport { MatTooltip } from '@angular/material/tooltip';\n\nimport { NgxLayoutIntl } from '../providers';\n\ntype AppBarMode = 'standard' | 'condensed';\n\n@Component({\n selector: 'ngx-app-bar',\n templateUrl: './app-bar.component.html',\n styleUrl: './app-bar.component.scss',\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [MatIcon, MatIconButton, MatTooltip],\n host: {\n // eslint-disable-next-line @typescript-eslint/naming-convention\n '[class.condensed]': 'mode()===\"condensed\"'\n }\n})\nexport class NgxAppBarComponent {\n public mode = input<AppBarMode>('standard');\n public title = input.required<string>();\n public subtitle = input<string>();\n public helpUrl = input<string | URL>();\n public withBackButton = input<boolean>(false);\n\n public readonly goBack = output();\n\n protected readonly intl = inject(NgxLayoutIntl, { optional: true });\n\n private helpPopup: Window | undefined;\n\n protected openHelp(): void {\n const params = [\n `height=${screen.height}`,\n `width=${screen.width}`,\n 'fullscreen=yes'\n ].join(',');\n\n if (this.helpPopup) {\n this.helpPopup.close();\n }\n\n this.helpPopup = window.open(this.helpUrl(), 'help_popup', params) ?? undefined;\n this.helpPopup?.moveTo(0, 0);\n }\n\n protected triggerGoBack(): void {\n this.goBack.emit();\n }\n}\n","@if (withBackButton()) {\n <button matIconButton matTooltip=\"{{ intl?.back ?? 'Back' }}\" (click)=\"triggerGoBack()\">\n <mat-icon>arrow_back</mat-icon>\n </button>\n}\n\n<header class=\"{{ mode() }}\">\n <h1 class=\"title\">{{ title() }}</h1>\n @if (subtitle()) {\n @if (mode() === 'condensed') {\n <mat-icon>chevron_right</mat-icon>\n }\n <h2 class=\"subtitle\">{{ subtitle() }}</h2>\n }\n</header>\n\n<section class=\"actions\">\n <ng-content />\n @if (helpUrl()) {\n <button matIconButton matTooltip=\"{{ intl?.help ?? 'Help' }}\" (click)=\"openHelp()\">\n <mat-icon>help</mat-icon>\n </button>\n }\n</section>\n","import { InjectionToken, type InputSignal, type ModelSignal, type TemplateRef } from '@angular/core';\n\nexport type FilterType = 'toggle' | 'complex';\n\ninterface NgxBaseFilter {\n readonly label: InputSignal<string>;\n readonly active: InputSignal<boolean>;\n readonly type: FilterType;\n}\n\nexport interface NgxToggleFilter extends NgxBaseFilter {\n readonly type: 'toggle';\n readonly active: ModelSignal<boolean>;\n}\n\nexport interface NgxComplexFilter extends NgxBaseFilter {\n readonly selectedFilterLabel: InputSignal<string>;\n readonly templateRef: TemplateRef<unknown>;\n readonly type: 'complex';\n}\n\nexport type NgxFilter = NgxToggleFilter | NgxComplexFilter;\n\n// eslint-disable-next-line @typescript-eslint/naming-convention\nexport const FILTER_TOKEN = new InjectionToken<NgxFilter>('FILTER_TOKEN');\n","import { Directive, forwardRef, inject, input, TemplateRef } from '@angular/core';\n\nimport { FILTER_TOKEN, type NgxComplexFilter } from './filter-chip.model';\n\n\n@Directive({\n selector: 'ng-template[ngx-filter]',\n standalone: true,\n providers: [{ provide: FILTER_TOKEN, useExisting: forwardRef(() => NgxFilterDirective) }]\n\n})\nexport class NgxFilterDirective implements NgxComplexFilter {\n public readonly type = 'complex';\n public readonly label = input.required<string>();\n public readonly active = input.required<boolean>();\n public readonly selectedFilterLabel = input('');\n public readonly templateRef = inject<TemplateRef<unknown>>(TemplateRef);\n}\n","import { Directive, forwardRef, input, model } from '@angular/core';\n\nimport { FILTER_TOKEN, type NgxToggleFilter } from './filter-chip.model';\n\n\n@Directive({\n selector: 'ng-template[ngx-filter-toggle]',\n standalone: true,\n providers: [{ provide: FILTER_TOKEN, useExisting: forwardRef(() => NgxFilterToggleDirective) }]\n})\nexport class NgxFilterToggleDirective implements NgxToggleFilter {\n public readonly type = 'toggle';\n public readonly label = input.required<string>();\n public readonly active = model.required<boolean>();\n}\n","import { CdkConnectedOverlay, CdkOverlayOrigin, type ConnectionPositionPair } from '@angular/cdk/overlay';\nimport { LowerCasePipe, NgTemplateOutlet } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, computed, contentChildren, effect, ElementRef, inject, input, output, type Signal, signal, type TemplateRef, viewChild, ViewEncapsulation } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { MatBadge } from '@angular/material/badge';\nimport { MatIconButton } from '@angular/material/button';\nimport { MatChip, MatChipOption, MatChipSet, MatChipTrailingIcon } from '@angular/material/chips';\nimport { MatIcon } from '@angular/material/icon';\nimport { MatSlideToggle } from '@angular/material/slide-toggle';\nimport { MatTooltip } from '@angular/material/tooltip';\n\nimport { NgxLayoutIntl } from '../providers';\nimport { FILTER_TOKEN } from './filter-chip.model';\n\nconst resizeSignal = (\n element: () => ElementRef<HTMLElement> | undefined,\n box: ResizeObserverBoxOptions = 'border-box'\n): Signal<ResizeObserverEntry | undefined> => {\n\n const value = signal<ResizeObserverEntry | undefined>(undefined);\n\n effect(onCleanup => {\n const el = element()?.nativeElement;\n if (!el) {\n return;\n }\n\n const initialValue: ResizeObserverEntry = {\n borderBoxSize: [],\n contentRect: new DOMRect(),\n contentBoxSize: [],\n devicePixelContentBoxSize: [],\n target: el\n };\n\n value.set(initialValue);\n\n const ro = new ResizeObserver(entries => {\n value.set(entries[0] || initialValue);\n });\n\n ro.observe(el, { box });\n onCleanup(() => {\n ro.disconnect();\n });\n });\n\n return value;\n};\n\n@Component({\n selector: 'ngx-filters-group',\n templateUrl: './filters-group.component.html',\n styleUrl: './filters-group.component.scss',\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [\n MatIcon,\n MatIconButton,\n MatChip,\n MatChipOption,\n MatChipTrailingIcon,\n MatChipSet,\n MatTooltip,\n NgTemplateOutlet,\n CdkConnectedOverlay,\n CdkOverlayOrigin,\n MatSlideToggle,\n FormsModule,\n MatBadge,\n LowerCasePipe\n ]\n})\nexport class NgxFiltersGroupComponent {\n public readonly resetFilters = output();\n public readonly folded = input<boolean>();\n\n protected readonly intl = inject(NgxLayoutIntl, { optional: true });\n\n // #region Overlay\n protected readonly overlayOrigin = signal<CdkOverlayOrigin | undefined>(undefined);\n protected readonly overlayContent = signal<TemplateRef<unknown> | undefined>(undefined);\n protected readonly overlayOpen = signal<boolean>(false);\n protected readonly moreFiltersOverlay = signal<boolean>(false);\n protected readonly overlayPositions: ConnectionPositionPair[] = [{\n originX: 'center',\n originY: 'bottom',\n overlayX: 'center',\n overlayY: 'top',\n offsetY: 16\n }, {\n originX: 'end',\n originY: 'bottom',\n overlayX: 'end',\n overlayY: 'top',\n offsetY: 16\n }];\n // #endregion\n\n // #region Filters\n protected allFilters = contentChildren(FILTER_TOKEN);\n protected readonly activeFiltersAmount = computed(() => this.invisibleFilters().filter(filter => filter.active()).length);\n\n protected readonly visibleFilters = computed(() => {\n const lastFittingIndex = this.lastFittingIndex();\n if (lastFittingIndex < 0) {\n return [];\n }\n\n return this.allFilters().slice(0, lastFittingIndex);\n });\n\n protected readonly invisibleFilters = computed(() => {\n const lastFittingIndex = this.lastFittingIndex();\n if (lastFittingIndex < 0) {\n return this.allFilters();\n }\n\n return this.allFilters().slice(lastFittingIndex);\n });\n\n private readonly filterContainerRef = viewChild.required<ElementRef<HTMLElement>>('container');\n private readonly filterContainerPadding = computed(() => Number.parseFloat(globalThis.getComputedStyle(this.filterContainerRef().nativeElement).paddingInline));\n\n // #endregion\n\n // #region Host\n private readonly hostElement = inject<ElementRef<HTMLElement>>(ElementRef);\n private readonly hostSize = resizeSignal(() => this.hostElement);\n private readonly hostWidth = computed(() => Math.ceil(this.hostSize()?.contentRect.width || 0));\n // #endregion\n\n // #region MeasureRow\n private readonly measureRowRef = viewChild<ElementRef<HTMLElement>>('measureRow');\n private readonly measureRowSize = resizeSignal(() => this.measureRowRef());\n private readonly measureRowWidth = computed(() => Math.ceil(this.measureRowSize()?.contentRect.width || 0));\n // #endregion\n\n // #region StaticFields\n private readonly staticFieldsRef = viewChild<ElementRef<HTMLElement>>('static');\n private readonly staticFieldsSize = resizeSignal(() => this.staticFieldsRef());\n private readonly staticFieldsWidth = computed(() => Math.ceil(this.staticFieldsSize()?.contentRect.width || 0));\n // #endregion\n\n private readonly lastFittingIndex = computed(() => {\n const hostWidth = this.hostWidth();\n if (!hostWidth) {\n return -1;\n }\n\n const availableSpace = hostWidth - (this.staticFieldsWidth() + (2 * this.filterContainerPadding()));\n const filters = Array.from(this.measureRowRef()?.nativeElement.querySelectorAll<HTMLElement>('mat-chip-option') ?? []);\n\n if (availableSpace - this.measureRowWidth() >= 0) {\n return filters.length;\n }\n\n return this.getLastFittingIndex(availableSpace, filters);\n });\n\n protected emitResetClicked(): void {\n this.resetFilters.emit();\n }\n\n private getLastFittingIndex(availableSpace: number, elements: readonly HTMLElement[]): number {\n const firstEl = elements[0];\n\n if (!firstEl || availableSpace <= 0 || availableSpace - firstEl.offsetWidth < 0) {\n return -1;\n }\n\n let residualAvailableSpace = availableSpace;\n\n const lastFittingIndex = elements.findIndex(el => {\n residualAvailableSpace -= el.offsetWidth + 16;\n return residualAvailableSpace <= 0;\n });\n\n return lastFittingIndex >= 0 ? lastFittingIndex : elements.length - 1;\n }\n}\n","@if (folded()) {\n <section\n class=\"filter-container\"\n #container\n [matBadge]=\"activeFiltersAmount()\"\n [matBadgeHidden]=\"activeFiltersAmount() <= 0\">\n <button\n mat-icon-button\n aria-label=\"All filters\"\n cdkOverlayOrigin\n #trigger=\"cdkOverlayOrigin\"\n (click)=\"\n this.overlayOrigin.set(trigger);\n this.overlayContent.set(moreFilters);\n this.overlayOpen.set(true);\n this.moreFiltersOverlay.set(true)\n \"\n matTooltip=\"{{ intl?.allFilters ?? 'All filters' }}\">\n <mat-icon>filter_alt</mat-icon>\n </button>\n </section>\n} @else {\n @if (allFilters()) {\n <section #measureRow class=\"measure-row\">\n <mat-chip-set>\n @for (f of allFilters(); track $index) {\n <mat-chip-option [selectable]=\"false\" [selected]=\"f.active()\">\n {{ f.label() }}\n @if (f.type === 'complex' && f.selectedFilterLabel()) {\n <span class=\"selected-label\">: {{ f.selectedFilterLabel() }}</span>\n }\n @if (f.type === 'complex') {\n <mat-icon matChipTrailingIcon>arrow_drop_down</mat-icon>\n }\n </mat-chip-option>\n }\n <mat-chip #overflowMeasure>\n +00 {{ intl?.filters ?? 'Filters' | lowercase }} (00 {{ intl?.actives ?? 'Actives' | lowercase }})\n <mat-icon matChipTrailingIcon>arrow_drop_down</mat-icon>\n </mat-chip>\n </mat-chip-set>\n </section>\n }\n\n <section class=\"filter-container\" #container>\n <mat-chip-set>\n @if (this.visibleFilters().length) {\n @for (f of visibleFilters(); track $index) {\n @if (f.type === 'toggle') {\n <mat-chip-option\n selectable=\"true\"\n [selected]=\"f.active()\"\n (selectionChange)=\"f.active.set($event.selected)\">\n {{ f.label() }}\n </mat-chip-option>\n } @else {\n <mat-chip-option\n [selectable]=\"false\"\n [selected]=\"f.active()\"\n cdkOverlayOrigin\n #trigger=\"cdkOverlayOrigin\"\n (click)=\"\n this.overlayOrigin.set(trigger);\n this.overlayContent.set(f.templateRef);\n this.overlayOpen.set(true);\n this.moreFiltersOverlay.set(false)\n \">\n {{ f.label() }}\n @if (f.selectedFilterLabel()) {\n <span class=\"selected-label\">: {{ f.selectedFilterLabel() }}</span>\n }\n <mat-icon\n [class.is-overlay-open]=\"this.overlayOpen() && this.overlayContent() === f.templateRef\"\n matChipTrailingIcon>\n arrow_drop_down\n </mat-icon>\n </mat-chip-option>\n }\n }\n }\n </mat-chip-set>\n <section class=\"static\" #static>\n @if (invisibleFilters().length; as invisibleFiltersAmount) {\n <mat-chip-set>\n <mat-chip\n cdkOverlayOrigin\n [class.filter-active]=\"activeFiltersAmount()\"\n #trigger=\"cdkOverlayOrigin\"\n (click)=\"\n this.overlayOrigin.set(trigger);\n this.overlayContent.set(moreFilters);\n this.overlayOpen.set(true);\n this.moreFiltersOverlay.set(true)\n \">\n +{{ invisibleFiltersAmount }} {{ intl?.filters ?? 'Filters' | lowercase }} ({{\n activeFiltersAmount()\n }}\n {{ intl?.actives ?? 'Actives' | lowercase }})\n <mat-icon\n [class.is-overlay-open]=\"this.overlayOpen() && this.overlayContent() === moreFilters\"\n matChipTrailingIcon>\n arrow_drop_down\n </mat-icon>\n </mat-chip>\n </mat-chip-set>\n }\n <button\n mat-icon-button\n aria-label=\"Reset filters\"\n (click)=\"emitResetClicked()\"\n matTooltip=\"{{ intl?.reset ?? 'Reset' }}\">\n <mat-icon>settings_backup_restore</mat-icon>\n </button>\n </section>\n </section>\n}\n\n<ng-template #moreFilters>\n @if (allFilters()) {\n @for (f of allFilters(); track $index) {\n @if (f.type === 'toggle') {\n <section class=\"filter\">\n <mat-slide-toggle labelPosition=\"before\" [(ngModel)]=\"f.active\">\n {{ f.label() }}\n </mat-slide-toggle>\n </section>\n } @else {\n <section class=\"filter\">\n <div class=\"title\">\n <span class=\"label\">{{ f.label() }}</span>\n <span class=\"value\">{{ f.selectedFilterLabel() }}</span>\n </div>\n @if (f.templateRef) {\n <ng-container *ngTemplateOutlet=\"f.templateRef\"></ng-container>\n }\n </section>\n }\n }\n }\n</ng-template>\n\n@let overlayOrigin = this.overlayOrigin();\n@let overlayOpen = this.overlayOpen();\n@let overlayContent = this.overlayContent();\n@if (overlayOrigin && overlayOpen && overlayContent) {\n <ng-template\n cdkConnectedOverlay\n [cdkConnectedOverlayOrigin]=\"overlayOrigin\"\n [cdkConnectedOverlayOpen]=\"overlayOpen\"\n (detach)=\"this.overlayOpen.set(false)\"\n cdkConnectedOverlayHasBackdrop=\"true\"\n backdrop\n (backdropClick)=\"this.overlayOpen.set(false)\"\n cdkConnectedOverlayPanelClass=\"filter-group--overlay\"\n cdkConnectedOverlayBackdropClass=\"filter-group--overlay--backdrop--transparent\"\n [cdkConnectedOverlayPositions]=\"overlayPositions\"\n [cdkConnectedOverlayFlexibleDimensions]=\"true\"\n [cdkConnectedOverlayGrowAfterOpen]=\"true\"\n [cdkConnectedOverlayFlexibleDimensions]=\"true\"\n [cdkConnectedOverlayViewportMargin]=\"32\">\n @if (moreFiltersOverlay()) {\n <div class=\"filters--title\">\n <span>{{ intl?.filters ?? 'Filters' }}</span>\n <button\n mat-icon-button\n aria-label=\"Reset filters\"\n (click)=\"emitResetClicked()\"\n matTooltip=\"{{ intl?.reset ?? 'Reset' }}\">\n <mat-icon>settings_backup_restore</mat-icon>\n </button>\n </div>\n }\n <div class=\"filters--content\">\n <ng-container *ngTemplateOutlet=\"overlayContent\"></ng-container>\n </div>\n </ng-template>\n}\n","import { Directive, ElementRef, inject, type Signal, signal } from '@angular/core';\nimport { toSignal } from '@angular/core/rxjs-interop';\nimport { type FormControl, NgControl } from '@angular/forms';\n\n@Directive({\n selector: 'input[ngx-search-input]',\n /* eslint-disable @typescript-eslint/naming-convention */\n host: {\n '(blur)': 'blurred.set(true);',\n '(focus)': 'blurred.set(false);'\n }\n})\nexport class NgxSearchInputDirective {\n public readonly blurred = signal<boolean>(false);\n public readonly value: Signal<string>;\n\n private readonly ngControl = inject(NgControl);\n private readonly input = inject<ElementRef<HTMLInputElement>>(ElementRef);\n private readonly control = this.ngControl.control as FormControl<string>;\n\n public constructor() {\n this.value = toSignal(this.control.valueChanges, { initialValue: '' });\n }\n\n public focus(): void {\n this.input.nativeElement.focus();\n }\n\n public reset(): void {\n this.control.reset();\n }\n}\n","import { afterRenderEffect, ChangeDetectionStrategy, Component, computed, contentChild, effect, inject, input, signal, untracked, ViewEncapsulation } from '@angular/core';\nimport { MatIconButton } from '@angular/material/button';\nimport { MatIcon } from '@angular/material/icon';\nimport { MatTooltip } from '@angular/material/tooltip';\n\nimport { NgxLayoutIntl } from '../providers';\nimport { NgxSearchInputDirective } from './directives/search-input.directive';\n\n// type SearchBarContainerSize = 'medium' | 'small';\n\n@Component({\n selector: 'ngx-search-bar-container',\n templateUrl: './search-bar-container.component.html',\n styleUrl: './search-bar-container.component.scss',\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [MatIcon, MatIconButton, MatTooltip]\n /*\n host: {\n '[class.small]': 'size()===\"small\"'\n }\n */\n})\nexport class NgxSearchBarContainerComponent {\n // inputs\n public readonly folded = input<boolean>(false);\n\n /*\n protected size = input<SearchBarContainerSize>('medium');\n protected sizeButtonAttributeName = input<string>();\n protected sizeButtonAttributeValue = input<string>();\n */\n\n protected readonly intl = inject(NgxLayoutIntl, { optional: true });\n\n protected readonly manualFoldingState = signal<boolean>(true);\n protected readonly isFolded = computed(() => this.folded() && this.manualFoldingState() && !this.searchText());\n\n protected readonly searchInput = contentChild(NgxSearchInputDirective);\n protected readonly searchText = computed(() => this.searchInput()?.value());\n\n /*\n private hostElement = inject(ElementRef);\n private renderer = inject(Renderer2);\n */\n\n public constructor() {\n\n /*\n afterRender(() => {\n const containerElement = this.hostElement.nativeElement;\n const buttons = containerElement.querySelectorAll('button') as NodeListOf<HTMLElement>;\n\n buttons.forEach((button: HTMLElement) => {\n if (this.sizeButtonAttributeName()?.trim() && this.sizeButtonAttributeValue()?.trim()) {\n this.renderer.setAttribute(button, this.sizeButtonAttributeName(), this.sizeButtonAttributeValue());\n }\n\n });\n });\n */\n\n afterRenderEffect(() => {\n const searchInput = this.searchInput();\n if (!searchInput) {\n return;\n }\n\n if (!this.isFolded()) {\n searchInput.focus();\n }\n });\n\n effect(() => {\n const baseFoldStatus = this.folded();\n\n if (baseFoldStatus) {\n const searchText = untracked(this.searchText);\n const blurred = this.searchInput()?.blurred();\n\n if (blurred && !searchText) {\n this.manualFoldingState.set(true);\n }\n }\n });\n }\n\n protected toggleFolded(): void {\n this.manualFoldingState.update(folded => !folded);\n }\n\n protected resetInput(): void {\n const searchInput = this.searchInput();\n\n if (!searchInput) {\n return;\n }\n\n searchInput.reset();\n searchInput.focus();\n }\n}\n\n","@if (isFolded()) {\n <button\n matIconButton\n aria-label=\"Open search bar\"\n (click)=\"toggleFolded()\"\n matTooltip=\"{{ intl?.openSearchBar ?? 'Open search bar' }}\">\n <mat-icon>search</mat-icon>\n </button>\n} @else {\n <ng-content select=\"[ngx-search-input]\"></ng-content>\n\n @if (searchText()) {\n <button\n matIconButton\n aria-label=\"Clear button\"\n (click)=\"resetInput()\"\n matTooltip=\"{{ intl?.deleteSearch ?? 'Clear search' }}\">\n <mat-icon>close</mat-icon>\n </button>\n } @else {\n <mat-icon class=\"icon-search-bar\" aria-hidden=\"false\" aria-label=\"Search icon\" fontIcon=\"search\" />\n }\n}\n","import { ChangeDetectionStrategy, Component, computed, contentChild, ViewEncapsulation } from '@angular/core';\n\nimport { NgxFiltersGroupComponent } from '../filters-group';\nimport { NgxSearchBarContainerComponent } from '../search-bar-container';\n\n@Component({\n selector: 'ngx-column-bar',\n templateUrl: './column-bar.component.html',\n styleUrl: './column-bar.component.scss',\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class NgxColumnBarComponent {\n protected hasRightContent = computed(() => this.filtersGroup() ?? this.searchBarContainer());\n\n private readonly filtersGroup = contentChild(NgxFiltersGroupComponent);\n private readonly searchBarContainer = contentChild(NgxSearchBarContainerComponent);\n}\n","<ng-content select=\"h1,h2,h3,h4,h5,h6\"></ng-content>\n<ng-content select=\"ngx-actions-group\"></ng-content>\n\n@if (hasRightContent()) {\n <div class=\"right\">\n <ng-content select=\"ngx-filters-group\"></ng-content>\n <ng-content select=\"ngx-search-bar-container\"></ng-content>\n </div>\n}\n","import { ChangeDetectionStrategy, Component } from '@angular/core';\n\n\n@Component({\n selector: 'ngx-layout',\n templateUrl: './layout.component.html',\n styleUrl: './layout.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class NgxLayoutComponent {\n}\n","<ng-content select=\"ngx-app-bar\"></ng-content>\n<ng-content select=\"ngx-main-bar\"></ng-content>\n<!--\n The ng-content's is not clearly defined yet. The potential use-cases are:\n - Display GPD bars\n - Display warnings\n -->\n<ng-content></ng-content>\n<section class=\"content\">\n <ng-content select=\"ngx-panel\"></ng-content>\n</section>\n","import { ChangeDetectionStrategy, Component, ViewEncapsulation } from '@angular/core';\n\n\n@Component({\n selector: 'ngx-main-bar',\n templateUrl: './main-bar.component.html',\n styleUrl: './main-bar.component.scss',\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class NgxMainBarComponent { }\n","<ng-content select=\"ngx-actions-group\"></ng-content>\n\n<div class=\"right\">\n <ng-content select=\"ngx-filters-group\"></ng-content>\n <ng-content select=\"ngx-search-bar-container\"></ng-content>\n</div>\n","import { ChangeDetectionStrategy, Component, input, ViewEncapsulation } from '@angular/core';\n\ntype Appearance = 'transparent' | 'default';\ntype ContentPadding = 'none' | 'default';\n\n@Component({\n selector: 'ngx-panel',\n templateUrl: './panel.component.html',\n styleUrl: './panel.component.scss',\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n // eslint-disable-next-line @typescript-eslint/naming-convention\n '[attr.appearance]': 'this.appearance()'\n }\n})\nexport class NgxPanelComponent {\n public readonly appearance = input<Appearance | undefined>(undefined);\n public readonly contentPadding = input<ContentPadding | undefined>(undefined);\n}\n","<ng-content select=\"ngx-panel-bar\"></ng-content>\n<section class=\"content\" [class.no-padding]=\"contentPadding() === 'none'\">\n <ng-content></ng-content>\n</section>\n","import { ChangeDetectionStrategy, Component, computed, contentChild, inject, input, output, ViewEncapsulation } from '@angular/core';\nimport { MatIconButton } from '@angular/material/button';\nimport { MatIcon } from '@angular/material/icon';\nimport { MatTooltip } from '@angular/material/tooltip';\n\nimport { NgxFiltersGroupComponent } from '../filters-group';\nimport { NgxLayoutIntl } from '../providers';\nimport { NgxSearchBarContainerComponent } from '../search-bar-container';\n\n@Component({\n selector: 'ngx-panel-bar',\n templateUrl: './panel-bar.component.html',\n styleUrl: './panel-bar.component.scss',\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [MatIcon, MatIconButton, MatTooltip]\n})\nexport class NgxPanelBarComponent {\n // inputs\n public hasBackButton = input<boolean>();\n public closable = input<boolean>();\n\n // output\n public readonly backClicked = output();\n public readonly closeClicked = output();\n\n protected readonly intl = inject(NgxLayoutIntl, { optional: true });\n\n protected hasRightContent = computed(() => !!((this.searchBarContainer() ?? this.filtersGroup()) ?? this.closable()));\n\n private readonly filtersGroup = contentChild(NgxFiltersGroupComponent);\n private readonly searchBarContainer = contentChild(NgxSearchBarContainerComponent);\n\n protected emitBackClicked(): void {\n this.backClicked.emit();\n }\n\n protected emitCloseClicked(): void {\n this.closeClicked.emit();\n }\n}\n","@if (hasBackButton()) {\n <button\n mat-icon-button\n aria-label=\"Back button\"\n matTooltip=\"{{ intl?.back ?? 'Back' }}\"\n (click)=\"emitBackClicked()\">\n <mat-icon>arrow_back</mat-icon>\n </button>\n}\n\n<ng-content select=\"h1,h2,h3,h4,h5,h6\"></ng-content>\n<ng-content select=\"ngx-actions-group\"></ng-content>\n\n@if (hasRightContent()) {\n <div class=\"right\">\n <ng-content select=\"ngx-filters-group\"></ng-content>\n <ng-content select=\"ngx-search-bar-container\"></ng-content>\n @if (closable()) {\n <button\n mat-icon-button\n class=\"close-button\"\n aria-label=\"Close button\"\n matTooltip=\"{{ intl?.close ?? 'Close' }}\"\n (click)=\"emitCloseClicked()\">\n <mat-icon>close</mat-icon>\n </button>\n }\n </div>\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["resizeSignal"],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@hug/ngx-layout",
3
- "version": "22.0.0-alpha.3",
3
+ "version": "22.0.0-alpha.4",
4
4
  "description": "HUG Angular - layout component",
5
5
  "homepage": "https://github.com/dsi-hug/ngx-components",
6
6
  "license": "GPL-3.0-only",
@@ -1,5 +1,5 @@
1
1
  import * as _angular_core from '@angular/core';
2
- import { EnvironmentProviders, Signal, ElementRef, InputSignal, TemplateRef, ModelSignal } from '@angular/core';
2
+ import { EnvironmentProviders, Signal, ElementRef, InputSignal, ModelSignal, TemplateRef } from '@angular/core';
3
3
  import { NgxAbstractIntl, NgxOptionsIntl } from '@hug/ngx-core';
4
4
  import { CdkOverlayOrigin, ConnectionPositionPair } from '@angular/cdk/overlay';
5
5
 
@@ -52,14 +52,14 @@ declare class NgxAppBarComponent {
52
52
  title: _angular_core.InputSignal<string>;
53
53
  subtitle: _angular_core.InputSignal<string | undefined>;
54
54
  helpUrl: _angular_core.InputSignal<string | URL | undefined>;
55
- withBackIcon: _angular_core.InputSignal<boolean>;
55
+ withBackButton: _angular_core.InputSignal<boolean>;
56
56
  readonly goBack: _angular_core.OutputEmitterRef<void>;
57
57
  protected readonly intl: NgxLayoutIntl | null;
58
58
  private helpPopup;
59
59
  protected openHelp(): void;
60
60
  protected triggerGoBack(): void;
61
61
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<NgxAppBarComponent, never>;
62
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<NgxAppBarComponent, "ngx-app-bar", never, { "mode": { "alias": "mode"; "required": false; "isSignal": true; }; "title": { "alias": "title"; "required": true; "isSignal": true; }; "subtitle": { "alias": "subtitle"; "required": false; "isSignal": true; }; "helpUrl": { "alias": "helpUrl"; "required": false; "isSignal": true; }; "withBackIcon": { "alias": "withBackIcon"; "required": false; "isSignal": true; }; }, { "goBack": "goBack"; }, never, ["*"], true, never>;
62
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<NgxAppBarComponent, "ngx-app-bar", never, { "mode": { "alias": "mode"; "required": false; "isSignal": true; }; "title": { "alias": "title"; "required": true; "isSignal": true; }; "subtitle": { "alias": "subtitle"; "required": false; "isSignal": true; }; "helpUrl": { "alias": "helpUrl"; "required": false; "isSignal": true; }; "withBackButton": { "alias": "withBackButton"; "required": false; "isSignal": true; }; }, { "goBack": "goBack"; }, never, ["*"], true, never>;
63
63
  }
64
64
 
65
65
  type FilterType = 'toggle' | 'complex';
@@ -128,25 +128,6 @@ declare class NgxFiltersGroupComponent {
128
128
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<NgxFiltersGroupComponent, "ngx-filters-group", never, { "folded": { "alias": "folded"; "required": false; "isSignal": true; }; }, { "resetFilters": "resetFilters"; }, ["allFilters"], never, true, never>;
129
129
  }
130
130
 
131
- declare class NgxLayoutComponent {
132
- static ɵfac: _angular_core.ɵɵFactoryDeclaration<NgxLayoutComponent, never>;
133
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<NgxLayoutComponent, "ngx-layout", never, {}, {}, never, ["ngx-app-bar", "ngx-main-bar", "*", "ngx-panel"], true, never>;
134
- }
135
-
136
- declare class NgxMainBarComponent {
137
- static ɵfac: _angular_core.ɵɵFactoryDeclaration<NgxMainBarComponent, never>;
138
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<NgxMainBarComponent, "ngx-main-bar", never, {}, {}, never, ["ngx-actions-group", "ngx-filters-group", "ngx-search-bar-container"], true, never>;
139
- }
140
-
141
- type Appearance = 'transparent' | 'default';
142
- type ContentPadding = 'none' | 'regular';
143
- declare class NgxPanelComponent {
144
- readonly appearance: _angular_core.InputSignal<Appearance | undefined>;
145
- readonly contentPadding: _angular_core.InputSignal<ContentPadding | undefined>;
146
- static ɵfac: _angular_core.ɵɵFactoryDeclaration<NgxPanelComponent, never>;
147
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<NgxPanelComponent, "ngx-panel", never, { "appearance": { "alias": "appearance"; "required": false; "isSignal": true; }; "contentPadding": { "alias": "content-padding"; "required": false; "isSignal": true; }; }, {}, never, ["ngx-panel-bar[primary]", "ngx-panel-bar", "*"], true, never>;
148
- }
149
-
150
131
  declare class NgxSearchInputDirective {
151
132
  readonly blurred: _angular_core.WritableSignal<boolean>;
152
133
  readonly value: Signal<string>;
@@ -174,4 +155,46 @@ declare class NgxSearchBarContainerComponent {
174
155
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<NgxSearchBarContainerComponent, "ngx-search-bar-container", never, { "folded": { "alias": "folded"; "required": false; "isSignal": true; }; }, {}, ["searchInput"], ["[ngx-search-input]"], true, never>;
175
156
  }
176
157
 
177
- export { NgxActionsGroupComponent, NgxAppBarComponent, NgxFilterDirective, NgxFilterToggleDirective, NgxFiltersGroupComponent, NgxLayoutComponent, NgxLayoutIntl, NgxMainBarComponent, NgxPanelComponent, NgxSearchBarContainerComponent, NgxSearchInputDirective, provideNgxLayout };
158
+ declare class NgxColumnBarComponent {
159
+ protected hasRightContent: _angular_core.Signal<NgxFiltersGroupComponent | NgxSearchBarContainerComponent | undefined>;
160
+ private readonly filtersGroup;
161
+ private readonly searchBarContainer;
162
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<NgxColumnBarComponent, never>;
163
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<NgxColumnBarComponent, "ngx-column-bar", never, {}, {}, ["filtersGroup", "searchBarContainer"], ["h1,h2,h3,h4,h5,h6", "ngx-actions-group", "ngx-filters-group", "ngx-search-bar-container"], true, never>;
164
+ }
165
+
166
+ declare class NgxLayoutComponent {
167
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<NgxLayoutComponent, never>;
168
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<NgxLayoutComponent, "ngx-layout", never, {}, {}, never, ["ngx-app-bar", "ngx-main-bar", "*", "ngx-panel"], true, never>;
169
+ }
170
+
171
+ declare class NgxMainBarComponent {
172
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<NgxMainBarComponent, never>;
173
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<NgxMainBarComponent, "ngx-main-bar", never, {}, {}, never, ["ngx-actions-group", "ngx-filters-group", "ngx-search-bar-container"], true, never>;
174
+ }
175
+
176
+ type Appearance = 'transparent' | 'default';
177
+ type ContentPadding = 'none' | 'default';
178
+ declare class NgxPanelComponent {
179
+ readonly appearance: _angular_core.InputSignal<Appearance | undefined>;
180
+ readonly contentPadding: _angular_core.InputSignal<ContentPadding | undefined>;
181
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<NgxPanelComponent, never>;
182
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<NgxPanelComponent, "ngx-panel", never, { "appearance": { "alias": "appearance"; "required": false; "isSignal": true; }; "contentPadding": { "alias": "contentPadding"; "required": false; "isSignal": true; }; }, {}, never, ["ngx-panel-bar", "*"], true, never>;
183
+ }
184
+
185
+ declare class NgxPanelBarComponent {
186
+ hasBackButton: _angular_core.InputSignal<boolean | undefined>;
187
+ closable: _angular_core.InputSignal<boolean | undefined>;
188
+ readonly backClicked: _angular_core.OutputEmitterRef<void>;
189
+ readonly closeClicked: _angular_core.OutputEmitterRef<void>;
190
+ protected readonly intl: NgxLayoutIntl | null;
191
+ protected hasRightContent: _angular_core.Signal<boolean>;
192
+ private readonly filtersGroup;
193
+ private readonly searchBarContainer;
194
+ protected emitBackClicked(): void;
195
+ protected emitCloseClicked(): void;
196
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<NgxPanelBarComponent, never>;
197
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<NgxPanelBarComponent, "ngx-panel-bar", never, { "hasBackButton": { "alias": "hasBackButton"; "required": false; "isSignal": true; }; "closable": { "alias": "closable"; "required": false; "isSignal": true; }; }, { "backClicked": "backClicked"; "closeClicked": "closeClicked"; }, ["filtersGroup", "searchBarContainer"], ["h1,h2,h3,h4,h5,h6", "ngx-actions-group", "ngx-filters-group", "ngx-search-bar-container"], true, never>;
198
+ }
199
+
200
+ export { NgxActionsGroupComponent, NgxAppBarComponent, NgxColumnBarComponent, NgxFilterDirective, NgxFilterToggleDirective, NgxFiltersGroupComponent, NgxLayoutComponent, NgxLayoutIntl, NgxMainBarComponent, NgxPanelBarComponent, NgxPanelComponent, NgxSearchBarContainerComponent, NgxSearchInputDirective, provideNgxLayout };