@clr/angular 13.4.1 → 13.6.0

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.
Files changed (53) hide show
  1. package/clarity.api.md +10 -67
  2. package/data/datagrid/datagrid-action-overflow.d.ts +2 -1
  3. package/data/datagrid/datagrid-row.d.ts +12 -1
  4. package/data/datagrid/datagrid.d.ts +4 -2
  5. package/data/datagrid/datagrid.module.d.ts +4 -3
  6. package/data/datagrid/providers/selection.d.ts +8 -0
  7. package/esm2020/accordion/stepper/stepper.mjs +16 -5
  8. package/esm2020/data/data.module.mjs +4 -2
  9. package/esm2020/data/datagrid/datagrid-action-overflow.mjs +24 -15
  10. package/esm2020/data/datagrid/datagrid-row.mjs +68 -14
  11. package/esm2020/data/datagrid/datagrid.mjs +24 -5
  12. package/esm2020/data/datagrid/datagrid.module.mjs +5 -2
  13. package/esm2020/data/datagrid/providers/selection.mjs +5 -1
  14. package/esm2020/emphasis/emphasis.module.mjs +4 -2
  15. package/esm2020/forms/checkbox/checkbox.module.mjs +1 -2
  16. package/esm2020/forms/common/common.module.mjs +1 -2
  17. package/esm2020/forms/datepicker/datepicker.module.mjs +1 -2
  18. package/esm2020/forms/input/input.module.mjs +1 -2
  19. package/esm2020/forms/password/password.module.mjs +1 -2
  20. package/esm2020/forms/radio/radio.module.mjs +1 -2
  21. package/esm2020/forms/range/range.module.mjs +1 -2
  22. package/esm2020/forms/select/select.module.mjs +1 -2
  23. package/esm2020/forms/textarea/textarea.module.mjs +1 -2
  24. package/esm2020/icon/icon.module.mjs +6 -2
  25. package/esm2020/layout/layout.module.mjs +4 -2
  26. package/esm2020/popover/popover.module.mjs +4 -2
  27. package/esm2020/utils/conditional/conditional.module.mjs +6 -2
  28. package/esm2020/utils/drag-and-drop/drag-and-drop.module.mjs +1 -2
  29. package/esm2020/utils/focus/key-focus/index.mjs +8 -0
  30. package/esm2020/utils/host-wrapping/host-wrapping.module.mjs +5 -2
  31. package/esm2020/utils/index.mjs +1 -2
  32. package/esm2020/utils/loading/loading.module.mjs +6 -2
  33. package/esm2020/utils/outside-click/outside-click.module.mjs +6 -2
  34. package/esm2020/utils/template-ref/template-ref.module.mjs +1 -2
  35. package/fesm2015/clr-angular.mjs +160 -261
  36. package/fesm2015/clr-angular.mjs.map +1 -1
  37. package/fesm2020/clr-angular.mjs +158 -269
  38. package/fesm2020/clr-angular.mjs.map +1 -1
  39. package/package.json +5 -5
  40. package/utils/focus/key-focus/index.d.ts +2 -0
  41. package/utils/index.d.ts +0 -1
  42. package/esm2020/utils/list-key-navigation/index.mjs +0 -10
  43. package/esm2020/utils/list-key-navigation/key-navigation-list.mjs +0 -120
  44. package/esm2020/utils/list-key-navigation/key-navigation-list.module.mjs +0 -24
  45. package/esm2020/utils/list-key-navigation/providers/focusable-items.mjs +0 -25
  46. package/esm2020/utils/list-key-navigation/providers/key-navigation-list.config.mjs +0 -19
  47. package/esm2020/utils/list-key-navigation/utils.mjs +0 -46
  48. package/utils/list-key-navigation/index.d.ts +0 -4
  49. package/utils/list-key-navigation/key-navigation-list.d.ts +0 -30
  50. package/utils/list-key-navigation/key-navigation-list.module.d.ts +0 -7
  51. package/utils/list-key-navigation/providers/focusable-items.d.ts +0 -3
  52. package/utils/list-key-navigation/providers/key-navigation-list.config.d.ts +0 -3
  53. package/utils/list-key-navigation/utils.d.ts +0 -11
@@ -5,12 +5,12 @@ import { CommonModule, isPlatformBrowser, DOCUMENT, NgForOf, getLocaleDayNames,
5
5
  import { ClarityIcons, angleIcon, exclamationCircleIcon, checkCircleIcon, ellipsisHorizontalIcon, windowCloseIcon, eventIcon, calendarIcon, eyeHideIcon, eyeIcon, ellipsisVerticalIcon, viewColumnsIcon, arrowIcon, timesIcon, stepForward2Icon, angleDoubleIcon, filterGridCircleIcon, filterGridIcon, infoCircleIcon, exclamationTriangleIcon, circleIcon, dotCircleIcon, errorStandardIcon, successStandardIcon } from '@cds/core/icon';
6
6
  import { map, tap, startWith, distinctUntilChanged, pairwise, filter, debounceTime, takeUntil, take, first, switchMap } from 'rxjs/operators';
7
7
  import * as i3 from 'rxjs';
8
- import { Subject, BehaviorSubject, fromEvent, isObservable, of, ReplaySubject, combineLatest, Observable } from 'rxjs';
8
+ import { Subject, BehaviorSubject, Observable, fromEvent, isObservable, of, ReplaySubject, combineLatest } from 'rxjs';
9
9
  import { trigger, transition, style, animate, keyframes, state } from '@angular/animations';
10
10
  import * as i1 from '@angular/forms';
11
11
  import { FormControl, FormGroup, FormsModule, SelectMultipleControlValueAccessor } from '@angular/forms';
12
- import { KeyNavigationCode, initializeKeyListItems, validKeyNavigationCode, setActiveKeyListItem, getFlattenedFocusableItems, focusElement, FocusTrapTrackerService, createId, isFocusable, isHTMLElement } from '@cds/core/internal';
13
12
  import * as i1$1 from '@angular/router';
13
+ import { FocusTrapTrackerService, createId, isFocusable, isHTMLElement } from '@cds/core/internal';
14
14
  import '@cds/core/internal-components/close-button/register.js';
15
15
  import '@cds/core/icon/register';
16
16
 
@@ -53,7 +53,11 @@ ClrIconModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "12.0.0", version:
53
53
  ClrIconModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "13.0.3", ngImport: i0, type: ClrIconModule, imports: [[CommonModule]] });
54
54
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.3", ngImport: i0, type: ClrIconModule, decorators: [{
55
55
  type: NgModule,
56
- args: [{ imports: [CommonModule], declarations: [CLR_ICON_DIRECTIVES], exports: [CLR_ICON_DIRECTIVES] }]
56
+ args: [{
57
+ imports: [CommonModule],
58
+ declarations: [CLR_ICON_DIRECTIVES],
59
+ exports: [CLR_ICON_DIRECTIVES],
60
+ }]
57
61
  }] });
58
62
 
59
63
  /*
@@ -1192,9 +1196,7 @@ class ClrStepper {
1192
1196
  this.subscriptions.forEach(s => s.unsubscribe());
1193
1197
  }
1194
1198
  listenForFormResetChanges() {
1195
- return this.form.statusChanges
1196
- .pipe(filter(() => this.form.pristine)) // https://github.com/angular/angular/issues/10887
1197
- .subscribe(() => this.stepperService.resetPanels());
1199
+ return fromControlReset(this.form.form).subscribe(() => this.stepperService.resetPanels());
1198
1200
  }
1199
1201
  listenForPanelsCompleted() {
1200
1202
  return this.stepperService.panelsCompleted.subscribe(panelsCompleted => {
@@ -1244,6 +1246,18 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.3", ngImpor
1244
1246
  type: ContentChildren,
1245
1247
  args: [ClrStepperPanel, { descendants: true }]
1246
1248
  }] } });
1249
+ function fromControlReset(control) {
1250
+ return new Observable(observer => {
1251
+ const unpatchedControlReset = control.reset;
1252
+ control.reset = () => {
1253
+ observer.next();
1254
+ unpatchedControlReset.apply(control);
1255
+ };
1256
+ return () => {
1257
+ control.reset = unpatchedControlReset;
1258
+ };
1259
+ });
1260
+ }
1247
1261
 
1248
1262
  /*
1249
1263
  * Copyright (c) 2016-2022 VMware, Inc. All Rights Reserved.
@@ -2962,7 +2976,10 @@ ClrHostWrappingModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "12.0.0", v
2962
2976
  ClrHostWrappingModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "13.0.3", ngImport: i0, type: ClrHostWrappingModule });
2963
2977
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.3", ngImport: i0, type: ClrHostWrappingModule, decorators: [{
2964
2978
  type: NgModule,
2965
- args: [{ declarations: [EmptyAnchor], exports: [EmptyAnchor], entryComponents: [EmptyAnchor] }]
2979
+ args: [{
2980
+ declarations: [EmptyAnchor],
2981
+ exports: [EmptyAnchor],
2982
+ }]
2966
2983
  }] });
2967
2984
 
2968
2985
  /*
@@ -4108,7 +4125,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.3", ngImpor
4108
4125
  ClrControlContainer,
4109
4126
  ClrControl,
4110
4127
  ],
4111
- entryComponents: [ClrControlContainer],
4112
4128
  }]
4113
4129
  }], ctorParameters: function () { return []; } });
4114
4130
 
@@ -4343,7 +4359,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.3", ngImpor
4343
4359
  imports: [CommonModule, ClrIconModule, ClrCommonFormsModule, ClrHostWrappingModule],
4344
4360
  declarations: [ClrCheckbox, ClrCheckboxContainer, ClrCheckboxWrapper],
4345
4361
  exports: [ClrCommonFormsModule, ClrCheckbox, ClrCheckboxContainer, ClrCheckboxWrapper],
4346
- entryComponents: [ClrCheckboxWrapper],
4347
4362
  }]
4348
4363
  }], ctorParameters: function () { return []; } });
4349
4364
 
@@ -4831,7 +4846,11 @@ ClrConditionalModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "12.0.0", ve
4831
4846
  ClrConditionalModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "13.0.3", ngImport: i0, type: ClrConditionalModule, imports: [[CommonModule]] });
4832
4847
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.3", ngImport: i0, type: ClrConditionalModule, decorators: [{
4833
4848
  type: NgModule,
4834
- args: [{ imports: [CommonModule], declarations: [CONDITIONAL_DIRECTIVES], exports: [CONDITIONAL_DIRECTIVES] }]
4849
+ args: [{
4850
+ imports: [CommonModule],
4851
+ declarations: [CONDITIONAL_DIRECTIVES],
4852
+ exports: [CONDITIONAL_DIRECTIVES],
4853
+ }]
4835
4854
  }] });
4836
4855
 
4837
4856
  /*
@@ -6734,7 +6753,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.3", ngImpor
6734
6753
  imports: [CommonModule, FormsModule, ClrIconModule, ClrCommonFormsModule],
6735
6754
  declarations: [ClrInput, ClrInputContainer],
6736
6755
  exports: [ClrCommonFormsModule, ClrInput, ClrInputContainer],
6737
- entryComponents: [ClrInputContainer],
6738
6756
  }]
6739
6757
  }], ctorParameters: function () { return []; } });
6740
6758
 
@@ -9433,7 +9451,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.3", ngImpor
9433
9451
  ],
9434
9452
  declarations: [CLR_DATEPICKER_DIRECTIVES],
9435
9453
  exports: [CLR_DATEPICKER_DIRECTIVES],
9436
- entryComponents: [ClrDateContainer],
9437
9454
  }]
9438
9455
  }], ctorParameters: function () { return []; } });
9439
9456
 
@@ -9667,7 +9684,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.3", ngImpor
9667
9684
  imports: [CommonModule, FormsModule, ClrIconModule, ClrCommonFormsModule],
9668
9685
  declarations: [ClrPassword, ClrPasswordContainer],
9669
9686
  exports: [ClrCommonFormsModule, ClrPassword, ClrPasswordContainer],
9670
- entryComponents: [ClrPasswordContainer],
9671
9687
  }]
9672
9688
  }], ctorParameters: function () { return []; } });
9673
9689
 
@@ -9868,7 +9884,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.3", ngImpor
9868
9884
  imports: [CommonModule, ClrCommonFormsModule, ClrHostWrappingModule, ClrIconModule],
9869
9885
  declarations: [ClrRadio, ClrRadioContainer, ClrRadioWrapper],
9870
9886
  exports: [ClrCommonFormsModule, ClrRadio, ClrRadioContainer, ClrRadioWrapper],
9871
- entryComponents: [ClrRadioWrapper],
9872
9887
  }]
9873
9888
  }], ctorParameters: function () { return []; } });
9874
9889
 
@@ -10024,7 +10039,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.3", ngImpor
10024
10039
  imports: [CommonModule, ClrCommonFormsModule, ClrHostWrappingModule, ClrIconModule],
10025
10040
  declarations: [ClrRange, ClrRangeContainer],
10026
10041
  exports: [ClrCommonFormsModule, ClrRange, ClrRangeContainer],
10027
- entryComponents: [ClrRangeContainer],
10028
10042
  }]
10029
10043
  }], ctorParameters: function () { return []; } });
10030
10044
 
@@ -10170,7 +10184,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.3", ngImpor
10170
10184
  imports: [CommonModule, FormsModule, ClrIconModule, ClrCommonFormsModule],
10171
10185
  declarations: [ClrSelect, ClrSelectContainer],
10172
10186
  exports: [ClrCommonFormsModule, ClrSelect, ClrSelectContainer],
10173
- entryComponents: [ClrSelectContainer],
10174
10187
  }]
10175
10188
  }], ctorParameters: function () { return []; } });
10176
10189
 
@@ -10291,7 +10304,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.3", ngImpor
10291
10304
  imports: [CommonModule, FormsModule, ClrIconModule, ClrCommonFormsModule],
10292
10305
  declarations: [ClrTextarea, ClrTextareaContainer],
10293
10306
  exports: [ClrCommonFormsModule, ClrTextarea, ClrTextareaContainer],
10294
- entryComponents: [ClrTextareaContainer],
10295
10307
  }]
10296
10308
  }], ctorParameters: function () { return []; } });
10297
10309
 
@@ -11412,7 +11424,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.3", ngImpor
11412
11424
  args: [{
11413
11425
  imports: [CommonModule],
11414
11426
  declarations: [CLR_DRAG_AND_DROP_DIRECTIVES],
11415
- entryComponents: [ClrDraggableGhost],
11416
11427
  exports: [CLR_DRAG_AND_DROP_DIRECTIVES],
11417
11428
  }]
11418
11429
  }] });
@@ -11547,7 +11558,11 @@ ClrLoadingModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "12.0.0", versio
11547
11558
  ClrLoadingModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "13.0.3", ngImport: i0, type: ClrLoadingModule, imports: [[CommonModule]] });
11548
11559
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.3", ngImport: i0, type: ClrLoadingModule, decorators: [{
11549
11560
  type: NgModule,
11550
- args: [{ imports: [CommonModule], declarations: [CLR_LOADING_DIRECTIVES], exports: [CLR_LOADING_DIRECTIVES] }]
11561
+ args: [{
11562
+ imports: [CommonModule],
11563
+ declarations: [CLR_LOADING_DIRECTIVES],
11564
+ exports: [CLR_LOADING_DIRECTIVES],
11565
+ }]
11551
11566
  }] });
11552
11567
 
11553
11568
  /*
@@ -11615,7 +11630,11 @@ ClrOutsideClickModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "12.0.0", v
11615
11630
  ClrOutsideClickModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "13.0.3", ngImport: i0, type: ClrOutsideClickModule, imports: [[CommonModule]] });
11616
11631
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.3", ngImport: i0, type: ClrOutsideClickModule, decorators: [{
11617
11632
  type: NgModule,
11618
- args: [{ imports: [CommonModule], declarations: [OUSTIDE_CLICK_DIRECTIVES], exports: [OUSTIDE_CLICK_DIRECTIVES] }]
11633
+ args: [{
11634
+ imports: [CommonModule],
11635
+ declarations: [OUSTIDE_CLICK_DIRECTIVES],
11636
+ exports: [OUSTIDE_CLICK_DIRECTIVES],
11637
+ }]
11619
11638
  }] });
11620
11639
 
11621
11640
  /*
@@ -14505,6 +14524,10 @@ class Selection {
14505
14524
  * Subscriptions to the other providers changes.
14506
14525
  */
14507
14526
  this.subscriptions = [];
14527
+ /**
14528
+ * Shift key state, for use in range selection.
14529
+ */
14530
+ this.shiftPressed = false;
14508
14531
  this.valueCollector = new Subject();
14509
14532
  /**
14510
14533
  * The Observable that lets other classes subscribe to selection changes
@@ -14887,7 +14910,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.3", ngImpor
14887
14910
  */
14888
14911
  let nbRow = 0;
14889
14912
  class ClrDatagridRow {
14890
- constructor(selection, rowActionService, globalExpandable, expand, detailService, displayMode, vcr, renderer, el, commonStrings) {
14913
+ constructor(selection, rowActionService, globalExpandable, expand, detailService, displayMode, vcr, renderer, el, commonStrings, items, document) {
14891
14914
  this.selection = selection;
14892
14915
  this.rowActionService = rowActionService;
14893
14916
  this.globalExpandable = globalExpandable;
@@ -14898,6 +14921,8 @@ class ClrDatagridRow {
14898
14921
  this.renderer = renderer;
14899
14922
  this.el = el;
14900
14923
  this.commonStrings = commonStrings;
14924
+ this.items = items;
14925
+ this.document = document;
14901
14926
  /* reference to the enum so that template can access */
14902
14927
  this.SELECTION_TYPE = SelectionType;
14903
14928
  this.expandAnimationTrigger = false;
@@ -14928,6 +14953,24 @@ class ClrDatagridRow {
14928
14953
  }
14929
14954
  }));
14930
14955
  }
14956
+ /**
14957
+ * The default behavior in Chrome and Firefox for shift-clicking on a label is to perform text-selection.
14958
+ * This prevents our intended range-selection, because this text-selection overrides our shift-click event.
14959
+ * We need to clear the stored selection range when shift-clicking. This will override the mostly unused shift-click
14960
+ * selection browser functionality, which is inconsistently implemented in browsers anyway.
14961
+ */
14962
+ clearRanges(event) {
14963
+ if (event.shiftKey) {
14964
+ this.document.getSelection().removeAllRanges();
14965
+ // Firefox is too persistent about its text-selection behaviour. So we need to add a preventDefault();
14966
+ // We should not try to enforce this on the other browsers, though, because their toggle cycle does not get canceled by
14967
+ // the preventDefault() and they toggle the checkbox second time, effectively retrurning it to not-selected.
14968
+ if (window.navigator.userAgent.indexOf('Firefox') !== -1) {
14969
+ event.preventDefault();
14970
+ this.toggle(true);
14971
+ }
14972
+ }
14973
+ }
14931
14974
  /**
14932
14975
  * Indicates if the row is selected
14933
14976
  */
@@ -14944,6 +14987,12 @@ class ClrDatagridRow {
14944
14987
  this._selected = value;
14945
14988
  }
14946
14989
  else {
14990
+ if (value && this.selection.selectionType === SelectionType.Multi) {
14991
+ this.rangeSelect();
14992
+ }
14993
+ else {
14994
+ this.selection.rangeStart = null;
14995
+ }
14947
14996
  this.selection.setSelected(this.item, value);
14948
14997
  }
14949
14998
  }
@@ -15031,6 +15080,29 @@ class ClrDatagridRow {
15031
15080
  this.expandAnimationTrigger = !this.expandAnimationTrigger;
15032
15081
  }));
15033
15082
  }
15083
+ rangeSelect() {
15084
+ const items = this.items.displayed;
15085
+ if (!items) {
15086
+ return;
15087
+ }
15088
+ const startIx = items.indexOf(this.selection.rangeStart);
15089
+ if (this.selection.rangeStart &&
15090
+ this.selection.current.includes(this.selection.rangeStart) &&
15091
+ this.selection.shiftPressed &&
15092
+ startIx !== -1) {
15093
+ const endIx = items.indexOf(this.item);
15094
+ // Using Set to remove duplicates
15095
+ const newSelection = new Set(this.selection.current.concat(items.slice(Math.min(startIx, endIx), Math.max(startIx, endIx) + 1)));
15096
+ this.selection.clearSelection();
15097
+ this.selection.current.push(...newSelection);
15098
+ }
15099
+ else {
15100
+ // page number has changed or
15101
+ // no Shift was pressed or
15102
+ // rangeStart not yet set
15103
+ this.selection.rangeStart = this.item;
15104
+ }
15105
+ }
15034
15106
  ngOnDestroy() {
15035
15107
  this.subscriptions.forEach((sub) => sub.unsubscribe());
15036
15108
  }
@@ -15042,12 +15114,12 @@ class ClrDatagridRow {
15042
15114
  return this.wrappedInjector.get(WrappedRow, this.vcr).rowView;
15043
15115
  }
15044
15116
  }
15045
- ClrDatagridRow.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.0.3", ngImport: i0, type: ClrDatagridRow, deps: [{ token: Selection }, { token: RowActionService }, { token: ExpandableRowsCount }, { token: DatagridIfExpandService }, { token: DetailService }, { token: DisplayModeService }, { token: i0.ViewContainerRef }, { token: i0.Renderer2 }, { token: i0.ElementRef }, { token: ClrCommonStringsService }], target: i0.ɵɵFactoryTarget.Component });
15117
+ ClrDatagridRow.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.0.3", ngImport: i0, type: ClrDatagridRow, deps: [{ token: Selection }, { token: RowActionService }, { token: ExpandableRowsCount }, { token: DatagridIfExpandService }, { token: DetailService }, { token: DisplayModeService }, { token: i0.ViewContainerRef }, { token: i0.Renderer2 }, { token: i0.ElementRef }, { token: ClrCommonStringsService }, { token: Items }, { token: DOCUMENT }], target: i0.ɵɵFactoryTarget.Component });
15046
15118
  ClrDatagridRow.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.0.3", type: ClrDatagridRow, selector: "clr-dg-row", inputs: { item: ["clrDgItem", "item"], selected: ["clrDgSelected", "selected"], clrDgSelectable: "clrDgSelectable", expanded: ["clrDgExpanded", "expanded"], clrDgDetailOpenLabel: "clrDgDetailOpenLabel", clrDgDetailCloseLabel: "clrDgDetailCloseLabel", clrDgRowAriaLabel: "clrDgRowAriaLabel" }, outputs: { selectedChanged: "clrDgSelectedChange", expandedChange: "clrDgExpandedChange" }, host: { attributes: { "role": "rowgroup" }, properties: { "class.datagrid-row": "true", "class.datagrid-selected": "selected", "attr.aria-owns": "id" } }, providers: [
15047
15119
  DatagridIfExpandService,
15048
15120
  { provide: IfExpandService, useExisting: DatagridIfExpandService },
15049
15121
  { provide: LoadingListener, useExisting: DatagridIfExpandService },
15050
- ], queries: [{ propertyName: "dgCells", predicate: ClrDatagridCell }], viewQueries: [{ propertyName: "expandAnimation", first: true, predicate: ClrExpandableAnimation, descendants: true }, { propertyName: "detailButton", first: true, predicate: ["detailButton"], descendants: true }, { propertyName: "_stickyCells", first: true, predicate: ["stickyCells"], descendants: true, read: ViewContainerRef }, { propertyName: "_scrollableCells", first: true, predicate: ["scrollableCells"], descendants: true, read: ViewContainerRef }, { propertyName: "_calculatedCells", first: true, predicate: ["calculatedCells"], descendants: true, read: ViewContainerRef }], ngImport: i0, template: "<!--\n We need to wrap the #rowContent in label element if we are in rowSelectionMode.\n Clicking of that wrapper label will equate to clicking on the whole row, which triggers the checkbox to toggle.\n-->\n<label class=\"datagrid-row-clickable\" *ngIf=\"selection.rowSelectionMode\">\n <clr-expandable-animation [clrExpandTrigger]=\"expandAnimationTrigger\" *ngIf=\"expand.expandable\">\n <ng-template [ngTemplateOutlet]=\"rowContent\"></ng-template>\n </clr-expandable-animation>\n <ng-template [ngTemplateOutlet]=\"rowContent\" *ngIf=\"!expand.expandable\"></ng-template>\n</label>\n\n<clr-expandable-animation\n *ngIf=\"!selection.rowSelectionMode && expand.expandable\"\n [clrExpandTrigger]=\"expandAnimationTrigger\"\n>\n <ng-template [ngTemplateOutlet]=\"rowContent\"></ng-template>\n</clr-expandable-animation>\n\n<ng-template *ngIf=\"!selection.rowSelectionMode && !expand.expandable\" [ngTemplateOutlet]=\"rowContent\"></ng-template>\n\n<!--\n We need the \"project into template\" hacks because we need this in 2 different places\n depending on whether the details replace the row or not.\n-->\n<ng-template #detail>\n <ng-content select=\"clr-dg-row-detail\"></ng-content>\n</ng-template>\n\n<ng-template #rowContent>\n <div\n role=\"row\"\n [id]=\"id\"\n class=\"datagrid-row-master datagrid-row-flex\"\n [class.datagrid-row-detail-open]=\"detailService.isRowOpen(item)\"\n >\n <div class=\"datagrid-row-sticky\">\n <!-- Sticky elements here -->\n <ng-container #stickyCells>\n <div\n *ngIf=\"selection.selectionType === SELECTION_TYPE.Multi\"\n class=\"datagrid-select datagrid-fixed-column datagrid-cell\"\n [ngClass]=\"{ 'clr-form-control-disabled': !clrDgSelectable }\"\n role=\"gridcell\"\n >\n <div class=\"clr-checkbox-wrapper\">\n <input\n type=\"checkbox\"\n [ngModel]=\"selected\"\n (ngModelChange)=\"toggle($event)\"\n [id]=\"checkboxId\"\n [attr.disabled]=\"clrDgSelectable ? null : true\"\n [attr.aria-disabled]=\"clrDgSelectable ? null : true\"\n [attr.aria-label]=\"clrDgRowAriaLabel\"\n />\n <!-- Usage of class clr-col-null here prevents clr-col-* classes from being added when a datagrid is wrapped inside clrForm -->\n <label [for]=\"checkboxId\" class=\"clr-control-label clr-col-null\">\n <span class=\"clr-sr-only\">{{commonStrings.keys.select}}</span>\n </label>\n </div>\n </div>\n <div\n *ngIf=\"selection.selectionType === SELECTION_TYPE.Single\"\n class=\"datagrid-select datagrid-fixed-column datagrid-cell\"\n role=\"gridcell\"\n [ngClass]=\"{ 'clr-form-control-disabled': !clrDgSelectable }\"\n >\n <!-- TODO: it would be better if in addition to the generic \"Select\" label, we could add aria-labelledby\n to label the radio by the first cell in the row (typically an id or name).\n It's pretty easy to label it with the whole row since we already have an id for it, but in most\n cases the row is far too long to serve as a label, the screenreader reads every single cell content. -->\n <input\n type=\"radio\"\n clrRadio\n [id]=\"radioId\"\n [name]=\"selection.id + '-radio'\"\n [value]=\"item\"\n [(ngModel)]=\"selection.currentSingle\"\n [checked]=\"selection.currentSingle === item\"\n [attr.disabled]=\"clrDgSelectable ? null : true\"\n [attr.aria-disabled]=\"clrDgSelectable ? null : true\"\n [attr.aria-label]=\"clrDgRowAriaLabel\"\n />\n </div>\n <div\n *ngIf=\"rowActionService.hasActionableRow\"\n class=\"datagrid-row-actions datagrid-fixed-column datagrid-cell\"\n role=\"gridcell\"\n >\n <ng-content select=\"clr-dg-action-overflow\"></ng-content>\n </div>\n <div\n *ngIf=\"globalExpandable.hasExpandableRow\"\n class=\"datagrid-expandable-caret datagrid-fixed-column datagrid-cell\"\n role=\"gridcell\"\n >\n <ng-container *ngIf=\"expand.expandable\">\n <button\n *ngIf=\"!expand.loading\"\n (click)=\"toggleExpand()\"\n type=\"button\"\n class=\"datagrid-expandable-caret-button\"\n [attr.aria-expanded]=\"expand.expanded\"\n [attr.aria-label]=\"expand.expanded ? clrDgDetailCloseLabel : clrDgDetailOpenLabel\"\n [attr.aria-controls]=\"expandableId\"\n >\n <cds-icon\n shape=\"angle\"\n class=\"datagrid-expandable-caret-icon\"\n [attr.direction]=\"expand.expanded ? 'down' : 'right'\"\n [attr.title]=\"expand.expanded ? commonStrings.keys.collapse : commonStrings.keys.expand\"\n ></cds-icon>\n </button>\n <clr-spinner *ngIf=\"expand.loading\" clrSmall>{{ commonStrings.keys.loading }}</clr-spinner>\n </ng-container>\n </div>\n <div *ngIf=\"detailService.enabled\" class=\"datagrid-detail-caret datagrid-fixed-column datagrid-cell\">\n <button\n (click)=\"detailService.toggle(item, detailButton)\"\n type=\"button\"\n #detailButton\n class=\"datagrid-detail-caret-button\"\n [class.is-open]=\"detailService.isRowOpen(item)\"\n [attr.aria-label]=\"detailService.isRowOpen(item) ? clrDgDetailCloseLabel : clrDgDetailOpenLabel\"\n [attr.aria-expanded]=\"detailService.isOpen\"\n [attr.aria-controls]=\"detailService.id\"\n aria-haspopup=\"dialog\"\n >\n <cds-icon\n shape=\"angle-double\"\n [attr.direction]=\"detailService.isRowOpen(item) ? 'left' : 'right'\"\n class=\"datagrid-detail-caret-icon\"\n [attr.title]=\"detailService.isRowOpen(item) ? commonStrings.keys.close: commonStrings.keys.open\"\n ></cds-icon>\n </button>\n </div>\n </ng-container>\n <!-- placeholder for projecting other sticky cells as pinned-->\n </div>\n <div class=\"datagrid-row-scrollable\" [ngClass]=\"{'is-replaced': replaced && expanded}\">\n <div class=\"datagrid-scrolling-cells\">\n <ng-content select=\"clr-dg-cell\"></ng-content>\n <ng-container #scrollableCells></ng-container>\n </div>\n <!-- details here when replace, re-visit when sticky container is used for pinned cells -->\n <ng-template *ngIf=\"replaced && !expand.loading\" [ngTemplateOutlet]=\"detail\"></ng-template>\n <ng-template *ngIf=\"!replaced && !expand.loading\" [ngTemplateOutlet]=\"detail\"></ng-template>\n </div>\n </div>\n</ng-template>\n\n<ng-container #calculatedCells></ng-container>\n", components: [{ type: ClrExpandableAnimation, selector: "clr-expandable-animation", inputs: ["clrExpandTrigger"] }, { type: ClrSpinner, selector: "clr-spinner", inputs: ["clrInline", "clrInverse", "clrSmall", "clrMedium"] }], directives: [{ type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: ClrLabel, selector: "label", inputs: ["for"] }, { type: i5.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet"] }, { type: i5.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { type: i1.CheckboxControlValueAccessor, selector: "input[type=checkbox][formControlName],input[type=checkbox][formControl],input[type=checkbox][ngModel]" }, { type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { type: i1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { type: i1.RadioControlValueAccessor, selector: "input[type=radio][formControlName],input[type=radio][formControl],input[type=radio][ngModel]", inputs: ["name", "formControlName", "value"] }, { type: i1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { type: ClrRadio, selector: "[clrRadio]" }, { type: CdsIconCustomTag, selector: "cds-icon" }] });
15122
+ ], queries: [{ propertyName: "dgCells", predicate: ClrDatagridCell }], viewQueries: [{ propertyName: "expandAnimation", first: true, predicate: ClrExpandableAnimation, descendants: true }, { propertyName: "detailButton", first: true, predicate: ["detailButton"], descendants: true }, { propertyName: "_stickyCells", first: true, predicate: ["stickyCells"], descendants: true, read: ViewContainerRef }, { propertyName: "_scrollableCells", first: true, predicate: ["scrollableCells"], descendants: true, read: ViewContainerRef }, { propertyName: "_calculatedCells", first: true, predicate: ["calculatedCells"], descendants: true, read: ViewContainerRef }], ngImport: i0, template: "<!--\n We need to wrap the #rowContent in label element if we are in rowSelectionMode.\n Clicking of that wrapper label will equate to clicking on the whole row, which triggers the checkbox to toggle.\n-->\n<label class=\"datagrid-row-clickable\" *ngIf=\"selection.rowSelectionMode\" (mousedown)=\"clearRanges($event)\">\n <clr-expandable-animation [clrExpandTrigger]=\"expandAnimationTrigger\" *ngIf=\"expand.expandable\">\n <ng-template [ngTemplateOutlet]=\"rowContent\"></ng-template>\n </clr-expandable-animation>\n <ng-template [ngTemplateOutlet]=\"rowContent\" *ngIf=\"!expand.expandable\"></ng-template>\n</label>\n\n<clr-expandable-animation\n *ngIf=\"!selection.rowSelectionMode && expand.expandable\"\n [clrExpandTrigger]=\"expandAnimationTrigger\"\n>\n <ng-template [ngTemplateOutlet]=\"rowContent\"></ng-template>\n</clr-expandable-animation>\n\n<ng-template *ngIf=\"!selection.rowSelectionMode && !expand.expandable\" [ngTemplateOutlet]=\"rowContent\"></ng-template>\n\n<!--\n We need the \"project into template\" hacks because we need this in 2 different places\n depending on whether the details replace the row or not.\n-->\n<ng-template #detail>\n <ng-content select=\"clr-dg-row-detail\"></ng-content>\n</ng-template>\n\n<ng-template #rowContent>\n <div\n role=\"row\"\n [id]=\"id\"\n class=\"datagrid-row-master datagrid-row-flex\"\n [class.datagrid-row-detail-open]=\"detailService.isRowOpen(item)\"\n >\n <div class=\"datagrid-row-sticky\">\n <!-- Sticky elements here -->\n <ng-container #stickyCells>\n <div\n *ngIf=\"selection.selectionType === SELECTION_TYPE.Multi\"\n class=\"datagrid-select datagrid-fixed-column datagrid-cell\"\n [ngClass]=\"{ 'clr-form-control-disabled': !clrDgSelectable }\"\n role=\"gridcell\"\n >\n <div class=\"clr-checkbox-wrapper\">\n <input\n type=\"checkbox\"\n [ngModel]=\"selected\"\n (ngModelChange)=\"toggle($event)\"\n [id]=\"checkboxId\"\n [attr.disabled]=\"clrDgSelectable ? null : true\"\n [attr.aria-disabled]=\"clrDgSelectable ? null : true\"\n [attr.aria-label]=\"clrDgRowAriaLabel\"\n />\n <!-- Usage of class clr-col-null here prevents clr-col-* classes from being added when a datagrid is wrapped inside clrForm -->\n <label [for]=\"checkboxId\" class=\"clr-control-label clr-col-null\" (click)=\"clearRanges($event)\">\n <span class=\"clr-sr-only\">{{commonStrings.keys.select}}</span>\n </label>\n </div>\n </div>\n <div\n *ngIf=\"selection.selectionType === SELECTION_TYPE.Single\"\n class=\"datagrid-select datagrid-fixed-column datagrid-cell\"\n role=\"gridcell\"\n [ngClass]=\"{ 'clr-form-control-disabled': !clrDgSelectable }\"\n >\n <!-- TODO: it would be better if in addition to the generic \"Select\" label, we could add aria-labelledby\n to label the radio by the first cell in the row (typically an id or name).\n It's pretty easy to label it with the whole row since we already have an id for it, but in most\n cases the row is far too long to serve as a label, the screenreader reads every single cell content. -->\n <input\n type=\"radio\"\n clrRadio\n [id]=\"radioId\"\n [name]=\"selection.id + '-radio'\"\n [value]=\"item\"\n [(ngModel)]=\"selection.currentSingle\"\n [checked]=\"selection.currentSingle === item\"\n [attr.disabled]=\"clrDgSelectable ? null : true\"\n [attr.aria-disabled]=\"clrDgSelectable ? null : true\"\n [attr.aria-label]=\"clrDgRowAriaLabel\"\n />\n </div>\n <div\n *ngIf=\"rowActionService.hasActionableRow\"\n class=\"datagrid-row-actions datagrid-fixed-column datagrid-cell\"\n role=\"gridcell\"\n >\n <ng-content select=\"clr-dg-action-overflow\"></ng-content>\n </div>\n <div\n *ngIf=\"globalExpandable.hasExpandableRow\"\n class=\"datagrid-expandable-caret datagrid-fixed-column datagrid-cell\"\n role=\"gridcell\"\n >\n <ng-container *ngIf=\"expand.expandable\">\n <button\n *ngIf=\"!expand.loading\"\n (click)=\"toggleExpand()\"\n type=\"button\"\n class=\"datagrid-expandable-caret-button\"\n [attr.aria-expanded]=\"expand.expanded\"\n [attr.aria-label]=\"expand.expanded ? clrDgDetailCloseLabel : clrDgDetailOpenLabel\"\n [attr.aria-controls]=\"expandableId\"\n >\n <cds-icon\n shape=\"angle\"\n class=\"datagrid-expandable-caret-icon\"\n [attr.direction]=\"expand.expanded ? 'down' : 'right'\"\n [attr.title]=\"expand.expanded ? commonStrings.keys.collapse : commonStrings.keys.expand\"\n ></cds-icon>\n </button>\n <clr-spinner *ngIf=\"expand.loading\" clrSmall>{{ commonStrings.keys.loading }}</clr-spinner>\n </ng-container>\n </div>\n <div *ngIf=\"detailService.enabled\" class=\"datagrid-detail-caret datagrid-fixed-column datagrid-cell\">\n <button\n (click)=\"detailService.toggle(item, detailButton)\"\n type=\"button\"\n #detailButton\n class=\"datagrid-detail-caret-button\"\n [class.is-open]=\"detailService.isRowOpen(item)\"\n [attr.aria-label]=\"detailService.isRowOpen(item) ? clrDgDetailCloseLabel : clrDgDetailOpenLabel\"\n [attr.aria-expanded]=\"detailService.isOpen\"\n [attr.aria-controls]=\"detailService.id\"\n aria-haspopup=\"dialog\"\n >\n <cds-icon\n shape=\"angle-double\"\n [attr.direction]=\"detailService.isRowOpen(item) ? 'left' : 'right'\"\n class=\"datagrid-detail-caret-icon\"\n [attr.title]=\"detailService.isRowOpen(item) ? commonStrings.keys.close: commonStrings.keys.open\"\n ></cds-icon>\n </button>\n </div>\n </ng-container>\n <!-- placeholder for projecting other sticky cells as pinned-->\n </div>\n <div class=\"datagrid-row-scrollable\" [ngClass]=\"{'is-replaced': replaced && expanded}\">\n <div class=\"datagrid-scrolling-cells\">\n <ng-content select=\"clr-dg-cell\"></ng-content>\n <ng-container #scrollableCells></ng-container>\n </div>\n <!-- details here when replace, re-visit when sticky container is used for pinned cells -->\n <ng-template *ngIf=\"replaced && !expand.loading\" [ngTemplateOutlet]=\"detail\"></ng-template>\n <ng-template *ngIf=\"!replaced && !expand.loading\" [ngTemplateOutlet]=\"detail\"></ng-template>\n </div>\n </div>\n</ng-template>\n\n<ng-container #calculatedCells></ng-container>\n", components: [{ type: ClrExpandableAnimation, selector: "clr-expandable-animation", inputs: ["clrExpandTrigger"] }, { type: ClrSpinner, selector: "clr-spinner", inputs: ["clrInline", "clrInverse", "clrSmall", "clrMedium"] }], directives: [{ type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: ClrLabel, selector: "label", inputs: ["for"] }, { type: i5.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet"] }, { type: i5.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { type: i1.CheckboxControlValueAccessor, selector: "input[type=checkbox][formControlName],input[type=checkbox][formControl],input[type=checkbox][ngModel]" }, { type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { type: i1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { type: i1.RadioControlValueAccessor, selector: "input[type=radio][formControlName],input[type=radio][formControl],input[type=radio][ngModel]", inputs: ["name", "formControlName", "value"] }, { type: i1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { type: ClrRadio, selector: "[clrRadio]" }, { type: CdsIconCustomTag, selector: "cds-icon" }] });
15051
15123
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.3", ngImport: i0, type: ClrDatagridRow, decorators: [{
15052
15124
  type: Component,
15053
15125
  args: [{ selector: 'clr-dg-row', host: {
@@ -15059,8 +15131,11 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.3", ngImpor
15059
15131
  DatagridIfExpandService,
15060
15132
  { provide: IfExpandService, useExisting: DatagridIfExpandService },
15061
15133
  { provide: LoadingListener, useExisting: DatagridIfExpandService },
15062
- ], template: "<!--\n We need to wrap the #rowContent in label element if we are in rowSelectionMode.\n Clicking of that wrapper label will equate to clicking on the whole row, which triggers the checkbox to toggle.\n-->\n<label class=\"datagrid-row-clickable\" *ngIf=\"selection.rowSelectionMode\">\n <clr-expandable-animation [clrExpandTrigger]=\"expandAnimationTrigger\" *ngIf=\"expand.expandable\">\n <ng-template [ngTemplateOutlet]=\"rowContent\"></ng-template>\n </clr-expandable-animation>\n <ng-template [ngTemplateOutlet]=\"rowContent\" *ngIf=\"!expand.expandable\"></ng-template>\n</label>\n\n<clr-expandable-animation\n *ngIf=\"!selection.rowSelectionMode && expand.expandable\"\n [clrExpandTrigger]=\"expandAnimationTrigger\"\n>\n <ng-template [ngTemplateOutlet]=\"rowContent\"></ng-template>\n</clr-expandable-animation>\n\n<ng-template *ngIf=\"!selection.rowSelectionMode && !expand.expandable\" [ngTemplateOutlet]=\"rowContent\"></ng-template>\n\n<!--\n We need the \"project into template\" hacks because we need this in 2 different places\n depending on whether the details replace the row or not.\n-->\n<ng-template #detail>\n <ng-content select=\"clr-dg-row-detail\"></ng-content>\n</ng-template>\n\n<ng-template #rowContent>\n <div\n role=\"row\"\n [id]=\"id\"\n class=\"datagrid-row-master datagrid-row-flex\"\n [class.datagrid-row-detail-open]=\"detailService.isRowOpen(item)\"\n >\n <div class=\"datagrid-row-sticky\">\n <!-- Sticky elements here -->\n <ng-container #stickyCells>\n <div\n *ngIf=\"selection.selectionType === SELECTION_TYPE.Multi\"\n class=\"datagrid-select datagrid-fixed-column datagrid-cell\"\n [ngClass]=\"{ 'clr-form-control-disabled': !clrDgSelectable }\"\n role=\"gridcell\"\n >\n <div class=\"clr-checkbox-wrapper\">\n <input\n type=\"checkbox\"\n [ngModel]=\"selected\"\n (ngModelChange)=\"toggle($event)\"\n [id]=\"checkboxId\"\n [attr.disabled]=\"clrDgSelectable ? null : true\"\n [attr.aria-disabled]=\"clrDgSelectable ? null : true\"\n [attr.aria-label]=\"clrDgRowAriaLabel\"\n />\n <!-- Usage of class clr-col-null here prevents clr-col-* classes from being added when a datagrid is wrapped inside clrForm -->\n <label [for]=\"checkboxId\" class=\"clr-control-label clr-col-null\">\n <span class=\"clr-sr-only\">{{commonStrings.keys.select}}</span>\n </label>\n </div>\n </div>\n <div\n *ngIf=\"selection.selectionType === SELECTION_TYPE.Single\"\n class=\"datagrid-select datagrid-fixed-column datagrid-cell\"\n role=\"gridcell\"\n [ngClass]=\"{ 'clr-form-control-disabled': !clrDgSelectable }\"\n >\n <!-- TODO: it would be better if in addition to the generic \"Select\" label, we could add aria-labelledby\n to label the radio by the first cell in the row (typically an id or name).\n It's pretty easy to label it with the whole row since we already have an id for it, but in most\n cases the row is far too long to serve as a label, the screenreader reads every single cell content. -->\n <input\n type=\"radio\"\n clrRadio\n [id]=\"radioId\"\n [name]=\"selection.id + '-radio'\"\n [value]=\"item\"\n [(ngModel)]=\"selection.currentSingle\"\n [checked]=\"selection.currentSingle === item\"\n [attr.disabled]=\"clrDgSelectable ? null : true\"\n [attr.aria-disabled]=\"clrDgSelectable ? null : true\"\n [attr.aria-label]=\"clrDgRowAriaLabel\"\n />\n </div>\n <div\n *ngIf=\"rowActionService.hasActionableRow\"\n class=\"datagrid-row-actions datagrid-fixed-column datagrid-cell\"\n role=\"gridcell\"\n >\n <ng-content select=\"clr-dg-action-overflow\"></ng-content>\n </div>\n <div\n *ngIf=\"globalExpandable.hasExpandableRow\"\n class=\"datagrid-expandable-caret datagrid-fixed-column datagrid-cell\"\n role=\"gridcell\"\n >\n <ng-container *ngIf=\"expand.expandable\">\n <button\n *ngIf=\"!expand.loading\"\n (click)=\"toggleExpand()\"\n type=\"button\"\n class=\"datagrid-expandable-caret-button\"\n [attr.aria-expanded]=\"expand.expanded\"\n [attr.aria-label]=\"expand.expanded ? clrDgDetailCloseLabel : clrDgDetailOpenLabel\"\n [attr.aria-controls]=\"expandableId\"\n >\n <cds-icon\n shape=\"angle\"\n class=\"datagrid-expandable-caret-icon\"\n [attr.direction]=\"expand.expanded ? 'down' : 'right'\"\n [attr.title]=\"expand.expanded ? commonStrings.keys.collapse : commonStrings.keys.expand\"\n ></cds-icon>\n </button>\n <clr-spinner *ngIf=\"expand.loading\" clrSmall>{{ commonStrings.keys.loading }}</clr-spinner>\n </ng-container>\n </div>\n <div *ngIf=\"detailService.enabled\" class=\"datagrid-detail-caret datagrid-fixed-column datagrid-cell\">\n <button\n (click)=\"detailService.toggle(item, detailButton)\"\n type=\"button\"\n #detailButton\n class=\"datagrid-detail-caret-button\"\n [class.is-open]=\"detailService.isRowOpen(item)\"\n [attr.aria-label]=\"detailService.isRowOpen(item) ? clrDgDetailCloseLabel : clrDgDetailOpenLabel\"\n [attr.aria-expanded]=\"detailService.isOpen\"\n [attr.aria-controls]=\"detailService.id\"\n aria-haspopup=\"dialog\"\n >\n <cds-icon\n shape=\"angle-double\"\n [attr.direction]=\"detailService.isRowOpen(item) ? 'left' : 'right'\"\n class=\"datagrid-detail-caret-icon\"\n [attr.title]=\"detailService.isRowOpen(item) ? commonStrings.keys.close: commonStrings.keys.open\"\n ></cds-icon>\n </button>\n </div>\n </ng-container>\n <!-- placeholder for projecting other sticky cells as pinned-->\n </div>\n <div class=\"datagrid-row-scrollable\" [ngClass]=\"{'is-replaced': replaced && expanded}\">\n <div class=\"datagrid-scrolling-cells\">\n <ng-content select=\"clr-dg-cell\"></ng-content>\n <ng-container #scrollableCells></ng-container>\n </div>\n <!-- details here when replace, re-visit when sticky container is used for pinned cells -->\n <ng-template *ngIf=\"replaced && !expand.loading\" [ngTemplateOutlet]=\"detail\"></ng-template>\n <ng-template *ngIf=\"!replaced && !expand.loading\" [ngTemplateOutlet]=\"detail\"></ng-template>\n </div>\n </div>\n</ng-template>\n\n<ng-container #calculatedCells></ng-container>\n" }]
15063
- }], ctorParameters: function () { return [{ type: Selection }, { type: RowActionService }, { type: ExpandableRowsCount }, { type: DatagridIfExpandService }, { type: DetailService }, { type: DisplayModeService }, { type: i0.ViewContainerRef }, { type: i0.Renderer2 }, { type: i0.ElementRef }, { type: ClrCommonStringsService }]; }, propDecorators: { expandAnimation: [{
15134
+ ], template: "<!--\n We need to wrap the #rowContent in label element if we are in rowSelectionMode.\n Clicking of that wrapper label will equate to clicking on the whole row, which triggers the checkbox to toggle.\n-->\n<label class=\"datagrid-row-clickable\" *ngIf=\"selection.rowSelectionMode\" (mousedown)=\"clearRanges($event)\">\n <clr-expandable-animation [clrExpandTrigger]=\"expandAnimationTrigger\" *ngIf=\"expand.expandable\">\n <ng-template [ngTemplateOutlet]=\"rowContent\"></ng-template>\n </clr-expandable-animation>\n <ng-template [ngTemplateOutlet]=\"rowContent\" *ngIf=\"!expand.expandable\"></ng-template>\n</label>\n\n<clr-expandable-animation\n *ngIf=\"!selection.rowSelectionMode && expand.expandable\"\n [clrExpandTrigger]=\"expandAnimationTrigger\"\n>\n <ng-template [ngTemplateOutlet]=\"rowContent\"></ng-template>\n</clr-expandable-animation>\n\n<ng-template *ngIf=\"!selection.rowSelectionMode && !expand.expandable\" [ngTemplateOutlet]=\"rowContent\"></ng-template>\n\n<!--\n We need the \"project into template\" hacks because we need this in 2 different places\n depending on whether the details replace the row or not.\n-->\n<ng-template #detail>\n <ng-content select=\"clr-dg-row-detail\"></ng-content>\n</ng-template>\n\n<ng-template #rowContent>\n <div\n role=\"row\"\n [id]=\"id\"\n class=\"datagrid-row-master datagrid-row-flex\"\n [class.datagrid-row-detail-open]=\"detailService.isRowOpen(item)\"\n >\n <div class=\"datagrid-row-sticky\">\n <!-- Sticky elements here -->\n <ng-container #stickyCells>\n <div\n *ngIf=\"selection.selectionType === SELECTION_TYPE.Multi\"\n class=\"datagrid-select datagrid-fixed-column datagrid-cell\"\n [ngClass]=\"{ 'clr-form-control-disabled': !clrDgSelectable }\"\n role=\"gridcell\"\n >\n <div class=\"clr-checkbox-wrapper\">\n <input\n type=\"checkbox\"\n [ngModel]=\"selected\"\n (ngModelChange)=\"toggle($event)\"\n [id]=\"checkboxId\"\n [attr.disabled]=\"clrDgSelectable ? null : true\"\n [attr.aria-disabled]=\"clrDgSelectable ? null : true\"\n [attr.aria-label]=\"clrDgRowAriaLabel\"\n />\n <!-- Usage of class clr-col-null here prevents clr-col-* classes from being added when a datagrid is wrapped inside clrForm -->\n <label [for]=\"checkboxId\" class=\"clr-control-label clr-col-null\" (click)=\"clearRanges($event)\">\n <span class=\"clr-sr-only\">{{commonStrings.keys.select}}</span>\n </label>\n </div>\n </div>\n <div\n *ngIf=\"selection.selectionType === SELECTION_TYPE.Single\"\n class=\"datagrid-select datagrid-fixed-column datagrid-cell\"\n role=\"gridcell\"\n [ngClass]=\"{ 'clr-form-control-disabled': !clrDgSelectable }\"\n >\n <!-- TODO: it would be better if in addition to the generic \"Select\" label, we could add aria-labelledby\n to label the radio by the first cell in the row (typically an id or name).\n It's pretty easy to label it with the whole row since we already have an id for it, but in most\n cases the row is far too long to serve as a label, the screenreader reads every single cell content. -->\n <input\n type=\"radio\"\n clrRadio\n [id]=\"radioId\"\n [name]=\"selection.id + '-radio'\"\n [value]=\"item\"\n [(ngModel)]=\"selection.currentSingle\"\n [checked]=\"selection.currentSingle === item\"\n [attr.disabled]=\"clrDgSelectable ? null : true\"\n [attr.aria-disabled]=\"clrDgSelectable ? null : true\"\n [attr.aria-label]=\"clrDgRowAriaLabel\"\n />\n </div>\n <div\n *ngIf=\"rowActionService.hasActionableRow\"\n class=\"datagrid-row-actions datagrid-fixed-column datagrid-cell\"\n role=\"gridcell\"\n >\n <ng-content select=\"clr-dg-action-overflow\"></ng-content>\n </div>\n <div\n *ngIf=\"globalExpandable.hasExpandableRow\"\n class=\"datagrid-expandable-caret datagrid-fixed-column datagrid-cell\"\n role=\"gridcell\"\n >\n <ng-container *ngIf=\"expand.expandable\">\n <button\n *ngIf=\"!expand.loading\"\n (click)=\"toggleExpand()\"\n type=\"button\"\n class=\"datagrid-expandable-caret-button\"\n [attr.aria-expanded]=\"expand.expanded\"\n [attr.aria-label]=\"expand.expanded ? clrDgDetailCloseLabel : clrDgDetailOpenLabel\"\n [attr.aria-controls]=\"expandableId\"\n >\n <cds-icon\n shape=\"angle\"\n class=\"datagrid-expandable-caret-icon\"\n [attr.direction]=\"expand.expanded ? 'down' : 'right'\"\n [attr.title]=\"expand.expanded ? commonStrings.keys.collapse : commonStrings.keys.expand\"\n ></cds-icon>\n </button>\n <clr-spinner *ngIf=\"expand.loading\" clrSmall>{{ commonStrings.keys.loading }}</clr-spinner>\n </ng-container>\n </div>\n <div *ngIf=\"detailService.enabled\" class=\"datagrid-detail-caret datagrid-fixed-column datagrid-cell\">\n <button\n (click)=\"detailService.toggle(item, detailButton)\"\n type=\"button\"\n #detailButton\n class=\"datagrid-detail-caret-button\"\n [class.is-open]=\"detailService.isRowOpen(item)\"\n [attr.aria-label]=\"detailService.isRowOpen(item) ? clrDgDetailCloseLabel : clrDgDetailOpenLabel\"\n [attr.aria-expanded]=\"detailService.isOpen\"\n [attr.aria-controls]=\"detailService.id\"\n aria-haspopup=\"dialog\"\n >\n <cds-icon\n shape=\"angle-double\"\n [attr.direction]=\"detailService.isRowOpen(item) ? 'left' : 'right'\"\n class=\"datagrid-detail-caret-icon\"\n [attr.title]=\"detailService.isRowOpen(item) ? commonStrings.keys.close: commonStrings.keys.open\"\n ></cds-icon>\n </button>\n </div>\n </ng-container>\n <!-- placeholder for projecting other sticky cells as pinned-->\n </div>\n <div class=\"datagrid-row-scrollable\" [ngClass]=\"{'is-replaced': replaced && expanded}\">\n <div class=\"datagrid-scrolling-cells\">\n <ng-content select=\"clr-dg-cell\"></ng-content>\n <ng-container #scrollableCells></ng-container>\n </div>\n <!-- details here when replace, re-visit when sticky container is used for pinned cells -->\n <ng-template *ngIf=\"replaced && !expand.loading\" [ngTemplateOutlet]=\"detail\"></ng-template>\n <ng-template *ngIf=\"!replaced && !expand.loading\" [ngTemplateOutlet]=\"detail\"></ng-template>\n </div>\n </div>\n</ng-template>\n\n<ng-container #calculatedCells></ng-container>\n" }]
15135
+ }], ctorParameters: function () { return [{ type: Selection }, { type: RowActionService }, { type: ExpandableRowsCount }, { type: DatagridIfExpandService }, { type: DetailService }, { type: DisplayModeService }, { type: i0.ViewContainerRef }, { type: i0.Renderer2 }, { type: i0.ElementRef }, { type: ClrCommonStringsService }, { type: Items }, { type: undefined, decorators: [{
15136
+ type: Inject,
15137
+ args: [DOCUMENT]
15138
+ }] }]; }, propDecorators: { expandAnimation: [{
15064
15139
  type: ViewChild,
15065
15140
  args: [ClrExpandableAnimation]
15066
15141
  }], item: [{
@@ -15408,7 +15483,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.3", ngImpor
15408
15483
  * The full license information can be found in LICENSE in the root directory of this project.
15409
15484
  */
15410
15485
  class ClrDatagrid {
15411
- constructor(organizer, items, expandableRows, selection, rowActionService, stateProvider, displayMode, renderer, detailService, datagridId, el, page, commonStrings, columnsService, keyNavigation) {
15486
+ constructor(organizer, items, expandableRows, selection, rowActionService, stateProvider, displayMode, renderer, detailService, datagridId, document, el, page, commonStrings, columnsService, keyNavigation, zone) {
15412
15487
  this.organizer = organizer;
15413
15488
  this.items = items;
15414
15489
  this.expandableRows = expandableRows;
@@ -15418,11 +15493,13 @@ class ClrDatagrid {
15418
15493
  this.displayMode = displayMode;
15419
15494
  this.renderer = renderer;
15420
15495
  this.detailService = detailService;
15496
+ this.document = document;
15421
15497
  this.el = el;
15422
15498
  this.page = page;
15423
15499
  this.commonStrings = commonStrings;
15424
15500
  this.columnsService = columnsService;
15425
15501
  this.keyNavigation = keyNavigation;
15502
+ this.zone = zone;
15426
15503
  /* reference to the enum so that template can access */
15427
15504
  this.SELECTION_TYPE = SelectionType;
15428
15505
  /**
@@ -15607,6 +15684,19 @@ class ClrDatagrid {
15607
15684
  });
15608
15685
  }
15609
15686
  }));
15687
+ // We need to preserve shift state, so it can be used on selection change, regardless of the input event
15688
+ // that triggered the change. This helps us to easily resolve the k/b only case together with the mouse selection case.
15689
+ this.zone.runOutsideAngular(() => {
15690
+ this._subscriptions.push(fromEvent(this.document.body, 'keydown').subscribe((event) => {
15691
+ if (event.key === 'Shift') {
15692
+ this.selection.shiftPressed = true;
15693
+ }
15694
+ }), fromEvent(this.document.body, 'keyup').subscribe((event) => {
15695
+ if (event.key === 'Shift') {
15696
+ this.selection.shiftPressed = false;
15697
+ }
15698
+ }));
15699
+ });
15610
15700
  }
15611
15701
  ngOnDestroy() {
15612
15702
  this._subscriptions.forEach((sub) => sub.unsubscribe());
@@ -15615,7 +15705,7 @@ class ClrDatagrid {
15615
15705
  this.organizer.resize();
15616
15706
  }
15617
15707
  }
15618
- ClrDatagrid.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.0.3", ngImport: i0, type: ClrDatagrid, deps: [{ token: DatagridRenderOrganizer }, { token: Items }, { token: ExpandableRowsCount }, { token: Selection }, { token: RowActionService }, { token: StateProvider }, { token: DisplayModeService }, { token: i0.Renderer2 }, { token: DetailService }, { token: UNIQUE_ID }, { token: i0.ElementRef }, { token: Page }, { token: ClrCommonStringsService }, { token: ColumnsService }, { token: KeyNavigationGridController }], target: i0.ɵɵFactoryTarget.Component });
15708
+ ClrDatagrid.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.0.3", ngImport: i0, type: ClrDatagrid, deps: [{ token: DatagridRenderOrganizer }, { token: Items }, { token: ExpandableRowsCount }, { token: Selection }, { token: RowActionService }, { token: StateProvider }, { token: DisplayModeService }, { token: i0.Renderer2 }, { token: DetailService }, { token: UNIQUE_ID }, { token: DOCUMENT }, { token: i0.ElementRef }, { token: Page }, { token: ClrCommonStringsService }, { token: ColumnsService }, { token: KeyNavigationGridController }, { token: i0.NgZone }], target: i0.ɵɵFactoryTarget.Component });
15619
15709
  ClrDatagrid.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.0.3", type: ClrDatagrid, selector: "clr-datagrid", inputs: { loading: ["clrDgLoading", "loading"], selected: ["clrDgSelected", "selected"], singleSelected: ["clrDgSingleSelected", "singleSelected"], clrDgSingleSelectionAriaLabel: "clrDgSingleSelectionAriaLabel", clrDgSingleActionableAriaLabel: "clrDgSingleActionableAriaLabel", clrDetailExpandableAriaLabel: "clrDetailExpandableAriaLabel", clrDgDisablePageFocus: "clrDgDisablePageFocus", clrDgPreserveSelection: "clrDgPreserveSelection", rowSelectionMode: ["clrDgRowSelection", "rowSelectionMode"] }, outputs: { refresh: "clrDgRefresh", selectedChanged: "clrDgSelectedChange", singleSelectedChanged: "clrDgSingleSelectedChange" }, host: { properties: { "class.datagrid-host": "true", "class.datagrid-detail-open": "detailService.isOpen" } }, providers: [
15620
15710
  Selection,
15621
15711
  Sort,
@@ -15660,7 +15750,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.3", ngImpor
15660
15750
  }], ctorParameters: function () { return [{ type: DatagridRenderOrganizer }, { type: Items }, { type: ExpandableRowsCount }, { type: Selection }, { type: RowActionService }, { type: StateProvider }, { type: DisplayModeService }, { type: i0.Renderer2 }, { type: DetailService }, { type: undefined, decorators: [{
15661
15751
  type: Inject,
15662
15752
  args: [UNIQUE_ID]
15663
- }] }, { type: i0.ElementRef }, { type: Page }, { type: ClrCommonStringsService }, { type: ColumnsService }, { type: KeyNavigationGridController }]; }, propDecorators: { loading: [{
15753
+ }] }, { type: undefined, decorators: [{
15754
+ type: Inject,
15755
+ args: [DOCUMENT]
15756
+ }] }, { type: i0.ElementRef }, { type: Page }, { type: ClrCommonStringsService }, { type: ColumnsService }, { type: KeyNavigationGridController }, { type: i0.NgZone }]; }, propDecorators: { loading: [{
15664
15757
  type: Input,
15665
15758
  args: ['clrDgLoading']
15666
15759
  }], refresh: [{
@@ -15741,6 +15834,12 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.3", ngImpor
15741
15834
  }]
15742
15835
  }] });
15743
15836
 
15837
+ /*
15838
+ * Copyright (c) 2016-2022 VMware, Inc. All Rights Reserved.
15839
+ * This software is released under MIT license.
15840
+ * The full license information can be found in LICENSE in the root directory of this project.
15841
+ */
15842
+
15744
15843
  /*
15745
15844
  * Copyright (c) 2016-2022 VMware, Inc. All Rights Reserved.
15746
15845
  * This software is released under MIT license.
@@ -15768,7 +15867,7 @@ class ClrDatagridActionOverflow {
15768
15867
  this.subscriptions.push(this.smartToggleService.openChange.subscribe(openState => {
15769
15868
  this.open = openState;
15770
15869
  if (openState) {
15771
- this.focusFirstButton();
15870
+ this.initializeFocus();
15772
15871
  }
15773
15872
  }));
15774
15873
  this.popoverId = 'clr-action-menu' + clrDgActionId++;
@@ -15780,13 +15879,15 @@ class ClrDatagridActionOverflow {
15780
15879
  closeOverflowContent(event) {
15781
15880
  this.smartToggleService.toggleWithEvent(event);
15782
15881
  }
15783
- focusFirstButton() {
15882
+ initializeFocus() {
15784
15883
  if (isPlatformBrowser(this.platformId)) {
15785
15884
  this.zone.runOutsideAngular(() => {
15786
15885
  setTimeout(() => {
15787
- const firstButton = document.querySelector('button.action-item');
15788
- if (firstButton) {
15789
- firstButton.focus();
15886
+ const buttons = Array.from(document.querySelectorAll('button.action-item'));
15887
+ if (buttons.length) {
15888
+ this.keyFocus.current = 0;
15889
+ this.keyFocus.focusableItems = buttons;
15890
+ this.keyFocus.focusCurrent();
15790
15891
  }
15791
15892
  });
15792
15893
  });
@@ -15806,7 +15907,7 @@ class ClrDatagridActionOverflow {
15806
15907
  }
15807
15908
  }
15808
15909
  ClrDatagridActionOverflow.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.0.3", ngImport: i0, type: ClrDatagridActionOverflow, deps: [{ token: RowActionService }, { token: ClrCommonStringsService }, { token: PLATFORM_ID }, { token: i0.NgZone }, { token: ClrPopoverToggleService }, { token: UNIQUE_ID }], target: i0.ɵɵFactoryTarget.Component });
15809
- ClrDatagridActionOverflow.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.0.3", type: ClrDatagridActionOverflow, selector: "clr-dg-action-overflow", inputs: { open: ["clrDgActionOverflowOpen", "open"] }, outputs: { openChange: "clrDgActionOverflowOpenChange" }, providers: [UNIQUE_ID_PROVIDER, ClrPopoverToggleService, ClrPopoverEventsService, ClrPopoverPositionService], ngImport: i0, template: `
15910
+ ClrDatagridActionOverflow.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.0.3", type: ClrDatagridActionOverflow, selector: "clr-dg-action-overflow", inputs: { open: ["clrDgActionOverflowOpen", "open"] }, outputs: { openChange: "clrDgActionOverflowOpenChange" }, providers: [UNIQUE_ID_PROVIDER, ClrPopoverToggleService, ClrPopoverEventsService, ClrPopoverPositionService], viewQueries: [{ propertyName: "keyFocus", first: true, predicate: ClrKeyFocus, descendants: true }], ngImport: i0, template: `
15810
15911
  <button
15811
15912
  class="datagrid-action-toggle"
15812
15913
  type="button"
@@ -15827,13 +15928,14 @@ ClrDatagridActionOverflow.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.
15827
15928
  [id]="popoverId"
15828
15929
  [attr.aria-hidden]="!open"
15829
15930
  [attr.id]="popoverId"
15931
+ clrKeyFocus
15830
15932
  clrFocusTrap
15831
15933
  (click)="closeOverflowContent($event)"
15832
15934
  *clrPopoverContent="open; at: smartPosition; outsideClickToClose: true; scrollToClose: true"
15833
15935
  >
15834
15936
  <ng-content></ng-content>
15835
15937
  </div>
15836
- `, isInline: true, directives: [{ type: ClrPopoverAnchor, selector: "[clrPopoverAnchor]" }, { type: ClrPopoverOpenCloseButton, selector: "[clrPopoverOpenCloseButton]", outputs: ["clrPopoverOpenCloseChange"] }, { type: CdsIconCustomTag, selector: "cds-icon" }, { type: ClrPopoverContent, selector: "[clrPopoverContent]", inputs: ["clrPopoverContent", "clrPopoverContentAt", "clrPopoverContentOutsideClickToClose", "clrPopoverContentScrollToClose"] }, { type: FocusTrapDirective, selector: "[clrFocusTrap]", inputs: ["clrFocusTrap"] }] });
15938
+ `, isInline: true, components: [{ type: ClrKeyFocus, selector: "[clrKeyFocus]", inputs: ["clrDirection", "clrFocusOnLoad", "clrKeyFocus"], outputs: ["clrFocusChange"] }], directives: [{ type: ClrPopoverAnchor, selector: "[clrPopoverAnchor]" }, { type: ClrPopoverOpenCloseButton, selector: "[clrPopoverOpenCloseButton]", outputs: ["clrPopoverOpenCloseChange"] }, { type: CdsIconCustomTag, selector: "cds-icon" }, { type: ClrPopoverContent, selector: "[clrPopoverContent]", inputs: ["clrPopoverContent", "clrPopoverContentAt", "clrPopoverContentOutsideClickToClose", "clrPopoverContentScrollToClose"] }, { type: FocusTrapDirective, selector: "[clrFocusTrap]", inputs: ["clrFocusTrap"] }] });
15837
15939
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.3", ngImport: i0, type: ClrDatagridActionOverflow, decorators: [{
15838
15940
  type: Component,
15839
15941
  args: [{
@@ -15860,6 +15962,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.3", ngImpor
15860
15962
  [id]="popoverId"
15861
15963
  [attr.aria-hidden]="!open"
15862
15964
  [attr.id]="popoverId"
15965
+ clrKeyFocus
15863
15966
  clrFocusTrap
15864
15967
  (click)="closeOverflowContent($event)"
15865
15968
  *clrPopoverContent="open; at: smartPosition; outsideClickToClose: true; scrollToClose: true"
@@ -15874,7 +15977,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.3", ngImpor
15874
15977
  }] }, { type: i0.NgZone }, { type: ClrPopoverToggleService }, { type: undefined, decorators: [{
15875
15978
  type: Inject,
15876
15979
  args: [UNIQUE_ID]
15877
- }] }]; }, propDecorators: { open: [{
15980
+ }] }]; }, propDecorators: { keyFocus: [{
15981
+ type: ViewChild,
15982
+ args: [ClrKeyFocus]
15983
+ }], open: [{
15878
15984
  type: Input,
15879
15985
  args: ['clrDgActionOverflowOpen']
15880
15986
  }], openChange: [{
@@ -16823,232 +16929,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.3", ngImpor
16823
16929
  * The full license information can be found in LICENSE in the root directory of this project.
16824
16930
  */
16825
16931
 
16826
- /*
16827
- * Copyright (c) 2016-2022 VMware, Inc. All Rights Reserved.
16828
- * This software is released under MIT license.
16829
- * The full license information can be found in LICENSE in the root directory of this project.
16830
- */
16831
- const FOCUSABLE_ELEMENT_SELECTORS = new InjectionToken('FocusableElements');
16832
- const FOCUSABLE_ELEMENT_SELECTORS_PROVIDER = {
16833
- provide: FOCUSABLE_ELEMENT_SELECTORS,
16834
- useValue: [
16835
- 'a[href]',
16836
- 'area[href]',
16837
- 'input:not([disabled])',
16838
- 'button:not([disabled])',
16839
- 'select:not([disabled])',
16840
- 'textarea:not([disabled])',
16841
- 'iframe',
16842
- 'object',
16843
- 'embed',
16844
- '*[tabindex]',
16845
- '*[contenteditable=true]',
16846
- '[role=button]:not([disabled])',
16847
- ],
16848
- };
16849
-
16850
- /*
16851
- * Copyright (c) 2016-2022 VMware, Inc. All Rights Reserved.
16852
- * This software is released under MIT license.
16853
- * The full license information can be found in LICENSE in the root directory of this project.
16854
- */
16855
- const CLR_LIST_KEY_NAVIGATION_CONFIG = new InjectionToken('ClrListKeyNavigationConfig');
16856
- const CLR_LIST_KEY_NAVIGATION_COFNIG_PROVIDER = {
16857
- provide: CLR_LIST_KEY_NAVIGATION_CONFIG,
16858
- useValue: {
16859
- keyListItems: 'keyListItems',
16860
- layout: 'vertical',
16861
- manageFocus: true,
16862
- manageTabindex: true,
16863
- loop: false,
16864
- dir: null,
16865
- },
16866
- };
16867
-
16868
- /*
16869
- * Copyright (c) 2016-2022 VMware, Inc. All Rights Reserved.
16870
- * This software is released under MIT license.
16871
- * The full license information can be found in LICENSE in the root directory of this project.
16872
- */
16873
- function getNextKeyListItem(item, items, config) {
16874
- const { code, layout, loop, dir } = config;
16875
- let i = items.indexOf(item);
16876
- const previous = i;
16877
- const inlineStart = dir === 'rtl' ? KeyNavigationCode.ArrowRight : KeyNavigationCode.ArrowLeft;
16878
- const inlineEnd = dir === 'rtl' ? KeyNavigationCode.ArrowLeft : KeyNavigationCode.ArrowRight;
16879
- const numOfItems = items.length - 1;
16880
- if (layout !== 'horizontal' && code === KeyNavigationCode.ArrowUp && i !== 0) {
16881
- i = i - 1;
16882
- }
16883
- else if (layout !== 'horizontal' && code === KeyNavigationCode.ArrowUp && i === 0 && loop) {
16884
- i = numOfItems;
16885
- }
16886
- else if (layout !== 'horizontal' && code === KeyNavigationCode.ArrowDown && i < numOfItems) {
16887
- i = i + 1;
16888
- }
16889
- else if (layout !== 'horizontal' && code === KeyNavigationCode.ArrowDown && i === numOfItems && loop) {
16890
- i = 0;
16891
- }
16892
- else if (layout !== 'vertical' && code === inlineStart && i !== 0) {
16893
- i = i - 1;
16894
- }
16895
- else if (layout !== 'vertical' && code === inlineEnd && i < numOfItems) {
16896
- i = i + 1;
16897
- }
16898
- else if (code === KeyNavigationCode.End) {
16899
- i = numOfItems;
16900
- }
16901
- else if (code === KeyNavigationCode.Home) {
16902
- i = 0;
16903
- }
16904
- else if (code === KeyNavigationCode.PageUp) {
16905
- i = i - 4 > 0 ? i - 4 : 0;
16906
- }
16907
- else if (code === KeyNavigationCode.PageDown) {
16908
- i = i + 4 < numOfItems ? i + 4 : numOfItems;
16909
- }
16910
- return { next: i, previous };
16911
- }
16912
-
16913
- /*
16914
- * Copyright (c) 2016-2022 VMware, Inc. All Rights Reserved.
16915
- * This software is released under MIT license.
16916
- * The full license information can be found in LICENSE in the root directory of this project.
16917
- */
16918
- class ClrKeyNavigationList {
16919
- constructor(host, defaultConfig, focusableElementSelectors) {
16920
- this.host = host;
16921
- this.defaultConfig = defaultConfig;
16922
- this.focusableElementSelectors = focusableElementSelectors;
16923
- this.config = {
16924
- ...this.defaultConfig,
16925
- dir: this.getClosestDirAttribute(),
16926
- };
16927
- }
16928
- set configuration(config) {
16929
- this.config = {
16930
- ...this.defaultConfig,
16931
- dir: this.getClosestDirAttribute(),
16932
- ...config,
16933
- };
16934
- }
16935
- ngAfterViewInit() {
16936
- this.initializeTabIndex();
16937
- }
16938
- onClick(e) {
16939
- this.clickItem(e);
16940
- }
16941
- onKeyDown(e) {
16942
- this.focusItem(e);
16943
- }
16944
- initializeTabIndex() {
16945
- if (this.config.manageFocus && this.config.manageTabindex) {
16946
- initializeKeyListItems(this.getListItems());
16947
- }
16948
- }
16949
- clickItem(e) {
16950
- const activeItem = this.getActiveItem(e);
16951
- if (activeItem) {
16952
- this.setActiveItem(e, activeItem);
16953
- }
16954
- }
16955
- focusItem(e) {
16956
- if (validKeyNavigationCode(e)) {
16957
- const activeItem = this.getActiveItem(e);
16958
- if (activeItem) {
16959
- const listItems = this.getListItems();
16960
- const { next, previous } = getNextKeyListItem(activeItem, Array.from(listItems), {
16961
- ...this.config,
16962
- dir: this.getClosestDirAttribute(),
16963
- code: e.code,
16964
- });
16965
- if (next !== previous) {
16966
- this.setActiveItem(e, listItems[next], listItems[previous]);
16967
- }
16968
- }
16969
- }
16970
- }
16971
- getActiveItem(e) {
16972
- const listItems = this.getListItems();
16973
- return Array.from(listItems).find(c => c === e.target.closest(listItems[0].tagName.toLocaleLowerCase()) ?? c === e.target);
16974
- }
16975
- setActiveItem(e, activeItem, previousItem) {
16976
- if (this.config.manageFocus) {
16977
- if (this.config.manageTabindex) {
16978
- setActiveKeyListItem(this.getListItems(), activeItem);
16979
- }
16980
- const items = getFlattenedFocusableItems(activeItem);
16981
- const item = items[0] ?? activeItem;
16982
- focusElement(item);
16983
- e.preventDefault();
16984
- }
16985
- activeItem.dispatchEvent(new CustomEvent('cdsKeyChange', {
16986
- bubbles: true,
16987
- detail: {
16988
- activeItem,
16989
- previousItem,
16990
- code: e.code,
16991
- metaKey: e.ctrlKey || e.metaKey,
16992
- keyListItems: this.config.keyListItems,
16993
- },
16994
- }));
16995
- }
16996
- getListItems() {
16997
- return this.host.nativeElement.querySelectorAll(this.focusableElementSelectors.join(','));
16998
- }
16999
- getClosestDirAttribute() {
17000
- const el = this.host.nativeElement.closest('[dir]');
17001
- return el ? el.getAttribute('dir') : null;
17002
- }
17003
- }
17004
- ClrKeyNavigationList.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.0.3", ngImport: i0, type: ClrKeyNavigationList, deps: [{ token: i0.ElementRef }, { token: CLR_LIST_KEY_NAVIGATION_CONFIG }, { token: FOCUSABLE_ELEMENT_SELECTORS }], target: i0.ɵɵFactoryTarget.Directive });
17005
- ClrKeyNavigationList.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "12.0.0", version: "13.0.3", type: ClrKeyNavigationList, selector: "[clrKeyNavigationList]", inputs: { configuration: "configuration" }, host: { listeners: { "click": "onClick($event)", "keydown": "onKeyDown($event)" } }, ngImport: i0 });
17006
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.3", ngImport: i0, type: ClrKeyNavigationList, decorators: [{
17007
- type: Directive,
17008
- args: [{
17009
- selector: '[clrKeyNavigationList]',
17010
- }]
17011
- }], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: undefined, decorators: [{
17012
- type: Inject,
17013
- args: [CLR_LIST_KEY_NAVIGATION_CONFIG]
17014
- }] }, { type: undefined, decorators: [{
17015
- type: Inject,
17016
- args: [FOCUSABLE_ELEMENT_SELECTORS]
17017
- }] }]; }, propDecorators: { configuration: [{
17018
- type: Input
17019
- }], onClick: [{
17020
- type: HostListener,
17021
- args: ['click', ['$event']]
17022
- }], onKeyDown: [{
17023
- type: HostListener,
17024
- args: ['keydown', ['$event']]
17025
- }] } });
17026
-
17027
- /*
17028
- * Copyright (c) 2016-2022 VMware, Inc. All Rights Reserved.
17029
- * This software is released under MIT license.
17030
- * The full license information can be found in LICENSE in the root directory of this project.
17031
- */
17032
- class ClrKeyNavigationListModule {
17033
- }
17034
- ClrKeyNavigationListModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.0.3", ngImport: i0, type: ClrKeyNavigationListModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
17035
- ClrKeyNavigationListModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "12.0.0", version: "13.0.3", ngImport: i0, type: ClrKeyNavigationListModule, declarations: [ClrKeyNavigationList], exports: [ClrKeyNavigationList] });
17036
- ClrKeyNavigationListModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "13.0.3", ngImport: i0, type: ClrKeyNavigationListModule, providers: [CLR_LIST_KEY_NAVIGATION_COFNIG_PROVIDER, FOCUSABLE_ELEMENT_SELECTORS_PROVIDER] });
17037
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.3", ngImport: i0, type: ClrKeyNavigationListModule, decorators: [{
17038
- type: NgModule,
17039
- args: [{
17040
- declarations: [ClrKeyNavigationList],
17041
- exports: [ClrKeyNavigationList],
17042
- providers: [CLR_LIST_KEY_NAVIGATION_COFNIG_PROVIDER, FOCUSABLE_ELEMENT_SELECTORS_PROVIDER],
17043
- }]
17044
- }] });
17045
-
17046
- /*
17047
- * Copyright (c) 2016-2022 VMware, Inc. All Rights Reserved.
17048
- * This software is released under MIT license.
17049
- * The full license information can be found in LICENSE in the root directory of this project.
17050
- */
17051
-
17052
16932
  /*
17053
16933
  * Copyright (c) 2016-2022 VMware, Inc. All Rights Reserved.
17054
16934
  * This software is released under MIT license.
@@ -18401,6 +18281,7 @@ ClrDatagridModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "12.0.0", versi
18401
18281
  ClrDragAndDropModule,
18402
18282
  ClrSpinnerModule,
18403
18283
  ClrPopoverModuleNext,
18284
+ ClrKeyFocusModule,
18404
18285
  ClrFocusTrapModule,
18405
18286
  ClrFocusOnViewInitModule], exports: [
18406
18287
  // Core
@@ -18455,6 +18336,7 @@ ClrDatagridModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", versi
18455
18336
  ClrDragAndDropModule,
18456
18337
  ClrSpinnerModule,
18457
18338
  ClrPopoverModuleNext,
18339
+ ClrKeyFocusModule,
18458
18340
  ClrFocusTrapModule,
18459
18341
  ClrFocusOnViewInitModule,
18460
18342
  ]] });
@@ -18473,12 +18355,12 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.3", ngImpor
18473
18355
  ClrDragAndDropModule,
18474
18356
  ClrSpinnerModule,
18475
18357
  ClrPopoverModuleNext,
18358
+ ClrKeyFocusModule,
18476
18359
  ClrFocusTrapModule,
18477
18360
  ClrFocusOnViewInitModule,
18478
18361
  ],
18479
18362
  declarations: [CLR_DATAGRID_DIRECTIVES],
18480
18363
  exports: [CLR_DATAGRID_DIRECTIVES],
18481
- entryComponents: [WrappedCell, WrappedColumn, WrappedRow],
18482
18364
  }]
18483
18365
  }], ctorParameters: function () { return []; } });
18484
18366
 
@@ -20084,7 +19966,9 @@ ClrDataModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "12.0.0", version:
20084
19966
  ClrDataModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "13.0.3", ngImport: i0, type: ClrDataModule, imports: [ClrDatagridModule, ClrStackViewModule, ClrTreeViewModule] });
20085
19967
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.3", ngImport: i0, type: ClrDataModule, decorators: [{
20086
19968
  type: NgModule,
20087
- args: [{ exports: [ClrDatagridModule, ClrStackViewModule, ClrTreeViewModule] }]
19969
+ args: [{
19970
+ exports: [ClrDatagridModule, ClrStackViewModule, ClrTreeViewModule],
19971
+ }]
20088
19972
  }] });
20089
19973
 
20090
19974
  /*
@@ -21633,7 +21517,9 @@ ClrEmphasisModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "12.0.0", versi
21633
21517
  ClrEmphasisModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "13.0.3", ngImport: i0, type: ClrEmphasisModule, imports: [ClrAlertModule] });
21634
21518
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.3", ngImport: i0, type: ClrEmphasisModule, decorators: [{
21635
21519
  type: NgModule,
21636
- args: [{ exports: [ClrAlertModule] }]
21520
+ args: [{
21521
+ exports: [ClrAlertModule],
21522
+ }]
21637
21523
  }] });
21638
21524
 
21639
21525
  /*
@@ -22419,7 +22305,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.3", ngImpor
22419
22305
  args: [{
22420
22306
  imports: [CommonModule],
22421
22307
  declarations: [TEMPLATE_REF_DIRECTIVES],
22422
- entryComponents: [TEMPLATE_REF_DIRECTIVES],
22423
22308
  exports: [TEMPLATE_REF_DIRECTIVES],
22424
22309
  }]
22425
22310
  }] });
@@ -23607,7 +23492,9 @@ ClrLayoutModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "12.0.0", version
23607
23492
  ClrLayoutModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "13.0.3", ngImport: i0, type: ClrLayoutModule, imports: [ClrMainContainerModule, ClrNavigationModule, ClrTabsModule, ClrVerticalNavModule] });
23608
23493
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.3", ngImport: i0, type: ClrLayoutModule, decorators: [{
23609
23494
  type: NgModule,
23610
- args: [{ exports: [ClrMainContainerModule, ClrNavigationModule, ClrTabsModule, ClrVerticalNavModule] }]
23495
+ args: [{
23496
+ exports: [ClrMainContainerModule, ClrNavigationModule, ClrTabsModule, ClrVerticalNavModule],
23497
+ }]
23611
23498
  }] });
23612
23499
 
23613
23500
  /*
@@ -24332,7 +24219,9 @@ ClrPopoverModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "12.0.0", versio
24332
24219
  ClrPopoverModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "13.0.3", ngImport: i0, type: ClrPopoverModule, imports: [ClrDropdownModule, ClrSignpostModule, ClrTooltipModule] });
24333
24220
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.3", ngImport: i0, type: ClrPopoverModule, decorators: [{
24334
24221
  type: NgModule,
24335
- args: [{ exports: [ClrDropdownModule, ClrSignpostModule, ClrTooltipModule] }]
24222
+ args: [{
24223
+ exports: [ClrDropdownModule, ClrSignpostModule, ClrTooltipModule],
24224
+ }]
24336
24225
  }] });
24337
24226
 
24338
24227
  /*
@@ -27927,5 +27816,5 @@ const CLR_MENU_POSITIONS = [
27927
27816
  * Generated bundle index. Do not edit.
27928
27817
  */
27929
27818
 
27930
- export { CLR_ALERT_DIRECTIVES, CLR_BUTTON_GROUP_DIRECTIVES, CLR_DATAGRID_DIRECTIVES, CLR_DATEPICKER_DIRECTIVES, CLR_DRAG_AND_DROP_DIRECTIVES, CLR_DROPDOWN_DIRECTIVES, CLR_ICON_DIRECTIVES, CLR_LAYOUT_DIRECTIVES, CLR_LIST_KEY_NAVIGATION_COFNIG_PROVIDER, CLR_LIST_KEY_NAVIGATION_CONFIG, CLR_LOADING_BUTTON_DIRECTIVES, CLR_LOADING_DIRECTIVES, CLR_MENU_POSITIONS, CLR_MODAL_DIRECTIVES, CLR_NAVIGATION_DIRECTIVES, CLR_PROGRESS_BAR_DIRECTIVES, CLR_SIGNPOST_DIRECTIVES, CLR_SPINNER_DIRECTIVES, CLR_STACK_VIEW_DIRECTIVES, CLR_TABS_DIRECTIVES, CLR_TOOLTIP_DIRECTIVES, CLR_TREE_VIEW_DIRECTIVES, CLR_VERTICAL_NAV_DIRECTIVES, CLR_WIZARD_DIRECTIVES, CONDITIONAL_DIRECTIVES, CUSTOM_BUTTON_TYPES, CdsIconCustomTag, ClarityModule, ClrAbstractContainer, ClrAccordion, ClrAccordionContent, ClrAccordionDescription, ClrAccordionModule, ClrAccordionPanel, ClrAccordionTitle, ClrAlert, ClrAlertItem, ClrAlertModule, ClrAlertText, ClrAlerts, ClrAlertsPager, ClrAlignment, ClrAriaCurrentLink, ClrAriaLivePoliteness, ClrAriaLiveService, ClrAxis, ClrButton, ClrButtonGroup, ClrButtonGroupModule, ClrButtonModule, ClrCalendar, ClrCheckbox, ClrCheckboxContainer, ClrCheckboxModule, ClrCheckboxWrapper, ClrCombobox, ClrComboboxContainer, ClrComboboxModule, ClrCommonFormsModule, ClrCommonStringsService, ClrConditionalModule, ClrControl, ClrControlContainer, ClrControlError, ClrControlHelper, ClrControlSuccess, ClrDataModule, ClrDatagrid, ClrDatagridActionBar, ClrDatagridActionOverflow, ClrDatagridCell, ClrDatagridColumn, ClrDatagridColumnSeparator, ClrDatagridColumnToggle, ClrDatagridColumnToggleButton, ClrDatagridColumnToggleTitle, ClrDatagridDetail, ClrDatagridDetailBody, ClrDatagridDetailHeader, ClrDatagridFilter, ClrDatagridFooter, ClrDatagridHideableColumn, ClrDatagridItems, ClrDatagridItemsTrackBy, ClrDatagridModule, ClrDatagridPageSize, ClrDatagridPagination, ClrDatagridPlaceholder, ClrDatagridRow, ClrDatagridRowDetail, ClrDatagridSortOrder, ClrDatalist, ClrDatalistContainer, ClrDatalistInput, ClrDatalistModule, ClrDateContainer, ClrDateInput, ClrDatepickerModule, ClrDatepickerViewManager, ClrDay, ClrDaypicker, ClrDestroyService, ClrDragAndDropModule, ClrDragEvent, ClrDragHandle, ClrDraggable, ClrDraggableGhost, ClrDropdown, ClrDropdownItem, ClrDropdownMenu, ClrDropdownModule, ClrDropdownTrigger, ClrDroppable, ClrEmphasisModule, ClrExpandableAnimation, ClrFocusOnViewInit, ClrFocusOnViewInitModule, ClrForTypeAhead, ClrForTypeAheadModule, ClrForm, ClrFormLayout, ClrFormsModule, ClrHeader, ClrIconCustomTag, ClrIconModule, ClrIfActive, ClrIfDetail, ClrIfDragged, ClrIfError, ClrIfExpanded, ClrIfOpen, ClrIfSuccess, ClrInput, ClrInputContainer, ClrInputModule, ClrKeyNavigationList, ClrKeyNavigationListModule, ClrLabel, ClrLayout, ClrLayoutModule, ClrLoading, ClrLoadingButton, ClrLoadingButtonModule, ClrLoadingModule, ClrLoadingState, ClrMainContainer, ClrMainContainerModule, ClrModal, ClrModalBody, ClrModalModule, ClrMonthpicker, ClrNavLevel, ClrNavigationModule, ClrOption, ClrOptionItems, ClrOptionSelected, ClrOptions, ClrPassword, ClrPasswordContainer, ClrPasswordModule, ClrPopoverAnchor, ClrPopoverContent, ClrPopoverEventsService, ClrPopoverModule, ClrPopoverPositionService, ClrPopoverToggleService, ClrProgressBar, ClrProgressBarModule, ClrRadio, ClrRadioContainer, ClrRadioModule, ClrRadioWrapper, ClrRange, ClrRangeContainer, ClrRangeModule, ClrRecursiveForOf, ClrSelect, ClrSelectContainer, ClrSelectModule, ClrSelectedState, ClrSide, ClrSignpost, ClrSignpostContent, ClrSignpostModule, ClrSignpostTrigger, ClrSpinner, ClrSpinnerModule, ClrStackBlock, ClrStackContentInput, ClrStackHeader, ClrStackInput, ClrStackSelect, ClrStackView, ClrStackViewCustomTags, ClrStackViewLabel, ClrStackViewModule, ClrStepButton, ClrStepButtonType, ClrStepper, ClrStepperModule, ClrStepperPanel, ClrTab, ClrTabContent, ClrTabLink, ClrTabOverflowContent, ClrTabs, ClrTabsModule, ClrTextarea, ClrTextareaContainer, ClrTextareaModule, ClrTimeline, ClrTimelineLayout, ClrTimelineModule, ClrTimelineStep, ClrTimelineStepDescription, ClrTimelineStepHeader, ClrTimelineStepState, ClrTimelineStepTitle, ClrTooltip, ClrTooltipContent, ClrTooltipModule, ClrTooltipTrigger, ClrTree, ClrTreeNode, ClrTreeNodeLink, ClrTreeViewModule, ClrVerticalNav, ClrVerticalNavGroup, ClrVerticalNavGroupChildren, ClrVerticalNavIcon, ClrVerticalNavLink, ClrVerticalNavModule, ClrWizard, ClrWizardButton, ClrWizardCustomTags, ClrWizardHeaderAction, ClrWizardModule, ClrWizardPage, ClrWizardPageButtons, ClrWizardPageHeaderActions, ClrWizardPageNavTitle, ClrWizardPageTitle, ClrWizardStepnav, ClrWizardStepnavItem, ClrYearpicker, DEFAULT_BUTTON_TYPES, DatagridNumericFilter, DatagridPropertyComparator, DatagridPropertyNumericFilter, DatagridPropertyStringFilter, DatagridStringFilter, EXPANDABLE_ANIMATION_DIRECTIVES, FOCUSABLE_ELEMENT_SELECTORS, FOCUSABLE_ELEMENT_SELECTORS_PROVIDER, FOCUS_ON_VIEW_INIT, FOCUS_ON_VIEW_INIT_DIRECTIVES, IS_TOGGLE, IS_TOGGLE_PROVIDER, LoadingListener, MainContainerWillyWonka, NavDetectionOompaLoompa, TOGGLE_SERVICE, TOGGLE_SERVICE_PROVIDER, ToggleServiceFactory, WrappedFormControl, collapse, commonStringsDefault, fade, fadeSlide, isToggleFactory, slide, AccordionOompaLoompa as ÇlrAccordionOompaLoompa, AccordionWillyWonka as ÇlrAccordionWillyWonka, ActionableOompaLoompa as ÇlrActionableOompaLoompa, ActiveOompaLoompa as ÇlrActiveOompaLoompa, ClrFocusTrapModule as ÇlrClrFocusTrapModule, ClrPopoverCloseButton as ÇlrClrPopoverCloseButton, ClrPopoverModuleNext as ÇlrClrPopoverModuleNext, ClrPopoverOpenCloseButton as ÇlrClrPopoverOpenCloseButton, DatagridCellRenderer as ÇlrDatagridCellRenderer, DatagridDetailRegisterer as ÇlrDatagridDetailRegisterer, DatagridHeaderRenderer as ÇlrDatagridHeaderRenderer, DatagridMainRenderer as ÇlrDatagridMainRenderer, DatagridRowRenderer as ÇlrDatagridRowRenderer, DatagridWillyWonka as ÇlrDatagridWillyWonka, ExpandableOompaLoompa as ÇlrExpandableOompaLoompa, FocusTrapDirective as ÇlrFocusTrapDirective, FocusTrapTracker as ÇlrFocusTrapTracker, StepperOompaLoompa as ÇlrStepperOompaLoompa, StepperWillyWonka as ÇlrStepperWillyWonka, TabsWillyWonka as ÇlrTabsWillyWonka, WrappedCell as ÇlrWrappedCell, WrappedColumn as ÇlrWrappedColumn, WrappedRow as ÇlrWrappedRow };
27819
+ export { CLR_ALERT_DIRECTIVES, CLR_BUTTON_GROUP_DIRECTIVES, CLR_DATAGRID_DIRECTIVES, CLR_DATEPICKER_DIRECTIVES, CLR_DRAG_AND_DROP_DIRECTIVES, CLR_DROPDOWN_DIRECTIVES, CLR_ICON_DIRECTIVES, CLR_LAYOUT_DIRECTIVES, CLR_LOADING_BUTTON_DIRECTIVES, CLR_LOADING_DIRECTIVES, CLR_MENU_POSITIONS, CLR_MODAL_DIRECTIVES, CLR_NAVIGATION_DIRECTIVES, CLR_PROGRESS_BAR_DIRECTIVES, CLR_SIGNPOST_DIRECTIVES, CLR_SPINNER_DIRECTIVES, CLR_STACK_VIEW_DIRECTIVES, CLR_TABS_DIRECTIVES, CLR_TOOLTIP_DIRECTIVES, CLR_TREE_VIEW_DIRECTIVES, CLR_VERTICAL_NAV_DIRECTIVES, CLR_WIZARD_DIRECTIVES, CONDITIONAL_DIRECTIVES, CUSTOM_BUTTON_TYPES, CdsIconCustomTag, ClarityModule, ClrAbstractContainer, ClrAccordion, ClrAccordionContent, ClrAccordionDescription, ClrAccordionModule, ClrAccordionPanel, ClrAccordionTitle, ClrAlert, ClrAlertItem, ClrAlertModule, ClrAlertText, ClrAlerts, ClrAlertsPager, ClrAlignment, ClrAriaCurrentLink, ClrAriaLivePoliteness, ClrAriaLiveService, ClrAxis, ClrButton, ClrButtonGroup, ClrButtonGroupModule, ClrButtonModule, ClrCalendar, ClrCheckbox, ClrCheckboxContainer, ClrCheckboxModule, ClrCheckboxWrapper, ClrCombobox, ClrComboboxContainer, ClrComboboxModule, ClrCommonFormsModule, ClrCommonStringsService, ClrConditionalModule, ClrControl, ClrControlContainer, ClrControlError, ClrControlHelper, ClrControlSuccess, ClrDataModule, ClrDatagrid, ClrDatagridActionBar, ClrDatagridActionOverflow, ClrDatagridCell, ClrDatagridColumn, ClrDatagridColumnSeparator, ClrDatagridColumnToggle, ClrDatagridColumnToggleButton, ClrDatagridColumnToggleTitle, ClrDatagridDetail, ClrDatagridDetailBody, ClrDatagridDetailHeader, ClrDatagridFilter, ClrDatagridFooter, ClrDatagridHideableColumn, ClrDatagridItems, ClrDatagridItemsTrackBy, ClrDatagridModule, ClrDatagridPageSize, ClrDatagridPagination, ClrDatagridPlaceholder, ClrDatagridRow, ClrDatagridRowDetail, ClrDatagridSortOrder, ClrDatalist, ClrDatalistContainer, ClrDatalistInput, ClrDatalistModule, ClrDateContainer, ClrDateInput, ClrDatepickerModule, ClrDatepickerViewManager, ClrDay, ClrDaypicker, ClrDestroyService, ClrDragAndDropModule, ClrDragEvent, ClrDragHandle, ClrDraggable, ClrDraggableGhost, ClrDropdown, ClrDropdownItem, ClrDropdownMenu, ClrDropdownModule, ClrDropdownTrigger, ClrDroppable, ClrEmphasisModule, ClrExpandableAnimation, ClrFocusOnViewInit, ClrFocusOnViewInitModule, ClrForTypeAhead, ClrForTypeAheadModule, ClrForm, ClrFormLayout, ClrFormsModule, ClrHeader, ClrIconCustomTag, ClrIconModule, ClrIfActive, ClrIfDetail, ClrIfDragged, ClrIfError, ClrIfExpanded, ClrIfOpen, ClrIfSuccess, ClrInput, ClrInputContainer, ClrInputModule, ClrLabel, ClrLayout, ClrLayoutModule, ClrLoading, ClrLoadingButton, ClrLoadingButtonModule, ClrLoadingModule, ClrLoadingState, ClrMainContainer, ClrMainContainerModule, ClrModal, ClrModalBody, ClrModalModule, ClrMonthpicker, ClrNavLevel, ClrNavigationModule, ClrOption, ClrOptionItems, ClrOptionSelected, ClrOptions, ClrPassword, ClrPasswordContainer, ClrPasswordModule, ClrPopoverAnchor, ClrPopoverContent, ClrPopoverEventsService, ClrPopoverModule, ClrPopoverPositionService, ClrPopoverToggleService, ClrProgressBar, ClrProgressBarModule, ClrRadio, ClrRadioContainer, ClrRadioModule, ClrRadioWrapper, ClrRange, ClrRangeContainer, ClrRangeModule, ClrRecursiveForOf, ClrSelect, ClrSelectContainer, ClrSelectModule, ClrSelectedState, ClrSide, ClrSignpost, ClrSignpostContent, ClrSignpostModule, ClrSignpostTrigger, ClrSpinner, ClrSpinnerModule, ClrStackBlock, ClrStackContentInput, ClrStackHeader, ClrStackInput, ClrStackSelect, ClrStackView, ClrStackViewCustomTags, ClrStackViewLabel, ClrStackViewModule, ClrStepButton, ClrStepButtonType, ClrStepper, ClrStepperModule, ClrStepperPanel, ClrTab, ClrTabContent, ClrTabLink, ClrTabOverflowContent, ClrTabs, ClrTabsModule, ClrTextarea, ClrTextareaContainer, ClrTextareaModule, ClrTimeline, ClrTimelineLayout, ClrTimelineModule, ClrTimelineStep, ClrTimelineStepDescription, ClrTimelineStepHeader, ClrTimelineStepState, ClrTimelineStepTitle, ClrTooltip, ClrTooltipContent, ClrTooltipModule, ClrTooltipTrigger, ClrTree, ClrTreeNode, ClrTreeNodeLink, ClrTreeViewModule, ClrVerticalNav, ClrVerticalNavGroup, ClrVerticalNavGroupChildren, ClrVerticalNavIcon, ClrVerticalNavLink, ClrVerticalNavModule, ClrWizard, ClrWizardButton, ClrWizardCustomTags, ClrWizardHeaderAction, ClrWizardModule, ClrWizardPage, ClrWizardPageButtons, ClrWizardPageHeaderActions, ClrWizardPageNavTitle, ClrWizardPageTitle, ClrWizardStepnav, ClrWizardStepnavItem, ClrYearpicker, DEFAULT_BUTTON_TYPES, DatagridNumericFilter, DatagridPropertyComparator, DatagridPropertyNumericFilter, DatagridPropertyStringFilter, DatagridStringFilter, EXPANDABLE_ANIMATION_DIRECTIVES, FOCUS_ON_VIEW_INIT, FOCUS_ON_VIEW_INIT_DIRECTIVES, IS_TOGGLE, IS_TOGGLE_PROVIDER, LoadingListener, MainContainerWillyWonka, NavDetectionOompaLoompa, TOGGLE_SERVICE, TOGGLE_SERVICE_PROVIDER, ToggleServiceFactory, WrappedFormControl, collapse, commonStringsDefault, fade, fadeSlide, isToggleFactory, slide, AccordionOompaLoompa as ÇlrAccordionOompaLoompa, AccordionWillyWonka as ÇlrAccordionWillyWonka, ActionableOompaLoompa as ÇlrActionableOompaLoompa, ActiveOompaLoompa as ÇlrActiveOompaLoompa, ClrFocusTrapModule as ÇlrClrFocusTrapModule, ClrPopoverCloseButton as ÇlrClrPopoverCloseButton, ClrPopoverModuleNext as ÇlrClrPopoverModuleNext, ClrPopoverOpenCloseButton as ÇlrClrPopoverOpenCloseButton, DatagridCellRenderer as ÇlrDatagridCellRenderer, DatagridDetailRegisterer as ÇlrDatagridDetailRegisterer, DatagridHeaderRenderer as ÇlrDatagridHeaderRenderer, DatagridMainRenderer as ÇlrDatagridMainRenderer, DatagridRowRenderer as ÇlrDatagridRowRenderer, DatagridWillyWonka as ÇlrDatagridWillyWonka, ExpandableOompaLoompa as ÇlrExpandableOompaLoompa, FocusTrapDirective as ÇlrFocusTrapDirective, FocusTrapTracker as ÇlrFocusTrapTracker, StepperOompaLoompa as ÇlrStepperOompaLoompa, StepperWillyWonka as ÇlrStepperWillyWonka, TabsWillyWonka as ÇlrTabsWillyWonka, WrappedCell as ÇlrWrappedCell, WrappedColumn as ÇlrWrappedColumn, WrappedRow as ÇlrWrappedRow };
27931
27820
  //# sourceMappingURL=clr-angular.mjs.map