import { Component, EventEmitter, Input, Output, ViewChild } from '@angular/core'; import { MathEditorModule, MathInputComponent } from 'common/math-editor.module'; import { AreaTextInputComponent } from 'common/components/input-elements/text-area-math/area-text-input.component'; import { BehaviorSubject } from 'rxjs'; @Component({ selector: 'aspect-text-area-math-segment', template: ` @if (type === 'math') { <aspect-math-input #inputComponent [fullWidth]="false" [value]="value" (focusIn)="onFocusIn($event)" (focusOut)="focusOut.emit($event)" (valueChange)="valueChanged.emit({ index: index, value: $event})"> </aspect-math-input> } @else { <aspect-area-input #inputComponent [value]="value" (focusIn)="onFocusIn($event)" (focusOut)="onFocusOut($event)" (onKeyDown)="onKeyDown.emit($event)" (valueChanged)="valueChanged.emit({ index: index, value: $event})" (remove)="onRemove($event)"> </aspect-area-input> } `, standalone: true, imports: [ AreaTextInputComponent, MathEditorModule ], styles: [] }) export class AreaSegmentComponent { @Input() type!: 'text' | 'math'; @Input() value!: string; @Input() index!: number; @Input() selectedFocus!: BehaviorSubject<number>; @Output() valueChanged: EventEmitter<{ index: number; value: string }> = new EventEmitter(); @Output() remove: EventEmitter<number> = new EventEmitter(); @Output() focusIn: EventEmitter<HTMLElement> = new EventEmitter(); @Output() focusOut: EventEmitter<HTMLElement> = new EventEmitter(); @Output() onKeyDown = new EventEmitter<{ keyboardEvent: KeyboardEvent; inputElement: HTMLElement; }>(); @ViewChild('inputComponent') inputComponent!: AreaTextInputComponent | MathInputComponent; setFocus(offset?: number) { this.inputComponent.setFocus(offset); } onFocusIn(input: HTMLElement) { this.selectedFocus.next(this.index); this.focusIn.emit(input); } onFocusOut(input: HTMLElement) { this.focusOut.emit(input); } onRemove(key: 'Delete' | 'Backspace') { const target = key === 'Backspace' ? this.index - 1 : this.index + 1; this.remove.emit(target); } }