{"version":3,"file":"edsis-component-toggle-group.mjs","sources":["../../../library/component/toggle-group/toggle-group.component.ts","../../../library/component/toggle-group/edsis-component-toggle-group.ts"],"sourcesContent":["import {\n  booleanAttribute,\n  Component,\n  Directive,\n  ElementRef,\n  computed,\n  forwardRef,\n  inject,\n  input,\n  model,\n  numberAttribute,\n  signal,\n} from '@angular/core';\nimport { type ToggleSize, toggleVariants, type ToggleVariant } from '@edsis/component/toggle';\nimport { cn } from '@edsis/component/class';\n\nexport type ToggleGroupType = 'single' | 'multiple';\nexport type ToggleGroupOrientation = 'horizontal' | 'vertical';\nexport type ToggleGroupVariant = ToggleVariant;\nexport type ToggleGroupSize = ToggleSize;\n\ninterface ToggleGroupItemRegistration {\n  readonly element: HTMLElement;\n  readonly value: () => string;\n  readonly disabled: () => boolean;\n}\n\nconst spacingClasses = {\n  0: '',\n  1: 'gap-1',\n  2: 'gap-2',\n  3: 'gap-3',\n  4: 'gap-4',\n} as const;\n\nconst connectedItemClasses: Record<ToggleGroupOrientation, string> = {\n  horizontal: [\n    '[&>[data-slot=toggle-group-item]:not(:first-child)]:rounded-s-none',\n    '[&>[data-slot=toggle-group-item]:not(:first-child)]:[border-inline-start-width:0]',\n    '[&>[data-slot=toggle-group-item]:not(:last-child)]:rounded-e-none',\n  ].join(' '),\n  vertical: [\n    '[&>[data-slot=toggle-group-item]:not(:first-child)]:rounded-t-none',\n    '[&>[data-slot=toggle-group-item]:not(:first-child)]:border-t-0',\n    '[&>[data-slot=toggle-group-item]:not(:last-child)]:rounded-b-none',\n  ].join(' '),\n};\n\n@Directive()\nexport abstract class ToggleGroupContextBase {\n  abstract groupType(): ToggleGroupType;\n  abstract groupOrientation(): ToggleGroupOrientation;\n  abstract groupVariant(): ToggleGroupVariant;\n  abstract groupSize(): ToggleGroupSize;\n  abstract groupDisabled(): boolean;\n  abstract isRtl(): boolean;\n\n  abstract register(element: HTMLElement, value: () => string, disabled: () => boolean): void;\n  abstract unregister(element: HTMLElement): void;\n  abstract isSelected(value: string): boolean;\n  abstract toggle(value: string): void;\n  abstract tabindexFor(value: string, disabled: boolean): number;\n  abstract markFocused(value: string): void;\n  abstract focusNext(from: HTMLElement, offset: number): void;\n  abstract focusFirst(): void;\n  abstract focusLast(): void;\n}\n\n@Component({\n  selector: 'ToggleGroup',\n  providers: [\n    { provide: ToggleGroupContextBase, useExisting: forwardRef(() => ToggleGroupComponent) },\n  ],\n  host: {\n    '[class]': 'classes()',\n    '[attr.role]': '\"group\"',\n    '[attr.dir]': 'dir() ?? null',\n    '[attr.aria-orientation]': 'orientation()',\n    '[attr.data-disabled]': 'disabled() ? \"\" : null',\n    '[attr.data-orientation]': 'orientation()',\n    '[attr.data-slot]': '\"toggle-group\"',\n    '[attr.data-type]': 'type()',\n  },\n  template: `<ng-content />`,\n})\nexport class ToggleGroupComponent extends ToggleGroupContextBase {\n  readonly type = input.required<ToggleGroupType>();\n  readonly value = model<string | null>(null);\n  readonly values = model<string[]>([]);\n  readonly orientation = input<ToggleGroupOrientation>('horizontal');\n  readonly variant = input<ToggleGroupVariant>('default');\n  readonly size = input<ToggleGroupSize>('default');\n  readonly spacing = input(0, { transform: numberAttribute });\n  readonly loop = input<boolean>(true);\n  readonly disabled = input(false, { transform: booleanAttribute });\n  readonly dir = input<'ltr' | 'rtl' | null>(null);\n  readonly class = input<string>('');\n\n  private readonly host = inject<ElementRef<HTMLElement>>(ElementRef);\n  private readonly focusedValue = signal<string | null>(null);\n  private readonly registrationVersion = signal(0);\n  private readonly items = new Map<HTMLElement, ToggleGroupItemRegistration>();\n\n  private readonly resolvedSpacing = computed(() => normalizeSpacing(this.spacing()));\n  private readonly tabStopValue = computed(() => {\n    this.registrationVersion();\n\n    const enabledItems = this.enabledItems();\n    if (enabledItems.length === 0) return null;\n\n    const current = this.focusedValue();\n    if (current && enabledItems.some((item) => item.value() === current)) {\n      return current;\n    }\n\n    const selected = enabledItems.find((item) => this.isSelected(item.value()));\n    return selected?.value() ?? enabledItems[0].value();\n  });\n\n  protected readonly classes = computed(() =>\n    cn(\n      'inline-flex w-fit',\n      this.orientation() === 'vertical' ? 'flex-col items-stretch' : 'items-center',\n      spacingClasses[this.resolvedSpacing()],\n      this.resolvedSpacing() === 0 &&\n        this.variant() !== 'segmented' &&\n        connectedItemClasses[this.orientation()],\n      this.variant() === 'segmented' && 'rounded-base bg-muted p-0.5',\n      this.class(),\n    ),\n  );\n\n  override groupType(): ToggleGroupType {\n    return this.type();\n  }\n\n  override groupOrientation(): ToggleGroupOrientation {\n    return this.orientation();\n  }\n\n  override groupVariant(): ToggleGroupVariant {\n    return this.variant();\n  }\n\n  override groupSize(): ToggleGroupSize {\n    return this.size();\n  }\n\n  override groupDisabled(): boolean {\n    return this.disabled();\n  }\n\n  override isRtl(): boolean {\n    const explicitDir = this.dir();\n    if (explicitDir) return explicitDir === 'rtl';\n\n    const host = this.host.nativeElement;\n    const nearestDir = host.closest('[dir]')?.getAttribute('dir');\n    if (nearestDir === 'rtl' || nearestDir === 'ltr') {\n      return nearestDir === 'rtl';\n    }\n\n    return getComputedStyle(host).direction === 'rtl';\n  }\n\n  override register(element: HTMLElement, value: () => string, disabled: () => boolean): void {\n    this.items.set(element, { element, value, disabled });\n    this.bumpRegistrationVersion();\n  }\n\n  override unregister(element: HTMLElement): void {\n    this.items.delete(element);\n    this.bumpRegistrationVersion();\n  }\n\n  override isSelected(value: string): boolean {\n    return this.type() === 'multiple' ? this.values().includes(value) : this.value() === value;\n  }\n\n  override toggle(value: string): void {\n    const item = this.itemForValue(value);\n    if (!item || this.disabled() || item.disabled()) return;\n\n    this.focusedValue.set(value);\n\n    if (this.type() === 'multiple') {\n      this.values.update((current) =>\n        current.includes(value)\n          ? current.filter((itemValue) => itemValue !== value)\n          : [...current, value],\n      );\n      return;\n    }\n\n    this.value.set(this.value() === value ? null : value);\n  }\n\n  override tabindexFor(value: string, disabled: boolean): number {\n    if (this.disabled() || disabled) return -1;\n    return this.tabStopValue() === value ? 0 : -1;\n  }\n\n  override markFocused(value: string): void {\n    const item = this.itemForValue(value);\n    if (!item || this.disabled() || item.disabled()) return;\n    this.focusedValue.set(value);\n  }\n\n  override focusNext(from: HTMLElement, offset: number): void {\n    const enabledItems = this.enabledItems();\n    const currentIndex = enabledItems.findIndex((item) => item.element === from);\n    if (currentIndex < 0 || enabledItems.length === 0) return;\n\n    let nextIndex = currentIndex + offset;\n\n    if (this.loop()) {\n      nextIndex = (nextIndex + enabledItems.length) % enabledItems.length;\n    } else if (nextIndex < 0 || nextIndex >= enabledItems.length) {\n      return;\n    }\n\n    const next = enabledItems[nextIndex];\n    this.focusedValue.set(next.value());\n    next.element.focus();\n  }\n\n  override focusFirst(): void {\n    const first = this.enabledItems()[0];\n    if (!first) return;\n    this.focusedValue.set(first.value());\n    first.element.focus();\n  }\n\n  override focusLast(): void {\n    const enabledItems = this.enabledItems();\n    const last = enabledItems[enabledItems.length - 1];\n    if (!last) return;\n    this.focusedValue.set(last.value());\n    last.element.focus();\n  }\n\n  private enabledItems(): ToggleGroupItemRegistration[] {\n    return [...this.items.values()].filter((item) => !item.disabled());\n  }\n\n  private itemForValue(value: string): ToggleGroupItemRegistration | undefined {\n    return [...this.items.values()].find((item) => item.value() === value);\n  }\n\n  private bumpRegistrationVersion(): void {\n    this.registrationVersion.update((version) => version + 1);\n  }\n}\n\n@Directive({\n  selector: 'button[ToggleGroupItem]',\n  host: {\n    '[class]': 'classes()',\n    type: 'button',\n    '[attr.aria-disabled]': 'isDisabled() ? \"true\" : null',\n    '[attr.aria-pressed]': 'selected()',\n    '[attr.data-disabled]': 'isDisabled() ? \"\" : null',\n    '[attr.data-orientation]': 'ctx.groupOrientation()',\n    '[attr.data-size]': 'ctx.groupSize()',\n    '[attr.data-slot]': '\"toggle-group-item\"',\n    '[attr.data-state]': 'selected() ? \"on\" : \"off\"',\n    '[attr.data-variant]': 'ctx.groupVariant()',\n    '[attr.tabindex]': 'ctx.tabindexFor(value(), isDisabled())',\n    '[disabled]': 'isDisabled() || null',\n    '(click)': 'onClick()',\n    '(focus)': 'onFocus()',\n    '(keydown.arrowDown)': 'onArrow($any($event), 1)',\n    '(keydown.arrowLeft)': 'onHorizontalArrow($any($event), -1)',\n    '(keydown.arrowRight)': 'onHorizontalArrow($any($event), 1)',\n    '(keydown.arrowUp)': 'onArrow($any($event), -1)',\n    '(keydown.end)': 'onEnd($any($event))',\n    '(keydown.home)': 'onHome($any($event))',\n  },\n})\nexport class ToggleGroupItemDirective {\n  protected readonly ctx = inject(ToggleGroupContextBase);\n  private readonly element = inject<ElementRef<HTMLButtonElement>>(ElementRef);\n\n  readonly value = input.required<string>();\n  readonly disabled = input(false, { transform: booleanAttribute });\n  readonly class = input<string>('');\n\n  protected readonly selected = computed(() => this.ctx.isSelected(this.value()));\n  protected readonly classes = computed(() =>\n    cn(\n      toggleVariants({ variant: this.ctx.groupVariant(), size: this.ctx.groupSize() }),\n      this.class(),\n    ),\n  );\n\n  ngOnInit(): void {\n    this.ctx.register(this.element.nativeElement, this.value, this.disabled);\n  }\n\n  ngOnDestroy(): void {\n    this.ctx.unregister(this.element.nativeElement);\n  }\n\n  protected isDisabled(): boolean {\n    return this.ctx.groupDisabled() || this.disabled();\n  }\n\n  protected onClick(): void {\n    if (this.isDisabled()) return;\n    this.ctx.toggle(this.value());\n  }\n\n  protected onFocus(): void {\n    if (this.isDisabled()) return;\n    this.ctx.markFocused(this.value());\n  }\n\n  protected onArrow(event: KeyboardEvent, offset: number): void {\n    event.preventDefault();\n    this.ctx.focusNext(this.element.nativeElement, offset);\n  }\n\n  protected onHorizontalArrow(event: KeyboardEvent, offset: number): void {\n    event.preventDefault();\n    this.ctx.focusNext(this.element.nativeElement, this.ctx.isRtl() ? offset * -1 : offset);\n  }\n\n  protected onHome(event: KeyboardEvent): void {\n    event.preventDefault();\n    this.ctx.focusFirst();\n  }\n\n  protected onEnd(event: KeyboardEvent): void {\n    event.preventDefault();\n    this.ctx.focusLast();\n  }\n}\n\nfunction normalizeSpacing(value: number): keyof typeof spacingClasses {\n  if (value in spacingClasses) {\n    return value as keyof typeof spacingClasses;\n  }\n\n  return 2;\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}