{"version":3,"file":"seniorsistemas-angular-components-interactive-content.mjs","sources":["../../projects/angular-components/interactive-content/src/lib/interactive-content/interactive-content.directive.ts","../../projects/angular-components/interactive-content/src/seniorsistemas-angular-components-interactive-content.ts"],"sourcesContent":["import { Directive, ElementRef, OnInit, OnDestroy, input, output, inject } from '@angular/core';\n\n/**\n * @description Diretiva de acessibilidade que torna qualquer elemento HTML interativo,\n * adicionando suporte a eventos de foco e navegação por teclado (Enter e Espaço)\n * além do clique padrão. Gerencia automaticamente o atributo `tabindex`.\n *\n * @example\n * ```html\n * <div\n *   (sInteractiveContent)=\"onActivate($event)\"\n *   [focusable]=\"true\">\n *   Conteúdo interativo\n * </div>\n * ```\n *\n * @category Inputs\n */\n@Directive({\n    selector: '[sInteractiveContent]',\n    standalone: true,\n})\nexport class InteractiveContentDirective implements OnInit, OnDestroy {\n    private readonly elementRef = inject<ElementRef<HTMLElement>>(ElementRef);\n\n    /** @description Emitido quando o usuário clica ou pressiona Enter/Espaço no elemento. */\n    public activated = output<PointerEvent | KeyboardEvent>({ alias: 'sInteractiveContent' });\n    /** @description Habilita o foco via teclado (tabindex). @default true */\n    public focusable = input(true);\n    /** @description Desabilita os eventos de interação do elemento. @default false */\n    public disabled = input(false);\n    /** @description Quando `true`, chama `event.stopPropagation()` ao ativar. @default false */\n    public stopPropagation = input(false);\n\n    private readonly EVENT_LISTENER = (event: Event) => {\n        if (this.disabled()) {\n            return;\n        }\n\n        if (event instanceof KeyboardEvent) {\n            const key = event.key;\n            const validKeys = ['Enter', ' '];\n            if (!validKeys.includes(key)) {\n                return;\n            }\n            event.preventDefault();\n\n            if (this.stopPropagation()) {\n                event.stopPropagation();\n            }\n        }\n        this.activated.emit(event as PointerEvent | KeyboardEvent);\n    };\n\n    public ngOnInit(): void {\n        this.setTabIndex();\n        this.checkAccessbilityEvents();\n    }\n\n    private setTabIndex() {\n        if (this.disabled() || !this.focusable()) {\n            this.element.tabIndex = -1;\n            return;\n        }\n\n        if (this.element.tabIndex === undefined || this.element.tabIndex < 0) {\n            this.element.tabIndex = 0;\n        }\n    }\n\n    private checkAccessbilityEvents() {\n        this.element.addEventListener('click', this.EVENT_LISTENER);\n        this.element.addEventListener('keydown', this.EVENT_LISTENER);\n    }\n\n    private get element() {\n        return this.elementRef.nativeElement;\n    }\n\n    ngOnDestroy(): void {\n        this.element.removeEventListener('click', this.EVENT_LISTENER);\n        this.element.removeEventListener('keydown', this.EVENT_LISTENER);\n    }\n}\n\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}