{"version":3,"file":"eui-components-eui-growl.mjs","sources":["../../eui-growl/eui-growl.component.ts","../../eui-growl/eui-growl.component.html","../../eui-growl/index.ts","../../eui-growl/eui-components-eui-growl.ts"],"sourcesContent":["import {\n    booleanAttribute,\n    Component,\n    DoCheck,\n    ElementRef,\n    EventEmitter,\n    HostBinding,\n    HostListener,\n    Input,\n    IterableDiffer,\n    IterableDiffers,\n    OnDestroy,\n    Output,\n    ViewEncapsulation,\n    inject,\n    ChangeDetectorRef,\n} from '@angular/core';\nimport { TranslateModule } from '@ngx-translate/core';\nimport { NgClass } from '@angular/common';\n\nimport { EuiGrowlMessage } from '@eui/core';\nimport { EUI_ICON } from '@eui/components/eui-icon';\nimport { EUI_ICON_BUTTON } from '@eui/components/eui-icon-button';\nimport { EUI_ICON_STATE } from '@eui/components/eui-icon-state';\n\n/**\n * Notification component that displays temporary or persistent messages to users.\n * Supports multiple message types (success, info, warning, error) with automatic dismissal or sticky behavior.\n * Messages can be positioned in different screen locations and include customizable lifecycle durations.\n * Implements ARIA live regions for accessibility, announcing messages to screen readers.\n * Commonly used for user feedback, system notifications, and operation status updates.\n *\n * @usageNotes\n * ### Basic growl notification\n * ```typescript\n * messages: EuiGrowlMessage[] = [];\n * \n * showSuccess() {\n *   this.messages.push({\n *     severity: 'success',\n *     summary: 'Success',\n *     detail: 'Operation completed'\n *   });\n * }\n * ```\n * ```html\n * <eui-growl [value]=\"messages\" position=\"top-right\"></eui-growl>\n * ```\n *\n * ### Sticky notification\n * ```typescript\n * this.messages.push({\n *   severity: 'info',\n *   summary: 'Info',\n *   detail: 'This message stays until dismissed',\n *   sticky: true\n * });\n * ```\n *\n * ### Accessibility\n * - Uses ARIA live regions (aria-live=\"polite\") for screen reader announcements\n * - Messages are announced without interrupting user workflow\n * - Close buttons are keyboard accessible\n *\n * ### Notes\n * - Position options: top-right, top-left, bottom-right, bottom-left, top-center, bottom-center\n * - Non-sticky messages auto-dismiss after `life` milliseconds (default: 3000)\n * - Use `closeAllSticky` to show a clear-all button for multiple sticky messages\n */\n@Component({\n    selector: 'eui-growl',\n    templateUrl: './eui-growl.component.html',\n    styleUrl: './eui-growl.scss',\n    encapsulation: ViewEncapsulation.None,\n    imports: [\n        NgClass,\n        TranslateModule,\n        ...EUI_ICON,\n        ...EUI_ICON_BUTTON,\n        ...EUI_ICON_STATE,\n    ],\n})\nexport class EuiGrowlComponent implements DoCheck, OnDestroy {\n    el = inject(ElementRef);\n    titleId = 'msg-title';\n    contentId = 'msg-detail';\n\n    @HostBinding('class')\n    get cssClasses(): string {\n        return ['eui-growl', `eui-growl--${this.position}`].join(' ').trim();\n    }\n    /**\n     * Data attribute used for end-to-end testing identification.\n     * @default 'eui-growl'\n     */\n    @HostBinding('attr.data-e2e') @Input() e2eAttr = 'eui-growl';\n    @HostBinding('attr.role')\n    protected role = 'status';\n    /**\n     * ARIA live region politeness level controlling how screen readers announce messages.\n     * 'polite' waits for user to finish current activity, 'assertive' interrupts immediately, 'off' disables announcements.\n     * @default 'polite'\n     */\n    @HostBinding('attr.aria-live') @Input() ariaLive: 'off' | 'polite' | 'assertive' = 'polite';\n    @HostBinding('attr.aria-labelledby')\n    get ariaLabelledBy(): string {\n        return this.value?.length ? this.titleId : null;\n    }\n    @HostBinding('attr.aria-describedby')\n    get ariaDescribedBy(): string {\n        return this.value?.length ? this.contentId : null;\n    }\n\n    /**\n     * Prevents automatic dismissal of messages, requiring manual user interaction to close.\n     * When true, messages remain visible until explicitly closed by the user.\n     * @default false\n     */\n    @Input({ transform: booleanAttribute }) sticky = false;\n\n    /**\n     * Duration in milliseconds before non-sticky messages automatically dismiss.\n     * Individual messages can override this with their own life property.\n     * @default 3000\n     */\n    @Input() life = 3000;\n    /**\n     * Array of message objects to display in the growl notification area.\n     * Each message should conform to the EuiGrowlMessage interface with properties like severity, summary, and detail.\n     * Messages are automatically managed with lifecycle timeouts based on sticky and life properties.\n     * @default []\n     */\n    @Input() value: EuiGrowlMessage[] = [];\n    /**\n     * Enables display of a close-all button when multiple sticky messages are present.\n     * Provides users with a quick way to dismiss all persistent notifications at once.\n     * @default false\n     */\n    @Input() closeAllSticky = false;\n\n    /**\n     * Screen position where growl messages appear.\n     * Common values include 'top-right', 'top-left', 'bottom-right', 'bottom-left', 'top-center', 'bottom-center'.\n     * Affects the CSS positioning of the notification container.\n     */\n    @Input() position: string;\n    /**\n     * Optional callback function executed when a growl message is clicked.\n     * Allows custom behavior to be triggered on user interaction with notifications.\n     * @default null\n     */\n    @Input() callback: () => void = null;\n\n    /**\n     * Emitted when a growl message is clicked by the user.\n     * No payload is provided.\n     * Triggers in addition to the callback function if one is defined.\n     */\n    @Output() growlClick: EventEmitter<void> = new EventEmitter<void>();\n    /**\n     * Emitted when a growl message is closed, either automatically or by user action.\n     * No payload is provided.\n     * Useful for tracking message dismissals or triggering cleanup operations.\n     */\n    @Output() growlClose: EventEmitter<void> = new EventEmitter<void>();\n\n    private differ: IterableDiffer<EuiGrowlMessage>;\n    private readonly cdr = inject(ChangeDetectorRef);\n\n    constructor() {\n        const differs = inject(IterableDiffers);\n\n        this.differ = differs.find([]).create(undefined);\n    }\n\n    ngDoCheck(): void {\n        const changes = this.differ.diff(this.value);\n\n        if (changes) {\n            // clear timeout in the queue to avoid memory leak\n            changes.forEachRemovedItem(({ item }) => clearTimeout(item?.timeout));\n            // for newly added items create timeout if they are not sticky\n            changes.forEachAddedItem(({ item }) => this.createRemovalTimeout(item));\n        }\n    }\n\n    /**\n     * @param msg The text message to appear in the container\n     */\n    remove(msg: EuiGrowlMessage): void {\n        this.value.splice(this.findMessageIndex(msg), 1);\n        this.growlClose.emit();\n        this.cdr.markForCheck();\n    }\n\n    /**\n     * Removes all growl messages from the stack\n     */\n    removeAll(): void {\n        if (this.value?.length) {\n            this.value.splice(0, this.value.length);\n            this.cdr.markForCheck();\n        }\n    }\n\n    ngOnDestroy(): void {\n        if (!this.sticky) {\n            // make sure to clear any leftover async Timeout for messages\n            this.value.forEach((v) => clearTimeout(v?.timeout));\n        }\n    }\n\n    @HostListener('click')\n    onClick(): void {\n        if (this.callback) {\n            this.callback();\n        }\n        this.growlClick.emit();\n    }\n\n    /**\n     * check whether sticky growls are greater than two\n     */\n    isGrowlMoreThanTwo(): boolean {\n        return this.value.filter((m) => m.sticky).length > 2;\n    }\n\n    /**\n     * Removes all growl messages from the stack\n     *\n     * @param value\n     */\n    private createRemovalTimeout(value: EuiGrowlMessage): void {\n        // if message it's NOT sticky and there's not any async running timeout\n        if (!value.sticky && !value.timeout) {\n            // if message it's NOT sticky and there's not any async running timeout\n            value.timeout = setTimeout(() => this.remove(value), value.life || this.life) as unknown as number;\n        }\n    }\n\n    /**\n     * Finds UxMessage index of the array otherwise returns -1\n     *\n     * @param msg UxMessage\n     */\n    private findMessageIndex(msg: EuiGrowlMessage): number {\n        return this.value?.length ? this.value.findIndex((value) => value === msg) : -1;\n    }\n}\n","@for (msg of value; track msg) {\n<div\n    class=\"eui-growl-item-container eui-u-anim eui-u-anim--fast\"\n    [ngClass]=\"{\n        'eui-growl-item-container--info eui--info': msg.severity === 'info',\n        'eui-growl-item-container--warning eui--warning': msg.severity === 'warning',\n        'eui-growl-item-container--danger eui--danger': msg.severity === 'danger',\n        'eui-growl-item-container--success eui--success': msg.severity === 'success',\n        'eui-growl-item-container--filled': msg.filled,\n        'eui-growl--sticky': sticky,\n    }\"\n    [class.eui-u-anim--slideInUp]=\"position === 'bottom-left' || position === 'bottom-center' || position === 'bottom-right'\"\n    [class.eui-u-anim--slideInDown]=\"position === 'top-left' || position === 'top-center' || position === 'top-right'\">\n\n    <div class=\"eui-growl-item\">\n        <div class=\"eui-growl-item-summary-wrapper\">\n            <eui-icon-state [euiVariant]=\"msg.severity\" class=\"eui-growl-item-icon\"/>\n            <span [id]=\"titleId\" class=\"eui-growl-item-title\">{{ msg.summary }}</span>\n        </div>\n        <div [id]=\"contentId\" class=\"eui-growl-item-content\" [innerHTML]=\"msg.detail\"></div>\n\n        <eui-icon-button\n            (buttonClick)=\"remove(msg)\"\n            icon=\"eui-close\"\n            fillColor=\"secondary\"\n            euiRounded\n            ariaLabel=\"Close growl icon\"\n            class=\"eui-growl-item-close\">\n        </eui-icon-button>\n    </div>\n\n</div>\n}\n@if (closeAllSticky && isGrowlMoreThanTwo()) {\n<div class=\"eui-growl-item-container eui-u-anim eui-u-anim--fast eui-growl-item-container--secondary\">\n    <div class=\"eui-growl-item\">\n        <div class=\"eui-growl-item-summary-wrapper\">\n            <eui-icon-svg icon=\"eui-checkmark-done\"/>\n            <span class=\"eui-growl-item-title\">{{ 'eui.growl.dismiss-all' | translate }}</span>\n        </div>\n        <eui-icon-button (buttonClick)=\"removeAll()\"\n            icon=\"eui-close\"\n            fillColor=\"secondary\"\n            euiRounded\n            ariaLabel=\"Close growl icon\"\n            class=\"eui-growl-item-close\"/>\n    </div>\n</div>\n}\n","import { EuiGrowlComponent } from './eui-growl.component';\n\nexport * from './eui-growl.component';\n\nexport const EUI_GROWL = [ EuiGrowlComponent ] as const;","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":";;;;;;;;;;;;AAyBA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA2CG;MAcU,iBAAiB,CAAA;AAK1B,IAAA,IACI,UAAU,GAAA;AACV,QAAA,OAAO,CAAC,WAAW,EAAE,CAAA,WAAA,EAAc,IAAI,CAAC,QAAQ,CAAA,CAAE,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE;IACxE;AAcA,IAAA,IACI,cAAc,GAAA;AACd,QAAA,OAAO,IAAI,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC,OAAO,GAAG,IAAI;IACnD;AACA,IAAA,IACI,eAAe,GAAA;AACf,QAAA,OAAO,IAAI,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC,SAAS,GAAG,IAAI;IACrD;AA0DA,IAAA,WAAA,GAAA;AAtFA,QAAA,IAAA,CAAA,EAAE,GAAG,MAAM,CAAC,UAAU,CAAC;QACvB,IAAA,CAAA,OAAO,GAAG,WAAW;QACrB,IAAA,CAAA,SAAS,GAAG,YAAY;AAMxB;;;AAGG;QACoC,IAAA,CAAA,OAAO,GAAG,WAAW;QAElD,IAAA,CAAA,IAAI,GAAG,QAAQ;AACzB;;;;AAIG;QACqC,IAAA,CAAA,QAAQ,GAAmC,QAAQ;AAU3F;;;;AAIG;QACqC,IAAA,CAAA,MAAM,GAAG,KAAK;AAEtD;;;;AAIG;QACM,IAAA,CAAA,IAAI,GAAG,IAAI;AACpB;;;;;AAKG;QACM,IAAA,CAAA,KAAK,GAAsB,EAAE;AACtC;;;;AAIG;QACM,IAAA,CAAA,cAAc,GAAG,KAAK;AAQ/B;;;;AAIG;QACM,IAAA,CAAA,QAAQ,GAAe,IAAI;AAEpC;;;;AAIG;AACO,QAAA,IAAA,CAAA,UAAU,GAAuB,IAAI,YAAY,EAAQ;AACnE;;;;AAIG;AACO,QAAA,IAAA,CAAA,UAAU,GAAuB,IAAI,YAAY,EAAQ;AAGlD,QAAA,IAAA,CAAA,GAAG,GAAG,MAAM,CAAC,iBAAiB,CAAC;AAG5C,QAAA,MAAM,OAAO,GAAG,MAAM,CAAC,eAAe,CAAC;AAEvC,QAAA,IAAI,CAAC,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,MAAM,CAAC,SAAS,CAAC;IACpD;IAEA,SAAS,GAAA;AACL,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC;QAE5C,IAAI,OAAO,EAAE;;AAET,YAAA,OAAO,CAAC,kBAAkB,CAAC,CAAC,EAAE,IAAI,EAAE,KAAK,YAAY,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;;AAErE,YAAA,OAAO,CAAC,gBAAgB,CAAC,CAAC,EAAE,IAAI,EAAE,KAAK,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,CAAC;QAC3E;IACJ;AAEA;;AAEG;AACH,IAAA,MAAM,CAAC,GAAoB,EAAA;AACvB,QAAA,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;AAChD,QAAA,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE;AACtB,QAAA,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE;IAC3B;AAEA;;AAEG;IACH,SAAS,GAAA;AACL,QAAA,IAAI,IAAI,CAAC,KAAK,EAAE,MAAM,EAAE;AACpB,YAAA,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC;AACvC,YAAA,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE;QAC3B;IACJ;IAEA,WAAW,GAAA;AACP,QAAA,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE;;AAEd,YAAA,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,YAAY,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;QACvD;IACJ;IAGA,OAAO,GAAA;AACH,QAAA,IAAI,IAAI,CAAC,QAAQ,EAAE;YACf,IAAI,CAAC,QAAQ,EAAE;QACnB;AACA,QAAA,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE;IAC1B;AAEA;;AAEG;IACH,kBAAkB,GAAA;AACd,QAAA,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,CAAC,MAAM,GAAG,CAAC;IACxD;AAEA;;;;AAIG;AACK,IAAA,oBAAoB,CAAC,KAAsB,EAAA;;QAE/C,IAAI,CAAC,KAAK,CAAC,MAAM,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE;;YAEjC,KAAK,CAAC,OAAO,GAAG,UAAU,CAAC,MAAM,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,KAAK,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,CAAsB;QACtG;IACJ;AAEA;;;;AAIG;AACK,IAAA,gBAAgB,CAAC,GAAoB,EAAA;AACzC,QAAA,OAAO,IAAI,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,KAAK,KAAK,KAAK,KAAK,GAAG,CAAC,GAAG,CAAC,CAAC;IACnF;8GArKS,iBAAiB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAjB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,iBAAiB,8HAoCN,gBAAgB,CAAA,EAAA,IAAA,EAAA,MAAA,EAAA,KAAA,EAAA,OAAA,EAAA,cAAA,EAAA,gBAAA,EAAA,QAAA,EAAA,UAAA,EAAA,QAAA,EAAA,UAAA,EAAA,EAAA,OAAA,EAAA,EAAA,UAAA,EAAA,YAAA,EAAA,UAAA,EAAA,YAAA,EAAA,EAAA,IAAA,EAAA,EAAA,SAAA,EAAA,EAAA,OAAA,EAAA,WAAA,EAAA,EAAA,UAAA,EAAA,EAAA,OAAA,EAAA,iBAAA,EAAA,eAAA,EAAA,cAAA,EAAA,WAAA,EAAA,WAAA,EAAA,gBAAA,EAAA,eAAA,EAAA,sBAAA,EAAA,qBAAA,EAAA,uBAAA,EAAA,sBAAA,EAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECtHxC,wpEAiDA,EAAA,MAAA,EAAA,CAAA,6oNAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,ED0BQ,OAAO,mFACP,eAAe,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,mBAAA,EAAA,QAAA,EAAA,+CAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,WAAA,EAAA,KAAA,EAAA,MAAA,EAAA,OAAA,EAAA,SAAA,EAAA,WAAA,EAAA,WAAA,EAAA,YAAA,EAAA,WAAA,EAAA,WAAA,EAAA,aAAA,EAAA,UAAA,EAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,sBAAA,EAAA,QAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,SAAA,EAAA,WAAA,EAAA,MAAA,EAAA,WAAA,EAAA,UAAA,EAAA,cAAA,EAAA,kBAAA,EAAA,oBAAA,EAAA,iBAAA,EAAA,YAAA,EAAA,aAAA,CAAA,EAAA,OAAA,EAAA,CAAA,aAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,qBAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAA,EAAA,CAAA,aAAA,EAAA,IAAA,EAAA,WAAA,EAAA,CAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA,CAAA;;2FAMV,iBAAiB,EAAA,UAAA,EAAA,CAAA;kBAb7B,SAAS;AACI,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,WAAW,EAAA,aAAA,EAGN,iBAAiB,CAAC,IAAI,EAAA,OAAA,EAC5B;wBACL,OAAO;wBACP,eAAe;AACf,wBAAA,GAAG,QAAQ;AACX,wBAAA,GAAG,eAAe;AAClB,wBAAA,GAAG,cAAc;AACpB,qBAAA,EAAA,QAAA,EAAA,wpEAAA,EAAA,MAAA,EAAA,CAAA,6oNAAA,CAAA,EAAA;;sBAOA,WAAW;uBAAC,OAAO;;sBAQnB,WAAW;uBAAC,eAAe;;sBAAG;;sBAC9B,WAAW;uBAAC,WAAW;;sBAOvB,WAAW;uBAAC,gBAAgB;;sBAAG;;sBAC/B,WAAW;uBAAC,sBAAsB;;sBAIlC,WAAW;uBAAC,uBAAuB;;sBAUnC,KAAK;uBAAC,EAAE,SAAS,EAAE,gBAAgB,EAAE;;sBAOrC;;sBAOA;;sBAMA;;sBAOA;;sBAMA;;sBAOA;;sBAMA;;sBAgDA,YAAY;uBAAC,OAAO;;;AEhNlB,MAAM,SAAS,GAAG,CAAE,iBAAiB;;ACJ5C;;AAEG;;;;"}