@clr/angular 12.1.3 → 12.3.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (95) hide show
  1. package/bundles/clr-angular.umd.js +331 -87
  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/common/control.js +5 -2
  41. package/esm2015/forms/common/error.js +2 -2
  42. package/esm2015/forms/common/helper.js +2 -2
  43. package/esm2015/forms/common/if-control-state/if-error.js +4 -2
  44. package/esm2015/forms/common/if-control-state/if-success.js +4 -2
  45. package/esm2015/forms/common/label.js +4 -2
  46. package/esm2015/forms/common/success.js +2 -2
  47. package/esm2015/forms/datepicker/calendar.js +5 -2
  48. package/esm2015/forms/input/input.js +5 -2
  49. package/esm2015/forms/password/password-container.js +4 -4
  50. package/esm2015/forms/password/password.js +5 -2
  51. package/esm2015/forms/radio/radio.js +4 -2
  52. package/esm2015/forms/range/range.js +5 -2
  53. package/esm2015/forms/select/select.js +5 -2
  54. package/esm2015/forms/textarea/textarea.js +5 -2
  55. package/esm2015/icon/icon.js +7 -3
  56. package/esm2015/layout/main-container/main-container.js +5 -2
  57. package/esm2015/layout/nav/chocolate/main-container-willy-wonka.js +4 -2
  58. package/esm2015/layout/nav/chocolate/nav-detection-oompa-loompa.js +4 -2
  59. package/esm2015/layout/nav/nav-level.js +4 -2
  60. package/esm2015/layout/tabs/chocolate/active-oompa-loompa.js +4 -2
  61. package/esm2015/layout/tabs/chocolate/tabs-willy-wonka.js +4 -2
  62. package/esm2015/layout/tabs/tab-overflow-content.js +2 -2
  63. package/esm2015/layout/tabs/tab.js +2 -2
  64. package/esm2015/layout/tabs/tabs.js +2 -3
  65. package/esm2015/layout/vertical-nav/vertical-nav-group-children.js +2 -2
  66. package/esm2015/layout/vertical-nav/vertical-nav-group.js +2 -2
  67. package/esm2015/layout/vertical-nav/vertical-nav-icon.js +5 -2
  68. package/esm2015/modal/modal-body.js +4 -2
  69. package/esm2015/popover/dropdown/dropdown-menu.js +2 -2
  70. package/esm2015/popover/tooltip/tooltip-content.js +2 -2
  71. package/esm2015/popover/tooltip/tooltip.js +2 -2
  72. package/esm2015/progress/spinner/spinner.js +2 -2
  73. package/esm2015/timeline/timeline-step-description.js +2 -2
  74. package/esm2015/timeline/timeline-step-header.js +2 -2
  75. package/esm2015/timeline/timeline-step-title.js +2 -2
  76. package/esm2015/timeline/timeline-step.js +2 -3
  77. package/esm2015/timeline/timeline.js +2 -2
  78. package/esm2015/utils/animations/expandable-animation/expandable-animation.js +2 -2
  79. package/esm2015/utils/conditional/if-active.directive.js +4 -2
  80. package/esm2015/utils/conditional/if-expanded.directive.js +4 -2
  81. package/esm2015/utils/conditional/if-open.directive.js +4 -2
  82. package/esm2015/utils/drag-and-drop/drag-handle.js +5 -2
  83. package/esm2015/utils/drag-and-drop/if-dragged.js +4 -2
  84. package/esm2015/utils/focus-trap/focus-trap.directive.js +4 -2
  85. package/esm2015/utils/loading/loading.js +4 -2
  86. package/esm2015/utils/outside-click/outside-click.js +4 -2
  87. package/esm2015/utils/popover/popover-content.js +4 -2
  88. package/esm2015/wizard/wizard-custom-tags.js +4 -2
  89. package/esm2015/wizard/wizard-page-buttons.js +4 -2
  90. package/esm2015/wizard/wizard-page-header-actions.js +4 -2
  91. package/esm2015/wizard/wizard-page-navtitle.js +4 -2
  92. package/esm2015/wizard/wizard-page-title.js +4 -2
  93. package/fesm2015/clr-angular.js +318 -95
  94. package/fesm2015/clr-angular.js.map +1 -1
  95. 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 }
@@ -6412,7 +6457,7 @@
6412
6457
  ClrCombobox.decorators = [
6413
6458
  { type: i0.Component, args: [{
6414
6459
  selector: 'clr-combobox',
6415
- 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",
6416
6461
  providers: [
6417
6462
  ClrPopoverToggleService,
6418
6463
  { provide: POPOVER_HOST_ANCHOR, useExisting: i0.ElementRef },
@@ -6538,7 +6583,7 @@
6538
6583
  ClrOption.decorators = [
6539
6584
  { type: i0.Component, args: [{
6540
6585
  selector: 'clr-option',
6541
- 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 ",
6542
6587
  providers: [UNIQUE_ID_PROVIDER],
6543
6588
  host: {
6544
6589
  '[class.clr-combobox-option]': 'true',
@@ -6850,7 +6895,10 @@
6850
6895
  return ClrInput;
6851
6896
  }(WrappedFormControl));
6852
6897
  ClrInput.decorators = [
6853
- { 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
+ },] }
6854
6902
  ];
6855
6903
  ClrInput.ctorParameters = function () { return [
6856
6904
  { type: i0.ViewContainerRef },
@@ -7286,7 +7334,9 @@
7286
7334
  return FocusTrapDirective;
7287
7335
  }());
7288
7336
  FocusTrapDirective.decorators = [
7289
- { type: i0.Directive, args: [{ selector: '[clrFocusTrap]' },] }
7337
+ { type: i0.Directive, args: [{
7338
+ selector: '[clrFocusTrap]',
7339
+ },] }
7290
7340
  ];
7291
7341
  FocusTrapDirective.ctorParameters = function () { return [
7292
7342
  { type: i0.ElementRef },
@@ -8308,7 +8358,10 @@
8308
8358
  return ClrCalendar;
8309
8359
  }());
8310
8360
  ClrCalendar.decorators = [
8311
- { 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
+ },] }
8312
8365
  ];
8313
8366
  ClrCalendar.ctorParameters = function () { return [
8314
8367
  { type: LocaleHelperService },
@@ -9538,7 +9591,7 @@
9538
9591
  ClrPasswordContainer.decorators = [
9539
9592
  { type: i0.Component, args: [{
9540
9593
  selector: 'clr-password-container',
9541
- 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 ",
9542
9595
  host: {
9543
9596
  '[class.clr-form-control]': 'true',
9544
9597
  '[class.clr-form-control-disabled]': 'control?.disabled',
@@ -9596,7 +9649,10 @@
9596
9649
  return ClrPassword;
9597
9650
  }(WrappedFormControl));
9598
9651
  ClrPassword.decorators = [
9599
- { 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
+ },] }
9600
9656
  ];
9601
9657
  ClrPassword.ctorParameters = function () { return [
9602
9658
  { type: i0.ViewContainerRef },
@@ -9674,7 +9730,9 @@
9674
9730
  return ClrRadio;
9675
9731
  }(WrappedFormControl));
9676
9732
  ClrRadio.decorators = [
9677
- { type: i0.Directive, args: [{ selector: '[clrRadio]' },] }
9733
+ { type: i0.Directive, args: [{
9734
+ selector: '[clrRadio]',
9735
+ },] }
9678
9736
  ];
9679
9737
  ClrRadio.ctorParameters = function () { return [
9680
9738
  { type: i0.ViewContainerRef },
@@ -9839,7 +9897,10 @@
9839
9897
  return ClrRange;
9840
9898
  }(WrappedFormControl));
9841
9899
  ClrRange.decorators = [
9842
- { 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
+ },] }
9843
9904
  ];
9844
9905
  ClrRange.ctorParameters = function () { return [
9845
9906
  { type: i0.ViewContainerRef },
@@ -9928,7 +9989,10 @@
9928
9989
  return ClrSelect;
9929
9990
  }(WrappedFormControl));
9930
9991
  ClrSelect.decorators = [
9931
- { 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
+ },] }
9932
9996
  ];
9933
9997
  ClrSelect.ctorParameters = function () { return [
9934
9998
  { type: i0.ViewContainerRef },
@@ -9989,7 +10053,10 @@
9989
10053
  return ClrTextarea;
9990
10054
  }(WrappedFormControl));
9991
10055
  ClrTextarea.decorators = [
9992
- { 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
+ },] }
9993
10060
  ];
9994
10061
  ClrTextarea.ctorParameters = function () { return [
9995
10062
  { type: i0.ViewContainerRef },
@@ -10127,7 +10194,7 @@
10127
10194
  ClrExpandableAnimation.decorators = [
10128
10195
  { type: i0.Component, args: [{
10129
10196
  selector: 'clr-expandable-animation',
10130
- template: " <ng-content></ng-content> ",
10197
+ template: "<ng-content></ng-content>",
10131
10198
  animations: [
10132
10199
  animations.trigger('expandAnimation', [
10133
10200
  animations.transition('true <=> false', [
@@ -10541,7 +10608,10 @@
10541
10608
  return ClrDragHandle;
10542
10609
  }());
10543
10610
  ClrDragHandle.decorators = [
10544
- { 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
+ },] }
10545
10615
  ];
10546
10616
  ClrDragHandle.ctorParameters = function () { return [
10547
10617
  { type: i0.ElementRef },
@@ -10761,7 +10831,9 @@
10761
10831
  return ClrIfDragged;
10762
10832
  }());
10763
10833
  ClrIfDragged.decorators = [
10764
- { type: i0.Directive, args: [{ selector: '[clrIfDragged]' },] }
10834
+ { type: i0.Directive, args: [{
10835
+ selector: '[clrIfDragged]',
10836
+ },] }
10765
10837
  ];
10766
10838
  ClrIfDragged.ctorParameters = function () { return [
10767
10839
  { type: i0.TemplateRef },
@@ -11322,7 +11394,9 @@
11322
11394
  return OutsideClick;
11323
11395
  }());
11324
11396
  OutsideClick.decorators = [
11325
- { type: i0.Directive, args: [{ selector: '[clrOutsideClick]' },] }
11397
+ { type: i0.Directive, args: [{
11398
+ selector: '[clrOutsideClick]',
11399
+ },] }
11326
11400
  ];
11327
11401
  OutsideClick.ctorParameters = function () { return [
11328
11402
  { type: i0.ElementRef },
@@ -12085,6 +12159,20 @@
12085
12159
  sub.unsubscribe();
12086
12160
  });
12087
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
+ });
12088
12176
  Object.defineProperty(DatagridNumericFilter.prototype, "customNumericFilter", {
12089
12177
  /**
12090
12178
  * Customizable filter logic based on high and low values
@@ -12201,7 +12289,7 @@
12201
12289
  { type: i0.Component, args: [{
12202
12290
  selector: 'clr-dg-numeric-filter',
12203
12291
  providers: [{ provide: CustomFilter, useExisting: DatagridNumericFilter }],
12204
- 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 "
12205
12293
  },] }
12206
12294
  ];
12207
12295
  DatagridNumericFilter.ctorParameters = function () { return [
@@ -12211,6 +12299,8 @@
12211
12299
  { type: ClrPopoverToggleService }
12212
12300
  ]; };
12213
12301
  DatagridNumericFilter.propDecorators = {
12302
+ maxPlaceholder: [{ type: i0.Input, args: ['clrFilterMaxPlaceholder',] }],
12303
+ minPlaceholder: [{ type: i0.Input, args: ['clrFilterMinPlaceholder',] }],
12214
12304
  customNumericFilter: [{ type: i0.Input, args: ['clrDgNumericFilter',] }],
12215
12305
  input: [{ type: i0.ViewChild, args: ['input_low',] }],
12216
12306
  filterContainer: [{ type: i0.ViewChild, args: [ClrDatagridFilter,] }],
@@ -12356,6 +12446,13 @@
12356
12446
  _this.filterValueChange = new i0.EventEmitter();
12357
12447
  return _this;
12358
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
+ });
12359
12456
  Object.defineProperty(DatagridStringFilter.prototype, "customStringFilter", {
12360
12457
  /**
12361
12458
  * Customizable filter logic based on a search text
@@ -12422,7 +12519,7 @@
12422
12519
  { type: i0.Component, args: [{
12423
12520
  selector: 'clr-dg-string-filter',
12424
12521
  providers: [{ provide: CustomFilter, useExisting: DatagridStringFilter }],
12425
- 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 "
12426
12523
  },] }
12427
12524
  ];
12428
12525
  DatagridStringFilter.ctorParameters = function () { return [
@@ -12432,6 +12529,7 @@
12432
12529
  { type: ClrPopoverToggleService }
12433
12530
  ]; };
12434
12531
  DatagridStringFilter.propDecorators = {
12532
+ placeholder: [{ type: i0.Input, args: ['clrFilterPlaceholder',] }],
12435
12533
  customStringFilter: [{ type: i0.Input, args: ['clrDgStringFilter',] }],
12436
12534
  input: [{ type: i0.ViewChild, args: ['input',] }],
12437
12535
  filterContainer: [{ type: i0.ViewChild, args: [ClrDatagridFilter,] }],
@@ -12478,7 +12576,9 @@
12478
12576
  return DatagridWillyWonka;
12479
12577
  }(WillyWonka));
12480
12578
  DatagridWillyWonka.decorators = [
12481
- { type: i0.Directive, args: [{ selector: 'clr-datagrid' },] }
12579
+ { type: i0.Directive, args: [{
12580
+ selector: 'clr-datagrid',
12581
+ },] }
12482
12582
  ];
12483
12583
 
12484
12584
  var ActionableOompaLoompa = /** @class */ (function (_super) {
@@ -12502,7 +12602,9 @@
12502
12602
  return ActionableOompaLoompa;
12503
12603
  }(OompaLoompa));
12504
12604
  ActionableOompaLoompa.decorators = [
12505
- { type: i0.Directive, args: [{ selector: 'clr-datagrid, clr-dg-row' },] }
12605
+ { type: i0.Directive, args: [{
12606
+ selector: 'clr-datagrid, clr-dg-row',
12607
+ },] }
12506
12608
  ];
12507
12609
  ActionableOompaLoompa.ctorParameters = function () { return [
12508
12610
  { type: i0.ChangeDetectorRef },
@@ -12640,7 +12742,9 @@
12640
12742
  return ExpandableOompaLoompa;
12641
12743
  }(OompaLoompa));
12642
12744
  ExpandableOompaLoompa.decorators = [
12643
- { type: i0.Directive, args: [{ selector: 'clr-datagrid, clr-dg-row' },] }
12745
+ { type: i0.Directive, args: [{
12746
+ selector: 'clr-datagrid, clr-dg-row',
12747
+ },] }
12644
12748
  ];
12645
12749
  ExpandableOompaLoompa.ctorParameters = function () { return [
12646
12750
  { type: i0.ChangeDetectorRef },
@@ -13105,6 +13209,27 @@
13105
13209
  enumerable: false,
13106
13210
  configurable: true
13107
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
+ });
13108
13233
  Object.defineProperty(ClrDatagridColumn.prototype, "updateFilterValue", {
13109
13234
  set: function (newValue) {
13110
13235
  if (this.filter) {
@@ -13171,7 +13296,7 @@
13171
13296
  ClrDatagridColumn.decorators = [
13172
13297
  { type: i0.Component, args: [{
13173
13298
  selector: 'clr-dg-column',
13174
- 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 ",
13175
13300
  providers: [ClrPopoverPositionService, ClrPopoverEventsService, ClrPopoverToggleService],
13176
13301
  host: {
13177
13302
  '[class.datagrid-column]': 'true',
@@ -13198,6 +13323,9 @@
13198
13323
  sortOrder: [{ type: i0.Input, args: ['clrDgSortOrder',] }],
13199
13324
  sortOrderChange: [{ type: i0.Output, args: ['clrDgSortOrderChange',] }],
13200
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',] }],
13201
13329
  updateFilterValue: [{ type: i0.Input, args: ['clrFilterValue',] }],
13202
13330
  filterValueChange: [{ type: i0.Output, args: ['clrFilterValueChange',] }]
13203
13331
  };
@@ -13757,7 +13885,7 @@
13757
13885
  ClrDatagridCell.decorators = [
13758
13886
  { type: i0.Component, args: [{
13759
13887
  selector: 'clr-dg-cell',
13760
- template: " <ng-content></ng-content> ",
13888
+ template: "<ng-content></ng-content>",
13761
13889
  host: {
13762
13890
  '[class.datagrid-cell]': 'true',
13763
13891
  '[class.datagrid-signpost-trigger]': 'signpost.length > 0',
@@ -13961,6 +14089,10 @@
13961
14089
  * Subscriptions to the other providers changes.
13962
14090
  */
13963
14091
  this.subscriptions = [];
14092
+ /**
14093
+ * Shift key state, for use in range selection.
14094
+ */
14095
+ this.shiftPressed = false;
13964
14096
  this.valueCollector = new rxjs.Subject();
13965
14097
  /**
13966
14098
  * The Observable that lets other classes subscribe to selection changes
@@ -14363,7 +14495,7 @@
14363
14495
 
14364
14496
  var nbRow = 0;
14365
14497
  var ClrDatagridRow = /** @class */ (function () {
14366
- 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) {
14367
14499
  var _this = this;
14368
14500
  this.selection = selection;
14369
14501
  this.rowActionService = rowActionService;
@@ -14375,6 +14507,8 @@
14375
14507
  this.renderer = renderer;
14376
14508
  this.el = el;
14377
14509
  this.commonStrings = commonStrings;
14510
+ this.items = items;
14511
+ this.document = document;
14378
14512
  /* reference to the enum so that template can access */
14379
14513
  this.SELECTION_TYPE = SelectionType;
14380
14514
  this.expandAnimationTrigger = false;
@@ -14405,6 +14539,24 @@
14405
14539
  }
14406
14540
  }));
14407
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
+ };
14408
14560
  Object.defineProperty(ClrDatagridRow.prototype, "selected", {
14409
14561
  /**
14410
14562
  * Indicates if the row is selected
@@ -14422,6 +14574,12 @@
14422
14574
  this._selected = value;
14423
14575
  }
14424
14576
  else {
14577
+ if (value && this.selection.selectionType === SelectionType.Multi) {
14578
+ this.rangeSelect();
14579
+ }
14580
+ else {
14581
+ this.selection.rangeStart = null;
14582
+ }
14425
14583
  this.selection.setSelected(this.item, value);
14426
14584
  }
14427
14585
  },
@@ -14525,6 +14683,30 @@
14525
14683
  _this.expandAnimationTrigger = !_this.expandAnimationTrigger;
14526
14684
  }));
14527
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
+ };
14528
14710
  ClrDatagridRow.prototype.ngOnDestroy = function () {
14529
14711
  this.subscriptions.forEach(function (sub) { return sub.unsubscribe(); });
14530
14712
  };
@@ -14544,7 +14726,7 @@
14544
14726
  ClrDatagridRow.decorators = [
14545
14727
  { type: i0.Component, args: [{
14546
14728
  selector: 'clr-dg-row',
14547
- 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",
14548
14730
  host: {
14549
14731
  '[class.datagrid-row]': 'true',
14550
14732
  '[class.datagrid-selected]': 'selected',
@@ -14568,7 +14750,9 @@
14568
14750
  { type: i0.ViewContainerRef },
14569
14751
  { type: i0.Renderer2 },
14570
14752
  { type: i0.ElementRef },
14571
- { type: ClrCommonStringsService }
14753
+ { type: ClrCommonStringsService },
14754
+ { type: Items },
14755
+ { type: undefined, decorators: [{ type: i0.Inject, args: [i1.DOCUMENT,] }] }
14572
14756
  ]; };
14573
14757
  ClrDatagridRow.propDecorators = {
14574
14758
  expandAnimation: [{ type: i0.ViewChild, args: [ClrExpandableAnimation,] }],
@@ -14984,7 +15168,7 @@
14984
15168
  * The full license information can be found in LICENSE in the root directory of this project.
14985
15169
  */
14986
15170
  var ClrDatagrid = /** @class */ (function () {
14987
- 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) {
14988
15172
  this.organizer = organizer;
14989
15173
  this.items = items;
14990
15174
  this.expandableRows = expandableRows;
@@ -14994,11 +15178,13 @@
14994
15178
  this.displayMode = displayMode;
14995
15179
  this.renderer = renderer;
14996
15180
  this.detailService = detailService;
15181
+ this.document = document;
14997
15182
  this.el = el;
14998
15183
  this.page = page;
14999
15184
  this.commonStrings = commonStrings;
15000
15185
  this.columnsService = columnsService;
15001
15186
  this.keyNavigation = keyNavigation;
15187
+ this.zone = zone;
15002
15188
  /* reference to the enum so that template can access */
15003
15189
  this.SELECTION_TYPE = SelectionType;
15004
15190
  /**
@@ -15209,6 +15395,19 @@
15209
15395
  });
15210
15396
  }
15211
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
+ });
15212
15411
  };
15213
15412
  ClrDatagrid.prototype.ngOnDestroy = function () {
15214
15413
  this._subscriptions.forEach(function (sub) { return sub.unsubscribe(); });
@@ -15257,11 +15456,13 @@
15257
15456
  { type: i0.Renderer2 },
15258
15457
  { type: DetailService },
15259
15458
  { type: String, decorators: [{ type: i0.Inject, args: [UNIQUE_ID,] }] },
15459
+ { type: undefined, decorators: [{ type: i0.Inject, args: [i1.DOCUMENT,] }] },
15260
15460
  { type: i0.ElementRef },
15261
15461
  { type: Page },
15262
15462
  { type: ClrCommonStringsService },
15263
15463
  { type: ColumnsService },
15264
- { type: KeyNavigationGridController }
15464
+ { type: KeyNavigationGridController },
15465
+ { type: i0.NgZone }
15265
15466
  ]; };
15266
15467
  ClrDatagrid.propDecorators = {
15267
15468
  loading: [{ type: i0.Input, args: ['clrDgLoading',] }],
@@ -15301,7 +15502,7 @@
15301
15502
  ClrDatagridActionBar.decorators = [
15302
15503
  { type: i0.Component, args: [{
15303
15504
  selector: 'clr-dg-action-bar',
15304
- template: " <ng-content></ng-content> ",
15505
+ template: "<ng-content></ng-content>",
15305
15506
  host: { '[class.datagrid-action-bar]': 'true' }
15306
15507
  },] }
15307
15508
  ];
@@ -15882,7 +16083,9 @@
15882
16083
  return DatagridDetailRegisterer;
15883
16084
  }());
15884
16085
  DatagridDetailRegisterer.decorators = [
15885
- { type: i0.Directive, args: [{ selector: '[clrIfExpanded]' },] }
16086
+ { type: i0.Directive, args: [{
16087
+ selector: '[clrIfExpanded]',
16088
+ },] }
15886
16089
  ];
15887
16090
  DatagridDetailRegisterer.ctorParameters = function () { return [
15888
16091
  { type: ExpandableRowsCount, decorators: [{ type: i0.Optional }] }
@@ -16032,7 +16235,9 @@
16032
16235
  return ClrDatagridHideableColumn;
16033
16236
  }());
16034
16237
  ClrDatagridHideableColumn.decorators = [
16035
- { type: i0.Directive, args: [{ selector: '[clrDgHideableColumn]' },] }
16238
+ { type: i0.Directive, args: [{
16239
+ selector: '[clrDgHideableColumn]',
16240
+ },] }
16036
16241
  ];
16037
16242
  ClrDatagridHideableColumn.ctorParameters = function () { return [
16038
16243
  { type: i0.TemplateRef },
@@ -16539,7 +16744,9 @@
16539
16744
  return DatagridCellRenderer;
16540
16745
  }());
16541
16746
  DatagridCellRenderer.decorators = [
16542
- { type: i0.Directive, args: [{ selector: 'clr-dg-cell' },] }
16747
+ { type: i0.Directive, args: [{
16748
+ selector: 'clr-dg-cell',
16749
+ },] }
16543
16750
  ];
16544
16751
  DatagridCellRenderer.ctorParameters = function () { return [
16545
16752
  { type: i0.ElementRef },
@@ -16658,7 +16865,10 @@
16658
16865
  return DatagridHeaderRenderer;
16659
16866
  }());
16660
16867
  DatagridHeaderRenderer.decorators = [
16661
- { 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
+ },] }
16662
16872
  ];
16663
16873
  DatagridHeaderRenderer.ctorParameters = function () { return [
16664
16874
  { type: i0.ElementRef },
@@ -16770,7 +16980,9 @@
16770
16980
  return DatagridRowRenderer;
16771
16981
  }());
16772
16982
  DatagridRowRenderer.decorators = [
16773
- { 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
+ },] }
16774
16986
  ];
16775
16987
  DatagridRowRenderer.ctorParameters = function () { return [
16776
16988
  { type: ColumnsService }
@@ -17058,7 +17270,9 @@
17058
17270
  return ClrStackViewCustomTags;
17059
17271
  }());
17060
17272
  ClrStackViewCustomTags.decorators = [
17061
- { type: i0.Directive, args: [{ selector: 'clr-stack-content' },] }
17273
+ { type: i0.Directive, args: [{
17274
+ selector: 'clr-stack-content',
17275
+ },] }
17062
17276
  ];
17063
17277
  var ClrStackViewLabel = /** @class */ (function () {
17064
17278
  function ClrStackViewLabel(uniqueId) {
@@ -17801,7 +18015,9 @@
17801
18015
  return ClrRecursiveForOf;
17802
18016
  }());
17803
18017
  ClrRecursiveForOf.decorators = [
17804
- { type: i0.Directive, args: [{ selector: '[clrRecursiveFor][clrRecursiveForOf]' },] }
18018
+ { type: i0.Directive, args: [{
18019
+ selector: '[clrRecursiveFor][clrRecursiveForOf]',
18020
+ },] }
17805
18021
  ];
17806
18022
  ClrRecursiveForOf.ctorParameters = function () { return [
17807
18023
  { type: i0.TemplateRef },
@@ -18210,7 +18426,7 @@
18210
18426
  ClrTreeNode.decorators = [
18211
18427
  { type: i0.Component, args: [{
18212
18428
  selector: 'clr-tree-node',
18213
- 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",
18214
18430
  providers: [
18215
18431
  UNIQUE_ID_PROVIDER,
18216
18432
  TREE_FEATURES_PROVIDER,
@@ -19340,7 +19556,7 @@
19340
19556
  ClrDropdownMenu.decorators = [
19341
19557
  { type: i0.Component, args: [{
19342
19558
  selector: 'clr-dropdown-menu',
19343
- template: " <ng-content></ng-content> ",
19559
+ template: "<ng-content></ng-content>",
19344
19560
  host: {
19345
19561
  '[class.dropdown-menu]': 'true',
19346
19562
  '[attr.role]': '"menu"',
@@ -19861,7 +20077,7 @@
19861
20077
  ClrAlerts.decorators = [
19862
20078
  { type: i0.Component, args: [{
19863
20079
  selector: 'clr-alerts',
19864
- 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",
19865
20081
  providers: [MultiAlertService],
19866
20082
  host: {
19867
20083
  '[class.alerts]': 'true',
@@ -20158,7 +20374,10 @@
20158
20374
  return ClrMainContainer;
20159
20375
  }());
20160
20376
  ClrMainContainer.decorators = [
20161
- { 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
+ },] }
20162
20381
  ];
20163
20382
  ClrMainContainer.ctorParameters = function () { return [
20164
20383
  { type: i0.ElementRef },
@@ -20192,7 +20411,9 @@
20192
20411
  return MainContainerWillyWonka;
20193
20412
  }(WillyWonka));
20194
20413
  MainContainerWillyWonka.decorators = [
20195
- { type: i0.Directive, args: [{ selector: 'clr-main-container' },] }
20414
+ { type: i0.Directive, args: [{
20415
+ selector: 'clr-main-container',
20416
+ },] }
20196
20417
  ];
20197
20418
 
20198
20419
  var NavDetectionOompaLoompa = /** @class */ (function (_super) {
@@ -20218,7 +20439,9 @@
20218
20439
  return NavDetectionOompaLoompa;
20219
20440
  }(OompaLoompa));
20220
20441
  NavDetectionOompaLoompa.decorators = [
20221
- { type: i0.Directive, args: [{ selector: 'clr-header' },] }
20442
+ { type: i0.Directive, args: [{
20443
+ selector: 'clr-header',
20444
+ },] }
20222
20445
  ];
20223
20446
  NavDetectionOompaLoompa.ctorParameters = function () { return [
20224
20447
  { type: i0.ChangeDetectorRef },
@@ -20955,7 +21178,9 @@
20955
21178
  return ClrNavLevel;
20956
21179
  }(FocusTrap));
20957
21180
  ClrNavLevel.decorators = [
20958
- { type: i0.Directive, args: [{ selector: '[clr-nav-level]' },] }
21181
+ { type: i0.Directive, args: [{
21182
+ selector: '[clr-nav-level]',
21183
+ },] }
20959
21184
  ];
20960
21185
  ClrNavLevel.ctorParameters = function () { return [
20961
21186
  { type: undefined, decorators: [{ type: i0.Inject, args: [i0.PLATFORM_ID,] }] },
@@ -21048,7 +21273,9 @@
21048
21273
  return TabsWillyWonka;
21049
21274
  }(WillyWonka));
21050
21275
  TabsWillyWonka.decorators = [
21051
- { type: i0.Directive, args: [{ selector: 'clr-tabs' },] }
21276
+ { type: i0.Directive, args: [{
21277
+ selector: 'clr-tabs',
21278
+ },] }
21052
21279
  ];
21053
21280
 
21054
21281
  var ActiveOompaLoompa = /** @class */ (function (_super) {
@@ -21073,7 +21300,9 @@
21073
21300
  return ActiveOompaLoompa;
21074
21301
  }(OompaLoompa));
21075
21302
  ActiveOompaLoompa.decorators = [
21076
- { type: i0.Directive, args: [{ selector: '[clrTabLink], clr-tab-content' },] }
21303
+ { type: i0.Directive, args: [{
21304
+ selector: '[clrTabLink], clr-tab-content',
21305
+ },] }
21077
21306
  ];
21078
21307
  ActiveOompaLoompa.ctorParameters = function () { return [
21079
21308
  { type: i0.ChangeDetectorRef },
@@ -21373,7 +21602,7 @@
21373
21602
  ClrTab.decorators = [
21374
21603
  { type: i0.Component, args: [{
21375
21604
  selector: 'clr-tab',
21376
- template: " <ng-content></ng-content> ",
21605
+ template: "<ng-content></ng-content>",
21377
21606
  providers: [IF_ACTIVE_ID_PROVIDER, AriaService]
21378
21607
  },] }
21379
21608
  ];
@@ -21400,7 +21629,7 @@
21400
21629
  ClrTabOverflowContent.decorators = [
21401
21630
  { type: i0.Component, args: [{
21402
21631
  selector: 'clr-tab-overflow-content',
21403
- template: " <ng-content></ng-content> ",
21632
+ template: "<ng-content></ng-content>",
21404
21633
  host: {
21405
21634
  '[class.dropdown-menu]': 'true',
21406
21635
  }
@@ -21593,7 +21822,7 @@
21593
21822
  ClrTabs.decorators = [
21594
21823
  { type: i0.Component, args: [{
21595
21824
  selector: 'clr-tabs',
21596
- 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 ",
21597
21826
  providers: [IfActiveService, ClrPopoverToggleService, TabsService, TABS_ID_PROVIDER]
21598
21827
  },] }
21599
21828
  ];
@@ -22017,7 +22246,7 @@
22017
22246
  ClrVerticalNavGroup.decorators = [
22018
22247
  { type: i0.Component, args: [{
22019
22248
  selector: 'clr-vertical-nav-group',
22020
- 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",
22021
22250
  providers: [IfExpandService, VerticalNavGroupService],
22022
22251
  animations: [
22023
22252
  animations.trigger('clrExpand', [
@@ -22056,7 +22285,7 @@
22056
22285
  ClrVerticalNavGroupChildren.decorators = [
22057
22286
  { type: i0.Component, args: [{
22058
22287
  selector: 'clr-vertical-nav-group-children',
22059
- template: " <ng-content></ng-content> "
22288
+ template: "<ng-content></ng-content>"
22060
22289
  },] }
22061
22290
  ];
22062
22291
 
@@ -22076,7 +22305,10 @@
22076
22305
  return ClrVerticalNavIcon;
22077
22306
  }());
22078
22307
  ClrVerticalNavIcon.decorators = [
22079
- { type: i0.Directive, args: [{ selector: '[clrVerticalNavIcon]', host: { class: 'nav-icon' } },] }
22308
+ { type: i0.Directive, args: [{
22309
+ selector: '[clrVerticalNavIcon]',
22310
+ host: { class: 'nav-icon' },
22311
+ },] }
22080
22312
  ];
22081
22313
  ClrVerticalNavIcon.ctorParameters = function () { return [
22082
22314
  { type: VerticalNavIconService }
@@ -22334,7 +22566,9 @@
22334
22566
  return ClrModalBody;
22335
22567
  }());
22336
22568
  ClrModalBody.decorators = [
22337
- { type: i0.Directive, args: [{ selector: '.modal-body' },] }
22569
+ { type: i0.Directive, args: [{
22570
+ selector: '.modal-body',
22571
+ },] }
22338
22572
  ];
22339
22573
  ClrModalBody.ctorParameters = function () { return [
22340
22574
  { type: i0.Renderer2 },
@@ -22568,7 +22802,7 @@
22568
22802
  ClrTooltip.decorators = [
22569
22803
  { type: i0.Component, args: [{
22570
22804
  selector: 'clr-tooltip',
22571
- template: " <ng-content></ng-content> ",
22805
+ template: "<ng-content></ng-content>",
22572
22806
  host: {
22573
22807
  '[class.tooltip]': 'true',
22574
22808
  },
@@ -22689,7 +22923,7 @@
22689
22923
  ClrTooltipContent.decorators = [
22690
22924
  { type: i0.Component, args: [{
22691
22925
  selector: 'clr-tooltip-content',
22692
- template: " <ng-content></ng-content> ",
22926
+ template: "<ng-content></ng-content>",
22693
22927
  host: {
22694
22928
  '[class.tooltip-content]': 'true',
22695
22929
  '[style.opacity]': '1',
@@ -23105,7 +23339,7 @@
23105
23339
  ClrTimeline.decorators = [
23106
23340
  { type: i0.Component, args: [{
23107
23341
  selector: 'clr-timeline',
23108
- template: " <ng-content></ng-content> ",
23342
+ template: "<ng-content></ng-content>",
23109
23343
  host: { '[class.clr-timeline]': 'true' },
23110
23344
  providers: [TimelineIconAttributeService]
23111
23345
  },] }
@@ -23138,7 +23372,7 @@
23138
23372
  ClrTimelineStepTitle.decorators = [
23139
23373
  { type: i0.Component, args: [{
23140
23374
  selector: 'clr-timeline-step-title',
23141
- template: " <ng-content></ng-content> ",
23375
+ template: "<ng-content></ng-content>",
23142
23376
  host: { '[class.clr-timeline-step-title]': 'true', '[attr.aria-hidden]': 'true' }
23143
23377
  },] }
23144
23378
  ];
@@ -23199,7 +23433,7 @@
23199
23433
  ClrTimelineStep.decorators = [
23200
23434
  { type: i0.Component, args: [{
23201
23435
  selector: 'clr-timeline-step',
23202
- 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 ",
23203
23437
  host: { '[class.clr-timeline-step]': 'true' }
23204
23438
  },] }
23205
23439
  ];
@@ -23225,7 +23459,7 @@
23225
23459
  ClrTimelineStepDescription.decorators = [
23226
23460
  { type: i0.Component, args: [{
23227
23461
  selector: 'clr-timeline-step-description',
23228
- template: " <ng-content></ng-content> ",
23462
+ template: "<ng-content></ng-content>",
23229
23463
  host: { '[class.clr-timeline-step-description]': 'true' }
23230
23464
  },] }
23231
23465
  ];
@@ -23243,7 +23477,7 @@
23243
23477
  ClrTimelineStepHeader.decorators = [
23244
23478
  { type: i0.Component, args: [{
23245
23479
  selector: 'clr-timeline-step-header',
23246
- template: " <ng-content></ng-content> ",
23480
+ template: "<ng-content></ng-content>",
23247
23481
  host: { '[class.clr-timeline-step-header]': 'true' }
23248
23482
  },] }
23249
23483
  ];
@@ -24456,7 +24690,9 @@
24456
24690
  return ClrWizardPageButtons;
24457
24691
  }());
24458
24692
  ClrWizardPageButtons.decorators = [
24459
- { type: i0.Directive, args: [{ selector: '[clrPageButtons]' },] }
24693
+ { type: i0.Directive, args: [{
24694
+ selector: '[clrPageButtons]',
24695
+ },] }
24460
24696
  ];
24461
24697
  ClrWizardPageButtons.ctorParameters = function () { return [
24462
24698
  { type: i0.TemplateRef }
@@ -24474,7 +24710,9 @@
24474
24710
  return ClrWizardPageHeaderActions;
24475
24711
  }());
24476
24712
  ClrWizardPageHeaderActions.decorators = [
24477
- { type: i0.Directive, args: [{ selector: '[clrPageHeaderActions]' },] }
24713
+ { type: i0.Directive, args: [{
24714
+ selector: '[clrPageHeaderActions]',
24715
+ },] }
24478
24716
  ];
24479
24717
  ClrWizardPageHeaderActions.ctorParameters = function () { return [
24480
24718
  { type: i0.TemplateRef }
@@ -24492,7 +24730,9 @@
24492
24730
  return ClrWizardPageNavTitle;
24493
24731
  }());
24494
24732
  ClrWizardPageNavTitle.decorators = [
24495
- { type: i0.Directive, args: [{ selector: '[clrPageNavTitle]' },] }
24733
+ { type: i0.Directive, args: [{
24734
+ selector: '[clrPageNavTitle]',
24735
+ },] }
24496
24736
  ];
24497
24737
  ClrWizardPageNavTitle.ctorParameters = function () { return [
24498
24738
  { type: i0.TemplateRef }
@@ -24510,7 +24750,9 @@
24510
24750
  return ClrWizardPageTitle;
24511
24751
  }());
24512
24752
  ClrWizardPageTitle.decorators = [
24513
- { type: i0.Directive, args: [{ selector: '[clrPageTitle]' },] }
24753
+ { type: i0.Directive, args: [{
24754
+ selector: '[clrPageTitle]',
24755
+ },] }
24514
24756
  ];
24515
24757
  ClrWizardPageTitle.ctorParameters = function () { return [
24516
24758
  { type: i0.TemplateRef }
@@ -25903,7 +26145,9 @@
25903
26145
  return ClrWizardCustomTags;
25904
26146
  }());
25905
26147
  ClrWizardCustomTags.decorators = [
25906
- { 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
+ },] }
25907
26151
  ];
25908
26152
 
25909
26153
  /*