@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
  /*
@@ -1200,9 +1204,7 @@ class ClrStepper {
1200
1204
  this.subscriptions.forEach(s => s.unsubscribe());
1201
1205
  }
1202
1206
  listenForFormResetChanges() {
1203
- return this.form.statusChanges
1204
- .pipe(filter(() => this.form.pristine)) // https://github.com/angular/angular/issues/10887
1205
- .subscribe(() => this.stepperService.resetPanels());
1207
+ return fromControlReset(this.form.form).subscribe(() => this.stepperService.resetPanels());
1206
1208
  }
1207
1209
  listenForPanelsCompleted() {
1208
1210
  return this.stepperService.panelsCompleted.subscribe(panelsCompleted => {
@@ -1254,6 +1256,18 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.3", ngImpor
1254
1256
  type: ContentChildren,
1255
1257
  args: [ClrStepperPanel, { descendants: true }]
1256
1258
  }] } });
1259
+ function fromControlReset(control) {
1260
+ return new Observable(observer => {
1261
+ const unpatchedControlReset = control.reset;
1262
+ control.reset = () => {
1263
+ observer.next();
1264
+ unpatchedControlReset.apply(control);
1265
+ };
1266
+ return () => {
1267
+ control.reset = unpatchedControlReset;
1268
+ };
1269
+ });
1270
+ }
1257
1271
 
1258
1272
  /*
1259
1273
  * Copyright (c) 2016-2022 VMware, Inc. All Rights Reserved.
@@ -2975,7 +2989,10 @@ ClrHostWrappingModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "12.0.0", v
2975
2989
  ClrHostWrappingModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "13.0.3", ngImport: i0, type: ClrHostWrappingModule });
2976
2990
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.3", ngImport: i0, type: ClrHostWrappingModule, decorators: [{
2977
2991
  type: NgModule,
2978
- args: [{ declarations: [EmptyAnchor], exports: [EmptyAnchor], entryComponents: [EmptyAnchor] }]
2992
+ args: [{
2993
+ declarations: [EmptyAnchor],
2994
+ exports: [EmptyAnchor],
2995
+ }]
2979
2996
  }] });
2980
2997
 
2981
2998
  /*
@@ -4143,7 +4160,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.3", ngImpor
4143
4160
  ClrControlContainer,
4144
4161
  ClrControl,
4145
4162
  ],
4146
- entryComponents: [ClrControlContainer],
4147
4163
  }]
4148
4164
  }], ctorParameters: function () { return []; } });
4149
4165
 
@@ -4384,7 +4400,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.3", ngImpor
4384
4400
  imports: [CommonModule, ClrIconModule, ClrCommonFormsModule, ClrHostWrappingModule],
4385
4401
  declarations: [ClrCheckbox, ClrCheckboxContainer, ClrCheckboxWrapper],
4386
4402
  exports: [ClrCommonFormsModule, ClrCheckbox, ClrCheckboxContainer, ClrCheckboxWrapper],
4387
- entryComponents: [ClrCheckboxWrapper],
4388
4403
  }]
4389
4404
  }], ctorParameters: function () { return []; } });
4390
4405
 
@@ -4876,7 +4891,11 @@ ClrConditionalModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "12.0.0", ve
4876
4891
  ClrConditionalModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "13.0.3", ngImport: i0, type: ClrConditionalModule, imports: [[CommonModule]] });
4877
4892
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.3", ngImport: i0, type: ClrConditionalModule, decorators: [{
4878
4893
  type: NgModule,
4879
- args: [{ imports: [CommonModule], declarations: [CONDITIONAL_DIRECTIVES], exports: [CONDITIONAL_DIRECTIVES] }]
4894
+ args: [{
4895
+ imports: [CommonModule],
4896
+ declarations: [CONDITIONAL_DIRECTIVES],
4897
+ exports: [CONDITIONAL_DIRECTIVES],
4898
+ }]
4880
4899
  }] });
4881
4900
 
4882
4901
  /*
@@ -6793,7 +6812,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.3", ngImpor
6793
6812
  imports: [CommonModule, FormsModule, ClrIconModule, ClrCommonFormsModule],
6794
6813
  declarations: [ClrInput, ClrInputContainer],
6795
6814
  exports: [ClrCommonFormsModule, ClrInput, ClrInputContainer],
6796
- entryComponents: [ClrInputContainer],
6797
6815
  }]
6798
6816
  }], ctorParameters: function () { return []; } });
6799
6817
 
@@ -9510,7 +9528,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.3", ngImpor
9510
9528
  ],
9511
9529
  declarations: [CLR_DATEPICKER_DIRECTIVES],
9512
9530
  exports: [CLR_DATEPICKER_DIRECTIVES],
9513
- entryComponents: [ClrDateContainer],
9514
9531
  }]
9515
9532
  }], ctorParameters: function () { return []; } });
9516
9533
 
@@ -9748,7 +9765,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.3", ngImpor
9748
9765
  imports: [CommonModule, FormsModule, ClrIconModule, ClrCommonFormsModule],
9749
9766
  declarations: [ClrPassword, ClrPasswordContainer],
9750
9767
  exports: [ClrCommonFormsModule, ClrPassword, ClrPasswordContainer],
9751
- entryComponents: [ClrPasswordContainer],
9752
9768
  }]
9753
9769
  }], ctorParameters: function () { return []; } });
9754
9770
 
@@ -9953,7 +9969,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.3", ngImpor
9953
9969
  imports: [CommonModule, ClrCommonFormsModule, ClrHostWrappingModule, ClrIconModule],
9954
9970
  declarations: [ClrRadio, ClrRadioContainer, ClrRadioWrapper],
9955
9971
  exports: [ClrCommonFormsModule, ClrRadio, ClrRadioContainer, ClrRadioWrapper],
9956
- entryComponents: [ClrRadioWrapper],
9957
9972
  }]
9958
9973
  }], ctorParameters: function () { return []; } });
9959
9974
 
@@ -10113,7 +10128,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.3", ngImpor
10113
10128
  imports: [CommonModule, ClrCommonFormsModule, ClrHostWrappingModule, ClrIconModule],
10114
10129
  declarations: [ClrRange, ClrRangeContainer],
10115
10130
  exports: [ClrCommonFormsModule, ClrRange, ClrRangeContainer],
10116
- entryComponents: [ClrRangeContainer],
10117
10131
  }]
10118
10132
  }], ctorParameters: function () { return []; } });
10119
10133
 
@@ -10263,7 +10277,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.3", ngImpor
10263
10277
  imports: [CommonModule, FormsModule, ClrIconModule, ClrCommonFormsModule],
10264
10278
  declarations: [ClrSelect, ClrSelectContainer],
10265
10279
  exports: [ClrCommonFormsModule, ClrSelect, ClrSelectContainer],
10266
- entryComponents: [ClrSelectContainer],
10267
10280
  }]
10268
10281
  }], ctorParameters: function () { return []; } });
10269
10282
 
@@ -10386,7 +10399,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.3", ngImpor
10386
10399
  imports: [CommonModule, FormsModule, ClrIconModule, ClrCommonFormsModule],
10387
10400
  declarations: [ClrTextarea, ClrTextareaContainer],
10388
10401
  exports: [ClrCommonFormsModule, ClrTextarea, ClrTextareaContainer],
10389
- entryComponents: [ClrTextareaContainer],
10390
10402
  }]
10391
10403
  }], ctorParameters: function () { return []; } });
10392
10404
 
@@ -11513,7 +11525,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.3", ngImpor
11513
11525
  args: [{
11514
11526
  imports: [CommonModule],
11515
11527
  declarations: [CLR_DRAG_AND_DROP_DIRECTIVES],
11516
- entryComponents: [ClrDraggableGhost],
11517
11528
  exports: [CLR_DRAG_AND_DROP_DIRECTIVES],
11518
11529
  }]
11519
11530
  }] });
@@ -11650,7 +11661,11 @@ ClrLoadingModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "12.0.0", versio
11650
11661
  ClrLoadingModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "13.0.3", ngImport: i0, type: ClrLoadingModule, imports: [[CommonModule]] });
11651
11662
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.3", ngImport: i0, type: ClrLoadingModule, decorators: [{
11652
11663
  type: NgModule,
11653
- args: [{ imports: [CommonModule], declarations: [CLR_LOADING_DIRECTIVES], exports: [CLR_LOADING_DIRECTIVES] }]
11664
+ args: [{
11665
+ imports: [CommonModule],
11666
+ declarations: [CLR_LOADING_DIRECTIVES],
11667
+ exports: [CLR_LOADING_DIRECTIVES],
11668
+ }]
11654
11669
  }] });
11655
11670
 
11656
11671
  /*
@@ -11718,7 +11733,11 @@ ClrOutsideClickModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "12.0.0", v
11718
11733
  ClrOutsideClickModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "13.0.3", ngImport: i0, type: ClrOutsideClickModule, imports: [[CommonModule]] });
11719
11734
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.3", ngImport: i0, type: ClrOutsideClickModule, decorators: [{
11720
11735
  type: NgModule,
11721
- args: [{ imports: [CommonModule], declarations: [OUSTIDE_CLICK_DIRECTIVES], exports: [OUSTIDE_CLICK_DIRECTIVES] }]
11736
+ args: [{
11737
+ imports: [CommonModule],
11738
+ declarations: [OUSTIDE_CLICK_DIRECTIVES],
11739
+ exports: [OUSTIDE_CLICK_DIRECTIVES],
11740
+ }]
11722
11741
  }] });
11723
11742
 
11724
11743
  /*
@@ -14620,6 +14639,10 @@ class Selection {
14620
14639
  * Subscriptions to the other providers changes.
14621
14640
  */
14622
14641
  this.subscriptions = [];
14642
+ /**
14643
+ * Shift key state, for use in range selection.
14644
+ */
14645
+ this.shiftPressed = false;
14623
14646
  this.valueCollector = new Subject();
14624
14647
  /**
14625
14648
  * The Observable that lets other classes subscribe to selection changes
@@ -15002,7 +15025,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.3", ngImpor
15002
15025
  */
15003
15026
  let nbRow = 0;
15004
15027
  class ClrDatagridRow {
15005
- constructor(selection, rowActionService, globalExpandable, expand, detailService, displayMode, vcr, renderer, el, commonStrings) {
15028
+ constructor(selection, rowActionService, globalExpandable, expand, detailService, displayMode, vcr, renderer, el, commonStrings, items, document) {
15006
15029
  this.selection = selection;
15007
15030
  this.rowActionService = rowActionService;
15008
15031
  this.globalExpandable = globalExpandable;
@@ -15013,6 +15036,8 @@ class ClrDatagridRow {
15013
15036
  this.renderer = renderer;
15014
15037
  this.el = el;
15015
15038
  this.commonStrings = commonStrings;
15039
+ this.items = items;
15040
+ this.document = document;
15016
15041
  /* reference to the enum so that template can access */
15017
15042
  this.SELECTION_TYPE = SelectionType;
15018
15043
  this.expandAnimationTrigger = false;
@@ -15043,6 +15068,24 @@ class ClrDatagridRow {
15043
15068
  }
15044
15069
  }));
15045
15070
  }
15071
+ /**
15072
+ * The default behavior in Chrome and Firefox for shift-clicking on a label is to perform text-selection.
15073
+ * This prevents our intended range-selection, because this text-selection overrides our shift-click event.
15074
+ * We need to clear the stored selection range when shift-clicking. This will override the mostly unused shift-click
15075
+ * selection browser functionality, which is inconsistently implemented in browsers anyway.
15076
+ */
15077
+ clearRanges(event) {
15078
+ if (event.shiftKey) {
15079
+ this.document.getSelection().removeAllRanges();
15080
+ // Firefox is too persistent about its text-selection behaviour. So we need to add a preventDefault();
15081
+ // We should not try to enforce this on the other browsers, though, because their toggle cycle does not get canceled by
15082
+ // the preventDefault() and they toggle the checkbox second time, effectively retrurning it to not-selected.
15083
+ if (window.navigator.userAgent.indexOf('Firefox') !== -1) {
15084
+ event.preventDefault();
15085
+ this.toggle(true);
15086
+ }
15087
+ }
15088
+ }
15046
15089
  /**
15047
15090
  * Indicates if the row is selected
15048
15091
  */
@@ -15059,6 +15102,12 @@ class ClrDatagridRow {
15059
15102
  this._selected = value;
15060
15103
  }
15061
15104
  else {
15105
+ if (value && this.selection.selectionType === SelectionType.Multi) {
15106
+ this.rangeSelect();
15107
+ }
15108
+ else {
15109
+ this.selection.rangeStart = null;
15110
+ }
15062
15111
  this.selection.setSelected(this.item, value);
15063
15112
  }
15064
15113
  }
@@ -15146,6 +15195,29 @@ class ClrDatagridRow {
15146
15195
  this.expandAnimationTrigger = !this.expandAnimationTrigger;
15147
15196
  }));
15148
15197
  }
15198
+ rangeSelect() {
15199
+ const items = this.items.displayed;
15200
+ if (!items) {
15201
+ return;
15202
+ }
15203
+ const startIx = items.indexOf(this.selection.rangeStart);
15204
+ if (this.selection.rangeStart &&
15205
+ this.selection.current.includes(this.selection.rangeStart) &&
15206
+ this.selection.shiftPressed &&
15207
+ startIx !== -1) {
15208
+ const endIx = items.indexOf(this.item);
15209
+ // Using Set to remove duplicates
15210
+ const newSelection = new Set(this.selection.current.concat(items.slice(Math.min(startIx, endIx), Math.max(startIx, endIx) + 1)));
15211
+ this.selection.clearSelection();
15212
+ this.selection.current.push(...newSelection);
15213
+ }
15214
+ else {
15215
+ // page number has changed or
15216
+ // no Shift was pressed or
15217
+ // rangeStart not yet set
15218
+ this.selection.rangeStart = this.item;
15219
+ }
15220
+ }
15149
15221
  ngOnDestroy() {
15150
15222
  this.subscriptions.forEach((sub) => sub.unsubscribe());
15151
15223
  }
@@ -15157,12 +15229,12 @@ class ClrDatagridRow {
15157
15229
  return this.wrappedInjector.get(WrappedRow, this.vcr).rowView;
15158
15230
  }
15159
15231
  }
15160
- 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 });
15232
+ 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 });
15161
15233
  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: [
15162
15234
  DatagridIfExpandService,
15163
15235
  { provide: IfExpandService, useExisting: DatagridIfExpandService },
15164
15236
  { provide: LoadingListener, useExisting: DatagridIfExpandService },
15165
- ], 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" }] });
15237
+ ], 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" }] });
15166
15238
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.3", ngImport: i0, type: ClrDatagridRow, decorators: [{
15167
15239
  type: Component,
15168
15240
  args: [{ selector: 'clr-dg-row', host: {
@@ -15174,8 +15246,13 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.3", ngImpor
15174
15246
  DatagridIfExpandService,
15175
15247
  { provide: IfExpandService, useExisting: DatagridIfExpandService },
15176
15248
  { provide: LoadingListener, useExisting: DatagridIfExpandService },
15177
- ], 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" }]
15178
- }], 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: [{
15249
+ ], 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" }]
15250
+ }], ctorParameters: function () {
15251
+ 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: [{
15252
+ type: Inject,
15253
+ args: [DOCUMENT]
15254
+ }] }];
15255
+ }, propDecorators: { expandAnimation: [{
15179
15256
  type: ViewChild,
15180
15257
  args: [ClrExpandableAnimation]
15181
15258
  }], item: [{
@@ -15528,7 +15605,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.3", ngImpor
15528
15605
  * The full license information can be found in LICENSE in the root directory of this project.
15529
15606
  */
15530
15607
  class ClrDatagrid {
15531
- constructor(organizer, items, expandableRows, selection, rowActionService, stateProvider, displayMode, renderer, detailService, datagridId, el, page, commonStrings, columnsService, keyNavigation) {
15608
+ constructor(organizer, items, expandableRows, selection, rowActionService, stateProvider, displayMode, renderer, detailService, datagridId, document, el, page, commonStrings, columnsService, keyNavigation, zone) {
15532
15609
  this.organizer = organizer;
15533
15610
  this.items = items;
15534
15611
  this.expandableRows = expandableRows;
@@ -15538,11 +15615,13 @@ class ClrDatagrid {
15538
15615
  this.displayMode = displayMode;
15539
15616
  this.renderer = renderer;
15540
15617
  this.detailService = detailService;
15618
+ this.document = document;
15541
15619
  this.el = el;
15542
15620
  this.page = page;
15543
15621
  this.commonStrings = commonStrings;
15544
15622
  this.columnsService = columnsService;
15545
15623
  this.keyNavigation = keyNavigation;
15624
+ this.zone = zone;
15546
15625
  /* reference to the enum so that template can access */
15547
15626
  this.SELECTION_TYPE = SelectionType;
15548
15627
  /**
@@ -15727,6 +15806,19 @@ class ClrDatagrid {
15727
15806
  });
15728
15807
  }
15729
15808
  }));
15809
+ // We need to preserve shift state, so it can be used on selection change, regardless of the input event
15810
+ // that triggered the change. This helps us to easily resolve the k/b only case together with the mouse selection case.
15811
+ this.zone.runOutsideAngular(() => {
15812
+ this._subscriptions.push(fromEvent(this.document.body, 'keydown').subscribe((event) => {
15813
+ if (event.key === 'Shift') {
15814
+ this.selection.shiftPressed = true;
15815
+ }
15816
+ }), fromEvent(this.document.body, 'keyup').subscribe((event) => {
15817
+ if (event.key === 'Shift') {
15818
+ this.selection.shiftPressed = false;
15819
+ }
15820
+ }));
15821
+ });
15730
15822
  }
15731
15823
  ngOnDestroy() {
15732
15824
  this._subscriptions.forEach((sub) => sub.unsubscribe());
@@ -15735,7 +15827,7 @@ class ClrDatagrid {
15735
15827
  this.organizer.resize();
15736
15828
  }
15737
15829
  }
15738
- 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 });
15830
+ 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 });
15739
15831
  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: [
15740
15832
  Selection,
15741
15833
  Sort,
@@ -15781,7 +15873,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.3", ngImpor
15781
15873
  return [{ type: DatagridRenderOrganizer }, { type: Items }, { type: ExpandableRowsCount }, { type: Selection }, { type: RowActionService }, { type: StateProvider }, { type: DisplayModeService }, { type: i0.Renderer2 }, { type: DetailService }, { type: undefined, decorators: [{
15782
15874
  type: Inject,
15783
15875
  args: [UNIQUE_ID]
15784
- }] }, { type: i0.ElementRef }, { type: Page }, { type: ClrCommonStringsService }, { type: ColumnsService }, { type: KeyNavigationGridController }];
15876
+ }] }, { type: undefined, decorators: [{
15877
+ type: Inject,
15878
+ args: [DOCUMENT]
15879
+ }] }, { type: i0.ElementRef }, { type: Page }, { type: ClrCommonStringsService }, { type: ColumnsService }, { type: KeyNavigationGridController }, { type: i0.NgZone }];
15785
15880
  }, propDecorators: { loading: [{
15786
15881
  type: Input,
15787
15882
  args: ['clrDgLoading']
@@ -15863,6 +15958,12 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.3", ngImpor
15863
15958
  }]
15864
15959
  }] });
15865
15960
 
15961
+ /*
15962
+ * Copyright (c) 2016-2022 VMware, Inc. All Rights Reserved.
15963
+ * This software is released under MIT license.
15964
+ * The full license information can be found in LICENSE in the root directory of this project.
15965
+ */
15966
+
15866
15967
  /*
15867
15968
  * Copyright (c) 2016-2022 VMware, Inc. All Rights Reserved.
15868
15969
  * This software is released under MIT license.
@@ -15890,7 +15991,7 @@ class ClrDatagridActionOverflow {
15890
15991
  this.subscriptions.push(this.smartToggleService.openChange.subscribe(openState => {
15891
15992
  this.open = openState;
15892
15993
  if (openState) {
15893
- this.focusFirstButton();
15994
+ this.initializeFocus();
15894
15995
  }
15895
15996
  }));
15896
15997
  this.popoverId = 'clr-action-menu' + clrDgActionId++;
@@ -15902,13 +16003,15 @@ class ClrDatagridActionOverflow {
15902
16003
  closeOverflowContent(event) {
15903
16004
  this.smartToggleService.toggleWithEvent(event);
15904
16005
  }
15905
- focusFirstButton() {
16006
+ initializeFocus() {
15906
16007
  if (isPlatformBrowser(this.platformId)) {
15907
16008
  this.zone.runOutsideAngular(() => {
15908
16009
  setTimeout(() => {
15909
- const firstButton = document.querySelector('button.action-item');
15910
- if (firstButton) {
15911
- firstButton.focus();
16010
+ const buttons = Array.from(document.querySelectorAll('button.action-item'));
16011
+ if (buttons.length) {
16012
+ this.keyFocus.current = 0;
16013
+ this.keyFocus.focusableItems = buttons;
16014
+ this.keyFocus.focusCurrent();
15912
16015
  }
15913
16016
  });
15914
16017
  });
@@ -15928,7 +16031,7 @@ class ClrDatagridActionOverflow {
15928
16031
  }
15929
16032
  }
15930
16033
  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 });
15931
- 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: `
16034
+ 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: `
15932
16035
  <button
15933
16036
  class="datagrid-action-toggle"
15934
16037
  type="button"
@@ -15949,13 +16052,14 @@ ClrDatagridActionOverflow.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.
15949
16052
  [id]="popoverId"
15950
16053
  [attr.aria-hidden]="!open"
15951
16054
  [attr.id]="popoverId"
16055
+ clrKeyFocus
15952
16056
  clrFocusTrap
15953
16057
  (click)="closeOverflowContent($event)"
15954
16058
  *clrPopoverContent="open; at: smartPosition; outsideClickToClose: true; scrollToClose: true"
15955
16059
  >
15956
16060
  <ng-content></ng-content>
15957
16061
  </div>
15958
- `, 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"] }] });
16062
+ `, 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"] }] });
15959
16063
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.3", ngImport: i0, type: ClrDatagridActionOverflow, decorators: [{
15960
16064
  type: Component,
15961
16065
  args: [{
@@ -15982,6 +16086,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.3", ngImpor
15982
16086
  [id]="popoverId"
15983
16087
  [attr.aria-hidden]="!open"
15984
16088
  [attr.id]="popoverId"
16089
+ clrKeyFocus
15985
16090
  clrFocusTrap
15986
16091
  (click)="closeOverflowContent($event)"
15987
16092
  *clrPopoverContent="open; at: smartPosition; outsideClickToClose: true; scrollToClose: true"
@@ -15998,7 +16103,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.3", ngImpor
15998
16103
  type: Inject,
15999
16104
  args: [UNIQUE_ID]
16000
16105
  }] }];
16001
- }, propDecorators: { open: [{
16106
+ }, propDecorators: { keyFocus: [{
16107
+ type: ViewChild,
16108
+ args: [ClrKeyFocus]
16109
+ }], open: [{
16002
16110
  type: Input,
16003
16111
  args: ['clrDgActionOverflowOpen']
16004
16112
  }], openChange: [{
@@ -16937,224 +17045,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.3", ngImpor
16937
17045
  * The full license information can be found in LICENSE in the root directory of this project.
16938
17046
  */
16939
17047
 
16940
- /*
16941
- * Copyright (c) 2016-2022 VMware, Inc. All Rights Reserved.
16942
- * This software is released under MIT license.
16943
- * The full license information can be found in LICENSE in the root directory of this project.
16944
- */
16945
- const FOCUSABLE_ELEMENT_SELECTORS = new InjectionToken('FocusableElements');
16946
- const FOCUSABLE_ELEMENT_SELECTORS_PROVIDER = {
16947
- provide: FOCUSABLE_ELEMENT_SELECTORS,
16948
- useValue: [
16949
- 'a[href]',
16950
- 'area[href]',
16951
- 'input:not([disabled])',
16952
- 'button:not([disabled])',
16953
- 'select:not([disabled])',
16954
- 'textarea:not([disabled])',
16955
- 'iframe',
16956
- 'object',
16957
- 'embed',
16958
- '*[tabindex]',
16959
- '*[contenteditable=true]',
16960
- '[role=button]:not([disabled])',
16961
- ],
16962
- };
16963
-
16964
- /*
16965
- * Copyright (c) 2016-2022 VMware, Inc. All Rights Reserved.
16966
- * This software is released under MIT license.
16967
- * The full license information can be found in LICENSE in the root directory of this project.
16968
- */
16969
- const CLR_LIST_KEY_NAVIGATION_CONFIG = new InjectionToken('ClrListKeyNavigationConfig');
16970
- const CLR_LIST_KEY_NAVIGATION_COFNIG_PROVIDER = {
16971
- provide: CLR_LIST_KEY_NAVIGATION_CONFIG,
16972
- useValue: {
16973
- keyListItems: 'keyListItems',
16974
- layout: 'vertical',
16975
- manageFocus: true,
16976
- manageTabindex: true,
16977
- loop: false,
16978
- dir: null,
16979
- },
16980
- };
16981
-
16982
- /*
16983
- * Copyright (c) 2016-2022 VMware, Inc. All Rights Reserved.
16984
- * This software is released under MIT license.
16985
- * The full license information can be found in LICENSE in the root directory of this project.
16986
- */
16987
- function getNextKeyListItem(item, items, config) {
16988
- const { code, layout, loop, dir } = config;
16989
- let i = items.indexOf(item);
16990
- const previous = i;
16991
- const inlineStart = dir === 'rtl' ? KeyNavigationCode.ArrowRight : KeyNavigationCode.ArrowLeft;
16992
- const inlineEnd = dir === 'rtl' ? KeyNavigationCode.ArrowLeft : KeyNavigationCode.ArrowRight;
16993
- const numOfItems = items.length - 1;
16994
- if (layout !== 'horizontal' && code === KeyNavigationCode.ArrowUp && i !== 0) {
16995
- i = i - 1;
16996
- }
16997
- else if (layout !== 'horizontal' && code === KeyNavigationCode.ArrowUp && i === 0 && loop) {
16998
- i = numOfItems;
16999
- }
17000
- else if (layout !== 'horizontal' && code === KeyNavigationCode.ArrowDown && i < numOfItems) {
17001
- i = i + 1;
17002
- }
17003
- else if (layout !== 'horizontal' && code === KeyNavigationCode.ArrowDown && i === numOfItems && loop) {
17004
- i = 0;
17005
- }
17006
- else if (layout !== 'vertical' && code === inlineStart && i !== 0) {
17007
- i = i - 1;
17008
- }
17009
- else if (layout !== 'vertical' && code === inlineEnd && i < numOfItems) {
17010
- i = i + 1;
17011
- }
17012
- else if (code === KeyNavigationCode.End) {
17013
- i = numOfItems;
17014
- }
17015
- else if (code === KeyNavigationCode.Home) {
17016
- i = 0;
17017
- }
17018
- else if (code === KeyNavigationCode.PageUp) {
17019
- i = i - 4 > 0 ? i - 4 : 0;
17020
- }
17021
- else if (code === KeyNavigationCode.PageDown) {
17022
- i = i + 4 < numOfItems ? i + 4 : numOfItems;
17023
- }
17024
- return { next: i, previous };
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 ClrKeyNavigationList {
17033
- constructor(host, defaultConfig, focusableElementSelectors) {
17034
- this.host = host;
17035
- this.defaultConfig = defaultConfig;
17036
- this.focusableElementSelectors = focusableElementSelectors;
17037
- this.config = Object.assign(Object.assign({}, this.defaultConfig), { dir: this.getClosestDirAttribute() });
17038
- }
17039
- set configuration(config) {
17040
- this.config = Object.assign(Object.assign(Object.assign({}, this.defaultConfig), { dir: this.getClosestDirAttribute() }), config);
17041
- }
17042
- ngAfterViewInit() {
17043
- this.initializeTabIndex();
17044
- }
17045
- onClick(e) {
17046
- this.clickItem(e);
17047
- }
17048
- onKeyDown(e) {
17049
- this.focusItem(e);
17050
- }
17051
- initializeTabIndex() {
17052
- if (this.config.manageFocus && this.config.manageTabindex) {
17053
- initializeKeyListItems(this.getListItems());
17054
- }
17055
- }
17056
- clickItem(e) {
17057
- const activeItem = this.getActiveItem(e);
17058
- if (activeItem) {
17059
- this.setActiveItem(e, activeItem);
17060
- }
17061
- }
17062
- focusItem(e) {
17063
- if (validKeyNavigationCode(e)) {
17064
- const activeItem = this.getActiveItem(e);
17065
- if (activeItem) {
17066
- const listItems = this.getListItems();
17067
- const { next, previous } = getNextKeyListItem(activeItem, Array.from(listItems), Object.assign(Object.assign({}, this.config), { dir: this.getClosestDirAttribute(), code: e.code }));
17068
- if (next !== previous) {
17069
- this.setActiveItem(e, listItems[next], listItems[previous]);
17070
- }
17071
- }
17072
- }
17073
- }
17074
- getActiveItem(e) {
17075
- const listItems = this.getListItems();
17076
- return Array.from(listItems).find(c => { var _a; return (_a = c === e.target.closest(listItems[0].tagName.toLocaleLowerCase())) !== null && _a !== void 0 ? _a : c === e.target; });
17077
- }
17078
- setActiveItem(e, activeItem, previousItem) {
17079
- var _a;
17080
- if (this.config.manageFocus) {
17081
- if (this.config.manageTabindex) {
17082
- setActiveKeyListItem(this.getListItems(), activeItem);
17083
- }
17084
- const items = getFlattenedFocusableItems(activeItem);
17085
- const item = (_a = items[0]) !== null && _a !== void 0 ? _a : activeItem;
17086
- focusElement(item);
17087
- e.preventDefault();
17088
- }
17089
- activeItem.dispatchEvent(new CustomEvent('cdsKeyChange', {
17090
- bubbles: true,
17091
- detail: {
17092
- activeItem,
17093
- previousItem,
17094
- code: e.code,
17095
- metaKey: e.ctrlKey || e.metaKey,
17096
- keyListItems: this.config.keyListItems,
17097
- },
17098
- }));
17099
- }
17100
- getListItems() {
17101
- return this.host.nativeElement.querySelectorAll(this.focusableElementSelectors.join(','));
17102
- }
17103
- getClosestDirAttribute() {
17104
- const el = this.host.nativeElement.closest('[dir]');
17105
- return el ? el.getAttribute('dir') : null;
17106
- }
17107
- }
17108
- 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 });
17109
- 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 });
17110
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.3", ngImport: i0, type: ClrKeyNavigationList, decorators: [{
17111
- type: Directive,
17112
- args: [{
17113
- selector: '[clrKeyNavigationList]',
17114
- }]
17115
- }], ctorParameters: function () {
17116
- return [{ type: i0.ElementRef }, { type: undefined, decorators: [{
17117
- type: Inject,
17118
- args: [CLR_LIST_KEY_NAVIGATION_CONFIG]
17119
- }] }, { type: undefined, decorators: [{
17120
- type: Inject,
17121
- args: [FOCUSABLE_ELEMENT_SELECTORS]
17122
- }] }];
17123
- }, propDecorators: { configuration: [{
17124
- type: Input
17125
- }], onClick: [{
17126
- type: HostListener,
17127
- args: ['click', ['$event']]
17128
- }], onKeyDown: [{
17129
- type: HostListener,
17130
- args: ['keydown', ['$event']]
17131
- }] } });
17132
-
17133
- /*
17134
- * Copyright (c) 2016-2022 VMware, Inc. All Rights Reserved.
17135
- * This software is released under MIT license.
17136
- * The full license information can be found in LICENSE in the root directory of this project.
17137
- */
17138
- class ClrKeyNavigationListModule {
17139
- }
17140
- ClrKeyNavigationListModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.0.3", ngImport: i0, type: ClrKeyNavigationListModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
17141
- ClrKeyNavigationListModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "12.0.0", version: "13.0.3", ngImport: i0, type: ClrKeyNavigationListModule, declarations: [ClrKeyNavigationList], exports: [ClrKeyNavigationList] });
17142
- 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] });
17143
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.3", ngImport: i0, type: ClrKeyNavigationListModule, decorators: [{
17144
- type: NgModule,
17145
- args: [{
17146
- declarations: [ClrKeyNavigationList],
17147
- exports: [ClrKeyNavigationList],
17148
- providers: [CLR_LIST_KEY_NAVIGATION_COFNIG_PROVIDER, FOCUSABLE_ELEMENT_SELECTORS_PROVIDER],
17149
- }]
17150
- }] });
17151
-
17152
- /*
17153
- * Copyright (c) 2016-2022 VMware, Inc. All Rights Reserved.
17154
- * This software is released under MIT license.
17155
- * The full license information can be found in LICENSE in the root directory of this project.
17156
- */
17157
-
17158
17048
  /*
17159
17049
  * Copyright (c) 2016-2022 VMware, Inc. All Rights Reserved.
17160
17050
  * This software is released under MIT license.
@@ -18509,6 +18399,7 @@ ClrDatagridModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "12.0.0", versi
18509
18399
  ClrDragAndDropModule,
18510
18400
  ClrSpinnerModule,
18511
18401
  ClrPopoverModuleNext,
18402
+ ClrKeyFocusModule,
18512
18403
  ClrFocusTrapModule,
18513
18404
  ClrFocusOnViewInitModule], exports: [
18514
18405
  // Core
@@ -18564,6 +18455,7 @@ ClrDatagridModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", versi
18564
18455
  ClrDragAndDropModule,
18565
18456
  ClrSpinnerModule,
18566
18457
  ClrPopoverModuleNext,
18458
+ ClrKeyFocusModule,
18567
18459
  ClrFocusTrapModule,
18568
18460
  ClrFocusOnViewInitModule,
18569
18461
  ]] });
@@ -18582,12 +18474,12 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.3", ngImpor
18582
18474
  ClrDragAndDropModule,
18583
18475
  ClrSpinnerModule,
18584
18476
  ClrPopoverModuleNext,
18477
+ ClrKeyFocusModule,
18585
18478
  ClrFocusTrapModule,
18586
18479
  ClrFocusOnViewInitModule,
18587
18480
  ],
18588
18481
  declarations: [CLR_DATAGRID_DIRECTIVES],
18589
18482
  exports: [CLR_DATAGRID_DIRECTIVES],
18590
- entryComponents: [WrappedCell, WrappedColumn, WrappedRow],
18591
18483
  }]
18592
18484
  }], ctorParameters: function () { return []; } });
18593
18485
 
@@ -20203,7 +20095,9 @@ ClrDataModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "12.0.0", version:
20203
20095
  ClrDataModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "13.0.3", ngImport: i0, type: ClrDataModule, imports: [ClrDatagridModule, ClrStackViewModule, ClrTreeViewModule] });
20204
20096
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.3", ngImport: i0, type: ClrDataModule, decorators: [{
20205
20097
  type: NgModule,
20206
- args: [{ exports: [ClrDatagridModule, ClrStackViewModule, ClrTreeViewModule] }]
20098
+ args: [{
20099
+ exports: [ClrDatagridModule, ClrStackViewModule, ClrTreeViewModule],
20100
+ }]
20207
20101
  }] });
20208
20102
 
20209
20103
  /*
@@ -21765,7 +21659,9 @@ ClrEmphasisModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "12.0.0", versi
21765
21659
  ClrEmphasisModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "13.0.3", ngImport: i0, type: ClrEmphasisModule, imports: [ClrAlertModule] });
21766
21660
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.3", ngImport: i0, type: ClrEmphasisModule, decorators: [{
21767
21661
  type: NgModule,
21768
- args: [{ exports: [ClrAlertModule] }]
21662
+ args: [{
21663
+ exports: [ClrAlertModule],
21664
+ }]
21769
21665
  }] });
21770
21666
 
21771
21667
  /*
@@ -22555,7 +22451,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.3", ngImpor
22555
22451
  args: [{
22556
22452
  imports: [CommonModule],
22557
22453
  declarations: [TEMPLATE_REF_DIRECTIVES],
22558
- entryComponents: [TEMPLATE_REF_DIRECTIVES],
22559
22454
  exports: [TEMPLATE_REF_DIRECTIVES],
22560
22455
  }]
22561
22456
  }] });
@@ -23755,7 +23650,9 @@ ClrLayoutModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "12.0.0", version
23755
23650
  ClrLayoutModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "13.0.3", ngImport: i0, type: ClrLayoutModule, imports: [ClrMainContainerModule, ClrNavigationModule, ClrTabsModule, ClrVerticalNavModule] });
23756
23651
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.3", ngImport: i0, type: ClrLayoutModule, decorators: [{
23757
23652
  type: NgModule,
23758
- args: [{ exports: [ClrMainContainerModule, ClrNavigationModule, ClrTabsModule, ClrVerticalNavModule] }]
23653
+ args: [{
23654
+ exports: [ClrMainContainerModule, ClrNavigationModule, ClrTabsModule, ClrVerticalNavModule],
23655
+ }]
23759
23656
  }] });
23760
23657
 
23761
23658
  /*
@@ -24488,7 +24385,9 @@ ClrPopoverModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "12.0.0", versio
24488
24385
  ClrPopoverModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "13.0.3", ngImport: i0, type: ClrPopoverModule, imports: [ClrDropdownModule, ClrSignpostModule, ClrTooltipModule] });
24489
24386
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.3", ngImport: i0, type: ClrPopoverModule, decorators: [{
24490
24387
  type: NgModule,
24491
- args: [{ exports: [ClrDropdownModule, ClrSignpostModule, ClrTooltipModule] }]
24388
+ args: [{
24389
+ exports: [ClrDropdownModule, ClrSignpostModule, ClrTooltipModule],
24390
+ }]
24492
24391
  }] });
24493
24392
 
24494
24393
  /*
@@ -28060,5 +27959,5 @@ const CLR_MENU_POSITIONS = [
28060
27959
  * Generated bundle index. Do not edit.
28061
27960
  */
28062
27961
 
28063
- 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 };
27962
+ 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 };
28064
27963
  //# sourceMappingURL=clr-angular.mjs.map