Newer
Older
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})">
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
</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);
}
}