@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.
Files changed (87) hide show
  1. package/fesm2022/sebgroup-green-angular-src-lib-accordion.mjs +10 -10
  2. package/fesm2022/sebgroup-green-angular-src-lib-accordion.mjs.map +1 -1
  3. package/fesm2022/sebgroup-green-angular-src-lib-badge.mjs +7 -7
  4. package/fesm2022/sebgroup-green-angular-src-lib-badge.mjs.map +1 -1
  5. package/fesm2022/sebgroup-green-angular-src-lib-button.mjs +7 -7
  6. package/fesm2022/sebgroup-green-angular-src-lib-button.mjs.map +1 -1
  7. package/fesm2022/sebgroup-green-angular-src-lib-cell-table.mjs +13 -13
  8. package/fesm2022/sebgroup-green-angular-src-lib-cell-table.mjs.map +1 -1
  9. package/fesm2022/sebgroup-green-angular-src-lib-context-menu.mjs +7 -7
  10. package/fesm2022/sebgroup-green-angular-src-lib-context-menu.mjs.map +1 -1
  11. package/fesm2022/sebgroup-green-angular-src-lib-datepicker.mjs +7 -7
  12. package/fesm2022/sebgroup-green-angular-src-lib-datepicker.mjs.map +1 -1
  13. package/fesm2022/sebgroup-green-angular-src-lib-dropdown.mjs +13 -13
  14. package/fesm2022/sebgroup-green-angular-src-lib-dropdown.mjs.map +1 -1
  15. package/fesm2022/sebgroup-green-angular-src-lib-in-page-wizard.mjs +7 -7
  16. package/fesm2022/sebgroup-green-angular-src-lib-in-page-wizard.mjs.map +1 -1
  17. package/fesm2022/sebgroup-green-angular-src-lib-modal.mjs +22 -22
  18. package/fesm2022/sebgroup-green-angular-src-lib-modal.mjs.map +1 -1
  19. package/fesm2022/sebgroup-green-angular-src-lib-pagination.mjs +7 -7
  20. package/fesm2022/sebgroup-green-angular-src-lib-pagination.mjs.map +1 -1
  21. package/fesm2022/sebgroup-green-angular-src-lib-progress-circle.mjs +7 -7
  22. package/fesm2022/sebgroup-green-angular-src-lib-progress-circle.mjs.map +1 -1
  23. package/fesm2022/sebgroup-green-angular-src-lib-segmented-control.mjs +7 -7
  24. package/fesm2022/sebgroup-green-angular-src-lib-segmented-control.mjs.map +1 -1
  25. package/fesm2022/sebgroup-green-angular-src-lib-shared.mjs +34 -34
  26. package/fesm2022/sebgroup-green-angular-src-lib-shared.mjs.map +1 -1
  27. package/fesm2022/sebgroup-green-angular-src-lib-slider.mjs +7 -7
  28. package/fesm2022/sebgroup-green-angular-src-lib-slider.mjs.map +1 -1
  29. package/fesm2022/sebgroup-green-angular-src-lib-sortable-list.mjs +7 -7
  30. package/fesm2022/sebgroup-green-angular-src-lib-sortable-list.mjs.map +1 -1
  31. package/fesm2022/sebgroup-green-angular-src-v-angular-account-number.mjs +7 -7
  32. package/fesm2022/sebgroup-green-angular-src-v-angular-account-number.mjs.map +1 -1
  33. package/fesm2022/sebgroup-green-angular-src-v-angular-alert.mjs +7 -7
  34. package/fesm2022/sebgroup-green-angular-src-v-angular-alert.mjs.map +1 -1
  35. package/fesm2022/sebgroup-green-angular-src-v-angular-base-control-value-accessor.mjs +8 -8
  36. package/fesm2022/sebgroup-green-angular-src-v-angular-base-control-value-accessor.mjs.map +1 -1
  37. package/fesm2022/sebgroup-green-angular-src-v-angular-breadcrumbs.mjs +7 -7
  38. package/fesm2022/sebgroup-green-angular-src-v-angular-breadcrumbs.mjs.map +1 -1
  39. package/fesm2022/sebgroup-green-angular-src-v-angular-button.mjs +7 -7
  40. package/fesm2022/sebgroup-green-angular-src-v-angular-button.mjs.map +1 -1
  41. package/fesm2022/sebgroup-green-angular-src-v-angular-card.mjs +7 -7
  42. package/fesm2022/sebgroup-green-angular-src-v-angular-card.mjs.map +1 -1
  43. package/fesm2022/sebgroup-green-angular-src-v-angular-character-countdown.mjs +7 -7
  44. package/fesm2022/sebgroup-green-angular-src-v-angular-character-countdown.mjs.map +1 -1
  45. package/fesm2022/sebgroup-green-angular-src-v-angular-checkbox.mjs +7 -7
  46. package/fesm2022/sebgroup-green-angular-src-v-angular-checkbox.mjs.map +1 -1
  47. package/fesm2022/sebgroup-green-angular-src-v-angular-core.mjs +3 -3
  48. package/fesm2022/sebgroup-green-angular-src-v-angular-core.mjs.map +1 -1
  49. package/fesm2022/sebgroup-green-angular-src-v-angular-datepicker.mjs +34 -34
  50. package/fesm2022/sebgroup-green-angular-src-v-angular-datepicker.mjs.map +1 -1
  51. package/fesm2022/sebgroup-green-angular-src-v-angular-drag-drop.mjs +13 -13
  52. package/fesm2022/sebgroup-green-angular-src-v-angular-drag-drop.mjs.map +1 -1
  53. package/fesm2022/sebgroup-green-angular-src-v-angular-dropdown.mjs +26 -26
  54. package/fesm2022/sebgroup-green-angular-src-v-angular-dropdown.mjs.map +1 -1
  55. package/fesm2022/sebgroup-green-angular-src-v-angular-external-link.mjs +7 -7
  56. package/fesm2022/sebgroup-green-angular-src-v-angular-external-link.mjs.map +1 -1
  57. package/fesm2022/sebgroup-green-angular-src-v-angular-i18n.mjs +14 -14
  58. package/fesm2022/sebgroup-green-angular-src-v-angular-i18n.mjs.map +1 -1
  59. package/fesm2022/sebgroup-green-angular-src-v-angular-info-circle.mjs +7 -7
  60. package/fesm2022/sebgroup-green-angular-src-v-angular-info-circle.mjs.map +1 -1
  61. package/fesm2022/sebgroup-green-angular-src-v-angular-input-mask.mjs +10 -10
  62. package/fesm2022/sebgroup-green-angular-src-v-angular-input-mask.mjs.map +1 -1
  63. package/fesm2022/sebgroup-green-angular-src-v-angular-input.mjs +7 -7
  64. package/fesm2022/sebgroup-green-angular-src-v-angular-input.mjs.map +1 -1
  65. package/fesm2022/sebgroup-green-angular-src-v-angular-modal.mjs +16 -16
  66. package/fesm2022/sebgroup-green-angular-src-v-angular-modal.mjs.map +1 -1
  67. package/fesm2022/sebgroup-green-angular-src-v-angular-pagination.mjs +7 -7
  68. package/fesm2022/sebgroup-green-angular-src-v-angular-pagination.mjs.map +1 -1
  69. package/fesm2022/sebgroup-green-angular-src-v-angular-radio.mjs +13 -13
  70. package/fesm2022/sebgroup-green-angular-src-v-angular-radio.mjs.map +1 -1
  71. package/fesm2022/sebgroup-green-angular-src-v-angular-slug.mjs +7 -7
  72. package/fesm2022/sebgroup-green-angular-src-v-angular-slug.mjs.map +1 -1
  73. package/fesm2022/sebgroup-green-angular-src-v-angular-table.mjs +22 -22
  74. package/fesm2022/sebgroup-green-angular-src-v-angular-table.mjs.map +1 -1
  75. package/fesm2022/sebgroup-green-angular-src-v-angular-tabs.mjs +10 -10
  76. package/fesm2022/sebgroup-green-angular-src-v-angular-tabs.mjs.map +1 -1
  77. package/fesm2022/sebgroup-green-angular-src-v-angular-textarea.mjs +7 -7
  78. package/fesm2022/sebgroup-green-angular-src-v-angular-textarea.mjs.map +1 -1
  79. package/fesm2022/sebgroup-green-angular-src-v-angular-toast.mjs +10 -10
  80. package/fesm2022/sebgroup-green-angular-src-v-angular-toast.mjs.map +1 -1
  81. package/fesm2022/sebgroup-green-angular-src-v-angular-tooltip.mjs +7 -7
  82. package/fesm2022/sebgroup-green-angular-src-v-angular-tooltip.mjs.map +1 -1
  83. package/fesm2022/sebgroup-green-angular-v-angular.mjs +281 -281
  84. package/fesm2022/sebgroup-green-angular-v-angular.mjs.map +1 -1
  85. package/fesm2022/sebgroup-green-angular.mjs +166 -166
  86. package/fesm2022/sebgroup-green-angular.mjs.map +1 -1
  87. 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.9", ngImport: i0, type: TabDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
49
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "19.2.9", 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 }); }
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.9", ngImport: i0, type: TabDirective, decorators: [{
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.9", 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.9", 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"] }] }); }
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.9", ngImport: i0, type: TabsComponent, decorators: [{
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.9", ngImport: i0, type: NggvTabsModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
347
- static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "19.2.9", 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.9", ngImport: i0, type: NggvTabsModule, imports: [CommonModule, TranslocoModule, RouterModule] }); }
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.9", ngImport: i0, type: NggvTabsModule, decorators: [{
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.9", 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.9", 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]" }] }); }
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.9", ngImport: i0, type: NggvTextareaComponent, decorators: [{
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.9", ngImport: i0, type: NggvTextareaModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
136
- static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "19.2.9", ngImport: i0, type: NggvTextareaModule, declarations: [NggvTextareaComponent], imports: [CommonModule,
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.9", ngImport: i0, type: NggvTextareaModule, imports: [CommonModule,
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.9", ngImport: i0, type: NggvTextareaModule, decorators: [{
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":"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"}
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.9", ngImport: i0, type: ToastMessageService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
90
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.2.9", ngImport: i0, type: ToastMessageService, providedIn: 'root' }); }
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.9", ngImport: i0, type: ToastMessageService, decorators: [{
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.9", ngImport: i0, type: ToastComponent, deps: [{ token: ToastMessageService }], target: i0.ɵɵFactoryTarget.Component }); }
127
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.2.9", 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: [
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.9", ngImport: i0, type: ToastComponent, decorators: [{
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.9", ngImport: i0, type: NggvToastModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
158
- static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "19.2.9", 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.9", ngImport: i0, type: NggvToastModule, imports: [CommonModule, TranslocoModule, NggCoreWrapperModule] }); }
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.9", ngImport: i0, type: NggvToastModule, decorators: [{
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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"}