@progress/kendo-angular-buttons 21.4.1-develop.1 → 22.0.0-develop.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/fesm2022/progress-kendo-angular-buttons.mjs +105 -105
- package/listbutton/list-button.d.ts +1 -1
- package/package.json +11 -19
- package/splitbutton/localization/messages.d.ts +1 -1
- package/esm2022/button/button-settings.mjs +0 -5
- package/esm2022/button/button.component.mjs +0 -558
- package/esm2022/button/button.module.mjs +0 -43
- package/esm2022/button/button.service.mjs +0 -22
- package/esm2022/button/selection-settings.mjs +0 -5
- package/esm2022/buttongroup/buttongroup.component.mjs +0 -340
- package/esm2022/buttongroup/buttongroup.module.mjs +0 -49
- package/esm2022/buttons.module.mjs +0 -58
- package/esm2022/chip/chip-content-click-event-args.interface.mjs +0 -5
- package/esm2022/chip/chip-list-remove-event-args.interface.mjs +0 -5
- package/esm2022/chip/chip-list.component.mjs +0 -360
- package/esm2022/chip/chip-remove-event-args.interface.mjs +0 -5
- package/esm2022/chip/chip.component.mjs +0 -585
- package/esm2022/chip/chip.module.mjs +0 -45
- package/esm2022/chip/models/avatar-settings.interface.mjs +0 -5
- package/esm2022/chip/models/selection.mjs +0 -5
- package/esm2022/common/models/arrow-settings.mjs +0 -5
- package/esm2022/common/models/fillmode.mjs +0 -5
- package/esm2022/common/models/rounded.mjs +0 -5
- package/esm2022/common/models/size.mjs +0 -5
- package/esm2022/common/models/styling-classes.mjs +0 -5
- package/esm2022/common/models/theme-color.mjs +0 -5
- package/esm2022/common/models.mjs +0 -10
- package/esm2022/direction.mjs +0 -5
- package/esm2022/directives.mjs +0 -176
- package/esm2022/dropdownbutton/dropdownbutton.component.mjs +0 -482
- package/esm2022/dropdownbutton/dropdownbutton.module.mjs +0 -50
- package/esm2022/floatingactionbutton/animations/animations.mjs +0 -33
- package/esm2022/floatingactionbutton/dial-item.component.mjs +0 -161
- package/esm2022/floatingactionbutton/dial-list.component.mjs +0 -98
- package/esm2022/floatingactionbutton/floatingactionbutton.component.mjs +0 -954
- package/esm2022/floatingactionbutton/floatingactionbutton.module.mjs +0 -47
- package/esm2022/floatingactionbutton/models/align.mjs +0 -5
- package/esm2022/floatingactionbutton/models/item-animation.interface.mjs +0 -5
- package/esm2022/floatingactionbutton/models/item-click.event.mjs +0 -5
- package/esm2022/floatingactionbutton/models/item.interface.mjs +0 -5
- package/esm2022/floatingactionbutton/models/offset.mjs +0 -5
- package/esm2022/floatingactionbutton/models/position-mode.mjs +0 -5
- package/esm2022/floatingactionbutton/templates/dial-item-template.directive.mjs +0 -37
- package/esm2022/floatingactionbutton/templates/fab-template.directive.mjs +0 -38
- package/esm2022/floatingactionbutton/utils.mjs +0 -38
- package/esm2022/focusable/focus.service.mjs +0 -38
- package/esm2022/focusable/focusable.directive.mjs +0 -67
- package/esm2022/index.mjs +0 -33
- package/esm2022/listbutton/button-item-template.directive.mjs +0 -47
- package/esm2022/listbutton/container.service.mjs +0 -18
- package/esm2022/listbutton/list-button.mjs +0 -461
- package/esm2022/listbutton/list-item-model.mjs +0 -5
- package/esm2022/listbutton/list.component.mjs +0 -177
- package/esm2022/listbutton/popup-settings.mjs +0 -5
- package/esm2022/navigation/key-events.mjs +0 -13
- package/esm2022/navigation/navigation-action.mjs +0 -20
- package/esm2022/navigation/navigation-config.mjs +0 -9
- package/esm2022/navigation/navigation.service.mjs +0 -111
- package/esm2022/package-metadata.mjs +0 -16
- package/esm2022/preventable-event.mjs +0 -25
- package/esm2022/progress-kendo-angular-buttons.mjs +0 -8
- package/esm2022/speechtotextbutton/models/error-event.mjs +0 -5
- package/esm2022/speechtotextbutton/models/integration-mode.mjs +0 -5
- package/esm2022/speechtotextbutton/models/result-event.mjs +0 -5
- package/esm2022/speechtotextbutton/models/speechtotextbutton-settings.mjs +0 -5
- package/esm2022/speechtotextbutton/speechtotextbutton.component.mjs +0 -532
- package/esm2022/speechtotextbutton/speechtotextbutton.module.mjs +0 -31
- package/esm2022/splitbutton/localization/custom-messages.component.mjs +0 -40
- package/esm2022/splitbutton/localization/localized-messages.directive.mjs +0 -39
- package/esm2022/splitbutton/localization/messages.mjs +0 -50
- package/esm2022/splitbutton/splitbutton.component.mjs +0 -761
- package/esm2022/splitbutton/splitbutton.module.mjs +0 -37
- package/esm2022/util.mjs +0 -108
|
@@ -1,532 +0,0 @@
|
|
|
1
|
-
/**-----------------------------------------------------------------------------------------
|
|
2
|
-
* Copyright © 2026 Progress Software Corporation. All rights reserved.
|
|
3
|
-
* Licensed under commercial license. See LICENSE.md in the project root for more information
|
|
4
|
-
*-------------------------------------------------------------------------------------------*/
|
|
5
|
-
import { Component, ElementRef, EventEmitter, HostBinding, HostListener, Input, NgZone, Output, Renderer2 } from '@angular/core';
|
|
6
|
-
import { from, Observable, of, Subscription } from 'rxjs';
|
|
7
|
-
import { take } from 'rxjs/operators';
|
|
8
|
-
import { microphoneOutlineIcon, stopSmIcon } from '@progress/kendo-svg-icons';
|
|
9
|
-
import { KendoSpeechRecognition } from '@progress/kendo-webspeech-common';
|
|
10
|
-
import { IconWrapperComponent } from '@progress/kendo-angular-icons';
|
|
11
|
-
import { L10N_PREFIX, LocalizationService } from '@progress/kendo-angular-l10n';
|
|
12
|
-
import { anyChanged, isChanged, isDocumentAvailable, isFirefox, isSafari } from '@progress/kendo-angular-common';
|
|
13
|
-
import { validatePackage } from '@progress/kendo-licensing';
|
|
14
|
-
import { packageMetadata } from '../package-metadata';
|
|
15
|
-
import { getStylingClasses, getThemeColorClasses, toggleClass } from '../util';
|
|
16
|
-
import * as i0 from "@angular/core";
|
|
17
|
-
import * as i1 from "@progress/kendo-angular-l10n";
|
|
18
|
-
const DEFAULT_ROUNDED = 'medium';
|
|
19
|
-
const DEFAULT_SIZE = 'medium';
|
|
20
|
-
const DEFAULT_THEME_COLOR = 'base';
|
|
21
|
-
const DEFAULT_FILL_MODE = 'solid';
|
|
22
|
-
/**
|
|
23
|
-
* Represents the Kendo UI SpeechToTextButton component for Angular.
|
|
24
|
-
*
|
|
25
|
-
* @example
|
|
26
|
-
* ```html
|
|
27
|
-
* <button kendoSpeechToTextButton></button>
|
|
28
|
-
* ```
|
|
29
|
-
*/
|
|
30
|
-
export class SpeechToTextButtonComponent {
|
|
31
|
-
renderer;
|
|
32
|
-
ngZone;
|
|
33
|
-
/**
|
|
34
|
-
* When `true`, disables the SpeechToTextButton and prevents user interaction.
|
|
35
|
-
*
|
|
36
|
-
* @default false
|
|
37
|
-
*/
|
|
38
|
-
set disabled(disabled) {
|
|
39
|
-
//Required, because in FF focused buttons are not blurred on disabled
|
|
40
|
-
if (disabled && isDocumentAvailable() && isFirefox(navigator.userAgent)) {
|
|
41
|
-
this.blur();
|
|
42
|
-
}
|
|
43
|
-
this.isDisabled = disabled;
|
|
44
|
-
this.renderer.setProperty(this.element, 'disabled', disabled);
|
|
45
|
-
}
|
|
46
|
-
get disabled() {
|
|
47
|
-
return this.isDisabled;
|
|
48
|
-
}
|
|
49
|
-
/**
|
|
50
|
-
* Sets the padding of the SpeechToTextButton.
|
|
51
|
-
*
|
|
52
|
-
* @default 'medium'
|
|
53
|
-
*/
|
|
54
|
-
set size(size) {
|
|
55
|
-
const newSize = size || DEFAULT_SIZE;
|
|
56
|
-
this.handleClasses(newSize, 'size');
|
|
57
|
-
this._size = newSize;
|
|
58
|
-
}
|
|
59
|
-
get size() {
|
|
60
|
-
return this._size;
|
|
61
|
-
}
|
|
62
|
-
/**
|
|
63
|
-
* Sets the border radius of the SpeechToTextButton.
|
|
64
|
-
*
|
|
65
|
-
* @default 'medium'
|
|
66
|
-
*/
|
|
67
|
-
set rounded(rounded) {
|
|
68
|
-
const newRounded = rounded || DEFAULT_ROUNDED;
|
|
69
|
-
this.handleClasses(newRounded, 'rounded');
|
|
70
|
-
this._rounded = newRounded;
|
|
71
|
-
}
|
|
72
|
-
get rounded() {
|
|
73
|
-
return this._rounded;
|
|
74
|
-
}
|
|
75
|
-
/**
|
|
76
|
-
* Sets the background and border styles of the SpeechToTextButton.
|
|
77
|
-
*
|
|
78
|
-
* @default 'solid'
|
|
79
|
-
*/
|
|
80
|
-
set fillMode(fillMode) {
|
|
81
|
-
const newFillMode = fillMode || DEFAULT_FILL_MODE;
|
|
82
|
-
this.handleClasses(newFillMode, 'fillMode');
|
|
83
|
-
this._fillMode = newFillMode;
|
|
84
|
-
}
|
|
85
|
-
get fillMode() {
|
|
86
|
-
return this._fillMode;
|
|
87
|
-
}
|
|
88
|
-
/**
|
|
89
|
-
* Sets a predefined theme color for the SpeechToTextButton.
|
|
90
|
-
* The theme color applies as a background and border color and adjusts the text color.
|
|
91
|
-
*
|
|
92
|
-
* @default 'base'
|
|
93
|
-
*/
|
|
94
|
-
set themeColor(themeColor) {
|
|
95
|
-
const newThemeColor = themeColor || DEFAULT_THEME_COLOR;
|
|
96
|
-
this.handleThemeColor(newThemeColor);
|
|
97
|
-
this._themeColor = newThemeColor;
|
|
98
|
-
}
|
|
99
|
-
get themeColor() {
|
|
100
|
-
return this._themeColor;
|
|
101
|
-
}
|
|
102
|
-
/**
|
|
103
|
-
* Specifies which speech recognition engine or integration the component should use. Allows the component to operate in different environments or use alternative implementations.
|
|
104
|
-
*/
|
|
105
|
-
integrationMode = 'webSpeech';
|
|
106
|
-
/**
|
|
107
|
-
* Specifies a `BCP 47` language tag (e.g., 'en-US', 'bg-BG') used for speech recognition.
|
|
108
|
-
*
|
|
109
|
-
* @default 'en-US'
|
|
110
|
-
*/
|
|
111
|
-
lang = 'en-US';
|
|
112
|
-
/**
|
|
113
|
-
* Specifies whether continuous results are returned for each recognition, or only a single result once recognition stops.
|
|
114
|
-
*
|
|
115
|
-
* @default false
|
|
116
|
-
*/
|
|
117
|
-
continuous = false;
|
|
118
|
-
/**
|
|
119
|
-
* Specifies whether interim results should be returned or not. Interim results are results that are not yet final.
|
|
120
|
-
*
|
|
121
|
-
* @default false
|
|
122
|
-
*/
|
|
123
|
-
interimResults = false;
|
|
124
|
-
/**
|
|
125
|
-
* Represents the maximum number of alternative transcriptions to return for each result.
|
|
126
|
-
*
|
|
127
|
-
* @default 1
|
|
128
|
-
*/
|
|
129
|
-
maxAlternatives = 1;
|
|
130
|
-
/**
|
|
131
|
-
* Fires when the speech recognition service has begun listening to incoming audio.
|
|
132
|
-
*/
|
|
133
|
-
start = new EventEmitter();
|
|
134
|
-
/**
|
|
135
|
-
* Fires when the speech recognition service has disconnected.
|
|
136
|
-
*/
|
|
137
|
-
end = new EventEmitter();
|
|
138
|
-
/**
|
|
139
|
-
* Fires when the speech recognition service returns a result - a word or phrase has been positively recognized.
|
|
140
|
-
*/
|
|
141
|
-
result = new EventEmitter();
|
|
142
|
-
/**
|
|
143
|
-
* Fires when a speech recognition error occurs. The event argument is a string, containing the error message.
|
|
144
|
-
*/
|
|
145
|
-
error = new EventEmitter();
|
|
146
|
-
/**
|
|
147
|
-
* Fires when the user clicks the SpeechToTextButton.
|
|
148
|
-
*/
|
|
149
|
-
click = new EventEmitter();
|
|
150
|
-
get iconButtonClass() {
|
|
151
|
-
return !this.hasText;
|
|
152
|
-
}
|
|
153
|
-
get listeningClass() {
|
|
154
|
-
return this.isListening;
|
|
155
|
-
}
|
|
156
|
-
speechToTextButtonClass = true;
|
|
157
|
-
classButton = true;
|
|
158
|
-
get classDisabled() {
|
|
159
|
-
return this.isDisabled;
|
|
160
|
-
}
|
|
161
|
-
get getDirection() {
|
|
162
|
-
return this.direction;
|
|
163
|
-
}
|
|
164
|
-
get ariaPressed() {
|
|
165
|
-
return this.isListening;
|
|
166
|
-
}
|
|
167
|
-
/**
|
|
168
|
-
* @hidden
|
|
169
|
-
*/
|
|
170
|
-
onFocus() {
|
|
171
|
-
this.isFocused = true;
|
|
172
|
-
}
|
|
173
|
-
/**
|
|
174
|
-
* @hidden
|
|
175
|
-
*/
|
|
176
|
-
onBlur() {
|
|
177
|
-
this.isFocused = false;
|
|
178
|
-
}
|
|
179
|
-
/**
|
|
180
|
-
* Focuses the SpeechToTextButton component.
|
|
181
|
-
*/
|
|
182
|
-
focus() {
|
|
183
|
-
if (isDocumentAvailable()) {
|
|
184
|
-
this.element.focus();
|
|
185
|
-
this.isFocused = true;
|
|
186
|
-
}
|
|
187
|
-
}
|
|
188
|
-
/**
|
|
189
|
-
* Removes focus from the SpeechToTextButton component.
|
|
190
|
-
*/
|
|
191
|
-
blur() {
|
|
192
|
-
if (isDocumentAvailable()) {
|
|
193
|
-
this.element.blur();
|
|
194
|
-
this.isFocused = false;
|
|
195
|
-
}
|
|
196
|
-
}
|
|
197
|
-
ngOnInit() {
|
|
198
|
-
this.ngZone.runOutsideAngular(() => {
|
|
199
|
-
this.subs.add(this.renderer.listen(this.element, 'click', this.onClick.bind(this)));
|
|
200
|
-
this.subs.add(this.renderer.listen(this.element, 'mousedown', (event) => {
|
|
201
|
-
const isBrowserSafari = isDocumentAvailable() && isSafari(navigator.userAgent);
|
|
202
|
-
if (!this.isDisabled && isBrowserSafari) {
|
|
203
|
-
event.preventDefault();
|
|
204
|
-
this.element.focus();
|
|
205
|
-
}
|
|
206
|
-
}));
|
|
207
|
-
if (this.integrationMode !== 'webSpeech') {
|
|
208
|
-
return;
|
|
209
|
-
}
|
|
210
|
-
this.createWebSpeech();
|
|
211
|
-
});
|
|
212
|
-
}
|
|
213
|
-
ngOnChanges(changes) {
|
|
214
|
-
if (isChanged("integrationMode", changes, false)) {
|
|
215
|
-
if (this.integrationMode === 'webSpeech') {
|
|
216
|
-
if (!this.speechRecognition) {
|
|
217
|
-
this.ngZone.runOutsideAngular(() => {
|
|
218
|
-
this.createWebSpeech();
|
|
219
|
-
});
|
|
220
|
-
}
|
|
221
|
-
}
|
|
222
|
-
else {
|
|
223
|
-
this.destroyWebSpeech();
|
|
224
|
-
}
|
|
225
|
-
}
|
|
226
|
-
if (anyChanged(['lang', 'interimResults', 'maxAlternatives', 'continuous'], changes)) {
|
|
227
|
-
if (this.speechRecognition) {
|
|
228
|
-
this.speechRecognition.setOptions({
|
|
229
|
-
lang: this.lang,
|
|
230
|
-
interimResults: this.interimResults,
|
|
231
|
-
maxAlternatives: this.maxAlternatives,
|
|
232
|
-
continuous: this.continuous
|
|
233
|
-
});
|
|
234
|
-
}
|
|
235
|
-
}
|
|
236
|
-
}
|
|
237
|
-
ngAfterViewInit() {
|
|
238
|
-
const stylingOptions = ['size', 'rounded', 'fillMode'];
|
|
239
|
-
stylingOptions.forEach(input => {
|
|
240
|
-
this.handleClasses(this[input], input);
|
|
241
|
-
});
|
|
242
|
-
}
|
|
243
|
-
ngOnDestroy() {
|
|
244
|
-
this.destroyWebSpeech();
|
|
245
|
-
this.subs.unsubscribe();
|
|
246
|
-
}
|
|
247
|
-
constructor(element, renderer, localization, ngZone) {
|
|
248
|
-
this.renderer = renderer;
|
|
249
|
-
this.ngZone = ngZone;
|
|
250
|
-
validatePackage(packageMetadata);
|
|
251
|
-
this.direction = localization.rtl ? 'rtl' : 'ltr';
|
|
252
|
-
this.subs.add(localization.changes.subscribe(({ rtl }) => (this.direction = rtl ? 'rtl' : 'ltr')));
|
|
253
|
-
this.element = element.nativeElement;
|
|
254
|
-
}
|
|
255
|
-
/**
|
|
256
|
-
* Indicates whether the button is actively listening for incoming audio.
|
|
257
|
-
*/
|
|
258
|
-
isListening = false;
|
|
259
|
-
/**
|
|
260
|
-
* Indicates whether web speech functionality is supported.
|
|
261
|
-
*/
|
|
262
|
-
get isWebSpeechSupported() {
|
|
263
|
-
return this.speechRecognition ? this.speechRecognition.isSupported() : false;
|
|
264
|
-
}
|
|
265
|
-
set isFocused(isFocused) {
|
|
266
|
-
toggleClass('k-focus', isFocused, this.renderer, this.element);
|
|
267
|
-
this._focused = isFocused;
|
|
268
|
-
}
|
|
269
|
-
get isFocused() {
|
|
270
|
-
return this._focused;
|
|
271
|
-
}
|
|
272
|
-
/**
|
|
273
|
-
* @hidden
|
|
274
|
-
*/
|
|
275
|
-
get hasText() {
|
|
276
|
-
return isDocumentAvailable() && this.element.textContent.trim().length > 0;
|
|
277
|
-
}
|
|
278
|
-
/**
|
|
279
|
-
* @hidden
|
|
280
|
-
*/
|
|
281
|
-
onClick() {
|
|
282
|
-
if (this.isWebSpeechSupported && this.integrationMode === 'webSpeech') {
|
|
283
|
-
this.ngZone.run(() => {
|
|
284
|
-
if (this.isListening) {
|
|
285
|
-
this.speechRecognition.stop();
|
|
286
|
-
}
|
|
287
|
-
else {
|
|
288
|
-
this.speechRecognition.start();
|
|
289
|
-
}
|
|
290
|
-
});
|
|
291
|
-
}
|
|
292
|
-
else if (this.integrationMode === 'none') {
|
|
293
|
-
let asyncFactory = () => of(null);
|
|
294
|
-
this.ngZone.run(() => {
|
|
295
|
-
if (this.isListening) {
|
|
296
|
-
this.end.emit(fn => asyncFactory = fn);
|
|
297
|
-
}
|
|
298
|
-
else {
|
|
299
|
-
this.start.emit(fn => asyncFactory = fn);
|
|
300
|
-
}
|
|
301
|
-
const result = asyncFactory();
|
|
302
|
-
const observable = this.toObservable(result);
|
|
303
|
-
observable.pipe(take(1)).subscribe(() => this.isListening = !this.isListening);
|
|
304
|
-
});
|
|
305
|
-
}
|
|
306
|
-
}
|
|
307
|
-
/**
|
|
308
|
-
* @hidden
|
|
309
|
-
*/
|
|
310
|
-
get buttonSvgIcon() {
|
|
311
|
-
return this.isListening ? this.stopSvgIcon : this.microphoneSvgIcon;
|
|
312
|
-
}
|
|
313
|
-
/**
|
|
314
|
-
* @hidden
|
|
315
|
-
*/
|
|
316
|
-
get buttonIcon() {
|
|
317
|
-
return this.isListening ? 'stop-sm' : 'microphone-outline';
|
|
318
|
-
}
|
|
319
|
-
/**
|
|
320
|
-
* @hidden
|
|
321
|
-
*/
|
|
322
|
-
setAttribute(attribute, value) {
|
|
323
|
-
this.renderer.setAttribute(this.element, attribute, value);
|
|
324
|
-
}
|
|
325
|
-
/**
|
|
326
|
-
* @hidden
|
|
327
|
-
*/
|
|
328
|
-
element;
|
|
329
|
-
/**
|
|
330
|
-
* @hidden
|
|
331
|
-
*/
|
|
332
|
-
isDisabled = false;
|
|
333
|
-
/**
|
|
334
|
-
* @hidden
|
|
335
|
-
*/
|
|
336
|
-
subs = new Subscription();
|
|
337
|
-
microphoneSvgIcon = microphoneOutlineIcon;
|
|
338
|
-
stopSvgIcon = stopSmIcon;
|
|
339
|
-
speechRecognition;
|
|
340
|
-
_size = DEFAULT_SIZE;
|
|
341
|
-
_rounded = DEFAULT_ROUNDED;
|
|
342
|
-
_fillMode = DEFAULT_FILL_MODE;
|
|
343
|
-
_themeColor = DEFAULT_THEME_COLOR;
|
|
344
|
-
_focused = false;
|
|
345
|
-
direction;
|
|
346
|
-
handleClasses(value, input) {
|
|
347
|
-
const elem = this.element;
|
|
348
|
-
const classes = getStylingClasses('button', input, this[input], value);
|
|
349
|
-
if (input === 'fillMode') {
|
|
350
|
-
this.handleThemeColor(this.themeColor, this[input], value);
|
|
351
|
-
}
|
|
352
|
-
if (classes.toRemove) {
|
|
353
|
-
this.renderer.removeClass(elem, classes.toRemove);
|
|
354
|
-
}
|
|
355
|
-
if (classes.toAdd) {
|
|
356
|
-
this.renderer.addClass(elem, classes.toAdd);
|
|
357
|
-
}
|
|
358
|
-
}
|
|
359
|
-
handleStart() {
|
|
360
|
-
this.ngZone.run(() => {
|
|
361
|
-
this.isListening = true;
|
|
362
|
-
this.start.emit();
|
|
363
|
-
});
|
|
364
|
-
}
|
|
365
|
-
handleEnd() {
|
|
366
|
-
this.ngZone.run(() => {
|
|
367
|
-
this.isListening = false;
|
|
368
|
-
this.end.emit();
|
|
369
|
-
});
|
|
370
|
-
}
|
|
371
|
-
handleResult(event) {
|
|
372
|
-
const results = event.results;
|
|
373
|
-
const lastResultIndex = results.length - 1;
|
|
374
|
-
const lastResult = results[lastResultIndex];
|
|
375
|
-
const alternatives = [];
|
|
376
|
-
for (let i = 0; i < lastResult.length; i++) {
|
|
377
|
-
alternatives.push({
|
|
378
|
-
transcript: lastResult[i].transcript,
|
|
379
|
-
confidence: lastResult[i].confidence
|
|
380
|
-
});
|
|
381
|
-
}
|
|
382
|
-
const args = {
|
|
383
|
-
isFinal: lastResult.isFinal,
|
|
384
|
-
alternatives: alternatives,
|
|
385
|
-
};
|
|
386
|
-
this.ngZone.run(() => {
|
|
387
|
-
this.result.emit(args);
|
|
388
|
-
});
|
|
389
|
-
}
|
|
390
|
-
handleError(ev) {
|
|
391
|
-
const errorMessage = ev.error || ev.message || 'Unknown error';
|
|
392
|
-
this.ngZone.run(() => {
|
|
393
|
-
this.error.emit({ errorMessage });
|
|
394
|
-
});
|
|
395
|
-
}
|
|
396
|
-
toObservable(input) {
|
|
397
|
-
return input instanceof Observable ? input : from(input);
|
|
398
|
-
}
|
|
399
|
-
handleThemeColor(value, prevFillMode, fillMode) {
|
|
400
|
-
const elem = this.element;
|
|
401
|
-
const removeFillMode = prevFillMode || this.fillMode;
|
|
402
|
-
const addFillMode = fillMode || this.fillMode;
|
|
403
|
-
const themeColorClass = getThemeColorClasses('button', removeFillMode, addFillMode, this.themeColor, value);
|
|
404
|
-
this.renderer.removeClass(elem, themeColorClass.toRemove);
|
|
405
|
-
if (addFillMode !== 'none' && fillMode !== 'none') {
|
|
406
|
-
if (themeColorClass.toAdd) {
|
|
407
|
-
this.renderer.addClass(elem, themeColorClass.toAdd);
|
|
408
|
-
}
|
|
409
|
-
}
|
|
410
|
-
}
|
|
411
|
-
destroyWebSpeech() {
|
|
412
|
-
if (this.speechRecognition) {
|
|
413
|
-
this.speechRecognition.stop();
|
|
414
|
-
this.speechRecognition.destroy();
|
|
415
|
-
this.speechRecognition = null;
|
|
416
|
-
this.isListening = false;
|
|
417
|
-
}
|
|
418
|
-
}
|
|
419
|
-
createWebSpeech() {
|
|
420
|
-
if (!isDocumentAvailable()) {
|
|
421
|
-
return;
|
|
422
|
-
}
|
|
423
|
-
this.speechRecognition = new KendoSpeechRecognition({
|
|
424
|
-
lang: this.lang,
|
|
425
|
-
interimResults: this.interimResults,
|
|
426
|
-
maxAlternatives: this.maxAlternatives,
|
|
427
|
-
continuous: this.continuous,
|
|
428
|
-
events: {
|
|
429
|
-
start: this.handleStart.bind(this),
|
|
430
|
-
end: this.handleEnd.bind(this),
|
|
431
|
-
result: this.handleResult.bind(this),
|
|
432
|
-
error: this.handleError.bind(this)
|
|
433
|
-
}
|
|
434
|
-
});
|
|
435
|
-
}
|
|
436
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: SpeechToTextButtonComponent, deps: [{ token: i0.ElementRef }, { token: i0.Renderer2 }, { token: i1.LocalizationService }, { token: i0.NgZone }], target: i0.ɵɵFactoryTarget.Component });
|
|
437
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.14", type: SpeechToTextButtonComponent, isStandalone: true, selector: "button[kendoSpeechToTextButton]", inputs: { disabled: "disabled", size: "size", rounded: "rounded", fillMode: "fillMode", themeColor: "themeColor", integrationMode: "integrationMode", lang: "lang", continuous: "continuous", interimResults: "interimResults", maxAlternatives: "maxAlternatives" }, outputs: { start: "start", end: "end", result: "result", error: "error", click: "click" }, host: { listeners: { "focus": "onFocus()", "blur": "onBlur()" }, properties: { "class.k-icon-button": "this.iconButtonClass", "class.k-listening": "this.listeningClass", "class.k-speech-to-text-button": "this.speechToTextButtonClass", "class.k-button": "this.classButton", "class.k-disabled": "this.classDisabled", "attr.dir": "this.getDirection", "attr.aria-pressed": "this.ariaPressed" } }, providers: [
|
|
438
|
-
LocalizationService,
|
|
439
|
-
{
|
|
440
|
-
provide: L10N_PREFIX,
|
|
441
|
-
useValue: 'kendo.speechtotextbutton'
|
|
442
|
-
}
|
|
443
|
-
], exportAs: ["kendoSpeechToTextButton"], usesOnChanges: true, ngImport: i0, template: `
|
|
444
|
-
<kendo-icon-wrapper
|
|
445
|
-
innerCssClass="k-button-icon"
|
|
446
|
-
[name]="buttonIcon"
|
|
447
|
-
[svgIcon]="buttonSvgIcon">
|
|
448
|
-
</kendo-icon-wrapper>
|
|
449
|
-
<span class="k-button-text"><ng-content></ng-content></span>
|
|
450
|
-
`, isInline: true, dependencies: [{ kind: "component", type: IconWrapperComponent, selector: "kendo-icon-wrapper", inputs: ["name", "svgIcon", "innerCssClass", "customFontClass", "size"], exportAs: ["kendoIconWrapper"] }] });
|
|
451
|
-
}
|
|
452
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: SpeechToTextButtonComponent, decorators: [{
|
|
453
|
-
type: Component,
|
|
454
|
-
args: [{
|
|
455
|
-
exportAs: 'kendoSpeechToTextButton',
|
|
456
|
-
providers: [
|
|
457
|
-
LocalizationService,
|
|
458
|
-
{
|
|
459
|
-
provide: L10N_PREFIX,
|
|
460
|
-
useValue: 'kendo.speechtotextbutton'
|
|
461
|
-
}
|
|
462
|
-
],
|
|
463
|
-
selector: 'button[kendoSpeechToTextButton]',
|
|
464
|
-
template: `
|
|
465
|
-
<kendo-icon-wrapper
|
|
466
|
-
innerCssClass="k-button-icon"
|
|
467
|
-
[name]="buttonIcon"
|
|
468
|
-
[svgIcon]="buttonSvgIcon">
|
|
469
|
-
</kendo-icon-wrapper>
|
|
470
|
-
<span class="k-button-text"><ng-content></ng-content></span>
|
|
471
|
-
`,
|
|
472
|
-
standalone: true,
|
|
473
|
-
imports: [IconWrapperComponent]
|
|
474
|
-
}]
|
|
475
|
-
}], ctorParameters: () => [{ type: i0.ElementRef }, { type: i0.Renderer2 }, { type: i1.LocalizationService }, { type: i0.NgZone }], propDecorators: { disabled: [{
|
|
476
|
-
type: Input
|
|
477
|
-
}], size: [{
|
|
478
|
-
type: Input
|
|
479
|
-
}], rounded: [{
|
|
480
|
-
type: Input
|
|
481
|
-
}], fillMode: [{
|
|
482
|
-
type: Input
|
|
483
|
-
}], themeColor: [{
|
|
484
|
-
type: Input
|
|
485
|
-
}], integrationMode: [{
|
|
486
|
-
type: Input
|
|
487
|
-
}], lang: [{
|
|
488
|
-
type: Input
|
|
489
|
-
}], continuous: [{
|
|
490
|
-
type: Input
|
|
491
|
-
}], interimResults: [{
|
|
492
|
-
type: Input
|
|
493
|
-
}], maxAlternatives: [{
|
|
494
|
-
type: Input
|
|
495
|
-
}], start: [{
|
|
496
|
-
type: Output
|
|
497
|
-
}], end: [{
|
|
498
|
-
type: Output
|
|
499
|
-
}], result: [{
|
|
500
|
-
type: Output
|
|
501
|
-
}], error: [{
|
|
502
|
-
type: Output
|
|
503
|
-
}], click: [{
|
|
504
|
-
type: Output
|
|
505
|
-
}], iconButtonClass: [{
|
|
506
|
-
type: HostBinding,
|
|
507
|
-
args: ['class.k-icon-button']
|
|
508
|
-
}], listeningClass: [{
|
|
509
|
-
type: HostBinding,
|
|
510
|
-
args: ['class.k-listening']
|
|
511
|
-
}], speechToTextButtonClass: [{
|
|
512
|
-
type: HostBinding,
|
|
513
|
-
args: ['class.k-speech-to-text-button']
|
|
514
|
-
}], classButton: [{
|
|
515
|
-
type: HostBinding,
|
|
516
|
-
args: ['class.k-button']
|
|
517
|
-
}], classDisabled: [{
|
|
518
|
-
type: HostBinding,
|
|
519
|
-
args: ['class.k-disabled']
|
|
520
|
-
}], getDirection: [{
|
|
521
|
-
type: HostBinding,
|
|
522
|
-
args: ['attr.dir']
|
|
523
|
-
}], ariaPressed: [{
|
|
524
|
-
type: HostBinding,
|
|
525
|
-
args: ['attr.aria-pressed']
|
|
526
|
-
}], onFocus: [{
|
|
527
|
-
type: HostListener,
|
|
528
|
-
args: ['focus']
|
|
529
|
-
}], onBlur: [{
|
|
530
|
-
type: HostListener,
|
|
531
|
-
args: ['blur']
|
|
532
|
-
}] } });
|
|
@@ -1,31 +0,0 @@
|
|
|
1
|
-
/**-----------------------------------------------------------------------------------------
|
|
2
|
-
* Copyright © 2026 Progress Software Corporation. All rights reserved.
|
|
3
|
-
* Licensed under commercial license. See LICENSE.md in the project root for more information
|
|
4
|
-
*-------------------------------------------------------------------------------------------*/
|
|
5
|
-
import { NgModule } from '@angular/core';
|
|
6
|
-
import { KENDO_SPEECHTOTEXTBUTTON } from '../directives';
|
|
7
|
-
import { IconsService } from '@progress/kendo-angular-icons';
|
|
8
|
-
import * as i0 from "@angular/core";
|
|
9
|
-
import * as i1 from "./speechtotextbutton.component";
|
|
10
|
-
// IMPORTANT: NgModule export kept for backwards compatibility.
|
|
11
|
-
/**
|
|
12
|
-
* Represents the exported package module.
|
|
13
|
-
*
|
|
14
|
-
* Required for adding SpeechToTextButton features in NgModule-based Angular applications.
|
|
15
|
-
*
|
|
16
|
-
* The package exports:
|
|
17
|
-
* - `SpeechToTextButtonComponent`—The SpeechToTextButton component class.
|
|
18
|
-
*/
|
|
19
|
-
export class SpeechToTextButtonModule {
|
|
20
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: SpeechToTextButtonModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
|
|
21
|
-
static ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "18.2.14", ngImport: i0, type: SpeechToTextButtonModule, imports: [i1.SpeechToTextButtonComponent], exports: [i1.SpeechToTextButtonComponent] });
|
|
22
|
-
static ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: SpeechToTextButtonModule, providers: [IconsService], imports: [KENDO_SPEECHTOTEXTBUTTON] });
|
|
23
|
-
}
|
|
24
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: SpeechToTextButtonModule, decorators: [{
|
|
25
|
-
type: NgModule,
|
|
26
|
-
args: [{
|
|
27
|
-
exports: [...KENDO_SPEECHTOTEXTBUTTON],
|
|
28
|
-
imports: [...KENDO_SPEECHTOTEXTBUTTON],
|
|
29
|
-
providers: [IconsService]
|
|
30
|
-
}]
|
|
31
|
-
}] });
|
|
@@ -1,40 +0,0 @@
|
|
|
1
|
-
/**-----------------------------------------------------------------------------------------
|
|
2
|
-
* Copyright © 2026 Progress Software Corporation. All rights reserved.
|
|
3
|
-
* Licensed under commercial license. See LICENSE.md in the project root for more information
|
|
4
|
-
*-------------------------------------------------------------------------------------------*/
|
|
5
|
-
import { Component, forwardRef } from '@angular/core';
|
|
6
|
-
import { LocalizationService } from '@progress/kendo-angular-l10n';
|
|
7
|
-
import { Messages } from './messages';
|
|
8
|
-
import * as i0 from "@angular/core";
|
|
9
|
-
import * as i1 from "@progress/kendo-angular-l10n";
|
|
10
|
-
/**
|
|
11
|
-
* Represents a custom component for overriding the default SplitButton messages.
|
|
12
|
-
* ([see example]({% slug rtl_buttons %})).
|
|
13
|
-
*/
|
|
14
|
-
export class SplitButtonCustomMessagesComponent extends Messages {
|
|
15
|
-
service;
|
|
16
|
-
constructor(service) {
|
|
17
|
-
super();
|
|
18
|
-
this.service = service;
|
|
19
|
-
}
|
|
20
|
-
get override() {
|
|
21
|
-
return true;
|
|
22
|
-
}
|
|
23
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: SplitButtonCustomMessagesComponent, deps: [{ token: i1.LocalizationService }], target: i0.ɵɵFactoryTarget.Component });
|
|
24
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.14", type: SplitButtonCustomMessagesComponent, isStandalone: true, selector: "kendo-splitbutton-messages", providers: [{
|
|
25
|
-
provide: Messages,
|
|
26
|
-
useExisting: forwardRef(() => SplitButtonCustomMessagesComponent)
|
|
27
|
-
}], usesInheritance: true, ngImport: i0, template: ``, isInline: true });
|
|
28
|
-
}
|
|
29
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: SplitButtonCustomMessagesComponent, decorators: [{
|
|
30
|
-
type: Component,
|
|
31
|
-
args: [{
|
|
32
|
-
providers: [{
|
|
33
|
-
provide: Messages,
|
|
34
|
-
useExisting: forwardRef(() => SplitButtonCustomMessagesComponent)
|
|
35
|
-
}],
|
|
36
|
-
selector: 'kendo-splitbutton-messages',
|
|
37
|
-
template: ``,
|
|
38
|
-
standalone: true
|
|
39
|
-
}]
|
|
40
|
-
}], ctorParameters: () => [{ type: i1.LocalizationService }] });
|
|
@@ -1,39 +0,0 @@
|
|
|
1
|
-
/**-----------------------------------------------------------------------------------------
|
|
2
|
-
* Copyright © 2026 Progress Software Corporation. All rights reserved.
|
|
3
|
-
* Licensed under commercial license. See LICENSE.md in the project root for more information
|
|
4
|
-
*-------------------------------------------------------------------------------------------*/
|
|
5
|
-
import { Directive, forwardRef } from '@angular/core';
|
|
6
|
-
import { LocalizationService } from '@progress/kendo-angular-l10n';
|
|
7
|
-
import { Messages } from './messages';
|
|
8
|
-
import * as i0 from "@angular/core";
|
|
9
|
-
import * as i1 from "@progress/kendo-angular-l10n";
|
|
10
|
-
/**
|
|
11
|
-
* @hidden
|
|
12
|
-
*/
|
|
13
|
-
export class LocalizedSplitButtonMessagesDirective extends Messages {
|
|
14
|
-
service;
|
|
15
|
-
constructor(service) {
|
|
16
|
-
super();
|
|
17
|
-
this.service = service;
|
|
18
|
-
}
|
|
19
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: LocalizedSplitButtonMessagesDirective, deps: [{ token: i1.LocalizationService }], target: i0.ɵɵFactoryTarget.Directive });
|
|
20
|
-
static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.2.14", type: LocalizedSplitButtonMessagesDirective, isStandalone: true, selector: "[kendoSplitButtonLocalizedMessages]", providers: [
|
|
21
|
-
{
|
|
22
|
-
provide: Messages,
|
|
23
|
-
useExisting: forwardRef(() => LocalizedSplitButtonMessagesDirective)
|
|
24
|
-
}
|
|
25
|
-
], usesInheritance: true, ngImport: i0 });
|
|
26
|
-
}
|
|
27
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: LocalizedSplitButtonMessagesDirective, decorators: [{
|
|
28
|
-
type: Directive,
|
|
29
|
-
args: [{
|
|
30
|
-
providers: [
|
|
31
|
-
{
|
|
32
|
-
provide: Messages,
|
|
33
|
-
useExisting: forwardRef(() => LocalizedSplitButtonMessagesDirective)
|
|
34
|
-
}
|
|
35
|
-
],
|
|
36
|
-
selector: '[kendoSplitButtonLocalizedMessages]',
|
|
37
|
-
standalone: true
|
|
38
|
-
}]
|
|
39
|
-
}], ctorParameters: () => [{ type: i1.LocalizationService }] });
|