@sebgroup/green-angular 7.2.0-rc.20260112142904472 → 7.2.0-rc.20260113120917716
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/fesm2022/sebgroup-green-angular-src-lib-accordion.mjs +10 -10
- package/fesm2022/sebgroup-green-angular-src-lib-accordion.mjs.map +1 -1
- package/fesm2022/sebgroup-green-angular-src-lib-badge.mjs +7 -7
- package/fesm2022/sebgroup-green-angular-src-lib-badge.mjs.map +1 -1
- package/fesm2022/sebgroup-green-angular-src-lib-button.mjs +7 -7
- package/fesm2022/sebgroup-green-angular-src-lib-button.mjs.map +1 -1
- package/fesm2022/sebgroup-green-angular-src-lib-cell-table.mjs +13 -13
- package/fesm2022/sebgroup-green-angular-src-lib-cell-table.mjs.map +1 -1
- package/fesm2022/sebgroup-green-angular-src-lib-context-menu.mjs +7 -7
- package/fesm2022/sebgroup-green-angular-src-lib-context-menu.mjs.map +1 -1
- package/fesm2022/sebgroup-green-angular-src-lib-datepicker.mjs +7 -7
- package/fesm2022/sebgroup-green-angular-src-lib-datepicker.mjs.map +1 -1
- package/fesm2022/sebgroup-green-angular-src-lib-dropdown.mjs +13 -13
- package/fesm2022/sebgroup-green-angular-src-lib-dropdown.mjs.map +1 -1
- package/fesm2022/sebgroup-green-angular-src-lib-in-page-wizard.mjs +7 -7
- package/fesm2022/sebgroup-green-angular-src-lib-in-page-wizard.mjs.map +1 -1
- package/fesm2022/sebgroup-green-angular-src-lib-modal.mjs +22 -22
- package/fesm2022/sebgroup-green-angular-src-lib-modal.mjs.map +1 -1
- package/fesm2022/sebgroup-green-angular-src-lib-pagination.mjs +7 -7
- package/fesm2022/sebgroup-green-angular-src-lib-pagination.mjs.map +1 -1
- package/fesm2022/sebgroup-green-angular-src-lib-progress-circle.mjs +7 -7
- package/fesm2022/sebgroup-green-angular-src-lib-progress-circle.mjs.map +1 -1
- package/fesm2022/sebgroup-green-angular-src-lib-segmented-control.mjs +7 -7
- package/fesm2022/sebgroup-green-angular-src-lib-segmented-control.mjs.map +1 -1
- package/fesm2022/sebgroup-green-angular-src-lib-shared.mjs +34 -34
- package/fesm2022/sebgroup-green-angular-src-lib-shared.mjs.map +1 -1
- package/fesm2022/sebgroup-green-angular-src-lib-slider.mjs +7 -7
- package/fesm2022/sebgroup-green-angular-src-lib-slider.mjs.map +1 -1
- package/fesm2022/sebgroup-green-angular-src-lib-sortable-list.mjs +7 -7
- package/fesm2022/sebgroup-green-angular-src-lib-sortable-list.mjs.map +1 -1
- package/fesm2022/sebgroup-green-angular-src-v-angular-account-number.mjs +7 -7
- package/fesm2022/sebgroup-green-angular-src-v-angular-account-number.mjs.map +1 -1
- package/fesm2022/sebgroup-green-angular-src-v-angular-alert.mjs +7 -7
- package/fesm2022/sebgroup-green-angular-src-v-angular-alert.mjs.map +1 -1
- package/fesm2022/sebgroup-green-angular-src-v-angular-base-control-value-accessor.mjs +8 -8
- package/fesm2022/sebgroup-green-angular-src-v-angular-base-control-value-accessor.mjs.map +1 -1
- package/fesm2022/sebgroup-green-angular-src-v-angular-breadcrumbs.mjs +7 -7
- package/fesm2022/sebgroup-green-angular-src-v-angular-breadcrumbs.mjs.map +1 -1
- package/fesm2022/sebgroup-green-angular-src-v-angular-button.mjs +7 -7
- package/fesm2022/sebgroup-green-angular-src-v-angular-button.mjs.map +1 -1
- package/fesm2022/sebgroup-green-angular-src-v-angular-card.mjs +7 -7
- package/fesm2022/sebgroup-green-angular-src-v-angular-card.mjs.map +1 -1
- package/fesm2022/sebgroup-green-angular-src-v-angular-character-countdown.mjs +7 -7
- package/fesm2022/sebgroup-green-angular-src-v-angular-character-countdown.mjs.map +1 -1
- package/fesm2022/sebgroup-green-angular-src-v-angular-checkbox.mjs +7 -7
- package/fesm2022/sebgroup-green-angular-src-v-angular-checkbox.mjs.map +1 -1
- package/fesm2022/sebgroup-green-angular-src-v-angular-core.mjs +3 -3
- package/fesm2022/sebgroup-green-angular-src-v-angular-core.mjs.map +1 -1
- package/fesm2022/sebgroup-green-angular-src-v-angular-datepicker.mjs +34 -34
- package/fesm2022/sebgroup-green-angular-src-v-angular-datepicker.mjs.map +1 -1
- package/fesm2022/sebgroup-green-angular-src-v-angular-drag-drop.mjs +13 -13
- package/fesm2022/sebgroup-green-angular-src-v-angular-drag-drop.mjs.map +1 -1
- package/fesm2022/sebgroup-green-angular-src-v-angular-dropdown.mjs +26 -26
- package/fesm2022/sebgroup-green-angular-src-v-angular-dropdown.mjs.map +1 -1
- package/fesm2022/sebgroup-green-angular-src-v-angular-external-link.mjs +7 -7
- package/fesm2022/sebgroup-green-angular-src-v-angular-external-link.mjs.map +1 -1
- package/fesm2022/sebgroup-green-angular-src-v-angular-i18n.mjs +14 -14
- package/fesm2022/sebgroup-green-angular-src-v-angular-i18n.mjs.map +1 -1
- package/fesm2022/sebgroup-green-angular-src-v-angular-info-circle.mjs +7 -7
- package/fesm2022/sebgroup-green-angular-src-v-angular-info-circle.mjs.map +1 -1
- package/fesm2022/sebgroup-green-angular-src-v-angular-input-mask.mjs +10 -10
- package/fesm2022/sebgroup-green-angular-src-v-angular-input-mask.mjs.map +1 -1
- package/fesm2022/sebgroup-green-angular-src-v-angular-input.mjs +7 -7
- package/fesm2022/sebgroup-green-angular-src-v-angular-input.mjs.map +1 -1
- package/fesm2022/sebgroup-green-angular-src-v-angular-modal.mjs +16 -16
- package/fesm2022/sebgroup-green-angular-src-v-angular-modal.mjs.map +1 -1
- package/fesm2022/sebgroup-green-angular-src-v-angular-pagination.mjs +7 -7
- package/fesm2022/sebgroup-green-angular-src-v-angular-pagination.mjs.map +1 -1
- package/fesm2022/sebgroup-green-angular-src-v-angular-radio.mjs +13 -13
- package/fesm2022/sebgroup-green-angular-src-v-angular-radio.mjs.map +1 -1
- package/fesm2022/sebgroup-green-angular-src-v-angular-slug.mjs +7 -7
- package/fesm2022/sebgroup-green-angular-src-v-angular-slug.mjs.map +1 -1
- package/fesm2022/sebgroup-green-angular-src-v-angular-table.mjs +22 -22
- package/fesm2022/sebgroup-green-angular-src-v-angular-table.mjs.map +1 -1
- package/fesm2022/sebgroup-green-angular-src-v-angular-tabs.mjs +10 -10
- package/fesm2022/sebgroup-green-angular-src-v-angular-tabs.mjs.map +1 -1
- package/fesm2022/sebgroup-green-angular-src-v-angular-textarea.mjs +7 -7
- package/fesm2022/sebgroup-green-angular-src-v-angular-textarea.mjs.map +1 -1
- package/fesm2022/sebgroup-green-angular-src-v-angular-toast.mjs +10 -10
- package/fesm2022/sebgroup-green-angular-src-v-angular-toast.mjs.map +1 -1
- package/fesm2022/sebgroup-green-angular-src-v-angular-tooltip.mjs +7 -7
- package/fesm2022/sebgroup-green-angular-src-v-angular-tooltip.mjs.map +1 -1
- package/fesm2022/sebgroup-green-angular-v-angular.mjs +281 -281
- package/fesm2022/sebgroup-green-angular-v-angular.mjs.map +1 -1
- package/fesm2022/sebgroup-green-angular.mjs +166 -166
- package/fesm2022/sebgroup-green-angular.mjs.map +1 -1
- package/package.json +1 -1
|
@@ -45,10 +45,10 @@ class TabDirective {
|
|
|
45
45
|
get ariaLabelledby() {
|
|
46
46
|
return `tab-${this.id}`;
|
|
47
47
|
}
|
|
48
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.
|
|
49
|
-
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "19.2.
|
|
48
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.18", ngImport: i0, type: TabDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
|
|
49
|
+
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "19.2.18", type: TabDirective, isStandalone: false, selector: "[tab]", inputs: { thook: "thook", active: "active", tab: "tab", disabled: "disabled", id: "id" }, host: { properties: { "class.gds-tabs__panel": "this.baseClass", "attr.role": "this.role", "attr.data-thook": "this.thook", "class.-active": "this.active", "attr.hidden": "this.hidden", "attr.id": "this.attrId", "attr.aria-labelledby": "this.ariaLabelledby" } }, ngImport: i0 }); }
|
|
50
50
|
}
|
|
51
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.
|
|
51
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.18", ngImport: i0, type: TabDirective, decorators: [{
|
|
52
52
|
type: Directive,
|
|
53
53
|
args: [{
|
|
54
54
|
// eslint-disable-next-line @angular-eslint/directive-selector
|
|
@@ -319,10 +319,10 @@ class TabsComponent {
|
|
|
319
319
|
tabElement.focus();
|
|
320
320
|
this.onSelect(tabElement.id.slice(4));
|
|
321
321
|
}
|
|
322
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.
|
|
323
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.
|
|
322
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.18", ngImport: i0, type: TabsComponent, deps: [{ token: i1.Router }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
323
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.18", type: TabsComponent, isStandalone: false, selector: "nggv-tabs", inputs: { thook: "thook", tabs: "tabs" }, outputs: { ngvTabSwitch: "ngvTabSwitch" }, host: { properties: { "class.gds-tabs": "this.baseClass", "attr.data-thook": "this.thook" } }, queries: [{ propertyName: "tabRefs", predicate: TabDirective }], usesOnChanges: true, ngImport: i0, template: "<ng-container *transloco=\"let t\">\n <div\n class=\"gds-tabs__tablist\"\n role=\"tablist\"\n [attr.data-thook]=\"thook + '-list'\"\n (keydown)=\"onKeyDown($event)\"\n >\n <button\n class=\"gds-tabs__tab\"\n [id]=\"'tab-' + (tab.id !== undefined ? tab.id : '')\"\n role=\"tab\"\n [attr.data-thook]=\"tab.thook || thook + '-tab'\"\n [tabindex]=\"tab.active ? 0 : -1\"\n [attr.aria-controls]=\"'panel-' + (tab.id !== undefined ? tab.id : '')\"\n [attr.aria-selected]=\"tab.active\"\n [class.-selected]=\"tab.active\"\n [disabled]=\"tab.disabled\"\n [innerHTML]=\"t(tab.tab)\"\n (click)=\"onSelect(tab.id)\"\n *ngFor=\"let tab of tabs\"\n ></button>\n </div>\n <article\n *ngIf=\"useRouting\"\n class=\"gds-tabs__panel -active\"\n [id]=\"'panel-' + (selectedTab ? selectedTab.id : '')\"\n [attr.data-thook]=\"thook + '-panel'\"\n [attr.aria-labelledby]=\"'tab-' + (selectedTab ? selectedTab.id : '')\"\n >\n <router-outlet></router-outlet>\n </article>\n <ng-content *ngIf=\"!useRouting\"></ng-content>\n</ng-container>\n", styles: [":host{--sg-border-width: 1px;--sg-border-color: #868686;--gds-ref-pallet-base600: #868686;--text-primary-color: #333}:host .gds-tabs__tablist{display:flex;overflow-x:auto;padding:.25rem;margin:-.25rem;--sg-border-color: var(--gds-sys-color-base-600)}:host .gds-tabs__tablist::-webkit-scrollbar{display:none}:host .gds-tabs__tablist:not(.gds-tabs--fluid):after{border-bottom:solid var(--sg-border-width) var(--sg-border-color);--border-color: var(--sg-border-color);content:\"\";display:block;flex-grow:1}:host .gds-tabs__tab{background-color:transparent;border:0;cursor:pointer;font-family:inherit;padding:0;border-bottom:solid var(--sg-border-width) var(--sg-border-color);--border-color: var(--sg-border-color);padding:.75rem 1rem;font-weight:500;transition:border .3s cubic-bezier(.23,1,.32,1),outline-offset 0s,outline-width 0s}:host .gds-tabs__tab:not(:disabled,.disabled,[aria-disabled]):hover{background-color:#199be3;color:#fff;--background: rgb(25.4035777564, 154.8940067842, 227.221994169);--color: rgb(255, 255, 255);border-color:#199be3}:host .gds-tabs__tab:focus:not(:focus-visible){box-shadow:none;outline:0}:host .gds-tabs__tab:focus,:host .gds-tabs__tab:focus-visible{outline-color:var(--gds-sys-color-focus-outline);outline-style:solid;outline-width:.125rem;outline-offset:.125rem}:host .gds-tabs__tab{display:flex;justify-content:center;color:var(--text-primary-color);text-align:center;text-decoration:none;white-space:nowrap;border-radius:.25rem .25rem 0 0;border-left:var(--sg-border-width) solid transparent;border-top:var(--sg-border-width) solid transparent;border-right:var(--sg-border-width) solid transparent}.gds-tabs--fluid :host .gds-tabs__tab{flex:1}:host .gds-tabs__tab svg>*{fill:currentColor}:host .gds-tabs__tab{gap:.25rem;transition:none;font-size:1rem;font-family:inherit}:host .gds-tabs__tab.-selected{box-sizing:border-box;border-top:solid var(--sg-border-width) var(--sg-border-color);border-right:solid var(--sg-border-width) var(--sg-border-color);border-left:solid var(--sg-border-width) var(--sg-border-color);transition:border .3s cubic-bezier(.23,1,.32,1),outline-offset 0s,outline-width 0s}:host .gds-tabs__tab.-selected:not(:disabled,.disabled,[aria-disabled]):hover{background-color:#333;color:#fff;--background: rgb(51, 51, 51);--color: rgb(255, 255, 255);border-color:#333}:host .gds-tabs__tab.-selected{border-top-left-radius:.25rem;border-top-right-radius:.25rem;border-bottom:var(--sg-border-width) transparent;color:var(--text-primary-color);transition:none;padding:11px 15px 12px}:host .gds-tabs__tab[disabled]{color:#adadad;cursor:not-allowed}\n"], dependencies: [{ kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i3.TranslocoDirective, selector: "[transloco]", inputs: ["transloco", "translocoParams", "translocoScope", "translocoRead", "translocoPrefix", "translocoLang", "translocoLoadingTpl"] }, { kind: "directive", type: i1.RouterOutlet, selector: "router-outlet", inputs: ["name", "routerOutletData"], outputs: ["activate", "deactivate", "attach", "detach"], exportAs: ["outlet"] }] }); }
|
|
324
324
|
}
|
|
325
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.
|
|
325
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.18", ngImport: i0, type: TabsComponent, decorators: [{
|
|
326
326
|
type: Component,
|
|
327
327
|
args: [{ selector: 'nggv-tabs', standalone: false, template: "<ng-container *transloco=\"let t\">\n <div\n class=\"gds-tabs__tablist\"\n role=\"tablist\"\n [attr.data-thook]=\"thook + '-list'\"\n (keydown)=\"onKeyDown($event)\"\n >\n <button\n class=\"gds-tabs__tab\"\n [id]=\"'tab-' + (tab.id !== undefined ? tab.id : '')\"\n role=\"tab\"\n [attr.data-thook]=\"tab.thook || thook + '-tab'\"\n [tabindex]=\"tab.active ? 0 : -1\"\n [attr.aria-controls]=\"'panel-' + (tab.id !== undefined ? tab.id : '')\"\n [attr.aria-selected]=\"tab.active\"\n [class.-selected]=\"tab.active\"\n [disabled]=\"tab.disabled\"\n [innerHTML]=\"t(tab.tab)\"\n (click)=\"onSelect(tab.id)\"\n *ngFor=\"let tab of tabs\"\n ></button>\n </div>\n <article\n *ngIf=\"useRouting\"\n class=\"gds-tabs__panel -active\"\n [id]=\"'panel-' + (selectedTab ? selectedTab.id : '')\"\n [attr.data-thook]=\"thook + '-panel'\"\n [attr.aria-labelledby]=\"'tab-' + (selectedTab ? selectedTab.id : '')\"\n >\n <router-outlet></router-outlet>\n </article>\n <ng-content *ngIf=\"!useRouting\"></ng-content>\n</ng-container>\n", styles: [":host{--sg-border-width: 1px;--sg-border-color: #868686;--gds-ref-pallet-base600: #868686;--text-primary-color: #333}:host .gds-tabs__tablist{display:flex;overflow-x:auto;padding:.25rem;margin:-.25rem;--sg-border-color: var(--gds-sys-color-base-600)}:host .gds-tabs__tablist::-webkit-scrollbar{display:none}:host .gds-tabs__tablist:not(.gds-tabs--fluid):after{border-bottom:solid var(--sg-border-width) var(--sg-border-color);--border-color: var(--sg-border-color);content:\"\";display:block;flex-grow:1}:host .gds-tabs__tab{background-color:transparent;border:0;cursor:pointer;font-family:inherit;padding:0;border-bottom:solid var(--sg-border-width) var(--sg-border-color);--border-color: var(--sg-border-color);padding:.75rem 1rem;font-weight:500;transition:border .3s cubic-bezier(.23,1,.32,1),outline-offset 0s,outline-width 0s}:host .gds-tabs__tab:not(:disabled,.disabled,[aria-disabled]):hover{background-color:#199be3;color:#fff;--background: rgb(25.4035777564, 154.8940067842, 227.221994169);--color: rgb(255, 255, 255);border-color:#199be3}:host .gds-tabs__tab:focus:not(:focus-visible){box-shadow:none;outline:0}:host .gds-tabs__tab:focus,:host .gds-tabs__tab:focus-visible{outline-color:var(--gds-sys-color-focus-outline);outline-style:solid;outline-width:.125rem;outline-offset:.125rem}:host .gds-tabs__tab{display:flex;justify-content:center;color:var(--text-primary-color);text-align:center;text-decoration:none;white-space:nowrap;border-radius:.25rem .25rem 0 0;border-left:var(--sg-border-width) solid transparent;border-top:var(--sg-border-width) solid transparent;border-right:var(--sg-border-width) solid transparent}.gds-tabs--fluid :host .gds-tabs__tab{flex:1}:host .gds-tabs__tab svg>*{fill:currentColor}:host .gds-tabs__tab{gap:.25rem;transition:none;font-size:1rem;font-family:inherit}:host .gds-tabs__tab.-selected{box-sizing:border-box;border-top:solid var(--sg-border-width) var(--sg-border-color);border-right:solid var(--sg-border-width) var(--sg-border-color);border-left:solid var(--sg-border-width) var(--sg-border-color);transition:border .3s cubic-bezier(.23,1,.32,1),outline-offset 0s,outline-width 0s}:host .gds-tabs__tab.-selected:not(:disabled,.disabled,[aria-disabled]):hover{background-color:#333;color:#fff;--background: rgb(51, 51, 51);--color: rgb(255, 255, 255);border-color:#333}:host .gds-tabs__tab.-selected{border-top-left-radius:.25rem;border-top-right-radius:.25rem;border-bottom:var(--sg-border-width) transparent;color:var(--text-primary-color);transition:none;padding:11px 15px 12px}:host .gds-tabs__tab[disabled]{color:#adadad;cursor:not-allowed}\n"] }]
|
|
328
328
|
}], ctorParameters: () => [{ type: i1.Router }], propDecorators: { baseClass: [{
|
|
@@ -343,11 +343,11 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.9", ngImpor
|
|
|
343
343
|
}] } });
|
|
344
344
|
|
|
345
345
|
class NggvTabsModule {
|
|
346
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.
|
|
347
|
-
static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "19.2.
|
|
348
|
-
static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "19.2.
|
|
346
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.18", ngImport: i0, type: NggvTabsModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
|
|
347
|
+
static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "19.2.18", ngImport: i0, type: NggvTabsModule, declarations: [TabDirective, TabsComponent], imports: [CommonModule, TranslocoModule, RouterModule], exports: [TabDirective, TabsComponent] }); }
|
|
348
|
+
static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "19.2.18", ngImport: i0, type: NggvTabsModule, imports: [CommonModule, TranslocoModule, RouterModule] }); }
|
|
349
349
|
}
|
|
350
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.
|
|
350
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.18", ngImport: i0, type: NggvTabsModule, decorators: [{
|
|
351
351
|
type: NgModule,
|
|
352
352
|
args: [{
|
|
353
353
|
declarations: [TabDirective, TabsComponent],
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sebgroup-green-angular-src-v-angular-tabs.mjs","sources":["../../../../libs/angular/src/v-angular/tabs/tab.directive.ts","../../../../libs/angular/src/v-angular/tabs/tabs.component.ts","../../../../libs/angular/src/v-angular/tabs/tabs.component.html","../../../../libs/angular/src/v-angular/tabs/tabs.module.ts","../../../../libs/angular/src/v-angular/tabs/index.ts","../../../../libs/angular/src/v-angular/tabs/sebgroup-green-angular-src-v-angular-tabs.ts"],"sourcesContent":["import { Directive, HostBinding, Input } from '@angular/core'\n\n/**\n * Directive that provides the tab container with data about its child tabs.\n * The directive sets its own active state and adds aria attributes.\n *\n * @example\n * <nggv-tabs>\n * <article tab=\"Tab title 1\"> <!-- Content --> </article>\n * <article tab=\"Tab title 2\" [active]=\"true\"> <!-- Content --> </article>\n * <article tab=\"Tab title 3\" disabled> <!-- Content --> </article>\n * <article tab=\"<strong>Tab title 4</strong>\"> <!-- Content --> </article>\n * </nggv-tabs>\n */\n@Directive({\n // eslint-disable-next-line @angular-eslint/directive-selector\n selector: '[tab]',\n standalone: false\n})\nexport class TabDirective {\n /** @internal */\n @HostBinding('class.gds-tabs__panel') baseClass = true\n /** @internal */\n @HostBinding('attr.role') role = 'tabpanel'\n /** Special property used for selecting DOM elements during automated UI testing. */\n @HostBinding('attr.data-thook') @Input() thook: string | null | undefined =\n 'tabs-panel'\n /** Sets whether this tab should be the active tab on load. */\n @HostBinding('class.-active') @Input() active = false\n /** @internal */\n @HostBinding('attr.hidden') get hidden() {\n return !this.active\n }\n /** Sets the title displayed in the tab list for this child. */\n @Input() tab!: string\n /** Sets whether this tab should be able to be selected. */\n @Input() disabled = false\n /** Identifier used for aria attributes and selection. */\n @Input() id: string | number | undefined // todo: discuss if window.ngv.nextId() should be used\n\n /** @internal */\n @HostBinding('attr.id') get attrId() {\n return `panel-${this.id}`\n }\n\n /** @internal */\n @HostBinding('attr.aria-labelledby') get ariaLabelledby() {\n return `tab-${this.id}`\n }\n}\n","/* eslint-disable no-console */\nimport {\n AfterContentInit,\n Component,\n ContentChildren,\n EventEmitter,\n HostBinding,\n Input,\n OnChanges,\n OnDestroy,\n OnInit,\n Output,\n QueryList,\n SimpleChanges,\n} from '@angular/core'\nimport { NavigationEnd, Router } from '@angular/router'\nimport { Subscription } from 'rxjs'\nimport { filter } from 'rxjs/operators'\n\nimport { TabDirective } from './tab.directive'\nimport { EventTabChange, Tab } from './tabs.models'\n\n@Component({\n selector: 'nggv-tabs',\n templateUrl: './tabs.component.html',\n styleUrls: ['./tabs.component.scss'],\n standalone: false\n})\nexport class TabsComponent\n implements OnChanges, OnInit, AfterContentInit, OnDestroy\n{\n /** @internal */\n @HostBinding('class.gds-tabs') baseClass = true\n\n /** Special property used for selecting DOM elements during automated UI testing. */\n @HostBinding('attr.data-thook') @Input() thook: string | null | undefined =\n 'tabs'\n\n /** @internal List of children with a {@link TabDirective}. */\n @ContentChildren(TabDirective) tabRefs: QueryList<TabDirective> =\n new QueryList()\n\n /**\n * List of tabs to generate, this should not be used in conjunction with children that have a {@link TabDirective}.\n * It is useful for generating a list of tabs with links for navigation.\n * If any tab has the link property, a `<router-outlet>` is added below the tabs list.\n */\n @Input() tabs: Tab[] = []\n\n /**\n * Event triggered on initialization and every time the active tab changes.\n * The tab change can be cancelled if event type is set to `'before'` and `cancel()` is called.\n */\n @Output() public ngvTabSwitch = new EventEmitter<EventTabChange>()\n\n /** @internal Adds a `<router-outlet>` below the tabs list. */\n useRouting = false\n\n /** @internal The currently active tab. */\n selectedTab: Tab | undefined\n\n /** @internal If tab switching has started. */\n isSwitching = false\n\n /** @internal */\n protected subs: Subscription[] = []\n\n constructor(protected router: Router) {}\n\n /** @internal */\n static uniqueIds(tabs: Tab[]) {\n const uniqueIds = new Set()\n let offset = 0\n return tabs.map((tab, index) => {\n if (tab.id && !uniqueIds.has(tab.id)) {\n // Id is already unique\n uniqueIds.add(tab.id)\n return { ...tab }\n } else {\n // If no id is set for the tab, use the next available index\n while (uniqueIds.has(index + offset)) offset++\n const id = index + offset\n if (uniqueIds.has(tab.id)) {\n // eslint-disable-next-line no-console\n console.warn(\n `Duplicate tab id \"${tab.id}\" found for tab \"${tab.tab}\", de-duplicating using index + offset. New tab id will be ${id}`,\n )\n }\n uniqueIds.add(id)\n return { ...tab, id }\n }\n })\n }\n\n ngOnChanges(changes: SimpleChanges) {\n if (changes.tabs.currentValue) {\n // Update tabs on property updates\n this.updateFromInput()\n }\n }\n\n ngOnInit() {\n // Update tabs on route change\n this.subs.push(\n this.router.events\n .pipe(filter((e): e is NavigationEnd => e instanceof NavigationEnd))\n .subscribe((e: NavigationEnd) => {\n // Skip if already routing to tab\n if (this.isSwitching) return\n const tab = this.tabs.find(({ link }) => link && e.url.endsWith(link))\n if (tab) {\n this.onSelect(tab.id)\n if (tab.disabled) {\n // Fallback to previously selected tab or first tab not disabled\n const fallbackTab = this.selectedTab\n ? this.selectedTab\n : this.tabs.find(({ disabled }) => !disabled)\n if (fallbackTab && fallbackTab.link)\n this.router.navigateByUrl(fallbackTab.link)\n }\n }\n }),\n )\n }\n\n ngAfterContentInit() {\n // Update tabs on view init\n if (this.tabRefs.length) {\n this.updateFromReferences()\n }\n // Update tabs on view child change\n this.subs.push(this.tabRefs.changes.subscribe(this.updateFromReferences))\n }\n\n /** @internal */\n protected updateFromInput = () => {\n // Make sure each tab has a unique id\n this.tabs = TabsComponent.uniqueIds(this.tabs)\n // Determine if router outlet should be used\n this.useRouting = this.tabs.some(({ link }) => link)\n this.updateTabs()\n }\n\n /** @internal */\n protected updateFromReferences = () => {\n this.tabs = this.tabRefs.map((tabRef) => ({\n tab: tabRef.tab,\n id: tabRef.id,\n active: tabRef.active,\n disabled: tabRef.disabled,\n directive: tabRef,\n }))\n // Make sure each tab has a unique id\n this.tabs = TabsComponent.uniqueIds(this.tabs)\n this.tabs.forEach((tab) => {\n if (tab.directive) tab.directive.id = tab.id\n })\n this.updateTabs()\n }\n\n /** @internal */\n protected updateTabs() {\n const url = window.location.href\n // Select tab if its link matches active url\n let selectedTab = this.tabs.find(\n ({ link, disabled }) => link && !disabled && url.endsWith(link),\n )\n // Fallback to first active tab\n if (!selectedTab) selectedTab = this.tabs.find((tab) => tab.active)\n // Fallback to first tab\n if (!selectedTab) selectedTab = this.tabs[0]\n // Select or give up\n if (selectedTab && this.selectedTab !== selectedTab)\n this.onSelect(selectedTab.id)\n }\n\n ngOnDestroy() {\n this.subs.forEach((sub) => sub.unsubscribe())\n }\n\n /** @internal */\n protected activateTab(tab: Tab) {\n // Deactivate all tabs\n this.tabs.forEach((t) => {\n t.active = false\n if (t.directive) t.directive.active = false\n })\n // Activate selected tab\n tab.active = true\n if (tab.directive) tab.directive.active = true\n // Send end event\n this.ngvTabSwitch.emit({ type: 'end', prev: this.selectedTab, next: tab })\n this.selectedTab = tab\n this.isSwitching = false\n }\n\n /** @internal */\n onSelect(id: string | number | undefined) {\n const selectedTab = this.tabs.find((tab) => tab.id === id)\n if (\n selectedTab &&\n !selectedTab.disabled &&\n selectedTab !== this.selectedTab\n ) {\n let cancelled = false\n // Events are synchronous and allow for tab switch to be cancelled if desired\n this.isSwitching = true\n this.ngvTabSwitch.emit({\n type: 'start',\n prev: this.selectedTab,\n next: selectedTab,\n cancel: () => {\n cancelled = true\n },\n })\n if (cancelled) {\n this.ngvTabSwitch.emit({\n type: 'cancel',\n prev: this.selectedTab,\n next: selectedTab,\n })\n this.isSwitching = false\n return\n }\n if (selectedTab.link) {\n // Navigate and wait for guard accept route\n this.router\n .navigateByUrl(selectedTab.link, { replaceUrl: true })\n .then((changed) => {\n if (changed === false) {\n this.ngvTabSwitch.emit({\n type: 'cancel',\n prev: this.selectedTab,\n next: selectedTab,\n })\n this.isSwitching = false\n } else this.activateTab(selectedTab)\n })\n } else {\n this.activateTab(selectedTab)\n }\n }\n }\n\n /** @internal */\n onKeyDown(event: KeyboardEvent) {\n const tabElement = event.target as HTMLElement\n if (!tabElement) return false\n const parent = tabElement.parentElement\n switch (event.key) {\n case 'End': // End\n if (parent)\n this.tabFocusHelper(event, parent.lastElementChild as HTMLElement)\n break\n\n case 'Home': // Home\n if (parent)\n this.tabFocusHelper(event, parent.firstElementChild as HTMLElement)\n break\n\n case 'LeftArrow': // Left arrow\n case 'UpArrow': // Up arrow\n this.tabFocusHelper(\n event,\n tabElement.previousElementSibling as HTMLElement,\n )\n break\n\n case 'RightArrow': // Right arrow\n case 'DownArrow': // Down arrow\n this.tabFocusHelper(event, tabElement.nextElementSibling as HTMLElement)\n break\n }\n return true\n }\n\n /** @internal */\n protected tabFocusHelper(event: KeyboardEvent, tabElement: HTMLElement) {\n if (!tabElement || !(tabElement instanceof HTMLElement)) return\n event.preventDefault()\n event.stopPropagation()\n tabElement.focus()\n this.onSelect(tabElement.id.slice(4))\n }\n}\n","<ng-container *transloco=\"let t\">\n <div\n class=\"gds-tabs__tablist\"\n role=\"tablist\"\n [attr.data-thook]=\"thook + '-list'\"\n (keydown)=\"onKeyDown($event)\"\n >\n <button\n class=\"gds-tabs__tab\"\n [id]=\"'tab-' + (tab.id !== undefined ? tab.id : '')\"\n role=\"tab\"\n [attr.data-thook]=\"tab.thook || thook + '-tab'\"\n [tabindex]=\"tab.active ? 0 : -1\"\n [attr.aria-controls]=\"'panel-' + (tab.id !== undefined ? tab.id : '')\"\n [attr.aria-selected]=\"tab.active\"\n [class.-selected]=\"tab.active\"\n [disabled]=\"tab.disabled\"\n [innerHTML]=\"t(tab.tab)\"\n (click)=\"onSelect(tab.id)\"\n *ngFor=\"let tab of tabs\"\n ></button>\n </div>\n <article\n *ngIf=\"useRouting\"\n class=\"gds-tabs__panel -active\"\n [id]=\"'panel-' + (selectedTab ? selectedTab.id : '')\"\n [attr.data-thook]=\"thook + '-panel'\"\n [attr.aria-labelledby]=\"'tab-' + (selectedTab ? selectedTab.id : '')\"\n >\n <router-outlet></router-outlet>\n </article>\n <ng-content *ngIf=\"!useRouting\"></ng-content>\n</ng-container>\n","import { CommonModule } from '@angular/common'\nimport { NgModule } from '@angular/core'\nimport { RouterModule } from '@angular/router'\nimport { TranslocoModule } from '@jsverse/transloco'\n\nimport { TabDirective } from './tab.directive'\nimport { TabsComponent } from './tabs.component'\n\n@NgModule({\n declarations: [TabDirective, TabsComponent],\n imports: [CommonModule, TranslocoModule, RouterModule],\n exports: [TabDirective, TabsComponent],\n})\nexport class NggvTabsModule {}\n","/*\n * Public API Surface of tabs\n */\n\nexport * from './tab.directive'\nexport * from './tabs.component'\nexport * from './tabs.models'\nexport * from './tabs.module'\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"sebgroup-green-angular-src-v-angular-tabs.mjs","sources":["../../../../libs/angular/src/v-angular/tabs/tab.directive.ts","../../../../libs/angular/src/v-angular/tabs/tabs.component.ts","../../../../libs/angular/src/v-angular/tabs/tabs.component.html","../../../../libs/angular/src/v-angular/tabs/tabs.module.ts","../../../../libs/angular/src/v-angular/tabs/index.ts","../../../../libs/angular/src/v-angular/tabs/sebgroup-green-angular-src-v-angular-tabs.ts"],"sourcesContent":["import { Directive, HostBinding, Input } from '@angular/core'\n\n/**\n * Directive that provides the tab container with data about its child tabs.\n * The directive sets its own active state and adds aria attributes.\n *\n * @example\n * <nggv-tabs>\n * <article tab=\"Tab title 1\"> <!-- Content --> </article>\n * <article tab=\"Tab title 2\" [active]=\"true\"> <!-- Content --> </article>\n * <article tab=\"Tab title 3\" disabled> <!-- Content --> </article>\n * <article tab=\"<strong>Tab title 4</strong>\"> <!-- Content --> </article>\n * </nggv-tabs>\n */\n@Directive({\n // eslint-disable-next-line @angular-eslint/directive-selector\n selector: '[tab]',\n standalone: false\n})\nexport class TabDirective {\n /** @internal */\n @HostBinding('class.gds-tabs__panel') baseClass = true\n /** @internal */\n @HostBinding('attr.role') role = 'tabpanel'\n /** Special property used for selecting DOM elements during automated UI testing. */\n @HostBinding('attr.data-thook') @Input() thook: string | null | undefined =\n 'tabs-panel'\n /** Sets whether this tab should be the active tab on load. */\n @HostBinding('class.-active') @Input() active = false\n /** @internal */\n @HostBinding('attr.hidden') get hidden() {\n return !this.active\n }\n /** Sets the title displayed in the tab list for this child. */\n @Input() tab!: string\n /** Sets whether this tab should be able to be selected. */\n @Input() disabled = false\n /** Identifier used for aria attributes and selection. */\n @Input() id: string | number | undefined // todo: discuss if window.ngv.nextId() should be used\n\n /** @internal */\n @HostBinding('attr.id') get attrId() {\n return `panel-${this.id}`\n }\n\n /** @internal */\n @HostBinding('attr.aria-labelledby') get ariaLabelledby() {\n return `tab-${this.id}`\n }\n}\n","/* eslint-disable no-console */\nimport {\n AfterContentInit,\n Component,\n ContentChildren,\n EventEmitter,\n HostBinding,\n Input,\n OnChanges,\n OnDestroy,\n OnInit,\n Output,\n QueryList,\n SimpleChanges,\n} from '@angular/core'\nimport { NavigationEnd, Router } from '@angular/router'\nimport { Subscription } from 'rxjs'\nimport { filter } from 'rxjs/operators'\n\nimport { TabDirective } from './tab.directive'\nimport { EventTabChange, Tab } from './tabs.models'\n\n@Component({\n selector: 'nggv-tabs',\n templateUrl: './tabs.component.html',\n styleUrls: ['./tabs.component.scss'],\n standalone: false\n})\nexport class TabsComponent\n implements OnChanges, OnInit, AfterContentInit, OnDestroy\n{\n /** @internal */\n @HostBinding('class.gds-tabs') baseClass = true\n\n /** Special property used for selecting DOM elements during automated UI testing. */\n @HostBinding('attr.data-thook') @Input() thook: string | null | undefined =\n 'tabs'\n\n /** @internal List of children with a {@link TabDirective}. */\n @ContentChildren(TabDirective) tabRefs: QueryList<TabDirective> =\n new QueryList()\n\n /**\n * List of tabs to generate, this should not be used in conjunction with children that have a {@link TabDirective}.\n * It is useful for generating a list of tabs with links for navigation.\n * If any tab has the link property, a `<router-outlet>` is added below the tabs list.\n */\n @Input() tabs: Tab[] = []\n\n /**\n * Event triggered on initialization and every time the active tab changes.\n * The tab change can be cancelled if event type is set to `'before'` and `cancel()` is called.\n */\n @Output() public ngvTabSwitch = new EventEmitter<EventTabChange>()\n\n /** @internal Adds a `<router-outlet>` below the tabs list. */\n useRouting = false\n\n /** @internal The currently active tab. */\n selectedTab: Tab | undefined\n\n /** @internal If tab switching has started. */\n isSwitching = false\n\n /** @internal */\n protected subs: Subscription[] = []\n\n constructor(protected router: Router) {}\n\n /** @internal */\n static uniqueIds(tabs: Tab[]) {\n const uniqueIds = new Set()\n let offset = 0\n return tabs.map((tab, index) => {\n if (tab.id && !uniqueIds.has(tab.id)) {\n // Id is already unique\n uniqueIds.add(tab.id)\n return { ...tab }\n } else {\n // If no id is set for the tab, use the next available index\n while (uniqueIds.has(index + offset)) offset++\n const id = index + offset\n if (uniqueIds.has(tab.id)) {\n // eslint-disable-next-line no-console\n console.warn(\n `Duplicate tab id \"${tab.id}\" found for tab \"${tab.tab}\", de-duplicating using index + offset. New tab id will be ${id}`,\n )\n }\n uniqueIds.add(id)\n return { ...tab, id }\n }\n })\n }\n\n ngOnChanges(changes: SimpleChanges) {\n if (changes.tabs.currentValue) {\n // Update tabs on property updates\n this.updateFromInput()\n }\n }\n\n ngOnInit() {\n // Update tabs on route change\n this.subs.push(\n this.router.events\n .pipe(filter((e): e is NavigationEnd => e instanceof NavigationEnd))\n .subscribe((e: NavigationEnd) => {\n // Skip if already routing to tab\n if (this.isSwitching) return\n const tab = this.tabs.find(({ link }) => link && e.url.endsWith(link))\n if (tab) {\n this.onSelect(tab.id)\n if (tab.disabled) {\n // Fallback to previously selected tab or first tab not disabled\n const fallbackTab = this.selectedTab\n ? this.selectedTab\n : this.tabs.find(({ disabled }) => !disabled)\n if (fallbackTab && fallbackTab.link)\n this.router.navigateByUrl(fallbackTab.link)\n }\n }\n }),\n )\n }\n\n ngAfterContentInit() {\n // Update tabs on view init\n if (this.tabRefs.length) {\n this.updateFromReferences()\n }\n // Update tabs on view child change\n this.subs.push(this.tabRefs.changes.subscribe(this.updateFromReferences))\n }\n\n /** @internal */\n protected updateFromInput = () => {\n // Make sure each tab has a unique id\n this.tabs = TabsComponent.uniqueIds(this.tabs)\n // Determine if router outlet should be used\n this.useRouting = this.tabs.some(({ link }) => link)\n this.updateTabs()\n }\n\n /** @internal */\n protected updateFromReferences = () => {\n this.tabs = this.tabRefs.map((tabRef) => ({\n tab: tabRef.tab,\n id: tabRef.id,\n active: tabRef.active,\n disabled: tabRef.disabled,\n directive: tabRef,\n }))\n // Make sure each tab has a unique id\n this.tabs = TabsComponent.uniqueIds(this.tabs)\n this.tabs.forEach((tab) => {\n if (tab.directive) tab.directive.id = tab.id\n })\n this.updateTabs()\n }\n\n /** @internal */\n protected updateTabs() {\n const url = window.location.href\n // Select tab if its link matches active url\n let selectedTab = this.tabs.find(\n ({ link, disabled }) => link && !disabled && url.endsWith(link),\n )\n // Fallback to first active tab\n if (!selectedTab) selectedTab = this.tabs.find((tab) => tab.active)\n // Fallback to first tab\n if (!selectedTab) selectedTab = this.tabs[0]\n // Select or give up\n if (selectedTab && this.selectedTab !== selectedTab)\n this.onSelect(selectedTab.id)\n }\n\n ngOnDestroy() {\n this.subs.forEach((sub) => sub.unsubscribe())\n }\n\n /** @internal */\n protected activateTab(tab: Tab) {\n // Deactivate all tabs\n this.tabs.forEach((t) => {\n t.active = false\n if (t.directive) t.directive.active = false\n })\n // Activate selected tab\n tab.active = true\n if (tab.directive) tab.directive.active = true\n // Send end event\n this.ngvTabSwitch.emit({ type: 'end', prev: this.selectedTab, next: tab })\n this.selectedTab = tab\n this.isSwitching = false\n }\n\n /** @internal */\n onSelect(id: string | number | undefined) {\n const selectedTab = this.tabs.find((tab) => tab.id === id)\n if (\n selectedTab &&\n !selectedTab.disabled &&\n selectedTab !== this.selectedTab\n ) {\n let cancelled = false\n // Events are synchronous and allow for tab switch to be cancelled if desired\n this.isSwitching = true\n this.ngvTabSwitch.emit({\n type: 'start',\n prev: this.selectedTab,\n next: selectedTab,\n cancel: () => {\n cancelled = true\n },\n })\n if (cancelled) {\n this.ngvTabSwitch.emit({\n type: 'cancel',\n prev: this.selectedTab,\n next: selectedTab,\n })\n this.isSwitching = false\n return\n }\n if (selectedTab.link) {\n // Navigate and wait for guard accept route\n this.router\n .navigateByUrl(selectedTab.link, { replaceUrl: true })\n .then((changed) => {\n if (changed === false) {\n this.ngvTabSwitch.emit({\n type: 'cancel',\n prev: this.selectedTab,\n next: selectedTab,\n })\n this.isSwitching = false\n } else this.activateTab(selectedTab)\n })\n } else {\n this.activateTab(selectedTab)\n }\n }\n }\n\n /** @internal */\n onKeyDown(event: KeyboardEvent) {\n const tabElement = event.target as HTMLElement\n if (!tabElement) return false\n const parent = tabElement.parentElement\n switch (event.key) {\n case 'End': // End\n if (parent)\n this.tabFocusHelper(event, parent.lastElementChild as HTMLElement)\n break\n\n case 'Home': // Home\n if (parent)\n this.tabFocusHelper(event, parent.firstElementChild as HTMLElement)\n break\n\n case 'LeftArrow': // Left arrow\n case 'UpArrow': // Up arrow\n this.tabFocusHelper(\n event,\n tabElement.previousElementSibling as HTMLElement,\n )\n break\n\n case 'RightArrow': // Right arrow\n case 'DownArrow': // Down arrow\n this.tabFocusHelper(event, tabElement.nextElementSibling as HTMLElement)\n break\n }\n return true\n }\n\n /** @internal */\n protected tabFocusHelper(event: KeyboardEvent, tabElement: HTMLElement) {\n if (!tabElement || !(tabElement instanceof HTMLElement)) return\n event.preventDefault()\n event.stopPropagation()\n tabElement.focus()\n this.onSelect(tabElement.id.slice(4))\n }\n}\n","<ng-container *transloco=\"let t\">\n <div\n class=\"gds-tabs__tablist\"\n role=\"tablist\"\n [attr.data-thook]=\"thook + '-list'\"\n (keydown)=\"onKeyDown($event)\"\n >\n <button\n class=\"gds-tabs__tab\"\n [id]=\"'tab-' + (tab.id !== undefined ? tab.id : '')\"\n role=\"tab\"\n [attr.data-thook]=\"tab.thook || thook + '-tab'\"\n [tabindex]=\"tab.active ? 0 : -1\"\n [attr.aria-controls]=\"'panel-' + (tab.id !== undefined ? tab.id : '')\"\n [attr.aria-selected]=\"tab.active\"\n [class.-selected]=\"tab.active\"\n [disabled]=\"tab.disabled\"\n [innerHTML]=\"t(tab.tab)\"\n (click)=\"onSelect(tab.id)\"\n *ngFor=\"let tab of tabs\"\n ></button>\n </div>\n <article\n *ngIf=\"useRouting\"\n class=\"gds-tabs__panel -active\"\n [id]=\"'panel-' + (selectedTab ? selectedTab.id : '')\"\n [attr.data-thook]=\"thook + '-panel'\"\n [attr.aria-labelledby]=\"'tab-' + (selectedTab ? selectedTab.id : '')\"\n >\n <router-outlet></router-outlet>\n </article>\n <ng-content *ngIf=\"!useRouting\"></ng-content>\n</ng-container>\n","import { CommonModule } from '@angular/common'\nimport { NgModule } from '@angular/core'\nimport { RouterModule } from '@angular/router'\nimport { TranslocoModule } from '@jsverse/transloco'\n\nimport { TabDirective } from './tab.directive'\nimport { TabsComponent } from './tabs.component'\n\n@NgModule({\n declarations: [TabDirective, TabsComponent],\n imports: [CommonModule, TranslocoModule, RouterModule],\n exports: [TabDirective, TabsComponent],\n})\nexport class NggvTabsModule {}\n","/*\n * Public API Surface of tabs\n */\n\nexport * from './tab.directive'\nexport * from './tabs.component'\nexport * from './tabs.models'\nexport * from './tabs.module'\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
|
|
@@ -87,10 +87,10 @@ class NggvTextareaComponent extends NggvBaseControlValueAccessorComponent {
|
|
|
87
87
|
this.state = event.target.value;
|
|
88
88
|
this.onChange(this.state);
|
|
89
89
|
}
|
|
90
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.
|
|
91
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.
|
|
90
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.18", ngImport: i0, type: NggvTextareaComponent, deps: [{ token: i1.NgControl, optional: true, self: true }, { token: TRANSLOCO_SCOPE, optional: true }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
91
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.18", type: NggvTextareaComponent, isStandalone: false, selector: "nggv-textarea", inputs: { thook: "thook", placeholder: "placeholder", readonly: "readonly", minLength: "minLength", minlength: "minlength", maxLength: "maxLength", maxlength: "maxlength", rows: "rows", size: "size" }, host: { properties: { "attr.data-thook": "this.thook", "class.small": "this.isSmall", "class.large": "this.isLarge" } }, usesInheritance: true, ngImport: i0, template: "<!-- LABEL -->\n<label\n [id]=\"id + '-label'\"\n class=\"gds-field-label hide-if-empty\"\n [attr.for]=\"id + '-textarea'\"\n *transloco=\"let t; read: scope\"\n>\n <ng-template\n *ngTemplateOutlet=\"labelContentTpl || basicLabelContentTpl\"\n ></ng-template>\n <ng-template #basicLabelContentTpl>\n <!-- to trigger css:empty if no label was added -->\n <ng-container *ngIf=\"label\">\n {{ label }}\n <span\n *ngIf=\"optional === true || (required !== true && optional !== false)\"\n class=\"gds-field-label--optional\"\n >\n ({{ t('label.optional') }})\n </span>\n </ng-container>\n </ng-template>\n</label>\n\n<!-- DESCRIPTION -->\n<div class=\"form-info description hide-if-empty\" *ngIf=\"description && descriptionIsVisible\">\n {{ description }}\n</div>\n\n<!-- LOCKED INPUT -->\n<ng-container *ngIf=\"locked\">\n <ng-template\n *ngTemplateOutlet=\"\n lockedTpl || defaultLockedTpl;\n context: { $implicit: state }\n \"\n ></ng-template>\n <ng-template #defaultLockedTpl>\n <div\n [id]=\"id + '-textarea'\"\n class=\"nggv-field--locked\"\n [attr.name]=\"name\"\n [attr.value]=\"state\"\n [attr.role]=\"role\"\n >\n <span *ngIf=\"!state\" class=\"unset-state\">-</span>\n <ng-container *ngIf=\"state\">\n {{ state }}\n </ng-container>\n </div>\n </ng-template>\n</ng-container>\n\n<!-- INPUT FIELD -->\n<ng-container *ngIf=\"!locked\">\n <textarea\n #input\n [id]=\"id + '-textarea'\"\n class=\"gds-field\"\n [ngClass]=\"{ 'no-resize': !!rows }\"\n [class.nggv-field--error]=\"invalid\"\n [attr.name]=\"name\"\n [attr.required]=\"required || null\"\n [disabled]=\"disabled\"\n [autofocus]=\"autofocus\"\n [readOnly]=\"readonly\"\n [attr.maxlength]=\"maxlength\"\n [attr.minlength]=\"minlength\"\n [attr.role]=\"role\"\n [attr.rows]=\"rows\"\n [attr.placeholder]=\"placeholder\"\n [attr.aria-label]=\"description\"\n [value]=\"state\"\n title=\"\"\n (input)=\"onInput($event)\"\n (focus)=\"onFocus($event)\"\n (blur)=\"onBlur($event)\"\n ></textarea>\n\n <!-- ERRORS -->\n <div\n class=\"gds-form-item__footer error-wrapper\"\n *transloco=\"let t; read: scope\"\n >\n <span\n class=\"form-info form-info--error\"\n [attr.for]=\"id + '-textarea'\"\n *ngIf=\"invalid && (error || ngControl?.invalid)\"\n >\n <span class=\"error-icon\">\n <gds-icon-triangle-exclamation\n width=\"16\"\n height=\"16\"\n solid=\"true\"\n *nggCoreElement\n ></gds-icon-triangle-exclamation>\n </span>\n\n <span\n *ngIf=\"error; else errorsRef\"\n [attr.data-thook]=\"thook + '-errorlabel'\"\n >{{ error }}</span\n >\n <ng-template #errorsRef>\n <span\n *ngIf=\"firstError as error\"\n [attr.data-thook]=\"thook + '-errorlabel'\"\n >\n {{ t('error.field' + error?.code, error?.params) }}\n </span>\n </ng-template>\n </span>\n\n <ng-container *ngIf=\"hasMaxLength\">\n <span\n *nggvCharacterCountdown=\"\n maxlength;\n currentLength: (inputRef?.nativeElement?.value ?? '').length;\n charactersLeft as charactersLeft\n \"\n class=\"form-info form-info--countdown\"\n style=\"text-align: right\"\n >\n {{ charactersLeft }} {{ t('label.maxlength') }}\n </span>\n </ng-container>\n </div>\n\n <!-- CHILDREN -->\n <ng-content></ng-content>\n</ng-container>\n", styles: [":host{--sg-text-primary: #333;--sg-form-control-bg: #fff;--gds-ref-pallet-base100: hsl(0, 0%, 97%);--sg-border-radius: 4px;--sg-border-width: 1px;--sg-border-color: #868686}:host textarea{padding:.75rem 1rem;border-radius:var(--sg-border-radius);border:solid var(--sg-border-width) var(--sg-border-color);--border-color: var(--sg-border-color)}:host textarea:focus:not(:focus-visible){box-shadow:none;outline:0}:host textarea:focus,:host textarea:focus-visible{outline-color:var(--gds-sys-color-focus-outline);outline-style:solid;outline-width:.125rem;outline-offset:.125rem}:host textarea{align-items:center;background-color:var(--sg-form-control-bg);color:var(--text-primary-color);display:flex;justify-content:center;resize:vertical}@media screen and (-ms-high-contrast:active){:host textarea{border:2px solid currentcolor}}:host textarea:hover{background-color:var(--gds-sys-color-base-100)}:host textarea:disabled,:host textarea.disabled,:host textarea[aria-disabled=true]{background:var(--sg-form-control-bg-disabled)!important;color:var(--text-disabled-color)!important;border-color:var(--border-disabled-color)!important;cursor:not-allowed}:host textarea:disabled::placeholder,:host textarea.disabled::placeholder,:host textarea[aria-disabled=true]::placeholder{color:var(--text-disabled-color)}:host label:not(.gds-field-notice):is(label){margin-bottom:0}:host label:not(.gds-field-notice).form-control{width:fit-content}@supports (-moz-appearance: none){:host label:not(.gds-field-notice).form-control:focus:not(:focus-visible){box-shadow:none;outline:0}:host label:not(.gds-field-notice).form-control:focus,:host label:not(.gds-field-notice).form-control:focus-within{outline-color:var(--gds-sys-color-focus-outline);outline-style:solid;outline-width:.125rem;outline-offset:.125rem}}:host label:not(.gds-field-notice):not(.form-control){font-weight:500;width:100%;line-height:1.25rem}:host label:not(.gds-field-notice)+input,:host label:not(.gds-field-notice)+textarea,fieldset :host label:not(.gds-field-notice)+div,:host label:not(.gds-field-notice)+button,:host label:not(.gds-field-notice)+.group-stepper,:host label:not(.gds-field-notice)+.stepper-wrapper,:host label:not(.gds-field-notice)+.group{margin-top:.5rem}:host label:not(.gds-field-notice)+.form-info{margin-bottom:.5rem}:host label+.gds-field,:host label+.nggv-field--locked{margin-top:.5rem}:host .hide-if-empty:empty{display:none}:host .unset-state{padding-left:.5rem}:host .gds-field-label--optional{font-weight:400}:host textarea{width:100%;max-width:100%;box-sizing:border-box;font-family:inherit;font-size:1rem}:host textarea.nggv-field--error{border-bottom:.125rem solid #9f000a!important}:host .description{margin-bottom:.5rem}:host .error-wrapper{margin-top:.5rem;display:flex}:host .form-info{font-size:.875rem;line-height:1.25rem;width:100%}:host .gds-form-item__footer .form-info{font-weight:500}:host .gds-form-item__footer .form-info--error{display:flex;align-items:flex-start;gap:.5em;color:#9f000a}:host .gds-form-item__footer .form-info--error .error-icon{margin-top:.128rem;align-items:center}:host .gds-form-item__footer>.form-info--countdown{font-weight:400}:host .no-resize{resize:none}:host .no-resize::-webkit-scrollbar{-webkit-appearance:none}:host .no-resize::-webkit-scrollbar-thumb{border-radius:.5rem}:host.small label:not(.gds-field-notice):not(.form-control){font-size:.875rem;line-height:1rem}:host.small label+textarea{margin-top:.25rem}:host.small textarea{padding:.38rem .5rem;font-size:.875rem}:host.small .error-wrapper,:host.small .form-info{margin-top:.25rem;font-size:.875rem;line-height:1rem}:host.small .gds-form-item__footer:not(:empty){margin-top:0rem}\n"], dependencies: [{ kind: "directive", type: i2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i3.TranslocoDirective, selector: "[transloco]", inputs: ["transloco", "translocoParams", "translocoScope", "translocoRead", "translocoPrefix", "translocoLang", "translocoLoadingTpl"] }, { kind: "directive", type: i4.CharacterCountdownDirective, selector: "[nggvCharacterCountdown]", inputs: ["nggvCharacterCountdown", "nggvCharacterCountdownCurrentLength"] }, { kind: "directive", type: i5.NggCoreElementDirective, selector: "[nggCoreElement]" }] }); }
|
|
92
92
|
}
|
|
93
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.
|
|
93
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.18", ngImport: i0, type: NggvTextareaComponent, decorators: [{
|
|
94
94
|
type: Component,
|
|
95
95
|
args: [{ selector: 'nggv-textarea', standalone: false, template: "<!-- LABEL -->\n<label\n [id]=\"id + '-label'\"\n class=\"gds-field-label hide-if-empty\"\n [attr.for]=\"id + '-textarea'\"\n *transloco=\"let t; read: scope\"\n>\n <ng-template\n *ngTemplateOutlet=\"labelContentTpl || basicLabelContentTpl\"\n ></ng-template>\n <ng-template #basicLabelContentTpl>\n <!-- to trigger css:empty if no label was added -->\n <ng-container *ngIf=\"label\">\n {{ label }}\n <span\n *ngIf=\"optional === true || (required !== true && optional !== false)\"\n class=\"gds-field-label--optional\"\n >\n ({{ t('label.optional') }})\n </span>\n </ng-container>\n </ng-template>\n</label>\n\n<!-- DESCRIPTION -->\n<div class=\"form-info description hide-if-empty\" *ngIf=\"description && descriptionIsVisible\">\n {{ description }}\n</div>\n\n<!-- LOCKED INPUT -->\n<ng-container *ngIf=\"locked\">\n <ng-template\n *ngTemplateOutlet=\"\n lockedTpl || defaultLockedTpl;\n context: { $implicit: state }\n \"\n ></ng-template>\n <ng-template #defaultLockedTpl>\n <div\n [id]=\"id + '-textarea'\"\n class=\"nggv-field--locked\"\n [attr.name]=\"name\"\n [attr.value]=\"state\"\n [attr.role]=\"role\"\n >\n <span *ngIf=\"!state\" class=\"unset-state\">-</span>\n <ng-container *ngIf=\"state\">\n {{ state }}\n </ng-container>\n </div>\n </ng-template>\n</ng-container>\n\n<!-- INPUT FIELD -->\n<ng-container *ngIf=\"!locked\">\n <textarea\n #input\n [id]=\"id + '-textarea'\"\n class=\"gds-field\"\n [ngClass]=\"{ 'no-resize': !!rows }\"\n [class.nggv-field--error]=\"invalid\"\n [attr.name]=\"name\"\n [attr.required]=\"required || null\"\n [disabled]=\"disabled\"\n [autofocus]=\"autofocus\"\n [readOnly]=\"readonly\"\n [attr.maxlength]=\"maxlength\"\n [attr.minlength]=\"minlength\"\n [attr.role]=\"role\"\n [attr.rows]=\"rows\"\n [attr.placeholder]=\"placeholder\"\n [attr.aria-label]=\"description\"\n [value]=\"state\"\n title=\"\"\n (input)=\"onInput($event)\"\n (focus)=\"onFocus($event)\"\n (blur)=\"onBlur($event)\"\n ></textarea>\n\n <!-- ERRORS -->\n <div\n class=\"gds-form-item__footer error-wrapper\"\n *transloco=\"let t; read: scope\"\n >\n <span\n class=\"form-info form-info--error\"\n [attr.for]=\"id + '-textarea'\"\n *ngIf=\"invalid && (error || ngControl?.invalid)\"\n >\n <span class=\"error-icon\">\n <gds-icon-triangle-exclamation\n width=\"16\"\n height=\"16\"\n solid=\"true\"\n *nggCoreElement\n ></gds-icon-triangle-exclamation>\n </span>\n\n <span\n *ngIf=\"error; else errorsRef\"\n [attr.data-thook]=\"thook + '-errorlabel'\"\n >{{ error }}</span\n >\n <ng-template #errorsRef>\n <span\n *ngIf=\"firstError as error\"\n [attr.data-thook]=\"thook + '-errorlabel'\"\n >\n {{ t('error.field' + error?.code, error?.params) }}\n </span>\n </ng-template>\n </span>\n\n <ng-container *ngIf=\"hasMaxLength\">\n <span\n *nggvCharacterCountdown=\"\n maxlength;\n currentLength: (inputRef?.nativeElement?.value ?? '').length;\n charactersLeft as charactersLeft\n \"\n class=\"form-info form-info--countdown\"\n style=\"text-align: right\"\n >\n {{ charactersLeft }} {{ t('label.maxlength') }}\n </span>\n </ng-container>\n </div>\n\n <!-- CHILDREN -->\n <ng-content></ng-content>\n</ng-container>\n", styles: [":host{--sg-text-primary: #333;--sg-form-control-bg: #fff;--gds-ref-pallet-base100: hsl(0, 0%, 97%);--sg-border-radius: 4px;--sg-border-width: 1px;--sg-border-color: #868686}:host textarea{padding:.75rem 1rem;border-radius:var(--sg-border-radius);border:solid var(--sg-border-width) var(--sg-border-color);--border-color: var(--sg-border-color)}:host textarea:focus:not(:focus-visible){box-shadow:none;outline:0}:host textarea:focus,:host textarea:focus-visible{outline-color:var(--gds-sys-color-focus-outline);outline-style:solid;outline-width:.125rem;outline-offset:.125rem}:host textarea{align-items:center;background-color:var(--sg-form-control-bg);color:var(--text-primary-color);display:flex;justify-content:center;resize:vertical}@media screen and (-ms-high-contrast:active){:host textarea{border:2px solid currentcolor}}:host textarea:hover{background-color:var(--gds-sys-color-base-100)}:host textarea:disabled,:host textarea.disabled,:host textarea[aria-disabled=true]{background:var(--sg-form-control-bg-disabled)!important;color:var(--text-disabled-color)!important;border-color:var(--border-disabled-color)!important;cursor:not-allowed}:host textarea:disabled::placeholder,:host textarea.disabled::placeholder,:host textarea[aria-disabled=true]::placeholder{color:var(--text-disabled-color)}:host label:not(.gds-field-notice):is(label){margin-bottom:0}:host label:not(.gds-field-notice).form-control{width:fit-content}@supports (-moz-appearance: none){:host label:not(.gds-field-notice).form-control:focus:not(:focus-visible){box-shadow:none;outline:0}:host label:not(.gds-field-notice).form-control:focus,:host label:not(.gds-field-notice).form-control:focus-within{outline-color:var(--gds-sys-color-focus-outline);outline-style:solid;outline-width:.125rem;outline-offset:.125rem}}:host label:not(.gds-field-notice):not(.form-control){font-weight:500;width:100%;line-height:1.25rem}:host label:not(.gds-field-notice)+input,:host label:not(.gds-field-notice)+textarea,fieldset :host label:not(.gds-field-notice)+div,:host label:not(.gds-field-notice)+button,:host label:not(.gds-field-notice)+.group-stepper,:host label:not(.gds-field-notice)+.stepper-wrapper,:host label:not(.gds-field-notice)+.group{margin-top:.5rem}:host label:not(.gds-field-notice)+.form-info{margin-bottom:.5rem}:host label+.gds-field,:host label+.nggv-field--locked{margin-top:.5rem}:host .hide-if-empty:empty{display:none}:host .unset-state{padding-left:.5rem}:host .gds-field-label--optional{font-weight:400}:host textarea{width:100%;max-width:100%;box-sizing:border-box;font-family:inherit;font-size:1rem}:host textarea.nggv-field--error{border-bottom:.125rem solid #9f000a!important}:host .description{margin-bottom:.5rem}:host .error-wrapper{margin-top:.5rem;display:flex}:host .form-info{font-size:.875rem;line-height:1.25rem;width:100%}:host .gds-form-item__footer .form-info{font-weight:500}:host .gds-form-item__footer .form-info--error{display:flex;align-items:flex-start;gap:.5em;color:#9f000a}:host .gds-form-item__footer .form-info--error .error-icon{margin-top:.128rem;align-items:center}:host .gds-form-item__footer>.form-info--countdown{font-weight:400}:host .no-resize{resize:none}:host .no-resize::-webkit-scrollbar{-webkit-appearance:none}:host .no-resize::-webkit-scrollbar-thumb{border-radius:.5rem}:host.small label:not(.gds-field-notice):not(.form-control){font-size:.875rem;line-height:1rem}:host.small label+textarea{margin-top:.25rem}:host.small textarea{padding:.38rem .5rem;font-size:.875rem}:host.small .error-wrapper,:host.small .form-info{margin-top:.25rem;font-size:.875rem;line-height:1rem}:host.small .gds-form-item__footer:not(:empty){margin-top:0rem}\n"] }]
|
|
96
96
|
}], ctorParameters: () => [{ type: i1.NgControl, decorators: [{
|
|
@@ -132,17 +132,17 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.9", ngImpor
|
|
|
132
132
|
}] } });
|
|
133
133
|
|
|
134
134
|
class NggvTextareaModule {
|
|
135
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.
|
|
136
|
-
static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "19.2.
|
|
135
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.18", ngImport: i0, type: NggvTextareaModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
|
|
136
|
+
static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "19.2.18", ngImport: i0, type: NggvTextareaModule, declarations: [NggvTextareaComponent], imports: [CommonModule,
|
|
137
137
|
NggvI18nModule,
|
|
138
138
|
NggvCharacterCountdownDirectiveModule,
|
|
139
139
|
NggCoreWrapperModule], exports: [NggvTextareaComponent] }); }
|
|
140
|
-
static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "19.2.
|
|
140
|
+
static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "19.2.18", ngImport: i0, type: NggvTextareaModule, imports: [CommonModule,
|
|
141
141
|
NggvI18nModule,
|
|
142
142
|
NggvCharacterCountdownDirectiveModule,
|
|
143
143
|
NggCoreWrapperModule] }); }
|
|
144
144
|
}
|
|
145
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.
|
|
145
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.18", ngImport: i0, type: NggvTextareaModule, decorators: [{
|
|
146
146
|
type: NgModule,
|
|
147
147
|
args: [{
|
|
148
148
|
declarations: [NggvTextareaComponent],
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sebgroup-green-angular-src-v-angular-textarea.mjs","sources":["../../../../libs/angular/src/v-angular/textarea/textarea.component.ts","../../../../libs/angular/src/v-angular/textarea/textarea.component.html","../../../../libs/angular/src/v-angular/textarea/textarea.module.ts","../../../../libs/angular/src/v-angular/textarea/sebgroup-green-angular-src-v-angular-textarea.ts"],"sourcesContent":["import '@sebgroup/green-core/components/icon/icons/triangle-exclamation.js'\n\nimport {\n ChangeDetectorRef,\n Component,\n HostBinding,\n Inject,\n Input,\n Optional,\n Self,\n} from '@angular/core'\nimport { NgControl } from '@angular/forms'\nimport { TRANSLOCO_SCOPE, TranslocoScope } from '@jsverse/transloco'\n\nimport { NggvBaseControlValueAccessorComponent } from '@sebgroup/green-angular/src/v-angular/base-control-value-accessor'\n\n/** Textarea fields allow users to add and edit longer or multiple line text. */\n@Component({\n selector: 'nggv-textarea',\n templateUrl: './textarea.component.html',\n styleUrls: ['./textarea.component.scss'],\n standalone: false\n})\nexport class NggvTextareaComponent extends NggvBaseControlValueAccessorComponent {\n /** Special property used for selecting DOM elements during automated UI testing. */\n @HostBinding('attr.data-thook') @Input() thook: string | null | undefined =\n 'textarea'\n\n /**\n * Sets the small class based on the size input.\n */\n @HostBinding('class.small') get isSmall(): boolean {\n return this.size === 'small'\n }\n\n /**\n * Sets the large class based on the size input.\n */\n @HostBinding('class.large') get isLarge(): boolean {\n return this.size === 'large'\n }\n\n /** Text shown before input has a written value. */\n @Input() placeholder?: string\n /** If set to true, the value will not be editable. */\n @Input() readonly = false\n /** Minimum length (number of characters) of value. */\n @Input() set minLength(length: number) {\n this._minlength = length\n this.cdr.detectChanges()\n }\n get minlength(): number {\n return this._minlength\n }\n\n /**\n * Minimum length (number of characters) of value.\n * @deprecated minlength triggers angular-template-validation. Use @Input() minLength instead.\n */\n @Input() set minlength(length: number) {\n this._minlength = length\n this.cdr.detectChanges()\n }\n /** Maximum length (number of characters) of value. */\n @Input() set maxLength(length: number) {\n this._maxlength = length\n this.cdr.detectChanges()\n }\n get maxlength(): number {\n return this._maxlength\n }\n /**\n * Maximum length (number of characters) of value.\n * @deprecated maxlength triggers angular-template-validation. Use @Input() maxLength instead.\n */\n @Input() set maxlength(length: number) {\n this._maxlength = length\n this.cdr.detectChanges()\n }\n\n /** Returns if maxlength is used */\n get hasMaxLength(): boolean {\n return !!this.maxlength && this.maxlength !== Number.MAX_SAFE_INTEGER\n }\n\n private _maxlength = Number.MAX_SAFE_INTEGER\n\n private _minlength = 0\n\n /** Sets the height of the textarea and disables resize. A scrollbar will appear if necessary. */\n @Input() rows?: number\n\n /**\n * Sets the displayed size of the textarea.\n */\n @Input() size: 'small' | 'large' = 'large'\n\n constructor(\n @Self() @Optional() public ngControl: NgControl,\n @Optional()\n @Inject(TRANSLOCO_SCOPE)\n protected translocoScope: TranslocoScope,\n protected cdr: ChangeDetectorRef,\n ) {\n super(ngControl, translocoScope, cdr)\n }\n\n /** @internal */\n onInput(event: Event) {\n event.stopPropagation()\n if (this.disabled) return\n this.state = (event.target as HTMLTextAreaElement).value\n this.onChange(this.state)\n }\n}\n","<!-- LABEL -->\n<label\n [id]=\"id + '-label'\"\n class=\"gds-field-label hide-if-empty\"\n [attr.for]=\"id + '-textarea'\"\n *transloco=\"let t; read: scope\"\n>\n <ng-template\n *ngTemplateOutlet=\"labelContentTpl || basicLabelContentTpl\"\n ></ng-template>\n <ng-template #basicLabelContentTpl>\n <!-- to trigger css:empty if no label was added -->\n <ng-container *ngIf=\"label\">\n {{ label }}\n <span\n *ngIf=\"optional === true || (required !== true && optional !== false)\"\n class=\"gds-field-label--optional\"\n >\n ({{ t('label.optional') }})\n </span>\n </ng-container>\n </ng-template>\n</label>\n\n<!-- DESCRIPTION -->\n<div class=\"form-info description hide-if-empty\" *ngIf=\"description && descriptionIsVisible\">\n {{ description }}\n</div>\n\n<!-- LOCKED INPUT -->\n<ng-container *ngIf=\"locked\">\n <ng-template\n *ngTemplateOutlet=\"\n lockedTpl || defaultLockedTpl;\n context: { $implicit: state }\n \"\n ></ng-template>\n <ng-template #defaultLockedTpl>\n <div\n [id]=\"id + '-textarea'\"\n class=\"nggv-field--locked\"\n [attr.name]=\"name\"\n [attr.value]=\"state\"\n [attr.role]=\"role\"\n >\n <span *ngIf=\"!state\" class=\"unset-state\">-</span>\n <ng-container *ngIf=\"state\">\n {{ state }}\n </ng-container>\n </div>\n </ng-template>\n</ng-container>\n\n<!-- INPUT FIELD -->\n<ng-container *ngIf=\"!locked\">\n <textarea\n #input\n [id]=\"id + '-textarea'\"\n class=\"gds-field\"\n [ngClass]=\"{ 'no-resize': !!rows }\"\n [class.nggv-field--error]=\"invalid\"\n [attr.name]=\"name\"\n [attr.required]=\"required || null\"\n [disabled]=\"disabled\"\n [autofocus]=\"autofocus\"\n [readOnly]=\"readonly\"\n [attr.maxlength]=\"maxlength\"\n [attr.minlength]=\"minlength\"\n [attr.role]=\"role\"\n [attr.rows]=\"rows\"\n [attr.placeholder]=\"placeholder\"\n [attr.aria-label]=\"description\"\n [value]=\"state\"\n title=\"\"\n (input)=\"onInput($event)\"\n (focus)=\"onFocus($event)\"\n (blur)=\"onBlur($event)\"\n ></textarea>\n\n <!-- ERRORS -->\n <div\n class=\"gds-form-item__footer error-wrapper\"\n *transloco=\"let t; read: scope\"\n >\n <span\n class=\"form-info form-info--error\"\n [attr.for]=\"id + '-textarea'\"\n *ngIf=\"invalid && (error || ngControl?.invalid)\"\n >\n <span class=\"error-icon\">\n <gds-icon-triangle-exclamation\n width=\"16\"\n height=\"16\"\n solid=\"true\"\n *nggCoreElement\n ></gds-icon-triangle-exclamation>\n </span>\n\n <span\n *ngIf=\"error; else errorsRef\"\n [attr.data-thook]=\"thook + '-errorlabel'\"\n >{{ error }}</span\n >\n <ng-template #errorsRef>\n <span\n *ngIf=\"firstError as error\"\n [attr.data-thook]=\"thook + '-errorlabel'\"\n >\n {{ t('error.field' + error?.code, error?.params) }}\n </span>\n </ng-template>\n </span>\n\n <ng-container *ngIf=\"hasMaxLength\">\n <span\n *nggvCharacterCountdown=\"\n maxlength;\n currentLength: (inputRef?.nativeElement?.value ?? '').length;\n charactersLeft as charactersLeft\n \"\n class=\"form-info form-info--countdown\"\n style=\"text-align: right\"\n >\n {{ charactersLeft }} {{ t('label.maxlength') }}\n </span>\n </ng-container>\n </div>\n\n <!-- CHILDREN -->\n <ng-content></ng-content>\n</ng-container>\n","import '@sebgroup/green-core/components/icon/icons/triangle-exclamation.js'\n\nimport { CommonModule } from '@angular/common'\nimport { CUSTOM_ELEMENTS_SCHEMA, NgModule } from '@angular/core'\n\nimport { NggCoreWrapperModule } from '@sebgroup/green-angular/src/lib/shared'\nimport { NggvCharacterCountdownDirectiveModule } from '@sebgroup/green-angular/src/v-angular/character-countdown'\nimport { NggvI18nModule } from '@sebgroup/green-angular/src/v-angular/i18n'\nimport { NggvTextareaComponent } from './textarea.component'\n\n@NgModule({\n declarations: [NggvTextareaComponent],\n imports: [\n CommonModule,\n NggvI18nModule,\n NggvCharacterCountdownDirectiveModule,\n NggCoreWrapperModule,\n ],\n exports: [NggvTextareaComponent],\n schemas: [CUSTOM_ELEMENTS_SCHEMA],\n})\nexport class NggvTextareaModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":";;;;;;;;;;;;;;;AAgBA;AAOM,MAAO,qBAAsB,SAAQ,qCAAqC,CAAA;AAK9E;;AAEG;AACH,IAAA,IAAgC,OAAO,GAAA;AACrC,QAAA,OAAO,IAAI,CAAC,IAAI,KAAK,OAAO;IAC9B;AAEA;;AAEG;AACH,IAAA,IAAgC,OAAO,GAAA;AACrC,QAAA,OAAO,IAAI,CAAC,IAAI,KAAK,OAAO;IAC9B;;IAOA,IAAa,SAAS,CAAC,MAAc,EAAA;AACnC,QAAA,IAAI,CAAC,UAAU,GAAG,MAAM;AACxB,QAAA,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE;IAC1B;AACA,IAAA,IAAI,SAAS,GAAA;QACX,OAAO,IAAI,CAAC,UAAU;IACxB;AAEA;;;AAGG;IACH,IAAa,SAAS,CAAC,MAAc,EAAA;AACnC,QAAA,IAAI,CAAC,UAAU,GAAG,MAAM;AACxB,QAAA,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE;IAC1B;;IAEA,IAAa,SAAS,CAAC,MAAc,EAAA;AACnC,QAAA,IAAI,CAAC,UAAU,GAAG,MAAM;AACxB,QAAA,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE;IAC1B;AACA,IAAA,IAAI,SAAS,GAAA;QACX,OAAO,IAAI,CAAC,UAAU;IACxB;AACA;;;AAGG;IACH,IAAa,SAAS,CAAC,MAAc,EAAA;AACnC,QAAA,IAAI,CAAC,UAAU,GAAG,MAAM;AACxB,QAAA,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE;IAC1B;;AAGA,IAAA,IAAI,YAAY,GAAA;AACd,QAAA,OAAO,CAAC,CAAC,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,SAAS,KAAK,MAAM,CAAC,gBAAgB;IACvE;AAcA,IAAA,WAAA,CAC6B,SAAoB,EAGrC,cAA8B,EAC9B,GAAsB,EAAA;AAEhC,QAAA,KAAK,CAAC,SAAS,EAAE,cAAc,EAAE,GAAG,CAAC;QANV,IAAA,CAAA,SAAS,GAAT,SAAS;QAG1B,IAAA,CAAA,cAAc,GAAd,cAAc;QACd,IAAA,CAAA,GAAG,GAAH,GAAG;;QA7E0B,IAAA,CAAA,KAAK,GAC5C,UAAU;;QAmBH,IAAA,CAAA,QAAQ,GAAG,KAAK;AAwCjB,QAAA,IAAA,CAAA,UAAU,GAAG,MAAM,CAAC,gBAAgB;QAEpC,IAAA,CAAA,UAAU,GAAG,CAAC;AAKtB;;AAEG;QACM,IAAA,CAAA,IAAI,GAAsB,OAAO;IAU1C;;AAGA,IAAA,OAAO,CAAC,KAAY,EAAA;QAClB,KAAK,CAAC,eAAe,EAAE;QACvB,IAAI,IAAI,CAAC,QAAQ;YAAE;QACnB,IAAI,CAAC,KAAK,GAAI,KAAK,CAAC,MAA8B,CAAC,KAAK;AACxD,QAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC;IAC3B;AA1FW,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,kBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,qBAAqB,uEA6EtB,eAAe,EAAA,QAAA,EAAA,IAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,iBAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AA7Ed,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,qBAAqB,oaCvBlC,uhHAmIA,EAAA,MAAA,EAAA,CAAA,4lHAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,IAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,gBAAA,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,CAAA,yBAAA,EAAA,kBAAA,EAAA,0BAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,kBAAA,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,CAAA,WAAA,EAAA,iBAAA,EAAA,gBAAA,EAAA,eAAA,EAAA,iBAAA,EAAA,eAAA,EAAA,qBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,2BAAA,EAAA,QAAA,EAAA,0BAAA,EAAA,MAAA,EAAA,CAAA,wBAAA,EAAA,qCAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,uBAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,CAAA,EAAA,CAAA,CAAA;;2FD5Ga,qBAAqB,EAAA,UAAA,EAAA,CAAA;kBANjC,SAAS;AACI,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,eAAe,cAGb,KAAK,EAAA,QAAA,EAAA,uhHAAA,EAAA,MAAA,EAAA,CAAA,4lHAAA,CAAA,EAAA;;0BA6EhB;;0BAAQ;;0BACR;;0BACA,MAAM;2BAAC,eAAe;yEA3EgB,KAAK,EAAA,CAAA;sBAA7C,WAAW;uBAAC,iBAAiB;;sBAAG;gBAMD,OAAO,EAAA,CAAA;sBAAtC,WAAW;uBAAC,aAAa;gBAOM,OAAO,EAAA,CAAA;sBAAtC,WAAW;uBAAC,aAAa;gBAKjB,WAAW,EAAA,CAAA;sBAAnB;gBAEQ,QAAQ,EAAA,CAAA;sBAAhB;gBAEY,SAAS,EAAA,CAAA;sBAArB;gBAYY,SAAS,EAAA,CAAA;sBAArB;gBAKY,SAAS,EAAA,CAAA;sBAArB;gBAWY,SAAS,EAAA,CAAA;sBAArB;gBAeQ,IAAI,EAAA,CAAA;sBAAZ;gBAKQ,IAAI,EAAA,CAAA;sBAAZ;;;ME1EU,kBAAkB,CAAA;8GAAlB,kBAAkB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,QAAA,EAAA,CAAA,CAAA;+GAAlB,kBAAkB,EAAA,YAAA,EAAA,CAVd,qBAAqB,CAAA,EAAA,OAAA,EAAA,CAElC,YAAY;YACZ,cAAc;YACd,qCAAqC;AACrC,YAAA,oBAAoB,aAEZ,qBAAqB,CAAA,EAAA,CAAA,CAAA;AAGpB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,kBAAkB,YAR3B,YAAY;YACZ,cAAc;YACd,qCAAqC;YACrC,oBAAoB,CAAA,EAAA,CAAA,CAAA;;2FAKX,kBAAkB,EAAA,UAAA,EAAA,CAAA;kBAX9B,QAAQ;AAAC,YAAA,IAAA,EAAA,CAAA;oBACR,YAAY,EAAE,CAAC,qBAAqB,CAAC;AACrC,oBAAA,OAAO,EAAE;wBACP,YAAY;wBACZ,cAAc;wBACd,qCAAqC;wBACrC,oBAAoB;AACrB,qBAAA;oBACD,OAAO,EAAE,CAAC,qBAAqB,CAAC;oBAChC,OAAO,EAAE,CAAC,sBAAsB,CAAC;AAClC,iBAAA;;;ACpBD;;AAEG;;;;"}
|
|
1
|
+
{"version":3,"file":"sebgroup-green-angular-src-v-angular-textarea.mjs","sources":["../../../../libs/angular/src/v-angular/textarea/textarea.component.ts","../../../../libs/angular/src/v-angular/textarea/textarea.component.html","../../../../libs/angular/src/v-angular/textarea/textarea.module.ts","../../../../libs/angular/src/v-angular/textarea/sebgroup-green-angular-src-v-angular-textarea.ts"],"sourcesContent":["import '@sebgroup/green-core/components/icon/icons/triangle-exclamation.js'\n\nimport {\n ChangeDetectorRef,\n Component,\n HostBinding,\n Inject,\n Input,\n Optional,\n Self,\n} from '@angular/core'\nimport { NgControl } from '@angular/forms'\nimport { TRANSLOCO_SCOPE, TranslocoScope } from '@jsverse/transloco'\n\nimport { NggvBaseControlValueAccessorComponent } from '@sebgroup/green-angular/src/v-angular/base-control-value-accessor'\n\n/** Textarea fields allow users to add and edit longer or multiple line text. */\n@Component({\n selector: 'nggv-textarea',\n templateUrl: './textarea.component.html',\n styleUrls: ['./textarea.component.scss'],\n standalone: false\n})\nexport class NggvTextareaComponent extends NggvBaseControlValueAccessorComponent {\n /** Special property used for selecting DOM elements during automated UI testing. */\n @HostBinding('attr.data-thook') @Input() thook: string | null | undefined =\n 'textarea'\n\n /**\n * Sets the small class based on the size input.\n */\n @HostBinding('class.small') get isSmall(): boolean {\n return this.size === 'small'\n }\n\n /**\n * Sets the large class based on the size input.\n */\n @HostBinding('class.large') get isLarge(): boolean {\n return this.size === 'large'\n }\n\n /** Text shown before input has a written value. */\n @Input() placeholder?: string\n /** If set to true, the value will not be editable. */\n @Input() readonly = false\n /** Minimum length (number of characters) of value. */\n @Input() set minLength(length: number) {\n this._minlength = length\n this.cdr.detectChanges()\n }\n get minlength(): number {\n return this._minlength\n }\n\n /**\n * Minimum length (number of characters) of value.\n * @deprecated minlength triggers angular-template-validation. Use @Input() minLength instead.\n */\n @Input() set minlength(length: number) {\n this._minlength = length\n this.cdr.detectChanges()\n }\n /** Maximum length (number of characters) of value. */\n @Input() set maxLength(length: number) {\n this._maxlength = length\n this.cdr.detectChanges()\n }\n get maxlength(): number {\n return this._maxlength\n }\n /**\n * Maximum length (number of characters) of value.\n * @deprecated maxlength triggers angular-template-validation. Use @Input() maxLength instead.\n */\n @Input() set maxlength(length: number) {\n this._maxlength = length\n this.cdr.detectChanges()\n }\n\n /** Returns if maxlength is used */\n get hasMaxLength(): boolean {\n return !!this.maxlength && this.maxlength !== Number.MAX_SAFE_INTEGER\n }\n\n private _maxlength = Number.MAX_SAFE_INTEGER\n\n private _minlength = 0\n\n /** Sets the height of the textarea and disables resize. A scrollbar will appear if necessary. */\n @Input() rows?: number\n\n /**\n * Sets the displayed size of the textarea.\n */\n @Input() size: 'small' | 'large' = 'large'\n\n constructor(\n @Self() @Optional() public ngControl: NgControl,\n @Optional()\n @Inject(TRANSLOCO_SCOPE)\n protected translocoScope: TranslocoScope,\n protected cdr: ChangeDetectorRef,\n ) {\n super(ngControl, translocoScope, cdr)\n }\n\n /** @internal */\n onInput(event: Event) {\n event.stopPropagation()\n if (this.disabled) return\n this.state = (event.target as HTMLTextAreaElement).value\n this.onChange(this.state)\n }\n}\n","<!-- LABEL -->\n<label\n [id]=\"id + '-label'\"\n class=\"gds-field-label hide-if-empty\"\n [attr.for]=\"id + '-textarea'\"\n *transloco=\"let t; read: scope\"\n>\n <ng-template\n *ngTemplateOutlet=\"labelContentTpl || basicLabelContentTpl\"\n ></ng-template>\n <ng-template #basicLabelContentTpl>\n <!-- to trigger css:empty if no label was added -->\n <ng-container *ngIf=\"label\">\n {{ label }}\n <span\n *ngIf=\"optional === true || (required !== true && optional !== false)\"\n class=\"gds-field-label--optional\"\n >\n ({{ t('label.optional') }})\n </span>\n </ng-container>\n </ng-template>\n</label>\n\n<!-- DESCRIPTION -->\n<div class=\"form-info description hide-if-empty\" *ngIf=\"description && descriptionIsVisible\">\n {{ description }}\n</div>\n\n<!-- LOCKED INPUT -->\n<ng-container *ngIf=\"locked\">\n <ng-template\n *ngTemplateOutlet=\"\n lockedTpl || defaultLockedTpl;\n context: { $implicit: state }\n \"\n ></ng-template>\n <ng-template #defaultLockedTpl>\n <div\n [id]=\"id + '-textarea'\"\n class=\"nggv-field--locked\"\n [attr.name]=\"name\"\n [attr.value]=\"state\"\n [attr.role]=\"role\"\n >\n <span *ngIf=\"!state\" class=\"unset-state\">-</span>\n <ng-container *ngIf=\"state\">\n {{ state }}\n </ng-container>\n </div>\n </ng-template>\n</ng-container>\n\n<!-- INPUT FIELD -->\n<ng-container *ngIf=\"!locked\">\n <textarea\n #input\n [id]=\"id + '-textarea'\"\n class=\"gds-field\"\n [ngClass]=\"{ 'no-resize': !!rows }\"\n [class.nggv-field--error]=\"invalid\"\n [attr.name]=\"name\"\n [attr.required]=\"required || null\"\n [disabled]=\"disabled\"\n [autofocus]=\"autofocus\"\n [readOnly]=\"readonly\"\n [attr.maxlength]=\"maxlength\"\n [attr.minlength]=\"minlength\"\n [attr.role]=\"role\"\n [attr.rows]=\"rows\"\n [attr.placeholder]=\"placeholder\"\n [attr.aria-label]=\"description\"\n [value]=\"state\"\n title=\"\"\n (input)=\"onInput($event)\"\n (focus)=\"onFocus($event)\"\n (blur)=\"onBlur($event)\"\n ></textarea>\n\n <!-- ERRORS -->\n <div\n class=\"gds-form-item__footer error-wrapper\"\n *transloco=\"let t; read: scope\"\n >\n <span\n class=\"form-info form-info--error\"\n [attr.for]=\"id + '-textarea'\"\n *ngIf=\"invalid && (error || ngControl?.invalid)\"\n >\n <span class=\"error-icon\">\n <gds-icon-triangle-exclamation\n width=\"16\"\n height=\"16\"\n solid=\"true\"\n *nggCoreElement\n ></gds-icon-triangle-exclamation>\n </span>\n\n <span\n *ngIf=\"error; else errorsRef\"\n [attr.data-thook]=\"thook + '-errorlabel'\"\n >{{ error }}</span\n >\n <ng-template #errorsRef>\n <span\n *ngIf=\"firstError as error\"\n [attr.data-thook]=\"thook + '-errorlabel'\"\n >\n {{ t('error.field' + error?.code, error?.params) }}\n </span>\n </ng-template>\n </span>\n\n <ng-container *ngIf=\"hasMaxLength\">\n <span\n *nggvCharacterCountdown=\"\n maxlength;\n currentLength: (inputRef?.nativeElement?.value ?? '').length;\n charactersLeft as charactersLeft\n \"\n class=\"form-info form-info--countdown\"\n style=\"text-align: right\"\n >\n {{ charactersLeft }} {{ t('label.maxlength') }}\n </span>\n </ng-container>\n </div>\n\n <!-- CHILDREN -->\n <ng-content></ng-content>\n</ng-container>\n","import '@sebgroup/green-core/components/icon/icons/triangle-exclamation.js'\n\nimport { CommonModule } from '@angular/common'\nimport { CUSTOM_ELEMENTS_SCHEMA, NgModule } from '@angular/core'\n\nimport { NggCoreWrapperModule } from '@sebgroup/green-angular/src/lib/shared'\nimport { NggvCharacterCountdownDirectiveModule } from '@sebgroup/green-angular/src/v-angular/character-countdown'\nimport { NggvI18nModule } from '@sebgroup/green-angular/src/v-angular/i18n'\nimport { NggvTextareaComponent } from './textarea.component'\n\n@NgModule({\n declarations: [NggvTextareaComponent],\n imports: [\n CommonModule,\n NggvI18nModule,\n NggvCharacterCountdownDirectiveModule,\n NggCoreWrapperModule,\n ],\n exports: [NggvTextareaComponent],\n schemas: [CUSTOM_ELEMENTS_SCHEMA],\n})\nexport class NggvTextareaModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
|
|
@@ -86,10 +86,10 @@ class ToastMessageService {
|
|
|
86
86
|
newMessage.timeoutStartTime = Date.now();
|
|
87
87
|
}
|
|
88
88
|
}
|
|
89
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.
|
|
90
|
-
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.2.
|
|
89
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.18", ngImport: i0, type: ToastMessageService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
90
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.2.18", ngImport: i0, type: ToastMessageService, providedIn: 'root' }); }
|
|
91
91
|
}
|
|
92
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.
|
|
92
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.18", ngImport: i0, type: ToastMessageService, decorators: [{
|
|
93
93
|
type: Injectable,
|
|
94
94
|
args: [{
|
|
95
95
|
providedIn: 'root',
|
|
@@ -123,8 +123,8 @@ class ToastComponent {
|
|
|
123
123
|
this.toastMessagesSubscription.unsubscribe();
|
|
124
124
|
}
|
|
125
125
|
}
|
|
126
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.
|
|
127
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.2.
|
|
126
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.18", ngImport: i0, type: ToastComponent, deps: [{ token: ToastMessageService }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
127
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.2.18", type: ToastComponent, isStandalone: false, selector: "nggv-toast", inputs: { closeButtonAriaLabel: "closeButtonAriaLabel" }, ngImport: i0, template: "<output class=\"messages-container\" aria-live=\"polite\">\n <div\n class=\"message\"\n *ngFor=\"let message of messages; trackBy: trackByMessageIndex\"\n [ngClass]=\"message.type\"\n @toastAnimation\n (mouseenter)=\"onMouseEnter(message)\"\n (mouseleave)=\"onMouseLeave(message)\"\n >\n <div class=\"content\" *transloco=\"let t; read: message.translocoScope\">\n <div class=\"message-type-icon-wrapper\">\n <ng-container *ngIf=\"message.type === 'success'\">\n <i>\n <svg\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M17.6203 6.60836L9.40014 14.8285L6.37976 11.8081C6.23332 11.6617 5.99588 11.6617 5.84942 11.8081L4.96554 12.692C4.8191 12.8384 4.8191 13.0759 4.96554 13.2223L9.13495 17.3917C9.28138 17.5382 9.51882 17.5382 9.66529 17.3917L19.0344 8.02258C19.1809 7.87614 19.1809 7.63871 19.0344 7.49224L18.1506 6.60836C18.0041 6.46193 17.7667 6.46193 17.6203 6.60836Z\"\n fill=\"white\"\n ></path>\n </svg>\n </i>\n </ng-container>\n <ng-container\n *ngIf=\"message.type === 'error' || message.type === 'warning'\"\n >\n <i>\n <svg\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M18.2857 4H5.71429C4.7675 4 4 4.7675 4 5.71429V18.2857C4 19.2325 4.7675 20 5.71429 20H18.2857C19.2325 20 20 19.2325 20 18.2857V5.71429C20 4.7675 19.2325 4 18.2857 4ZM10.8682 7.42857H13.1318C13.3777 7.42857 13.5731 7.635 13.5597 7.8805L13.2948 12.7376C13.2824 12.9649 13.0945 13.1429 12.8669 13.1429H11.1331C10.9055 13.1429 10.7176 12.9649 10.7052 12.7376L10.4402 7.8805C10.4269 7.635 10.6223 7.42857 10.8682 7.42857ZM12 17.0714C11.0927 17.0714 10.3571 16.3359 10.3571 15.4286C10.3571 14.5213 11.0927 13.7857 12 13.7857C12.9073 13.7857 13.6429 14.5213 13.6429 15.4286C13.6429 16.3359 12.9073 17.0714 12 17.0714Z\"\n fill=\"currentColor\"\n />\n </svg>\n </i>\n </ng-container>\n <ng-container *ngIf=\"message.type === 'information'\">\n <i>\n <svg\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M18.2857 4H5.71429C4.7675 4 4 4.7675 4 5.71429V18.2857C4 19.2325 4.7675 20 5.71429 20H18.2857C19.2325 20 20 19.2325 20 18.2857V5.71429C20 4.7675 19.2325 4 18.2857 4ZM12 7.07143C12.8284 7.07143 13.5 7.743 13.5 8.57143C13.5 9.39986 12.8284 10.0714 12 10.0714C11.1716 10.0714 10.5 9.39986 10.5 8.57143C10.5 7.743 11.1716 7.07143 12 7.07143ZM14 16.1429C14 16.3795 13.8081 16.5714 13.5714 16.5714H10.4286C10.1919 16.5714 10 16.3795 10 16.1429V15.2857C10 15.049 10.1919 14.8571 10.4286 14.8571H10.8571V12.5714H10.4286C10.1919 12.5714 10 12.3795 10 12.1429V11.2857C10 11.049 10.1919 10.8571 10.4286 10.8571H12.7143C12.951 10.8571 13.1429 11.049 13.1429 11.2857V14.8571H13.5714C13.8081 14.8571 14 15.049 14 15.2857V16.1429Z\"\n fill=\"currentColor\"\n />\n </svg>\n </i>\n </ng-container>\n </div>\n <div class=\"text-content\">\n @if (message.template) {\n <ng-template\n [ngTemplateOutlet]=\"message.template\"\n [ngTemplateOutletContext]=\"{ $implicit: message.templateContext }\"\n ></ng-template>\n } @else {\n @if (message.titleText) {\n <div>{{ t(message.titleText) }}</div>\n }\n @if (message.bodyText) {\n <div class=\"text-body-content\">\n {{ t(message.bodyText) }}\n </div>\n }\n }\n </div>\n <button\n class=\"close-icon-button\"\n [ngClass]=\"{ information: message.type === 'information' }\"\n (click)=\"removeMessage(message)\"\n [attr.aria-label]=\"closeButtonAriaLabel\"\n >\n <gds-icon-cross-small\n class=\"close-icon\"\n *nggCoreElement\n ></gds-icon-cross-small>\n </button>\n </div>\n </div>\n</output>\n", styles: [":host .messages-container{position:fixed;bottom:1rem;right:1rem;z-index:9999}:host .message{position:relative;font-size:1rem;max-width:22rem;min-width:22rem;min-height:3rem;box-shadow:0 2px 6px #00000026;margin-top:1rem}@media(max-width:35.98em){:host .message{max-width:calc(100vw - 2rem);min-width:calc(100vw - 2rem)}}:host .content{display:flex;height:100%;padding:0;justify-content:space-between}:host .text-content{margin-top:1rem;margin-bottom:1rem;width:100%}:host .text-body-content{padding-top:1.5rem}:host .message-type-icon-wrapper{padding:1rem}:host .message-type-icon-wrapper i{display:block;width:1.25rem;height:1.25rem}:host .close-icon-button{box-sizing:border-box;display:grid;place-content:center;width:2rem;height:2rem;flex-shrink:0;font-size:1rem;line-height:1.5rem;margin:.5rem;background:transparent;border:none;color:inherit;padding:0;cursor:pointer;min-height:32px}:host .close-icon-button:hover{color:#333;border-radius:100%}:host .close-icon-button:not(.information):hover{background-color:#fff}:host .close-icon-button.information:hover{background-color:#dedede}@media(max-width:35.98em){:host .close-icon-button{min-width:auto}}:host .success{background-color:#308800;color:#fff}:host .error{background-color:#d81a1a;color:#fff}:host .warning{background-color:#ffc500;color:#333}:host .information{background-color:#333;color:#e9e9e9}\n"], dependencies: [{ kind: "directive", type: i2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i3.TranslocoDirective, selector: "[transloco]", inputs: ["transloco", "translocoParams", "translocoScope", "translocoRead", "translocoPrefix", "translocoLang", "translocoLoadingTpl"] }, { kind: "directive", type: i4.NggCoreElementDirective, selector: "[nggCoreElement]" }], animations: [
|
|
128
128
|
trigger('toastAnimation', [
|
|
129
129
|
transition(':enter', [
|
|
130
130
|
style({ opacity: 0, transform: 'translateY(100%)' }),
|
|
@@ -136,7 +136,7 @@ class ToastComponent {
|
|
|
136
136
|
]),
|
|
137
137
|
] }); }
|
|
138
138
|
}
|
|
139
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.
|
|
139
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.18", ngImport: i0, type: ToastComponent, decorators: [{
|
|
140
140
|
type: Component,
|
|
141
141
|
args: [{ selector: 'nggv-toast', animations: [
|
|
142
142
|
trigger('toastAnimation', [
|
|
@@ -154,11 +154,11 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.9", ngImpor
|
|
|
154
154
|
}] } });
|
|
155
155
|
|
|
156
156
|
class NggvToastModule {
|
|
157
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.
|
|
158
|
-
static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "19.2.
|
|
159
|
-
static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "19.2.
|
|
157
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.18", ngImport: i0, type: NggvToastModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
|
|
158
|
+
static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "19.2.18", ngImport: i0, type: NggvToastModule, declarations: [ToastComponent], imports: [CommonModule, TranslocoModule, NggCoreWrapperModule], exports: [ToastComponent] }); }
|
|
159
|
+
static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "19.2.18", ngImport: i0, type: NggvToastModule, imports: [CommonModule, TranslocoModule, NggCoreWrapperModule] }); }
|
|
160
160
|
}
|
|
161
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.
|
|
161
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.18", ngImport: i0, type: NggvToastModule, decorators: [{
|
|
162
162
|
type: NgModule,
|
|
163
163
|
args: [{
|
|
164
164
|
declarations: [ToastComponent],
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sebgroup-green-angular-src-v-angular-toast.mjs","sources":["../../../../libs/angular/src/v-angular/toast/toast.models.ts","../../../../libs/angular/src/v-angular/toast/toast-message.service.ts","../../../../libs/angular/src/v-angular/toast/toast.component.ts","../../../../libs/angular/src/v-angular/toast/toast.component.html","../../../../libs/angular/src/v-angular/toast/toast.module.ts","../../../../libs/angular/src/v-angular/toast/index.ts","../../../../libs/angular/src/v-angular/toast/sebgroup-green-angular-src-v-angular-toast.ts"],"sourcesContent":["import { TemplateRef } from '@angular/core'\n\nexport interface ToastMessage {\n type: MessageType | 'success' | 'information' | 'error' | 'warning'\n translocoScope?: string\n titleText?: string\n bodyText?: string\n template?: TemplateRef<any>\n templateContext?: any\n timeout?: number\n timeoutId?: number\n timeoutStartTime?: number\n}\n\nexport enum MessageType {\n Success = 'success',\n Information = 'information',\n Error = 'error',\n Warning = 'warning',\n}\n","import { Injectable, TemplateRef } from '@angular/core'\nimport { Observable, Subject } from 'rxjs'\n\nimport { MessageType, ToastMessage } from './toast.models'\n\n@Injectable({\n providedIn: 'root',\n})\nexport class ToastMessageService {\n private messages: ToastMessage[] = []\n private messageSubject = new Subject<ToastMessage[]>()\n\n add(message: ToastMessage): void {\n const {\n type,\n translocoScope,\n titleText,\n template,\n templateContext,\n bodyText,\n timeout,\n } = message\n const newMessage: ToastMessage = {\n type: type ? type : MessageType.Information,\n translocoScope,\n titleText: titleText ?? '',\n bodyText,\n timeout,\n template,\n templateContext,\n }\n\n this.removeMessage(newMessage)\n this.messages.push(newMessage)\n this.messageSubject.next([...this.messages])\n this.setMessageRemoveTimeout(newMessage)\n }\n\n addMessage(\n type: 'success' | 'information' | 'error' | 'warning',\n translocoScope: string,\n titleText: string,\n bodyText?: string,\n timeout?: number,\n template?: TemplateRef<any>,\n templateContext?: any,\n ): void\n addMessage(\n type: MessageType,\n translocoScope: string,\n titleText: string,\n bodyText?: string,\n timeout?: number,\n template?: TemplateRef<any>,\n templateContext?: any,\n ): void {\n const newMessage: ToastMessage = {\n type,\n translocoScope,\n titleText,\n bodyText,\n timeout,\n template,\n templateContext,\n }\n\n this.removeMessage(newMessage)\n this.messages.push(newMessage)\n this.messageSubject.next([...this.messages])\n this.setMessageRemoveTimeout(newMessage)\n }\n\n removeMessage(message: ToastMessage): void {\n const index = this.getDuplicateMessageIndex(message.titleText ?? '')\n this.removeMessageByIndex(index)\n }\n\n pauseMessageTimeout(message: ToastMessage): void {\n if (message.timeoutStartTime && message.timeout) {\n const remainingTime =\n message.timeoutStartTime - Date.now() + message.timeout * 1000\n\n message.timeout = remainingTime / 1000\n window.clearTimeout(message.timeoutId)\n }\n }\n\n resumeMessageTimeout(message: ToastMessage): void {\n this.setMessageRemoveTimeout(message)\n }\n\n getMessages(): Observable<ToastMessage[]> {\n return this.messageSubject.asObservable()\n }\n\n private getDuplicateMessageIndex(newMessageText: string): number {\n return this.messages.findIndex(\n (message) => message.titleText === newMessageText,\n )\n }\n\n private removeMessageByIndex(id: number): void {\n if (id !== -1) {\n this.messages.splice(id, 1)\n this.messageSubject.next([...this.messages])\n }\n }\n\n private setMessageRemoveTimeout(newMessage: ToastMessage): void {\n if (newMessage.timeout) {\n newMessage.timeoutId = window.setTimeout(\n () => this.removeMessage(newMessage),\n newMessage.timeout * 1000,\n )\n newMessage.timeoutStartTime = Date.now()\n }\n }\n}\n","import { animate, style, transition, trigger } from '@angular/animations'\nimport { Component, Input, OnDestroy, OnInit } from '@angular/core'\nimport { Subscription } from 'rxjs'\n\nimport { ToastMessageService } from './toast-message.service'\nimport { ToastMessage } from './toast.models'\n\nimport '@sebgroup/green-core/components/icon/icons/cross-small.js'\n\n@Component({\n selector: 'nggv-toast',\n templateUrl: './toast.component.html',\n styleUrls: ['./toast.component.scss'],\n animations: [\n trigger('toastAnimation', [\n transition(':enter', [\n style({ opacity: 0, transform: 'translateY(100%)' }),\n animate('300ms ease-in', style({ opacity: 1, transform: 'translateY(0)' })),\n ]),\n transition(':leave', [\n animate('300ms ease-out', style({ opacity: 0, transform: 'translateY(100%)' })),\n ]),\n ]),\n ],\n standalone: false\n})\nexport class ToastComponent implements OnInit, OnDestroy {\n @Input() closeButtonAriaLabel?: string\n\n private toastMessagesSubscription!: Subscription\n\n messages: ToastMessage[] = []\n\n constructor(private toastMessageService: ToastMessageService) {}\n\n ngOnInit() {\n this.toastMessagesSubscription = this.toastMessageService\n .getMessages()\n .subscribe((messages) => (this.messages = messages))\n }\n\n onMouseEnter(message: ToastMessage) {\n this.toastMessageService.pauseMessageTimeout(message)\n }\n\n onMouseLeave(message: ToastMessage) {\n this.toastMessageService.resumeMessageTimeout(message)\n }\n\n removeMessage(message: ToastMessage) {\n this.toastMessageService.removeMessage(message)\n }\n\n trackByMessageIndex(index: number, message: ToastMessage): number {\n return index;\n }\n\n ngOnDestroy(): void {\n if (this.toastMessagesSubscription) {\n this.toastMessagesSubscription.unsubscribe()\n }\n }\n}\n","<output class=\"messages-container\" aria-live=\"polite\">\n <div\n class=\"message\"\n *ngFor=\"let message of messages; trackBy: trackByMessageIndex\"\n [ngClass]=\"message.type\"\n @toastAnimation\n (mouseenter)=\"onMouseEnter(message)\"\n (mouseleave)=\"onMouseLeave(message)\"\n >\n <div class=\"content\" *transloco=\"let t; read: message.translocoScope\">\n <div class=\"message-type-icon-wrapper\">\n <ng-container *ngIf=\"message.type === 'success'\">\n <i>\n <svg\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M17.6203 6.60836L9.40014 14.8285L6.37976 11.8081C6.23332 11.6617 5.99588 11.6617 5.84942 11.8081L4.96554 12.692C4.8191 12.8384 4.8191 13.0759 4.96554 13.2223L9.13495 17.3917C9.28138 17.5382 9.51882 17.5382 9.66529 17.3917L19.0344 8.02258C19.1809 7.87614 19.1809 7.63871 19.0344 7.49224L18.1506 6.60836C18.0041 6.46193 17.7667 6.46193 17.6203 6.60836Z\"\n fill=\"white\"\n ></path>\n </svg>\n </i>\n </ng-container>\n <ng-container\n *ngIf=\"message.type === 'error' || message.type === 'warning'\"\n >\n <i>\n <svg\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M18.2857 4H5.71429C4.7675 4 4 4.7675 4 5.71429V18.2857C4 19.2325 4.7675 20 5.71429 20H18.2857C19.2325 20 20 19.2325 20 18.2857V5.71429C20 4.7675 19.2325 4 18.2857 4ZM10.8682 7.42857H13.1318C13.3777 7.42857 13.5731 7.635 13.5597 7.8805L13.2948 12.7376C13.2824 12.9649 13.0945 13.1429 12.8669 13.1429H11.1331C10.9055 13.1429 10.7176 12.9649 10.7052 12.7376L10.4402 7.8805C10.4269 7.635 10.6223 7.42857 10.8682 7.42857ZM12 17.0714C11.0927 17.0714 10.3571 16.3359 10.3571 15.4286C10.3571 14.5213 11.0927 13.7857 12 13.7857C12.9073 13.7857 13.6429 14.5213 13.6429 15.4286C13.6429 16.3359 12.9073 17.0714 12 17.0714Z\"\n fill=\"currentColor\"\n />\n </svg>\n </i>\n </ng-container>\n <ng-container *ngIf=\"message.type === 'information'\">\n <i>\n <svg\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M18.2857 4H5.71429C4.7675 4 4 4.7675 4 5.71429V18.2857C4 19.2325 4.7675 20 5.71429 20H18.2857C19.2325 20 20 19.2325 20 18.2857V5.71429C20 4.7675 19.2325 4 18.2857 4ZM12 7.07143C12.8284 7.07143 13.5 7.743 13.5 8.57143C13.5 9.39986 12.8284 10.0714 12 10.0714C11.1716 10.0714 10.5 9.39986 10.5 8.57143C10.5 7.743 11.1716 7.07143 12 7.07143ZM14 16.1429C14 16.3795 13.8081 16.5714 13.5714 16.5714H10.4286C10.1919 16.5714 10 16.3795 10 16.1429V15.2857C10 15.049 10.1919 14.8571 10.4286 14.8571H10.8571V12.5714H10.4286C10.1919 12.5714 10 12.3795 10 12.1429V11.2857C10 11.049 10.1919 10.8571 10.4286 10.8571H12.7143C12.951 10.8571 13.1429 11.049 13.1429 11.2857V14.8571H13.5714C13.8081 14.8571 14 15.049 14 15.2857V16.1429Z\"\n fill=\"currentColor\"\n />\n </svg>\n </i>\n </ng-container>\n </div>\n <div class=\"text-content\">\n @if (message.template) {\n <ng-template\n [ngTemplateOutlet]=\"message.template\"\n [ngTemplateOutletContext]=\"{ $implicit: message.templateContext }\"\n ></ng-template>\n } @else {\n @if (message.titleText) {\n <div>{{ t(message.titleText) }}</div>\n }\n @if (message.bodyText) {\n <div class=\"text-body-content\">\n {{ t(message.bodyText) }}\n </div>\n }\n }\n </div>\n <button\n class=\"close-icon-button\"\n [ngClass]=\"{ information: message.type === 'information' }\"\n (click)=\"removeMessage(message)\"\n [attr.aria-label]=\"closeButtonAriaLabel\"\n >\n <gds-icon-cross-small\n class=\"close-icon\"\n *nggCoreElement\n ></gds-icon-cross-small>\n </button>\n </div>\n </div>\n</output>\n","import { CommonModule } from '@angular/common'\nimport { CUSTOM_ELEMENTS_SCHEMA, NgModule } from '@angular/core'\nimport { TranslocoModule } from '@jsverse/transloco'\n\nimport { NggCoreWrapperModule } from '@sebgroup/green-angular/src/lib/shared'\nimport { ToastComponent } from './toast.component'\n\n@NgModule({\n declarations: [ToastComponent],\n imports: [CommonModule, TranslocoModule, NggCoreWrapperModule],\n exports: [ToastComponent],\n schemas: [CUSTOM_ELEMENTS_SCHEMA],\n})\nexport class NggvToastModule {}\n","/*\n * Public API Surface of toast\n */\n\nexport * from './toast-message.service'\nexport * from './toast.component'\nexport * from './toast.models'\nexport * from './toast.module'\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["i1.ToastMessageService"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"sebgroup-green-angular-src-v-angular-toast.mjs","sources":["../../../../libs/angular/src/v-angular/toast/toast.models.ts","../../../../libs/angular/src/v-angular/toast/toast-message.service.ts","../../../../libs/angular/src/v-angular/toast/toast.component.ts","../../../../libs/angular/src/v-angular/toast/toast.component.html","../../../../libs/angular/src/v-angular/toast/toast.module.ts","../../../../libs/angular/src/v-angular/toast/index.ts","../../../../libs/angular/src/v-angular/toast/sebgroup-green-angular-src-v-angular-toast.ts"],"sourcesContent":["import { TemplateRef } from '@angular/core'\n\nexport interface ToastMessage {\n type: MessageType | 'success' | 'information' | 'error' | 'warning'\n translocoScope?: string\n titleText?: string\n bodyText?: string\n template?: TemplateRef<any>\n templateContext?: any\n timeout?: number\n timeoutId?: number\n timeoutStartTime?: number\n}\n\nexport enum MessageType {\n Success = 'success',\n Information = 'information',\n Error = 'error',\n Warning = 'warning',\n}\n","import { Injectable, TemplateRef } from '@angular/core'\nimport { Observable, Subject } from 'rxjs'\n\nimport { MessageType, ToastMessage } from './toast.models'\n\n@Injectable({\n providedIn: 'root',\n})\nexport class ToastMessageService {\n private messages: ToastMessage[] = []\n private messageSubject = new Subject<ToastMessage[]>()\n\n add(message: ToastMessage): void {\n const {\n type,\n translocoScope,\n titleText,\n template,\n templateContext,\n bodyText,\n timeout,\n } = message\n const newMessage: ToastMessage = {\n type: type ? type : MessageType.Information,\n translocoScope,\n titleText: titleText ?? '',\n bodyText,\n timeout,\n template,\n templateContext,\n }\n\n this.removeMessage(newMessage)\n this.messages.push(newMessage)\n this.messageSubject.next([...this.messages])\n this.setMessageRemoveTimeout(newMessage)\n }\n\n addMessage(\n type: 'success' | 'information' | 'error' | 'warning',\n translocoScope: string,\n titleText: string,\n bodyText?: string,\n timeout?: number,\n template?: TemplateRef<any>,\n templateContext?: any,\n ): void\n addMessage(\n type: MessageType,\n translocoScope: string,\n titleText: string,\n bodyText?: string,\n timeout?: number,\n template?: TemplateRef<any>,\n templateContext?: any,\n ): void {\n const newMessage: ToastMessage = {\n type,\n translocoScope,\n titleText,\n bodyText,\n timeout,\n template,\n templateContext,\n }\n\n this.removeMessage(newMessage)\n this.messages.push(newMessage)\n this.messageSubject.next([...this.messages])\n this.setMessageRemoveTimeout(newMessage)\n }\n\n removeMessage(message: ToastMessage): void {\n const index = this.getDuplicateMessageIndex(message.titleText ?? '')\n this.removeMessageByIndex(index)\n }\n\n pauseMessageTimeout(message: ToastMessage): void {\n if (message.timeoutStartTime && message.timeout) {\n const remainingTime =\n message.timeoutStartTime - Date.now() + message.timeout * 1000\n\n message.timeout = remainingTime / 1000\n window.clearTimeout(message.timeoutId)\n }\n }\n\n resumeMessageTimeout(message: ToastMessage): void {\n this.setMessageRemoveTimeout(message)\n }\n\n getMessages(): Observable<ToastMessage[]> {\n return this.messageSubject.asObservable()\n }\n\n private getDuplicateMessageIndex(newMessageText: string): number {\n return this.messages.findIndex(\n (message) => message.titleText === newMessageText,\n )\n }\n\n private removeMessageByIndex(id: number): void {\n if (id !== -1) {\n this.messages.splice(id, 1)\n this.messageSubject.next([...this.messages])\n }\n }\n\n private setMessageRemoveTimeout(newMessage: ToastMessage): void {\n if (newMessage.timeout) {\n newMessage.timeoutId = window.setTimeout(\n () => this.removeMessage(newMessage),\n newMessage.timeout * 1000,\n )\n newMessage.timeoutStartTime = Date.now()\n }\n }\n}\n","import { animate, style, transition, trigger } from '@angular/animations'\nimport { Component, Input, OnDestroy, OnInit } from '@angular/core'\nimport { Subscription } from 'rxjs'\n\nimport { ToastMessageService } from './toast-message.service'\nimport { ToastMessage } from './toast.models'\n\nimport '@sebgroup/green-core/components/icon/icons/cross-small.js'\n\n@Component({\n selector: 'nggv-toast',\n templateUrl: './toast.component.html',\n styleUrls: ['./toast.component.scss'],\n animations: [\n trigger('toastAnimation', [\n transition(':enter', [\n style({ opacity: 0, transform: 'translateY(100%)' }),\n animate('300ms ease-in', style({ opacity: 1, transform: 'translateY(0)' })),\n ]),\n transition(':leave', [\n animate('300ms ease-out', style({ opacity: 0, transform: 'translateY(100%)' })),\n ]),\n ]),\n ],\n standalone: false\n})\nexport class ToastComponent implements OnInit, OnDestroy {\n @Input() closeButtonAriaLabel?: string\n\n private toastMessagesSubscription!: Subscription\n\n messages: ToastMessage[] = []\n\n constructor(private toastMessageService: ToastMessageService) {}\n\n ngOnInit() {\n this.toastMessagesSubscription = this.toastMessageService\n .getMessages()\n .subscribe((messages) => (this.messages = messages))\n }\n\n onMouseEnter(message: ToastMessage) {\n this.toastMessageService.pauseMessageTimeout(message)\n }\n\n onMouseLeave(message: ToastMessage) {\n this.toastMessageService.resumeMessageTimeout(message)\n }\n\n removeMessage(message: ToastMessage) {\n this.toastMessageService.removeMessage(message)\n }\n\n trackByMessageIndex(index: number, message: ToastMessage): number {\n return index;\n }\n\n ngOnDestroy(): void {\n if (this.toastMessagesSubscription) {\n this.toastMessagesSubscription.unsubscribe()\n }\n }\n}\n","<output class=\"messages-container\" aria-live=\"polite\">\n <div\n class=\"message\"\n *ngFor=\"let message of messages; trackBy: trackByMessageIndex\"\n [ngClass]=\"message.type\"\n @toastAnimation\n (mouseenter)=\"onMouseEnter(message)\"\n (mouseleave)=\"onMouseLeave(message)\"\n >\n <div class=\"content\" *transloco=\"let t; read: message.translocoScope\">\n <div class=\"message-type-icon-wrapper\">\n <ng-container *ngIf=\"message.type === 'success'\">\n <i>\n <svg\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M17.6203 6.60836L9.40014 14.8285L6.37976 11.8081C6.23332 11.6617 5.99588 11.6617 5.84942 11.8081L4.96554 12.692C4.8191 12.8384 4.8191 13.0759 4.96554 13.2223L9.13495 17.3917C9.28138 17.5382 9.51882 17.5382 9.66529 17.3917L19.0344 8.02258C19.1809 7.87614 19.1809 7.63871 19.0344 7.49224L18.1506 6.60836C18.0041 6.46193 17.7667 6.46193 17.6203 6.60836Z\"\n fill=\"white\"\n ></path>\n </svg>\n </i>\n </ng-container>\n <ng-container\n *ngIf=\"message.type === 'error' || message.type === 'warning'\"\n >\n <i>\n <svg\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M18.2857 4H5.71429C4.7675 4 4 4.7675 4 5.71429V18.2857C4 19.2325 4.7675 20 5.71429 20H18.2857C19.2325 20 20 19.2325 20 18.2857V5.71429C20 4.7675 19.2325 4 18.2857 4ZM10.8682 7.42857H13.1318C13.3777 7.42857 13.5731 7.635 13.5597 7.8805L13.2948 12.7376C13.2824 12.9649 13.0945 13.1429 12.8669 13.1429H11.1331C10.9055 13.1429 10.7176 12.9649 10.7052 12.7376L10.4402 7.8805C10.4269 7.635 10.6223 7.42857 10.8682 7.42857ZM12 17.0714C11.0927 17.0714 10.3571 16.3359 10.3571 15.4286C10.3571 14.5213 11.0927 13.7857 12 13.7857C12.9073 13.7857 13.6429 14.5213 13.6429 15.4286C13.6429 16.3359 12.9073 17.0714 12 17.0714Z\"\n fill=\"currentColor\"\n />\n </svg>\n </i>\n </ng-container>\n <ng-container *ngIf=\"message.type === 'information'\">\n <i>\n <svg\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M18.2857 4H5.71429C4.7675 4 4 4.7675 4 5.71429V18.2857C4 19.2325 4.7675 20 5.71429 20H18.2857C19.2325 20 20 19.2325 20 18.2857V5.71429C20 4.7675 19.2325 4 18.2857 4ZM12 7.07143C12.8284 7.07143 13.5 7.743 13.5 8.57143C13.5 9.39986 12.8284 10.0714 12 10.0714C11.1716 10.0714 10.5 9.39986 10.5 8.57143C10.5 7.743 11.1716 7.07143 12 7.07143ZM14 16.1429C14 16.3795 13.8081 16.5714 13.5714 16.5714H10.4286C10.1919 16.5714 10 16.3795 10 16.1429V15.2857C10 15.049 10.1919 14.8571 10.4286 14.8571H10.8571V12.5714H10.4286C10.1919 12.5714 10 12.3795 10 12.1429V11.2857C10 11.049 10.1919 10.8571 10.4286 10.8571H12.7143C12.951 10.8571 13.1429 11.049 13.1429 11.2857V14.8571H13.5714C13.8081 14.8571 14 15.049 14 15.2857V16.1429Z\"\n fill=\"currentColor\"\n />\n </svg>\n </i>\n </ng-container>\n </div>\n <div class=\"text-content\">\n @if (message.template) {\n <ng-template\n [ngTemplateOutlet]=\"message.template\"\n [ngTemplateOutletContext]=\"{ $implicit: message.templateContext }\"\n ></ng-template>\n } @else {\n @if (message.titleText) {\n <div>{{ t(message.titleText) }}</div>\n }\n @if (message.bodyText) {\n <div class=\"text-body-content\">\n {{ t(message.bodyText) }}\n </div>\n }\n }\n </div>\n <button\n class=\"close-icon-button\"\n [ngClass]=\"{ information: message.type === 'information' }\"\n (click)=\"removeMessage(message)\"\n [attr.aria-label]=\"closeButtonAriaLabel\"\n >\n <gds-icon-cross-small\n class=\"close-icon\"\n *nggCoreElement\n ></gds-icon-cross-small>\n </button>\n </div>\n </div>\n</output>\n","import { CommonModule } from '@angular/common'\nimport { CUSTOM_ELEMENTS_SCHEMA, NgModule } from '@angular/core'\nimport { TranslocoModule } from '@jsverse/transloco'\n\nimport { NggCoreWrapperModule } from '@sebgroup/green-angular/src/lib/shared'\nimport { ToastComponent } from './toast.component'\n\n@NgModule({\n declarations: [ToastComponent],\n imports: [CommonModule, TranslocoModule, NggCoreWrapperModule],\n exports: [ToastComponent],\n schemas: [CUSTOM_ELEMENTS_SCHEMA],\n})\nexport class NggvToastModule {}\n","/*\n * Public API Surface of toast\n */\n\nexport * from './toast-message.service'\nexport * from './toast.component'\nexport * from './toast.models'\nexport * from './toast.module'\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["i1.ToastMessageService"],"mappings":"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"}
|