{"version":3,"file":"fundamental-ngx-core-button.mjs","sources":["../../../../libs/core/button/base-button.ts","../../../../libs/core/button/tokens.ts","../../../../libs/core/button/button-badge.directive.ts","../../../../libs/core/button/button.component.ts","../../../../libs/core/button/button.component.html","../../../../libs/core/button/button.module.ts","../../../../libs/core/button/fundamental-ngx-core-button.ts"],"sourcesContent":["import { BooleanInput } from '@angular/cdk/coercion';\nimport { Directive, ElementRef, booleanAttribute, inject, input, linkedSignal } from '@angular/core';\n\nimport { HasElementRef } from '@fundamental-ngx/cdk/utils';\nimport { FD_DEFAULT_ICON_FONT_FAMILY, IconFont } from '@fundamental-ngx/core/icon';\nimport { ButtonModel } from './button.model';\n\nexport type GlyphPosition = 'before' | 'after';\n\nexport type ButtonType =\n    | ''\n    | 'standard'\n    | 'positive'\n    | 'negative'\n    | 'attention'\n    | 'half'\n    | 'ghost'\n    | 'transparent'\n    | 'emphasized'\n    | 'menu';\n\nexport const defaultButtonType = 'standard' as ButtonType;\n\n@Directive({\n    host: {\n        '[class.fd-button--toggled]': 'toggledState()',\n        '[attr.aria-pressed]': 'toggledState() || null',\n        '[attr.aria-selected]': 'selectedState() || null'\n    }\n})\nexport class BaseButton implements HasElementRef, ButtonModel {\n    /**\n     * Whether the button is in a toggled state.\n     * Used for toggle buttons that maintain an on/off state.\n     * When true, adds the toggled class and sets aria-pressed=\"true\".\n     */\n    readonly toggled = input<boolean, BooleanInput>(false, { transform: booleanAttribute });\n\n    /**\n     * Whether the button is selected.\n     * Used in button groups or toolbars to indicate the currently selected option.\n     * When true, sets aria-selected=\"true\".\n     */\n    readonly selected = input<boolean, BooleanInput>(false, { transform: booleanAttribute });\n\n    /**\n     * Native type attribute of the button element.\n     * Defaults to 'button' to prevent form submission.\n     * Set to 'submit' for form submission buttons or 'reset' for form reset buttons.\n     */\n    readonly type = input<string | null | undefined>('button');\n\n    /**\n     * Position of the icon relative to the button text.\n     * - 'before': Icon appears before the text (default)\n     * - 'after': Icon appears after the text\n     */\n    readonly glyphPosition = input<GlyphPosition>('before');\n\n    /**\n     * The icon to display in the button.\n     * See the icon documentation for the list of available icons.\n     * Example values: 'add', 'edit', 'delete', 'accept', 'decline'\n     */\n    readonly glyph = input<string | null | undefined>();\n\n    /**\n     * Font family for the icon.\n     * Defaults to the SAP icon font.\n     * Override when using custom icon fonts.\n     */\n    readonly glyphFont = input<IconFont>(FD_DEFAULT_ICON_FONT_FAMILY);\n\n    /**\n     * Visual style of the button.\n     * Available types:\n     * - 'standard': Default button style (blue)\n     * - 'emphasized': High emphasis action (darker blue)\n     * - 'positive': Successful/positive action (green)\n     * - 'negative': Destructive/negative action (red)\n     * - 'attention': Warning action (orange)\n     * - 'transparent': No background, minimal style\n     * - 'ghost': Subtle button with border on hover\n     * - 'half': Split button style\n     * - 'menu': Menu trigger button\n     */\n    readonly fdType = input<ButtonType>(defaultButtonType);\n\n    /**\n     * Text label displayed inside the button.\n     * Can be used alone or combined with an icon.\n     */\n    readonly label = input<string | undefined>();\n\n    /**\n     * Whether to apply menu mode styling to the button.\n     * When true, adds a dropdown arrow icon and menu-specific styling.\n     */\n    readonly fdMenu = input<boolean, BooleanInput>(false, { transform: booleanAttribute });\n\n    /**\n     * Whether the button is disabled.\n     * When true, the button cannot be interacted with and displays a disabled state.\n     * This sets the native 'disabled' attribute on button elements.\n     */\n    readonly disabled = input<boolean, BooleanInput>(false, { transform: booleanAttribute });\n\n    /**\n     * ARIA disabled attribute for accessibility.\n     * Use this when you want to indicate a disabled state to screen readers\n     * without preventing interaction (e.g., for showing tooltips on disabled buttons).\n     * Unlike the 'disabled' attribute, this does not prevent click events.\n     */\n    readonly ariaDisabled = input<boolean, BooleanInput>(false, {\n        alias: 'aria-disabled',\n        transform: booleanAttribute\n    });\n\n    /**\n     * ARIA label for the button.\n     * Provides an accessible name for screen readers.\n     * If not provided, special button types will auto-generate from label or glyph.\n     */\n    readonly ariaLabel = input<string | null | undefined>();\n\n    /**\n     * ARIA description for the button.\n     * Provides additional context for screen readers beyond the label.\n     * Special button types (emphasized, positive, negative, attention) will\n     * auto-generate a description from their type if not provided.\n     */\n    readonly ariaDescription = input<string | null | undefined>();\n\n    /** @hidden */\n    readonly elementRef = inject(ElementRef);\n\n    /**\n     * Internal toggled state that can be mutated programmatically.\n     * Syncs with the toggled input but allows internal modification.\n     * @hidden\n     */\n    protected readonly toggledState = linkedSignal(() => this.toggled());\n\n    /**\n     * Internal selected state that can be mutated programmatically.\n     * Syncs with the selected input but allows internal modification.\n     * @hidden\n     */\n    protected readonly selectedState = linkedSignal(() => this.selected());\n\n    /**\n     * Internal button type state that can be mutated programmatically.\n     * Syncs with the fdType input but allows internal modification.\n     * @hidden\n     */\n    protected readonly fdTypeState = linkedSignal(() => this.fdType());\n\n    /**\n     * Internal disabled state that can be mutated programmatically.\n     * Syncs with the disabled input but allows internal modification.\n     * @hidden\n     */\n    protected readonly _disabledState = linkedSignal(() => this.disabled());\n\n    /**\n     * No-op for ButtonModel interface compatibility.\n     * Signals automatically notify Angular when they change.\n     * @deprecated Signals eliminate the need for manual change detection.\n     */\n    markForCheck(): void {\n        // No-op: Signals automatically trigger change detection\n    }\n\n    /**\n     * Programmatically set the disabled state.\n     * This allows parent components or directives to update the button's disabled state.\n     *\n     * @param value - Whether the button should be disabled\n     *\n     * @example\n     * ```typescript\n     * // In a form component that needs to disable all buttons\n     * this.submitButton.setDisabled(this.form.invalid);\n     * ```\n     */\n    setDisabled(value: boolean): void {\n        this._disabledState.set(value);\n    }\n\n    /**\n     * Get the current disabled state.\n     * Returns the internal disabled state which may have been modified programmatically.\n     *\n     * @returns True if the button is currently disabled\n     *\n     * @example\n     * ```typescript\n     * if (!this.button.isDisabled()) {\n     *     this.button.setDisabled(true);\n     * }\n     * ```\n     */\n    isDisabled(): boolean {\n        return this._disabledState();\n    }\n\n    /**\n     * Programmatically set the button type.\n     * This allows directives to override the button's visual style.\n     *\n     * @param value - The button type to apply\n     *\n     * @example\n     * ```typescript\n     * // A directive that changes button style based on validation state\n     * if (this.validationFailed) {\n     *     this.button.setFdType('negative');\n     * }\n     * ```\n     */\n    setFdType(value: ButtonType): void {\n        this.fdTypeState.set(value);\n    }\n\n    /**\n     * Get the current button type.\n     * Returns the internal button type which may have been modified programmatically.\n     *\n     * @returns The current button type\n     */\n    getFdType(): ButtonType {\n        return this.fdTypeState();\n    }\n\n    /**\n     * Programmatically set the selected state.\n     * This allows parent components to update the button's selected state.\n     * Used in button groups or toolbars to indicate active selection.\n     *\n     * @param value - Whether the button should be selected\n     *\n     * @example\n     * ```typescript\n     * // In a button group component managing selection\n     * this.buttons.forEach(btn => btn.setSelected(false));\n     * this.activeButton.setSelected(true);\n     * ```\n     */\n    setSelected(value: boolean): void {\n        this.selectedState.set(value);\n    }\n\n    /**\n     * Get the current selected state.\n     * Returns the internal selected state which may have been modified programmatically.\n     *\n     * @returns True if the button is currently selected\n     */\n    isSelected(): boolean {\n        return this.selectedState();\n    }\n\n    /**\n     * Programmatically set the toggled state.\n     * This allows parent components to update the button's toggled state.\n     * Used for toggle buttons that maintain an on/off state.\n     *\n     * @param value - Whether the button should be toggled on\n     *\n     * @example\n     * ```typescript\n     * // In a toolbar with toggle buttons\n     * handleBoldClick(): void {\n     *     const isActive = !this.boldButton.isToggled();\n     *     this.boldButton.setToggled(isActive);\n     * }\n     * ```\n     */\n    setToggled(value: boolean): void {\n        this.toggledState.set(value);\n    }\n\n    /**\n     * Get the current toggled state.\n     * Returns the internal toggled state which may have been modified programmatically.\n     *\n     * @returns True if the button is currently toggled\n     */\n    isToggled(): boolean {\n        return this.toggledState();\n    }\n}\n","import { InjectionToken } from '@angular/core';\nimport { BaseButton } from './base-button';\n\nexport const FD_BUTTON_COMPONENT = new InjectionToken<BaseButton>('FdButtonComponent');\n","import { Directive, ElementRef, effect, inject, input, isDevMode } from '@angular/core';\nimport { HasElementRef } from '@fundamental-ngx/cdk/utils';\nimport { BaseButton, ButtonType } from './base-button';\nimport { FD_BUTTON_COMPONENT } from './tokens';\n\nexport const badgeEnabledButtonTypes: ButtonType[] = ['emphasized', 'standard', 'ghost', 'transparent'];\n\n/**\n * Directive to display a badge on a button.\n *\n * Badges are small status indicators that can be added to buttons to show\n * notifications, counts, or other supplementary information.\n *\n * Usage:\n * ```html\n * <button fd-button>\n *   Button Text\n *   <fd-button-badge [content]=\"5\" />\n * </button>\n * ```\n *\n * @note Badge content should not exceed 4 characters for optimal display.\n * @note Badges are only supported on emphasized, standard, ghost, and transparent button types.\n */\n@Directive({\n    // eslint-disable-next-line @angular-eslint/directive-selector\n    selector: 'fd-button-badge',\n    host: {\n        class: 'fd-button__badge'\n    }\n})\nexport class ButtonBadgeDirective implements HasElementRef {\n    /**\n     * Content to display inside the badge.\n     * Should not exceed 4 characters for optimal display.\n     * Supports both string and numeric values.\n     */\n    readonly content = input<string | number>();\n\n    /** @hidden */\n    readonly elementRef: ElementRef<HTMLElement> = inject(ElementRef);\n\n    /** @hidden */\n    protected readonly buttonComponent = inject<BaseButton>(FD_BUTTON_COMPONENT, { host: true });\n\n    /** @hidden */\n    constructor() {\n        // Single-purpose effect: Sync badge content to DOM\n        effect(() => {\n            this.elementRef.nativeElement.textContent = String(this.content() ?? '');\n        });\n\n        // Validation effect only in development mode (zero overhead in production)\n        if (isDevMode()) {\n            effect(() => {\n                this._validateBadge();\n            });\n        }\n    }\n\n    /**\n     * Validates badge configuration in development mode.\n     * Checks content length and button type compatibility.\n     * @hidden\n     */\n    private _validateBadge(): void {\n        const contentValue = this.content();\n        if (contentValue && contentValue.toString().length > 4) {\n            console.warn('Badge content should not be longer than 4 characters');\n        }\n\n        if (!badgeEnabledButtonTypes.includes(this.buttonComponent.getFdType())) {\n            console.warn(\n                `Currently the ${JSON.stringify(\n                    badgeEnabledButtonTypes\n                )} type of buttons are required for Badge enablement`\n            );\n        }\n    }\n}\n","import {\n    afterNextRender,\n    ChangeDetectionStrategy,\n    Component,\n    computed,\n    ElementRef,\n    inject,\n    input,\n    signal,\n    ViewEncapsulation\n} from '@angular/core';\nimport { HasElementRef } from '@fundamental-ngx/cdk/utils';\nimport { ContentDensityObserver, contentDensityObserverProviders } from '@fundamental-ngx/core/content-density';\nimport { BaseButton } from './base-button';\n\nimport { IconComponent } from '@fundamental-ngx/core/icon';\nimport { FD_BUTTON_COMPONENT } from './tokens';\n\nlet buttonId = 0;\n\nconst SPECIAL_BUTTON_TYPES = new Set(['emphasized', 'positive', 'negative', 'attention']);\n\n/**\n * Button directive, used to enhance standard HTML buttons.\n *\n * ``` selector: button[fd-button], a[fd-button] ```\n *\n * ```html\n * <button fd-button label=\"Button Text\"></button>\n * <a fd-button label=\"Button Text\"></a>\n * ```\n */\n@Component({\n    // eslint-disable-next-line @angular-eslint/component-selector\n    selector: 'button[fd-button], a[fd-button], span[fd-button]',\n    exportAs: 'fd-button',\n    templateUrl: './button.component.html',\n    styleUrl: './button.component.scss',\n    encapsulation: ViewEncapsulation.None,\n    changeDetection: ChangeDetectionStrategy.OnPush,\n    host: {\n        '[attr.type]': 'type()',\n        '[attr.disabled]': '_disabledState() || null',\n        '[attr.aria-disabled]': 'ariaDisabled() || null',\n        '[attr.aria-label]': 'buttonArialabel()',\n        '[attr.aria-description]': 'buttonAriaDescription()',\n        '[attr.id]': 'id()',\n        '[class]': 'cssClass()',\n        '(click)': 'clicked($event)'\n    },\n    providers: [\n        contentDensityObserverProviders(),\n        {\n            provide: FD_BUTTON_COMPONENT,\n            useExisting: ButtonComponent\n        }\n    ],\n    imports: [IconComponent]\n})\nexport class ButtonComponent extends BaseButton implements HasElementRef {\n    /** Button ID - default value is provided if not set  */\n    readonly id = input(`fd-button-${++buttonId}`);\n\n    /** @hidden */\n    readonly elementRef = inject(ElementRef);\n\n    /** @hidden */\n    protected readonly contentDensityObserver = inject(ContentDensityObserver);\n\n    /**\n     * Calculate aria-label attribute\n     * @hidden\n     */\n    protected readonly buttonArialabel = computed(() => {\n        if (this.ariaLabel()) {\n            return this.ariaLabel(); // return the input aria-label\n        }\n\n        const nativeLabel = this._nativeAriaLabel();\n\n        if (nativeLabel) {\n            return nativeLabel; // return the native attribute aria-label\n        }\n\n        if (SPECIAL_BUTTON_TYPES.has(this.fdTypeState())) {\n            return this.label() ?? this._glyphLabel() ?? null;\n        }\n\n        return null;\n    });\n\n    /**\n     * Calculate aria-description attribute\n     * @hidden\n     */\n    protected readonly buttonAriaDescription = computed(() => {\n        if (this.ariaDescription()) {\n            return this.ariaDescription();\n        }\n\n        if (SPECIAL_BUTTON_TYPES.has(this.fdTypeState())) {\n            return this.fdTypeState();\n        }\n\n        return null;\n    });\n\n    /**\n     * Computed CSS classes for the button.\n     * Built as a string to avoid array allocation overhead.\n     * @hidden\n     */\n    protected readonly cssClass = computed(() => {\n        let classes = 'fd-button';\n\n        const type = this.fdTypeState();\n        if (type) {\n            classes += ` fd-button--${type}`;\n        }\n\n        if (this.fdMenu()) {\n            classes += ' fd-button--menu';\n        }\n\n        if (this._disabledState() || this.ariaDisabled()) {\n            classes += ' is-disabled';\n        }\n\n        if (this.toggledState()) {\n            classes += ' fd-button--toggled';\n        }\n\n        return classes;\n    });\n\n    /**\n     * Memoized glyph label for aria-label fallback.\n     * Transforms glyph name (e.g., \"slim-arrow-down\") to readable text (e.g., \"slim arrow down\").\n     * @hidden\n     */\n    private readonly _glyphLabel = computed(() => {\n        const glyph = this.glyph();\n        return glyph ? glyph.replace(/-/g, ' ') : null;\n    });\n\n    /**\n     * Native aria-label attribute read from the DOM element.\n     * Captured once after render for use in aria-label computation.\n     * @hidden\n     */\n    private readonly _nativeAriaLabel = signal<string | null>(null);\n\n    /** @hidden */\n    constructor() {\n        super();\n\n        // Read native aria-label attribute once after render\n        afterNextRender(() => {\n            const nativeLabel = this.elementRef.nativeElement.getAttribute('aria-label');\n            if (nativeLabel) {\n                this._nativeAriaLabel.set(nativeLabel);\n            }\n        });\n    }\n\n    /** Forces the focus outline around the button, which is not default behavior in Safari. */\n    protected clicked(event: Event): void {\n        const target = event?.target as HTMLElement;\n        // Target can be empty during unit tests execution.\n        if (target && document.activeElement !== target) {\n            target.focus();\n        }\n    }\n}\n","@if (glyph() && glyphPosition() === 'before') {\n    <fd-icon [glyph]=\"glyph()\" [font]=\"glyphFont()\"></fd-icon>\n}\n@if (label()) {\n    <span class=\"fd-button__text\">\n        {{ label() }}\n    </span>\n}\n<ng-content></ng-content>\n<ng-content select=\"fd-button-badge\"></ng-content>\n@if (glyph() && glyphPosition() === 'after') {\n    <fd-icon [glyph]=\"glyph()\" [font]=\"glyphFont()\"></fd-icon>\n}\n@if (fdMenu()) {\n    <fd-icon glyph=\"slim-arrow-down\"></fd-icon>\n}\n","import { NgModule } from '@angular/core';\n\nimport { ButtonComponent } from './button.component';\n\n/**\n * @deprecated\n * Use `ButtonComponent` import instead\n */\n@NgModule({\n    imports: [ButtonComponent],\n    exports: [ButtonComponent]\n})\nexport class ButtonModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}