{"version":3,"file":"koobiq-components-button.mjs","sources":["../../../packages/components/button/button.component.ts","../../../packages/components/button/button.component.html","../../../packages/components/button/button-group.ts","../../../packages/components/button/button-slots.ts","../../../packages/components/button/button.dropdown-trigger.directive.ts","../../../packages/components/button/button.module.ts","../../../packages/components/button/koobiq-components-button.ts"],"sourcesContent":["import { FocusMonitor } from '@angular/cdk/a11y';\nimport { CdkObserveContent } from '@angular/cdk/observers';\nimport {\n    AfterContentInit,\n    AfterViewInit,\n    booleanAttribute,\n    ChangeDetectionStrategy,\n    ChangeDetectorRef,\n    Component,\n    contentChildren,\n    Directive,\n    effect,\n    ElementRef,\n    forwardRef,\n    inject,\n    Input,\n    isDevMode,\n    numberAttribute,\n    OnDestroy,\n    Renderer2,\n    signal,\n    untracked,\n    ViewChild,\n    ViewEncapsulation\n} from '@angular/core';\nimport { DOWN_ARROW, ENTER, LEFT_ARROW, RIGHT_ARROW, SPACE } from '@koobiq/cdk/keycodes';\nimport {\n    getNodesWithoutComments,\n    KBQ_TITLE_TEXT_REF,\n    KbqColorDirective,\n    KbqComponentColors,\n    KbqTitleTextRef,\n    leftIconClassName,\n    rightIconClassName\n} from '@koobiq/components/core';\nimport { KbqIcon } from '@koobiq/components/icon';\n\nexport enum KbqButtonStyles {\n    Filled = 'filled',\n    Outline = 'outline',\n    Transparent = 'transparent'\n}\n\nexport const buttonLeftIconClassName = 'kbq-button-icon_left';\nexport const buttonRightIconClassName = 'kbq-button-icon_right';\n\n/** A button containing more icons than this keeps regular (non icon-button) styling. */\nconst maxIconsForIconButton = 2;\n\n/**\n * Applies the `kbq-button`/`kbq-button-icon` host class and the left/right icon modifier classes.\n *\n * A button is treated as an icon button when its projected content consists only of `KbqIcon`s\n * and there are at most 2 of them. When icons are mixed with other content, only the outermost\n * icons receive the left/right classes.\n *\n * Must be used together with `KbqButton` (both match `[kbq-button]`): icon detection relies on\n * the `.kbq-button-wrapper` element rendered by the component's template.\n */\n@Directive({\n    selector: '[kbq-button]',\n    host: {\n        '[class.kbq-button]': '!isIconButton',\n        '[class.kbq-button-icon]': 'isIconButton'\n    }\n})\nexport class KbqButtonCssStyler implements AfterContentInit {\n    readonly icons = contentChildren(forwardRef(() => KbqIcon));\n\n    nativeElement: HTMLElement;\n\n    /** Whether the button contains only icons (at most 2). */\n    get isIconButton(): boolean {\n        return this._isIconButton();\n    }\n\n    private readonly _isIconButton = signal(false);\n\n    private leftIcon: HTMLElement | null = null;\n    private rightIcon: HTMLElement | null = null;\n\n    constructor(\n        elementRef: ElementRef<HTMLElement>,\n        private renderer: Renderer2\n    ) {\n        this.nativeElement = elementRef.nativeElement;\n\n        // The contentChildren query tracks only KbqIcon instances, while icon placement also\n        // depends on sibling text nodes that are invisible to the query — those are covered by\n        // the MutationObserver in the component template. This effect covers icon creation and\n        // removal (e.g. via @if) while the observer is disabled for icon-less buttons.\n        effect(() => {\n            this.icons();\n\n            untracked(() => this.updateClassModifierForIcons());\n        });\n    }\n\n    ngAfterContentInit() {\n        this.updateClassModifierForIcons();\n    }\n\n    updateClassModifierForIcons() {\n        const wrapper = this.nativeElement.querySelector('.kbq-button-wrapper');\n\n        if (!wrapper) {\n            if (isDevMode()) {\n                // eslint-disable-next-line no-console\n                console.warn('KbqButtonCssStyler should be imported together with KbqButton.');\n            }\n\n            return;\n        }\n\n        const icons = this.icons();\n        const textElement = wrapper.querySelector('.kbq-button-text');\n\n        // Build an ordered list of \"effective\" content nodes: the left-slot content, then the\n        // default-slot content flattened out of `.kbq-button-text`, then the right-slot content.\n        // Flattening the text span keeps legacy `<i kbq-icon> Text` markup (projected into the\n        // default slot) working: those icons live inside `.kbq-button-text`, but for placement\n        // they must be treated as direct siblings of the text, exactly as before the text span\n        // existed. With no marker slots this list equals the old wrapper children.\n        const effectiveNodes: Node[] = [];\n\n        for (const node of getNodesWithoutComments(wrapper.childNodes)) {\n            if (node === textElement) {\n                effectiveNodes.push(...getNodesWithoutComments((node as HTMLElement).childNodes));\n            } else {\n                effectiveNodes.push(node);\n            }\n        }\n\n        this._isIconButton.set(\n            !!icons.length && icons.length === effectiveNodes.length && icons.length <= maxIconsForIconButton\n        );\n\n        let leftIcon: HTMLElement | null = null;\n        let rightIcon: HTMLElement | null = null;\n\n        if (icons.length && effectiveNodes.length > 1) {\n            for (const icon of icons) {\n                const iconHostElement = icon.getHostElement();\n                const iconIndex = effectiveNodes.indexOf(iconHostElement);\n\n                if (iconIndex === 0) leftIcon = iconHostElement;\n\n                if (iconIndex === effectiveNodes.length - 1) rightIcon = iconHostElement;\n            }\n        }\n\n        this.updateIconClass(this.leftIcon, leftIcon, leftIconClassName, buttonLeftIconClassName);\n        this.updateIconClass(this.rightIcon, rightIcon, rightIconClassName, buttonRightIconClassName);\n\n        this.leftIcon = leftIcon;\n        this.rightIcon = rightIcon;\n    }\n\n    private updateIconClass(\n        previous: HTMLElement | null,\n        current: HTMLElement | null,\n        iconClassName: string,\n        buttonClassName: string\n    ) {\n        if (previous === current) return;\n\n        if (previous) {\n            this.renderer.removeClass(previous, iconClassName);\n        }\n\n        if (current) {\n            this.renderer.addClass(current, iconClassName);\n            this.renderer.addClass(this.nativeElement, buttonClassName);\n        } else {\n            this.renderer.removeClass(this.nativeElement, buttonClassName);\n        }\n    }\n}\n\n@Component({\n    selector: '[kbq-button]',\n    imports: [\n        CdkObserveContent\n    ],\n    templateUrl: './button.component.html',\n    styleUrls: ['./button.scss', './button-tokens.scss'],\n    encapsulation: ViewEncapsulation.None,\n    changeDetection: ChangeDetectionStrategy.OnPush,\n    providers: [\n        { provide: KBQ_TITLE_TEXT_REF, useExisting: KbqButton }\n    ],\n    host: {\n        '[attr.disabled]': 'disabled || null',\n        '[attr.aria-disabled]': 'disabled || null',\n        '[class.kbq-disabled]': 'disabled',\n        '[attr.tabIndex]': 'tabIndex',\n        '[class]': 'kbqStyle',\n        '(focus)': 'onFocus()',\n        '(blur)': 'onBlur()'\n    }\n})\nexport class KbqButton extends KbqColorDirective implements OnDestroy, AfterViewInit, KbqTitleTextRef {\n    private readonly changeDetectorRef = inject(ChangeDetectorRef);\n\n    hasFocus: boolean = false;\n\n    @ViewChild('kbqTitleText') textElement: ElementRef<HTMLElement>;\n\n    /** The flex row that lays out the icons and text, used as the overflow width constraint. */\n    @ViewChild('parentTextElement') parentTextElement: ElementRef<HTMLElement>;\n\n    // TODO: Skipped for migration because:\n    //  Accessor inputs cannot be migrated as they are too complex.\n    @Input()\n    get kbqStyle(): string {\n        return `kbq-button_${this._kbqStyle}`;\n    }\n\n    set kbqStyle(value: string | KbqButtonStyles) {\n        this._kbqStyle = value || KbqButtonStyles.Filled;\n\n        this.changeDetectorRef.markForCheck();\n    }\n\n    private _kbqStyle: string | KbqButtonStyles = KbqButtonStyles.Filled;\n\n    // @todo 20 In the next major release this feature will be replaced on the input signal.\n    /** Whether the button is disabled. */\n    // TODO: Skipped for migration because:\n    //  Accessor inputs cannot be migrated as they are too complex.\n    @Input({ transform: booleanAttribute })\n    get disabled(): boolean {\n        return this.disabledSignal();\n    }\n\n    set disabled(value: boolean) {\n        this.disabledSignal.set(value);\n    }\n\n    /** @docs-private */\n    readonly disabledSignal = signal(false);\n\n    // TODO: Skipped for migration because:\n    //  Accessor inputs cannot be migrated as they are too complex.\n    @Input({ transform: numberAttribute })\n    get tabIndex(): number {\n        return this.disabled ? -1 : this._tabIndex;\n    }\n\n    set tabIndex(value: number) {\n        this._tabIndex = value;\n    }\n\n    private _tabIndex = 0;\n\n    constructor(\n        private focusMonitor: FocusMonitor,\n        protected styler: KbqButtonCssStyler\n    ) {\n        super();\n\n        this.color = KbqComponentColors.ContrastFade;\n        this.setDefaultColor(KbqComponentColors.ContrastFade);\n\n        // Native capture-phase listeners instead of host listeners: Angular coalesces listeners\n        // for the same event on the same element, so stopImmediatePropagation from a host listener\n        // would not stop consumer-bound handlers. Matters for <a kbq-button> hosts only —\n        // a disabled native <button> does not emit these events at all. The keydown guard covers\n        // directives that activate on keydown directly (e.g. KbqDropdownTrigger, which opens on\n        // ENTER/SPACE and on DOWN/LEFT/RIGHT arrows).\n        this.getHostElement().addEventListener('click', this.haltDisabledEvents, true);\n        this.getHostElement().addEventListener('keydown', this.haltDisabledKeydownEvents, true);\n    }\n\n    ngAfterViewInit(): void {\n        this.runFocusMonitor();\n    }\n\n    ngOnDestroy() {\n        this.getHostElement().removeEventListener('click', this.haltDisabledEvents, true);\n        this.getHostElement().removeEventListener('keydown', this.haltDisabledKeydownEvents, true);\n        this.stopFocusMonitor();\n    }\n\n    onFocus() {\n        this.hasFocus = true;\n    }\n\n    onBlur() {\n        this.hasFocus = false;\n    }\n\n    getHostElement() {\n        return this.elementRef.nativeElement;\n    }\n\n    focus(): void {\n        if (this.disabled) return;\n\n        this.getHostElement().focus();\n    }\n\n    focusViaKeyboard(): void {\n        if (this.disabled) return;\n\n        this.focusMonitor.focusVia(this.getHostElement(), 'keyboard');\n    }\n\n    haltDisabledEvents = (event: Event) => {\n        if (this.disabled) {\n            event.preventDefault();\n            event.stopImmediatePropagation();\n            event.stopPropagation();\n        }\n    };\n\n    private haltDisabledKeydownEvents = (event: KeyboardEvent) => {\n        // Keys that activate sibling host directives on the same host (e.g. KbqDropdownTrigger opens\n        // on ENTER/SPACE and on DOWN/LEFT/RIGHT arrows). Tab/Escape are intentionally left untouched\n        // so focus can still move away from a disabled — but still focusable — <a kbq-button> host.\n        if ([ENTER, SPACE, DOWN_ARROW, LEFT_ARROW, RIGHT_ARROW].includes(event.keyCode)) {\n            this.haltDisabledEvents(event);\n        }\n    };\n\n    projectContentChanged() {\n        this.styler.updateClassModifierForIcons();\n    }\n\n    private runFocusMonitor() {\n        this.focusMonitor.monitor(this.elementRef.nativeElement, true);\n    }\n\n    private stopFocusMonitor() {\n        this.focusMonitor.stopMonitoring(this.elementRef.nativeElement);\n    }\n}\n","<span\n    #parentTextElement\n    class=\"kbq-button-wrapper\"\n    [cdkObserveContentDisabled]=\"!styler.icons().length\"\n    (cdkObserveContent)=\"projectContentChanged()\"\n>\n    <ng-content select=\"[kbqButtonPrefix]\" />\n    <span #kbqTitleText class=\"kbq-button-text\">\n        <ng-content />\n    </span>\n    <ng-content select=\"[kbqButtonSuffix]\" />\n</span>\n","import {\n    booleanAttribute,\n    ChangeDetectionStrategy,\n    Component,\n    contentChildren,\n    Directive,\n    effect,\n    Input,\n    input,\n    ViewEncapsulation\n} from '@angular/core';\nimport { KbqColorDirective, KbqComponentColors, KbqOrientation, ThemePalette } from '@koobiq/components/core';\nimport { KbqButton, KbqButtonStyles } from './button.component';\n\n/**\n * Root directive that groups related buttons,\n * propagating a shared style, color, and disabled state to every nested button\n */\n@Directive({\n    selector: '[kbqButtonGroupRoot]',\n    host: {\n        '[class]': 'kbqStyle'\n    }\n})\nexport class KbqButtonGroupRoot extends KbqColorDirective {\n    private readonly buttons = contentChildren(KbqButton);\n    /**\n     * Style applied to the group and propagated to every nested button.\n     * individual button's style preserved but updated when group input changed.\n     */\n    @Input()\n    get kbqStyle(): string {\n        return this._kbqStyle && `kbq-button-group-root_${this._kbqStyle}`;\n    }\n\n    set kbqStyle(value: KbqButtonStyles | string) {\n        this._kbqStyle = value || KbqButtonStyles.Filled;\n\n        this.updateStyle(this._kbqStyle, this.buttons?.());\n    }\n\n    private _kbqStyle: string | KbqButtonStyles = '';\n\n    /**\n     * Color applied to the group and propagated to every nested button.\n     * individual button's color preserved but updated when group input changed.\n     */\n    @Input()\n    get color(): KbqComponentColors | ThemePalette | string {\n        return this._color;\n    }\n\n    set color(value: KbqComponentColors | ThemePalette | string) {\n        if (!value) return;\n\n        super.color = value;\n\n        this.updateColor(this.color, this.buttons?.());\n    }\n\n    /** Whether the root is disabled. */\n    @Input({ transform: booleanAttribute })\n    get disabled(): boolean {\n        return this._disabled;\n    }\n\n    set disabled(value: boolean) {\n        this._disabled = value;\n\n        this.updateDisabledState(this._disabled, this.buttons?.());\n    }\n\n    /** @docs-private */\n    protected _disabled: boolean;\n\n    constructor() {\n        super();\n\n        this.color = KbqComponentColors.ContrastFade;\n        this.setDefaultColor(KbqComponentColors.ContrastFade);\n\n        effect(() => {\n            const buttons = this.buttons();\n\n            this.updateColor(this.color, buttons);\n            this.updateStyle(this._kbqStyle, buttons);\n            this.updateDisabledState(this.disabled, buttons);\n        });\n    }\n\n    private updateColor(color: KbqComponentColors | ThemePalette | string, buttons?: readonly KbqButton[]) {\n        buttons?.forEach((button: KbqButton) => (button.color = color));\n    }\n\n    private updateStyle(style: KbqButtonStyles | string, buttons?: readonly KbqButton[]) {\n        buttons?.forEach((button: KbqButton) => (button.kbqStyle = style));\n    }\n\n    private updateDisabledState(state: boolean, buttons?: readonly KbqButton[]) {\n        if (state === undefined) return;\n\n        buttons?.forEach((button: KbqButton) => (button.disabled = state));\n    }\n}\n\n/** Groups and styling related `KbqButton`s into a single visual unit. */\n@Component({\n    selector: 'kbq-button-group, [kbq-button-group]',\n    template: `\n        <ng-content />\n    `,\n    styleUrls: ['./button-group.scss'],\n    encapsulation: ViewEncapsulation.None,\n    changeDetection: ChangeDetectionStrategy.OnPush,\n    host: {\n        role: 'group',\n        class: 'kbq-button-group',\n        '[class]': '\"kbq-button-group_\" + orientation()',\n        '[attr.aria-orientation]': 'orientation()'\n    },\n    hostDirectives: [\n        { directive: KbqButtonGroupRoot, inputs: ['color', 'kbqStyle', 'disabled'] }\n    ]\n})\nexport class KbqButtonGroup {\n    /**\n     * Layout direction: `'horizontal'` or `'vertical'`\n     * @default 'horizontal'\n     */\n    readonly orientation = input<KbqOrientation>('horizontal');\n}\n","import { Directive } from '@angular/core';\n\n/** Marks content to be projected into the prefix (leading) slot of a button. */\n@Directive({\n    selector: '[kbqButtonPrefix]',\n    host: {\n        class: 'kbq-button-prefix'\n    }\n})\nexport class KbqButtonPrefix {}\n\n/** Marks content to be projected into the suffix (trailing) slot of a button. */\n@Directive({\n    selector: '[kbqButtonSuffix]',\n    host: {\n        class: 'kbq-button-suffix'\n    }\n})\nexport class KbqButtonSuffix {}\n","import { Directive, inject } from '@angular/core';\nimport { KbqDropdownTrigger } from '@koobiq/components/dropdown';\n\n/**\n * This directive enhances `kbq-button` elements acting as dropdown triggers,\n * visually indicating the active state with the `kbq-active` class,\n * following Koobiq Design System.\n *\n * The directive relies on a separate `KbqDropdownTrigger` directive to get dropdown's state.\n */\n@Directive({\n    selector: `[kbq-button][kbqDropdownTriggerFor]`,\n    host: {\n        '[class.kbq-active]': 'dropdownTrigger.opened'\n    }\n})\nexport class KbqButtonDropdownTrigger {\n    dropdownTrigger = inject(KbqDropdownTrigger);\n}\n","import { A11yModule } from '@angular/cdk/a11y';\nimport { ObserversModule } from '@angular/cdk/observers';\nimport { PlatformModule } from '@angular/cdk/platform';\nimport { NgModule } from '@angular/core';\nimport { KbqButtonGroup, KbqButtonGroupRoot } from './button-group';\nimport { KbqButtonPrefix, KbqButtonSuffix } from './button-slots';\nimport { KbqButton, KbqButtonCssStyler } from './button.component';\nimport { KbqButtonDropdownTrigger } from './button.dropdown-trigger.directive';\n\n@NgModule({\n    imports: [\n        A11yModule,\n        PlatformModule,\n        ObserversModule,\n        KbqButtonDropdownTrigger,\n        KbqButton,\n        KbqButtonCssStyler,\n        KbqButtonPrefix,\n        KbqButtonSuffix,\n        KbqButtonGroup,\n        KbqButtonGroupRoot\n    ],\n    exports: [\n        KbqButton,\n        KbqButtonCssStyler,\n        KbqButtonPrefix,\n        KbqButtonSuffix,\n        KbqButtonDropdownTrigger,\n        KbqButtonGroup,\n        KbqButtonGroupRoot\n    ]\n})\nexport class KbqButtonModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}