{"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 { NgClass } from '@angular/common';\r\nimport { Component, ElementRef, EventEmitter, HostListener, inject, Input, Output } from '@angular/core';\r\n\r\nimport { SplitButtonOption } from './models/split-button-option';\r\nimport { SplitButtonType } from './models/split-button-type';\r\n\r\n/**\r\n * @description Botão composto com ação principal e dropdown de opções adicionais.\r\n * Ao clicar no botão principal emite `buttonClicked`; ao clicar no ícone de seta\r\n * abre/fecha o dropdown com a lista de `options`.\r\n *\r\n * @example\r\n * ```html\r\n * <s-split-button\r\n *   label=\"Salvar\"\r\n *   iconClass=\"fas fa-save\"\r\n *   [options]=\"menuOpcoes\"\r\n *   (buttonClicked)=\"onSalvar()\" />\r\n * ```\r\n *\r\n * @category Inputs\r\n */\r\n@Component({\r\n    selector: 's-split-button',\r\n    templateUrl: './split-button.component.html',\r\n    styleUrls: ['./split-button.component.scss'],\r\n    standalone: true,\r\n    imports: [NgClass],\r\n})\r\nexport class SplitButtonComponent {\r\n    private readonly _eRef = inject(ElementRef);\r\n\r\n    /** @description Desabilita o botão principal e o dropdown. @default false */\r\n    @Input()\r\n    public disabled = false;\r\n\r\n    /** @description Classe do ícone exibido no botão principal. Campo obrigatório. */\r\n    @Input({ required: true })\r\n    public iconClass!: string;\r\n\r\n    /** @description Rótulo do botão principal. Campo obrigatório. */\r\n    @Input({ required: true })\r\n    public label!: string;\r\n\r\n    /** @description Estilo visual do botão (`'primary'` ou `'secondary'`). @default 'primary' */\r\n    @Input()\r\n    public type: SplitButtonType = 'primary';\r\n\r\n    /** @description Lista de opções exibidas no dropdown. Campo obrigatório. */\r\n    @Input({ required: true })\r\n    public options!: SplitButtonOption[];\r\n\r\n    /** @description Classe do ícone exibido quando o dropdown está fechado. @default 'far fa-chevron-down' */\r\n    @Input()\r\n    public openIcon = 'far fa-chevron-down';\r\n\r\n    /** @description Classe do ícone exibido quando o dropdown está aberto. @default 'far fa-chevron-up' */\r\n    @Input()\r\n    public closeIcon = 'far fa-chevron-up';\r\n\r\n    /** @description Emitido quando o usuário clica no botão principal (não no dropdown). */\r\n    @Output()\r\n    public buttonClicked = new EventEmitter();\r\n\r\n    public open = false;\r\n\r\n    @HostListener('document:click', ['$event'])\r\n    public onClickout(event: MouseEvent) {\r\n        if (!this._eRef.nativeElement.contains(event.target)) {\r\n            this._closeDropdown();\r\n        }\r\n    }\r\n\r\n    public onButtonClick() {\r\n        if (!this.disabled) {\r\n            this.buttonClicked.emit();\r\n            this._closeDropdown();\r\n        }\r\n    }\r\n\r\n    public onDropdownClick() {\r\n        if (!this.disabled) {\r\n            this.open = !this.open;\r\n        }\r\n    }\r\n\r\n    public onOptionClick(option: SplitButtonOption) {\r\n        option.action?.();\r\n        this._closeDropdown();\r\n    }\r\n\r\n    private _closeDropdown() {\r\n        this.open = false;\r\n    }\r\n}\r\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            [class]=\"open ? closeIcon : openIcon\"\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';\r\n\r\nimport { SplitButtonComponent } from './split-button.component';\r\n\r\n@NgModule({\r\n    imports: [SplitButtonComponent],\r\n    exports: [SplitButtonComponent],\r\n})\r\nexport class SplitButtonModule {}\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":";;;;AAMA;;;;;;;;;;;;;;;AAeG;MAQU,oBAAoB,CAAA;AACZ,IAAA,KAAK,GAAG,MAAM,CAAC,UAAU,CAAC,CAAC;;IAIrC,QAAQ,GAAG,KAAK,CAAC;;AAIjB,IAAA,SAAS,CAAU;;AAInB,IAAA,KAAK,CAAU;;IAIf,IAAI,GAAoB,SAAS,CAAC;;AAIlC,IAAA,OAAO,CAAuB;;IAI9B,QAAQ,GAAG,qBAAqB,CAAC;;IAIjC,SAAS,GAAG,mBAAmB,CAAC;;AAIhC,IAAA,aAAa,GAAG,IAAI,YAAY,EAAE,CAAC;IAEnC,IAAI,GAAG,KAAK,CAAC;AAGb,IAAA,UAAU,CAAC,KAAiB,EAAA;AAC/B,QAAA,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,QAAQ,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE;YAClD,IAAI,CAAC,cAAc,EAAE,CAAC;SACzB;KACJ;IAEM,aAAa,GAAA;AAChB,QAAA,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE;AAChB,YAAA,IAAI,CAAC,aAAa,CAAC,IAAI,EAAE,CAAC;YAC1B,IAAI,CAAC,cAAc,EAAE,CAAC;SACzB;KACJ;IAEM,eAAe,GAAA;AAClB,QAAA,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE;AAChB,YAAA,IAAI,CAAC,IAAI,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC;SAC1B;KACJ;AAEM,IAAA,aAAa,CAAC,MAAyB,EAAA;AAC1C,QAAA,MAAM,CAAC,MAAM,IAAI,CAAC;QAClB,IAAI,CAAC,cAAc,EAAE,CAAC;KACzB;IAEO,cAAc,GAAA;AAClB,QAAA,IAAI,CAAC,IAAI,GAAG,KAAK,CAAC;KACrB;wGAhEQ,oBAAoB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;4FAApB,oBAAoB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,EAAA,QAAA,EAAA,UAAA,EAAA,SAAA,EAAA,WAAA,EAAA,KAAA,EAAA,OAAA,EAAA,IAAA,EAAA,MAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,UAAA,EAAA,SAAA,EAAA,WAAA,EAAA,EAAA,OAAA,EAAA,EAAA,aAAA,EAAA,eAAA,EAAA,EAAA,IAAA,EAAA,EAAA,SAAA,EAAA,EAAA,gBAAA,EAAA,oBAAA,EAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EC7BjC,6/BAwCA,EAAA,MAAA,EAAA,CAAA,+zEAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EDbc,OAAO,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,SAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA;;4FAER,oBAAoB,EAAA,UAAA,EAAA,CAAA;kBAPhC,SAAS;AACI,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,gBAAgB,EAGd,UAAA,EAAA,IAAI,EACP,OAAA,EAAA,CAAC,OAAO,CAAC,EAAA,QAAA,EAAA,6/BAAA,EAAA,MAAA,EAAA,CAAA,+zEAAA,CAAA,EAAA,CAAA;8BAOX,QAAQ,EAAA,CAAA;sBADd,KAAK;gBAKC,SAAS,EAAA,CAAA;sBADf,KAAK;uBAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAA;gBAKlB,KAAK,EAAA,CAAA;sBADX,KAAK;uBAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAA;gBAKlB,IAAI,EAAA,CAAA;sBADV,KAAK;gBAKC,OAAO,EAAA,CAAA;sBADb,KAAK;uBAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAA;gBAKlB,QAAQ,EAAA,CAAA;sBADd,KAAK;gBAKC,SAAS,EAAA,CAAA;sBADf,KAAK;gBAKC,aAAa,EAAA,CAAA;sBADnB,MAAM;gBAMA,UAAU,EAAA,CAAA;sBADhB,YAAY;uBAAC,gBAAgB,EAAE,CAAC,QAAQ,CAAC,CAAA;;;ME1DjC,iBAAiB,CAAA;wGAAjB,iBAAiB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,QAAA,EAAA,CAAA,CAAA;yGAAjB,iBAAiB,EAAA,OAAA,EAAA,CAHhB,oBAAoB,CAAA,EAAA,OAAA,EAAA,CACpB,oBAAoB,CAAA,EAAA,CAAA,CAAA;yGAErB,iBAAiB,EAAA,CAAA,CAAA;;4FAAjB,iBAAiB,EAAA,UAAA,EAAA,CAAA;kBAJ7B,QAAQ;AAAC,YAAA,IAAA,EAAA,CAAA;oBACN,OAAO,EAAE,CAAC,oBAAoB,CAAC;oBAC/B,OAAO,EAAE,CAAC,oBAAoB,CAAC;AAClC,iBAAA,CAAA;;;ACPD;;AAEG;;;;"}