{"version":3,"file":"seniorsistemas-angular-components-split-button.mjs","sources":["../../projects/angular-components/split-button/src/lib/split-button/split-button.component.ts","../../projects/angular-components/split-button/src/lib/split-button/split-button.component.html","../../projects/angular-components/split-button/src/lib/split-button/split-button.module.ts","../../projects/angular-components/split-button/src/seniorsistemas-angular-components-split-button.ts"],"sourcesContent":["import { Component, Input, Output, EventEmitter, HostListener, ElementRef, inject } from '@angular/core';\n\nimport { SplitButtonOption } from './models/split-button-option';\nimport { SplitButtonType } from './models/split-button-type';\n\n/**\n * @description Botão composto com ação principal e dropdown de opções adicionais.\n * Ao clicar no botão principal emite `buttonClicked`; ao clicar no ícone de seta\n * abre/fecha o dropdown com a lista de `options`.\n *\n * @example\n * ```html\n * <s-split-button\n *   label=\"Salvar\"\n *   iconClass=\"fas fa-save\"\n *   [options]=\"menuOpcoes\"\n *   (buttonClicked)=\"onSalvar()\" />\n * ```\n *\n * @category Inputs\n */\n@Component({\n    selector: 's-split-button',\n    templateUrl: './split-button.component.html',\n    styleUrls: ['./split-button.component.scss'],\n})\nexport class SplitButtonComponent {\n    private readonly _eRef = inject(ElementRef);\n\n    /** @description Desabilita o botão principal e o dropdown. @default false */\n    @Input()\n    public disabled = false;\n\n    /** @description Classe do ícone exibido no botão principal. Campo obrigatório. */\n    @Input({ required: true })\n    public iconClass!: string;\n\n    /** @description Rótulo do botão principal. Campo obrigatório. */\n    @Input({ required: true })\n    public label!: string;\n\n    /** @description Estilo visual do botão (`'primary'` ou `'secondary'`). @default 'primary' */\n    @Input()\n    public type: SplitButtonType = 'primary';\n\n    /** @description Lista de opções exibidas no dropdown. Campo obrigatório. */\n    @Input({ required: true })\n    public options!: SplitButtonOption[];\n\n    /** @description Emitido quando o usuário clica no botão principal (não no dropdown). */\n    @Output()\n    public buttonClicked = new EventEmitter();\n\n    public open = false;\n\n    @HostListener('document:click', ['$event'])\n    public onClickout(event: MouseEvent) {\n        if (!this._eRef.nativeElement.contains(event.target)) {\n            this._closeDropdown();\n        }\n    }\n\n    public onButtonClick() {\n        if (!this.disabled) {\n            this.buttonClicked.emit();\n            this._closeDropdown();\n        }\n    }\n\n    public onDropdownClick() {\n        if (!this.disabled) {\n            this.open = !this.open;\n        }\n    }\n\n    public onOptionClick(option: SplitButtonOption) {\n        option.action?.();\n        this._closeDropdown();\n    }\n\n    private _closeDropdown() {\n        this.open = false;\n    }\n}\n\n","<div\n    class=\"split-button\"\n    [ngClass]=\"{\n        'split-button--primary': type === 'primary',\n        'split-button--secondary': type === 'secondary',\n        'split-button--default': type === 'default',\n        'split-button--disabled': disabled,\n    }\"\n>\n    <button\n        class=\"button\"\n        (click)=\"onButtonClick()\"\n    >\n        <span\n            class=\"button__icon\"\n            [ngClass]=\"iconClass\"\n        ></span>\n        <span class=\"button__label\">{{ label }}</span>\n    </button>\n    <button\n        class=\"dropdown\"\n        (click)=\"onDropdownClick()\"\n    >\n        <span\n            class=\"dropdown__icon\"\n            [ngClass]=\"{\n                far: true,\n                'fa-chevron-down': !open,\n                'fa-chevron-up': open,\n            }\"\n        >\n        </span>\n    </button>\n</div>\n\n@if (this.open) {\n    <ul class=\"options\">\n        @for (option of options; track option.title) {\n            <li (click)=\"onOptionClick(option)\">\n                {{ option.title }}\n            </li>\n        }\n    </ul>\n}\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\n\nimport { SplitButtonComponent } from './split-button.component';\n\n@NgModule({\n    imports: [CommonModule],\n    declarations: [SplitButtonComponent],\n    exports: [SplitButtonComponent],\n})\nexport class SplitButtonModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}