{"version":3,"file":"eui-components-eui-icon-toggle.mjs","sources":["../../eui-icon-toggle/eui-icon-toggle.component.ts","../../eui-icon-toggle/eui-icon-toggle.component.html","../../eui-icon-toggle/index.ts","../../eui-icon-toggle/eui-components-eui-icon-toggle.ts"],"sourcesContent":["import {\n    AfterContentInit,\n    ChangeDetectionStrategy,\n    Component,\n    EventEmitter,\n    HostBinding,\n    HostListener,\n    Input,\n    OnChanges,\n    Output,\n    SimpleChanges,\n    booleanAttribute,\n} from '@angular/core';\n\nimport { uniqueId } from '@eui/core';\nimport { EUI_ICON } from '@eui/components/eui-icon';\n\n/**\n * Component that provides a toggleable icon button with accessibility support.\n * Functions as a switch control that can be toggled between on/off states,\n * displaying different icons based on the current state.\n *\n * This component handles keyboard navigation, focus management, and proper\n * ARIA attributes for accessibility compliance.\n *\n * @usageNotes\n * ### Basic toggle\n * ```typescript\n * isFavorite = false;\n * ```\n * ```html\n * <eui-icon-toggle\n *   [(isChecked)]=\"isFavorite\"\n *   iconSvgNameOn=\"star-filled\"\n *   iconSvgNameOff=\"star-outline\"\n *   ariaLabel=\"Toggle favorite\"\n *   (toggle)=\"onToggle($event)\">\n * </eui-icon-toggle>\n * ```\n *\n * ### With custom colors\n * ```html\n * <eui-icon-toggle\n *   [isChecked]=\"enabled\"\n *   iconSvgNameOn=\"visibility\"\n *   iconSvgNameOff=\"visibility-off\"\n *   iconSvgFillColorOn=\"success\"\n *   iconSvgFillColorOff=\"neutral\"\n *   ariaLabel=\"Toggle visibility\">\n * </eui-icon-toggle>\n * ```\n *\n * ### Accessibility\n * - Implements ARIA switch role with aria-checked state\n * - Keyboard accessible via Tab, Enter, and Space keys\n * - Provides keyboard shortcut via accesskey attribute\n * - Screen readers announce state changes\n *\n * ### Notes\n * - Use distinct icons for on/off states for clarity\n * - Set `isReadOnly` to prevent interaction while maintaining visual state\n * - Default colors: accent (on), neutral (off)\n * - Emits toggle event with boolean state on change\n */\n@Component({\n    selector: 'eui-icon-toggle',\n    templateUrl: './eui-icon-toggle.component.html',\n    styleUrls: ['./eui-icon-toggle.scss'],\n    changeDetection: ChangeDetectionStrategy.OnPush,\n    imports: [\n        ...EUI_ICON,\n    ],\n})\nexport class EuiIconToggleComponent implements AfterContentInit, OnChanges {\n    @HostBinding('class')\n    public get cssClasses(): string {\n        return ['eui-icon-toggle',\n            this.isChecked ? 'eui-icon-toggle--default-on' : 'eui-icon-toggle--default-off',\n            this.isReadOnly ? 'eui-icon-toggle--readonly': '',\n        ].join(' ').trim();\n    }\n    @HostBinding('attr.role') role = 'switch';\n    \n    /**\n     * Keyboard shortcut key.\n     * @default 'i'\n     */\n    @HostBinding('attr.accesskey')\n    @Input() keyboardAccessKey = 'i';\n\n    /**\n     * Whether the toggle is in the checked/on state.\n     * Bound to aria-checked attribute for accessibility.\n     * @default false\n     */\n    @HostBinding('attr.aria-checked')\n    @Input({ transform: booleanAttribute }) isChecked = false;\n\n    /**\n     * Whether the toggle is read-only (cannot be interacted with).\n     * When true, tabindex is set to -1 and clicking will not change state.\n     * @default undefined\n     */\n    @HostBinding('attr.readonly')\n    @Input({ transform: booleanAttribute }) isReadOnly: boolean;\n\n    /**\n     * Data attribute for e2e testing.\n     * @default 'eui-icon-toggle'\n     */\n    @HostBinding('attr.data-e2e')\n    @Input() e2eAttr = 'eui-icon-toggle';\n\n    /**\n     * Unique identifier for the component.\n     * @default 'eui-icon-toggle-{uniqueId}'\n     */\n    @HostBinding('attr.id')\n    @Input() id = `eui-icon-toggle-${uniqueId()}`;\n\n    /**\n     * Tab order value for keyboard navigation.\n     * @default '0'\n     */\n    @HostBinding('attr.tabindex')\n    @Input() tabindex = '0';\n\n    /**\n     * Accessible label for screen readers.\n     * @default 'Toggle icon'\n     */\n    @HostBinding('attr.aria-label')\n    @Input() ariaLabel = 'Toggle icon';\n\n    /**\n     * Size of the icon (s, m, l, xl).\n     * @default 'm'\n     */\n    @Input() iconSvgSize = 'm';\n\n    /**\n     * Icon to display when toggle is in the ON state.\n     */\n    @Input() iconSvgNameOn: string;\n\n    /**\n     * Icon to display when toggle is in the OFF state.\n     */\n    @Input() iconSvgNameOff: string;\n\n    /**\n     * Color of the icon when toggle is in the ON state.\n     * @default 'accent'\n     */\n    @Input() iconSvgFillColorOn = 'accent';\n\n    /**\n     * Color of the icon when toggle is in the OFF state.\n     * @default 'neutral'\n     */\n    @Input() iconSvgFillColorOff = 'neutral';\n\n    /**\n     * Event emitted when the toggle state changes.\n     * Emits the new state (true = checked, false = unchecked).\n     */\n    // eslint-disable-next-line\n    @Output() toggle: EventEmitter<boolean> = new EventEmitter();\n\n    protected iconSvgName: string;\n    protected iconSvgFillColor: string;\n\n    /**\n     * Handles changes to input properties.\n     * Updates the tabindex when the component becomes read-only.\n     *\n     * @param {SimpleChanges} changes - Object containing changed properties\n     */\n    ngOnChanges(changes: SimpleChanges): void {\n       if (changes?.isReadOnly && changes?.isReadOnly.currentValue === true) {\n            this.tabindex = '-1';\n        }\n\n       if(changes.isChecked) {\n            this._setIconClass();\n       }\n    }\n\n    /**\n     * Initializes the component after content has been set.\n     * Sets the appropriate icon based on the current toggle state.\n     * Sets the aria-label if none was provided.\n     */\n    ngAfterContentInit(): void {\n        this._setIconClass();\n        if (!this.ariaLabel || this.ariaLabel === '') {\n            this.ariaLabel = this.iconSvgName ? this.iconSvgName : '';\n        }\n    }\n\n    /**\n     * Host listener that handles click events on the component.\n     * Triggers the toggle action if the component is not read-only.\n     */\n    @HostListener('click')\n    protected onClick(): void {\n        this._toggle();\n    }\n\n    /**\n     * Host listener that handles keyboard events.\n     * Triggers the toggle action on Enter or Space key press.\n     *\n     * @param {KeyboardEvent} event - The keyboard event\n     */\n    @HostListener('keydown', ['$event'])\n    protected onKeydown(event: KeyboardEvent): void {\n        switch (event.code) {\n            case 'Enter':\n            case 'Space':\n                event.preventDefault();\n                event.stopPropagation();\n                this._toggle();\n                break;\n        }\n    }\n\n    private _toggle(): void {\n        if (!this.isReadOnly) {\n            this.isChecked = !this.isChecked;\n            this._setIconClass();\n            this.toggle.emit(this.isChecked);\n        }\n    }\n\n    private _setIconClass(): void {\n        if (this.isChecked) {\n            this.iconSvgName = this.iconSvgNameOn;\n            this.iconSvgFillColor = this.iconSvgFillColorOn;\n        } else {\n            this.iconSvgName = this.iconSvgNameOff;\n            this.iconSvgFillColor = this.iconSvgFillColorOff;\n        }\n    }\n}\n","<eui-icon-svg [icon]=\"iconSvgName\" [fillColor]=\"iconSvgFillColor\" [size]=\"iconSvgSize\" />\n","import { EuiIconToggleComponent } from './eui-icon-toggle.component';\n\nexport * from './eui-icon-toggle.component';\n\nexport const EUI_ICON_TOGGLE = [\n    EuiIconToggleComponent,\n] as const;\n\n// export { EuiIconToggleComponent as EuiIconToggle } from './eui-icon-toggle.component';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}