{"version":3,"file":"eui-components-eui-language-selector.mjs","sources":["../../eui-language-selector/modal-selector/modal-selector.component.ts","../../eui-language-selector/modal-selector/modal-selector.component.html","../../eui-language-selector/language-selector.component.ts","../../eui-language-selector/language-selector.component.html","../../eui-language-selector/index.ts","../../eui-language-selector/eui-components-eui-language-selector.ts"],"sourcesContent":["import { Component, ViewEncapsulation, ChangeDetectionStrategy, OnInit, inject } from '@angular/core';\nimport { TranslateModule } from '@ngx-translate/core';\nimport { EuiEuLanguages, EuiLanguage } from '@eui/core';\n\nimport { DIALOG_COMPONENT_CONFIG } from '@eui/components/eui-dialog';\nimport { EuiDialogService } from '@eui/components/eui-dialog';\nimport { EUI_BUTTON } from '@eui/components/eui-button';\n\nexport interface ModelConfig {\n    /**\n     * Available languages to select from\n     */\n    languages: EuiLanguage[];\n    /**\n     * Currently selected language\n     */\n    selectedLanguage: EuiLanguage;\n    /**\n     * Callback when language selection changes\n     * @param language\n     */\n    languageChanged: (language: EuiLanguage) => void;\n}\n\n/**\n * Modal component for language selection.\n * Displays EU and non-EU languages in a grid layout with 4 languages per row.\n */\n@Component({\n    selector: 'eui-modal-selector',\n    templateUrl: './modal-selector.component.html',\n    changeDetection: ChangeDetectionStrategy.Default,\n    encapsulation: ViewEncapsulation.None,\n    imports: [\n        ...EUI_BUTTON,\n        TranslateModule,\n    ],\n})\nexport class EuiModalSelectorComponent implements OnInit {\n    /**\n     * Configuration injected from the dialog service\n     */\n    config = inject<ModelConfig>(DIALOG_COMPONENT_CONFIG, { optional: true });\n\n    /** EU languages organized in rows of up to 4 languages */\n    public languageRows: EuiLanguage[][] = [];\n    /**\n     * Non-EU languages organized in rows of up to 4 languages\n     * @deprecated use {@link additionalLanguageRows}\n     */\n    public additionaLanguageRows: EuiLanguage[][] = [];\n    /** Non-EU languages organized in rows of up to 4 languages */\n    public additionalLanguageRows: EuiLanguage[][] = [];\n    /** Currently selected language */\n    private selectedLanguage: EuiLanguage;\n    /** Dialog service for handling modal operations */\n    private euiDialogService = inject<EuiDialogService>(EuiDialogService);\n\n    /**\n     * Initializes language rows by separating EU and non-EU languages\n     */\n    ngOnInit(): void {\n        this.languageRows = this.prepareLanguageRows(EuiEuLanguages.filterEULanguages(this.config?.languages));\n        this.additionalLanguageRows = this.prepareLanguageRows(EuiEuLanguages.filterNonEULanguages(this.config?.languages));\n        this.additionaLanguageRows = this.additionalLanguageRows;\n    }\n\n    /**\n     * Handles language selection\n     * @param {EuiLanguage} languageCode - The language being selected\n     */\n    selectLanguage(languageCode: EuiLanguage): void {\n        if (this.selectedLanguage?.code !== languageCode.code) {\n            for (const language of this.config?.languages || []) {\n                if (language.code === languageCode.code) {\n                    this.selectedLanguage = language;\n                    break;\n                }\n            }\n        }\n\n        this.config?.languageChanged(languageCode);\n        this.euiDialogService.closeDialog();\n    }\n\n    /**\n     * Organizes languages into rows of up to 4 languages each\n     * @param {EuiLanguage[]} languages - Array of languages to organize\n     * @returns {EuiLanguage[][]} 2D array of languages organized in rows\n     */\n    private prepareLanguageRows(languages: EuiLanguage[]): EuiLanguage[][] {\n        // If no languages, return an empty array\n        if (!languages.length) return [];\n\n        return languages.reduce<EuiLanguage[][]>((rows, language, index) => {\n            // Calculate current row index\n            const rowIndex = Math.floor(index / 4);\n\n            // If we need to create a new row\n            if (!rows[rowIndex]) {\n                rows[rowIndex] = [];\n            }\n\n            // Add language to the current row\n            rows[rowIndex].push(language);\n            return rows;\n        }, []);\n    }\n}\n","@if (additionalLanguageRows?.length > 0) {\n    <h4>{{ 'eui.languageSelector.euLanguages' | translate }}</h4>\n}\n@for (row of languageRows; track row) {\n    <div id=\"eu_languages\" class=\"row\">\n        @for (language of row; track language) {\n            <div class=\"col-md-6 mb-2\">\n                <div class=\"eui-u-flex eui-u-mb-xs\">\n                    <span class=\"eui-u-text-uppercase eui-u-width-2\">{{language.code}}</span>\n                    <button\n                        type=\"button\"\n                        e2eAttr=\"eui-language-selector-item_{{ language.code }}\"\n                        euiButton\n                        euiPrimary\n                        [euiBasicButton]=\"language.code !== config?.selectedLanguage.code\"\n                        (click)=\"selectLanguage(language)\">\n                        <span [attr.lang]=\"language?.code\">{{ language.label }}</span>\n                    </button>\n                </div>\n            </div>\n        }\n    </div>\n}\n@if (additionalLanguageRows?.length > 0) {\n    <br />\n    <h4>{{ 'eui.languageSelector.nonEuLanguages' | translate }}</h4>\n    @for (row of additionalLanguageRows; track row) {\n        <div id=\"extra_languages\" class=\"row\">\n            @for (language of row; track language) {\n                <div class=\"col-md-6 mb-2\">\n                    <div class=\"eui-u-flex eui-u-mb-xs\">\n                        <span class=\"eui-u-text-uppercase eui-u-width-2\">{{language.code}}</span>\n                        <button\n                            type=\"button\"\n                            e2eAttr=\"eui-language-selector-item_{{ language.code }}\"\n                            euiButton\n                            euiPrimary\n                            [euiBasicButton]=\"language.code !== config?.selectedLanguage.code\"\n                            (click)=\"selectLanguage(language)\">\n                            <span [attr.lang]=\"language?.code\">{{ language.label }}</span>\n                        </button>\n                    </div>\n                </div>\n            }\n        </div>\n    }\n}\n","import {\n    Component,\n    ViewEncapsulation,\n    HostBinding,\n    OnDestroy,\n    OnInit,\n    ChangeDetectorRef,\n    Input,\n    Output,\n    EventEmitter,\n    booleanAttribute,\n    ElementRef,\n    AfterViewInit,\n    SimpleChanges,\n    OnChanges,\n    inject,\n} from '@angular/core';\nimport { distinctUntilKeyChanged, map, takeUntil } from 'rxjs/operators';\nimport { Subject } from 'rxjs';\nimport { TranslateService } from '@ngx-translate/core';\n\nimport { EuiEuLanguages, EuiLanguage } from '@eui/core';\nimport { EuiAppShellService } from '@eui/core';\nimport { EuiDialogConfig, EuiDialogService } from '@eui/components/eui-dialog';\n\nimport { EuiModalSelectorComponent } from './modal-selector/modal-selector.component';\nimport { EUI_ICON } from '@eui/components/eui-icon';\nimport { EUI_BUTTON } from '@eui/components/eui-button';\nimport { EUI_DROPDOWN } from '@eui/components/eui-dropdown';\nimport { AsyncPipe, NgTemplateOutlet } from '@angular/common';\n\n/**\n * @description A component that provides language selection functionality for applications.\n *\n * This component displays available languages and allows users to select their preferred language.\n * It adapts its display based on the number of available languages:\n * - For 1 language: No selector is shown\n * - For 2-3 languages: Displays a dropdown menu\n * - For 4+ languages: Opens a modal dialog with the full list\n *\n * The component integrates with EuiAppShellService to manage language state\n * and uses TranslateService for localization.\n *\n * @usageNotes\n * ### Basic Usage\n * ```html\n * <eui-language-selector></eui-language-selector>\n * ```\n *\n * ### In Toolbar\n * ```html\n * <eui-toolbar>\n *   <eui-language-selector [isToolbarSelector]=\"true\"></eui-language-selector>\n * </eui-toolbar>\n * ```\n *\n * ### Accessibility\n * - Provides default `aria-label` indicating current language\n * - Custom `aria-label` can be set via input\n * - Keyboard navigable dropdown and modal interfaces\n *\n * ### Notes\n * - Automatically detects toolbar parent and adjusts styling\n * - Language list is managed through EuiAppShellService\n * - Supports 2-3 languages via dropdown, 4+ via modal\n */\n@Component({\n    selector: 'eui-language-selector',\n    templateUrl: './language-selector.component.html',\n    styleUrl: './language-selector.scss',\n    encapsulation: ViewEncapsulation.None,\n    imports: [\n        AsyncPipe,\n        NgTemplateOutlet,\n        ...EUI_DROPDOWN,\n        ...EUI_ICON,\n        ...EUI_BUTTON,\n    ],\n    providers: [\n        EuiDialogService,\n    ],\n})\nexport class EuiLanguageSelectorComponent implements OnInit, AfterViewInit, OnDestroy, OnChanges {\n    @HostBinding('class')\n    get cssClasses(): string {\n        return [\n            'eui-language-selector',\n            this.languages?.length <= 1 ? 'eui-language-selector--empty' : '',\n            this.isToolbarSelector ? 'eui-language-selector--toolbar-selector' : '',\n        ]\n            .join(' ')\n            .trim();\n    }\n\n    languages: EuiLanguage[];\n    selectedLanguage: EuiLanguage;\n    /**\n     * @property hasLanguageSelection - Enables/disables language selection functionality.\n     * @default true\n     */\n    @Input({ transform: booleanAttribute }) hasLanguageSelection = true;\n    /**\n     * @property isToolbarSelector - When true, applies styling for toolbar integration.\n     * @default false\n     */\n    @Input({ transform: booleanAttribute }) isToolbarSelector = false;\n    /**\n     * @property euiPrimary - When true, applies primary styling.\n     * @default false\n     */\n    @Input({ transform: booleanAttribute }) euiPrimary = false;\n    /**\n     * @property ariaLabel - Accessibility label for the language selector.\n     * If not provided, defaults to \"Change Language - Current Language: [selected language]\"\n     */\n    @Input('aria-label') ariaLabel: string;\n    /**\n     * @event languageSelectorClick - Emitted when the language selector is clicked.\n     */\n    @Output() languageSelectorClick = new EventEmitter<null>();\n\n    appShellService = inject(EuiAppShellService);\n    private destroy$: Subject<boolean> = new Subject<boolean>();\n    private isAriaLabelChanged = false;\n    private cd = inject(ChangeDetectorRef);\n    private euiDialogService = inject(EuiDialogService);\n    private translateService = inject(TranslateService);\n    private elRef = inject(ElementRef);\n\n    /**\n     * returns true if there are at least one and max four languages.\n     */\n    get isShowDropDown(): boolean {\n        return this.languages?.length > 1 && this.languages?.length < 4;\n    }\n\n    /**\n     * returns true if there are at least five languages.\n     */\n    get isShowModal(): boolean {\n        return this.languages?.length >= 4;\n    }\n\n    ngOnChanges(changes: SimpleChanges): void {\n        if (changes && changes['ariaLabel']) {\n            this.isAriaLabelChanged = true;\n            this.ariaLabel = changes['ariaLabel'].currentValue;\n        }\n    }\n\n    ngOnInit(): void {\n        // update languages array based on AppShell State 'language' changes\n        this.appShellService.state$\n            .pipe(\n                takeUntil(this.destroy$),\n                distinctUntilKeyChanged('languages'),\n                map((state) => state.languages),\n            )\n            .subscribe((languages) => {\n                this.languages = languages ? EuiEuLanguages.getOrderedLanguages(languages) : EuiEuLanguages.getLanguages();\n                this.cd.detectChanges();\n            });\n\n        // update activeLanguage array based on AppShell State 'language' changes\n        this.appShellService.state$\n            .pipe(\n                takeUntil(this.destroy$),\n                distinctUntilKeyChanged('activeLanguage'),\n                map((state) => state?.activeLanguage),\n            )\n            .subscribe((activeLanguage) => {\n                this.selectedLanguage = this.getLanguage(activeLanguage);\n                if (!this.isAriaLabelChanged) {\n                    this.ariaLabel = `Change Language - Current Language: ${this.selectedLanguage.label}`;\n                }\n                this.cd.detectChanges();\n            });\n    }\n\n    ngAfterViewInit(): void {\n        // TODO: Using DI like \"inject(EuiToolbarComponent, {optional: true, skipSelf: true})\" would create\n        //  circular dependencies. Better approaches would be:\n        //  1. Parent component provides the isToolbarSelector input\n        //  2. Apply the eui-language-selector--toolbar-selector class directly\n        \n        let hasToolbarParent = false;\n        try {\n            hasToolbarParent = this.elRef.nativeElement.closest('eui-toolbar') || this.elRef.nativeElement.closest('eui-app-toolbar');\n        } catch (e) {\n            // do nothing\n        }\n\n        if (hasToolbarParent) {\n            setTimeout(() => {\n                this.isToolbarSelector = true;\n                this.cd.detectChanges();\n            }, 50);\n        }\n    }\n\n    ngOnDestroy(): void {\n        this.destroy$.next(true);\n        this.destroy$.unsubscribe();\n    }\n\n    /**\n     * Updates the active language in the application.\n     * @param language - The language object to set as active.\n     */\n    onLanguageChanged(language: EuiLanguage): void {\n        // Update the AppShellService state\n        this.appShellService.setState({\n            ...this.appShellService.state,\n            activeLanguage: language.code,\n        });\n    }\n\n    /**\n     * Opens a modal dialog with the full list of available languages.\n     * @param [titleLabel] - Optional custom title for the modal.\n     */\n    onOpen(titleLabel: string = this.translateService.instant('eui.languageSelector.modalTitle')): void {\n        this.euiDialogService.openDialog(\n            new EuiDialogConfig({\n                title: titleLabel,\n                hasFooter: false,\n                hasClosedOnClickOutside: true,\n                bodyComponent: {\n                    component: EuiModalSelectorComponent,\n                    config: {\n                        languages: this.languages,\n                        selectedLanguage: this.selectedLanguage,\n                        languageChanged: (language: EuiLanguage): void => this.onLanguageChanged(language),\n                    },\n                },\n            }),\n        );\n    }\n\n    onClick(): void {\n        this.languageSelectorClick.emit();\n    }\n\n    /**\n     * Retrieves a language object by its code.\n     *\n     * @param languageCode - Two-character language code.\n     */\n    protected getLanguage(languageCode: string): EuiLanguage {\n        return this.languages.find((lang) => lang.code === languageCode);\n    }\n}\n","@if (!hasLanguageSelection) {\n    <button class=\"eui-language-selector__button\"\n        euiButton\n        euiBasicButton\n        [euiBranding]=\"isToolbarSelector\"\n        (click)=\"onClick()\"\n        [attr.aria-label]=\"ariaLabel\">\n        <ng-template *ngTemplateOutlet=\"languageSelectorIcon\"></ng-template>\n        <span class=\"eui-language-selector__code\">{{ (appShellService.state$ | async).activeLanguage }}</span>\n    </button>\n\n} @else if (hasLanguageSelection && isShowDropDown) {\n    <eui-dropdown>\n        <button class=\"eui-language-selector__button\"\n            [attr.aria-label]=\"ariaLabel\"\n            euiButton\n            euiBasicButton\n            [euiBranding]=\"isToolbarSelector\">\n            <ng-template *ngTemplateOutlet=\"languageSelectorIcon\"></ng-template>\n            <span class=\"eui-language-selector__code\">{{ (appShellService.state$ | async).activeLanguage }}</span>\n        </button>\n\n        <eui-dropdown-content>\n            <div class=\"eui-language-selector-menu\">\n                @for (language of languages; track language) {\n                    <button\n                        euiDropdownItem\n                        attr.data-e2e=\"eui-language-selector-item_{{ language.code }}\"\n                        class=\"eui-language-selector-menu-language-item\"\n                        (click)=\"onLanguageChanged(language)\">\n                        <span [attr.lang]=\"language?.code\">{{ language.label }} ({{ language.code }})</span>\n                    </button>\n                }\n            </div>\n        </eui-dropdown-content>\n    </eui-dropdown>\n\n} @else if (hasLanguageSelection && isShowModal) {\n    <button class=\"eui-language-selector__button\"\n        euiButton euiBasicButton\n        (click)=\"onOpen()\"\n        [attr.aria-label]=\"ariaLabel\"\n        [euiBranding]=\"isToolbarSelector\">\n        <ng-template *ngTemplateOutlet=\"languageSelectorIcon\"></ng-template>\n        <span class=\"eui-language-selector__code\">{{ (appShellService.state$ | async)?.activeLanguage }}</span>\n    </button>\n}\n\n<ng-template #languageSelectorIcon>\n    <eui-icon-svg icon=\"eui-language-selector\" />\n</ng-template>\n","import { EuiLanguageSelectorComponent } from './language-selector.component';\nimport { EuiModalSelectorComponent } from './modal-selector/modal-selector.component';\n\nexport * from './language-selector.component';\nexport * from './modal-selector/modal-selector.component';\n\nexport const EUI_LANGUAGE_SELECTOR = [\n    EuiLanguageSelectorComponent, \n    EuiModalSelectorComponent,\n] as const;","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["i1","i2","i3"],"mappings":"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"}