@clr/angular 12.1.2 → 12.3.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 (97) hide show
  1. package/bundles/clr-angular.umd.js +343 -88
  2. package/bundles/clr-angular.umd.js.map +1 -1
  3. package/clarity.api.md +24 -2
  4. package/clr-angular.metadata.json +1 -1
  5. package/data/datagrid/built-in/filters/datagrid-numeric-filter.d.ts +7 -0
  6. package/data/datagrid/built-in/filters/datagrid-string-filter.d.ts +5 -0
  7. package/data/datagrid/datagrid-column.d.ts +9 -0
  8. package/data/datagrid/datagrid-row.d.ts +12 -1
  9. package/data/datagrid/datagrid.d.ts +4 -2
  10. package/data/datagrid/providers/selection.d.ts +8 -0
  11. package/esm2015/accordion/chocolate/accordion-oompa-loompa.js +4 -2
  12. package/esm2015/accordion/chocolate/accordion-willy-wonka.js +4 -2
  13. package/esm2015/accordion/stepper/chocolate/stepper-oompa-loompa.js +4 -2
  14. package/esm2015/accordion/stepper/chocolate/stepper-willy-wonka.js +4 -2
  15. package/esm2015/accordion/stepper/stepper.js +16 -5
  16. package/esm2015/data/datagrid/built-in/filters/datagrid-numeric-filter.js +13 -5
  17. package/esm2015/data/datagrid/built-in/filters/datagrid-string-filter.js +7 -2
  18. package/esm2015/data/datagrid/chocolate/actionable-oompa-loompa.js +4 -2
  19. package/esm2015/data/datagrid/chocolate/datagrid-willy-wonka.js +4 -2
  20. package/esm2015/data/datagrid/chocolate/expandable-oompa-loompa.js +4 -2
  21. package/esm2015/data/datagrid/datagrid-action-bar.js +2 -2
  22. package/esm2015/data/datagrid/datagrid-cell.js +2 -2
  23. package/esm2015/data/datagrid/datagrid-column.js +16 -1
  24. package/esm2015/data/datagrid/datagrid-detail-registerer.js +4 -2
  25. package/esm2015/data/datagrid/datagrid-hideable-column.js +4 -2
  26. package/esm2015/data/datagrid/datagrid-row.js +58 -5
  27. package/esm2015/data/datagrid/datagrid.js +23 -5
  28. package/esm2015/data/datagrid/providers/selection.js +5 -1
  29. package/esm2015/data/datagrid/render/cell-renderer.js +4 -2
  30. package/esm2015/data/datagrid/render/header-renderer.js +5 -2
  31. package/esm2015/data/datagrid/render/row-renderer.js +4 -2
  32. package/esm2015/data/stack-view/stack-view-custom-tags.js +4 -2
  33. package/esm2015/data/tree-view/recursive-for-of.js +4 -2
  34. package/esm2015/data/tree-view/tree-node.js +2 -2
  35. package/esm2015/emphasis/alert/alerts.js +2 -2
  36. package/esm2015/forms/checkbox/checkbox.js +4 -2
  37. package/esm2015/forms/combobox/combobox.js +2 -2
  38. package/esm2015/forms/combobox/option-selected.directive.js +4 -2
  39. package/esm2015/forms/combobox/option.js +5 -3
  40. package/esm2015/forms/combobox/options.js +5 -1
  41. package/esm2015/forms/combobox/providers/combobox-focus-handler.service.js +9 -2
  42. package/esm2015/forms/common/control.js +5 -2
  43. package/esm2015/forms/common/error.js +2 -2
  44. package/esm2015/forms/common/helper.js +2 -2
  45. package/esm2015/forms/common/if-control-state/if-error.js +4 -2
  46. package/esm2015/forms/common/if-control-state/if-success.js +4 -2
  47. package/esm2015/forms/common/label.js +4 -2
  48. package/esm2015/forms/common/success.js +2 -2
  49. package/esm2015/forms/datepicker/calendar.js +5 -2
  50. package/esm2015/forms/input/input.js +5 -2
  51. package/esm2015/forms/password/password-container.js +4 -4
  52. package/esm2015/forms/password/password.js +5 -2
  53. package/esm2015/forms/radio/radio.js +4 -2
  54. package/esm2015/forms/range/range.js +5 -2
  55. package/esm2015/forms/select/select.js +5 -2
  56. package/esm2015/forms/textarea/textarea.js +5 -2
  57. package/esm2015/icon/icon.js +7 -3
  58. package/esm2015/layout/main-container/main-container.js +5 -2
  59. package/esm2015/layout/nav/chocolate/main-container-willy-wonka.js +4 -2
  60. package/esm2015/layout/nav/chocolate/nav-detection-oompa-loompa.js +4 -2
  61. package/esm2015/layout/nav/nav-level.js +4 -2
  62. package/esm2015/layout/tabs/chocolate/active-oompa-loompa.js +4 -2
  63. package/esm2015/layout/tabs/chocolate/tabs-willy-wonka.js +4 -2
  64. package/esm2015/layout/tabs/tab-overflow-content.js +2 -2
  65. package/esm2015/layout/tabs/tab.js +2 -2
  66. package/esm2015/layout/tabs/tabs.js +2 -3
  67. package/esm2015/layout/vertical-nav/vertical-nav-group-children.js +2 -2
  68. package/esm2015/layout/vertical-nav/vertical-nav-group.js +2 -2
  69. package/esm2015/layout/vertical-nav/vertical-nav-icon.js +5 -2
  70. package/esm2015/modal/modal-body.js +4 -2
  71. package/esm2015/popover/dropdown/dropdown-menu.js +2 -2
  72. package/esm2015/popover/tooltip/tooltip-content.js +2 -2
  73. package/esm2015/popover/tooltip/tooltip.js +2 -2
  74. package/esm2015/progress/spinner/spinner.js +2 -2
  75. package/esm2015/timeline/timeline-step-description.js +2 -2
  76. package/esm2015/timeline/timeline-step-header.js +2 -2
  77. package/esm2015/timeline/timeline-step-title.js +2 -2
  78. package/esm2015/timeline/timeline-step.js +2 -3
  79. package/esm2015/timeline/timeline.js +2 -2
  80. package/esm2015/utils/animations/expandable-animation/expandable-animation.js +2 -2
  81. package/esm2015/utils/conditional/if-active.directive.js +4 -2
  82. package/esm2015/utils/conditional/if-expanded.directive.js +4 -2
  83. package/esm2015/utils/conditional/if-open.directive.js +4 -2
  84. package/esm2015/utils/drag-and-drop/drag-handle.js +5 -2
  85. package/esm2015/utils/drag-and-drop/if-dragged.js +4 -2
  86. package/esm2015/utils/focus-trap/focus-trap.directive.js +4 -2
  87. package/esm2015/utils/loading/loading.js +4 -2
  88. package/esm2015/utils/outside-click/outside-click.js +4 -2
  89. package/esm2015/utils/popover/popover-content.js +4 -2
  90. package/esm2015/wizard/wizard-custom-tags.js +4 -2
  91. package/esm2015/wizard/wizard-page-buttons.js +4 -2
  92. package/esm2015/wizard/wizard-page-header-actions.js +4 -2
  93. package/esm2015/wizard/wizard-page-navtitle.js +4 -2
  94. package/esm2015/wizard/wizard-page-title.js +4 -2
  95. package/fesm2015/clr-angular.js +330 -96
  96. package/fesm2015/clr-angular.js.map +1 -1
  97. package/package.json +2 -2
@@ -354,7 +354,9 @@
354
354
  return ClrIconCustomTag;
355
355
  }());
356
356
  ClrIconCustomTag.decorators = [
357
- { type: i0.Directive, args: [{ selector: 'clr-icon' },] }
357
+ { type: i0.Directive, args: [{
358
+ selector: 'clr-icon',
359
+ },] }
358
360
  ];
359
361
  var CdsIconCustomTag = /** @class */ (function () {
360
362
  function CdsIconCustomTag() {
@@ -362,7 +364,9 @@
362
364
  return CdsIconCustomTag;
363
365
  }());
364
366
  CdsIconCustomTag.decorators = [
365
- { type: i0.Directive, args: [{ selector: 'cds-icon' },] }
367
+ { type: i0.Directive, args: [{
368
+ selector: 'cds-icon',
369
+ },] }
366
370
  ];
367
371
 
368
372
  /*
@@ -441,7 +445,9 @@
441
445
  return ClrLoading;
442
446
  }());
443
447
  ClrLoading.decorators = [
444
- { type: i0.Directive, args: [{ selector: '[clrLoading]' },] }
448
+ { type: i0.Directive, args: [{
449
+ selector: '[clrLoading]',
450
+ },] }
445
451
  ];
446
452
  ClrLoading.ctorParameters = function () { return [
447
453
  { type: LoadingListener, decorators: [{ type: i0.Optional }] }
@@ -1141,7 +1147,9 @@
1141
1147
  return AccordionWillyWonka;
1142
1148
  }(WillyWonka));
1143
1149
  AccordionWillyWonka.decorators = [
1144
- { type: i0.Directive, args: [{ selector: 'clr-accordion' },] }
1150
+ { type: i0.Directive, args: [{
1151
+ selector: 'clr-accordion',
1152
+ },] }
1145
1153
  ];
1146
1154
 
1147
1155
  var AccordionOompaLoompa = /** @class */ (function (_super) {
@@ -1165,7 +1173,9 @@
1165
1173
  return AccordionOompaLoompa;
1166
1174
  }(OompaLoompa));
1167
1175
  AccordionOompaLoompa.decorators = [
1168
- { type: i0.Directive, args: [{ selector: 'clr-accordion-panel' },] }
1176
+ { type: i0.Directive, args: [{
1177
+ selector: 'clr-accordion-panel',
1178
+ },] }
1169
1179
  ];
1170
1180
  AccordionOompaLoompa.ctorParameters = function () { return [
1171
1181
  { type: i0.ChangeDetectorRef },
@@ -1545,9 +1555,7 @@
1545
1555
  };
1546
1556
  ClrStepper.prototype.listenForFormResetChanges = function () {
1547
1557
  var _this = this;
1548
- return this.form.statusChanges
1549
- .pipe(operators.filter(function () { return _this.form.pristine; })) // https://github.com/angular/angular/issues/10887
1550
- .subscribe(function () { return _this.stepperService.resetPanels(); });
1558
+ return fromControlReset(this.form.form).subscribe(function () { return _this.stepperService.resetPanels(); });
1551
1559
  };
1552
1560
  ClrStepper.prototype.listenForPanelsCompleted = function () {
1553
1561
  var _this = this;
@@ -1596,6 +1604,18 @@
1596
1604
  initialPanel: [{ type: i0.Input, args: ['clrInitialStep',] }],
1597
1605
  panels: [{ type: i0.ContentChildren, args: [ClrStepperPanel, { descendants: true },] }]
1598
1606
  };
1607
+ function fromControlReset(control) {
1608
+ return new rxjs.Observable(function (observer) {
1609
+ var unpatchedControlReset = control.reset;
1610
+ control.reset = function () {
1611
+ observer.next();
1612
+ unpatchedControlReset.apply(control);
1613
+ };
1614
+ return function () {
1615
+ control.reset = unpatchedControlReset;
1616
+ };
1617
+ });
1618
+ }
1599
1619
 
1600
1620
  var StepperWillyWonka = /** @class */ (function (_super) {
1601
1621
  __extends(StepperWillyWonka, _super);
@@ -1605,7 +1625,9 @@
1605
1625
  return StepperWillyWonka;
1606
1626
  }(WillyWonka));
1607
1627
  StepperWillyWonka.decorators = [
1608
- { type: i0.Directive, args: [{ selector: 'form[clrStepper]' },] }
1628
+ { type: i0.Directive, args: [{
1629
+ selector: 'form[clrStepper]',
1630
+ },] }
1609
1631
  ];
1610
1632
 
1611
1633
  var StepperOompaLoompa = /** @class */ (function (_super) {
@@ -1629,7 +1651,9 @@
1629
1651
  return StepperOompaLoompa;
1630
1652
  }(OompaLoompa));
1631
1653
  StepperOompaLoompa.decorators = [
1632
- { type: i0.Directive, args: [{ selector: 'clr-stepper-panel, [clrStepButton]' },] }
1654
+ { type: i0.Directive, args: [{
1655
+ selector: 'clr-stepper-panel, [clrStepButton]',
1656
+ },] }
1633
1657
  ];
1634
1658
  StepperOompaLoompa.ctorParameters = function () { return [
1635
1659
  { type: i0.ChangeDetectorRef },
@@ -2607,7 +2631,9 @@
2607
2631
  return ClrPopoverContent;
2608
2632
  }());
2609
2633
  ClrPopoverContent.decorators = [
2610
- { type: i0.Directive, args: [{ selector: '[clrPopoverContent]' },] }
2634
+ { type: i0.Directive, args: [{
2635
+ selector: '[clrPopoverContent]',
2636
+ },] }
2611
2637
  ];
2612
2638
  ClrPopoverContent.ctorParameters = function () { return [
2613
2639
  { type: HTMLDocument, decorators: [{ type: i0.Inject, args: [i1.DOCUMENT,] }] },
@@ -3365,7 +3391,7 @@
3365
3391
  ClrControlError.decorators = [
3366
3392
  { type: i0.Component, args: [{
3367
3393
  selector: 'clr-control-error',
3368
- template: " <ng-content></ng-content> ",
3394
+ template: "<ng-content></ng-content>",
3369
3395
  host: {
3370
3396
  '[class.clr-subtext]': 'true',
3371
3397
  '[attr.id]': 'id',
@@ -3391,7 +3417,7 @@
3391
3417
  ClrControlHelper.decorators = [
3392
3418
  { type: i0.Component, args: [{
3393
3419
  selector: 'clr-control-helper',
3394
- template: " <ng-content></ng-content> ",
3420
+ template: "<ng-content></ng-content>",
3395
3421
  host: {
3396
3422
  '[class.clr-subtext]': 'true',
3397
3423
  '[attr.id]': 'id',
@@ -3611,7 +3637,9 @@
3611
3637
  return ClrLabel;
3612
3638
  }());
3613
3639
  ClrLabel.decorators = [
3614
- { type: i0.Directive, args: [{ selector: 'label' },] }
3640
+ { type: i0.Directive, args: [{
3641
+ selector: 'label',
3642
+ },] }
3615
3643
  ];
3616
3644
  ClrLabel.ctorParameters = function () { return [
3617
3645
  { type: ControlIdService, decorators: [{ type: i0.Optional }] },
@@ -3689,7 +3717,7 @@
3689
3717
  ClrControlSuccess.decorators = [
3690
3718
  { type: i0.Component, args: [{
3691
3719
  selector: 'clr-control-success',
3692
- template: " <ng-content></ng-content> ",
3720
+ template: "<ng-content></ng-content>",
3693
3721
  host: {
3694
3722
  '[class.clr-subtext]': 'true',
3695
3723
  '[attr.id]': 'id',
@@ -4071,7 +4099,10 @@
4071
4099
  return ClrControl;
4072
4100
  }(WrappedFormControl));
4073
4101
  ClrControl.decorators = [
4074
- { type: i0.Directive, args: [{ selector: '[clrControl]', host: { '[class.clr-input]': 'true' } },] }
4102
+ { type: i0.Directive, args: [{
4103
+ selector: '[clrControl]',
4104
+ host: { '[class.clr-input]': 'true' },
4105
+ },] }
4075
4106
  ];
4076
4107
  ClrControl.ctorParameters = function () { return [
4077
4108
  { type: i0.ViewContainerRef },
@@ -4216,7 +4247,9 @@
4216
4247
  return ClrIfError;
4217
4248
  }(AbstractIfState));
4218
4249
  ClrIfError.decorators = [
4219
- { type: i0.Directive, args: [{ selector: '[clrIfError]' },] }
4250
+ { type: i0.Directive, args: [{
4251
+ selector: '[clrIfError]',
4252
+ },] }
4220
4253
  ];
4221
4254
  ClrIfError.ctorParameters = function () { return [
4222
4255
  { type: IfControlStateService, decorators: [{ type: i0.Optional }] },
@@ -4255,7 +4288,9 @@
4255
4288
  return ClrIfSuccess;
4256
4289
  }(AbstractIfState));
4257
4290
  ClrIfSuccess.decorators = [
4258
- { type: i0.Directive, args: [{ selector: '[clrIfSuccess]' },] }
4291
+ { type: i0.Directive, args: [{
4292
+ selector: '[clrIfSuccess]',
4293
+ },] }
4259
4294
  ];
4260
4295
  ClrIfSuccess.ctorParameters = function () { return [
4261
4296
  { type: IfControlStateService, decorators: [{ type: i0.Optional }] },
@@ -4410,7 +4445,9 @@
4410
4445
  return ClrCheckbox;
4411
4446
  }(WrappedFormControl));
4412
4447
  ClrCheckbox.decorators = [
4413
- { type: i0.Directive, args: [{ selector: '[clrCheckbox],[clrToggle]' },] }
4448
+ { type: i0.Directive, args: [{
4449
+ selector: '[clrCheckbox],[clrToggle]',
4450
+ },] }
4414
4451
  ];
4415
4452
  ClrCheckbox.ctorParameters = function () { return [
4416
4453
  { type: i0.ViewContainerRef },
@@ -4606,7 +4643,7 @@
4606
4643
  ClrSpinner.decorators = [
4607
4644
  { type: i0.Component, args: [{
4608
4645
  selector: 'clr-spinner',
4609
- template: " <ng-content></ng-content> ",
4646
+ template: "<ng-content></ng-content>",
4610
4647
  host: {
4611
4648
  '[attr.aria-busy]': 'true',
4612
4649
  }
@@ -4815,7 +4852,9 @@
4815
4852
  return ClrIfActive;
4816
4853
  }());
4817
4854
  ClrIfActive.decorators = [
4818
- { type: i0.Directive, args: [{ selector: '[clrIfActive]' },] }
4855
+ { type: i0.Directive, args: [{
4856
+ selector: '[clrIfActive]',
4857
+ },] }
4819
4858
  ];
4820
4859
  ClrIfActive.ctorParameters = function () { return [
4821
4860
  { type: IfActiveService },
@@ -4909,7 +4948,9 @@
4909
4948
  return ClrIfExpanded;
4910
4949
  }());
4911
4950
  ClrIfExpanded.decorators = [
4912
- { type: i0.Directive, args: [{ selector: '[clrIfExpanded]' },] }
4951
+ { type: i0.Directive, args: [{
4952
+ selector: '[clrIfExpanded]',
4953
+ },] }
4913
4954
  ];
4914
4955
  ClrIfExpanded.ctorParameters = function () { return [
4915
4956
  { type: i0.TemplateRef, decorators: [{ type: i0.Optional }] },
@@ -5001,7 +5042,9 @@
5001
5042
  return ClrIfOpen;
5002
5043
  }());
5003
5044
  ClrIfOpen.decorators = [
5004
- { type: i0.Directive, args: [{ selector: '[clrIfOpen]' },] }
5045
+ { type: i0.Directive, args: [{
5046
+ selector: '[clrIfOpen]',
5047
+ },] }
5005
5048
  ];
5006
5049
  ClrIfOpen.ctorParameters = function () { return [
5007
5050
  { type: ClrPopoverToggleService },
@@ -5743,7 +5786,9 @@
5743
5786
  return ClrOptionSelected;
5744
5787
  }());
5745
5788
  ClrOptionSelected.decorators = [
5746
- { type: i0.Directive, args: [{ selector: '[clrOptionSelected]' },] }
5789
+ { type: i0.Directive, args: [{
5790
+ selector: '[clrOptionSelected]',
5791
+ },] }
5747
5792
  ];
5748
5793
  ClrOptionSelected.ctorParameters = function () { return [
5749
5794
  { type: i0.TemplateRef }
@@ -6077,7 +6122,14 @@
6077
6122
  firstActive_1 = this.selectionService.selectionModel.model;
6078
6123
  }
6079
6124
  var activeProxy = this.optionData.find(function (option) { return option.value === firstActive_1; });
6080
- this.pseudoFocus.select(activeProxy);
6125
+ if (activeProxy) {
6126
+ // active element is visible
6127
+ this.pseudoFocus.select(activeProxy);
6128
+ }
6129
+ else {
6130
+ // we have active element, but it's filtered out
6131
+ this.pseudoFocus.select(this.optionData[0]);
6132
+ }
6081
6133
  }
6082
6134
  }
6083
6135
  };
@@ -6405,7 +6457,7 @@
6405
6457
  ClrCombobox.decorators = [
6406
6458
  { type: i0.Component, args: [{
6407
6459
  selector: 'clr-combobox',
6408
- template: "<!--\n* Copyright (c) 2016-2021 VMware, Inc. All Rights Reserved.\n* This software is released under MIT license.\n* The full license information can be found in LICENSE in the root directory of this project.\n-->\n\n<!-- The (click) handler is needed to auto-focus on input field which can not currently occupy the whole\n width of the component, after being wrapped to a new line -->\n<div\n class=\"clr-combobox-wrapper\"\n clrPopoverAnchor\n (click)=\"focusInput()\"\n [class.multi]=\"multiSelect\"\n [class.invalid]=\"invalid\"\n>\n <span\n *ngIf=\"multiSelect && optionSelectionService.selectionModel.model\"\n role=\"grid\"\n clrRovingTabindex\n [clrRovingTabindexDisabled]=\"control?.disabled\"\n clrDirection=\"both\"\n [attr.aria-label]=\"getSelectionAriaLabel()\"\n [attr.aria-disabled]=\"control?.disabled? true: null\"\n >\n <span *ngFor=\"let item of multiSelectModel; let i = index\" class=\"label label-combobox-pill\" role=\"row\">\n <span role=\"gridcell\">\n <span class=\"clr-combobox-pill-content\" clrKeyFocusItem>\n <ng-container\n *ngIf=\"optionSelected\"\n [ngTemplateOutlet]=\"optionSelected.template\"\n [ngTemplateOutletContext]=\"{$implicit: optionSelectionService.selectionModel.model[i]}\"\n >\n </ng-container>\n </span>\n </span>\n <span role=\"gridcell\">\n <button\n clrKeyFocusItem\n type=\"button\"\n class=\"clr-combobox-remove-btn\"\n [disabled]=\"control?.disabled? true: null\"\n [attr.aria-label]=\"commonStrings.keys.comboboxDelete + ' ' + optionSelectionService.selectionModel.toString(displayField, i)\"\n (click)=\"unselect(item)\"\n >\n <cds-icon shape=\"window-close\" size=\"12\"></cds-icon>\n </button>\n </span>\n </span>\n </span>\n\n <span class=\"clr-combobox-input-wrapper\" role=\"combobox\">\n <input\n #textboxInput\n type=\"text\"\n [id]=\"inputId()\"\n class=\"clr-input clr-combobox-input\"\n [(ngModel)]=\"searchText\"\n (blur)=\"onBlur()\"\n (focus)=\"onFocus()\"\n [attr.aria-expanded]=\"openState\"\n [attr.aria-owns]=\"ariaOwns\"\n aria-haspopup=\"listbox\"\n aria-autocomplete=\"list\"\n autocomplete=\"off\"\n [attr.aria-invalid]=\"control?.invalid? true: null\"\n [disabled]=\"control?.disabled? true: null\"\n [attr.aria-activedescendant]=\"getActiveDescendant()\"\n [attr.placeholder]=\"placeholder\"\n />\n </span>\n\n <!-- No click handler, as it uses the handler on the .clr-combobox-wrapper -->\n <button\n clrPopoverOpenCloseButton\n #trigger\n type=\"button\"\n class=\"clr-combobox-trigger\"\n tabindex=\"-1\"\n [disabled]=\"control?.disabled || null\"\n [attr.aria-label]=\"commonStrings.keys.comboboxOpen\"\n >\n <cds-icon shape=\"angle\" direction=\"down\" size=\"12\"></cds-icon>\n </button>\n\n <div class=\"clr-focus-indicator\" [class.clr-focus]=\"focused\"></div>\n</div>\n\n<!-- Both close handlers are handled manually due to issues in Edge browser.\n Additionally 'outsideClickToClose' has complex handling that's necessary\n to be manual due to the component architecture -->\n<div role=\"dialog\" *clrPopoverContent=\"openState at smartPosition; outsideClickToClose: false; scrollToClose: false\">\n <ng-content></ng-content>\n</div>\n",
6460
+ template: "<!--\n* Copyright (c) 2016-2021 VMware, Inc. All Rights Reserved.\n* This software is released under MIT license.\n* The full license information can be found in LICENSE in the root directory of this project.\n-->\n\n<!-- The (click) handler is needed to auto-focus on input field which can not currently occupy the whole\n width of the component, after being wrapped to a new line -->\n<div\n class=\"clr-combobox-wrapper\"\n clrPopoverAnchor\n (click)=\"focusInput()\"\n [class.multi]=\"multiSelect\"\n [class.invalid]=\"invalid\"\n>\n <span\n *ngIf=\"multiSelect && optionSelectionService.selectionModel.model\"\n role=\"grid\"\n clrRovingTabindex\n [clrRovingTabindexDisabled]=\"control?.disabled\"\n clrDirection=\"both\"\n [attr.aria-label]=\"getSelectionAriaLabel()\"\n [attr.aria-disabled]=\"control?.disabled? true: null\"\n >\n <span *ngFor=\"let item of multiSelectModel; let i = index\" class=\"label label-combobox-pill\" role=\"row\">\n <span role=\"gridcell\">\n <span class=\"clr-combobox-pill-content\" clrKeyFocusItem>\n <ng-container\n *ngIf=\"optionSelected\"\n [ngTemplateOutlet]=\"optionSelected.template\"\n [ngTemplateOutletContext]=\"{$implicit: optionSelectionService.selectionModel.model[i]}\"\n ></ng-container>\n </span>\n </span>\n <span role=\"gridcell\">\n <button\n clrKeyFocusItem\n type=\"button\"\n class=\"clr-combobox-remove-btn\"\n [disabled]=\"control?.disabled? true: null\"\n [attr.aria-label]=\"commonStrings.keys.comboboxDelete + ' ' + optionSelectionService.selectionModel.toString(displayField, i)\"\n (click)=\"unselect(item)\"\n >\n <cds-icon shape=\"window-close\" size=\"12\"></cds-icon>\n </button>\n </span>\n </span>\n </span>\n\n <span class=\"clr-combobox-input-wrapper\" role=\"combobox\">\n <input\n #textboxInput\n type=\"text\"\n [id]=\"inputId()\"\n class=\"clr-input clr-combobox-input\"\n [(ngModel)]=\"searchText\"\n (blur)=\"onBlur()\"\n (focus)=\"onFocus()\"\n [attr.aria-expanded]=\"openState\"\n [attr.aria-owns]=\"ariaOwns\"\n aria-haspopup=\"listbox\"\n aria-autocomplete=\"list\"\n autocomplete=\"off\"\n [attr.aria-invalid]=\"control?.invalid? true: null\"\n [disabled]=\"control?.disabled? true: null\"\n [attr.aria-activedescendant]=\"getActiveDescendant()\"\n [attr.placeholder]=\"placeholder\"\n />\n </span>\n\n <!-- No click handler, as it uses the handler on the .clr-combobox-wrapper -->\n <button\n clrPopoverOpenCloseButton\n #trigger\n type=\"button\"\n class=\"clr-combobox-trigger\"\n tabindex=\"-1\"\n [disabled]=\"control?.disabled || null\"\n [attr.aria-label]=\"commonStrings.keys.comboboxOpen\"\n >\n <cds-icon shape=\"angle\" direction=\"down\" size=\"12\"></cds-icon>\n </button>\n\n <div class=\"clr-focus-indicator\" [class.clr-focus]=\"focused\"></div>\n</div>\n\n<!-- Both close handlers are handled manually due to issues in Edge browser.\n Additionally 'outsideClickToClose' has complex handling that's necessary\n to be manual due to the component architecture -->\n<div role=\"dialog\" *clrPopoverContent=\"openState at smartPosition; outsideClickToClose: false; scrollToClose: false\">\n <ng-content></ng-content>\n</div>\n",
6409
6461
  providers: [
6410
6462
  ClrPopoverToggleService,
6411
6463
  { provide: POPOVER_HOST_ANCHOR, useExisting: i0.ElementRef },
@@ -6531,7 +6583,7 @@
6531
6583
  ClrOption.decorators = [
6532
6584
  { type: i0.Component, args: [{
6533
6585
  selector: 'clr-option',
6534
- template: "<ng-content></ng-content>\n <span *ngIf=\"selected\" class=\"clr-sr-only\"> {{ commonStrings.keys.comboboxSelected }} </span> ",
6586
+ template: "\n <ng-content></ng-content>\n <span *ngIf=\"selected\" class=\"clr-sr-only\">{{ commonStrings.keys.comboboxSelected }}</span>\n ",
6535
6587
  providers: [UNIQUE_ID_PROVIDER],
6536
6588
  host: {
6537
6589
  '[class.clr-combobox-option]': 'true',
@@ -6736,6 +6788,10 @@
6736
6788
  event.target !== _this.focusHandler.textInput) {
6737
6789
  _this.toggleService.open = false;
6738
6790
  }
6791
+ }), this.items.changes.subscribe(function () {
6792
+ setTimeout(function () {
6793
+ _this.focusHandler.focusFirstActive();
6794
+ });
6739
6795
  }));
6740
6796
  };
6741
6797
  ClrOptions.prototype.ngOnDestroy = function () {
@@ -6839,7 +6895,10 @@
6839
6895
  return ClrInput;
6840
6896
  }(WrappedFormControl));
6841
6897
  ClrInput.decorators = [
6842
- { type: i0.Directive, args: [{ selector: '[clrInput]', host: { '[class.clr-input]': 'true' } },] }
6898
+ { type: i0.Directive, args: [{
6899
+ selector: '[clrInput]',
6900
+ host: { '[class.clr-input]': 'true' },
6901
+ },] }
6843
6902
  ];
6844
6903
  ClrInput.ctorParameters = function () { return [
6845
6904
  { type: i0.ViewContainerRef },
@@ -7275,7 +7334,9 @@
7275
7334
  return FocusTrapDirective;
7276
7335
  }());
7277
7336
  FocusTrapDirective.decorators = [
7278
- { type: i0.Directive, args: [{ selector: '[clrFocusTrap]' },] }
7337
+ { type: i0.Directive, args: [{
7338
+ selector: '[clrFocusTrap]',
7339
+ },] }
7279
7340
  ];
7280
7341
  FocusTrapDirective.ctorParameters = function () { return [
7281
7342
  { type: i0.ElementRef },
@@ -8297,7 +8358,10 @@
8297
8358
  return ClrCalendar;
8298
8359
  }());
8299
8360
  ClrCalendar.decorators = [
8300
- { type: i0.Component, args: [{ selector: 'clr-calendar', template: "<table class=\"calendar-table\">\n <tr class=\"calendar-row weekdays\">\n <th *ngFor=\"let day of localeDays\" class=\"calendar-cell weekday\" role=\"heading\" [attr.aria-label]=\"day.day\">\n {{day.narrow}}\n </th>\n </tr>\n <tr class=\"calendar-row\" *ngFor=\"let row of calendarViewModel.calendarView\">\n <td *ngFor=\"let dayView of row\" class=\"calendar-cell\">\n <clr-day [clrDayView]=\"dayView\"></clr-day>\n </td>\n </tr>\n</table>\n" },] }
8361
+ { type: i0.Component, args: [{
8362
+ selector: 'clr-calendar',
8363
+ template: "<table class=\"calendar-table\">\n <tr class=\"calendar-row weekdays\">\n <th *ngFor=\"let day of localeDays\" class=\"calendar-cell weekday\" role=\"heading\" [attr.aria-label]=\"day.day\">\n {{day.narrow}}\n </th>\n </tr>\n <tr class=\"calendar-row\" *ngFor=\"let row of calendarViewModel.calendarView\">\n <td *ngFor=\"let dayView of row\" class=\"calendar-cell\">\n <clr-day [clrDayView]=\"dayView\"></clr-day>\n </td>\n </tr>\n</table>\n"
8364
+ },] }
8301
8365
  ];
8302
8366
  ClrCalendar.ctorParameters = function () { return [
8303
8367
  { type: LocaleHelperService },
@@ -9527,7 +9591,7 @@
9527
9591
  ClrPasswordContainer.decorators = [
9528
9592
  { type: i0.Component, args: [{
9529
9593
  selector: 'clr-password-container',
9530
- template: "\n <ng-content select=\"label\"></ng-content>\n <label *ngIf=\"!label && addGrid()\"></label>\n <div class=\"clr-control-container\" [ngClass]=\"controlClass()\">\n <div class=\"clr-input-wrapper\">\n <div class=\"clr-input-group\" [class.clr-focus]=\"focus\">\n <ng-content select=\"[clrPassword]\"></ng-content>\n <button\n *ngIf=\"clrToggle\"\n (click)=\"toggle()\"\n [disabled]=\"control?.disabled\"\n class=\"clr-input-group-icon-action\"\n type=\"button\"\n >\n <cds-icon status=\"info\" [attr.shape]=\"show ? 'eye-hide' : 'eye'\"></cds-icon>\n <span class=\"clr-sr-only\">{{\n show ? commonStrings.keys.passwordHide : commonStrings.keys.passwordShow\n }}</span>\n </button>\n </div>\n <cds-icon\n *ngIf=\"showInvalid\"\n class=\"clr-validate-icon\"\n status=\"danger\"\n shape=\"exclamation-circle\"\n aria-hidden=\"true\"\n ></cds-icon>\n <cds-icon\n *ngIf=\"showValid\"\n class=\"clr-validate-icon\"\n shape=\"check-circle\"\n status=\"success\"\n aria-hidden=\"true\"\n ></cds-icon>\n </div>\n <ng-content select=\"clr-control-helper\" *ngIf=\"showHelper\"></ng-content>\n <ng-content select=\"clr-control-error\" *ngIf=\"showInvalid\"></ng-content>\n <ng-content select=\"clr-control-success\" *ngIf=\"showValid\"></ng-content>\n </div>\n ",
9594
+ template: "\n <ng-content select=\"label\"></ng-content>\n <label *ngIf=\"!label && addGrid()\"></label>\n <div class=\"clr-control-container\" [ngClass]=\"controlClass()\">\n <div class=\"clr-input-wrapper\">\n <div class=\"clr-input-group\" [class.clr-focus]=\"focus\">\n <ng-content select=\"[clrPassword]\"></ng-content>\n <button\n *ngIf=\"clrToggle\"\n (click)=\"toggle()\"\n [disabled]=\"control?.disabled\"\n class=\"clr-input-group-icon-action\"\n type=\"button\"\n >\n <cds-icon status=\"info\" [attr.shape]=\"show ? 'eye-hide' : 'eye'\"></cds-icon>\n <span class=\"clr-sr-only\">\n {{ show ? commonStrings.keys.passwordHide : commonStrings.keys.passwordShow }}\n </span>\n </button>\n </div>\n <cds-icon\n *ngIf=\"showInvalid\"\n class=\"clr-validate-icon\"\n status=\"danger\"\n shape=\"exclamation-circle\"\n aria-hidden=\"true\"\n ></cds-icon>\n <cds-icon\n *ngIf=\"showValid\"\n class=\"clr-validate-icon\"\n shape=\"check-circle\"\n status=\"success\"\n aria-hidden=\"true\"\n ></cds-icon>\n </div>\n <ng-content select=\"clr-control-helper\" *ngIf=\"showHelper\"></ng-content>\n <ng-content select=\"clr-control-error\" *ngIf=\"showInvalid\"></ng-content>\n <ng-content select=\"clr-control-success\" *ngIf=\"showValid\"></ng-content>\n </div>\n ",
9531
9595
  host: {
9532
9596
  '[class.clr-form-control]': 'true',
9533
9597
  '[class.clr-form-control-disabled]': 'control?.disabled',
@@ -9585,7 +9649,10 @@
9585
9649
  return ClrPassword;
9586
9650
  }(WrappedFormControl));
9587
9651
  ClrPassword.decorators = [
9588
- { type: i0.Directive, args: [{ selector: '[clrPassword]', host: { '[class.clr-input]': 'true' } },] }
9652
+ { type: i0.Directive, args: [{
9653
+ selector: '[clrPassword]',
9654
+ host: { '[class.clr-input]': 'true' },
9655
+ },] }
9589
9656
  ];
9590
9657
  ClrPassword.ctorParameters = function () { return [
9591
9658
  { type: i0.ViewContainerRef },
@@ -9663,7 +9730,9 @@
9663
9730
  return ClrRadio;
9664
9731
  }(WrappedFormControl));
9665
9732
  ClrRadio.decorators = [
9666
- { type: i0.Directive, args: [{ selector: '[clrRadio]' },] }
9733
+ { type: i0.Directive, args: [{
9734
+ selector: '[clrRadio]',
9735
+ },] }
9667
9736
  ];
9668
9737
  ClrRadio.ctorParameters = function () { return [
9669
9738
  { type: i0.ViewContainerRef },
@@ -9828,7 +9897,10 @@
9828
9897
  return ClrRange;
9829
9898
  }(WrappedFormControl));
9830
9899
  ClrRange.decorators = [
9831
- { type: i0.Directive, args: [{ selector: '[clrRange]', host: { '[class.clr-range]': 'true' } },] }
9900
+ { type: i0.Directive, args: [{
9901
+ selector: '[clrRange]',
9902
+ host: { '[class.clr-range]': 'true' },
9903
+ },] }
9832
9904
  ];
9833
9905
  ClrRange.ctorParameters = function () { return [
9834
9906
  { type: i0.ViewContainerRef },
@@ -9917,7 +9989,10 @@
9917
9989
  return ClrSelect;
9918
9990
  }(WrappedFormControl));
9919
9991
  ClrSelect.decorators = [
9920
- { type: i0.Directive, args: [{ selector: '[clrSelect]', host: { '[class.clr-select]': 'true' } },] }
9992
+ { type: i0.Directive, args: [{
9993
+ selector: '[clrSelect]',
9994
+ host: { '[class.clr-select]': 'true' },
9995
+ },] }
9921
9996
  ];
9922
9997
  ClrSelect.ctorParameters = function () { return [
9923
9998
  { type: i0.ViewContainerRef },
@@ -9978,7 +10053,10 @@
9978
10053
  return ClrTextarea;
9979
10054
  }(WrappedFormControl));
9980
10055
  ClrTextarea.decorators = [
9981
- { type: i0.Directive, args: [{ selector: '[clrTextarea]', host: { '[class.clr-textarea]': 'true' } },] }
10056
+ { type: i0.Directive, args: [{
10057
+ selector: '[clrTextarea]',
10058
+ host: { '[class.clr-textarea]': 'true' },
10059
+ },] }
9982
10060
  ];
9983
10061
  ClrTextarea.ctorParameters = function () { return [
9984
10062
  { type: i0.ViewContainerRef },
@@ -10116,7 +10194,7 @@
10116
10194
  ClrExpandableAnimation.decorators = [
10117
10195
  { type: i0.Component, args: [{
10118
10196
  selector: 'clr-expandable-animation',
10119
- template: " <ng-content></ng-content> ",
10197
+ template: "<ng-content></ng-content>",
10120
10198
  animations: [
10121
10199
  animations.trigger('expandAnimation', [
10122
10200
  animations.transition('true <=> false', [
@@ -10530,7 +10608,10 @@
10530
10608
  return ClrDragHandle;
10531
10609
  }());
10532
10610
  ClrDragHandle.decorators = [
10533
- { type: i0.Directive, args: [{ selector: '[clrDragHandle]', host: { '[class.drag-handle]': 'true' } },] }
10611
+ { type: i0.Directive, args: [{
10612
+ selector: '[clrDragHandle]',
10613
+ host: { '[class.drag-handle]': 'true' },
10614
+ },] }
10534
10615
  ];
10535
10616
  ClrDragHandle.ctorParameters = function () { return [
10536
10617
  { type: i0.ElementRef },
@@ -10750,7 +10831,9 @@
10750
10831
  return ClrIfDragged;
10751
10832
  }());
10752
10833
  ClrIfDragged.decorators = [
10753
- { type: i0.Directive, args: [{ selector: '[clrIfDragged]' },] }
10834
+ { type: i0.Directive, args: [{
10835
+ selector: '[clrIfDragged]',
10836
+ },] }
10754
10837
  ];
10755
10838
  ClrIfDragged.ctorParameters = function () { return [
10756
10839
  { type: i0.TemplateRef },
@@ -11311,7 +11394,9 @@
11311
11394
  return OutsideClick;
11312
11395
  }());
11313
11396
  OutsideClick.decorators = [
11314
- { type: i0.Directive, args: [{ selector: '[clrOutsideClick]' },] }
11397
+ { type: i0.Directive, args: [{
11398
+ selector: '[clrOutsideClick]',
11399
+ },] }
11315
11400
  ];
11316
11401
  OutsideClick.ctorParameters = function () { return [
11317
11402
  { type: i0.ElementRef },
@@ -12074,6 +12159,20 @@
12074
12159
  sub.unsubscribe();
12075
12160
  });
12076
12161
  };
12162
+ Object.defineProperty(DatagridNumericFilter.prototype, "maxPlaceholderValue", {
12163
+ get: function () {
12164
+ return this.maxPlaceholder || this.commonStrings.keys.maxValue;
12165
+ },
12166
+ enumerable: false,
12167
+ configurable: true
12168
+ });
12169
+ Object.defineProperty(DatagridNumericFilter.prototype, "minPlaceholderValue", {
12170
+ get: function () {
12171
+ return this.minPlaceholder || this.commonStrings.keys.minValue;
12172
+ },
12173
+ enumerable: false,
12174
+ configurable: true
12175
+ });
12077
12176
  Object.defineProperty(DatagridNumericFilter.prototype, "customNumericFilter", {
12078
12177
  /**
12079
12178
  * Customizable filter logic based on high and low values
@@ -12190,7 +12289,7 @@
12190
12289
  { type: i0.Component, args: [{
12191
12290
  selector: 'clr-dg-numeric-filter',
12192
12291
  providers: [{ provide: CustomFilter, useExisting: DatagridNumericFilter }],
12193
- template: "\n <clr-dg-filter [clrDgFilter]=\"registered\" [(clrDgFilterOpen)]=\"open\">\n <input\n class=\"datagrid-numeric-filter-input\"\n #input_low\n type=\"number\"\n name=\"low\"\n [(ngModel)]=\"low\"\n [placeholder]=\"commonStrings.keys.minValue\"\n [attr.aria-label]=\"commonStrings.keys.minValue\"\n />\n <span class=\"datagrid-filter-input-spacer\"></span>\n <input\n class=\"datagrid-numeric-filter-input\"\n #input_high\n type=\"number\"\n name=\"high\"\n [(ngModel)]=\"high\"\n [placeholder]=\"commonStrings.keys.maxValue\"\n [attr.aria-label]=\"commonStrings.keys.maxValue\"\n />\n </clr-dg-filter>\n "
12292
+ template: "\n <clr-dg-filter [clrDgFilter]=\"registered\" [(clrDgFilterOpen)]=\"open\">\n <input\n class=\"datagrid-numeric-filter-input\"\n #input_low\n type=\"number\"\n name=\"low\"\n [(ngModel)]=\"low\"\n [placeholder]=\"minPlaceholderValue\"\n [attr.aria-label]=\"minPlaceholderValue\"\n />\n <span class=\"datagrid-filter-input-spacer\"></span>\n <input\n class=\"datagrid-numeric-filter-input\"\n #input_high\n type=\"number\"\n name=\"high\"\n [(ngModel)]=\"high\"\n [placeholder]=\"maxPlaceholderValue\"\n [attr.aria-label]=\"maxPlaceholderValue\"\n />\n </clr-dg-filter>\n "
12194
12293
  },] }
12195
12294
  ];
12196
12295
  DatagridNumericFilter.ctorParameters = function () { return [
@@ -12200,6 +12299,8 @@
12200
12299
  { type: ClrPopoverToggleService }
12201
12300
  ]; };
12202
12301
  DatagridNumericFilter.propDecorators = {
12302
+ maxPlaceholder: [{ type: i0.Input, args: ['clrFilterMaxPlaceholder',] }],
12303
+ minPlaceholder: [{ type: i0.Input, args: ['clrFilterMinPlaceholder',] }],
12203
12304
  customNumericFilter: [{ type: i0.Input, args: ['clrDgNumericFilter',] }],
12204
12305
  input: [{ type: i0.ViewChild, args: ['input_low',] }],
12205
12306
  filterContainer: [{ type: i0.ViewChild, args: [ClrDatagridFilter,] }],
@@ -12345,6 +12446,13 @@
12345
12446
  _this.filterValueChange = new i0.EventEmitter();
12346
12447
  return _this;
12347
12448
  }
12449
+ Object.defineProperty(DatagridStringFilter.prototype, "placeholderValue", {
12450
+ get: function () {
12451
+ return this.placeholder || this.commonStrings.keys.filterItems;
12452
+ },
12453
+ enumerable: false,
12454
+ configurable: true
12455
+ });
12348
12456
  Object.defineProperty(DatagridStringFilter.prototype, "customStringFilter", {
12349
12457
  /**
12350
12458
  * Customizable filter logic based on a search text
@@ -12411,7 +12519,7 @@
12411
12519
  { type: i0.Component, args: [{
12412
12520
  selector: 'clr-dg-string-filter',
12413
12521
  providers: [{ provide: CustomFilter, useExisting: DatagridStringFilter }],
12414
- template: "\n <clr-dg-filter [clrDgFilter]=\"registered\" [(clrDgFilterOpen)]=\"open\">\n <input\n #input\n type=\"text\"\n name=\"search\"\n [(ngModel)]=\"value\"\n class=\"clr-input\"\n [attr.aria-label]=\"commonStrings.keys.filterItems\"\n />\n </clr-dg-filter>\n "
12522
+ template: "\n <clr-dg-filter [clrDgFilter]=\"registered\" [(clrDgFilterOpen)]=\"open\">\n <input\n #input\n type=\"text\"\n name=\"search\"\n [(ngModel)]=\"value\"\n class=\"clr-input\"\n [attr.aria-label]=\"placeholderValue\"\n [placeholder]=\"placeholderValue\"\n />\n </clr-dg-filter>\n "
12415
12523
  },] }
12416
12524
  ];
12417
12525
  DatagridStringFilter.ctorParameters = function () { return [
@@ -12421,6 +12529,7 @@
12421
12529
  { type: ClrPopoverToggleService }
12422
12530
  ]; };
12423
12531
  DatagridStringFilter.propDecorators = {
12532
+ placeholder: [{ type: i0.Input, args: ['clrFilterPlaceholder',] }],
12424
12533
  customStringFilter: [{ type: i0.Input, args: ['clrDgStringFilter',] }],
12425
12534
  input: [{ type: i0.ViewChild, args: ['input',] }],
12426
12535
  filterContainer: [{ type: i0.ViewChild, args: [ClrDatagridFilter,] }],
@@ -12467,7 +12576,9 @@
12467
12576
  return DatagridWillyWonka;
12468
12577
  }(WillyWonka));
12469
12578
  DatagridWillyWonka.decorators = [
12470
- { type: i0.Directive, args: [{ selector: 'clr-datagrid' },] }
12579
+ { type: i0.Directive, args: [{
12580
+ selector: 'clr-datagrid',
12581
+ },] }
12471
12582
  ];
12472
12583
 
12473
12584
  var ActionableOompaLoompa = /** @class */ (function (_super) {
@@ -12491,7 +12602,9 @@
12491
12602
  return ActionableOompaLoompa;
12492
12603
  }(OompaLoompa));
12493
12604
  ActionableOompaLoompa.decorators = [
12494
- { type: i0.Directive, args: [{ selector: 'clr-datagrid, clr-dg-row' },] }
12605
+ { type: i0.Directive, args: [{
12606
+ selector: 'clr-datagrid, clr-dg-row',
12607
+ },] }
12495
12608
  ];
12496
12609
  ActionableOompaLoompa.ctorParameters = function () { return [
12497
12610
  { type: i0.ChangeDetectorRef },
@@ -12629,7 +12742,9 @@
12629
12742
  return ExpandableOompaLoompa;
12630
12743
  }(OompaLoompa));
12631
12744
  ExpandableOompaLoompa.decorators = [
12632
- { type: i0.Directive, args: [{ selector: 'clr-datagrid, clr-dg-row' },] }
12745
+ { type: i0.Directive, args: [{
12746
+ selector: 'clr-datagrid, clr-dg-row',
12747
+ },] }
12633
12748
  ];
12634
12749
  ExpandableOompaLoompa.ctorParameters = function () { return [
12635
12750
  { type: i0.ChangeDetectorRef },
@@ -13094,6 +13209,27 @@
13094
13209
  enumerable: false,
13095
13210
  configurable: true
13096
13211
  });
13212
+ Object.defineProperty(ClrDatagridColumn.prototype, "filterStringPlaceholderValue", {
13213
+ get: function () {
13214
+ return this.filterStringPlaceholder || this.commonStrings.keys.filterItems;
13215
+ },
13216
+ enumerable: false,
13217
+ configurable: true
13218
+ });
13219
+ Object.defineProperty(ClrDatagridColumn.prototype, "filterNumberMaxPlaceholderValue", {
13220
+ get: function () {
13221
+ return this.filterNumberMaxPlaceholder || this.commonStrings.keys.maxValue;
13222
+ },
13223
+ enumerable: false,
13224
+ configurable: true
13225
+ });
13226
+ Object.defineProperty(ClrDatagridColumn.prototype, "filterNumberMinPlaceholderValue", {
13227
+ get: function () {
13228
+ return this.filterNumberMinPlaceholder || this.commonStrings.keys.minValue;
13229
+ },
13230
+ enumerable: false,
13231
+ configurable: true
13232
+ });
13097
13233
  Object.defineProperty(ClrDatagridColumn.prototype, "updateFilterValue", {
13098
13234
  set: function (newValue) {
13099
13235
  if (this.filter) {
@@ -13160,7 +13296,7 @@
13160
13296
  ClrDatagridColumn.decorators = [
13161
13297
  { type: i0.Component, args: [{
13162
13298
  selector: 'clr-dg-column',
13163
- template: "\n <div class=\"datagrid-column-flex\">\n <button class=\"datagrid-column-title\" *ngIf=\"sortable\" (click)=\"sort()\" type=\"button\">\n <ng-container *ngTemplateOutlet=\"columnTitle\"></ng-container>\n <cds-icon\n *ngIf=\"sortDirection\"\n shape=\"arrow\"\n [attr.direction]=\"sortDirection\"\n aria-hidden=\"true\"\n class=\"sort-icon\"\n ></cds-icon>\n </button>\n <!-- I'm really not happy with that select since it's not very scalable -->\n <ng-content select=\"clr-dg-filter, clr-dg-string-filter, clr-dg-numeric-filter\"></ng-content>\n\n <clr-dg-string-filter\n *ngIf=\"field && !customFilter && colType == 'string'\"\n [clrDgStringFilter]=\"registered\"\n [(clrFilterValue)]=\"filterValue\"\n ></clr-dg-string-filter>\n\n <clr-dg-numeric-filter\n *ngIf=\"field && !customFilter && colType == 'number'\"\n [clrDgNumericFilter]=\"registered\"\n [(clrFilterValue)]=\"filterValue\"\n ></clr-dg-numeric-filter>\n\n <ng-template #columnTitle>\n <ng-content></ng-content>\n </ng-template>\n\n <span class=\"datagrid-column-title\" *ngIf=\"!sortable\">\n <ng-container *ngTemplateOutlet=\"columnTitle\"></ng-container>\n </span>\n\n <clr-dg-column-separator *ngIf=\"showSeparator\"></clr-dg-column-separator>\n </div>\n ",
13299
+ template: "\n <div class=\"datagrid-column-flex\">\n <button class=\"datagrid-column-title\" *ngIf=\"sortable\" (click)=\"sort()\" type=\"button\">\n <ng-container *ngTemplateOutlet=\"columnTitle\"></ng-container>\n <cds-icon\n *ngIf=\"sortDirection\"\n shape=\"arrow\"\n [attr.direction]=\"sortDirection\"\n aria-hidden=\"true\"\n class=\"sort-icon\"\n ></cds-icon>\n </button>\n <!-- I'm really not happy with that select since it's not very scalable -->\n <ng-content select=\"clr-dg-filter, clr-dg-string-filter, clr-dg-numeric-filter\"></ng-content>\n\n <clr-dg-string-filter\n *ngIf=\"field && !customFilter && colType == 'string'\"\n [clrFilterPlaceholder]=\"filterStringPlaceholderValue\"\n [clrDgStringFilter]=\"registered\"\n [(clrFilterValue)]=\"filterValue\"\n ></clr-dg-string-filter>\n\n <clr-dg-numeric-filter\n *ngIf=\"field && !customFilter && colType == 'number'\"\n [clrFilterMaxPlaceholder]=\"filterMaxPlaceholderValue\"\n [clrFilterMinPlaceholder]=\"filterMinPlaceholderValue\"\n [clrDgNumericFilter]=\"registered\"\n [(clrFilterValue)]=\"filterValue\"\n ></clr-dg-numeric-filter>\n\n <ng-template #columnTitle>\n <ng-content></ng-content>\n </ng-template>\n\n <span class=\"datagrid-column-title\" *ngIf=\"!sortable\">\n <ng-container *ngTemplateOutlet=\"columnTitle\"></ng-container>\n </span>\n\n <clr-dg-column-separator *ngIf=\"showSeparator\"></clr-dg-column-separator>\n </div>\n ",
13164
13300
  providers: [ClrPopoverPositionService, ClrPopoverEventsService, ClrPopoverToggleService],
13165
13301
  host: {
13166
13302
  '[class.datagrid-column]': 'true',
@@ -13187,6 +13323,9 @@
13187
13323
  sortOrder: [{ type: i0.Input, args: ['clrDgSortOrder',] }],
13188
13324
  sortOrderChange: [{ type: i0.Output, args: ['clrDgSortOrderChange',] }],
13189
13325
  projectedFilter: [{ type: i0.ContentChild, args: [CustomFilter,] }],
13326
+ filterStringPlaceholder: [{ type: i0.Input, args: ['clrFilterStringPlaceholder',] }],
13327
+ filterNumberMaxPlaceholder: [{ type: i0.Input, args: ['clrFilterNumberMaxPlaceholder',] }],
13328
+ filterNumberMinPlaceholder: [{ type: i0.Input, args: ['clrFilterNumberMinPlaceholder',] }],
13190
13329
  updateFilterValue: [{ type: i0.Input, args: ['clrFilterValue',] }],
13191
13330
  filterValueChange: [{ type: i0.Output, args: ['clrFilterValueChange',] }]
13192
13331
  };
@@ -13746,7 +13885,7 @@
13746
13885
  ClrDatagridCell.decorators = [
13747
13886
  { type: i0.Component, args: [{
13748
13887
  selector: 'clr-dg-cell',
13749
- template: " <ng-content></ng-content> ",
13888
+ template: "<ng-content></ng-content>",
13750
13889
  host: {
13751
13890
  '[class.datagrid-cell]': 'true',
13752
13891
  '[class.datagrid-signpost-trigger]': 'signpost.length > 0',
@@ -13950,6 +14089,10 @@
13950
14089
  * Subscriptions to the other providers changes.
13951
14090
  */
13952
14091
  this.subscriptions = [];
14092
+ /**
14093
+ * Shift key state, for use in range selection.
14094
+ */
14095
+ this.shiftPressed = false;
13953
14096
  this.valueCollector = new rxjs.Subject();
13954
14097
  /**
13955
14098
  * The Observable that lets other classes subscribe to selection changes
@@ -14352,7 +14495,7 @@
14352
14495
 
14353
14496
  var nbRow = 0;
14354
14497
  var ClrDatagridRow = /** @class */ (function () {
14355
- function ClrDatagridRow(selection, rowActionService, globalExpandable, expand, detailService, displayMode, vcr, renderer, el, commonStrings) {
14498
+ function ClrDatagridRow(selection, rowActionService, globalExpandable, expand, detailService, displayMode, vcr, renderer, el, commonStrings, items, document) {
14356
14499
  var _this = this;
14357
14500
  this.selection = selection;
14358
14501
  this.rowActionService = rowActionService;
@@ -14364,6 +14507,8 @@
14364
14507
  this.renderer = renderer;
14365
14508
  this.el = el;
14366
14509
  this.commonStrings = commonStrings;
14510
+ this.items = items;
14511
+ this.document = document;
14367
14512
  /* reference to the enum so that template can access */
14368
14513
  this.SELECTION_TYPE = SelectionType;
14369
14514
  this.expandAnimationTrigger = false;
@@ -14394,6 +14539,24 @@
14394
14539
  }
14395
14540
  }));
14396
14541
  }
14542
+ /**
14543
+ * The default behavior in Chrome and Firefox for shift-clicking on a label is to perform text-selection.
14544
+ * This prevents our intended range-selection, because this text-selection overrides our shift-click event.
14545
+ * We need to clear the stored selection range when shift-clicking. This will override the mostly unused shift-click
14546
+ * selection browser functionality, which is inconsistently implemented in browsers anyway.
14547
+ */
14548
+ ClrDatagridRow.prototype.clearRanges = function (event) {
14549
+ if (event.shiftKey) {
14550
+ this.document.getSelection().removeAllRanges();
14551
+ // Firefox is too persistent about its text-selection behaviour. So we need to add a preventDefault();
14552
+ // We should not try to enforce this on the other browsers, though, because their toggle cycle does not get canceled by
14553
+ // the preventDefault() and they toggle the checkbox second time, effectively retrurning it to not-selected.
14554
+ if (window.navigator.userAgent.indexOf('Firefox') !== -1) {
14555
+ event.preventDefault();
14556
+ this.toggle(true);
14557
+ }
14558
+ }
14559
+ };
14397
14560
  Object.defineProperty(ClrDatagridRow.prototype, "selected", {
14398
14561
  /**
14399
14562
  * Indicates if the row is selected
@@ -14411,6 +14574,12 @@
14411
14574
  this._selected = value;
14412
14575
  }
14413
14576
  else {
14577
+ if (value && this.selection.selectionType === SelectionType.Multi) {
14578
+ this.rangeSelect();
14579
+ }
14580
+ else {
14581
+ this.selection.rangeStart = null;
14582
+ }
14414
14583
  this.selection.setSelected(this.item, value);
14415
14584
  }
14416
14585
  },
@@ -14514,6 +14683,30 @@
14514
14683
  _this.expandAnimationTrigger = !_this.expandAnimationTrigger;
14515
14684
  }));
14516
14685
  };
14686
+ ClrDatagridRow.prototype.rangeSelect = function () {
14687
+ var _a;
14688
+ var items = this.items.displayed;
14689
+ if (!items) {
14690
+ return;
14691
+ }
14692
+ var startIx = items.indexOf(this.selection.rangeStart);
14693
+ if (this.selection.rangeStart &&
14694
+ this.selection.current.includes(this.selection.rangeStart) &&
14695
+ this.selection.shiftPressed &&
14696
+ startIx !== -1) {
14697
+ var endIx = items.indexOf(this.item);
14698
+ // Using Set to remove duplicates
14699
+ var newSelection = new Set(this.selection.current.concat(items.slice(Math.min(startIx, endIx), Math.max(startIx, endIx) + 1)));
14700
+ this.selection.clearSelection();
14701
+ (_a = this.selection.current).push.apply(_a, __spreadArray([], __read(newSelection)));
14702
+ }
14703
+ else {
14704
+ // page number has changed or
14705
+ // no Shift was pressed or
14706
+ // rangeStart not yet set
14707
+ this.selection.rangeStart = this.item;
14708
+ }
14709
+ };
14517
14710
  ClrDatagridRow.prototype.ngOnDestroy = function () {
14518
14711
  this.subscriptions.forEach(function (sub) { return sub.unsubscribe(); });
14519
14712
  };
@@ -14533,7 +14726,7 @@
14533
14726
  ClrDatagridRow.decorators = [
14534
14727
  { type: i0.Component, args: [{
14535
14728
  selector: 'clr-dg-row',
14536
- 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]=\"commonStrings.keys.select\"\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]=\"commonStrings.keys.select\"\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.isOpen ? 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",
14729
+ 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]=\"commonStrings.keys.select\"\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]=\"commonStrings.keys.select\"\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.isOpen ? 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",
14537
14730
  host: {
14538
14731
  '[class.datagrid-row]': 'true',
14539
14732
  '[class.datagrid-selected]': 'selected',
@@ -14557,7 +14750,9 @@
14557
14750
  { type: i0.ViewContainerRef },
14558
14751
  { type: i0.Renderer2 },
14559
14752
  { type: i0.ElementRef },
14560
- { type: ClrCommonStringsService }
14753
+ { type: ClrCommonStringsService },
14754
+ { type: Items },
14755
+ { type: undefined, decorators: [{ type: i0.Inject, args: [i1.DOCUMENT,] }] }
14561
14756
  ]; };
14562
14757
  ClrDatagridRow.propDecorators = {
14563
14758
  expandAnimation: [{ type: i0.ViewChild, args: [ClrExpandableAnimation,] }],
@@ -14973,7 +15168,7 @@
14973
15168
  * The full license information can be found in LICENSE in the root directory of this project.
14974
15169
  */
14975
15170
  var ClrDatagrid = /** @class */ (function () {
14976
- function ClrDatagrid(organizer, items, expandableRows, selection, rowActionService, stateProvider, displayMode, renderer, detailService, datagridId, el, page, commonStrings, columnsService, keyNavigation) {
15171
+ function ClrDatagrid(organizer, items, expandableRows, selection, rowActionService, stateProvider, displayMode, renderer, detailService, datagridId, document, el, page, commonStrings, columnsService, keyNavigation, zone) {
14977
15172
  this.organizer = organizer;
14978
15173
  this.items = items;
14979
15174
  this.expandableRows = expandableRows;
@@ -14983,11 +15178,13 @@
14983
15178
  this.displayMode = displayMode;
14984
15179
  this.renderer = renderer;
14985
15180
  this.detailService = detailService;
15181
+ this.document = document;
14986
15182
  this.el = el;
14987
15183
  this.page = page;
14988
15184
  this.commonStrings = commonStrings;
14989
15185
  this.columnsService = columnsService;
14990
15186
  this.keyNavigation = keyNavigation;
15187
+ this.zone = zone;
14991
15188
  /* reference to the enum so that template can access */
14992
15189
  this.SELECTION_TYPE = SelectionType;
14993
15190
  /**
@@ -15198,6 +15395,19 @@
15198
15395
  });
15199
15396
  }
15200
15397
  }));
15398
+ // We need to preserve shift state, so it can be used on selection change, regardless of the input event
15399
+ // that triggered the change. This helps us to easily resolve the k/b only case together with the mouse selection case.
15400
+ this.zone.runOutsideAngular(function () {
15401
+ _this._subscriptions.push(rxjs.fromEvent(_this.document.body, 'keydown').subscribe(function (event) {
15402
+ if (event.key === 'Shift') {
15403
+ _this.selection.shiftPressed = true;
15404
+ }
15405
+ }), rxjs.fromEvent(_this.document.body, 'keyup').subscribe(function (event) {
15406
+ if (event.key === 'Shift') {
15407
+ _this.selection.shiftPressed = false;
15408
+ }
15409
+ }));
15410
+ });
15201
15411
  };
15202
15412
  ClrDatagrid.prototype.ngOnDestroy = function () {
15203
15413
  this._subscriptions.forEach(function (sub) { return sub.unsubscribe(); });
@@ -15246,11 +15456,13 @@
15246
15456
  { type: i0.Renderer2 },
15247
15457
  { type: DetailService },
15248
15458
  { type: String, decorators: [{ type: i0.Inject, args: [UNIQUE_ID,] }] },
15459
+ { type: undefined, decorators: [{ type: i0.Inject, args: [i1.DOCUMENT,] }] },
15249
15460
  { type: i0.ElementRef },
15250
15461
  { type: Page },
15251
15462
  { type: ClrCommonStringsService },
15252
15463
  { type: ColumnsService },
15253
- { type: KeyNavigationGridController }
15464
+ { type: KeyNavigationGridController },
15465
+ { type: i0.NgZone }
15254
15466
  ]; };
15255
15467
  ClrDatagrid.propDecorators = {
15256
15468
  loading: [{ type: i0.Input, args: ['clrDgLoading',] }],
@@ -15290,7 +15502,7 @@
15290
15502
  ClrDatagridActionBar.decorators = [
15291
15503
  { type: i0.Component, args: [{
15292
15504
  selector: 'clr-dg-action-bar',
15293
- template: " <ng-content></ng-content> ",
15505
+ template: "<ng-content></ng-content>",
15294
15506
  host: { '[class.datagrid-action-bar]': 'true' }
15295
15507
  },] }
15296
15508
  ];
@@ -15871,7 +16083,9 @@
15871
16083
  return DatagridDetailRegisterer;
15872
16084
  }());
15873
16085
  DatagridDetailRegisterer.decorators = [
15874
- { type: i0.Directive, args: [{ selector: '[clrIfExpanded]' },] }
16086
+ { type: i0.Directive, args: [{
16087
+ selector: '[clrIfExpanded]',
16088
+ },] }
15875
16089
  ];
15876
16090
  DatagridDetailRegisterer.ctorParameters = function () { return [
15877
16091
  { type: ExpandableRowsCount, decorators: [{ type: i0.Optional }] }
@@ -16021,7 +16235,9 @@
16021
16235
  return ClrDatagridHideableColumn;
16022
16236
  }());
16023
16237
  ClrDatagridHideableColumn.decorators = [
16024
- { type: i0.Directive, args: [{ selector: '[clrDgHideableColumn]' },] }
16238
+ { type: i0.Directive, args: [{
16239
+ selector: '[clrDgHideableColumn]',
16240
+ },] }
16025
16241
  ];
16026
16242
  ClrDatagridHideableColumn.ctorParameters = function () { return [
16027
16243
  { type: i0.TemplateRef },
@@ -16528,7 +16744,9 @@
16528
16744
  return DatagridCellRenderer;
16529
16745
  }());
16530
16746
  DatagridCellRenderer.decorators = [
16531
- { type: i0.Directive, args: [{ selector: 'clr-dg-cell' },] }
16747
+ { type: i0.Directive, args: [{
16748
+ selector: 'clr-dg-cell',
16749
+ },] }
16532
16750
  ];
16533
16751
  DatagridCellRenderer.ctorParameters = function () { return [
16534
16752
  { type: i0.ElementRef },
@@ -16647,7 +16865,10 @@
16647
16865
  return DatagridHeaderRenderer;
16648
16866
  }());
16649
16867
  DatagridHeaderRenderer.decorators = [
16650
- { type: i0.Directive, args: [{ selector: 'clr-dg-column', providers: [ColumnResizerService, COLUMN_STATE_PROVIDER] },] }
16868
+ { type: i0.Directive, args: [{
16869
+ selector: 'clr-dg-column',
16870
+ providers: [ColumnResizerService, COLUMN_STATE_PROVIDER],
16871
+ },] }
16651
16872
  ];
16652
16873
  DatagridHeaderRenderer.ctorParameters = function () { return [
16653
16874
  { type: i0.ElementRef },
@@ -16759,7 +16980,9 @@
16759
16980
  return DatagridRowRenderer;
16760
16981
  }());
16761
16982
  DatagridRowRenderer.decorators = [
16762
- { type: i0.Directive, args: [{ selector: 'clr-dg-row, clr-dg-row-detail' },] }
16983
+ { type: i0.Directive, args: [{
16984
+ selector: 'clr-dg-row, clr-dg-row-detail',
16985
+ },] }
16763
16986
  ];
16764
16987
  DatagridRowRenderer.ctorParameters = function () { return [
16765
16988
  { type: ColumnsService }
@@ -17047,7 +17270,9 @@
17047
17270
  return ClrStackViewCustomTags;
17048
17271
  }());
17049
17272
  ClrStackViewCustomTags.decorators = [
17050
- { type: i0.Directive, args: [{ selector: 'clr-stack-content' },] }
17273
+ { type: i0.Directive, args: [{
17274
+ selector: 'clr-stack-content',
17275
+ },] }
17051
17276
  ];
17052
17277
  var ClrStackViewLabel = /** @class */ (function () {
17053
17278
  function ClrStackViewLabel(uniqueId) {
@@ -17790,7 +18015,9 @@
17790
18015
  return ClrRecursiveForOf;
17791
18016
  }());
17792
18017
  ClrRecursiveForOf.decorators = [
17793
- { type: i0.Directive, args: [{ selector: '[clrRecursiveFor][clrRecursiveForOf]' },] }
18018
+ { type: i0.Directive, args: [{
18019
+ selector: '[clrRecursiveFor][clrRecursiveForOf]',
18020
+ },] }
17794
18021
  ];
17795
18022
  ClrRecursiveForOf.ctorParameters = function () { return [
17796
18023
  { type: i0.TemplateRef },
@@ -18199,7 +18426,7 @@
18199
18426
  ClrTreeNode.decorators = [
18200
18427
  { type: i0.Component, args: [{
18201
18428
  selector: 'clr-tree-node',
18202
- template: "<!--\n ~ Copyright (c) 2016-2021 VMware, Inc. All Rights Reserved.\n ~ This software is released under MIT license.\n ~ The full license information can be found in LICENSE in the root directory of this project.\n -->\n\n<div\n #contentContainer\n role=\"treeitem\"\n class=\"clr-tree-node-content-container\"\n tabindex=\"-1\"\n [attr.aria-expanded]=\"isExpandable() ? expanded : null\"\n [attr.aria-selected]=\"ariaSelected\"\n (keydown)=\"onKeyDown($event)\"\n (focus)=\"broadcastFocusOnContainer()\"\n>\n <button\n *ngIf=\"isExpandable() && !isModelLoading && !expandService.loading\"\n aria-hidden=\"true\"\n type=\"button\"\n tabindex=\"-1\"\n class=\"clr-treenode-caret\"\n (click)=\"expandService.toggle();\"\n (focus)=\"focusTreeNode()\"\n >\n <cds-icon\n class=\"clr-treenode-caret-icon\"\n shape=\"angle\"\n [attr.direction]=\"expandService.expanded ? 'down' : 'right'\"\n ></cds-icon>\n </button>\n <div class=\"clr-treenode-spinner-container\" *ngIf=\"expandService.loading || isModelLoading\">\n <span class=\"clr-treenode-spinner spinner\"></span>\n </div>\n <div class=\"clr-checkbox-wrapper clr-treenode-checkbox\" *ngIf=\"featuresService.selectable\">\n <input\n aria-hidden=\"true\"\n type=\"checkbox\"\n id=\"{{nodeId}}-check\"\n class=\"clr-checkbox\"\n [checked]=\"_model.selected.value === STATES.SELECTED\"\n [indeterminate]=\"_model.selected.value === STATES.INDETERMINATE\"\n (change)=\"_model.toggleSelection(featuresService.eager)\"\n (focus)=\"focusTreeNode()\"\n tabindex=\"-1\"\n />\n <label for=\"{{nodeId}}-check\" class=\"clr-control-label\"></label>\n </div>\n <div class=\"clr-treenode-content\" (mousedown)=\"focusTreeNode()\">\n <ng-content></ng-content>\n <div class=\"clr-sr-only\" *ngIf=\"featuresService.selectable\">\n <span *ngIf=\"ariaSelected\"> selected </span>\n <span *ngIf=\"!ariaSelected\"> unselected </span>\n </div>\n </div>\n</div>\n<div\n class=\"clr-treenode-children\"\n [@toggleChildrenAnim]=\"expandService.expanded ? 'expanded' : 'collapsed'\"\n [attr.role]=\"isExpandable() && !featuresService.recursion ? 'group' : null\"\n>\n <ng-content select=\"clr-tree-node\"></ng-content>\n <ng-content select=\"[clrIfExpanded]\"></ng-content>\n <clr-recursive-children [parent]=\"_model\"></clr-recursive-children>\n</div>\n",
18429
+ template: "<!--\n ~ Copyright (c) 2016-2021 VMware, Inc. All Rights Reserved.\n ~ This software is released under MIT license.\n ~ The full license information can be found in LICENSE in the root directory of this project.\n -->\n\n<div\n #contentContainer\n role=\"treeitem\"\n class=\"clr-tree-node-content-container\"\n tabindex=\"-1\"\n [attr.aria-expanded]=\"isExpandable() ? expanded : null\"\n [attr.aria-selected]=\"ariaSelected\"\n (keydown)=\"onKeyDown($event)\"\n (focus)=\"broadcastFocusOnContainer()\"\n>\n <button\n *ngIf=\"isExpandable() && !isModelLoading && !expandService.loading\"\n aria-hidden=\"true\"\n type=\"button\"\n tabindex=\"-1\"\n class=\"clr-treenode-caret\"\n (click)=\"expandService.toggle();\"\n (focus)=\"focusTreeNode()\"\n >\n <cds-icon\n class=\"clr-treenode-caret-icon\"\n shape=\"angle\"\n [attr.direction]=\"expandService.expanded ? 'down' : 'right'\"\n ></cds-icon>\n </button>\n <div class=\"clr-treenode-spinner-container\" *ngIf=\"expandService.loading || isModelLoading\">\n <span class=\"clr-treenode-spinner spinner\"></span>\n </div>\n <div class=\"clr-checkbox-wrapper clr-treenode-checkbox\" *ngIf=\"featuresService.selectable\">\n <input\n aria-hidden=\"true\"\n type=\"checkbox\"\n id=\"{{nodeId}}-check\"\n class=\"clr-checkbox\"\n [checked]=\"_model.selected.value === STATES.SELECTED\"\n [indeterminate]=\"_model.selected.value === STATES.INDETERMINATE\"\n (change)=\"_model.toggleSelection(featuresService.eager)\"\n (focus)=\"focusTreeNode()\"\n tabindex=\"-1\"\n />\n <label for=\"{{nodeId}}-check\" class=\"clr-control-label\"></label>\n </div>\n <div class=\"clr-treenode-content\" (mousedown)=\"focusTreeNode()\">\n <ng-content></ng-content>\n <div class=\"clr-sr-only\" *ngIf=\"featuresService.selectable\">\n <span *ngIf=\"ariaSelected\">selected</span>\n <span *ngIf=\"!ariaSelected\">unselected</span>\n </div>\n </div>\n</div>\n<div\n class=\"clr-treenode-children\"\n [@toggleChildrenAnim]=\"expandService.expanded ? 'expanded' : 'collapsed'\"\n [attr.role]=\"isExpandable() && !featuresService.recursion ? 'group' : null\"\n>\n <ng-content select=\"clr-tree-node\"></ng-content>\n <ng-content select=\"[clrIfExpanded]\"></ng-content>\n <clr-recursive-children [parent]=\"_model\"></clr-recursive-children>\n</div>\n",
18203
18430
  providers: [
18204
18431
  UNIQUE_ID_PROVIDER,
18205
18432
  TREE_FEATURES_PROVIDER,
@@ -19329,7 +19556,7 @@
19329
19556
  ClrDropdownMenu.decorators = [
19330
19557
  { type: i0.Component, args: [{
19331
19558
  selector: 'clr-dropdown-menu',
19332
- template: " <ng-content></ng-content> ",
19559
+ template: "<ng-content></ng-content>",
19333
19560
  host: {
19334
19561
  '[class.dropdown-menu]': 'true',
19335
19562
  '[attr.role]': '"menu"',
@@ -19850,7 +20077,7 @@
19850
20077
  ClrAlerts.decorators = [
19851
20078
  { type: i0.Component, args: [{
19852
20079
  selector: 'clr-alerts',
19853
- template: "<!--\n ~ Copyright (c) 2016-2021 VMware, Inc. All Rights Reserved.\n ~ This software is released under MIT license.\n ~ The full license information can be found in LICENSE in the root directory of this project.\n -->\n\n<clr-alerts-pager *ngIf=\"multiAlertService.count > 1\" [clrCurrentAlertIndex]=\"currentAlertIndex\"> </clr-alerts-pager>\n<ng-content select=\"clr-alert\"></ng-content>\n",
20080
+ template: "<!--\n ~ Copyright (c) 2016-2021 VMware, Inc. All Rights Reserved.\n ~ This software is released under MIT license.\n ~ The full license information can be found in LICENSE in the root directory of this project.\n -->\n\n<clr-alerts-pager *ngIf=\"multiAlertService.count > 1\" [clrCurrentAlertIndex]=\"currentAlertIndex\"></clr-alerts-pager>\n<ng-content select=\"clr-alert\"></ng-content>\n",
19854
20081
  providers: [MultiAlertService],
19855
20082
  host: {
19856
20083
  '[class.alerts]': 'true',
@@ -20147,7 +20374,10 @@
20147
20374
  return ClrMainContainer;
20148
20375
  }());
20149
20376
  ClrMainContainer.decorators = [
20150
- { type: i0.Directive, args: [{ selector: 'clr-main-container', host: { '[class.main-container]': 'true' } },] }
20377
+ { type: i0.Directive, args: [{
20378
+ selector: 'clr-main-container',
20379
+ host: { '[class.main-container]': 'true' },
20380
+ },] }
20151
20381
  ];
20152
20382
  ClrMainContainer.ctorParameters = function () { return [
20153
20383
  { type: i0.ElementRef },
@@ -20181,7 +20411,9 @@
20181
20411
  return MainContainerWillyWonka;
20182
20412
  }(WillyWonka));
20183
20413
  MainContainerWillyWonka.decorators = [
20184
- { type: i0.Directive, args: [{ selector: 'clr-main-container' },] }
20414
+ { type: i0.Directive, args: [{
20415
+ selector: 'clr-main-container',
20416
+ },] }
20185
20417
  ];
20186
20418
 
20187
20419
  var NavDetectionOompaLoompa = /** @class */ (function (_super) {
@@ -20207,7 +20439,9 @@
20207
20439
  return NavDetectionOompaLoompa;
20208
20440
  }(OompaLoompa));
20209
20441
  NavDetectionOompaLoompa.decorators = [
20210
- { type: i0.Directive, args: [{ selector: 'clr-header' },] }
20442
+ { type: i0.Directive, args: [{
20443
+ selector: 'clr-header',
20444
+ },] }
20211
20445
  ];
20212
20446
  NavDetectionOompaLoompa.ctorParameters = function () { return [
20213
20447
  { type: i0.ChangeDetectorRef },
@@ -20944,7 +21178,9 @@
20944
21178
  return ClrNavLevel;
20945
21179
  }(FocusTrap));
20946
21180
  ClrNavLevel.decorators = [
20947
- { type: i0.Directive, args: [{ selector: '[clr-nav-level]' },] }
21181
+ { type: i0.Directive, args: [{
21182
+ selector: '[clr-nav-level]',
21183
+ },] }
20948
21184
  ];
20949
21185
  ClrNavLevel.ctorParameters = function () { return [
20950
21186
  { type: undefined, decorators: [{ type: i0.Inject, args: [i0.PLATFORM_ID,] }] },
@@ -21037,7 +21273,9 @@
21037
21273
  return TabsWillyWonka;
21038
21274
  }(WillyWonka));
21039
21275
  TabsWillyWonka.decorators = [
21040
- { type: i0.Directive, args: [{ selector: 'clr-tabs' },] }
21276
+ { type: i0.Directive, args: [{
21277
+ selector: 'clr-tabs',
21278
+ },] }
21041
21279
  ];
21042
21280
 
21043
21281
  var ActiveOompaLoompa = /** @class */ (function (_super) {
@@ -21062,7 +21300,9 @@
21062
21300
  return ActiveOompaLoompa;
21063
21301
  }(OompaLoompa));
21064
21302
  ActiveOompaLoompa.decorators = [
21065
- { type: i0.Directive, args: [{ selector: '[clrTabLink], clr-tab-content' },] }
21303
+ { type: i0.Directive, args: [{
21304
+ selector: '[clrTabLink], clr-tab-content',
21305
+ },] }
21066
21306
  ];
21067
21307
  ActiveOompaLoompa.ctorParameters = function () { return [
21068
21308
  { type: i0.ChangeDetectorRef },
@@ -21362,7 +21602,7 @@
21362
21602
  ClrTab.decorators = [
21363
21603
  { type: i0.Component, args: [{
21364
21604
  selector: 'clr-tab',
21365
- template: " <ng-content></ng-content> ",
21605
+ template: "<ng-content></ng-content>",
21366
21606
  providers: [IF_ACTIVE_ID_PROVIDER, AriaService]
21367
21607
  },] }
21368
21608
  ];
@@ -21389,7 +21629,7 @@
21389
21629
  ClrTabOverflowContent.decorators = [
21390
21630
  { type: i0.Component, args: [{
21391
21631
  selector: 'clr-tab-overflow-content',
21392
- template: " <ng-content></ng-content> ",
21632
+ template: "<ng-content></ng-content>",
21393
21633
  host: {
21394
21634
  '[class.dropdown-menu]': 'true',
21395
21635
  }
@@ -21582,7 +21822,7 @@
21582
21822
  ClrTabs.decorators = [
21583
21823
  { type: i0.Component, args: [{
21584
21824
  selector: 'clr-tabs',
21585
- template: "\n <ul\n class=\"nav\"\n role=\"tablist\"\n [attr.aria-owns]=\"tabIds\"\n [clrKeyFocus]=\"tabLinkElements\"\n clrDirection=\"both\"\n (clrFocusChange)=\"toggleOverflowOnPosition($event)\"\n (focusout)=\"resetKeyFocusCurrentToActive($event)\"\n >\n <!--tab links-->\n <ng-container *ngFor=\"let link of tabLinkDirectives\">\n <ng-container *ngIf=\"link.tabsId === tabsId && !link.inOverflow\">\n <li role=\"presentation\" class=\"nav-item\">\n <ng-container [ngTemplateOutlet]=\"link.templateRefContainer.template\"></ng-container>\n </li>\n </ng-container>\n </ng-container>\n <ng-container *ngIf=\"tabsService.overflowTabs.length > 0\">\n <div class=\"tabs-overflow bottom-right\" role=\"presentation\" [class.open]=\"toggleService.open\">\n <li role=\"application\" class=\"nav-item\">\n <button\n #tabOverflowTrigger\n class=\"btn btn-link nav-link dropdown-toggle\"\n type=\"button\"\n aria-hidden=\"true\"\n [attr.tabindex]=\"activeTabInOverflow && !toggleService.open ? 0 : -1\"\n [class.active]=\"activeTabInOverflow\"\n [class.open]=\"toggleService.open\"\n (mousedown)=\"_mousedown = true\"\n (focus)=\"openOverflowOnFocus()\"\n (click)=\"toggleOverflowOnClick()\"\n [attr.title]=\"commonStrings.keys.more\"\n >\n <cds-icon\n shape=\"ellipsis-horizontal\"\n status=\"toggleService.open ? 'info' : null\"\n [attr.title]=\"commonStrings.keys.more\"\n ></cds-icon>\n </button>\n </li>\n <!--tab links in overflow menu-->\n <clr-tab-overflow-content\n *ngIf=\"toggleService.open\"\n (document:keydown.esc)=\"closeOnEscapeKey()\"\n (document:click)=\"closeOnOutsideClick($event, tabOverflowTrigger)\"\n (focusout)=\"closeOnFocusOut($event)\"\n >\n <ng-container *ngFor=\"let link of tabLinkDirectives\">\n <ng-container\n *ngIf=\"link.tabsId === tabsId && link.inOverflow\"\n [ngTemplateOutlet]=\"link.templateRefContainer.template\"\n >\n </ng-container>\n </ng-container>\n </clr-tab-overflow-content>\n </div>\n </ng-container>\n </ul>\n <ng-container #tabContentViewContainer></ng-container>\n ",
21825
+ template: "\n <ul\n class=\"nav\"\n role=\"tablist\"\n [attr.aria-owns]=\"tabIds\"\n [clrKeyFocus]=\"tabLinkElements\"\n clrDirection=\"both\"\n (clrFocusChange)=\"toggleOverflowOnPosition($event)\"\n (focusout)=\"resetKeyFocusCurrentToActive($event)\"\n >\n <!--tab links-->\n <ng-container *ngFor=\"let link of tabLinkDirectives\">\n <ng-container *ngIf=\"link.tabsId === tabsId && !link.inOverflow\">\n <li role=\"presentation\" class=\"nav-item\">\n <ng-container [ngTemplateOutlet]=\"link.templateRefContainer.template\"></ng-container>\n </li>\n </ng-container>\n </ng-container>\n <ng-container *ngIf=\"tabsService.overflowTabs.length > 0\">\n <div class=\"tabs-overflow bottom-right\" role=\"presentation\" [class.open]=\"toggleService.open\">\n <li role=\"application\" class=\"nav-item\">\n <button\n #tabOverflowTrigger\n class=\"btn btn-link nav-link dropdown-toggle\"\n type=\"button\"\n aria-hidden=\"true\"\n [attr.tabindex]=\"activeTabInOverflow && !toggleService.open ? 0 : -1\"\n [class.active]=\"activeTabInOverflow\"\n [class.open]=\"toggleService.open\"\n (mousedown)=\"_mousedown = true\"\n (focus)=\"openOverflowOnFocus()\"\n (click)=\"toggleOverflowOnClick()\"\n [attr.title]=\"commonStrings.keys.more\"\n >\n <cds-icon\n shape=\"ellipsis-horizontal\"\n status=\"toggleService.open ? 'info' : null\"\n [attr.title]=\"commonStrings.keys.more\"\n ></cds-icon>\n </button>\n </li>\n <!--tab links in overflow menu-->\n <clr-tab-overflow-content\n *ngIf=\"toggleService.open\"\n (document:keydown.esc)=\"closeOnEscapeKey()\"\n (document:click)=\"closeOnOutsideClick($event, tabOverflowTrigger)\"\n (focusout)=\"closeOnFocusOut($event)\"\n >\n <ng-container *ngFor=\"let link of tabLinkDirectives\">\n <ng-container\n *ngIf=\"link.tabsId === tabsId && link.inOverflow\"\n [ngTemplateOutlet]=\"link.templateRefContainer.template\"\n ></ng-container>\n </ng-container>\n </clr-tab-overflow-content>\n </div>\n </ng-container>\n </ul>\n <ng-container #tabContentViewContainer></ng-container>\n ",
21586
21826
  providers: [IfActiveService, ClrPopoverToggleService, TabsService, TABS_ID_PROVIDER]
21587
21827
  },] }
21588
21828
  ];
@@ -22006,7 +22246,7 @@
22006
22246
  ClrVerticalNavGroup.decorators = [
22007
22247
  { type: i0.Component, args: [{
22008
22248
  selector: 'clr-vertical-nav-group',
22009
- template: "<!--\n ~ Copyright (c) 2016-2022 VMware, Inc. All Rights Reserved.\n ~ This software is released under MIT license.\n ~ The full license information can be found in LICENSE in the root directory of this project.\n -->\n\n<div class=\"nav-group-content\">\n <ng-content select=\"[clrVerticalNavLink]\"></ng-content>\n <button\n class=\"nav-group-trigger\"\n type=\"button\"\n [attr.aria-expanded]=\"expanded\"\n [attr.aria-label]=\"groupLabel\"\n (click)=\"toggleExpand()\"\n >\n <ng-content select=\"[clrVerticalNavIcon]\"></ng-content>\n <div class=\"nav-group-text\">\n <ng-content></ng-content>\n </div>\n <cds-icon\n shape=\"angle\"\n class=\"nav-group-trigger-icon\"\n [attr.direction]=\"(this.expanded) ? 'down' : 'right'\"\n [attr.title]=\"(this.expanded) ? commonStrings.keys.collapse : commonStrings.keys.expand\"\n >\n </cds-icon>\n </button>\n</div>\n<!--TODO: This animation needs to be added to the clr-vertical-nav-group-children component-->\n<div class=\"nav-group-children\" [@clrExpand]=\"expandAnimationState\" (@clrExpand.done)=\"expandAnimationDone($event)\">\n <ng-content select=\"[clrIfExpanded], clr-vertical-nav-group-children\"></ng-content>\n</div>\n",
22249
+ template: "<!--\n ~ Copyright (c) 2016-2022 VMware, Inc. All Rights Reserved.\n ~ This software is released under MIT license.\n ~ The full license information can be found in LICENSE in the root directory of this project.\n -->\n\n<div class=\"nav-group-content\">\n <ng-content select=\"[clrVerticalNavLink]\"></ng-content>\n <button\n class=\"nav-group-trigger\"\n type=\"button\"\n [attr.aria-expanded]=\"expanded\"\n [attr.aria-label]=\"groupLabel\"\n (click)=\"toggleExpand()\"\n >\n <ng-content select=\"[clrVerticalNavIcon]\"></ng-content>\n <div class=\"nav-group-text\">\n <ng-content></ng-content>\n </div>\n <cds-icon\n shape=\"angle\"\n class=\"nav-group-trigger-icon\"\n [attr.direction]=\"(this.expanded) ? 'down' : 'right'\"\n [attr.title]=\"(this.expanded) ? commonStrings.keys.collapse : commonStrings.keys.expand\"\n ></cds-icon>\n </button>\n</div>\n<!--TODO: This animation needs to be added to the clr-vertical-nav-group-children component-->\n<div class=\"nav-group-children\" [@clrExpand]=\"expandAnimationState\" (@clrExpand.done)=\"expandAnimationDone($event)\">\n <ng-content select=\"[clrIfExpanded], clr-vertical-nav-group-children\"></ng-content>\n</div>\n",
22010
22250
  providers: [IfExpandService, VerticalNavGroupService],
22011
22251
  animations: [
22012
22252
  animations.trigger('clrExpand', [
@@ -22045,7 +22285,7 @@
22045
22285
  ClrVerticalNavGroupChildren.decorators = [
22046
22286
  { type: i0.Component, args: [{
22047
22287
  selector: 'clr-vertical-nav-group-children',
22048
- template: " <ng-content></ng-content> "
22288
+ template: "<ng-content></ng-content>"
22049
22289
  },] }
22050
22290
  ];
22051
22291
 
@@ -22065,7 +22305,10 @@
22065
22305
  return ClrVerticalNavIcon;
22066
22306
  }());
22067
22307
  ClrVerticalNavIcon.decorators = [
22068
- { type: i0.Directive, args: [{ selector: '[clrVerticalNavIcon]', host: { class: 'nav-icon' } },] }
22308
+ { type: i0.Directive, args: [{
22309
+ selector: '[clrVerticalNavIcon]',
22310
+ host: { class: 'nav-icon' },
22311
+ },] }
22069
22312
  ];
22070
22313
  ClrVerticalNavIcon.ctorParameters = function () { return [
22071
22314
  { type: VerticalNavIconService }
@@ -22323,7 +22566,9 @@
22323
22566
  return ClrModalBody;
22324
22567
  }());
22325
22568
  ClrModalBody.decorators = [
22326
- { type: i0.Directive, args: [{ selector: '.modal-body' },] }
22569
+ { type: i0.Directive, args: [{
22570
+ selector: '.modal-body',
22571
+ },] }
22327
22572
  ];
22328
22573
  ClrModalBody.ctorParameters = function () { return [
22329
22574
  { type: i0.Renderer2 },
@@ -22557,7 +22802,7 @@
22557
22802
  ClrTooltip.decorators = [
22558
22803
  { type: i0.Component, args: [{
22559
22804
  selector: 'clr-tooltip',
22560
- template: " <ng-content></ng-content> ",
22805
+ template: "<ng-content></ng-content>",
22561
22806
  host: {
22562
22807
  '[class.tooltip]': 'true',
22563
22808
  },
@@ -22678,7 +22923,7 @@
22678
22923
  ClrTooltipContent.decorators = [
22679
22924
  { type: i0.Component, args: [{
22680
22925
  selector: 'clr-tooltip-content',
22681
- template: " <ng-content></ng-content> ",
22926
+ template: "<ng-content></ng-content>",
22682
22927
  host: {
22683
22928
  '[class.tooltip-content]': 'true',
22684
22929
  '[style.opacity]': '1',
@@ -23094,7 +23339,7 @@
23094
23339
  ClrTimeline.decorators = [
23095
23340
  { type: i0.Component, args: [{
23096
23341
  selector: 'clr-timeline',
23097
- template: " <ng-content></ng-content> ",
23342
+ template: "<ng-content></ng-content>",
23098
23343
  host: { '[class.clr-timeline]': 'true' },
23099
23344
  providers: [TimelineIconAttributeService]
23100
23345
  },] }
@@ -23127,7 +23372,7 @@
23127
23372
  ClrTimelineStepTitle.decorators = [
23128
23373
  { type: i0.Component, args: [{
23129
23374
  selector: 'clr-timeline-step-title',
23130
- template: " <ng-content></ng-content> ",
23375
+ template: "<ng-content></ng-content>",
23131
23376
  host: { '[class.clr-timeline-step-title]': 'true', '[attr.aria-hidden]': 'true' }
23132
23377
  },] }
23133
23378
  ];
@@ -23188,7 +23433,7 @@
23188
23433
  ClrTimelineStep.decorators = [
23189
23434
  { type: i0.Component, args: [{
23190
23435
  selector: 'clr-timeline-step',
23191
- template: "\n <ng-content select=\"clr-timeline-step-header\"></ng-content>\n <span class=\"clr-sr-only\">{{ stepTitleText }}</span>\n <ng-container *ngIf=\"!isProcessing; else processing\">\n <cds-icon\n [attr.status]=\"iconStatus\"\n [attr.shape]=\"iconShape\"\n [attr.aria-label]=\"iconAriaLabel\"\n [attr.aria-current]=\"iconAriaCurrent\"\n >\n </cds-icon>\n </ng-container>\n <div class=\"clr-timeline-step-body\">\n <ng-content select=\"clr-timeline-step-title\"></ng-content>\n <ng-content select=\"clr-timeline-step-description\"></ng-content>\n </div>\n\n <ng-template #processing>\n <clr-spinner clrMedium [attr.aria-label]=\"iconAriaLabel\"></clr-spinner>\n </ng-template>\n ",
23436
+ template: "\n <ng-content select=\"clr-timeline-step-header\"></ng-content>\n <span class=\"clr-sr-only\">{{ stepTitleText }}</span>\n <ng-container *ngIf=\"!isProcessing; else processing\">\n <cds-icon\n [attr.status]=\"iconStatus\"\n [attr.shape]=\"iconShape\"\n [attr.aria-label]=\"iconAriaLabel\"\n [attr.aria-current]=\"iconAriaCurrent\"\n ></cds-icon>\n </ng-container>\n <div class=\"clr-timeline-step-body\">\n <ng-content select=\"clr-timeline-step-title\"></ng-content>\n <ng-content select=\"clr-timeline-step-description\"></ng-content>\n </div>\n\n <ng-template #processing>\n <clr-spinner clrMedium [attr.aria-label]=\"iconAriaLabel\"></clr-spinner>\n </ng-template>\n ",
23192
23437
  host: { '[class.clr-timeline-step]': 'true' }
23193
23438
  },] }
23194
23439
  ];
@@ -23214,7 +23459,7 @@
23214
23459
  ClrTimelineStepDescription.decorators = [
23215
23460
  { type: i0.Component, args: [{
23216
23461
  selector: 'clr-timeline-step-description',
23217
- template: " <ng-content></ng-content> ",
23462
+ template: "<ng-content></ng-content>",
23218
23463
  host: { '[class.clr-timeline-step-description]': 'true' }
23219
23464
  },] }
23220
23465
  ];
@@ -23232,7 +23477,7 @@
23232
23477
  ClrTimelineStepHeader.decorators = [
23233
23478
  { type: i0.Component, args: [{
23234
23479
  selector: 'clr-timeline-step-header',
23235
- template: " <ng-content></ng-content> ",
23480
+ template: "<ng-content></ng-content>",
23236
23481
  host: { '[class.clr-timeline-step-header]': 'true' }
23237
23482
  },] }
23238
23483
  ];
@@ -24445,7 +24690,9 @@
24445
24690
  return ClrWizardPageButtons;
24446
24691
  }());
24447
24692
  ClrWizardPageButtons.decorators = [
24448
- { type: i0.Directive, args: [{ selector: '[clrPageButtons]' },] }
24693
+ { type: i0.Directive, args: [{
24694
+ selector: '[clrPageButtons]',
24695
+ },] }
24449
24696
  ];
24450
24697
  ClrWizardPageButtons.ctorParameters = function () { return [
24451
24698
  { type: i0.TemplateRef }
@@ -24463,7 +24710,9 @@
24463
24710
  return ClrWizardPageHeaderActions;
24464
24711
  }());
24465
24712
  ClrWizardPageHeaderActions.decorators = [
24466
- { type: i0.Directive, args: [{ selector: '[clrPageHeaderActions]' },] }
24713
+ { type: i0.Directive, args: [{
24714
+ selector: '[clrPageHeaderActions]',
24715
+ },] }
24467
24716
  ];
24468
24717
  ClrWizardPageHeaderActions.ctorParameters = function () { return [
24469
24718
  { type: i0.TemplateRef }
@@ -24481,7 +24730,9 @@
24481
24730
  return ClrWizardPageNavTitle;
24482
24731
  }());
24483
24732
  ClrWizardPageNavTitle.decorators = [
24484
- { type: i0.Directive, args: [{ selector: '[clrPageNavTitle]' },] }
24733
+ { type: i0.Directive, args: [{
24734
+ selector: '[clrPageNavTitle]',
24735
+ },] }
24485
24736
  ];
24486
24737
  ClrWizardPageNavTitle.ctorParameters = function () { return [
24487
24738
  { type: i0.TemplateRef }
@@ -24499,7 +24750,9 @@
24499
24750
  return ClrWizardPageTitle;
24500
24751
  }());
24501
24752
  ClrWizardPageTitle.decorators = [
24502
- { type: i0.Directive, args: [{ selector: '[clrPageTitle]' },] }
24753
+ { type: i0.Directive, args: [{
24754
+ selector: '[clrPageTitle]',
24755
+ },] }
24503
24756
  ];
24504
24757
  ClrWizardPageTitle.ctorParameters = function () { return [
24505
24758
  { type: i0.TemplateRef }
@@ -25892,7 +26145,9 @@
25892
26145
  return ClrWizardCustomTags;
25893
26146
  }());
25894
26147
  ClrWizardCustomTags.decorators = [
25895
- { type: i0.Directive, args: [{ selector: 'clr-wizard-title, clr-wizard-pagetitle' },] }
26148
+ { type: i0.Directive, args: [{
26149
+ selector: 'clr-wizard-title, clr-wizard-pagetitle',
26150
+ },] }
25896
26151
  ];
25897
26152
 
25898
26153
  /*