{"version":3,"file":"usitsdasdesign-dds-ng-segmented-control.mjs","sources":["../../src/app/dds/segmented-control/typings.ts","../../src/app/dds/segmented-control/segmented-control/segmented-control.component.ts","../../src/app/dds/segmented-control/segmented-control/segmented-control.component.html","../../src/app/dds/segmented-control/segmented-control-item/constants.ts","../../src/app/dds/segmented-control/segmented-control-item/segmented-control-item.component.ts","../../src/app/dds/segmented-control/segmented-control-item/segmented-control-item.component.html","../../src/app/dds/segmented-control/segmented-control.module.ts","../../src/app/dds/segmented-control/usitsdasdesign-dds-ng-segmented-control.ts"],"sourcesContent":["import { Size, Themes, WidthState } from '@usitsdasdesign/dds-ng/shared';\n\nexport interface SegmentedOptions {\n  size?: Size | string;\n  width?: WidthState | string;\n  theme?: Themes | string;\n  type?: SegmentedType | string;\n  customClass?: string;\n  disabled?: boolean;\n  isInverse?: boolean;\n}\n\nexport interface SegmentedItemOptions {\n  value: string;\n  heading?: string;\n  ariaLabel?: string;\n  icon?: string;\n  maxWidth?: string;\n  customClass?: string;\n}\n\nexport enum SegmentedType {\n  icon = 'icon',\n  text = 'text',\n}\n","import { CommonModule } from '@angular/common';\nimport {\n  AfterContentInit,\n  ChangeDetectionStrategy,\n  ChangeDetectorRef,\n  Component,\n  ContentChildren,\n  ElementRef,\n  EventEmitter,\n  forwardRef,\n  Input,\n  OnChanges,\n  OnInit,\n  Output,\n  QueryList,\n  SimpleChanges,\n  ViewChild,\n} from '@angular/core';\nimport { DestroyCtor, DestroyMixin, FormAccessorCtor, FormAccessorMixin, valueAccessor } from '@usitsdasdesign/dds-ng/core/common-behaviors';\nimport { ListManager } from '@usitsdasdesign/dds-ng/core/list-manager';\nimport { KeyCodes, Size, Themes, WidthState } from '@usitsdasdesign/dds-ng/shared';\nimport { DdsConfigService } from '@usitsdasdesign/dds-ng/shared/dds-config';\nimport { takeUntil } from 'rxjs';\nimport { SegmentedControlItemComponent } from '../segmented-control-item/segmented-control-item.component';\nimport { SegmentedType } from '../typings';\n\nconst SegmentedControlBase: DestroyCtor & FormAccessorCtor = DestroyMixin(FormAccessorMixin());\n\n@Component({\n  selector: 'dds-segmented-control',\n  templateUrl: './segmented-control.component.html',\n  providers: [valueAccessor(SegmentedControlComponent as Component)],\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  standalone: true,\n  imports: [CommonModule],\n})\nexport class SegmentedControlComponent extends SegmentedControlBase implements OnInit, OnChanges, AfterContentInit {\n  // The current value of the segmented control.\n  @Input() value: string | undefined;\n\n  // The size of the segmented control. Defaults to the size from the configuration.\n  @Input() size: Size | string | undefined = this.ddsConfig.getConfig().size;\n\n  // The width state of the segmented control.\n  @Input() width: WidthState | string | undefined;\n\n  // The theme of the segmented control. Defaults to the theme from the configuration.\n  @Input() theme: Themes | string | undefined = this.ddsConfig.getConfig().theme;\n\n  // The type of the segmented control.\n  @Input() type: SegmentedType | string | undefined;\n\n  // Custom CSS class for the segmented control.\n  @Input() customClass: string | undefined;\n\n  // Whether the segmented control is disabled.\n  @Input() disabled: boolean | undefined;\n\n  // Whether the segmented control is in inverse mode.\n  @Input() isInverse: boolean | undefined;\n\n  // Event emitted when the segment is changed.\n  @Output() segmentChanged = new EventEmitter<string>();\n\n  // Query list of SegmentedControlItemComponent children.\n  @ContentChildren(forwardRef(() => SegmentedControlItemComponent), { descendants: true }) items: QueryList<SegmentedControlItemComponent>;\n\n  // Reference to the segmented control element.\n  @ViewChild('segmentedItems') segmentedControl: ElementRef<HTMLElement>;\n\n  // Indicates if the size is medium.\n  public isMdSize: boolean;\n\n  // Indicates if the size is large.\n  public isLgSize: boolean;\n\n  // Indicates if the width is full.\n  public isFullWidth: boolean;\n\n  // Indicates if the type is icon.\n  public isIconType: boolean;\n\n  // Indicates if the theme is blue.\n  public isBlueTheme: boolean;\n\n  // Indicates if the theme is dark.\n  public isDarkTheme: boolean;\n\n  // List of segments in the segmented control.\n  private segments: SegmentedControlItemComponent[] = [];\n\n  // Key manager for handling keyboard navigation.\n  private keyManager: ListManager<SegmentedControlItemComponent>;\n\n  // Gets the tab index based on the disabled state.\n  get tabIndex(): number {\n    return this.disabled ? -1 : 0;\n  }\n\n  constructor(public cdr: ChangeDetectorRef, private ddsConfig: DdsConfigService) {\n    super();\n  }\n\n  // Lifecycle hook that is called when any data-bound property of a directive changes.\n  public ngOnChanges(changes: SimpleChanges): void {\n    if (changes.value && !changes.value.firstChange) {\n      this.activeSegment(changes.value.currentValue);\n    }\n\n    if (changes.type) {\n      this.isIconType = this.type === SegmentedType.icon;\n      this.segments.forEach((item: SegmentedControlItemComponent) => (item.type = changes.type.currentValue));\n    }\n\n    this.checkSize(changes.size);\n    this.checkTheme(changes.theme);\n\n    if (changes.width && changes.width.currentValue) {\n      this.isFullWidth = changes.width.currentValue === WidthState.full;\n    }\n\n    if (changes.disabled) {\n      this.segments.forEach((item: SegmentedControlItemComponent) => {\n        item.disabled = changes.disabled.currentValue;\n        item.cdr.detectChanges();\n      });\n    }\n  }\n\n  public ngOnInit(): void {\n    this.checkSize(this.size);\n    this.checkTheme(this.theme);\n  }\n\n  public ngAfterContentInit(): void {\n    this.initKeyManager();\n    this.setActiveSegment();\n    this.segments.forEach((item: SegmentedControlItemComponent) => (item.type = this.type));\n  }\n\n  public writeValue(value: string): void {\n    this.value = value;\n\n    if (this.segmentedControl) {\n      this.setActiveSegment();\n    }\n  }\n\n  // Adds a segment to the segmented control.\n  public addSegment(segment: SegmentedControlItemComponent): void {\n    this.segments.push(segment);\n  }\n\n  // Removes a segment from the segmented control.\n  public removeSegment(segment: SegmentedControlItemComponent): void {\n    const index = this.segments.indexOf(segment);\n\n    if (index !== -1) {\n      this.segments.splice(index, 1);\n    }\n  }\n\n  // Changes the current segment to the specified value.\n  public changeSegment(value: string): void {\n    this.value = value;\n    this.setActiveSegment();\n    this.onModelTouched();\n    this.onModelChange(value);\n    this.segmentChanged.emit(value);\n  }\n\n  // Activates the segment with the specified value.\n  public activeSegment(segmentValue: string): void {\n    this.segments.forEach((item: SegmentedControlItemComponent) => {\n      item.active = segmentValue === item.value;\n    });\n  }\n\n  // Resets the segmented control to its initial state.\n  public reset(): void {\n    this.changeSegment(null);\n    this.cdr.markForCheck();\n  }\n\n  // Handles focus events on the segmented control.\n  public handleFocus(): void {\n    Array.from(this.items).forEach((item, i) => {\n      if (item.active) {\n        this.keyManager.setActiveItem(i);\n        item.focus();\n      }\n    });\n  }\n\n  // Handles the keydown event for the segmented control component.\n  public handleKeydown(event: KeyboardEvent) {\n    this.keyManager.onKeydown(event, false);\n\n    if (event.keyCode === KeyCodes.TAB) {\n      this.unFocus();\n    }\n\n    if (event.keyCode === KeyCodes.TAB && event.shiftKey) {\n      this.segmentedControl.nativeElement.tabIndex = -1;\n      this.unFocus();\n      setTimeout(() => { this.segmentedControl.nativeElement.tabIndex = 0; });\n    }\n\n    if (event.keyCode === KeyCodes.ENTER || event.keyCode === KeyCodes.SPACE) {\n      this.keyManager.activeItem.selectSegment();\n      this.keyManager.activeItem.setActiveClass();\n    }\n  }\n\n  // Initializes the key manager for handling keyboard navigation.\n  private initKeyManager(): void {\n    this.keyManager = new ListManager(this.items).withHomeAndEnd();\n\n    // Subscribe to changes in the key manager's active item\n    this.keyManager.change.pipe(takeUntil(this.destroy)).subscribe(() => {\n      // Unfocus the previous active item\n      if (this.keyManager.previousActiveItem) this.keyManager.previousActiveItem.unFocus();\n      // Focus the current active item\n      if (this.keyManager.activeItem) {\n        this.keyManager.activeItem.focus();\n      }\n    });\n  }\n\n  public unFocus(): void {\n    if (this.keyManager?.activeItem) this.keyManager.activeItem.unFocus();\n    this.segmentedControl.nativeElement.blur();\n  }\n\n  // Checks the size of the segmented control and updates the corresponding size flags.\n  private checkSize(size: unknown): void {\n    if (size) {\n      this.isMdSize = this.size === Size.md;\n      this.isLgSize = this.size === Size.lg;\n      this.cdr.markForCheck();\n    }\n  }\n\n  // Checks the theme of the segmented control and updates the corresponding theme flags.\n  private checkTheme(theme: unknown): void {\n    if (theme) {\n      this.isBlueTheme = this.theme === Themes.blue;\n      this.isDarkTheme = this.theme === Themes.dark;\n      this.cdr.markForCheck();\n    }\n  }\n\n  // Sets the active segment based on the current value.\n  private setActiveSegment(): void {\n    if (this.value) {\n      this.activeSegment(this.value);\n    } else {\n      this.activeSegment(this.segments[0].value);\n    }\n  }\n}\n","<div [ngClass]=\"{\n      'dds-segmented_md': isMdSize || isIconType,\n      'dds-segmented_lg': isLgSize,\n      'dds-segmented_full-width': isFullWidth,\n      'dds-segmented_blue': isBlueTheme,\n      'dds-segmented_dark': isDarkTheme,\n      'dds-segmented_disabled': disabled,\n      'dds-segmented_inverse': isInverse\n    }\"\n     [attr.aria-disabled]=\"disabled\"\n     role=\"radiogroup\"\n     class=\"dds-segmented {{customClass}}\"\n     data-qa=\"segmented-control\"\n     [attr.tabindex]=\"tabIndex\"\n     (focus)=\"handleFocus()\"\n     (keydown)=\"handleKeydown($event)\"\n     #segmentedItems>\n  <ng-content></ng-content>\n</div>\n","export const DIVIDER_CLASS = 'dds-segmented__wrap_hidden-divider';\nexport const WRAP_CLASS = 'dds-segmented__wrap';\nexport const WRAP_ACTIVE_CLASS = 'dds-segmented__wrap_active';\nexport const WRAP_MAX_WIDTH_CLASS = 'dds-segmented__wrap_max-width';\nexport const TYPE_TEXT_ERROR = `You need to pass a Segmented Control title option if you're using Segmented Control type text`;\nexport const TYPE_ICON_ERROR = `You need to pass a Segmented Control icon option if you're using Segmented Control type icon`;\n","import { CommonModule } from '@angular/common';\nimport {\n  ChangeDetectionStrategy,\n  ChangeDetectorRef,\n  Component,\n  ElementRef,\n  forwardRef,\n  HostBinding,\n  Inject,\n  Input,\n  OnChanges,\n  OnDestroy,\n  OnInit,\n  Renderer2,\n  ViewChild,\n} from '@angular/core';\nimport { FocusHandlerModule } from '@usitsdasdesign/dds-ng/core/focus-handler';\nimport { AdditionalClass } from '@usitsdasdesign/dds-ng/shared';\nimport { TooltipDirective, TooltipModule } from '@usitsdasdesign/dds-ng/tooltip';\nimport { SegmentedControlComponent } from '../segmented-control/segmented-control.component';\nimport { SegmentedType } from '../typings';\nimport { DIVIDER_CLASS, TYPE_ICON_ERROR, TYPE_TEXT_ERROR, WRAP_ACTIVE_CLASS, WRAP_CLASS, WRAP_MAX_WIDTH_CLASS } from './constants';\n\n@Component({\n  selector: 'dds-segmented-control-item',\n  templateUrl: './segmented-control-item.component.html',\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  host: { class: WRAP_CLASS },\n  standalone: true,\n  imports: [CommonModule, FocusHandlerModule, TooltipModule],\n})\nexport class SegmentedControlItemComponent implements OnChanges, OnInit, OnDestroy {\n  // Host binding for max-width style\n  @HostBinding('style.max-width') @Input() maxWidth: string | undefined;\n\n  // Host binding for max-width class\n  @HostBinding(`class.${WRAP_MAX_WIDTH_CLASS}`) get maxWidthClass() {\n    return this.maxWidth && this.maxWidth.length;\n  }\n\n  // ViewChild for segment element\n  @ViewChild('segment') segment: ElementRef<HTMLButtonElement>;\n\n  // ViewChild for tooltip directive\n  @ViewChild(TooltipDirective) tooltip: TooltipDirective;\n\n  // Input properties for the component\n  @Input() value: string | undefined;\n  @Input() heading: string | undefined;\n  @Input() ariaLabel: string | undefined;\n  @Input() icon: string | undefined;\n  @Input() customClass: string | undefined;\n\n  // Public property for disabled state\n  public disabled: boolean;\n\n  // Private properties for active state, type, and next sibling element\n  private _active: boolean;\n  private _type: string | SegmentedType;\n  private nextSibling: Element;\n\n  // Check if the segmented control is in inverse mode\n  get isInverse(): boolean {\n    return this.segmentedControl?.isInverse;\n  }\n\n  // Getter and setter for active state\n  get active(): boolean {\n    return this._active;\n  }\n  set active(value: boolean) {\n    this._active = value;\n\n    if (value) {\n      this.setActiveClass();\n    } else {\n      this.removeActiveClass();\n    }\n\n    this.cdr.markForCheck();\n  }\n\n  // Getter and setter for type\n  set type(value: string | SegmentedType) {\n    this._type = value;\n    this.cdr.detectChanges();\n  }\n  get type(): string | SegmentedType {\n    return this._type;\n  }\n\n  // Check if the type is icon\n  get isIconType(): boolean {\n    return this.type === SegmentedType.icon;\n  }\n\n  constructor(\n    public cdr: ChangeDetectorRef,\n    private elementRef: ElementRef,\n    private el: ElementRef,\n    private renderer: Renderer2,\n    @Inject(forwardRef(() => SegmentedControlComponent)) public segmentedControl: SegmentedControlComponent\n  ) { }\n\n  public ngOnInit(): void {\n    if (this.segmentedControl.type === SegmentedType.icon && !this.icon) {\n      throw new Error(TYPE_ICON_ERROR);\n    } else if (this.segmentedControl.type !== SegmentedType.icon && !this.heading) {\n      throw new Error(TYPE_TEXT_ERROR);\n    }\n\n    this.segmentedControl.addSegment(this);\n    this.nextSibling = this.elementRef.nativeElement.nextElementSibling;\n  }\n\n  public ngOnChanges(): void {\n    if (this.active) {\n      this.segmentedControl.activeSegment(this.value);\n    }\n  }\n\n  public ngOnDestroy(): void {\n    this.segmentedControl.removeSegment(this);\n  }\n\n  // Toggle the previous divider class\n  public togglePreviousDivider(): void {\n    if (this.nextSibling) {\n      this.nextSibling.classList.toggle(DIVIDER_CLASS);\n    }\n\n    this.elementRef.nativeElement.classList.toggle(DIVIDER_CLASS);\n  }\n\n  // Select the current segment\n  public selectSegment(): void {\n    this.segmentedControl.changeSegment(this.value);\n  }\n\n  // Add active class to the element\n  public setActiveClass(): void {\n    this.renderer.addClass(this.el.nativeElement, WRAP_ACTIVE_CLASS);\n  }\n\n  // Remove active class from the element\n  public removeActiveClass(): void {\n    this.renderer.removeClass(this.el.nativeElement, WRAP_ACTIVE_CLASS);\n  }\n\n  // Focus on the segment and show tooltip\n  public focus(): void {\n    this.renderer.addClass(this.segment.nativeElement, AdditionalClass.keyboardFocus);\n    this.segment.nativeElement.focus();\n    this.tooltip.show();\n  }\n\n  // Unfocus the segment and hide tooltip\n  public unFocus(): void {\n    this.renderer.removeClass(this.segment.nativeElement, AdditionalClass.keyboardFocus);\n    this.segment.nativeElement.blur();\n    this.tooltip.hide();\n  }\n}\n","<button [ngClass]=\"{\n          'dds-segmented__item_active': active\n        }\"\n        [disabled]=\"disabled\"\n        [attr.aria-label]=\"ariaLabel || heading\"\n        [attr.aria-disabled]=\"disabled\"\n        [attr.aria-checked]=\"active\"\n        [ddsTooltip]=\"ariaLabel\"\n        [tooltipIsInverse]=\"isInverse\"\n        [tooltipIsDisabled]=\"heading?.length && !isIconType\"\n        data-qa=\"segmented-control-item\"\n        role=\"radio\"\n        type=\"button\"\n        tabindex=\"-1\"\n        class=\"dds-segmented__item {{customClass}}\"\n        (click)=\"selectSegment()\"\n        (blur)=\"unFocus()\"\n        (mouseenter)=\"togglePreviousDivider()\"\n        (mouseleave)=\"togglePreviousDivider()\"\n        #segment>\n\n  @if (icon && isIconType) {\n  <span class=\"dds-segmented__icon dds-icon {{ icon }}\"></span>\n  } @else {\n  <span class=\"dds-segmented__text\">{{ heading }}</span>\n  }\n\n\n</button>\n","import { NgModule } from '@angular/core';\nimport { SegmentedControlItemComponent } from './segmented-control-item/segmented-control-item.component';\nimport { SegmentedControlComponent } from './segmented-control/segmented-control.component';\n\n@NgModule({\n  declarations: [],\n  imports: [SegmentedControlComponent, SegmentedControlItemComponent],\n  exports: [SegmentedControlComponent, SegmentedControlItemComponent],\n})\nexport class SegmentedControlModule { }\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1","i2"],"mappings":"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"}