Skip to content

Commit 7105591

Browse files
mpreyskurantovRuslan Farkhutdinov
andauthored
Chat: Add STT / SpeechToText Integration (d.ts) (#32517)
Co-authored-by: Ruslan Farkhutdinov <ruslan.farkhutdinov@devexpress.com>
1 parent c0ccee9 commit 7105591

15 files changed

Lines changed: 929 additions & 101 deletions

File tree

packages/devextreme-angular/src/ui/chat/index.ts

Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@ import { DataSourceOptions } from 'devextreme/data/data_source';
2929
import { Store } from 'devextreme/data/store';
3030
import { Format } from 'devextreme/common/core/localization';
3131
import { dxFileUploaderOptions } from 'devextreme/ui/file_uploader';
32+
import { dxSpeechToTextOptions } from 'devextreme/ui/speech_to_text';
3233

3334
import DxChat from 'devextreme/ui/chat';
3435

@@ -56,11 +57,14 @@ import { DxoUserModule } from 'devextreme-angular/ui/nested';
5657
import { DxiChatAlertModule } from 'devextreme-angular/ui/chat/nested';
5758
import { DxiChatAttachmentModule } from 'devextreme-angular/ui/chat/nested';
5859
import { DxoChatAuthorModule } from 'devextreme-angular/ui/chat/nested';
60+
import { DxoChatCustomSpeechRecognizerModule } from 'devextreme-angular/ui/chat/nested';
5961
import { DxoChatDayHeaderFormatModule } from 'devextreme-angular/ui/chat/nested';
6062
import { DxoChatEditingModule } from 'devextreme-angular/ui/chat/nested';
6163
import { DxoChatFileUploaderOptionsModule } from 'devextreme-angular/ui/chat/nested';
6264
import { DxiChatItemModule } from 'devextreme-angular/ui/chat/nested';
6365
import { DxoChatMessageTimestampFormatModule } from 'devextreme-angular/ui/chat/nested';
66+
import { DxoChatSpeechRecognitionConfigModule } from 'devextreme-angular/ui/chat/nested';
67+
import { DxoChatSpeechToTextOptionsModule } from 'devextreme-angular/ui/chat/nested';
6468
import { DxiChatTypingUserModule } from 'devextreme-angular/ui/chat/nested';
6569
import { DxoChatUserModule } from 'devextreme-angular/ui/chat/nested';
6670
import {
@@ -291,6 +295,16 @@ export class DxChatComponent extends DxComponent implements OnDestroy, OnChanges
291295
}
292296

293297

298+
299+
@Input()
300+
get inputFieldText(): string | undefined {
301+
return this._getOption('inputFieldText');
302+
}
303+
set inputFieldText(value: string | undefined) {
304+
this._setOption('inputFieldText', value);
305+
}
306+
307+
294308
/**
295309
* [descr:dxChatOptions.items]
296310
@@ -408,6 +422,16 @@ export class DxChatComponent extends DxComponent implements OnDestroy, OnChanges
408422
}
409423

410424

425+
426+
@Input()
427+
get speechToTextOptions(): dxSpeechToTextOptions {
428+
return this._getOption('speechToTextOptions');
429+
}
430+
set speechToTextOptions(value: dxSpeechToTextOptions) {
431+
this._setOption('speechToTextOptions', value);
432+
}
433+
434+
411435
/**
412436
* [descr:dxChatOptions.typingUsers]
413437
@@ -661,6 +685,13 @@ export class DxChatComponent extends DxComponent implements OnDestroy, OnChanges
661685
*/
662686
@Output() hoverStateEnabledChange: EventEmitter<boolean>;
663687

688+
/**
689+
690+
* This member supports the internal infrastructure and is not intended to be used directly from your code.
691+
692+
*/
693+
@Output() inputFieldTextChange: EventEmitter<string | undefined>;
694+
664695
/**
665696
666697
* This member supports the internal infrastructure and is not intended to be used directly from your code.
@@ -724,6 +755,13 @@ export class DxChatComponent extends DxComponent implements OnDestroy, OnChanges
724755
*/
725756
@Output() showUserNameChange: EventEmitter<boolean>;
726757

758+
/**
759+
760+
* This member supports the internal infrastructure and is not intended to be used directly from your code.
761+
762+
*/
763+
@Output() speechToTextOptionsChange: EventEmitter<dxSpeechToTextOptions>;
764+
727765
/**
728766
729767
* This member supports the internal infrastructure and is not intended to be used directly from your code.
@@ -792,6 +830,7 @@ export class DxChatComponent extends DxComponent implements OnDestroy, OnChanges
792830
{ emit: 'heightChange' },
793831
{ emit: 'hintChange' },
794832
{ emit: 'hoverStateEnabledChange' },
833+
{ emit: 'inputFieldTextChange' },
795834
{ emit: 'itemsChange' },
796835
{ emit: 'messageTemplateChange' },
797836
{ emit: 'messageTimestampFormatChange' },
@@ -801,6 +840,7 @@ export class DxChatComponent extends DxComponent implements OnDestroy, OnChanges
801840
{ emit: 'showDayHeadersChange' },
802841
{ emit: 'showMessageTimestampChange' },
803842
{ emit: 'showUserNameChange' },
843+
{ emit: 'speechToTextOptionsChange' },
804844
{ emit: 'typingUsersChange' },
805845
{ emit: 'userChange' },
806846
{ emit: 'visibleChange' },
@@ -869,11 +909,14 @@ export class DxChatComponent extends DxComponent implements OnDestroy, OnChanges
869909
DxiChatAlertModule,
870910
DxiChatAttachmentModule,
871911
DxoChatAuthorModule,
912+
DxoChatCustomSpeechRecognizerModule,
872913
DxoChatDayHeaderFormatModule,
873914
DxoChatEditingModule,
874915
DxoChatFileUploaderOptionsModule,
875916
DxiChatItemModule,
876917
DxoChatMessageTimestampFormatModule,
918+
DxoChatSpeechRecognitionConfigModule,
919+
DxoChatSpeechToTextOptionsModule,
877920
DxiChatTypingUserModule,
878921
DxoChatUserModule,
879922
DxIntegrationModule,
@@ -892,11 +935,14 @@ export class DxChatComponent extends DxComponent implements OnDestroy, OnChanges
892935
DxiChatAlertModule,
893936
DxiChatAttachmentModule,
894937
DxoChatAuthorModule,
938+
DxoChatCustomSpeechRecognizerModule,
895939
DxoChatDayHeaderFormatModule,
896940
DxoChatEditingModule,
897941
DxoChatFileUploaderOptionsModule,
898942
DxiChatItemModule,
899943
DxoChatMessageTimestampFormatModule,
944+
DxoChatSpeechRecognitionConfigModule,
945+
DxoChatSpeechToTextOptionsModule,
900946
DxiChatTypingUserModule,
901947
DxoChatUserModule,
902948
DxTemplateModule
Lines changed: 83 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,83 @@
1+
/* tslint:disable:max-line-length */
2+
3+
4+
import {
5+
Component,
6+
OnInit,
7+
OnDestroy,
8+
NgModule,
9+
Host,
10+
SkipSelf,
11+
Input
12+
} from '@angular/core';
13+
14+
15+
16+
17+
18+
import {
19+
DxIntegrationModule,
20+
NestedOptionHost,
21+
} from 'devextreme-angular/core';
22+
import { NestedOption } from 'devextreme-angular/core';
23+
24+
25+
@Component({
26+
selector: 'dxo-chat-custom-speech-recognizer',
27+
standalone: true,
28+
template: '',
29+
styles: [''],
30+
imports: [ DxIntegrationModule ],
31+
providers: [NestedOptionHost]
32+
})
33+
export class DxoChatCustomSpeechRecognizerComponent extends NestedOption implements OnDestroy, OnInit {
34+
@Input()
35+
get enabled(): boolean {
36+
return this._getOption('enabled');
37+
}
38+
set enabled(value: boolean) {
39+
this._setOption('enabled', value);
40+
}
41+
42+
@Input()
43+
get isListening(): boolean {
44+
return this._getOption('isListening');
45+
}
46+
set isListening(value: boolean) {
47+
this._setOption('isListening', value);
48+
}
49+
50+
51+
protected get _optionPath() {
52+
return 'customSpeechRecognizer';
53+
}
54+
55+
56+
constructor(@SkipSelf() @Host() parentOptionHost: NestedOptionHost,
57+
@Host() optionHost: NestedOptionHost) {
58+
super();
59+
parentOptionHost.setNestedOption(this);
60+
optionHost.setHost(this, this._fullOptionPath.bind(this));
61+
}
62+
63+
64+
ngOnInit() {
65+
this._addRecreatedComponent();
66+
}
67+
68+
ngOnDestroy() {
69+
this._addRemovedOption(this._getOptionPath());
70+
}
71+
72+
73+
}
74+
75+
@NgModule({
76+
imports: [
77+
DxoChatCustomSpeechRecognizerComponent
78+
],
79+
exports: [
80+
DxoChatCustomSpeechRecognizerComponent
81+
],
82+
})
83+
export class DxoChatCustomSpeechRecognizerModule { }
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,14 @@
11
export * from './alert-dxi';
22
export * from './attachment-dxi';
33
export * from './author';
4+
export * from './custom-speech-recognizer';
45
export * from './day-header-format';
56
export * from './editing';
67
export * from './file-uploader-options';
78
export * from './item-dxi';
89
export * from './message-timestamp-format';
10+
export * from './speech-recognition-config';
11+
export * from './speech-to-text-options';
912
export * from './typing-user-dxi';
1013
export * from './user';
1114

Lines changed: 107 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,107 @@
1+
/* tslint:disable:max-line-length */
2+
3+
4+
import {
5+
Component,
6+
OnInit,
7+
OnDestroy,
8+
NgModule,
9+
Host,
10+
SkipSelf,
11+
Input
12+
} from '@angular/core';
13+
14+
15+
16+
17+
18+
import {
19+
DxIntegrationModule,
20+
NestedOptionHost,
21+
} from 'devextreme-angular/core';
22+
import { NestedOption } from 'devextreme-angular/core';
23+
24+
25+
@Component({
26+
selector: 'dxo-chat-speech-recognition-config',
27+
standalone: true,
28+
template: '',
29+
styles: [''],
30+
imports: [ DxIntegrationModule ],
31+
providers: [NestedOptionHost]
32+
})
33+
export class DxoChatSpeechRecognitionConfigComponent extends NestedOption implements OnDestroy, OnInit {
34+
@Input()
35+
get continuous(): boolean {
36+
return this._getOption('continuous');
37+
}
38+
set continuous(value: boolean) {
39+
this._setOption('continuous', value);
40+
}
41+
42+
@Input()
43+
get grammars(): Array<string> {
44+
return this._getOption('grammars');
45+
}
46+
set grammars(value: Array<string>) {
47+
this._setOption('grammars', value);
48+
}
49+
50+
@Input()
51+
get interimResults(): boolean {
52+
return this._getOption('interimResults');
53+
}
54+
set interimResults(value: boolean) {
55+
this._setOption('interimResults', value);
56+
}
57+
58+
@Input()
59+
get lang(): string {
60+
return this._getOption('lang');
61+
}
62+
set lang(value: string) {
63+
this._setOption('lang', value);
64+
}
65+
66+
@Input()
67+
get maxAlternatives(): number {
68+
return this._getOption('maxAlternatives');
69+
}
70+
set maxAlternatives(value: number) {
71+
this._setOption('maxAlternatives', value);
72+
}
73+
74+
75+
protected get _optionPath() {
76+
return 'speechRecognitionConfig';
77+
}
78+
79+
80+
constructor(@SkipSelf() @Host() parentOptionHost: NestedOptionHost,
81+
@Host() optionHost: NestedOptionHost) {
82+
super();
83+
parentOptionHost.setNestedOption(this);
84+
optionHost.setHost(this, this._fullOptionPath.bind(this));
85+
}
86+
87+
88+
ngOnInit() {
89+
this._addRecreatedComponent();
90+
}
91+
92+
ngOnDestroy() {
93+
this._addRemovedOption(this._getOptionPath());
94+
}
95+
96+
97+
}
98+
99+
@NgModule({
100+
imports: [
101+
DxoChatSpeechRecognitionConfigComponent
102+
],
103+
exports: [
104+
DxoChatSpeechRecognitionConfigComponent
105+
],
106+
})
107+
export class DxoChatSpeechRecognitionConfigModule { }

0 commit comments

Comments
 (0)