{"version":3,"file":"usitsdasdesign-dds-ng-quick-actions.mjs","sources":["../../src/app/dds/quick-actions/quick-actions/constants.ts","../../src/app/dds/quick-actions/quick-actions/quick-actions.component.ts","../../src/app/dds/quick-actions/quick-actions/quick-actions.component.html","../../src/app/dds/quick-actions/quick-actions.module.ts","../../src/app/dds/quick-actions/usitsdasdesign-dds-ng-quick-actions.ts"],"sourcesContent":["import { ButtonKind, Themes } from '@usitsdasdesign/dds-ng/shared';\n\nexport const DEFAULT_THEME = Themes.green;\nexport const DEFAULT_KIND = ButtonKind.primaryLoud;\nexport const DEFAULT_ARIA_LABEL = 'Quick Actions';\n","import { CommonModule } from '@angular/common';\nimport {\n  AfterContentInit,\n  AfterViewInit,\n  ChangeDetectionStrategy,\n  Component,\n  ContentChildren,\n  Input,\n  OnChanges,\n  QueryList,\n  Renderer2,\n} from '@angular/core';\nimport { ButtonComponent } from '@usitsdasdesign/dds-ng/button';\nimport { DestroyCtor, DestroyMixin } from '@usitsdasdesign/dds-ng/core/common-behaviors';\nimport { ListManager } from '@usitsdasdesign/dds-ng/core/list-manager';\nimport { AdditionalClass, ButtonKind, KeyCodes, Kind, Size, Themes } from '@usitsdasdesign/dds-ng/shared';\nimport { DdsConfigService } from '@usitsdasdesign/dds-ng/shared/dds-config';\nimport { TooltipDirective } from '@usitsdasdesign/dds-ng/tooltip';\nimport { takeUntil } from 'rxjs/operators';\nimport { DEFAULT_ARIA_LABEL, DEFAULT_KIND } from './constants';\n\nconst QuickActionsBase: DestroyCtor = DestroyMixin();\n\n@Component({\n  selector: 'dds-quick-actions',\n  templateUrl: './quick-actions.component.html',\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  standalone: true,\n  imports: [CommonModule],\n})\nexport class QuickActionsComponent extends QuickActionsBase implements OnChanges, AfterContentInit, AfterViewInit {\n  // Theme of the quick actions, can be a predefined theme or a custom string\n  @Input() theme: Themes | string | undefined = this.ddsConfig.getConfig().theme;\n\n  // Kind of button to use, defaults to a predefined kind\n  @Input() kind: Kind | string | undefined = DEFAULT_KIND;\n\n  // ARIA label for accessibility, defaults to a predefined label\n  @Input() ariaLabel: string | undefined = DEFAULT_ARIA_LABEL;\n\n  // Custom CSS class to apply to the quick actions\n  @Input() customClass: string | undefined;\n\n  // Flag to indicate if the theme is inverse\n  @Input() isInverse: boolean | undefined;\n\n  @ContentChildren(ButtonComponent) buttons: QueryList<ButtonComponent>;\n  @ContentChildren(TooltipDirective) tooltips: QueryList<TooltipDirective>;\n\n  public keyManager: ListManager<ButtonComponent>;\n  public activeItemId: string;\n\n  constructor(private renderer: Renderer2, private ddsConfig: DdsConfigService) {\n    super();\n  }\n\n  // Called when any data-bound property of a directive changes\n  public ngOnChanges(): void {\n    this.setButtonsStyles();\n  }\n\n  // Called after the content (ng-content) has been initialized\n  public ngAfterContentInit(): void {\n    this.initListManager();\n  }\n\n  // Called after the component's view has been fully initialized\n  public ngAfterViewInit(): void {\n    this.setButtonsStyles();\n  }\n\n  // Handles keyup events for keyboard navigation\n  public handleKeyup(event: KeyboardEvent) {\n    if (event.keyCode === KeyCodes.TAB) {\n      this.keyManager.setFirstItemActive();\n      this.focus(this.keyManager.activeItem);\n    }\n\n    if (event.keyCode === KeyCodes.ENTER || event.keyCode === KeyCodes.SPACE) {\n      this.keyManager.activeItem.selectedState(false);\n    }\n  }\n\n  // Handles keydown events for keyboard navigation\n  public handleKeydown(event: KeyboardEvent) {\n    this.keyManager.onKeydown(event, false);\n\n    if (event.keyCode === KeyCodes.ENTER || event.keyCode === KeyCodes.SPACE) {\n      this.keyManager.activeItem.click(event);\n      this.keyManager.activeItem.selectedState(true);\n    }\n  }\n\n  // Adds focus styles to the active button and shows the tooltip\n  public focus(item: ButtonComponent): void {\n    this.renderer.addClass(item.btnRef.nativeElement, AdditionalClass.keyboardFocus);\n    if (this.tooltips) {\n      Array.from(this.tooltips).forEach((tooltip, index) => {\n        if (this.keyManager.activeItemIndex === index) {\n          tooltip.show();\n        }\n      });\n    }\n  }\n\n  // Removes focus styles from the previously active button and hides the tooltip\n  public unFocus(item: ButtonComponent): void {\n    if (item) this.renderer.removeClass(item.btnRef.nativeElement, AdditionalClass.keyboardFocus);\n    if (this.tooltips) {\n      Array.from(this.tooltips).forEach((tooltip, index) => {\n        if (this.keyManager.previousActiveItemIndex === index) {\n          tooltip.hide();\n        }\n      });\n    }\n  }\n\n  // Initializes the ListManager for keyboard navigation\n  private initListManager(): void {\n    this.keyManager = new ListManager(this.buttons).withHomeAndEnd();\n\n    this.keyManager.change.pipe(takeUntil(this.destroy)).subscribe(() => {\n      if (this.keyManager.previousActiveItem) this.unFocus(this.keyManager.previousActiveItem);\n      if (this.keyManager.activeItem) {\n        this.focus(this.keyManager.activeItem);\n        this.activeItemId = this.keyManager.activeItem.itemId;\n      }\n    });\n  }\n\n  // Sets styles for the buttons based on the input properties\n  private setButtonsStyles(): void {\n    if (this.buttons) {\n      this.buttons.forEach((button) => {\n        button.size = Size.lg;\n        button.theme = this.theme;\n        button.isInverse = this.isInverse;\n        button.kind = this.getKind();\n        button.btnRef.nativeElement.tabIndex = -1;\n        button.cdr.detectChanges();\n      });\n    }\n  }\n\n  // Determines the kind of button to use\n  private getKind(): string {\n    const kindPrimaryOrSecondary = this.kind === ButtonKind.primary || this.kind === ButtonKind.secondary;\n\n    return kindPrimaryOrSecondary ? ButtonKind.silent : this.kind;\n  }\n}\n","<div [attr.aria-label]=\"ariaLabel\"\n     [attr.aria-activedescendant]=\"activeItemId\"\n     class=\"dds-quick-actions {{customClass}}\"\n     [ngClass]=\"{'dds-quick-actions_inverse': isInverse }\"\n     tabindex=\"0\"\n     role=\"menubar\"\n     (keyup)=\"handleKeyup($event)\"\n     (keydown)=\"handleKeydown($event)\"\n     (blur)=\"unFocus(keyManager.activeItem)\">\n  <ng-content select=\"dds-button\"></ng-content>\n</div>","import { NgModule } from '@angular/core';\nimport { QuickActionsComponent } from './quick-actions/quick-actions.component';\n\n@NgModule({\n  declarations: [],\n  imports: [QuickActionsComponent],\n  exports: [QuickActionsComponent],\n})\nexport class QuickActionsModule { }\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}