@progress/kendo-angular-inputs 11.3.0-develop.1 → 11.3.0-develop.11

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.
@@ -81,6 +81,7 @@ export declare class ColorInputComponent implements AfterViewInit, OnChanges {
81
81
  ngOnChanges(changes: SimpleChanges): void;
82
82
  get formatButtonTitle(): string;
83
83
  handleRgbaValueChange(): void;
84
+ focusDragHandle(event: any): void;
84
85
  handleHexValueChange(hex: string): void;
85
86
  handleRgbaInputBlur(): void;
86
87
  handleHexInputBlur(): void;
@@ -155,6 +155,7 @@ export declare class ColorPaletteComponent implements OnInit, AfterViewInit, OnD
155
155
  private _columns;
156
156
  private _palette;
157
157
  private _tabindex;
158
+ private subs;
158
159
  private dynamicRTLSubscription;
159
160
  constructor(host: ElementRef, service: ColorPaletteService, cdr: ChangeDetectorRef, renderer: Renderer2, localizationService: LocalizationService, ngZone: NgZone);
160
161
  ngOnInit(): void;
@@ -178,15 +178,19 @@ export declare class FlatColorPickerComponent implements OnInit, AfterViewInit,
178
178
  * @hidden
179
179
  */
180
180
  get firstFocusable(): any;
181
- /**
182
- * @hidden
183
- */
184
- get lastFocusable(): any;
185
181
  constructor(host: ElementRef, service: FlatColorPickerService, localizationService: LocalizationService, cdr: ChangeDetectorRef, renderer: Renderer2, ngZone: NgZone, injector: Injector);
186
182
  ngOnInit(): void;
187
183
  ngAfterViewInit(): void;
188
184
  ngOnChanges(changes: SimpleChanges): void;
189
185
  ngOnDestroy(): void;
186
+ /**
187
+ * @hidden
188
+ */
189
+ focusFirstHeaderButton(): void;
190
+ /**
191
+ * @hidden
192
+ */
193
+ lastFocusable(event: any): any;
190
194
  /**
191
195
  * @hidden
192
196
  */
@@ -300,7 +300,6 @@ export class ColorGradientComponent {
300
300
  reset() {
301
301
  this.handleValueChange(undefined);
302
302
  this.updateUI();
303
- this.host.nativeElement.focus();
304
303
  }
305
304
  /**
306
305
  * @hidden
@@ -108,6 +108,11 @@ export class ColorInputComponent {
108
108
  this.hex = parseColor(color, 'hex', this.opacity);
109
109
  this.valueChange.emit(color);
110
110
  }
111
+ focusDragHandle(event) {
112
+ event.preventDefault();
113
+ event.stopImmediatePropagation();
114
+ this.tabOut.emit();
115
+ }
111
116
  handleHexValueChange(hex) {
112
117
  this.hex = hex;
113
118
  const color = parseColor(hex, 'rgba', this.opacity);
@@ -148,7 +153,7 @@ export class ColorInputComponent {
148
153
  }
149
154
  }
150
155
  ColorInputComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: ColorInputComponent, deps: [{ token: i0.ElementRef }, { token: i0.Renderer2 }, { token: i1.LocalizationService }], target: i0.ɵɵFactoryTarget.Component });
151
- ColorInputComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.12", type: ColorInputComponent, selector: "kendo-colorinput", inputs: { focusableId: "focusableId", formatView: "formatView", tabindex: "tabindex", value: "value", opacity: "opacity", disabled: "disabled", readonly: "readonly" }, outputs: { valueChange: "valueChange", tabOut: "tabOut" }, host: { properties: { "class.k-colorgradient-inputs": "this.colorInputClass", "class.k-hstack": "this.colorInputClass" } }, viewQueries: [{ propertyName: "opacityInput", first: true, predicate: ["opacityInput"], descendants: true }, { propertyName: "hexInput", first: true, predicate: ["hexInput"], descendants: true }, { propertyName: "blueInput", first: true, predicate: ["blueInput"], descendants: true }, { propertyName: "toggleFormatButton", first: true, predicate: ["toggleFormatButton"], descendants: true, read: ElementRef }], usesOnChanges: true, ngImport: i0, template: `
156
+ ColorInputComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.12", type: ColorInputComponent, selector: "kendo-colorinput", inputs: { focusableId: "focusableId", formatView: "formatView", tabindex: "tabindex", value: "value", opacity: "opacity", disabled: "disabled", readonly: "readonly" }, outputs: { valueChange: "valueChange", tabOut: "tabOut" }, host: { properties: { "class.k-colorgradient-inputs": "this.colorInputClass", "class.k-hstack": "this.colorInputClass" } }, viewQueries: [{ propertyName: "opacityInput", first: true, predicate: ["opacityInput"], descendants: true }, { propertyName: "hexInput", first: true, predicate: ["hexInput"], descendants: true }, { propertyName: "blueInput", first: true, predicate: ["blue"], descendants: true }, { propertyName: "toggleFormatButton", first: true, predicate: ["toggleFormatButton"], descendants: true, read: ElementRef }], usesOnChanges: true, ngImport: i0, template: `
152
157
  <div class="k-vstack">
153
158
  <button
154
159
  kendoButton
@@ -176,7 +181,7 @@ ColorInputComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", ve
176
181
  (blur)="handleHexInputBlur()"
177
182
  (input)="handleHexValueChange(hexInput.value)"
178
183
  [tabindex]="tabindex.toString()"
179
- (keydown.tab)="$event.preventDefault(); tabOut.emit();"
184
+ (keydown.tab)="focusDragHandle($event)"
180
185
  />
181
186
  <label [for]="focusableId" class="k-colorgradient-input-label">HEX</label>
182
187
  </div>
@@ -260,7 +265,7 @@ ColorInputComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", ve
260
265
  [decimals]="2"
261
266
  (blur)="handleRgbaInputBlur()"
262
267
  (valueChange)="handleRgbaValueChange()"
263
- (keydown.tab)="$event.preventDefault(); tabOut.emit();">
268
+ (keydown.tab)="focusDragHandle($event)">
264
269
  </kendo-numerictextbox>
265
270
  <label [for]="alpha.focusableId" class="k-colorgradient-input-label">A</label>
266
271
  </div>
@@ -298,7 +303,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
298
303
  (blur)="handleHexInputBlur()"
299
304
  (input)="handleHexValueChange(hexInput.value)"
300
305
  [tabindex]="tabindex.toString()"
301
- (keydown.tab)="$event.preventDefault(); tabOut.emit();"
306
+ (keydown.tab)="focusDragHandle($event)"
302
307
  />
303
308
  <label [for]="focusableId" class="k-colorgradient-input-label">HEX</label>
304
309
  </div>
@@ -382,7 +387,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
382
387
  [decimals]="2"
383
388
  (blur)="handleRgbaInputBlur()"
384
389
  (valueChange)="handleRgbaValueChange()"
385
- (keydown.tab)="$event.preventDefault(); tabOut.emit();">
390
+ (keydown.tab)="focusDragHandle($event)">
386
391
  </kendo-numerictextbox>
387
392
  <label [for]="alpha.focusableId" class="k-colorgradient-input-label">A</label>
388
393
  </div>
@@ -421,7 +426,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
421
426
  args: ['hexInput']
422
427
  }], blueInput: [{
423
428
  type: ViewChild,
424
- args: ['blueInput']
429
+ args: ['blue']
425
430
  }], toggleFormatButton: [{
426
431
  type: ViewChild,
427
432
  args: ['toggleFormatButton', { static: false, read: ElementRef }]
@@ -2,11 +2,13 @@
2
2
  * Copyright © 2023 Progress Software Corporation. All rights reserved.
3
3
  * Licensed under commercial license. See LICENSE.md in the project root for more information
4
4
  *-------------------------------------------------------------------------------------------*/
5
- import { Component, Input, EventEmitter, Output, HostBinding, HostListener, forwardRef, ChangeDetectorRef, Renderer2, ElementRef, NgZone } from '@angular/core';
5
+ /* eslint-disable @typescript-eslint/no-explicit-any */
6
+ import { Component, Input, EventEmitter, Output, HostBinding, forwardRef, ChangeDetectorRef, Renderer2, ElementRef, NgZone } from '@angular/core';
6
7
  import { NG_VALUE_ACCESSOR } from '@angular/forms';
7
8
  import { Keys, KendoInput, guid } from '@progress/kendo-angular-common';
8
9
  import { LocalizationService, L10N_PREFIX } from '@progress/kendo-angular-l10n';
9
10
  import { validatePackage } from '@progress/kendo-licensing';
11
+ import { Subscription } from 'rxjs';
10
12
  import { take } from 'rxjs/operators';
11
13
  import { ColorPaletteLocalizationService } from './localization/colorpalette-localization.service';
12
14
  import { packageMetadata } from '../package-metadata';
@@ -94,6 +96,7 @@ export class ColorPaletteComponent {
94
96
  */
95
97
  this.uniqueId = guid();
96
98
  this._tabindex = 0;
99
+ this.subs = new Subscription();
97
100
  this.notifyNgTouched = () => { };
98
101
  this.notifyNgChanged = () => { };
99
102
  validatePackage(packageMetadata);
@@ -200,6 +203,10 @@ export class ColorPaletteComponent {
200
203
  this.palette = this.palette || defaultPreset;
201
204
  this.setRows();
202
205
  }
206
+ const elem = this.host.nativeElement;
207
+ this.subs.add(this.renderer.listen(elem, 'keydown', event => this.handleKeydown(event)));
208
+ this.subs.add(this.renderer.listen(elem, 'focus', () => this.handleFocus()));
209
+ this.subs.add(this.renderer.listen(elem, 'blur', () => this.handleHostBlur()));
203
210
  }
204
211
  ngAfterViewInit() {
205
212
  this.setHostElementAriaLabel();
@@ -210,6 +217,7 @@ export class ColorPaletteComponent {
210
217
  }
211
218
  }
212
219
  ngOnDestroy() {
220
+ this.subs.unsubscribe();
213
221
  if (this.dynamicRTLSubscription) {
214
222
  this.dynamicRTLSubscription.unsubscribe();
215
223
  }
@@ -353,7 +361,8 @@ export class ColorPaletteComponent {
353
361
  this.focusedCell = this.selectedCell;
354
362
  }
355
363
  selectCell(value) {
356
- this.selectedCell = this.service.getCellCoordsFor(value);
364
+ const parsedColor = parseColor(value, 'hex');
365
+ this.selectedCell = this.service.getCellCoordsFor(parsedColor);
357
366
  this.focusedCell = this.selectedCell;
358
367
  }
359
368
  setRows() {
@@ -383,7 +392,7 @@ export class ColorPaletteComponent {
383
392
  }
384
393
  }
385
394
  ColorPaletteComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: ColorPaletteComponent, deps: [{ token: i0.ElementRef }, { token: i1.ColorPaletteService }, { token: i0.ChangeDetectorRef }, { token: i0.Renderer2 }, { token: i2.LocalizationService }, { token: i0.NgZone }], target: i0.ɵɵFactoryTarget.Component });
386
- ColorPaletteComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.12", type: ColorPaletteComponent, selector: "kendo-colorpalette", inputs: { id: "id", format: "format", value: "value", columns: "columns", palette: "palette", tabindex: "tabindex", disabled: "disabled", readonly: "readonly", tileSize: "tileSize" }, outputs: { selectionChange: "selectionChange", valueChange: "valueChange", cellSelection: "cellSelection" }, host: { listeners: { "keydown": "handleKeydown($event)", "focus": "handleFocus($event)", "blur": "handleHostBlur()" }, properties: { "attr.dir": "this.direction", "attr.role": "this.role", "attr.aria-activedescendant": "this.activeDescendant", "attr.id": "this.paletteId", "attr.tabindex": "this.hostTabindex", "class.k-colorpalette": "this.hostClasses", "attr.aria-disabled": "this.disabledClass", "class.k-disabled": "this.disabledClass", "attr.aria-readonly": "this.readonlyAttribute" } }, providers: [
395
+ ColorPaletteComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.12", type: ColorPaletteComponent, selector: "kendo-colorpalette", inputs: { id: "id", format: "format", value: "value", columns: "columns", palette: "palette", tabindex: "tabindex", disabled: "disabled", readonly: "readonly", tileSize: "tileSize" }, outputs: { selectionChange: "selectionChange", valueChange: "valueChange", cellSelection: "cellSelection" }, host: { properties: { "attr.dir": "this.direction", "attr.role": "this.role", "attr.aria-activedescendant": "this.activeDescendant", "attr.id": "this.paletteId", "attr.tabindex": "this.hostTabindex", "class.k-colorpalette": "this.hostClasses", "attr.aria-disabled": "this.disabledClass", "class.k-disabled": "this.disabledClass", "attr.aria-readonly": "this.readonlyAttribute" } }, providers: [
387
396
  {
388
397
  multi: true,
389
398
  provide: NG_VALUE_ACCESSOR,
@@ -415,7 +424,7 @@ ColorPaletteComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0",
415
424
  role="gridcell"
416
425
  [class.k-selected]="selectedCell?.row === rowIndex && selectedCell?.col === colIndex"
417
426
  [class.k-focus]="focusInComponent && focusedCell?.row === rowIndex && focusedCell?.col === colIndex"
418
- [attr.aria-selected]="selectedCell?.row === rowIndex && selectedCell?.col === colIndex"
427
+ [attr.aria-selected]="selectedCell?.row === rowIndex && selectedCell?.col === colIndex ? 'true' : undefined"
419
428
  [attr.aria-label]="color"
420
429
  class="k-colorpalette-tile"
421
430
  [id]="'k-' + rowIndex + '-' + colIndex + '-' + uniqueId"
@@ -471,7 +480,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
471
480
  role="gridcell"
472
481
  [class.k-selected]="selectedCell?.row === rowIndex && selectedCell?.col === colIndex"
473
482
  [class.k-focus]="focusInComponent && focusedCell?.row === rowIndex && focusedCell?.col === colIndex"
474
- [attr.aria-selected]="selectedCell?.row === rowIndex && selectedCell?.col === colIndex"
483
+ [attr.aria-selected]="selectedCell?.row === rowIndex && selectedCell?.col === colIndex ? 'true' : undefined"
475
484
  [attr.aria-label]="color"
476
485
  class="k-colorpalette-tile"
477
486
  [id]="'k-' + rowIndex + '-' + colIndex + '-' + uniqueId"
@@ -541,13 +550,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
541
550
  }], readonlyAttribute: [{
542
551
  type: HostBinding,
543
552
  args: ['attr.aria-readonly']
544
- }], handleKeydown: [{
545
- type: HostListener,
546
- args: ['keydown', ['$event']]
547
- }], handleFocus: [{
548
- type: HostListener,
549
- args: ['focus', ['$event']]
550
- }], handleHostBlur: [{
551
- type: HostListener,
552
- args: ['blur']
553
553
  }] } });
@@ -492,6 +492,7 @@ export class ColorPickerComponent {
492
492
  open = isPresent(open) ? open : !this.isOpen;
493
493
  if (open) {
494
494
  this.openPopup();
495
+ this.focusFirstElement();
495
496
  }
496
497
  }
497
498
  /**
@@ -622,9 +623,9 @@ export class ColorPickerComponent {
622
623
  focusFirstElement() {
623
624
  this.ngZone.onStable.pipe(take(1)).subscribe(() => {
624
625
  if (this.flatColorPicker) {
625
- const gradient = this.flatColorPicker.gradient;
626
- const elementToFocus = gradient ? gradient.gradientDragHandle :
627
- this.flatColorPicker.palette.host;
626
+ const gradientDragHandle = this.flatColorPicker.gradient?.gradientDragHandle;
627
+ const palette = this.flatColorPicker.palette?.host;
628
+ const elementToFocus = gradientDragHandle ? gradientDragHandle : palette;
628
629
  elementToFocus.nativeElement.focus();
629
630
  }
630
631
  });
@@ -818,7 +819,6 @@ ColorPickerComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", v
818
819
  kendoButton
819
820
  tabindex="-1"
820
821
  type="button"
821
- role="none"
822
822
  icon="caret-alt-down"
823
823
  [svgIcon]="arrowDownIcon"
824
824
  aria-hidden="true"
@@ -942,7 +942,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
942
942
  kendoButton
943
943
  tabindex="-1"
944
944
  type="button"
945
- role="none"
946
945
  icon="caret-alt-down"
947
946
  [svgIcon]="arrowDownIcon"
948
947
  aria-hidden="true"
@@ -57,7 +57,7 @@ export class FlatColorPickerHeaderComponent {
57
57
  onHeaderTabOut(ev, index) {
58
58
  if (index === 0) {
59
59
  ev.preventDefault();
60
- this.tabOut.emit();
60
+ this.tabOut.emit(ev);
61
61
  }
62
62
  }
63
63
  }
@@ -66,7 +66,9 @@ FlatColorPickerHeaderComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "
66
66
  <div class="k-coloreditor-header-actions k-hstack">
67
67
  <div
68
68
  *ngIf="viewButtons"
69
- class="k-button-group k-button-group-flat">
69
+ class="k-button-group k-button-group-flat"
70
+ role="group"
71
+ >
70
72
  <button
71
73
  *ngFor="let view of views; let i = index;"
72
74
  kendoButton
@@ -125,7 +127,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
125
127
  <div class="k-coloreditor-header-actions k-hstack">
126
128
  <div
127
129
  *ngIf="viewButtons"
128
- class="k-button-group k-button-group-flat">
130
+ class="k-button-group k-button-group-flat"
131
+ role="group"
132
+ >
129
133
  <button
130
134
  *ngFor="let view of views; let i = index;"
131
135
  kendoButton
@@ -240,15 +240,6 @@ export class FlatColorPickerComponent {
240
240
  }
241
241
  return this.activeView === 'gradient' ? this.gradient : this.palette;
242
242
  }
243
- /**
244
- * @hidden
245
- */
246
- get lastFocusable() {
247
- if (this.preview) {
248
- return this.footer.lastButton.nativeElement;
249
- }
250
- return this.activeView === 'gradient' ? this.gradient : this.palette;
251
- }
252
243
  ngOnInit() {
253
244
  this.selection = this.value;
254
245
  this.control = this.injector.get(NgControl, null);
@@ -276,6 +267,30 @@ export class FlatColorPickerComponent {
276
267
  }
277
268
  this.subscriptions.unsubscribe();
278
269
  }
270
+ /**
271
+ * @hidden
272
+ */
273
+ focusFirstHeaderButton() {
274
+ if (this.gradientElement.nativeElement === document.activeElement) {
275
+ if (this.headerHasContent && !this.preview) {
276
+ const firstHeaderButton = this.headerElement.nativeElement.querySelector('.k-button');
277
+ firstHeaderButton.focus();
278
+ }
279
+ }
280
+ }
281
+ /**
282
+ * @hidden
283
+ */
284
+ lastFocusable(event) {
285
+ if (this.preview) {
286
+ this.footer.lastButton.nativeElement.focus();
287
+ return;
288
+ }
289
+ event.stopImmediatePropagation();
290
+ const gradient = this.gradientElement?.nativeElement;
291
+ const palette = this.palette?.host.nativeElement;
292
+ this.activeView === 'gradient' ? gradient.focus() : palette.focus();
293
+ }
279
294
  /**
280
295
  * @hidden
281
296
  */
@@ -358,8 +373,6 @@ export class FlatColorPickerComponent {
358
373
  */
359
374
  onClearButtonClick() {
360
375
  this.resetInnerComponentValue();
361
- this.internalNavigation = false;
362
- this.host.nativeElement.focus();
363
376
  this.clearButtonClick.emit();
364
377
  }
365
378
  /**
@@ -549,7 +562,7 @@ FlatColorPickerComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0
549
562
  hexInputPlaceholder="HEX">
550
563
  </ng-container>
551
564
  <div kendoFlatColorPickerHeader
552
- [innerTabIndex]="this.innerTabIndex"
565
+ [innerTabIndex]="innerTabIndex"
553
566
  *ngIf="headerHasContent"
554
567
  #header
555
568
  [clearButton]="clearButton"
@@ -561,7 +574,7 @@ FlatColorPickerComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0
561
574
  (clearButtonClick)="onClearButtonClick()"
562
575
  (viewChange)="onViewChange($event)"
563
576
  (valuePaneClick)="resetSelection($event)"
564
- (tabOut)="lastFocusable.focus()"></div>
577
+ (tabOut)="lastFocusable($event)"></div>
565
578
  <div class="k-coloreditor-views k-vstack">
566
579
  <kendo-colorgradient #gradient
567
580
  [tabindex]="innerTabIndex"
@@ -574,6 +587,7 @@ FlatColorPickerComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0
574
587
  [gradientSliderSmallStep]="gradientSettings.gradientSliderSmallStep"
575
588
  [gradientSliderStep]="gradientSettings.gradientSliderStep"
576
589
  [readonly]="readonly"
590
+ (keydown.tab)="focusFirstHeaderButton()"
577
591
  (valueChange)="handleValueChange($event)"
578
592
  ></kendo-colorgradient>
579
593
  <kendo-colorpalette #palette
@@ -672,7 +686,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
672
686
  hexInputPlaceholder="HEX">
673
687
  </ng-container>
674
688
  <div kendoFlatColorPickerHeader
675
- [innerTabIndex]="this.innerTabIndex"
689
+ [innerTabIndex]="innerTabIndex"
676
690
  *ngIf="headerHasContent"
677
691
  #header
678
692
  [clearButton]="clearButton"
@@ -684,7 +698,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
684
698
  (clearButtonClick)="onClearButtonClick()"
685
699
  (viewChange)="onViewChange($event)"
686
700
  (valuePaneClick)="resetSelection($event)"
687
- (tabOut)="lastFocusable.focus()"></div>
701
+ (tabOut)="lastFocusable($event)"></div>
688
702
  <div class="k-coloreditor-views k-vstack">
689
703
  <kendo-colorgradient #gradient
690
704
  [tabindex]="innerTabIndex"
@@ -697,6 +711,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
697
711
  [gradientSliderSmallStep]="gradientSettings.gradientSliderSmallStep"
698
712
  [gradientSliderStep]="gradientSettings.gradientSliderStep"
699
713
  [readonly]="readonly"
714
+ (keydown.tab)="focusFirstHeaderButton()"
700
715
  (valueChange)="handleValueChange($event)"
701
716
  ></kendo-colorgradient>
702
717
  <kendo-colorpalette #palette
@@ -9,7 +9,7 @@ export const packageMetadata = {
9
9
  name: '@progress/kendo-angular-inputs',
10
10
  productName: 'Kendo UI for Angular',
11
11
  productCodes: ['KENDOUIANGULAR', 'KENDOUICOMPLETE'],
12
- publishDate: 1676463662,
13
- version: '11.3.0-develop.1',
12
+ publishDate: 1677599249,
13
+ version: '11.3.0-develop.11',
14
14
  licensingDocsUrl: 'https://www.telerik.com/kendo-angular-ui/my-license/'
15
15
  };
@@ -2,17 +2,6 @@
2
2
  * Copyright © 2023 Progress Software Corporation. All rights reserved.
3
3
  * Licensed under commercial license. See LICENSE.md in the project root for more information
4
4
  *-------------------------------------------------------------------------------------------*/
5
- import { detectDesktopBrowser, detectMobileOS } from "@progress/kendo-common";
6
- /**
7
- * @hidden
8
- *
9
- * Returns true if the used browser is Safari.
10
- */
11
- export const isSafari = (userAgent) => {
12
- const desktopBrowser = detectDesktopBrowser(userAgent);
13
- const mobileOS = detectMobileOS(userAgent);
14
- return (desktopBrowser && desktopBrowser.safari) || (mobileOS && mobileOS.browser === 'mobilesafari');
15
- };
16
5
  /**
17
6
  * @hidden
18
7
  *
@@ -12,6 +12,7 @@ import { isNone, isPresent, ROUNDED_MAP, SIZE_MAP } from '../common/utils';
12
12
  import { packageMetadata } from '../package-metadata';
13
13
  import { SignatureCloseEvent, SignatureOpenEvent } from './events';
14
14
  import { xIcon, hyperlinkOpenIcon } from '@progress/kendo-svg-icons';
15
+ import { take } from 'rxjs/operators';
15
16
  import * as i0 from "@angular/core";
16
17
  import * as i1 from "@progress/kendo-angular-l10n";
17
18
  import * as i2 from "@progress/kendo-angular-buttons";
@@ -19,6 +20,8 @@ import * as i3 from "@progress/kendo-angular-dialog";
19
20
  import * as i4 from "./localization/localized-signature-messages.directive";
20
21
  import * as i5 from "@angular/common";
21
22
  const noop = () => { };
23
+ let _id = 0;
24
+ const nextId = () => 'k-signature-focusable-' + _id++;
22
25
  const FOCUSED_CLASS = 'k-focus';
23
26
  const DEFAULT_SIZE = 'medium';
24
27
  const DEFAULT_ROUNDED = 'medium';
@@ -41,6 +44,10 @@ export class SignatureComponent {
41
44
  this.cd = cd;
42
45
  this.localization = localization;
43
46
  this.staticHostClasses = true;
47
+ /**
48
+ * @hidden
49
+ */
50
+ this.focusableId = nextId();
44
51
  /**
45
52
  * Sets the read-only state of the Signature.
46
53
  *
@@ -319,7 +326,10 @@ export class SignatureComponent {
319
326
  return;
320
327
  }
321
328
  this.applyHostClasses();
322
- this.readThemeColors();
329
+ this.ngZone.onStable.pipe(take(1)).subscribe(() => {
330
+ this.readThemeColors();
331
+ this.instance.setOptions(this.options);
332
+ });
323
333
  this.ngZone.runOutsideAngular(() => {
324
334
  const element = this.canvas.nativeElement;
325
335
  this.instance = new SignaturePad(element, {
@@ -331,6 +341,11 @@ export class SignatureComponent {
331
341
  if (this.value) {
332
342
  this.instance.loadImage(this.value);
333
343
  }
344
+ if (this.maximized) {
345
+ this.ngZone.onStable.pipe(take(1)).subscribe(() => {
346
+ this.minimizeButton?.nativeElement.focus();
347
+ });
348
+ }
334
349
  this.addEventListeners();
335
350
  });
336
351
  }
@@ -412,7 +427,9 @@ export class SignatureComponent {
412
427
  this.close.next(args);
413
428
  if (!args.isDefaultPrevented()) {
414
429
  this.isOpen = false;
415
- this.maximizeButton?.nativeElement.focus();
430
+ this.ngZone.onStable.pipe(take(1)).subscribe(() => {
431
+ (this.maximizeButton || this.element)?.nativeElement?.focus();
432
+ });
416
433
  }
417
434
  }
418
435
  /**
@@ -584,11 +601,11 @@ export class SignatureComponent {
584
601
  }
585
602
  }
586
603
  SignatureComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: SignatureComponent, deps: [{ token: i0.ElementRef }, { token: i0.Renderer2 }, { token: i0.NgZone }, { token: i0.ChangeDetectorRef }, { token: i1.LocalizationService }], target: i0.ɵɵFactoryTarget.Component });
587
- SignatureComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.12", type: SignatureComponent, selector: "kendo-signature", inputs: { readonly: "readonly", disabled: "disabled", width: "width", height: "height", value: "value", tabindex: "tabindex", size: "size", rounded: "rounded", fillMode: "fillMode", color: "color", backgroundColor: "backgroundColor", strokeWidth: "strokeWidth", smooth: "smooth", maximizable: "maximizable", maximized: "maximized", popupScale: "popupScale", exportScale: "exportScale", parentLocalization: "parentLocalization", hideLine: "hideLine" }, outputs: { valueChange: "valueChange", open: "open", close: "close", onFocus: "focus", onBlur: "blur", minimize: "minimize" }, host: { properties: { "class.k-signature": "this.staticHostClasses", "class.k-input": "this.staticHostClasses", "attr.dir": "this.direction", "class.k-readonly": "this.readonly", "class.k-disabled": "this.disabled", "style.width.px": "this.width", "style.height.px": "this.height" } }, providers: [
604
+ SignatureComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.12", type: SignatureComponent, selector: "kendo-signature", inputs: { focusableId: "focusableId", readonly: "readonly", disabled: "disabled", width: "width", height: "height", value: "value", tabindex: "tabindex", size: "size", rounded: "rounded", fillMode: "fillMode", color: "color", backgroundColor: "backgroundColor", strokeWidth: "strokeWidth", smooth: "smooth", maximizable: "maximizable", maximized: "maximized", popupScale: "popupScale", exportScale: "exportScale", parentLocalization: "parentLocalization", hideLine: "hideLine" }, outputs: { valueChange: "valueChange", open: "open", close: "close", onFocus: "focus", onBlur: "blur", minimize: "minimize" }, host: { properties: { "class.k-signature": "this.staticHostClasses", "class.k-input": "this.staticHostClasses", "attr.dir": "this.direction", "class.k-readonly": "this.readonly", "class.k-disabled": "this.disabled", "style.width.px": "this.width", "style.height.px": "this.height" } }, providers: [
588
605
  LocalizationService,
589
606
  { provide: L10N_PREFIX, useValue: 'kendo.signature' },
590
607
  { multi: true, provide: NG_VALUE_ACCESSOR, useExisting: forwardRef(() => SignatureComponent) }
591
- ], viewQueries: [{ propertyName: "maximizeButton", first: true, predicate: ["maximizeButton"], descendants: true, read: ElementRef }, { propertyName: "canvas", first: true, predicate: ["canvas"], descendants: true }], exportAs: ["kendoSignature"], usesOnChanges: true, ngImport: i0, template: `
608
+ ], viewQueries: [{ propertyName: "canvas", first: true, predicate: ["canvas"], descendants: true }, { propertyName: "minimizeButton", first: true, predicate: ["minimize"], descendants: true, read: ElementRef }, { propertyName: "maximizeButton", first: true, predicate: ["maximize"], descendants: true, read: ElementRef }], exportAs: ["kendoSignature"], usesOnChanges: true, ngImport: i0, template: `
592
609
  <ng-container kendoSignatureLocalizedMessages
593
610
  i18n-clear="kendo.signature.clear|The message for the Clear button."
594
611
  clear="Clear"
@@ -600,10 +617,19 @@ SignatureComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", ver
600
617
  canvasLabel="Signature canvas">
601
618
  </ng-container>
602
619
 
620
+ <div
621
+ #canvas
622
+ class="k-signature-canvas"
623
+ [attr.tabindex]="tabindex"
624
+ [id]="focusableId"
625
+ role="img"
626
+ [attr.aria-label]="canvasLabel"
627
+ ></div>
628
+
603
629
  <div class="k-signature-actions k-signature-actions-top">
604
630
  <button
631
+ #maximize
605
632
  *ngIf="showMaximize"
606
- #maximizeButton
607
633
  kendoButton
608
634
  class="k-signature-action k-signature-maximize"
609
635
  icon="hyperlink-open"
@@ -615,6 +641,7 @@ SignatureComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", ver
615
641
  [title]="maximizeTitle">
616
642
  </button>
617
643
  <button
644
+ #minimize
618
645
  *ngIf="showMinimize"
619
646
  kendoButton
620
647
  class="k-signature-action k-signature-minimize k-rotate-180"
@@ -627,13 +654,6 @@ SignatureComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", ver
627
654
  [title]="minimizeTitle">
628
655
  </button>
629
656
  </div>
630
- <div
631
- #canvas
632
- class="k-signature-canvas"
633
- [attr.tabindex]="tabindex"
634
- role="img"
635
- [attr.aria-label]="canvasLabel"
636
- ></div>
637
657
  <div
638
658
  *ngIf="!hideLine"
639
659
  class="k-signature-line"
@@ -677,10 +697,11 @@ SignatureComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", ver
677
697
  [width]="popupWidth"
678
698
  [height]="popupHeight"
679
699
  [popupScale]="popupScale"
700
+ [exportScale]="(1 / popupScale) * exportScale"
680
701
  [parentLocalization]="localization">
681
702
  </kendo-signature>
682
703
  </kendo-dialog>
683
- `, isInline: true, components: [{ type: i2.Button, selector: "button[kendoButton], span[kendoButton], kendo-button", inputs: ["toggleable", "togglable", "selected", "tabIndex", "imageUrl", "iconClass", "icon", "disabled", "size", "rounded", "fillMode", "themeColor", "svgIcon", "role", "primary", "look"], outputs: ["selectedChange", "click"], exportAs: ["kendoButton"] }, { type: i3.DialogComponent, selector: "kendo-dialog", inputs: ["actions", "actionsLayout", "autoFocusedElement", "title", "width", "minWidth", "maxWidth", "height", "minHeight", "maxHeight", "animation", "themeColor"], outputs: ["action", "close"], exportAs: ["kendoDialog"] }, { type: SignatureComponent, selector: "kendo-signature", inputs: ["readonly", "disabled", "width", "height", "value", "tabindex", "size", "rounded", "fillMode", "color", "backgroundColor", "strokeWidth", "smooth", "maximizable", "maximized", "popupScale", "exportScale", "parentLocalization", "hideLine"], outputs: ["valueChange", "open", "close", "focus", "blur", "minimize"], exportAs: ["kendoSignature"] }], directives: [{ type: i4.LocalizedSignatureMessagesDirective, selector: "[kendoSignatureLocalizedMessages]" }, { type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
704
+ `, isInline: true, components: [{ type: i2.Button, selector: "button[kendoButton], span[kendoButton], kendo-button", inputs: ["toggleable", "togglable", "selected", "tabIndex", "imageUrl", "iconClass", "icon", "disabled", "size", "rounded", "fillMode", "themeColor", "svgIcon", "role", "primary", "look"], outputs: ["selectedChange", "click"], exportAs: ["kendoButton"] }, { type: i3.DialogComponent, selector: "kendo-dialog", inputs: ["actions", "actionsLayout", "autoFocusedElement", "title", "width", "minWidth", "maxWidth", "height", "minHeight", "maxHeight", "animation", "themeColor"], outputs: ["action", "close"], exportAs: ["kendoDialog"] }, { type: SignatureComponent, selector: "kendo-signature", inputs: ["focusableId", "readonly", "disabled", "width", "height", "value", "tabindex", "size", "rounded", "fillMode", "color", "backgroundColor", "strokeWidth", "smooth", "maximizable", "maximized", "popupScale", "exportScale", "parentLocalization", "hideLine"], outputs: ["valueChange", "open", "close", "focus", "blur", "minimize"], exportAs: ["kendoSignature"] }], directives: [{ type: i4.LocalizedSignatureMessagesDirective, selector: "[kendoSignatureLocalizedMessages]" }, { type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
684
705
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: SignatureComponent, decorators: [{
685
706
  type: Component,
686
707
  args: [{
@@ -704,10 +725,19 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
704
725
  canvasLabel="Signature canvas">
705
726
  </ng-container>
706
727
 
728
+ <div
729
+ #canvas
730
+ class="k-signature-canvas"
731
+ [attr.tabindex]="tabindex"
732
+ [id]="focusableId"
733
+ role="img"
734
+ [attr.aria-label]="canvasLabel"
735
+ ></div>
736
+
707
737
  <div class="k-signature-actions k-signature-actions-top">
708
738
  <button
739
+ #maximize
709
740
  *ngIf="showMaximize"
710
- #maximizeButton
711
741
  kendoButton
712
742
  class="k-signature-action k-signature-maximize"
713
743
  icon="hyperlink-open"
@@ -719,6 +749,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
719
749
  [title]="maximizeTitle">
720
750
  </button>
721
751
  <button
752
+ #minimize
722
753
  *ngIf="showMinimize"
723
754
  kendoButton
724
755
  class="k-signature-action k-signature-minimize k-rotate-180"
@@ -731,13 +762,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
731
762
  [title]="minimizeTitle">
732
763
  </button>
733
764
  </div>
734
- <div
735
- #canvas
736
- class="k-signature-canvas"
737
- [attr.tabindex]="tabindex"
738
- role="img"
739
- [attr.aria-label]="canvasLabel"
740
- ></div>
741
765
  <div
742
766
  *ngIf="!hideLine"
743
767
  class="k-signature-line"
@@ -781,6 +805,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
781
805
  [width]="popupWidth"
782
806
  [height]="popupHeight"
783
807
  [popupScale]="popupScale"
808
+ [exportScale]="(1 / popupScale) * exportScale"
784
809
  [parentLocalization]="localization">
785
810
  </kendo-signature>
786
811
  </kendo-dialog>
@@ -792,12 +817,11 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
792
817
  }, {
793
818
  type: HostBinding,
794
819
  args: ['class.k-input']
820
+ }], focusableId: [{
821
+ type: Input
795
822
  }], direction: [{
796
823
  type: HostBinding,
797
824
  args: ['attr.dir']
798
- }], maximizeButton: [{
799
- type: ViewChild,
800
- args: ['maximizeButton', { read: ElementRef }]
801
825
  }], readonly: [{
802
826
  type: HostBinding,
803
827
  args: ['class.k-readonly']
@@ -865,4 +889,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
865
889
  }], canvas: [{
866
890
  type: ViewChild,
867
891
  args: ['canvas']
892
+ }], minimizeButton: [{
893
+ type: ViewChild,
894
+ args: ['minimize', { read: ElementRef }]
895
+ }], maximizeButton: [{
896
+ type: ViewChild,
897
+ args: ['maximize', { read: ElementRef }]
868
898
  }] } });
@@ -11,11 +11,10 @@ import { validatePackage } from '@progress/kendo-licensing';
11
11
  import { packageMetadata } from '../package-metadata';
12
12
  import { invokeElementMethod } from '../common/dom-utils';
13
13
  import { areSame, requiresZoneOnBlur, getStylingClasses } from '../common/utils';
14
- import { guid, hasObservers, KendoInput, Keys } from '@progress/kendo-angular-common';
14
+ import { guid, hasObservers, KendoInput, Keys, isSafari } from '@progress/kendo-angular-common';
15
15
  import { TextBoxSuffixTemplateDirective } from './textbox-suffix.directive';
16
16
  import { TextBoxPrefixTemplateDirective } from './textbox-prefix.directive';
17
17
  import { LocalizationService, L10N_PREFIX } from '@progress/kendo-angular-l10n';
18
- import { isSafari } from '../shared/utils';
19
18
  import { checkIcon, exclamationCircleIcon, xIcon } from '@progress/kendo-svg-icons';
20
19
  import * as i0 from "@angular/core";
21
20
  import * as i1 from "@progress/kendo-angular-l10n";