@clr/angular 15.0.0-beta.1 → 15.0.0-beta.3

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 (119) hide show
  1. package/clarity.api.md +158 -489
  2. package/clr-angular.module.d.ts +12 -15
  3. package/data/datagrid/datagrid-column.d.ts +1 -22
  4. package/data/datagrid/datagrid-pagination.d.ts +2 -2
  5. package/data/datagrid/datagrid.module.d.ts +13 -13
  6. package/data/stack-view/index.d.ts +0 -2
  7. package/data/stack-view/stack-block.d.ts +1 -17
  8. package/data/stack-view/stack-view.d.ts +1 -11
  9. package/data/stack-view/stack-view.module.d.ts +5 -7
  10. package/data/tree-view/tree-node.d.ts +6 -6
  11. package/esm2020/accordion/accordion-panel.mjs +3 -3
  12. package/esm2020/accordion/stepper/stepper-panel.mjs +3 -3
  13. package/esm2020/clr-angular.module.mjs +1 -13
  14. package/esm2020/data/datagrid/datagrid-action-overflow.mjs +10 -10
  15. package/esm2020/data/datagrid/datagrid-column-separator.mjs +16 -15
  16. package/esm2020/data/datagrid/datagrid-column-toggle.mjs +18 -20
  17. package/esm2020/data/datagrid/datagrid-column.mjs +2 -48
  18. package/esm2020/data/datagrid/datagrid-detail.mjs +8 -6
  19. package/esm2020/data/datagrid/datagrid-filter.mjs +10 -10
  20. package/esm2020/data/datagrid/datagrid-pagination.mjs +10 -5
  21. package/esm2020/data/datagrid/datagrid-row-detail.mjs +7 -8
  22. package/esm2020/data/datagrid/datagrid-row.mjs +3 -3
  23. package/esm2020/data/datagrid/datagrid.module.mjs +9 -9
  24. package/esm2020/data/stack-view/index.mjs +1 -3
  25. package/esm2020/data/stack-view/stack-block.mjs +2 -8
  26. package/esm2020/data/stack-view/stack-header.mjs +2 -23
  27. package/esm2020/data/stack-view/stack-view.mjs +4 -28
  28. package/esm2020/data/stack-view/stack-view.module.mjs +3 -23
  29. package/esm2020/data/tree-view/tree-node.mjs +30 -26
  30. package/esm2020/forms/datepicker/date-container.mjs +9 -9
  31. package/esm2020/forms/datepicker/datepicker.module.mjs +5 -5
  32. package/esm2020/layout/nav/nav-level.mjs +23 -10
  33. package/esm2020/layout/vertical-nav/vertical-nav-group.mjs +3 -7
  34. package/esm2020/modal/modal.mjs +8 -19
  35. package/esm2020/modal/modal.module.mjs +5 -5
  36. package/esm2020/popover/dropdown/dropdown-item.mjs +30 -33
  37. package/esm2020/utils/cdk/cdk-drag.module.mjs +37 -0
  38. package/esm2020/utils/cdk/cdk-trap-focus.module.mjs +37 -0
  39. package/esm2020/utils/i18n/common-strings.default.mjs +2 -3
  40. package/esm2020/utils/i18n/common-strings.interface.mjs +1 -1
  41. package/esm2020/utils/index.mjs +1 -5
  42. package/esm2020/wizard/wizard.mjs +6 -30
  43. package/fesm2015/clr-angular.mjs +259 -1990
  44. package/fesm2015/clr-angular.mjs.map +1 -1
  45. package/fesm2020/clr-angular.mjs +306 -2033
  46. package/fesm2020/clr-angular.mjs.map +1 -1
  47. package/forms/datepicker/datepicker.module.d.ts +6 -6
  48. package/layout/nav/nav-level.d.ts +12 -4
  49. package/layout/vertical-nav/vertical-nav-group.d.ts +1 -2
  50. package/modal/modal.d.ts +1 -4
  51. package/modal/modal.module.d.ts +3 -3
  52. package/package.json +2 -1
  53. package/popover/dropdown/dropdown-item.d.ts +7 -13
  54. package/src/utils/popover/README.md +1 -1
  55. package/utils/cdk/cdk-drag.module.d.ts +17 -0
  56. package/utils/cdk/cdk-trap-focus.module.d.ts +17 -0
  57. package/utils/i18n/common-strings.interface.d.ts +0 -17
  58. package/utils/index.d.ts +0 -4
  59. package/wizard/wizard.d.ts +2 -13
  60. package/data/stack-view/stack-control.d.ts +0 -16
  61. package/data/stack-view/stack-input.d.ts +0 -10
  62. package/data/stack-view/stack-select.d.ts +0 -9
  63. package/esm2020/data/stack-view/stack-control.mjs +0 -34
  64. package/esm2020/data/stack-view/stack-input.mjs +0 -42
  65. package/esm2020/data/stack-view/stack-select.mjs +0 -48
  66. package/esm2020/utils/a11y/aria-live.service.mjs +0 -163
  67. package/esm2020/utils/a11y/index.mjs +0 -7
  68. package/esm2020/utils/drag-and-drop/drag-and-drop.module.mjs +0 -42
  69. package/esm2020/utils/drag-and-drop/drag-event.mjs +0 -16
  70. package/esm2020/utils/drag-and-drop/drag-handle.mjs +0 -35
  71. package/esm2020/utils/drag-and-drop/draggable/draggable.mjs +0 -135
  72. package/esm2020/utils/drag-and-drop/draggable-ghost.mjs +0 -124
  73. package/esm2020/utils/drag-and-drop/droppable/droppable.mjs +0 -222
  74. package/esm2020/utils/drag-and-drop/if-dragged.mjs +0 -47
  75. package/esm2020/utils/drag-and-drop/index.mjs +0 -14
  76. package/esm2020/utils/drag-and-drop/interfaces/drag-event.interface.mjs +0 -15
  77. package/esm2020/utils/drag-and-drop/interfaces/drop-tolerance.interface.mjs +0 -7
  78. package/esm2020/utils/drag-and-drop/providers/drag-and-drop-event-bus.service.mjs +0 -54
  79. package/esm2020/utils/drag-and-drop/providers/drag-event-listener.service.mjs +0 -179
  80. package/esm2020/utils/drag-and-drop/providers/drag-handle-registrar.service.mjs +0 -60
  81. package/esm2020/utils/drag-and-drop/providers/draggable-snapshot.service.mjs +0 -38
  82. package/esm2020/utils/drag-and-drop/providers/global-drag-mode.service.mjs +0 -26
  83. package/esm2020/utils/focus-trap/focus-trap-config.interface.mjs +0 -7
  84. package/esm2020/utils/focus-trap/focus-trap-tracker.service.mjs +0 -32
  85. package/esm2020/utils/focus-trap/focus-trap.directive.mjs +0 -158
  86. package/esm2020/utils/focus-trap/focus-trap.mjs +0 -141
  87. package/esm2020/utils/focus-trap/focus-trap.module.mjs +0 -24
  88. package/esm2020/utils/focus-trap/index.mjs +0 -9
  89. package/esm2020/utils/for-type-ahead/for-type-ahead.mjs +0 -54
  90. package/esm2020/utils/for-type-ahead/for-type-ahead.module.mjs +0 -23
  91. package/esm2020/utils/for-type-ahead/for-type-ahead.service.mjs +0 -29
  92. package/esm2020/utils/for-type-ahead/index.mjs +0 -8
  93. package/utils/a11y/aria-live.service.d.ts +0 -93
  94. package/utils/a11y/index.d.ts +0 -1
  95. package/utils/drag-and-drop/drag-and-drop.module.d.ts +0 -14
  96. package/utils/drag-and-drop/drag-event.d.ts +0 -8
  97. package/utils/drag-and-drop/drag-handle.d.ts +0 -11
  98. package/utils/drag-and-drop/draggable/draggable.d.ts +0 -36
  99. package/utils/drag-and-drop/draggable-ghost.d.ts +0 -30
  100. package/utils/drag-and-drop/droppable/droppable.d.ts +0 -42
  101. package/utils/drag-and-drop/if-dragged.d.ts +0 -13
  102. package/utils/drag-and-drop/index.d.ts +0 -8
  103. package/utils/drag-and-drop/interfaces/drag-event.interface.d.ts +0 -22
  104. package/utils/drag-and-drop/interfaces/drop-tolerance.interface.d.ts +0 -6
  105. package/utils/drag-and-drop/providers/drag-and-drop-event-bus.service.d.ts +0 -16
  106. package/utils/drag-and-drop/providers/drag-event-listener.service.d.ts +0 -39
  107. package/utils/drag-and-drop/providers/drag-handle-registrar.service.d.ts +0 -18
  108. package/utils/drag-and-drop/providers/draggable-snapshot.service.d.ts +0 -16
  109. package/utils/drag-and-drop/providers/global-drag-mode.service.d.ts +0 -10
  110. package/utils/focus-trap/focus-trap-config.interface.d.ts +0 -3
  111. package/utils/focus-trap/focus-trap-tracker.service.d.ts +0 -12
  112. package/utils/focus-trap/focus-trap.d.ts +0 -29
  113. package/utils/focus-trap/focus-trap.directive.d.ts +0 -38
  114. package/utils/focus-trap/focus-trap.module.d.ts +0 -10
  115. package/utils/focus-trap/index.d.ts +0 -3
  116. package/utils/for-type-ahead/for-type-ahead.d.ts +0 -15
  117. package/utils/for-type-ahead/for-type-ahead.module.d.ts +0 -8
  118. package/utils/for-type-ahead/for-type-ahead.service.d.ts +0 -11
  119. package/utils/for-type-ahead/index.d.ts +0 -2
@@ -9,8 +9,9 @@ import { Subject, BehaviorSubject, Observable, fromEvent, isObservable, of, Repl
9
9
  import { trigger, transition, style, animate, keyframes, state } from '@angular/animations';
10
10
  import * as i1 from '@angular/forms';
11
11
  import { FormControl, FormGroup, FormsModule, NG_VALIDATORS, SelectMultipleControlValueAccessor } from '@angular/forms';
12
+ import { CdkTrapFocus } from '@angular/cdk/a11y';
13
+ import { CdkDrag } from '@angular/cdk/drag-drop';
12
14
  import * as i1$1 from '@angular/router';
13
- import { FocusTrapTrackerService, createId, isFocusable, isHTMLElement } from '@cds/core/internal';
14
15
  import '@cds/core/internal-components/close-button/register.js';
15
16
  import '@cds/core/icon/register';
16
17
 
@@ -279,7 +280,7 @@ const commonStringsDefault = {
279
280
  warning: 'Warning',
280
281
  danger: 'Error',
281
282
  rowActions: 'Available actions',
282
- pickColumns: 'Show or hide columns',
283
+ pickColumns: 'Manage Columns',
283
284
  showColumns: 'Show Columns',
284
285
  sortColumn: 'Sort Column',
285
286
  firstPage: 'First Page',
@@ -332,7 +333,6 @@ const commonStringsDefault = {
332
333
  responsiveNavOverflowOpen: 'Navigation overflow menu',
333
334
  responsiveNavOverflowClose: 'Navigation overflow menu',
334
335
  //Vertical Nav
335
- verticalNavGroupToggle: 'Toggle vertical navigation group',
336
336
  verticalNavToggle: 'Toggle vertical navigation',
337
337
  // Timeline steps
338
338
  timelineStepNotStarted: 'Not started',
@@ -596,10 +596,10 @@ class ClrAccordionPanel {
596
596
  }
597
597
  }
598
598
  ClrAccordionPanel.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.0.2", ngImport: i0, type: ClrAccordionPanel, deps: [{ token: ClrCommonStringsService }, { token: AccordionService }, { token: IfExpandService }], target: i0.ɵɵFactoryTarget.Component });
599
- ClrAccordionPanel.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.0.2", type: ClrAccordionPanel, selector: "clr-accordion-panel", inputs: { disabled: ["clrAccordionPanelDisabled", "disabled"], panelOpen: ["clrAccordionPanelOpen", "panelOpen"] }, outputs: { panelOpenChange: "clrAccordionPanelOpenChange" }, host: { properties: { "class.clr-accordion-panel": "true" } }, providers: [IfExpandService], queries: [{ propertyName: "accordionDescription", predicate: ClrAccordionDescription }], usesOnChanges: true, ngImport: i0, template: "<ng-container *ngIf=\"panel | async; let panel\">\n <div *ngIf=\"panel.status !== AccordionStatus.Inactive\" aria-live=\"assertive\" class=\"clr-sr-only\">\n <ng-container *ngIf=\"panel.status === AccordionStatus.Error\">{{commonStrings.keys.danger}}</ng-container>\n </div>\n\n <div [ngClass]=\"getPanelStateClasses(panel)\">\n <div class=\"clr-accordion-header\">\n <button\n type=\"button\"\n class=\"clr-accordion-header-button\"\n (click)=\"togglePanel()\"\n [id]=\"getAccordionHeaderId(panel.templateId)\"\n [disabled]=\"isAccordion && panel.disabled\"\n [attr.aria-disabled]=\"!isAccordion && panel.disabled\"\n [attr.aria-controls]=\"getAccordionContentId(panel.templateId)\"\n [attr.aria-expanded]=\"panel.open\"\n [class.clr-accordion-header-has-description]=\"(accordionDescription.changes | async)?.length || accordionDescription.length\"\n #headerButton\n >\n <span class=\"clr-sr-only\">\n <ng-container *ngIf=\"panel.status === AccordionStatus.Error\">{{commonStrings.keys.danger}}</ng-container>\n <ng-container *ngIf=\"panel.status === AccordionStatus.Complete\">{{commonStrings.keys.success}}</ng-container>\n </span>\n <span class=\"clr-accordion-status\">\n <cds-icon shape=\"angle\" direction=\"right\" class=\"clr-accordion-angle\"></cds-icon>\n <span class=\"clr-accordion-number\"></span>\n <cds-icon status=\"danger\" shape=\"exclamation-circle\" class=\"clr-accordion-error-icon\"></cds-icon>\n <cds-icon status=\"success\" shape=\"check-circle\" class=\"clr-accordion-complete-icon\"></cds-icon>\n </span>\n <ng-content select=\"clr-accordion-title, clr-step-title\"></ng-content>\n <ng-content select=\"clr-accordion-description, clr-step-description\"></ng-content>\n </button>\n </div>\n <div\n @skipInitialRender\n role=\"region\"\n [id]=\"getAccordionContentId(panel.templateId)\"\n [attr.aria-hidden]=\"!panel.open\"\n [attr.aria-labelledby]=\"getAccordionHeaderId(panel.templateId)\"\n >\n <div\n *ngIf=\"panel.open\"\n @toggle\n (@toggle.done)=\"collapsePanelOnAnimationDone(panel)\"\n class=\"clr-accordion-content\"\n >\n <div class=\"clr-accordion-inner-content\">\n <ng-content></ng-content>\n </div>\n </div>\n </div>\n </div>\n</ng-container>\n", dependencies: [{ kind: "directive", type: i5.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: CdsIconCustomTag, selector: "cds-icon" }, { kind: "pipe", type: i5.AsyncPipe, name: "async" }], animations: panelAnimation, changeDetection: i0.ChangeDetectionStrategy.OnPush });
599
+ ClrAccordionPanel.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.0.2", type: ClrAccordionPanel, selector: "clr-accordion-panel", inputs: { disabled: ["clrAccordionPanelDisabled", "disabled"], panelOpen: ["clrAccordionPanelOpen", "panelOpen"] }, outputs: { panelOpenChange: "clrAccordionPanelOpenChange" }, host: { properties: { "class.clr-accordion-panel": "true" } }, providers: [IfExpandService], queries: [{ propertyName: "accordionDescription", predicate: ClrAccordionDescription }], usesOnChanges: true, ngImport: i0, template: "<ng-container *ngIf=\"panel | async; let panel\">\n <div [ngClass]=\"getPanelStateClasses(panel)\">\n <div class=\"clr-accordion-header\">\n <button\n type=\"button\"\n class=\"clr-accordion-header-button\"\n (click)=\"togglePanel()\"\n [id]=\"getAccordionHeaderId(panel.templateId)\"\n [disabled]=\"isAccordion && panel.disabled\"\n [attr.aria-disabled]=\"!isAccordion && panel.disabled\"\n [attr.aria-controls]=\"getAccordionContentId(panel.templateId)\"\n [attr.aria-expanded]=\"panel.open\"\n [class.clr-accordion-header-has-description]=\"(accordionDescription.changes | async)?.length || accordionDescription.length\"\n #headerButton\n >\n <span class=\"clr-sr-only\">\n <ng-container *ngIf=\"panel.status === AccordionStatus.Error\">{{commonStrings.keys.danger}}</ng-container>\n <ng-container *ngIf=\"panel.status === AccordionStatus.Complete\">{{commonStrings.keys.success}}</ng-container>\n </span>\n <span class=\"clr-accordion-status\">\n <cds-icon shape=\"angle\" direction=\"right\" class=\"clr-accordion-angle\"></cds-icon>\n <span class=\"clr-accordion-number\"></span>\n <cds-icon status=\"danger\" shape=\"exclamation-circle\" class=\"clr-accordion-error-icon\"></cds-icon>\n <cds-icon status=\"success\" shape=\"check-circle\" class=\"clr-accordion-complete-icon\"></cds-icon>\n </span>\n <ng-content select=\"clr-accordion-title, clr-step-title\"></ng-content>\n <ng-content select=\"clr-accordion-description, clr-step-description\"></ng-content>\n </button>\n </div>\n <div\n @skipInitialRender\n role=\"region\"\n [id]=\"getAccordionContentId(panel.templateId)\"\n [attr.aria-hidden]=\"!panel.open\"\n [attr.aria-labelledby]=\"getAccordionHeaderId(panel.templateId)\"\n >\n <div\n *ngIf=\"panel.open\"\n @toggle\n (@toggle.done)=\"collapsePanelOnAnimationDone(panel)\"\n class=\"clr-accordion-content\"\n >\n <div class=\"clr-accordion-inner-content\">\n <ng-content></ng-content>\n </div>\n </div>\n </div>\n </div>\n</ng-container>\n", dependencies: [{ kind: "directive", type: i5.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: CdsIconCustomTag, selector: "cds-icon" }, { kind: "pipe", type: i5.AsyncPipe, name: "async" }], animations: panelAnimation, changeDetection: i0.ChangeDetectionStrategy.OnPush });
600
600
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.2", ngImport: i0, type: ClrAccordionPanel, decorators: [{
601
601
  type: Component,
602
- args: [{ selector: 'clr-accordion-panel', host: { '[class.clr-accordion-panel]': 'true' }, changeDetection: ChangeDetectionStrategy.OnPush, animations: panelAnimation, providers: [IfExpandService], template: "<ng-container *ngIf=\"panel | async; let panel\">\n <div *ngIf=\"panel.status !== AccordionStatus.Inactive\" aria-live=\"assertive\" class=\"clr-sr-only\">\n <ng-container *ngIf=\"panel.status === AccordionStatus.Error\">{{commonStrings.keys.danger}}</ng-container>\n </div>\n\n <div [ngClass]=\"getPanelStateClasses(panel)\">\n <div class=\"clr-accordion-header\">\n <button\n type=\"button\"\n class=\"clr-accordion-header-button\"\n (click)=\"togglePanel()\"\n [id]=\"getAccordionHeaderId(panel.templateId)\"\n [disabled]=\"isAccordion && panel.disabled\"\n [attr.aria-disabled]=\"!isAccordion && panel.disabled\"\n [attr.aria-controls]=\"getAccordionContentId(panel.templateId)\"\n [attr.aria-expanded]=\"panel.open\"\n [class.clr-accordion-header-has-description]=\"(accordionDescription.changes | async)?.length || accordionDescription.length\"\n #headerButton\n >\n <span class=\"clr-sr-only\">\n <ng-container *ngIf=\"panel.status === AccordionStatus.Error\">{{commonStrings.keys.danger}}</ng-container>\n <ng-container *ngIf=\"panel.status === AccordionStatus.Complete\">{{commonStrings.keys.success}}</ng-container>\n </span>\n <span class=\"clr-accordion-status\">\n <cds-icon shape=\"angle\" direction=\"right\" class=\"clr-accordion-angle\"></cds-icon>\n <span class=\"clr-accordion-number\"></span>\n <cds-icon status=\"danger\" shape=\"exclamation-circle\" class=\"clr-accordion-error-icon\"></cds-icon>\n <cds-icon status=\"success\" shape=\"check-circle\" class=\"clr-accordion-complete-icon\"></cds-icon>\n </span>\n <ng-content select=\"clr-accordion-title, clr-step-title\"></ng-content>\n <ng-content select=\"clr-accordion-description, clr-step-description\"></ng-content>\n </button>\n </div>\n <div\n @skipInitialRender\n role=\"region\"\n [id]=\"getAccordionContentId(panel.templateId)\"\n [attr.aria-hidden]=\"!panel.open\"\n [attr.aria-labelledby]=\"getAccordionHeaderId(panel.templateId)\"\n >\n <div\n *ngIf=\"panel.open\"\n @toggle\n (@toggle.done)=\"collapsePanelOnAnimationDone(panel)\"\n class=\"clr-accordion-content\"\n >\n <div class=\"clr-accordion-inner-content\">\n <ng-content></ng-content>\n </div>\n </div>\n </div>\n </div>\n</ng-container>\n" }]
602
+ args: [{ selector: 'clr-accordion-panel', host: { '[class.clr-accordion-panel]': 'true' }, changeDetection: ChangeDetectionStrategy.OnPush, animations: panelAnimation, providers: [IfExpandService], template: "<ng-container *ngIf=\"panel | async; let panel\">\n <div [ngClass]=\"getPanelStateClasses(panel)\">\n <div class=\"clr-accordion-header\">\n <button\n type=\"button\"\n class=\"clr-accordion-header-button\"\n (click)=\"togglePanel()\"\n [id]=\"getAccordionHeaderId(panel.templateId)\"\n [disabled]=\"isAccordion && panel.disabled\"\n [attr.aria-disabled]=\"!isAccordion && panel.disabled\"\n [attr.aria-controls]=\"getAccordionContentId(panel.templateId)\"\n [attr.aria-expanded]=\"panel.open\"\n [class.clr-accordion-header-has-description]=\"(accordionDescription.changes | async)?.length || accordionDescription.length\"\n #headerButton\n >\n <span class=\"clr-sr-only\">\n <ng-container *ngIf=\"panel.status === AccordionStatus.Error\">{{commonStrings.keys.danger}}</ng-container>\n <ng-container *ngIf=\"panel.status === AccordionStatus.Complete\">{{commonStrings.keys.success}}</ng-container>\n </span>\n <span class=\"clr-accordion-status\">\n <cds-icon shape=\"angle\" direction=\"right\" class=\"clr-accordion-angle\"></cds-icon>\n <span class=\"clr-accordion-number\"></span>\n <cds-icon status=\"danger\" shape=\"exclamation-circle\" class=\"clr-accordion-error-icon\"></cds-icon>\n <cds-icon status=\"success\" shape=\"check-circle\" class=\"clr-accordion-complete-icon\"></cds-icon>\n </span>\n <ng-content select=\"clr-accordion-title, clr-step-title\"></ng-content>\n <ng-content select=\"clr-accordion-description, clr-step-description\"></ng-content>\n </button>\n </div>\n <div\n @skipInitialRender\n role=\"region\"\n [id]=\"getAccordionContentId(panel.templateId)\"\n [attr.aria-hidden]=\"!panel.open\"\n [attr.aria-labelledby]=\"getAccordionHeaderId(panel.templateId)\"\n >\n <div\n *ngIf=\"panel.open\"\n @toggle\n (@toggle.done)=\"collapsePanelOnAnimationDone(panel)\"\n class=\"clr-accordion-content\"\n >\n <div class=\"clr-accordion-inner-content\">\n <ng-content></ng-content>\n </div>\n </div>\n </div>\n </div>\n</ng-container>\n" }]
603
603
  }], ctorParameters: function () { return [{ type: ClrCommonStringsService }, { type: AccordionService }, { type: IfExpandService }]; }, propDecorators: { disabled: [{
604
604
  type: Input,
605
605
  args: ['clrAccordionPanelDisabled']
@@ -1091,10 +1091,10 @@ class ClrStepperPanel extends ClrAccordionPanel {
1091
1091
  }
1092
1092
  }
1093
1093
  ClrStepperPanel.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.0.2", ngImport: i0, type: ClrStepperPanel, deps: [{ token: PLATFORM_ID }, { token: ClrCommonStringsService }, { token: i1.FormGroupName, optional: true }, { token: i1.NgModelGroup, optional: true }, { token: StepperService }, { token: IfExpandService }], target: i0.ɵɵFactoryTarget.Component });
1094
- ClrStepperPanel.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.0.2", type: ClrStepperPanel, selector: "clr-stepper-panel", host: { properties: { "class.clr-accordion-panel": "true" } }, providers: [IfExpandService], viewQueries: [{ propertyName: "headerButton", first: true, predicate: ["headerButton"], descendants: true }], usesInheritance: true, ngImport: i0, template: "<ng-container *ngIf=\"panel | async; let panel\">\n <div *ngIf=\"panel.status !== AccordionStatus.Inactive\" aria-live=\"assertive\" class=\"clr-sr-only\">\n <ng-container *ngIf=\"panel.status === AccordionStatus.Error\">{{commonStrings.keys.danger}}</ng-container>\n </div>\n\n <div [ngClass]=\"getPanelStateClasses(panel)\">\n <div class=\"clr-accordion-header\">\n <button\n type=\"button\"\n class=\"clr-accordion-header-button\"\n (click)=\"togglePanel()\"\n [id]=\"getAccordionHeaderId(panel.templateId)\"\n [disabled]=\"isAccordion && panel.disabled\"\n [attr.aria-disabled]=\"!isAccordion && panel.disabled\"\n [attr.aria-controls]=\"getAccordionContentId(panel.templateId)\"\n [attr.aria-expanded]=\"panel.open\"\n [class.clr-accordion-header-has-description]=\"(accordionDescription.changes | async)?.length || accordionDescription.length\"\n #headerButton\n >\n <span class=\"clr-sr-only\">\n <ng-container *ngIf=\"panel.status === AccordionStatus.Error\">{{commonStrings.keys.danger}}</ng-container>\n <ng-container *ngIf=\"panel.status === AccordionStatus.Complete\">{{commonStrings.keys.success}}</ng-container>\n </span>\n <span class=\"clr-accordion-status\">\n <cds-icon shape=\"angle\" direction=\"right\" class=\"clr-accordion-angle\"></cds-icon>\n <span class=\"clr-accordion-number\"></span>\n <cds-icon status=\"danger\" shape=\"exclamation-circle\" class=\"clr-accordion-error-icon\"></cds-icon>\n <cds-icon status=\"success\" shape=\"check-circle\" class=\"clr-accordion-complete-icon\"></cds-icon>\n </span>\n <ng-content select=\"clr-accordion-title, clr-step-title\"></ng-content>\n <ng-content select=\"clr-accordion-description, clr-step-description\"></ng-content>\n </button>\n </div>\n <div\n @skipInitialRender\n role=\"region\"\n [id]=\"getAccordionContentId(panel.templateId)\"\n [attr.aria-hidden]=\"!panel.open\"\n [attr.aria-labelledby]=\"getAccordionHeaderId(panel.templateId)\"\n >\n <div\n *ngIf=\"panel.open\"\n @toggle\n (@toggle.done)=\"collapsePanelOnAnimationDone(panel)\"\n class=\"clr-accordion-content\"\n >\n <div class=\"clr-accordion-inner-content\">\n <ng-content></ng-content>\n </div>\n </div>\n </div>\n </div>\n</ng-container>\n", dependencies: [{ kind: "directive", type: i5.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: CdsIconCustomTag, selector: "cds-icon" }, { kind: "pipe", type: i5.AsyncPipe, name: "async" }], animations: stepAnimation, changeDetection: i0.ChangeDetectionStrategy.OnPush });
1094
+ ClrStepperPanel.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.0.2", type: ClrStepperPanel, selector: "clr-stepper-panel", host: { properties: { "class.clr-accordion-panel": "true" } }, providers: [IfExpandService], viewQueries: [{ propertyName: "headerButton", first: true, predicate: ["headerButton"], descendants: true }], usesInheritance: true, ngImport: i0, template: "<ng-container *ngIf=\"panel | async; let panel\">\n <div [ngClass]=\"getPanelStateClasses(panel)\">\n <div class=\"clr-accordion-header\">\n <button\n type=\"button\"\n class=\"clr-accordion-header-button\"\n (click)=\"togglePanel()\"\n [id]=\"getAccordionHeaderId(panel.templateId)\"\n [disabled]=\"isAccordion && panel.disabled\"\n [attr.aria-disabled]=\"!isAccordion && panel.disabled\"\n [attr.aria-controls]=\"getAccordionContentId(panel.templateId)\"\n [attr.aria-expanded]=\"panel.open\"\n [class.clr-accordion-header-has-description]=\"(accordionDescription.changes | async)?.length || accordionDescription.length\"\n #headerButton\n >\n <span class=\"clr-sr-only\">\n <ng-container *ngIf=\"panel.status === AccordionStatus.Error\">{{commonStrings.keys.danger}}</ng-container>\n <ng-container *ngIf=\"panel.status === AccordionStatus.Complete\">{{commonStrings.keys.success}}</ng-container>\n </span>\n <span class=\"clr-accordion-status\">\n <cds-icon shape=\"angle\" direction=\"right\" class=\"clr-accordion-angle\"></cds-icon>\n <span class=\"clr-accordion-number\"></span>\n <cds-icon status=\"danger\" shape=\"exclamation-circle\" class=\"clr-accordion-error-icon\"></cds-icon>\n <cds-icon status=\"success\" shape=\"check-circle\" class=\"clr-accordion-complete-icon\"></cds-icon>\n </span>\n <ng-content select=\"clr-accordion-title, clr-step-title\"></ng-content>\n <ng-content select=\"clr-accordion-description, clr-step-description\"></ng-content>\n </button>\n </div>\n <div\n @skipInitialRender\n role=\"region\"\n [id]=\"getAccordionContentId(panel.templateId)\"\n [attr.aria-hidden]=\"!panel.open\"\n [attr.aria-labelledby]=\"getAccordionHeaderId(panel.templateId)\"\n >\n <div\n *ngIf=\"panel.open\"\n @toggle\n (@toggle.done)=\"collapsePanelOnAnimationDone(panel)\"\n class=\"clr-accordion-content\"\n >\n <div class=\"clr-accordion-inner-content\">\n <ng-content></ng-content>\n </div>\n </div>\n </div>\n </div>\n</ng-container>\n", dependencies: [{ kind: "directive", type: i5.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: CdsIconCustomTag, selector: "cds-icon" }, { kind: "pipe", type: i5.AsyncPipe, name: "async" }], animations: stepAnimation, changeDetection: i0.ChangeDetectionStrategy.OnPush });
1095
1095
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.2", ngImport: i0, type: ClrStepperPanel, decorators: [{
1096
1096
  type: Component,
1097
- args: [{ selector: 'clr-stepper-panel', host: { '[class.clr-accordion-panel]': 'true' }, changeDetection: ChangeDetectionStrategy.OnPush, animations: stepAnimation, providers: [IfExpandService], template: "<ng-container *ngIf=\"panel | async; let panel\">\n <div *ngIf=\"panel.status !== AccordionStatus.Inactive\" aria-live=\"assertive\" class=\"clr-sr-only\">\n <ng-container *ngIf=\"panel.status === AccordionStatus.Error\">{{commonStrings.keys.danger}}</ng-container>\n </div>\n\n <div [ngClass]=\"getPanelStateClasses(panel)\">\n <div class=\"clr-accordion-header\">\n <button\n type=\"button\"\n class=\"clr-accordion-header-button\"\n (click)=\"togglePanel()\"\n [id]=\"getAccordionHeaderId(panel.templateId)\"\n [disabled]=\"isAccordion && panel.disabled\"\n [attr.aria-disabled]=\"!isAccordion && panel.disabled\"\n [attr.aria-controls]=\"getAccordionContentId(panel.templateId)\"\n [attr.aria-expanded]=\"panel.open\"\n [class.clr-accordion-header-has-description]=\"(accordionDescription.changes | async)?.length || accordionDescription.length\"\n #headerButton\n >\n <span class=\"clr-sr-only\">\n <ng-container *ngIf=\"panel.status === AccordionStatus.Error\">{{commonStrings.keys.danger}}</ng-container>\n <ng-container *ngIf=\"panel.status === AccordionStatus.Complete\">{{commonStrings.keys.success}}</ng-container>\n </span>\n <span class=\"clr-accordion-status\">\n <cds-icon shape=\"angle\" direction=\"right\" class=\"clr-accordion-angle\"></cds-icon>\n <span class=\"clr-accordion-number\"></span>\n <cds-icon status=\"danger\" shape=\"exclamation-circle\" class=\"clr-accordion-error-icon\"></cds-icon>\n <cds-icon status=\"success\" shape=\"check-circle\" class=\"clr-accordion-complete-icon\"></cds-icon>\n </span>\n <ng-content select=\"clr-accordion-title, clr-step-title\"></ng-content>\n <ng-content select=\"clr-accordion-description, clr-step-description\"></ng-content>\n </button>\n </div>\n <div\n @skipInitialRender\n role=\"region\"\n [id]=\"getAccordionContentId(panel.templateId)\"\n [attr.aria-hidden]=\"!panel.open\"\n [attr.aria-labelledby]=\"getAccordionHeaderId(panel.templateId)\"\n >\n <div\n *ngIf=\"panel.open\"\n @toggle\n (@toggle.done)=\"collapsePanelOnAnimationDone(panel)\"\n class=\"clr-accordion-content\"\n >\n <div class=\"clr-accordion-inner-content\">\n <ng-content></ng-content>\n </div>\n </div>\n </div>\n </div>\n</ng-container>\n" }]
1097
+ args: [{ selector: 'clr-stepper-panel', host: { '[class.clr-accordion-panel]': 'true' }, changeDetection: ChangeDetectionStrategy.OnPush, animations: stepAnimation, providers: [IfExpandService], template: "<ng-container *ngIf=\"panel | async; let panel\">\n <div [ngClass]=\"getPanelStateClasses(panel)\">\n <div class=\"clr-accordion-header\">\n <button\n type=\"button\"\n class=\"clr-accordion-header-button\"\n (click)=\"togglePanel()\"\n [id]=\"getAccordionHeaderId(panel.templateId)\"\n [disabled]=\"isAccordion && panel.disabled\"\n [attr.aria-disabled]=\"!isAccordion && panel.disabled\"\n [attr.aria-controls]=\"getAccordionContentId(panel.templateId)\"\n [attr.aria-expanded]=\"panel.open\"\n [class.clr-accordion-header-has-description]=\"(accordionDescription.changes | async)?.length || accordionDescription.length\"\n #headerButton\n >\n <span class=\"clr-sr-only\">\n <ng-container *ngIf=\"panel.status === AccordionStatus.Error\">{{commonStrings.keys.danger}}</ng-container>\n <ng-container *ngIf=\"panel.status === AccordionStatus.Complete\">{{commonStrings.keys.success}}</ng-container>\n </span>\n <span class=\"clr-accordion-status\">\n <cds-icon shape=\"angle\" direction=\"right\" class=\"clr-accordion-angle\"></cds-icon>\n <span class=\"clr-accordion-number\"></span>\n <cds-icon status=\"danger\" shape=\"exclamation-circle\" class=\"clr-accordion-error-icon\"></cds-icon>\n <cds-icon status=\"success\" shape=\"check-circle\" class=\"clr-accordion-complete-icon\"></cds-icon>\n </span>\n <ng-content select=\"clr-accordion-title, clr-step-title\"></ng-content>\n <ng-content select=\"clr-accordion-description, clr-step-description\"></ng-content>\n </button>\n </div>\n <div\n @skipInitialRender\n role=\"region\"\n [id]=\"getAccordionContentId(panel.templateId)\"\n [attr.aria-hidden]=\"!panel.open\"\n [attr.aria-labelledby]=\"getAccordionHeaderId(panel.templateId)\"\n >\n <div\n *ngIf=\"panel.open\"\n @toggle\n (@toggle.done)=\"collapsePanelOnAnimationDone(panel)\"\n class=\"clr-accordion-content\"\n >\n <div class=\"clr-accordion-inner-content\">\n <ng-content></ng-content>\n </div>\n </div>\n </div>\n </div>\n</ng-container>\n" }]
1098
1098
  }], ctorParameters: function () { return [{ type: undefined, decorators: [{
1099
1099
  type: Inject,
1100
1100
  args: [PLATFORM_ID]
@@ -6985,202 +6985,32 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.2", ngImpor
6985
6985
  * This software is released under MIT license.
6986
6986
  * The full license information can be found in LICENSE in the root directory of this project.
6987
6987
  */
6988
- class FocusTrapTracker {
6989
- constructor() {
6990
- this._previousFocusTraps = [];
6991
- }
6992
- get current() {
6993
- return this._current;
6994
- }
6995
- set current(value) {
6996
- this._previousFocusTraps.push(this._current);
6997
- this._current = value;
6998
- }
6999
- get nbFocusTrappers() {
7000
- return this._previousFocusTraps.length;
7001
- }
7002
- activatePreviousTrapper() {
7003
- this._current = this._previousFocusTraps.pop();
7004
- }
7005
- }
7006
- FocusTrapTracker.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.0.2", ngImport: i0, type: FocusTrapTracker, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
7007
- FocusTrapTracker.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.0.2", ngImport: i0, type: FocusTrapTracker, providedIn: 'root' });
7008
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.2", ngImport: i0, type: FocusTrapTracker, decorators: [{
7009
- type: Injectable,
7010
- args: [{ providedIn: 'root' }]
7011
- }] });
7012
-
7013
- /*
7014
- * Copyright (c) 2016-2022 VMware, Inc. All Rights Reserved.
7015
- * This software is released under MIT license.
7016
- * The full license information can be found in LICENSE in the root directory of this project.
6988
+ /**
6989
+ * This is just a copy of CdkTrapFocus so it can be used independent of the rest of the A11yModule.
7017
6990
  */
7018
- const FOCUSABLES = '[href]:not([tabindex="-1"]), button:not([disabled]):not([tabindex="-1"]), input:not([disabled]):not([tabindex="-1"]), select:not([disabled]):not([tabindex="-1"]), textarea:not([disabled]):not([tabindex="-1"]), [contenteditable="true"]:not([tabindex="-1"]), [tabindex]:not([tabindex="-1"]) ';
7019
- class FocusTrapDirective {
7020
- constructor(el, injector, focusTrapsTracker, renderer, platformId) {
7021
- this.el = el;
7022
- this.injector = injector;
7023
- this.focusTrapsTracker = focusTrapsTracker;
7024
- this.renderer = renderer;
7025
- this.platformId = platformId;
7026
- this.localFocusEscaped = false;
7027
- this._config = {
7028
- strict: true,
7029
- };
7030
- this.document = this.injector.get(DOCUMENT);
7031
- this.focusTrapsTracker.current = this;
7032
- }
7033
- set config(config) {
7034
- this._config = Object.assign(this._config, config === '' ? {} : config);
7035
- }
7036
- onFocusIn(event) {
7037
- const nativeElement = this.el.nativeElement;
7038
- if (this.focusTrapsTracker.current !== this ||
7039
- !isPlatformBrowser(this.platformId) ||
7040
- this.localFocusEscaped ||
7041
- nativeElement.contains(event.target)) {
7042
- return;
7043
- }
7044
- if (event.target === this.topReboundEl && nativeElement.contains(event.relatedTarget)) {
7045
- this.focusLastFocusable();
7046
- // if it fails to focus element inside the trap, focus the trap element.
7047
- this.focusTrapElIfOutside();
7048
- }
7049
- else if (event.target === this.bottomReboundEl && nativeElement.contains(event.relatedTarget)) {
7050
- this.focusFirstFocusable();
7051
- // if it fails to focus element inside the trap, focus the trap element.
7052
- this.focusTrapElIfOutside();
7053
- }
7054
- else {
7055
- this._config.strict ? this.el.nativeElement.focus() : (this.localFocusEscaped = true);
7056
- }
7057
- }
7058
- createFocusableOffScreenEl() {
7059
- // Not using Renderer2's createElement method because that leads to DOM leakage.
7060
- // https://github.com/angular/angular/issues/26954
7061
- const offScreenSpan = this.document.createElement('span');
7062
- this.renderer.setAttribute(offScreenSpan, 'tabindex', '0');
7063
- this.renderer.addClass(offScreenSpan, 'offscreen-focus-rebounder');
7064
- return offScreenSpan;
7065
- }
7066
- addReboundEls() {
7067
- if (isPlatformBrowser(this.platformId)) {
7068
- this.topReboundEl = this.createFocusableOffScreenEl();
7069
- this.bottomReboundEl = this.createFocusableOffScreenEl();
7070
- const hostElement = this.el.nativeElement;
7071
- // Add reboundBeforeTrapEl right outside of host element
7072
- this.renderer.insertBefore(hostElement.parentElement, this.topReboundEl, hostElement);
7073
- // Add reboundAfterTrapEl right after host element
7074
- if (hostElement.nextSibling) {
7075
- this.renderer.insertBefore(hostElement.parentNode, this.bottomReboundEl, hostElement.nextSibling);
7076
- }
7077
- else {
7078
- this.renderer.appendChild(hostElement.parentNode, this.bottomReboundEl);
7079
- }
7080
- }
7081
- }
7082
- removeReboundEls() {
7083
- if (isPlatformBrowser(this.platformId) && this.topReboundEl && this.bottomReboundEl) {
7084
- this.parentElement.removeChild(this.topReboundEl);
7085
- this.parentElement.removeChild(this.bottomReboundEl);
7086
- // These are here to to make sure that
7087
- // we completely delete all traces of the removed DOM objects.
7088
- delete this.topReboundEl;
7089
- delete this.bottomReboundEl;
7090
- }
7091
- }
7092
- setPreviousFocus() {
7093
- if (this.previousActiveElement && this.previousActiveElement.focus) {
7094
- this.previousActiveElement.focus();
7095
- }
7096
- }
7097
- ngOnInit() {
7098
- if (isPlatformBrowser(this.platformId)) {
7099
- this.renderer.setAttribute(this.el.nativeElement, 'tabindex', '-1');
7100
- this.el.nativeElement.focus();
7101
- }
7102
- }
7103
- ngAfterViewInit() {
7104
- if (isPlatformBrowser(this.platformId)) {
7105
- this.previousActiveElement = this.document.activeElement;
7106
- this.parentElement = this.el.nativeElement.parentElement;
7107
- }
7108
- this.addReboundEls();
7109
- }
7110
- get potentiallyFocusableEls() {
7111
- return [...this.el.nativeElement.querySelectorAll(FOCUSABLES)];
7112
- }
7113
- focusFirstFocusable() {
7114
- for (let i = 0; i < this.potentiallyFocusableEls.length; i++) {
7115
- this.firstFocusableEl = this.focusElement(this.potentiallyFocusableEls[i]);
7116
- if (this.firstFocusableEl) {
7117
- break;
7118
- }
7119
- }
7120
- }
7121
- focusLastFocusable() {
7122
- for (let i = this.potentiallyFocusableEls.length - 1; i >= 0; i--) {
7123
- this.lastFocusableEl = this.focusElement(this.potentiallyFocusableEls[i]);
7124
- if (this.lastFocusableEl) {
7125
- break;
7126
- }
7127
- }
7128
- }
7129
- focusTrapElIfOutside() {
7130
- if (!this.el.nativeElement.contains(document.activeElement)) {
7131
- this.el.nativeElement.focus();
7132
- }
7133
- }
7134
- focusElement(el) {
7135
- if (el && el.focus) {
7136
- el.focus();
7137
- if (document.activeElement === el) {
7138
- return el;
7139
- }
7140
- }
7141
- return null;
7142
- }
7143
- ngOnDestroy() {
7144
- this.removeReboundEls();
7145
- this.setPreviousFocus();
7146
- this.focusTrapsTracker.activatePreviousTrapper();
7147
- }
6991
+ class CdkTrapFocusModule_CdkTrapFocus extends CdkTrapFocus {
7148
6992
  }
7149
- FocusTrapDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.0.2", ngImport: i0, type: FocusTrapDirective, deps: [{ token: i0.ElementRef }, { token: i0.Injector }, { token: FocusTrapTracker }, { token: i0.Renderer2 }, { token: PLATFORM_ID }], target: i0.ɵɵFactoryTarget.Directive });
7150
- FocusTrapDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "15.0.2", type: FocusTrapDirective, selector: "[clrFocusTrap]", inputs: { config: ["clrFocusTrap", "config"] }, host: { listeners: { "document:focusin": "onFocusIn($event)" } }, ngImport: i0 });
7151
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.2", ngImport: i0, type: FocusTrapDirective, decorators: [{
6993
+ CdkTrapFocusModule_CdkTrapFocus.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.0.2", ngImport: i0, type: CdkTrapFocusModule_CdkTrapFocus, deps: null, target: i0.ɵɵFactoryTarget.Directive });
6994
+ CdkTrapFocusModule_CdkTrapFocus.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "15.0.2", type: CdkTrapFocusModule_CdkTrapFocus, selector: "[cdkTrapFocus]", usesInheritance: true, ngImport: i0 });
6995
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.2", ngImport: i0, type: CdkTrapFocusModule_CdkTrapFocus, decorators: [{
7152
6996
  type: Directive,
7153
6997
  args: [{
7154
- selector: '[clrFocusTrap]',
6998
+ selector: '[cdkTrapFocus]',
7155
6999
  }]
7156
- }], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: i0.Injector }, { type: FocusTrapTracker }, { type: i0.Renderer2 }, { type: undefined, decorators: [{
7157
- type: Inject,
7158
- args: [PLATFORM_ID]
7159
- }] }]; }, propDecorators: { config: [{
7160
- type: Input,
7161
- args: ['clrFocusTrap']
7162
- }], onFocusIn: [{
7163
- type: HostListener,
7164
- args: ['document:focusin', ['$event']]
7165
- }] } });
7166
-
7167
- /*
7168
- * Copyright (c) 2016-2022 VMware, Inc. All Rights Reserved.
7169
- * This software is released under MIT license.
7170
- * The full license information can be found in LICENSE in the root directory of this project.
7000
+ }] });
7001
+ /**
7002
+ * This module allows us to avoid importing all of A11yModule which results in a smaller application bundle.
7171
7003
  */
7172
- const FOCUS_TRAP_DIRECTIVES = [FocusTrapDirective];
7173
- class ClrFocusTrapModule {
7004
+ class CdkTrapFocusModule {
7174
7005
  }
7175
- ClrFocusTrapModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.0.2", ngImport: i0, type: ClrFocusTrapModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
7176
- ClrFocusTrapModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "15.0.2", ngImport: i0, type: ClrFocusTrapModule, declarations: [FocusTrapDirective], imports: [CommonModule], exports: [FocusTrapDirective] });
7177
- ClrFocusTrapModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "15.0.2", ngImport: i0, type: ClrFocusTrapModule, imports: [CommonModule] });
7178
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.2", ngImport: i0, type: ClrFocusTrapModule, decorators: [{
7006
+ CdkTrapFocusModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.0.2", ngImport: i0, type: CdkTrapFocusModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
7007
+ CdkTrapFocusModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "15.0.2", ngImport: i0, type: CdkTrapFocusModule, declarations: [CdkTrapFocusModule_CdkTrapFocus], exports: [CdkTrapFocusModule_CdkTrapFocus] });
7008
+ CdkTrapFocusModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "15.0.2", ngImport: i0, type: CdkTrapFocusModule });
7009
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.2", ngImport: i0, type: CdkTrapFocusModule, decorators: [{
7179
7010
  type: NgModule,
7180
7011
  args: [{
7181
- imports: [CommonModule],
7182
- declarations: [FOCUS_TRAP_DIRECTIVES],
7183
- exports: [FOCUS_TRAP_DIRECTIVES],
7012
+ declarations: [CdkTrapFocusModule_CdkTrapFocus],
7013
+ exports: [CdkTrapFocusModule_CdkTrapFocus],
7184
7014
  }]
7185
7015
  }] });
7186
7016
 
@@ -8965,7 +8795,7 @@ ClrDateContainer.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", versi
8965
8795
  </button>
8966
8796
  <clr-datepicker-view-manager
8967
8797
  *clrPopoverContent="open; at: popoverPosition; outsideClickToClose: true; scrollToClose: true"
8968
- clrFocusTrap
8798
+ cdkTrapFocus
8969
8799
  ></clr-datepicker-view-manager>
8970
8800
  </div>
8971
8801
  <cds-icon
@@ -8987,7 +8817,7 @@ ClrDateContainer.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", versi
8987
8817
  <ng-content select="clr-control-error" *ngIf="showInvalid"></ng-content>
8988
8818
  <ng-content select="clr-control-success" *ngIf="showValid"></ng-content>
8989
8819
  </div>
8990
- `, isInline: true, dependencies: [{ kind: "directive", type: i5.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: ClrPopoverAnchor, selector: "[clrPopoverAnchor]" }, { kind: "directive", type: ClrPopoverOpenCloseButton, selector: "[clrPopoverOpenCloseButton]", outputs: ["clrPopoverOpenCloseChange"] }, { kind: "directive", type: ClrPopoverContent, selector: "[clrPopoverContent]", inputs: ["clrPopoverContent", "clrPopoverContentAt", "clrPopoverContentOutsideClickToClose", "clrPopoverContentScrollToClose"] }, { kind: "directive", type: CdsIconCustomTag, selector: "cds-icon" }, { kind: "directive", type: FocusTrapDirective, selector: "[clrFocusTrap]", inputs: ["clrFocusTrap"] }, { kind: "directive", type: ClrLabel, selector: "label", inputs: ["for"] }, { kind: "component", type: ClrDatepickerViewManager, selector: "clr-datepicker-view-manager" }] });
8820
+ `, isInline: true, dependencies: [{ kind: "directive", type: i5.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: CdkTrapFocusModule_CdkTrapFocus, selector: "[cdkTrapFocus]" }, { kind: "directive", type: ClrPopoverAnchor, selector: "[clrPopoverAnchor]" }, { kind: "directive", type: ClrPopoverOpenCloseButton, selector: "[clrPopoverOpenCloseButton]", outputs: ["clrPopoverOpenCloseChange"] }, { kind: "directive", type: ClrPopoverContent, selector: "[clrPopoverContent]", inputs: ["clrPopoverContent", "clrPopoverContentAt", "clrPopoverContentOutsideClickToClose", "clrPopoverContentScrollToClose"] }, { kind: "directive", type: CdsIconCustomTag, selector: "cds-icon" }, { kind: "directive", type: ClrLabel, selector: "label", inputs: ["for"] }, { kind: "component", type: ClrDatepickerViewManager, selector: "clr-datepicker-view-manager" }] });
8991
8821
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.2", ngImport: i0, type: ClrDateContainer, decorators: [{
8992
8822
  type: Component,
8993
8823
  args: [{
@@ -9011,7 +8841,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.2", ngImpor
9011
8841
  </button>
9012
8842
  <clr-datepicker-view-manager
9013
8843
  *clrPopoverContent="open; at: popoverPosition; outsideClickToClose: true; scrollToClose: true"
9014
- clrFocusTrap
8844
+ cdkTrapFocus
9015
8845
  ></clr-datepicker-view-manager>
9016
8846
  </div>
9017
8847
  <cds-icon
@@ -9401,11 +9231,11 @@ ClrDatepickerModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", ver
9401
9231
  ClrYearpicker,
9402
9232
  ClrDaypicker,
9403
9233
  ClrCalendar], imports: [CommonModule,
9234
+ CdkTrapFocusModule,
9404
9235
  ClrHostWrappingModule,
9405
9236
  ClrConditionalModule,
9406
9237
  ClrPopoverModuleNext,
9407
9238
  ClrIconModule,
9408
- ClrFocusTrapModule,
9409
9239
  ClrCommonFormsModule], exports: [ClrDay,
9410
9240
  ClrDateContainer,
9411
9241
  ClrDateInput,
@@ -9416,22 +9246,22 @@ ClrDatepickerModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", ver
9416
9246
  ClrDaypicker,
9417
9247
  ClrCalendar] });
9418
9248
  ClrDatepickerModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "15.0.2", ngImport: i0, type: ClrDatepickerModule, imports: [CommonModule,
9249
+ CdkTrapFocusModule,
9419
9250
  ClrHostWrappingModule,
9420
9251
  ClrConditionalModule,
9421
9252
  ClrPopoverModuleNext,
9422
9253
  ClrIconModule,
9423
- ClrFocusTrapModule,
9424
9254
  ClrCommonFormsModule] });
9425
9255
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.2", ngImport: i0, type: ClrDatepickerModule, decorators: [{
9426
9256
  type: NgModule,
9427
9257
  args: [{
9428
9258
  imports: [
9429
9259
  CommonModule,
9260
+ CdkTrapFocusModule,
9430
9261
  ClrHostWrappingModule,
9431
9262
  ClrConditionalModule,
9432
9263
  ClrPopoverModuleNext,
9433
9264
  ClrIconModule,
9434
- ClrFocusTrapModule,
9435
9265
  ClrCommonFormsModule,
9436
9266
  ],
9437
9267
  declarations: [CLR_DATEPICKER_DIRECTIVES],
@@ -10399,972 +10229,45 @@ class ClrExpandableAnimation {
10399
10229
  this.startHeight = 0;
10400
10230
  }
10401
10231
  get expandAnimation() {
10402
- return { value: this.clrExpandTrigger, params: { startHeight: this.startHeight } };
10403
- }
10404
- animationDone() {
10405
- // A "safe" auto-update of the height ensuring basic OOTB user experience .
10406
- // Prone to small jumps in initial animation height if data was changed in the meantime, window was resized, etc.
10407
- // For optimal behavior call manually updateStartHeight() from the parent component before initiating the update.
10408
- this.updateStartHeight();
10409
- }
10410
- updateStartHeight() {
10411
- this.startHeight = this.domAdapter.computedHeight(this.element.nativeElement) || 0;
10412
- }
10413
- }
10414
- ClrExpandableAnimation.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.0.2", ngImport: i0, type: ClrExpandableAnimation, deps: [{ token: i0.ElementRef }, { token: DomAdapter }], target: i0.ɵɵFactoryTarget.Component });
10415
- ClrExpandableAnimation.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.0.2", type: ClrExpandableAnimation, selector: "clr-expandable-animation", inputs: { clrExpandTrigger: "clrExpandTrigger" }, host: { listeners: { "@expandAnimation.done": "animationDone()" }, properties: { "@expandAnimation": "this.expandAnimation" } }, providers: [DomAdapter], ngImport: i0, template: `<ng-content></ng-content>`, isInline: true, styles: [":host{display:block}\n"], animations: [
10416
- trigger('expandAnimation', [
10417
- transition('true <=> false', [
10418
- style({ height: '{{startHeight}}px', overflow: 'hidden' }),
10419
- animate('0.2s ease-in-out', style({ height: '*' })),
10420
- ]),
10421
- ]),
10422
- ] });
10423
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.2", ngImport: i0, type: ClrExpandableAnimation, decorators: [{
10424
- type: Component,
10425
- args: [{ selector: 'clr-expandable-animation', template: `<ng-content></ng-content>`, animations: [
10426
- trigger('expandAnimation', [
10427
- transition('true <=> false', [
10428
- style({ height: '{{startHeight}}px', overflow: 'hidden' }),
10429
- animate('0.2s ease-in-out', style({ height: '*' })),
10430
- ]),
10431
- ]),
10432
- ], providers: [DomAdapter], styles: [":host{display:block}\n"] }]
10433
- }], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: DomAdapter }]; }, propDecorators: { clrExpandTrigger: [{
10434
- type: Input
10435
- }], expandAnimation: [{
10436
- type: HostBinding,
10437
- args: ['@expandAnimation']
10438
- }], animationDone: [{
10439
- type: HostListener,
10440
- args: ['@expandAnimation.done']
10441
- }] } });
10442
-
10443
- /*
10444
- * Copyright (c) 2016-2022 VMware, Inc. All Rights Reserved.
10445
- * This software is released under MIT license.
10446
- * The full license information can be found in LICENSE in the root directory of this project.
10447
- */
10448
- const EXPANDABLE_ANIMATION_DIRECTIVES = [ClrExpandableAnimation];
10449
-
10450
- /*
10451
- * Copyright (c) 2016-2022 VMware, Inc. All Rights Reserved.
10452
- * This software is released under MIT license.
10453
- * The full license information can be found in LICENSE in the root directory of this project.
10454
- */
10455
- class ClrExpandableAnimationModule {
10456
- }
10457
- ClrExpandableAnimationModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.0.2", ngImport: i0, type: ClrExpandableAnimationModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
10458
- ClrExpandableAnimationModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "15.0.2", ngImport: i0, type: ClrExpandableAnimationModule, declarations: [ClrExpandableAnimation], imports: [CommonModule], exports: [ClrExpandableAnimation] });
10459
- ClrExpandableAnimationModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "15.0.2", ngImport: i0, type: ClrExpandableAnimationModule, imports: [CommonModule] });
10460
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.2", ngImport: i0, type: ClrExpandableAnimationModule, decorators: [{
10461
- type: NgModule,
10462
- args: [{
10463
- imports: [CommonModule],
10464
- declarations: [EXPANDABLE_ANIMATION_DIRECTIVES],
10465
- exports: [EXPANDABLE_ANIMATION_DIRECTIVES],
10466
- }]
10467
- }] });
10468
-
10469
- /*
10470
- * Copyright (c) 2016-2022 VMware, Inc. All Rights Reserved.
10471
- * This software is released under MIT license.
10472
- * The full license information can be found in LICENSE in the root directory of this project.
10473
- */
10474
- var DragEventType;
10475
- (function (DragEventType) {
10476
- DragEventType[DragEventType["DRAG_START"] = 0] = "DRAG_START";
10477
- DragEventType[DragEventType["DRAG_MOVE"] = 1] = "DRAG_MOVE";
10478
- DragEventType[DragEventType["DRAG_END"] = 2] = "DRAG_END";
10479
- DragEventType[DragEventType["DRAG_ENTER"] = 3] = "DRAG_ENTER";
10480
- DragEventType[DragEventType["DRAG_LEAVE"] = 4] = "DRAG_LEAVE";
10481
- DragEventType[DragEventType["DROP"] = 5] = "DROP";
10482
- })(DragEventType || (DragEventType = {}));
10483
-
10484
- /*
10485
- * Copyright (c) 2016-2022 VMware, Inc. All Rights Reserved.
10486
- * This software is released under MIT license.
10487
- * The full license information can be found in LICENSE in the root directory of this project.
10488
- */
10489
- class DragAndDropEventBusService {
10490
- constructor() {
10491
- this.dragStart = new Subject();
10492
- this.dragMove = new Subject();
10493
- this.dragEnd = new Subject();
10494
- this.drop = new Subject();
10495
- }
10496
- get dragStarted() {
10497
- return this.dragStart.asObservable();
10498
- }
10499
- get dragMoved() {
10500
- return this.dragMove.asObservable();
10501
- }
10502
- get dragEnded() {
10503
- return this.dragEnd.asObservable();
10504
- }
10505
- get dropped() {
10506
- return this.drop.asObservable();
10507
- }
10508
- broadcast(event) {
10509
- switch (event.type) {
10510
- case DragEventType.DRAG_START:
10511
- this.dragStart.next(event);
10512
- break;
10513
- case DragEventType.DRAG_MOVE:
10514
- this.dragMove.next(event);
10515
- break;
10516
- case DragEventType.DRAG_END:
10517
- this.dragEnd.next(event);
10518
- break;
10519
- case DragEventType.DROP:
10520
- this.drop.next(event);
10521
- break;
10522
- default:
10523
- break;
10524
- }
10525
- }
10526
- }
10527
- DragAndDropEventBusService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.0.2", ngImport: i0, type: DragAndDropEventBusService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
10528
- DragAndDropEventBusService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.0.2", ngImport: i0, type: DragAndDropEventBusService, providedIn: 'root' });
10529
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.2", ngImport: i0, type: DragAndDropEventBusService, decorators: [{
10530
- type: Injectable,
10531
- args: [{ providedIn: 'root' }]
10532
- }] });
10533
-
10534
- /*
10535
- * Copyright (c) 2016-2022 VMware, Inc. All Rights Reserved.
10536
- * This software is released under MIT license.
10537
- * The full license information can be found in LICENSE in the root directory of this project.
10538
- */
10539
- class DragEventListenerService {
10540
- constructor(ngZone, renderer, eventBus) {
10541
- this.ngZone = ngZone;
10542
- this.renderer = renderer;
10543
- this.eventBus = eventBus;
10544
- // contains listeners for the starting events such as mousedown and touchstart
10545
- this.listeners = [];
10546
- this.dragStart = new Subject();
10547
- this.dragMove = new Subject();
10548
- this.dragEnd = new Subject();
10549
- this.hasDragStarted = false;
10550
- this.dragStartDelay = 0;
10551
- }
10552
- get dragStarted() {
10553
- return this.dragStart.asObservable();
10554
- }
10555
- get dragMoved() {
10556
- return this.dragMove.asObservable();
10557
- }
10558
- get dragEnded() {
10559
- return this.dragEnd.asObservable();
10560
- }
10561
- get dragStartPosition() {
10562
- return this.initialPosition;
10563
- }
10564
- attachDragListeners(draggableEl) {
10565
- this.draggableEl = draggableEl;
10566
- this.listeners.push(this.customDragEvent(this.draggableEl, 'mousedown', 'mousemove', 'mouseup'));
10567
- this.listeners.push(this.customDragEvent(this.draggableEl, 'touchstart', 'touchmove', 'touchend'));
10568
- }
10569
- detachDragListeners() {
10570
- if (this.listeners) {
10571
- this.listeners.map(event => event());
10572
- }
10573
- // In most cases, once users start dragging with mousedown/touchstart events,
10574
- // they will end dragging at one point with mouseup/touchend.
10575
- // However, there might be a few cases where mousedown/touchstart events get registered,
10576
- // but the draggable element gets removed before user ends dragging.
10577
- // In that case, we need to remove the attached listeners that happened during the mousedown/touchstart events.
10578
- if (this.nestedListeners) {
10579
- this.nestedListeners.map(event => event());
10580
- }
10581
- if (this.checkDragStartBoundaryListener) {
10582
- this.checkDragStartBoundaryListener();
10583
- }
10584
- }
10585
- getNativeEventObject(event) {
10586
- if (Object.prototype.hasOwnProperty.call(event, 'changedTouches')) {
10587
- return event.changedTouches[0];
10588
- }
10589
- else {
10590
- return event;
10591
- }
10592
- }
10593
- customDragEvent(element, startOnEvent, moveOnEvent, endOnEvent) {
10594
- return this.renderer.listen(element, startOnEvent, (startEvent) => {
10595
- // save the initial point to initialPosition
10596
- // this will be used to calculate how far the draggable has been dragged from its initial position
10597
- this.initialPosition = {
10598
- pageX: this.getNativeEventObject(startEvent).pageX,
10599
- pageY: this.getNativeEventObject(startEvent).pageY,
10600
- };
10601
- // Initialize nested listeners' property with a new empty array;
10602
- this.nestedListeners = [];
10603
- // Listen to selectstart/mousemove/touchmove events outside of angular zone.
10604
- this.ngZone.runOutsideAngular(() => {
10605
- // This is needed to disable selection during dragging (especially in EDGE/IE11).
10606
- this.nestedListeners.push(this.renderer.listen('document', 'selectstart', (selectEvent) => {
10607
- selectEvent.preventDefault();
10608
- selectEvent.stopImmediatePropagation();
10609
- }));
10610
- // During the drag start delay, pointer should stay within the boundary.
10611
- this.checkDragStartBoundary(moveOnEvent);
10612
- this.dragStartDelayTimeout = setTimeout(() => {
10613
- if (this.checkDragStartBoundaryListener) {
10614
- this.checkDragStartBoundaryListener();
10615
- }
10616
- this.hasDragStarted = true;
10617
- // Fire "dragstart"
10618
- this.broadcast(startEvent, DragEventType.DRAG_START);
10619
- this.nestedListeners.push(this.renderer.listen('document', moveOnEvent, (moveEvent) => {
10620
- // Event.stopImmediatePropagation() is needed here to prevent nested draggables from getting dragged
10621
- // altogether. We shouldn't use Event.stopPropagation() here as we are listening to the events
10622
- // on the global element level.
10623
- // With Event.stopImmediatePropagation(), it registers the events sent from the inner most draggable
10624
- // first. Then immediately after that, it stops listening to the same type of events on the same
10625
- // element. So this will help us to not register the same events that would come from the parent
10626
- // level draggables eventually.
10627
- moveEvent.stopImmediatePropagation();
10628
- if (this.hasDragStarted) {
10629
- // Fire "dragmove"
10630
- this.broadcast(moveEvent, DragEventType.DRAG_MOVE);
10631
- }
10632
- }));
10633
- }, this.dragStartDelay);
10634
- });
10635
- // Listen to mouseup/touchend events.
10636
- this.nestedListeners.push(this.renderer.listen('document', endOnEvent, (endEvent) => {
10637
- if (this.hasDragStarted) {
10638
- // Fire "dragend" only if dragstart is registered
10639
- this.hasDragStarted = false;
10640
- this.broadcast(endEvent, DragEventType.DRAG_END);
10641
- }
10642
- clearTimeout(this.dragStartDelayTimeout);
10643
- // We must remove the the nested listeners every time drag completes.
10644
- this.nestedListeners.map(event => event());
10645
- // We must remove the event listener from checkDragStartBoundary
10646
- if (this.checkDragStartBoundaryListener) {
10647
- this.checkDragStartBoundaryListener();
10648
- }
10649
- }));
10650
- });
10651
- }
10652
- checkDragStartBoundary(eventType) {
10653
- this.checkDragStartBoundaryListener = this.renderer.listen('document', eventType, (moveEvent) => {
10654
- const deltaX = Math.abs(this.getNativeEventObject(moveEvent).pageX - this.initialPosition.pageX);
10655
- const deltaY = Math.abs(this.getNativeEventObject(moveEvent).pageY - this.initialPosition.pageY);
10656
- // If pointer move delta exceeds horizontal or vertical threshold,
10657
- // we should cancel drag initiation.
10658
- if (deltaX > 1 || deltaY > 1) {
10659
- clearTimeout(this.dragStartDelayTimeout);
10660
- if (this.checkDragStartBoundaryListener) {
10661
- this.checkDragStartBoundaryListener();
10662
- }
10663
- }
10664
- });
10665
- }
10666
- broadcast(event, eventType) {
10667
- const dragEvent = this.generateDragEvent(event, eventType);
10668
- switch (dragEvent.type) {
10669
- case DragEventType.DRAG_START:
10670
- this.dragStart.next(dragEvent);
10671
- break;
10672
- case DragEventType.DRAG_MOVE:
10673
- this.dragMove.next(dragEvent);
10674
- break;
10675
- case DragEventType.DRAG_END:
10676
- this.dragEnd.next(dragEvent);
10677
- break;
10678
- default:
10679
- break;
10680
- }
10681
- // The following properties are set after they are broadcasted to the DraggableGhost component.
10682
- dragEvent.ghostElement = this.ghostElement;
10683
- dragEvent.dropPointPosition = this.dropPointPosition;
10684
- this.eventBus.broadcast(dragEvent);
10685
- }
10686
- generateDragEvent(event, eventType) {
10687
- const nativeEvent = this.getNativeEventObject(event);
10688
- return {
10689
- type: eventType,
10690
- dragPosition: {
10691
- pageX: nativeEvent.pageX,
10692
- pageY: nativeEvent.pageY,
10693
- moveX: nativeEvent.pageX - this.initialPosition.pageX,
10694
- moveY: nativeEvent.pageY - this.initialPosition.pageY,
10695
- },
10696
- group: this.group,
10697
- dragDataTransfer: this.dragDataTransfer,
10698
- ghostElement: this.ghostElement,
10699
- };
10700
- }
10701
- }
10702
- DragEventListenerService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.0.2", ngImport: i0, type: DragEventListenerService, deps: [{ token: i0.NgZone }, { token: i0.Renderer2 }, { token: DragAndDropEventBusService }], target: i0.ɵɵFactoryTarget.Injectable });
10703
- DragEventListenerService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.0.2", ngImport: i0, type: DragEventListenerService });
10704
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.2", ngImport: i0, type: DragEventListenerService, decorators: [{
10705
- type: Injectable
10706
- }], ctorParameters: function () { return [{ type: i0.NgZone }, { type: i0.Renderer2 }, { type: DragAndDropEventBusService }]; } });
10707
-
10708
- /*
10709
- * Copyright (c) 2016-2022 VMware, Inc. All Rights Reserved.
10710
- * This software is released under MIT license.
10711
- * The full license information can be found in LICENSE in the root directory of this project.
10712
- */
10713
- // This provider registers the drag handle element.
10714
- // When it registers a element as a drag handle, it attaches that element to the listeners from ClrDragEventListener.
10715
- // Also, it adds the "drag-handle" css class to the registered element through Renderer.
10716
- class DragHandleRegistrarService {
10717
- constructor(dragEventListener, renderer) {
10718
- this.dragEventListener = dragEventListener;
10719
- this.renderer = renderer;
10720
- }
10721
- get defaultHandleEl() {
10722
- return this._defaultHandleEl;
10723
- }
10724
- set defaultHandleEl(el) {
10725
- this._defaultHandleEl = el; // defaultHandleEl will be usually the clrDraggable element.
10726
- // If the customHandleEl has been registered,
10727
- // don't make the defaultHandleEl the drag handle yet until the customHandleEl is unregistered.
10728
- if (!this._customHandleEl) {
10729
- this.makeElementHandle(this._defaultHandleEl);
10730
- }
10731
- }
10732
- makeElementHandle(el) {
10733
- if (this._defaultHandleEl && this._defaultHandleEl !== el) {
10734
- // Before making an element the custom handle element,
10735
- // we should remove the existing drag-handle class from the draggable element.
10736
- this.renderer.removeClass(this._defaultHandleEl, 'drag-handle');
10737
- }
10738
- this.dragEventListener.attachDragListeners(el);
10739
- this.renderer.addClass(el, 'drag-handle');
10740
- }
10741
- get customHandleEl() {
10742
- return this._customHandleEl;
10743
- }
10744
- registerCustomHandle(el) {
10745
- this.dragEventListener.detachDragListeners(); // removes the existing listeners
10746
- this._customHandleEl = el;
10747
- this.makeElementHandle(this._customHandleEl);
10748
- }
10749
- unregisterCustomHandle() {
10750
- this.dragEventListener.detachDragListeners(); // removes the existing listeners
10751
- this.renderer.removeClass(this._customHandleEl, 'drag-handle');
10752
- delete this._customHandleEl;
10753
- // if default handle is set, make that handle
10754
- if (this._defaultHandleEl) {
10755
- this.makeElementHandle(this._defaultHandleEl);
10756
- }
10757
- }
10758
- }
10759
- DragHandleRegistrarService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.0.2", ngImport: i0, type: DragHandleRegistrarService, deps: [{ token: DragEventListenerService }, { token: i0.Renderer2 }], target: i0.ɵɵFactoryTarget.Injectable });
10760
- DragHandleRegistrarService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.0.2", ngImport: i0, type: DragHandleRegistrarService });
10761
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.2", ngImport: i0, type: DragHandleRegistrarService, decorators: [{
10762
- type: Injectable
10763
- }], ctorParameters: function () { return [{ type: DragEventListenerService }, { type: i0.Renderer2 }]; } });
10764
-
10765
- /*
10766
- * Copyright (c) 2016-2022 VMware, Inc. All Rights Reserved.
10767
- * This software is released under MIT license.
10768
- * The full license information can be found in LICENSE in the root directory of this project.
10769
- */
10770
- class ClrDragHandle {
10771
- constructor(el, dragHandleRegistrar) {
10772
- this.el = el;
10773
- this.dragHandleRegistrar = dragHandleRegistrar;
10774
- if (!this.dragHandleRegistrar) {
10775
- // ClrDragHandleRegistrar is provided in ClrDraggable so we expect it to be present here
10776
- // as clrDragHandle is required to be used only inside of a clrDraggable directive.
10777
- throw new Error('The clrDragHandle directive can only be used inside of a clrDraggable directive.');
10778
- }
10779
- this.dragHandleRegistrar.registerCustomHandle(this.el.nativeElement);
10780
- }
10781
- ngOnDestroy() {
10782
- this.dragHandleRegistrar.unregisterCustomHandle();
10783
- }
10784
- }
10785
- ClrDragHandle.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.0.2", ngImport: i0, type: ClrDragHandle, deps: [{ token: i0.ElementRef }, { token: DragHandleRegistrarService, optional: true }], target: i0.ɵɵFactoryTarget.Directive });
10786
- ClrDragHandle.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "15.0.2", type: ClrDragHandle, selector: "[clrDragHandle]", host: { properties: { "class.drag-handle": "true" } }, ngImport: i0 });
10787
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.2", ngImport: i0, type: ClrDragHandle, decorators: [{
10788
- type: Directive,
10789
- args: [{
10790
- selector: '[clrDragHandle]',
10791
- host: { '[class.drag-handle]': 'true' },
10792
- }]
10793
- }], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: DragHandleRegistrarService, decorators: [{
10794
- type: Optional
10795
- }] }]; } });
10796
-
10797
- /*
10798
- * Copyright (c) 2016-2022 VMware, Inc. All Rights Reserved.
10799
- * This software is released under MIT license.
10800
- * The full license information can be found in LICENSE in the root directory of this project.
10801
- */
10802
- // This service is used to capture the state of clrDraggable element
10803
- // at a certain event and passes it to clrDraggableGhost component.
10804
- class DraggableSnapshotService {
10805
- constructor(domAdapter) {
10806
- this.domAdapter = domAdapter;
10807
- }
10808
- capture(el, event) {
10809
- this.draggableElClientRect = this.domAdapter.clientRect(el);
10810
- this.snapshotDragEvent = event;
10811
- }
10812
- discard() {
10813
- delete this.draggableElClientRect;
10814
- delete this.snapshotDragEvent;
10815
- }
10816
- get hasDraggableState() {
10817
- return !!this.snapshotDragEvent && !!this.draggableElClientRect;
10818
- }
10819
- get clientRect() {
10820
- return this.draggableElClientRect;
10821
- }
10822
- get dragEvent() {
10823
- return this.snapshotDragEvent;
10824
- }
10825
- }
10826
- DraggableSnapshotService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.0.2", ngImport: i0, type: DraggableSnapshotService, deps: [{ token: DomAdapter }], target: i0.ɵɵFactoryTarget.Injectable });
10827
- DraggableSnapshotService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.0.2", ngImport: i0, type: DraggableSnapshotService });
10828
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.2", ngImport: i0, type: DraggableSnapshotService, decorators: [{
10829
- type: Injectable
10830
- }], ctorParameters: function () { return [{ type: DomAdapter }]; } });
10831
-
10832
- /*
10833
- * Copyright (c) 2016-2022 VMware, Inc. All Rights Reserved.
10834
- * This software is released under MIT license.
10835
- * The full license information can be found in LICENSE in the root directory of this project.
10836
- */
10837
- class ClrDraggableGhost {
10838
- constructor(el, dragEventListener, draggableSnapshot, renderer, ngZone) {
10839
- this.el = el;
10840
- this.dragEventListener = dragEventListener;
10841
- this.draggableSnapshot = draggableSnapshot;
10842
- this.renderer = renderer;
10843
- this.ngZone = ngZone;
10844
- this.subscriptions = [];
10845
- this.leaveAnimConfig = { value: 0, params: { top: '0px', left: '0px' } };
10846
- if (!this.dragEventListener || !this.draggableSnapshot) {
10847
- throw new Error('The clr-draggable-ghost component can only be used inside of a clrDraggable directive.');
10848
- }
10849
- this.draggableGhostEl = this.el.nativeElement;
10850
- // Need to use Renderer2 as it runs outside of NgZone
10851
- this.renderer.addClass(this.draggableGhostEl, 'draggable-ghost');
10852
- // Register the ghost element in DragEventListener to pass in a ClrDragEvent.
10853
- this.dragEventListener.ghostElement = this.draggableGhostEl;
10854
- // Default ghost size gets the size of ClrDraggable element.
10855
- this.setDefaultGhostSize(this.draggableGhostEl);
10856
- const offset = {
10857
- top: this.draggableSnapshot.hasDraggableState
10858
- ? this.draggableSnapshot.dragEvent.dragPosition.pageY - this.draggableSnapshot.clientRect.top
10859
- : 0,
10860
- left: this.draggableSnapshot.hasDraggableState
10861
- ? this.draggableSnapshot.dragEvent.dragPosition.pageX - this.draggableSnapshot.clientRect.left
10862
- : 0,
10863
- };
10864
- let isAnimationConfigured = false;
10865
- this.subscriptions.push(this.dragEventListener.dragMoved.subscribe((event) => {
10866
- // On the first drag move event, we configure the animation as it's dependent on the first drag event.
10867
- if (!isAnimationConfigured) {
10868
- if (this.draggableSnapshot.hasDraggableState) {
10869
- this.animateToOnLeave(`${this.draggableSnapshot.clientRect.top}px`, `${this.draggableSnapshot.clientRect.left}px`);
10870
- }
10871
- else {
10872
- this.animateToOnLeave(`${this.dragEventListener.dragStartPosition.pageY}px`, `${this.dragEventListener.dragStartPosition.pageY}px`);
10873
- }
10874
- isAnimationConfigured = true;
10875
- }
10876
- // Position the draggable ghost.
10877
- const topLeftPosition = this.findTopLeftPosition(event.dragPosition, offset);
10878
- this.setPositionStyle(this.draggableGhostEl, topLeftPosition.pageX, topLeftPosition.pageY);
10879
- this.dragEventListener.dropPointPosition = this.findDropPointPosition(topLeftPosition);
10880
- }));
10881
- }
10882
- setDefaultGhostSize(el) {
10883
- if (this.draggableSnapshot.hasDraggableState) {
10884
- this.setSizeStyle(el, this.draggableSnapshot.clientRect.width, this.draggableSnapshot.clientRect.height);
10885
- }
10886
- }
10887
- animateToOnLeave(top, left) {
10888
- this.ngZone.run(() => {
10889
- this.leaveAnimConfig = { value: 0, params: { top: top, left: left } };
10890
- });
10891
- }
10892
- findTopLeftPosition(dragPosition, offset) {
10893
- return { pageX: dragPosition.pageX - offset.left, pageY: dragPosition.pageY - offset.top };
10894
- }
10895
- findDropPointPosition(topLeftPosition) {
10896
- if (this.draggableSnapshot.hasDraggableState) {
10897
- return {
10898
- pageX: topLeftPosition.pageX + this.draggableSnapshot.clientRect.width / 2,
10899
- pageY: topLeftPosition.pageY + this.draggableSnapshot.clientRect.height / 2,
10900
- };
10901
- }
10902
- else {
10903
- return topLeftPosition;
10904
- }
10905
- }
10906
- setSizeStyle(el, width, height) {
10907
- this.renderer.setStyle(el, 'width', `${width}px`);
10908
- this.renderer.setStyle(el, 'height', `${height}px`);
10909
- }
10910
- setPositionStyle(el, left, top) {
10911
- this.renderer.setStyle(el, 'left', `${left}px`);
10912
- this.renderer.setStyle(el, 'top', `${top}px`);
10913
- this.renderer.setStyle(el, 'visibility', 'visible');
10914
- }
10915
- ngOnDestroy() {
10916
- this.subscriptions.forEach((sub) => sub.unsubscribe());
10917
- }
10918
- }
10919
- ClrDraggableGhost.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.0.2", ngImport: i0, type: ClrDraggableGhost, deps: [{ token: i0.ElementRef }, { token: DragEventListenerService, optional: true }, { token: DraggableSnapshotService, optional: true }, { token: i0.Renderer2 }, { token: i0.NgZone }], target: i0.ɵɵFactoryTarget.Component });
10920
- ClrDraggableGhost.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.0.2", type: ClrDraggableGhost, selector: "clr-draggable-ghost", host: { properties: { "@leaveAnimation": "this.leaveAnimConfig" } }, ngImport: i0, template: `<ng-content></ng-content>`, isInline: true, animations: [
10921
- trigger('leaveAnimation', [
10922
- transition(':leave', [
10923
- style({ left: '*', top: '*' }),
10924
- animate('0.2s ease-in-out', style({ top: '{{top}}', left: '{{left}}' })),
10925
- ]),
10926
- ]),
10927
- ] });
10928
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.2", ngImport: i0, type: ClrDraggableGhost, decorators: [{
10929
- type: Component,
10930
- args: [{
10931
- selector: 'clr-draggable-ghost',
10932
- template: `<ng-content></ng-content>`,
10933
- animations: [
10934
- trigger('leaveAnimation', [
10935
- transition(':leave', [
10936
- style({ left: '*', top: '*' }),
10937
- animate('0.2s ease-in-out', style({ top: '{{top}}', left: '{{left}}' })),
10938
- ]),
10939
- ]),
10940
- ],
10941
- }]
10942
- }], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: DragEventListenerService, decorators: [{
10943
- type: Optional
10944
- }] }, { type: DraggableSnapshotService, decorators: [{
10945
- type: Optional
10946
- }] }, { type: i0.Renderer2 }, { type: i0.NgZone }]; }, propDecorators: { leaveAnimConfig: [{
10947
- type: HostBinding,
10948
- args: ['@leaveAnimation']
10949
- }] } });
10950
-
10951
- /*
10952
- * Copyright (c) 2016-2022 VMware, Inc. All Rights Reserved.
10953
- * This software is released under MIT license.
10954
- * The full license information can be found in LICENSE in the root directory of this project.
10955
- */
10956
- // This class is used to convert an internal event
10957
- // to an external event to be emitted.
10958
- class ClrDragEvent {
10959
- constructor(dragEvent) {
10960
- this.dragPosition = dragEvent.dragPosition;
10961
- this.group = dragEvent.group;
10962
- this.dragDataTransfer = dragEvent.dragDataTransfer;
10963
- this.dropPointPosition = dragEvent.dropPointPosition;
10964
- }
10965
- }
10966
-
10967
- /*
10968
- * Copyright (c) 2016-2022 VMware, Inc. All Rights Reserved.
10969
- * This software is released under MIT license.
10970
- * The full license information can be found in LICENSE in the root directory of this project.
10971
- */
10972
- // This structural directive will be used mainly together with `clr-draggable-ghost` directive inside of clrDraggable
10973
- // directive. The directive is responsible for instantiating `clr-draggable-ghost` directive only during dragging so
10974
- // that Angular Change Detection is prevented from running if a component or directive is placed inside of the
10975
- // `clr-draggable-ghost` directive.
10976
- class ClrIfDragged {
10977
- constructor(template, container, dragEventListener) {
10978
- this.template = template;
10979
- this.container = container;
10980
- this.dragEventListener = dragEventListener;
10981
- this.subscriptions = [];
10982
- if (!this.dragEventListener || !this.container) {
10983
- throw new Error('The *clrIfDragged directive can only be used inside of a clrDraggable directive.');
10984
- }
10985
- this.subscriptions.push(this.dragEventListener.dragStarted.subscribe(() => {
10986
- this.container.createEmbeddedView(this.template);
10987
- }));
10988
- this.subscriptions.push(this.dragEventListener.dragEnded.subscribe(() => {
10989
- this.container.clear();
10990
- }));
10991
- }
10992
- ngOnDestroy() {
10993
- this.subscriptions.forEach((sub) => sub.unsubscribe());
10994
- }
10995
- }
10996
- ClrIfDragged.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.0.2", ngImport: i0, type: ClrIfDragged, deps: [{ token: i0.TemplateRef }, { token: i0.ViewContainerRef, optional: true, skipSelf: true }, { token: DragEventListenerService, optional: true }], target: i0.ɵɵFactoryTarget.Directive });
10997
- ClrIfDragged.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "15.0.2", type: ClrIfDragged, selector: "[clrIfDragged]", ngImport: i0 });
10998
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.2", ngImport: i0, type: ClrIfDragged, decorators: [{
10999
- type: Directive,
11000
- args: [{
11001
- selector: '[clrIfDragged]',
11002
- }]
11003
- }], ctorParameters: function () { return [{ type: i0.TemplateRef }, { type: i0.ViewContainerRef, decorators: [{
11004
- type: Optional
11005
- }, {
11006
- type: SkipSelf
11007
- }] }, { type: DragEventListenerService, decorators: [{
11008
- type: Optional
11009
- }] }]; } });
11010
-
11011
- /*
11012
- * Copyright (c) 2016-2022 VMware, Inc. All Rights Reserved.
11013
- * This software is released under MIT license.
11014
- * The full license information can be found in LICENSE in the root directory of this project.
11015
- */
11016
- // This service class adds and removes the "in-drag" class to the document body element
11017
- // through its public enter() and exit() methods.
11018
- class GlobalDragModeService {
11019
- constructor(renderer) {
11020
- this.renderer = renderer;
11021
- }
11022
- enter() {
11023
- this.renderer.addClass(document.body, 'in-drag');
11024
- }
11025
- exit() {
11026
- this.renderer.removeClass(document.body, 'in-drag');
11027
- }
11028
- }
11029
- GlobalDragModeService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.0.2", ngImport: i0, type: GlobalDragModeService, deps: [{ token: i0.Renderer2 }], target: i0.ɵɵFactoryTarget.Injectable });
11030
- GlobalDragModeService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.0.2", ngImport: i0, type: GlobalDragModeService });
11031
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.2", ngImport: i0, type: GlobalDragModeService, decorators: [{
11032
- type: Injectable
11033
- }], ctorParameters: function () { return [{ type: i0.Renderer2 }]; } });
11034
-
11035
- /*
11036
- * Copyright (c) 2016-2022 VMware, Inc. All Rights Reserved.
11037
- * This software is released under MIT license.
11038
- * The full license information can be found in LICENSE in the root directory of this project.
11039
- */
11040
- class ClrDraggable {
11041
- constructor(el, dragEventListener, dragHandleRegistrar, viewContainerRef, cfr, injector, draggableSnapshot, globalDragMode) {
11042
- this.el = el;
11043
- this.dragEventListener = dragEventListener;
11044
- this.dragHandleRegistrar = dragHandleRegistrar;
11045
- this.viewContainerRef = viewContainerRef;
11046
- this.cfr = cfr;
11047
- this.injector = injector;
11048
- this.draggableSnapshot = draggableSnapshot;
11049
- this.globalDragMode = globalDragMode;
11050
- this.subscriptions = [];
11051
- this.dragOn = false;
11052
- this.dragStartEmitter = new EventEmitter();
11053
- this.dragMoveEmitter = new EventEmitter();
11054
- this.dragEndEmitter = new EventEmitter();
11055
- this.draggableEl = this.el.nativeElement;
11056
- this.componentFactory = this.cfr.resolveComponentFactory(ClrDraggableGhost);
11057
- }
11058
- set dataTransfer(value) {
11059
- this.dragEventListener.dragDataTransfer = value;
11060
- }
11061
- set group(value) {
11062
- this.dragEventListener.group = value;
11063
- }
11064
- set dragStartDelay(value) {
11065
- if (typeof value === 'number') {
11066
- this.dragEventListener.dragStartDelay = value;
11067
- }
11068
- else if (typeof value === 'string') {
11069
- this.dragEventListener.dragStartDelay = parseInt(value, 10) || 0;
11070
- }
11071
- }
11072
- createDefaultGhost(event) {
11073
- this.draggableSnapshot.capture(this.draggableEl, event);
11074
- // NOTE: The default ghost element will appear
11075
- // next to the clrDraggable in the DOM as a sibling element.
11076
- this.viewContainerRef.createComponent(this.componentFactory, 0, this.injector, [
11077
- [this.draggableEl.cloneNode(true)],
11078
- ]);
11079
- }
11080
- destroyDefaultGhost() {
11081
- this.viewContainerRef.clear();
11082
- this.draggableSnapshot.discard();
11083
- }
11084
- ngAfterContentInit() {
11085
- this.dragHandleRegistrar.defaultHandleEl = this.draggableEl;
11086
- this.subscriptions.push(this.dragEventListener.dragStarted.subscribe((event) => {
11087
- this.globalDragMode.enter();
11088
- this.dragOn = true;
11089
- if (!this.customGhost) {
11090
- this.createDefaultGhost(event);
11091
- }
11092
- this.dragStartEmitter.emit(new ClrDragEvent(event));
11093
- }));
11094
- this.subscriptions.push(this.dragEventListener.dragMoved.subscribe((event) => {
11095
- this.dragMoveEmitter.emit(new ClrDragEvent(event));
11096
- }));
11097
- this.subscriptions.push(this.dragEventListener.dragEnded.subscribe((event) => {
11098
- this.globalDragMode.exit();
11099
- this.dragOn = false;
11100
- if (!this.customGhost) {
11101
- this.destroyDefaultGhost();
11102
- }
11103
- this.dragEndEmitter.emit(new ClrDragEvent(event));
11104
- }));
11105
- }
11106
- ngOnDestroy() {
11107
- this.subscriptions.forEach((sub) => sub.unsubscribe());
11108
- this.dragEventListener.detachDragListeners();
11109
- }
11110
- }
11111
- ClrDraggable.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.0.2", ngImport: i0, type: ClrDraggable, deps: [{ token: i0.ElementRef }, { token: DragEventListenerService }, { token: DragHandleRegistrarService }, { token: i0.ViewContainerRef }, { token: i0.ComponentFactoryResolver }, { token: i0.Injector }, { token: DraggableSnapshotService }, { token: GlobalDragModeService }], target: i0.ɵɵFactoryTarget.Directive });
11112
- ClrDraggable.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "15.0.2", type: ClrDraggable, selector: "[clrDraggable]", inputs: { dataTransfer: ["clrDraggable", "dataTransfer"], group: ["clrGroup", "group"], dragStartDelay: ["clrDragStartDelay", "dragStartDelay"] }, outputs: { dragStartEmitter: "clrDragStart", dragMoveEmitter: "clrDragMove", dragEndEmitter: "clrDragEnd" }, host: { properties: { "class.draggable": "true", "class.being-dragged": "dragOn" } }, providers: [
11113
- DragEventListenerService,
11114
- DragHandleRegistrarService,
11115
- DraggableSnapshotService,
11116
- GlobalDragModeService,
11117
- DomAdapter,
11118
- ], queries: [{ propertyName: "customGhost", first: true, predicate: ClrIfDragged, descendants: true }], ngImport: i0 });
11119
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.2", ngImport: i0, type: ClrDraggable, decorators: [{
11120
- type: Directive,
11121
- args: [{
11122
- selector: '[clrDraggable]',
11123
- providers: [
11124
- DragEventListenerService,
11125
- DragHandleRegistrarService,
11126
- DraggableSnapshotService,
11127
- GlobalDragModeService,
11128
- DomAdapter,
11129
- ],
11130
- host: { '[class.draggable]': 'true', '[class.being-dragged]': 'dragOn' },
11131
- }]
11132
- }], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: DragEventListenerService }, { type: DragHandleRegistrarService }, { type: i0.ViewContainerRef }, { type: i0.ComponentFactoryResolver }, { type: i0.Injector }, { type: DraggableSnapshotService }, { type: GlobalDragModeService }]; }, propDecorators: { customGhost: [{
11133
- type: ContentChild,
11134
- args: [ClrIfDragged]
11135
- }], dataTransfer: [{
11136
- type: Input,
11137
- args: ['clrDraggable']
11138
- }], group: [{
11139
- type: Input,
11140
- args: ['clrGroup']
11141
- }], dragStartDelay: [{
11142
- type: Input,
11143
- args: ['clrDragStartDelay']
11144
- }], dragStartEmitter: [{
11145
- type: Output,
11146
- args: ['clrDragStart']
11147
- }], dragMoveEmitter: [{
11148
- type: Output,
11149
- args: ['clrDragMove']
11150
- }], dragEndEmitter: [{
11151
- type: Output,
11152
- args: ['clrDragEnd']
11153
- }] } });
11154
-
11155
- /*
11156
- * Copyright (c) 2016-2022 VMware, Inc. All Rights Reserved.
11157
- * This software is released under MIT license.
11158
- * The full license information can be found in LICENSE in the root directory of this project.
11159
- */
11160
- class ClrDroppable {
11161
- constructor(el, eventBus, domAdapter, renderer) {
11162
- this.el = el;
11163
- this.eventBus = eventBus;
11164
- this.domAdapter = domAdapter;
11165
- this.renderer = renderer;
11166
- this.isDraggableMatch = false;
11167
- this._isDraggableOver = false;
11168
- this._dropTolerance = { top: 0, right: 0, bottom: 0, left: 0 };
11169
- this.dragStartEmitter = new EventEmitter();
11170
- this.dragMoveEmitter = new EventEmitter();
11171
- this.dragEndEmitter = new EventEmitter();
11172
- this.dragLeaveEmitter = new EventEmitter();
11173
- this.dragEnterEmitter = new EventEmitter();
11174
- this.dropEmitter = new EventEmitter();
11175
- this.droppableEl = this.el.nativeElement;
11176
- }
11177
- set isDraggableOver(value) {
11178
- // We need to add/remove this draggable-over class via Renderer2
11179
- // because isDraggableOver is set outside of NgZone.
11180
- if (value) {
11181
- this.renderer.addClass(this.droppableEl, 'draggable-over');
11182
- }
11183
- else {
11184
- this.renderer.removeClass(this.droppableEl, 'draggable-over');
11185
- }
11186
- this._isDraggableOver = value;
11187
- }
11188
- set group(value) {
11189
- this._group = value;
11190
- }
11191
- dropToleranceGenerator(top = 0, right = top, bottom = top, left = right) {
11192
- return { top, right, bottom, left };
11193
- }
11194
- set dropTolerance(value) {
11195
- // If user provides an object here and wants to manipulate/update properties individually,
11196
- // the object must be immutable as we generate new object based user's given object.
11197
- if (typeof value === 'number') {
11198
- this._dropTolerance = this.dropToleranceGenerator(value);
11199
- }
11200
- else if (typeof value === 'string') {
11201
- const toleranceValues = value
11202
- .trim()
11203
- .split(/\s+/)
11204
- .map(tolerance => parseInt(tolerance, 10));
11205
- this._dropTolerance = this.dropToleranceGenerator(...toleranceValues);
11206
- }
11207
- else if (value) {
11208
- // The value could be passed in as {left: 20, top: 30 }
11209
- // In this case, the rest of the direction properties should be 0.
11210
- // That's why we initialize properties with 0 first, then override with user's given value.
11211
- this._dropTolerance = { ...this.dropToleranceGenerator(0), ...value };
11212
- }
11213
- }
11214
- unsubscribeFrom(subscription) {
11215
- if (subscription) {
11216
- subscription.unsubscribe();
11217
- }
11218
- }
11219
- checkGroupMatch(draggableGroup) {
11220
- // Both Draggable and Droppable have clrGroup input.
11221
- // The clrGroup input can be both a string key or array of string keys in Draggable and Droppable.
11222
- // It's not match if Draggable has no defined value assigned to clrGroup, but Droppable has a defined clrGroup.
11223
- if (!draggableGroup && this._group) {
11224
- return false;
11225
- }
11226
- // The same is true the other way round.
11227
- if (!this._group && draggableGroup) {
11228
- return false;
11229
- }
11230
- // It's match if both Draggable and Droppable have no assigned value for clrGroup.
11231
- if (!this._group && !draggableGroup) {
11232
- return true;
11233
- }
11234
- // It's match if both Draggable and Droppable have simple string keys that are matching.
11235
- // It's match if Draggable's simple clrGroup key is matching with one of the clrGroup keys of Droppable. The
11236
- // same is true the other way round.
11237
- // it's match if one of the clrGroup keys of Droppable is matching with one of the clrGroup keys of Draggable.
11238
- if (typeof draggableGroup === 'string') {
11239
- if (typeof this._group === 'string') {
11240
- return this._group === draggableGroup;
11241
- }
11242
- else {
11243
- return this._group.indexOf(draggableGroup) > -1;
11244
- }
11245
- }
11246
- else {
11247
- if (typeof this._group === 'string') {
11248
- return draggableGroup.indexOf(this._group) > -1;
11249
- }
11250
- else {
11251
- return this._group.some(groupKey => draggableGroup.indexOf(groupKey) > -1);
11252
- }
11253
- }
11254
- }
11255
- isInDropArea(point) {
11256
- if (!point) {
11257
- return false;
11258
- }
11259
- if (!this.clientRect) {
11260
- this.clientRect = this.domAdapter.clientRect(this.droppableEl);
11261
- }
11262
- if (point.pageX >= this.clientRect.left - this._dropTolerance.left &&
11263
- point.pageX <= this.clientRect.right + this._dropTolerance.right &&
11264
- point.pageY >= this.clientRect.top - this._dropTolerance.top &&
11265
- point.pageY <= this.clientRect.bottom + this._dropTolerance.bottom) {
11266
- return true;
11267
- }
11268
- else {
11269
- return false;
11270
- }
11271
- }
11272
- onDragStart(dragStartEvent) {
11273
- // Check draggable and droppable have a matching group key.
11274
- this.isDraggableMatch = this.checkGroupMatch(dragStartEvent.group);
11275
- // Subscribe to dragMoved and dragEnded only if draggable and droppable have a matching group key.
11276
- if (this.isDraggableMatch) {
11277
- this.dragStartEmitter.emit(new ClrDragEvent(dragStartEvent));
11278
- this.dragMoveSubscription = this.eventBus.dragMoved.subscribe((dragMoveEvent) => {
11279
- this.onDragMove(dragMoveEvent);
11280
- });
11281
- this.dragEndSubscription = this.eventBus.dragEnded.subscribe((dragEndEvent) => {
11282
- this.onDragEnd(dragEndEvent);
11283
- });
11284
- }
11285
- }
11286
- onDragMove(dragMoveEvent) {
11287
- const isInDropArea = this.isInDropArea(dragMoveEvent.dropPointPosition);
11288
- if (!this._isDraggableOver && isInDropArea) {
11289
- this.isDraggableOver = true;
11290
- const dragEnterEvent = { ...dragMoveEvent, type: DragEventType.DRAG_ENTER };
11291
- this.eventBus.broadcast(dragEnterEvent);
11292
- this.dragEnterEmitter.emit(new ClrDragEvent(dragEnterEvent));
11293
- }
11294
- else if (this._isDraggableOver && !isInDropArea) {
11295
- this.isDraggableOver = false;
11296
- const dragLeaveEvent = { ...dragMoveEvent, type: DragEventType.DRAG_LEAVE };
11297
- this.eventBus.broadcast(dragLeaveEvent);
11298
- this.dragLeaveEmitter.emit(new ClrDragEvent(dragLeaveEvent));
11299
- }
11300
- this.dragMoveEmitter.emit(new ClrDragEvent(dragMoveEvent));
11301
- }
11302
- onDragEnd(dragEndEvent) {
11303
- if (this._isDraggableOver) {
11304
- if (dragEndEvent.ghostElement) {
11305
- // By this point, the draggable ghost component is destroyed,
11306
- // but the element would be active until its animation completes.
11307
- // As such, once the ghost is dropped over, we will give it "dropped" class.
11308
- // This process cannot be done in the ghost component
11309
- // because any subscription to the drop event is ineffective or invalid
11310
- // as the component had been already destroyed.
11311
- this.renderer.addClass(dragEndEvent.ghostElement, 'dropped');
11312
- }
11313
- const dropEvent = { ...dragEndEvent, type: DragEventType.DROP };
11314
- this.eventBus.broadcast(dropEvent);
11315
- this.dropEmitter.emit(new ClrDragEvent(dropEvent));
11316
- this.isDraggableOver = false;
11317
- }
11318
- this.dragEndEmitter.emit(new ClrDragEvent(dragEndEvent));
11319
- this.unsubscribeFrom(this.dragMoveSubscription);
11320
- this.unsubscribeFrom(this.dragEndSubscription);
11321
- this.isDraggableMatch = false;
11322
- delete this.clientRect;
10232
+ return { value: this.clrExpandTrigger, params: { startHeight: this.startHeight } };
11323
10233
  }
11324
- ngOnInit() {
11325
- this.dragStartSubscription = this.eventBus.dragStarted.subscribe((dragStartEvent) => {
11326
- this.onDragStart(dragStartEvent);
11327
- });
10234
+ animationDone() {
10235
+ // A "safe" auto-update of the height ensuring basic OOTB user experience .
10236
+ // Prone to small jumps in initial animation height if data was changed in the meantime, window was resized, etc.
10237
+ // For optimal behavior call manually updateStartHeight() from the parent component before initiating the update.
10238
+ this.updateStartHeight();
11328
10239
  }
11329
- ngOnDestroy() {
11330
- this.unsubscribeFrom(this.dragStartSubscription);
11331
- this.unsubscribeFrom(this.dragMoveSubscription);
11332
- this.unsubscribeFrom(this.dragEndSubscription);
10240
+ updateStartHeight() {
10241
+ this.startHeight = this.domAdapter.computedHeight(this.element.nativeElement) || 0;
11333
10242
  }
11334
10243
  }
11335
- ClrDroppable.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.0.2", ngImport: i0, type: ClrDroppable, deps: [{ token: i0.ElementRef }, { token: DragAndDropEventBusService }, { token: DomAdapter }, { token: i0.Renderer2 }], target: i0.ɵɵFactoryTarget.Directive });
11336
- ClrDroppable.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "15.0.2", type: ClrDroppable, selector: "[clrDroppable]", inputs: { group: ["clrGroup", "group"], dropTolerance: ["clrDropTolerance", "dropTolerance"] }, outputs: { dragStartEmitter: "clrDragStart", dragMoveEmitter: "clrDragMove", dragEndEmitter: "clrDragEnd", dragLeaveEmitter: "clrDragLeave", dragEnterEmitter: "clrDragEnter", dropEmitter: "clrDrop" }, host: { properties: { "class.droppable": "true", "class.draggable-match": "isDraggableMatch" } }, providers: [DomAdapter], ngImport: i0 });
11337
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.2", ngImport: i0, type: ClrDroppable, decorators: [{
11338
- type: Directive,
11339
- args: [{
11340
- selector: '[clrDroppable]',
11341
- providers: [DomAdapter],
11342
- host: { '[class.droppable]': 'true', '[class.draggable-match]': 'isDraggableMatch' },
11343
- }]
11344
- }], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: DragAndDropEventBusService }, { type: DomAdapter }, { type: i0.Renderer2 }]; }, propDecorators: { group: [{
11345
- type: Input,
11346
- args: ['clrGroup']
11347
- }], dropTolerance: [{
11348
- type: Input,
11349
- args: ['clrDropTolerance']
11350
- }], dragStartEmitter: [{
11351
- type: Output,
11352
- args: ['clrDragStart']
11353
- }], dragMoveEmitter: [{
11354
- type: Output,
11355
- args: ['clrDragMove']
11356
- }], dragEndEmitter: [{
11357
- type: Output,
11358
- args: ['clrDragEnd']
11359
- }], dragLeaveEmitter: [{
11360
- type: Output,
11361
- args: ['clrDragLeave']
11362
- }], dragEnterEmitter: [{
11363
- type: Output,
11364
- args: ['clrDragEnter']
11365
- }], dropEmitter: [{
11366
- type: Output,
11367
- args: ['clrDrop']
10244
+ ClrExpandableAnimation.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.0.2", ngImport: i0, type: ClrExpandableAnimation, deps: [{ token: i0.ElementRef }, { token: DomAdapter }], target: i0.ɵɵFactoryTarget.Component });
10245
+ ClrExpandableAnimation.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.0.2", type: ClrExpandableAnimation, selector: "clr-expandable-animation", inputs: { clrExpandTrigger: "clrExpandTrigger" }, host: { listeners: { "@expandAnimation.done": "animationDone()" }, properties: { "@expandAnimation": "this.expandAnimation" } }, providers: [DomAdapter], ngImport: i0, template: `<ng-content></ng-content>`, isInline: true, styles: [":host{display:block}\n"], animations: [
10246
+ trigger('expandAnimation', [
10247
+ transition('true <=> false', [
10248
+ style({ height: '{{startHeight}}px', overflow: 'hidden' }),
10249
+ animate('0.2s ease-in-out', style({ height: '*' })),
10250
+ ]),
10251
+ ]),
10252
+ ] });
10253
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.2", ngImport: i0, type: ClrExpandableAnimation, decorators: [{
10254
+ type: Component,
10255
+ args: [{ selector: 'clr-expandable-animation', template: `<ng-content></ng-content>`, animations: [
10256
+ trigger('expandAnimation', [
10257
+ transition('true <=> false', [
10258
+ style({ height: '{{startHeight}}px', overflow: 'hidden' }),
10259
+ animate('0.2s ease-in-out', style({ height: '*' })),
10260
+ ]),
10261
+ ]),
10262
+ ], providers: [DomAdapter], styles: [":host{display:block}\n"] }]
10263
+ }], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: DomAdapter }]; }, propDecorators: { clrExpandTrigger: [{
10264
+ type: Input
10265
+ }], expandAnimation: [{
10266
+ type: HostBinding,
10267
+ args: ['@expandAnimation']
10268
+ }], animationDone: [{
10269
+ type: HostListener,
10270
+ args: ['@expandAnimation.done']
11368
10271
  }] } });
11369
10272
 
11370
10273
  /*
@@ -11372,32 +10275,58 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.2", ngImpor
11372
10275
  * This software is released under MIT license.
11373
10276
  * The full license information can be found in LICENSE in the root directory of this project.
11374
10277
  */
11375
- const CLR_DRAG_AND_DROP_DIRECTIVES = [
11376
- ClrDraggable,
11377
- ClrDroppable,
11378
- ClrIfDragged,
11379
- ClrDragHandle,
11380
- ClrDraggableGhost,
11381
- ];
11382
- class ClrDragAndDropModule {
11383
- }
11384
- ClrDragAndDropModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.0.2", ngImport: i0, type: ClrDragAndDropModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
11385
- ClrDragAndDropModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "15.0.2", ngImport: i0, type: ClrDragAndDropModule, declarations: [ClrDraggable,
11386
- ClrDroppable,
11387
- ClrIfDragged,
11388
- ClrDragHandle,
11389
- ClrDraggableGhost], imports: [CommonModule], exports: [ClrDraggable,
11390
- ClrDroppable,
11391
- ClrIfDragged,
11392
- ClrDragHandle,
11393
- ClrDraggableGhost] });
11394
- ClrDragAndDropModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "15.0.2", ngImport: i0, type: ClrDragAndDropModule, imports: [CommonModule] });
11395
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.2", ngImport: i0, type: ClrDragAndDropModule, decorators: [{
10278
+ const EXPANDABLE_ANIMATION_DIRECTIVES = [ClrExpandableAnimation];
10279
+
10280
+ /*
10281
+ * Copyright (c) 2016-2022 VMware, Inc. All Rights Reserved.
10282
+ * This software is released under MIT license.
10283
+ * The full license information can be found in LICENSE in the root directory of this project.
10284
+ */
10285
+ class ClrExpandableAnimationModule {
10286
+ }
10287
+ ClrExpandableAnimationModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.0.2", ngImport: i0, type: ClrExpandableAnimationModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
10288
+ ClrExpandableAnimationModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "15.0.2", ngImport: i0, type: ClrExpandableAnimationModule, declarations: [ClrExpandableAnimation], imports: [CommonModule], exports: [ClrExpandableAnimation] });
10289
+ ClrExpandableAnimationModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "15.0.2", ngImport: i0, type: ClrExpandableAnimationModule, imports: [CommonModule] });
10290
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.2", ngImport: i0, type: ClrExpandableAnimationModule, decorators: [{
11396
10291
  type: NgModule,
11397
10292
  args: [{
11398
10293
  imports: [CommonModule],
11399
- declarations: [CLR_DRAG_AND_DROP_DIRECTIVES],
11400
- exports: [CLR_DRAG_AND_DROP_DIRECTIVES],
10294
+ declarations: [EXPANDABLE_ANIMATION_DIRECTIVES],
10295
+ exports: [EXPANDABLE_ANIMATION_DIRECTIVES],
10296
+ }]
10297
+ }] });
10298
+
10299
+ /*
10300
+ * Copyright (c) 2016-2022 VMware, Inc. All Rights Reserved.
10301
+ * This software is released under MIT license.
10302
+ * The full license information can be found in LICENSE in the root directory of this project.
10303
+ */
10304
+ /**
10305
+ * This is just a copy of CdkDrag so it can be used independent of the rest of the CdkDragDropModule.
10306
+ */
10307
+ class CdkDragModule_CdkDrag extends CdkDrag {
10308
+ }
10309
+ CdkDragModule_CdkDrag.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.0.2", ngImport: i0, type: CdkDragModule_CdkDrag, deps: null, target: i0.ɵɵFactoryTarget.Directive });
10310
+ CdkDragModule_CdkDrag.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "15.0.2", type: CdkDragModule_CdkDrag, selector: "[cdkDrag]", usesInheritance: true, ngImport: i0 });
10311
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.2", ngImport: i0, type: CdkDragModule_CdkDrag, decorators: [{
10312
+ type: Directive,
10313
+ args: [{
10314
+ selector: '[cdkDrag]',
10315
+ }]
10316
+ }] });
10317
+ /**
10318
+ * This module allows us to avoid importing all of CdkDragDropModule which results in a smaller application bundle.
10319
+ */
10320
+ class CdkDragModule {
10321
+ }
10322
+ CdkDragModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.0.2", ngImport: i0, type: CdkDragModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
10323
+ CdkDragModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "15.0.2", ngImport: i0, type: CdkDragModule, declarations: [CdkDragModule_CdkDrag], exports: [CdkDragModule_CdkDrag] });
10324
+ CdkDragModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "15.0.2", ngImport: i0, type: CdkDragModule });
10325
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.2", ngImport: i0, type: CdkDragModule, decorators: [{
10326
+ type: NgModule,
10327
+ args: [{
10328
+ declarations: [CdkDragModule_CdkDrag],
10329
+ exports: [CdkDragModule_CdkDrag],
11401
10330
  }]
11402
10331
  }] });
11403
10332
 
@@ -12054,7 +10983,7 @@ ClrDatagridFilter.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", vers
12054
10983
  <div
12055
10984
  class="datagrid-filter"
12056
10985
  [id]="popoverId"
12057
- clrFocusTrap
10986
+ cdkTrapFocus
12058
10987
  *clrPopoverContent="open; at: smartPosition; outsideClickToClose: true; scrollToClose: true"
12059
10988
  role="dialog"
12060
10989
  [attr.aria-label]="commonStrings.keys.datagridFilterDialogAriaLabel"
@@ -12067,7 +10996,7 @@ ClrDatagridFilter.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", vers
12067
10996
 
12068
10997
  <ng-content></ng-content>
12069
10998
  </div>
12070
- `, isInline: true, dependencies: [{ kind: "directive", type: CdsIconCustomTag, selector: "cds-icon" }, { kind: "directive", type: ClrPopoverAnchor, selector: "[clrPopoverAnchor]" }, { kind: "directive", type: ClrPopoverCloseButton, selector: "[clrPopoverCloseButton]", outputs: ["clrPopoverOnCloseChange"] }, { kind: "directive", type: ClrPopoverOpenCloseButton, selector: "[clrPopoverOpenCloseButton]", outputs: ["clrPopoverOpenCloseChange"] }, { kind: "directive", type: ClrPopoverContent, selector: "[clrPopoverContent]", inputs: ["clrPopoverContent", "clrPopoverContentAt", "clrPopoverContentOutsideClickToClose", "clrPopoverContentScrollToClose"] }, { kind: "directive", type: FocusTrapDirective, selector: "[clrFocusTrap]", inputs: ["clrFocusTrap"] }] });
10999
+ `, isInline: true, dependencies: [{ kind: "directive", type: CdkTrapFocusModule_CdkTrapFocus, selector: "[cdkTrapFocus]" }, { kind: "directive", type: CdsIconCustomTag, selector: "cds-icon" }, { kind: "directive", type: ClrPopoverAnchor, selector: "[clrPopoverAnchor]" }, { kind: "directive", type: ClrPopoverCloseButton, selector: "[clrPopoverCloseButton]", outputs: ["clrPopoverOnCloseChange"] }, { kind: "directive", type: ClrPopoverOpenCloseButton, selector: "[clrPopoverOpenCloseButton]", outputs: ["clrPopoverOpenCloseChange"] }, { kind: "directive", type: ClrPopoverContent, selector: "[clrPopoverContent]", inputs: ["clrPopoverContent", "clrPopoverContentAt", "clrPopoverContentOutsideClickToClose", "clrPopoverContentScrollToClose"] }] });
12071
11000
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.2", ngImport: i0, type: ClrDatagridFilter, decorators: [{
12072
11001
  type: Component,
12073
11002
  args: [{
@@ -12097,7 +11026,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.2", ngImpor
12097
11026
  <div
12098
11027
  class="datagrid-filter"
12099
11028
  [id]="popoverId"
12100
- clrFocusTrap
11029
+ cdkTrapFocus
12101
11030
  *clrPopoverContent="open; at: smartPosition; outsideClickToClose: true; scrollToClose: true"
12102
11031
  role="dialog"
12103
11032
  [attr.aria-label]="commonStrings.keys.datagridFilterDialogAriaLabel"
@@ -13252,8 +12181,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.2", ngImpor
13252
12181
  // Default resize length on each keyboard move event
13253
12182
  const KEYBOARD_RESIZE_LENGTH = 12;
13254
12183
  class ClrDatagridColumnSeparator {
13255
- // Every column draggable separator should have its own unique ID
13256
- // in order to not conflict with other draggables/droppables.
13257
12184
  constructor(columnResizerService, renderer, ngZone, tableSizeService, commonString, document) {
13258
12185
  this.columnResizerService = columnResizerService;
13259
12186
  this.renderer = renderer;
@@ -13301,6 +12228,7 @@ class ClrDatagridColumnSeparator {
13301
12228
  this.columnResizerService.endResize();
13302
12229
  this.renderer.setStyle(this.resizeTrackerEl, 'display', 'none');
13303
12230
  this.renderer.setStyle(this.resizeTrackerEl, 'transform', `translateX(0px)`);
12231
+ this.renderer.setStyle(this.columnHandleEl, 'transform', `translateX(0px)`);
13304
12232
  this.renderer.setStyle(this.document.body, 'cursor', 'auto');
13305
12233
  }
13306
12234
  showTrackerOnFirstKeyDown(event) {
@@ -13312,9 +12240,11 @@ class ClrDatagridColumnSeparator {
13312
12240
  }
13313
12241
  moveTrackerOnKeyDown(event) {
13314
12242
  if (this.isArrowLeftKeyEvent(event)) {
12243
+ event.stopPropagation();
13315
12244
  this.moveTracker(this.columnResizerService.resizedBy - KEYBOARD_RESIZE_LENGTH);
13316
12245
  }
13317
12246
  else if (this.isArrowRightKeyEvent(event)) {
12247
+ event.stopPropagation();
13318
12248
  this.moveTracker(this.columnResizerService.resizedBy + KEYBOARD_RESIZE_LENGTH);
13319
12249
  }
13320
12250
  }
@@ -13354,18 +12284,18 @@ ClrDatagridColumnSeparator.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0
13354
12284
  class="datagrid-column-handle"
13355
12285
  [attr.aria-label]="commonString.keys.columnSeparatorAriaLabel"
13356
12286
  [attr.aria-describedby]="descriptionId"
13357
- clrDraggable
13358
- [clrGroup]="columnSeparatorId"
13359
- (clrDragStart)="showTracker()"
13360
- (clrDragMove)="moveTracker($event.dragPosition.moveX)"
13361
- (clrDragEnd)="hideTracker()"
12287
+ cdkDrag
12288
+ cdkDragLockAxis="x"
12289
+ (cdkDragStarted)="showTracker()"
12290
+ (cdkDragMoved)="moveTracker($event.distance.x)"
12291
+ (cdkDragEnded)="hideTracker(); $event.source._dragRef.reset()"
13362
12292
  #columnHandle
13363
12293
  ></button>
13364
12294
  <span class="clr-sr-only" [attr.id]="descriptionId">
13365
12295
  {{ commonString.keys.columnSeparatorDescription }}
13366
12296
  </span>
13367
12297
  <div class="datagrid-column-resize-tracker" #resizeTracker></div>
13368
- `, isInline: true, dependencies: [{ kind: "directive", type: ClrDraggable, selector: "[clrDraggable]", inputs: ["clrDraggable", "clrGroup", "clrDragStartDelay"], outputs: ["clrDragStart", "clrDragMove", "clrDragEnd"] }] });
12298
+ `, isInline: true, dependencies: [{ kind: "directive", type: CdkDragModule_CdkDrag, selector: "[cdkDrag]" }] });
13369
12299
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.2", ngImport: i0, type: ClrDatagridColumnSeparator, decorators: [{
13370
12300
  type: Component,
13371
12301
  args: [{
@@ -13376,11 +12306,11 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.2", ngImpor
13376
12306
  class="datagrid-column-handle"
13377
12307
  [attr.aria-label]="commonString.keys.columnSeparatorAriaLabel"
13378
12308
  [attr.aria-describedby]="descriptionId"
13379
- clrDraggable
13380
- [clrGroup]="columnSeparatorId"
13381
- (clrDragStart)="showTracker()"
13382
- (clrDragMove)="moveTracker($event.dragPosition.moveX)"
13383
- (clrDragEnd)="hideTracker()"
12309
+ cdkDrag
12310
+ cdkDragLockAxis="x"
12311
+ (cdkDragStarted)="showTracker()"
12312
+ (cdkDragMoved)="moveTracker($event.distance.x)"
12313
+ (cdkDragEnded)="hideTracker(); $event.source._dragRef.reset()"
13384
12314
  #columnHandle
13385
12315
  ></button>
13386
12316
  <span class="clr-sr-only" [attr.id]="descriptionId">
@@ -13427,18 +12357,6 @@ class ClrDatagridColumn extends DatagridFilterRegistrar {
13427
12357
  * via the [clrDgColType] input by setting it to 'string' or 'number'.
13428
12358
  */
13429
12359
  this._colType = 'string';
13430
- // deprecated: to be removed - START
13431
- /**
13432
- * Indicates if the column is currently sorted
13433
- *
13434
- * @deprecated This will be removed soon, in favor of the sortOrder mechanism
13435
- */
13436
- this._sorted = false;
13437
- /**
13438
- * @deprecated This will be removed soon, in favor of the sortOrder mechanism
13439
- */
13440
- this.sortedChange = new EventEmitter();
13441
- // deprecated: to be removed - END
13442
12360
  /**
13443
12361
  * Indicates how the column is currently sorted
13444
12362
  */
@@ -13474,16 +12392,8 @@ class ClrDatagridColumn extends DatagridFilterRegistrar {
13474
12392
  if (this.sortOrder !== ClrDatagridSortOrder.UNSORTED && sort.comparator !== this._sortBy) {
13475
12393
  this._sortOrder = ClrDatagridSortOrder.UNSORTED;
13476
12394
  this.sortOrderChange.emit(this._sortOrder);
13477
- // removes the sortIcon when column becomes unsorted
13478
- this.sortIcon = null;
13479
12395
  this._sortDirection = null;
13480
12396
  }
13481
- // deprecated: to be removed - START
13482
- if (this.sorted && sort.comparator !== this._sortBy) {
13483
- this._sorted = false;
13484
- this.sortedChange.emit(false);
13485
- }
13486
- // deprecated: to be removed - END
13487
12397
  });
13488
12398
  }
13489
12399
  get colType() {
@@ -13560,21 +12470,6 @@ class ClrDatagridColumn extends DatagridFilterRegistrar {
13560
12470
  get sortable() {
13561
12471
  return !!this._sortBy;
13562
12472
  }
13563
- get sorted() {
13564
- return this._sorted;
13565
- }
13566
- /**
13567
- * @deprecated This will be removed soon, in favor of the sortOrder mechanism
13568
- */
13569
- set sorted(value) {
13570
- if (!value && this.sorted) {
13571
- this._sorted = false;
13572
- this._sort.clear();
13573
- }
13574
- else if (value && !this.sorted) {
13575
- this.sort();
13576
- }
13577
- }
13578
12473
  get sortOrder() {
13579
12474
  return this._sortOrder;
13580
12475
  }
@@ -13626,12 +12521,7 @@ class ClrDatagridColumn extends DatagridFilterRegistrar {
13626
12521
  this._sortOrder = this._sort.reverse ? ClrDatagridSortOrder.DESC : ClrDatagridSortOrder.ASC;
13627
12522
  // Sets the correct icon for current sort order
13628
12523
  this._sortDirection = this._sortOrder === ClrDatagridSortOrder.DESC ? 'down' : 'up';
13629
- this.sortIcon = this._sortOrder === ClrDatagridSortOrder.DESC ? 'arrow down' : 'arrow'; // Backward compatibility
13630
12524
  this.sortOrderChange.emit(this._sortOrder);
13631
- // deprecated: to be removed - START
13632
- this._sorted = true;
13633
- this.sortedChange.emit(true);
13634
- // deprecated: to be removed - END
13635
12525
  }
13636
12526
  set projectedFilter(custom) {
13637
12527
  if (custom) {
@@ -13699,7 +12589,7 @@ class ClrDatagridColumn extends DatagridFilterRegistrar {
13699
12589
  }
13700
12590
  }
13701
12591
  ClrDatagridColumn.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.0.2", ngImport: i0, type: ClrDatagridColumn, deps: [{ token: Sort }, { token: FiltersProvider }, { token: i0.ViewContainerRef }, { token: DetailService }, { token: i0.ChangeDetectorRef }, { token: ClrCommonStringsService }], target: i0.ɵɵFactoryTarget.Component });
13702
- ClrDatagridColumn.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.0.2", type: ClrDatagridColumn, selector: "clr-dg-column", inputs: { colType: ["clrDgColType", "colType"], field: ["clrDgField", "field"], sortBy: ["clrDgSortBy", "sortBy"], sorted: ["clrDgSorted", "sorted"], sortOrder: ["clrDgSortOrder", "sortOrder"], filterStringPlaceholder: ["clrFilterStringPlaceholder", "filterStringPlaceholder"], filterNumberMaxPlaceholder: ["clrFilterNumberMaxPlaceholder", "filterNumberMaxPlaceholder"], filterNumberMinPlaceholder: ["clrFilterNumberMinPlaceholder", "filterNumberMinPlaceholder"], updateFilterValue: ["clrFilterValue", "updateFilterValue"] }, outputs: { sortedChange: "clrDgSortedChange", sortOrderChange: "clrDgSortOrderChange", filterValueChange: "clrFilterValueChange" }, host: { attributes: { "role": "columnheader" }, properties: { "class.datagrid-column": "true", "attr.aria-sort": "ariaSort" } }, providers: [ClrPopoverPositionService, ClrPopoverEventsService, ClrPopoverToggleService], queries: [{ propertyName: "projectedFilter", first: true, predicate: CustomFilter, descendants: true }], usesInheritance: true, usesOnChanges: true, ngImport: i0, template: `
12592
+ ClrDatagridColumn.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.0.2", type: ClrDatagridColumn, selector: "clr-dg-column", inputs: { colType: ["clrDgColType", "colType"], field: ["clrDgField", "field"], sortBy: ["clrDgSortBy", "sortBy"], sortOrder: ["clrDgSortOrder", "sortOrder"], filterStringPlaceholder: ["clrFilterStringPlaceholder", "filterStringPlaceholder"], filterNumberMaxPlaceholder: ["clrFilterNumberMaxPlaceholder", "filterNumberMaxPlaceholder"], filterNumberMinPlaceholder: ["clrFilterNumberMinPlaceholder", "filterNumberMinPlaceholder"], updateFilterValue: ["clrFilterValue", "updateFilterValue"] }, outputs: { sortOrderChange: "clrDgSortOrderChange", filterValueChange: "clrFilterValueChange" }, host: { attributes: { "role": "columnheader" }, properties: { "class.datagrid-column": "true", "attr.aria-sort": "ariaSort" } }, providers: [ClrPopoverPositionService, ClrPopoverEventsService, ClrPopoverToggleService], queries: [{ propertyName: "projectedFilter", first: true, predicate: CustomFilter, descendants: true }], usesInheritance: true, usesOnChanges: true, ngImport: i0, template: `
13703
12593
  <div class="datagrid-column-flex">
13704
12594
  <button class="datagrid-column-title" *ngIf="sortable" (click)="sort()" type="button">
13705
12595
  <ng-container *ngTemplateOutlet="columnTitle"></ng-container>
@@ -13802,12 +12692,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.2", ngImpor
13802
12692
  }], sortBy: [{
13803
12693
  type: Input,
13804
12694
  args: ['clrDgSortBy']
13805
- }], sorted: [{
13806
- type: Input,
13807
- args: ['clrDgSorted']
13808
- }], sortedChange: [{
13809
- type: Output,
13810
- args: ['clrDgSortedChange']
13811
12695
  }], sortOrder: [{
13812
12696
  type: Input,
13813
12697
  args: ['clrDgSortOrder']
@@ -15103,7 +13987,7 @@ ClrDatagridRow.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version
15103
13987
  DatagridIfExpandService,
15104
13988
  { provide: IfExpandService, useExisting: DatagridIfExpandService },
15105
13989
  { provide: LoadingListener, useExisting: DatagridIfExpandService },
15106
- ], queries: [{ propertyName: "dgCells", predicate: ClrDatagridCell }], viewQueries: [{ propertyName: "expandAnimation", first: true, predicate: ClrExpandableAnimation, descendants: true }, { propertyName: "detailButton", first: true, predicate: ["detailButton"], descendants: true }, { propertyName: "_stickyCells", first: true, predicate: ["stickyCells"], descendants: true, read: ViewContainerRef }, { propertyName: "_scrollableCells", first: true, predicate: ["scrollableCells"], descendants: true, read: ViewContainerRef }, { propertyName: "_calculatedCells", first: true, predicate: ["calculatedCells"], descendants: true, read: ViewContainerRef }], ngImport: i0, template: "<!--\n We need to wrap the #rowContent in label element if we are in rowSelectionMode.\n Clicking of that wrapper label will equate to clicking on the whole row, which triggers the checkbox to toggle.\n-->\n<label class=\"datagrid-row-clickable\" *ngIf=\"selection.rowSelectionMode\" (mousedown)=\"clearRanges($event)\">\n <clr-expandable-animation [clrExpandTrigger]=\"expandAnimationTrigger\" *ngIf=\"expand.expandable\">\n <ng-template [ngTemplateOutlet]=\"rowContent\"></ng-template>\n </clr-expandable-animation>\n <ng-template [ngTemplateOutlet]=\"rowContent\" *ngIf=\"!expand.expandable\"></ng-template>\n</label>\n\n<clr-expandable-animation\n *ngIf=\"!selection.rowSelectionMode && expand.expandable\"\n [clrExpandTrigger]=\"expandAnimationTrigger\"\n>\n <ng-template [ngTemplateOutlet]=\"rowContent\"></ng-template>\n</clr-expandable-animation>\n\n<ng-template *ngIf=\"!selection.rowSelectionMode && !expand.expandable\" [ngTemplateOutlet]=\"rowContent\"></ng-template>\n\n<!--\n We need the \"project into template\" hacks because we need this in 2 different places\n depending on whether the details replace the row or not.\n-->\n<ng-template #detail>\n <ng-content select=\"clr-dg-row-detail\"></ng-content>\n</ng-template>\n\n<ng-template #rowContent>\n <div\n role=\"row\"\n [id]=\"id\"\n class=\"datagrid-row-master datagrid-row-flex\"\n [class.datagrid-row-detail-open]=\"detailService.isRowOpen(item)\"\n >\n <div class=\"datagrid-row-sticky\">\n <!-- Sticky elements here -->\n <ng-container #stickyCells>\n <div\n *ngIf=\"selection.selectionType === SELECTION_TYPE.Multi\"\n class=\"datagrid-select datagrid-fixed-column datagrid-cell\"\n [ngClass]=\"{ 'clr-form-control-disabled': !clrDgSelectable }\"\n role=\"gridcell\"\n >\n <div class=\"clr-checkbox-wrapper\">\n <input\n type=\"checkbox\"\n [ngModel]=\"selected\"\n (ngModelChange)=\"toggle($event)\"\n [id]=\"checkboxId\"\n [attr.disabled]=\"clrDgSelectable ? null : true\"\n [attr.aria-disabled]=\"clrDgSelectable ? null : true\"\n [attr.aria-label]=\"clrDgRowAriaLabel\"\n />\n <!-- Usage of class clr-col-null here prevents clr-col-* classes from being added when a datagrid is wrapped inside clrForm -->\n <label [for]=\"checkboxId\" class=\"clr-control-label clr-col-null\" (click)=\"clearRanges($event)\">\n <span class=\"clr-sr-only\">{{commonStrings.keys.select}}</span>\n </label>\n </div>\n </div>\n <div\n *ngIf=\"selection.selectionType === SELECTION_TYPE.Single\"\n class=\"datagrid-select datagrid-fixed-column datagrid-cell\"\n role=\"gridcell\"\n [ngClass]=\"{ 'clr-form-control-disabled': !clrDgSelectable }\"\n >\n <!-- TODO: it would be better if in addition to the generic \"Select\" label, we could add aria-labelledby\n to label the radio by the first cell in the row (typically an id or name).\n It's pretty easy to label it with the whole row since we already have an id for it, but in most\n cases the row is far too long to serve as a label, the screenreader reads every single cell content. -->\n <input\n type=\"radio\"\n clrRadio\n [id]=\"radioId\"\n [name]=\"selection.id + '-radio'\"\n [value]=\"item\"\n [(ngModel)]=\"selection.currentSingle\"\n [checked]=\"selection.currentSingle === item\"\n [attr.disabled]=\"clrDgSelectable ? null : true\"\n [attr.aria-disabled]=\"clrDgSelectable ? null : true\"\n [attr.aria-label]=\"clrDgRowAriaLabel\"\n />\n </div>\n <div\n *ngIf=\"rowActionService.hasActionableRow\"\n class=\"datagrid-row-actions datagrid-fixed-column datagrid-cell\"\n role=\"gridcell\"\n >\n <ng-content select=\"clr-dg-action-overflow\"></ng-content>\n </div>\n <div\n *ngIf=\"globalExpandable.hasExpandableRow\"\n class=\"datagrid-expandable-caret datagrid-fixed-column datagrid-cell\"\n role=\"gridcell\"\n >\n <ng-container *ngIf=\"expand.expandable\">\n <button\n *ngIf=\"!expand.loading\"\n (click)=\"toggleExpand()\"\n type=\"button\"\n class=\"datagrid-expandable-caret-button\"\n [attr.aria-expanded]=\"expand.expanded\"\n [attr.aria-label]=\"expand.expanded ? clrDgDetailCloseLabel : clrDgDetailOpenLabel\"\n [attr.aria-controls]=\"expandableId\"\n >\n <cds-icon\n shape=\"angle\"\n class=\"datagrid-expandable-caret-icon\"\n [attr.direction]=\"expand.expanded ? 'down' : 'right'\"\n [attr.title]=\"expand.expanded ? commonStrings.keys.collapse : commonStrings.keys.expand\"\n ></cds-icon>\n </button>\n <clr-spinner *ngIf=\"expand.loading\" clrSmall>{{ commonStrings.keys.loading }}</clr-spinner>\n </ng-container>\n </div>\n <div *ngIf=\"detailService.enabled\" class=\"datagrid-detail-caret datagrid-fixed-column datagrid-cell\">\n <button\n (click)=\"detailService.toggle(item, detailButton)\"\n type=\"button\"\n #detailButton\n class=\"datagrid-detail-caret-button\"\n [class.is-open]=\"detailService.isRowOpen(item)\"\n [attr.aria-label]=\"detailService.isRowOpen(item) ? clrDgDetailCloseLabel : clrDgDetailOpenLabel\"\n [attr.aria-expanded]=\"detailService.isOpen\"\n [attr.aria-controls]=\"detailService.id\"\n aria-haspopup=\"dialog\"\n >\n <cds-icon\n shape=\"angle-double\"\n [attr.direction]=\"detailService.isRowOpen(item) ? 'left' : 'right'\"\n class=\"datagrid-detail-caret-icon\"\n [attr.title]=\"detailService.isRowOpen(item) ? commonStrings.keys.close: commonStrings.keys.open\"\n ></cds-icon>\n </button>\n </div>\n </ng-container>\n <!-- placeholder for projecting other sticky cells as pinned-->\n </div>\n <div class=\"datagrid-row-scrollable\" [ngClass]=\"{'is-replaced': replaced && expanded}\">\n <div class=\"datagrid-scrolling-cells\">\n <ng-content select=\"clr-dg-cell\"></ng-content>\n <ng-container #scrollableCells></ng-container>\n </div>\n <!-- details here when replace, re-visit when sticky container is used for pinned cells -->\n <ng-template *ngIf=\"replaced && !expand.loading\" [ngTemplateOutlet]=\"detail\"></ng-template>\n <ng-template *ngIf=\"!replaced && !expand.loading\" [ngTemplateOutlet]=\"detail\"></ng-template>\n </div>\n </div>\n</ng-template>\n\n<ng-container #calculatedCells></ng-container>\n", dependencies: [{ kind: "directive", type: i5.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i5.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: CdsIconCustomTag, selector: "cds-icon" }, { kind: "directive", type: ClrLabel, selector: "label", inputs: ["for"] }, { kind: "directive", type: ClrRadio, selector: "[clrRadio]" }, { kind: "directive", type: i1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1.CheckboxControlValueAccessor, selector: "input[type=checkbox][formControlName],input[type=checkbox][formControl],input[type=checkbox][ngModel]" }, { kind: "directive", type: i1.RadioControlValueAccessor, selector: "input[type=radio][formControlName],input[type=radio][formControl],input[type=radio][ngModel]", inputs: ["name", "formControlName", "value"] }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: ClrExpandableAnimation, selector: "clr-expandable-animation", inputs: ["clrExpandTrigger"] }, { kind: "component", type: ClrSpinner, selector: "clr-spinner", inputs: ["clrInline", "clrInverse", "clrSmall", "clrMedium"] }] });
13990
+ ], queries: [{ propertyName: "dgCells", predicate: ClrDatagridCell }], viewQueries: [{ propertyName: "expandAnimation", first: true, predicate: ClrExpandableAnimation, descendants: true }, { propertyName: "detailButton", first: true, predicate: ["detailButton"], descendants: true }, { propertyName: "_stickyCells", first: true, predicate: ["stickyCells"], descendants: true, read: ViewContainerRef }, { propertyName: "_scrollableCells", first: true, predicate: ["scrollableCells"], descendants: true, read: ViewContainerRef }, { propertyName: "_calculatedCells", first: true, predicate: ["calculatedCells"], descendants: true, read: ViewContainerRef }], ngImport: i0, template: "<!--\n We need to wrap the #rowContent in label element if we are in rowSelectionMode.\n Clicking of that wrapper label will equate to clicking on the whole row, which triggers the checkbox to toggle.\n-->\n<label class=\"datagrid-row-clickable clr-col-null\" *ngIf=\"selection.rowSelectionMode\" (mousedown)=\"clearRanges($event)\">\n <clr-expandable-animation [clrExpandTrigger]=\"expandAnimationTrigger\" *ngIf=\"expand.expandable\">\n <ng-template [ngTemplateOutlet]=\"rowContent\"></ng-template>\n </clr-expandable-animation>\n <ng-template [ngTemplateOutlet]=\"rowContent\" *ngIf=\"!expand.expandable\"></ng-template>\n</label>\n\n<clr-expandable-animation\n *ngIf=\"!selection.rowSelectionMode && expand.expandable\"\n [clrExpandTrigger]=\"expandAnimationTrigger\"\n>\n <ng-template [ngTemplateOutlet]=\"rowContent\"></ng-template>\n</clr-expandable-animation>\n\n<ng-template *ngIf=\"!selection.rowSelectionMode && !expand.expandable\" [ngTemplateOutlet]=\"rowContent\"></ng-template>\n\n<!--\n We need the \"project into template\" hacks because we need this in 2 different places\n depending on whether the details replace the row or not.\n-->\n<ng-template #detail>\n <ng-content select=\"clr-dg-row-detail\"></ng-content>\n</ng-template>\n\n<ng-template #rowContent>\n <div\n role=\"row\"\n [id]=\"id\"\n class=\"datagrid-row-master datagrid-row-flex\"\n [class.datagrid-row-detail-open]=\"detailService.isRowOpen(item)\"\n >\n <div class=\"datagrid-row-sticky\">\n <!-- Sticky elements here -->\n <ng-container #stickyCells>\n <div\n *ngIf=\"selection.selectionType === SELECTION_TYPE.Multi\"\n class=\"datagrid-select datagrid-fixed-column datagrid-cell\"\n [ngClass]=\"{ 'clr-form-control-disabled': !clrDgSelectable }\"\n role=\"gridcell\"\n >\n <div class=\"clr-checkbox-wrapper\">\n <input\n type=\"checkbox\"\n [ngModel]=\"selected\"\n (ngModelChange)=\"toggle($event)\"\n [id]=\"checkboxId\"\n [attr.disabled]=\"clrDgSelectable ? null : true\"\n [attr.aria-disabled]=\"clrDgSelectable ? null : true\"\n [attr.aria-label]=\"clrDgRowAriaLabel\"\n />\n <!-- Usage of class clr-col-null here prevents clr-col-* classes from being added when a datagrid is wrapped inside clrForm -->\n <label [for]=\"checkboxId\" class=\"clr-control-label clr-col-null\" (click)=\"clearRanges($event)\">\n <span class=\"clr-sr-only\">{{commonStrings.keys.select}}</span>\n </label>\n </div>\n </div>\n <div\n *ngIf=\"selection.selectionType === SELECTION_TYPE.Single\"\n class=\"datagrid-select datagrid-fixed-column datagrid-cell\"\n role=\"gridcell\"\n [ngClass]=\"{ 'clr-form-control-disabled': !clrDgSelectable }\"\n >\n <!-- TODO: it would be better if in addition to the generic \"Select\" label, we could add aria-labelledby\n to label the radio by the first cell in the row (typically an id or name).\n It's pretty easy to label it with the whole row since we already have an id for it, but in most\n cases the row is far too long to serve as a label, the screenreader reads every single cell content. -->\n <input\n type=\"radio\"\n clrRadio\n [id]=\"radioId\"\n [name]=\"selection.id + '-radio'\"\n [value]=\"item\"\n [(ngModel)]=\"selection.currentSingle\"\n [checked]=\"selection.currentSingle === item\"\n [attr.disabled]=\"clrDgSelectable ? null : true\"\n [attr.aria-disabled]=\"clrDgSelectable ? null : true\"\n [attr.aria-label]=\"clrDgRowAriaLabel\"\n />\n </div>\n <div\n *ngIf=\"rowActionService.hasActionableRow\"\n class=\"datagrid-row-actions datagrid-fixed-column datagrid-cell\"\n role=\"gridcell\"\n >\n <ng-content select=\"clr-dg-action-overflow\"></ng-content>\n </div>\n <div\n *ngIf=\"globalExpandable.hasExpandableRow\"\n class=\"datagrid-expandable-caret datagrid-fixed-column datagrid-cell\"\n role=\"gridcell\"\n >\n <ng-container *ngIf=\"expand.expandable\">\n <button\n *ngIf=\"!expand.loading\"\n (click)=\"toggleExpand()\"\n type=\"button\"\n class=\"datagrid-expandable-caret-button\"\n [attr.aria-expanded]=\"expand.expanded\"\n [attr.aria-label]=\"expand.expanded ? clrDgDetailCloseLabel : clrDgDetailOpenLabel\"\n [attr.aria-controls]=\"expandableId\"\n >\n <cds-icon\n shape=\"angle\"\n class=\"datagrid-expandable-caret-icon\"\n [attr.direction]=\"expand.expanded ? 'down' : 'right'\"\n [attr.title]=\"expand.expanded ? commonStrings.keys.collapse : commonStrings.keys.expand\"\n ></cds-icon>\n </button>\n <clr-spinner *ngIf=\"expand.loading\" clrSmall>{{ commonStrings.keys.loading }}</clr-spinner>\n </ng-container>\n </div>\n <div *ngIf=\"detailService.enabled\" class=\"datagrid-detail-caret datagrid-fixed-column datagrid-cell\">\n <button\n (click)=\"detailService.toggle(item, detailButton)\"\n type=\"button\"\n #detailButton\n class=\"datagrid-detail-caret-button\"\n [class.is-open]=\"detailService.isRowOpen(item)\"\n [attr.aria-label]=\"detailService.isRowOpen(item) ? clrDgDetailCloseLabel : clrDgDetailOpenLabel\"\n [attr.aria-expanded]=\"detailService.isOpen\"\n [attr.aria-controls]=\"detailService.id\"\n aria-haspopup=\"dialog\"\n >\n <cds-icon\n shape=\"angle-double\"\n [attr.direction]=\"detailService.isRowOpen(item) ? 'left' : 'right'\"\n class=\"datagrid-detail-caret-icon\"\n [attr.title]=\"detailService.isRowOpen(item) ? commonStrings.keys.close: commonStrings.keys.open\"\n ></cds-icon>\n </button>\n </div>\n </ng-container>\n <!-- placeholder for projecting other sticky cells as pinned-->\n </div>\n <div class=\"datagrid-row-scrollable\" [ngClass]=\"{'is-replaced': replaced && expanded}\">\n <div class=\"datagrid-scrolling-cells\">\n <ng-content select=\"clr-dg-cell\"></ng-content>\n <ng-container #scrollableCells></ng-container>\n </div>\n <!-- details here when replace, re-visit when sticky container is used for pinned cells -->\n <ng-template *ngIf=\"replaced && !expand.loading\" [ngTemplateOutlet]=\"detail\"></ng-template>\n <ng-template *ngIf=\"!replaced && !expand.loading\" [ngTemplateOutlet]=\"detail\"></ng-template>\n </div>\n </div>\n</ng-template>\n\n<ng-container #calculatedCells></ng-container>\n", dependencies: [{ kind: "directive", type: i5.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i5.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: CdsIconCustomTag, selector: "cds-icon" }, { kind: "directive", type: ClrLabel, selector: "label", inputs: ["for"] }, { kind: "directive", type: ClrRadio, selector: "[clrRadio]" }, { kind: "directive", type: i1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1.CheckboxControlValueAccessor, selector: "input[type=checkbox][formControlName],input[type=checkbox][formControl],input[type=checkbox][ngModel]" }, { kind: "directive", type: i1.RadioControlValueAccessor, selector: "input[type=radio][formControlName],input[type=radio][formControl],input[type=radio][ngModel]", inputs: ["name", "formControlName", "value"] }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: ClrExpandableAnimation, selector: "clr-expandable-animation", inputs: ["clrExpandTrigger"] }, { kind: "component", type: ClrSpinner, selector: "clr-spinner", inputs: ["clrInline", "clrInverse", "clrSmall", "clrMedium"] }] });
15107
13991
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.2", ngImport: i0, type: ClrDatagridRow, decorators: [{
15108
13992
  type: Component,
15109
13993
  args: [{ selector: 'clr-dg-row', host: {
@@ -15115,7 +13999,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.2", ngImpor
15115
13999
  DatagridIfExpandService,
15116
14000
  { provide: IfExpandService, useExisting: DatagridIfExpandService },
15117
14001
  { provide: LoadingListener, useExisting: DatagridIfExpandService },
15118
- ], template: "<!--\n We need to wrap the #rowContent in label element if we are in rowSelectionMode.\n Clicking of that wrapper label will equate to clicking on the whole row, which triggers the checkbox to toggle.\n-->\n<label class=\"datagrid-row-clickable\" *ngIf=\"selection.rowSelectionMode\" (mousedown)=\"clearRanges($event)\">\n <clr-expandable-animation [clrExpandTrigger]=\"expandAnimationTrigger\" *ngIf=\"expand.expandable\">\n <ng-template [ngTemplateOutlet]=\"rowContent\"></ng-template>\n </clr-expandable-animation>\n <ng-template [ngTemplateOutlet]=\"rowContent\" *ngIf=\"!expand.expandable\"></ng-template>\n</label>\n\n<clr-expandable-animation\n *ngIf=\"!selection.rowSelectionMode && expand.expandable\"\n [clrExpandTrigger]=\"expandAnimationTrigger\"\n>\n <ng-template [ngTemplateOutlet]=\"rowContent\"></ng-template>\n</clr-expandable-animation>\n\n<ng-template *ngIf=\"!selection.rowSelectionMode && !expand.expandable\" [ngTemplateOutlet]=\"rowContent\"></ng-template>\n\n<!--\n We need the \"project into template\" hacks because we need this in 2 different places\n depending on whether the details replace the row or not.\n-->\n<ng-template #detail>\n <ng-content select=\"clr-dg-row-detail\"></ng-content>\n</ng-template>\n\n<ng-template #rowContent>\n <div\n role=\"row\"\n [id]=\"id\"\n class=\"datagrid-row-master datagrid-row-flex\"\n [class.datagrid-row-detail-open]=\"detailService.isRowOpen(item)\"\n >\n <div class=\"datagrid-row-sticky\">\n <!-- Sticky elements here -->\n <ng-container #stickyCells>\n <div\n *ngIf=\"selection.selectionType === SELECTION_TYPE.Multi\"\n class=\"datagrid-select datagrid-fixed-column datagrid-cell\"\n [ngClass]=\"{ 'clr-form-control-disabled': !clrDgSelectable }\"\n role=\"gridcell\"\n >\n <div class=\"clr-checkbox-wrapper\">\n <input\n type=\"checkbox\"\n [ngModel]=\"selected\"\n (ngModelChange)=\"toggle($event)\"\n [id]=\"checkboxId\"\n [attr.disabled]=\"clrDgSelectable ? null : true\"\n [attr.aria-disabled]=\"clrDgSelectable ? null : true\"\n [attr.aria-label]=\"clrDgRowAriaLabel\"\n />\n <!-- Usage of class clr-col-null here prevents clr-col-* classes from being added when a datagrid is wrapped inside clrForm -->\n <label [for]=\"checkboxId\" class=\"clr-control-label clr-col-null\" (click)=\"clearRanges($event)\">\n <span class=\"clr-sr-only\">{{commonStrings.keys.select}}</span>\n </label>\n </div>\n </div>\n <div\n *ngIf=\"selection.selectionType === SELECTION_TYPE.Single\"\n class=\"datagrid-select datagrid-fixed-column datagrid-cell\"\n role=\"gridcell\"\n [ngClass]=\"{ 'clr-form-control-disabled': !clrDgSelectable }\"\n >\n <!-- TODO: it would be better if in addition to the generic \"Select\" label, we could add aria-labelledby\n to label the radio by the first cell in the row (typically an id or name).\n It's pretty easy to label it with the whole row since we already have an id for it, but in most\n cases the row is far too long to serve as a label, the screenreader reads every single cell content. -->\n <input\n type=\"radio\"\n clrRadio\n [id]=\"radioId\"\n [name]=\"selection.id + '-radio'\"\n [value]=\"item\"\n [(ngModel)]=\"selection.currentSingle\"\n [checked]=\"selection.currentSingle === item\"\n [attr.disabled]=\"clrDgSelectable ? null : true\"\n [attr.aria-disabled]=\"clrDgSelectable ? null : true\"\n [attr.aria-label]=\"clrDgRowAriaLabel\"\n />\n </div>\n <div\n *ngIf=\"rowActionService.hasActionableRow\"\n class=\"datagrid-row-actions datagrid-fixed-column datagrid-cell\"\n role=\"gridcell\"\n >\n <ng-content select=\"clr-dg-action-overflow\"></ng-content>\n </div>\n <div\n *ngIf=\"globalExpandable.hasExpandableRow\"\n class=\"datagrid-expandable-caret datagrid-fixed-column datagrid-cell\"\n role=\"gridcell\"\n >\n <ng-container *ngIf=\"expand.expandable\">\n <button\n *ngIf=\"!expand.loading\"\n (click)=\"toggleExpand()\"\n type=\"button\"\n class=\"datagrid-expandable-caret-button\"\n [attr.aria-expanded]=\"expand.expanded\"\n [attr.aria-label]=\"expand.expanded ? clrDgDetailCloseLabel : clrDgDetailOpenLabel\"\n [attr.aria-controls]=\"expandableId\"\n >\n <cds-icon\n shape=\"angle\"\n class=\"datagrid-expandable-caret-icon\"\n [attr.direction]=\"expand.expanded ? 'down' : 'right'\"\n [attr.title]=\"expand.expanded ? commonStrings.keys.collapse : commonStrings.keys.expand\"\n ></cds-icon>\n </button>\n <clr-spinner *ngIf=\"expand.loading\" clrSmall>{{ commonStrings.keys.loading }}</clr-spinner>\n </ng-container>\n </div>\n <div *ngIf=\"detailService.enabled\" class=\"datagrid-detail-caret datagrid-fixed-column datagrid-cell\">\n <button\n (click)=\"detailService.toggle(item, detailButton)\"\n type=\"button\"\n #detailButton\n class=\"datagrid-detail-caret-button\"\n [class.is-open]=\"detailService.isRowOpen(item)\"\n [attr.aria-label]=\"detailService.isRowOpen(item) ? clrDgDetailCloseLabel : clrDgDetailOpenLabel\"\n [attr.aria-expanded]=\"detailService.isOpen\"\n [attr.aria-controls]=\"detailService.id\"\n aria-haspopup=\"dialog\"\n >\n <cds-icon\n shape=\"angle-double\"\n [attr.direction]=\"detailService.isRowOpen(item) ? 'left' : 'right'\"\n class=\"datagrid-detail-caret-icon\"\n [attr.title]=\"detailService.isRowOpen(item) ? commonStrings.keys.close: commonStrings.keys.open\"\n ></cds-icon>\n </button>\n </div>\n </ng-container>\n <!-- placeholder for projecting other sticky cells as pinned-->\n </div>\n <div class=\"datagrid-row-scrollable\" [ngClass]=\"{'is-replaced': replaced && expanded}\">\n <div class=\"datagrid-scrolling-cells\">\n <ng-content select=\"clr-dg-cell\"></ng-content>\n <ng-container #scrollableCells></ng-container>\n </div>\n <!-- details here when replace, re-visit when sticky container is used for pinned cells -->\n <ng-template *ngIf=\"replaced && !expand.loading\" [ngTemplateOutlet]=\"detail\"></ng-template>\n <ng-template *ngIf=\"!replaced && !expand.loading\" [ngTemplateOutlet]=\"detail\"></ng-template>\n </div>\n </div>\n</ng-template>\n\n<ng-container #calculatedCells></ng-container>\n" }]
14002
+ ], 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 clr-col-null\" *ngIf=\"selection.rowSelectionMode\" (mousedown)=\"clearRanges($event)\">\n <clr-expandable-animation [clrExpandTrigger]=\"expandAnimationTrigger\" *ngIf=\"expand.expandable\">\n <ng-template [ngTemplateOutlet]=\"rowContent\"></ng-template>\n </clr-expandable-animation>\n <ng-template [ngTemplateOutlet]=\"rowContent\" *ngIf=\"!expand.expandable\"></ng-template>\n</label>\n\n<clr-expandable-animation\n *ngIf=\"!selection.rowSelectionMode && expand.expandable\"\n [clrExpandTrigger]=\"expandAnimationTrigger\"\n>\n <ng-template [ngTemplateOutlet]=\"rowContent\"></ng-template>\n</clr-expandable-animation>\n\n<ng-template *ngIf=\"!selection.rowSelectionMode && !expand.expandable\" [ngTemplateOutlet]=\"rowContent\"></ng-template>\n\n<!--\n We need the \"project into template\" hacks because we need this in 2 different places\n depending on whether the details replace the row or not.\n-->\n<ng-template #detail>\n <ng-content select=\"clr-dg-row-detail\"></ng-content>\n</ng-template>\n\n<ng-template #rowContent>\n <div\n role=\"row\"\n [id]=\"id\"\n class=\"datagrid-row-master datagrid-row-flex\"\n [class.datagrid-row-detail-open]=\"detailService.isRowOpen(item)\"\n >\n <div class=\"datagrid-row-sticky\">\n <!-- Sticky elements here -->\n <ng-container #stickyCells>\n <div\n *ngIf=\"selection.selectionType === SELECTION_TYPE.Multi\"\n class=\"datagrid-select datagrid-fixed-column datagrid-cell\"\n [ngClass]=\"{ 'clr-form-control-disabled': !clrDgSelectable }\"\n role=\"gridcell\"\n >\n <div class=\"clr-checkbox-wrapper\">\n <input\n type=\"checkbox\"\n [ngModel]=\"selected\"\n (ngModelChange)=\"toggle($event)\"\n [id]=\"checkboxId\"\n [attr.disabled]=\"clrDgSelectable ? null : true\"\n [attr.aria-disabled]=\"clrDgSelectable ? null : true\"\n [attr.aria-label]=\"clrDgRowAriaLabel\"\n />\n <!-- Usage of class clr-col-null here prevents clr-col-* classes from being added when a datagrid is wrapped inside clrForm -->\n <label [for]=\"checkboxId\" class=\"clr-control-label clr-col-null\" (click)=\"clearRanges($event)\">\n <span class=\"clr-sr-only\">{{commonStrings.keys.select}}</span>\n </label>\n </div>\n </div>\n <div\n *ngIf=\"selection.selectionType === SELECTION_TYPE.Single\"\n class=\"datagrid-select datagrid-fixed-column datagrid-cell\"\n role=\"gridcell\"\n [ngClass]=\"{ 'clr-form-control-disabled': !clrDgSelectable }\"\n >\n <!-- TODO: it would be better if in addition to the generic \"Select\" label, we could add aria-labelledby\n to label the radio by the first cell in the row (typically an id or name).\n It's pretty easy to label it with the whole row since we already have an id for it, but in most\n cases the row is far too long to serve as a label, the screenreader reads every single cell content. -->\n <input\n type=\"radio\"\n clrRadio\n [id]=\"radioId\"\n [name]=\"selection.id + '-radio'\"\n [value]=\"item\"\n [(ngModel)]=\"selection.currentSingle\"\n [checked]=\"selection.currentSingle === item\"\n [attr.disabled]=\"clrDgSelectable ? null : true\"\n [attr.aria-disabled]=\"clrDgSelectable ? null : true\"\n [attr.aria-label]=\"clrDgRowAriaLabel\"\n />\n </div>\n <div\n *ngIf=\"rowActionService.hasActionableRow\"\n class=\"datagrid-row-actions datagrid-fixed-column datagrid-cell\"\n role=\"gridcell\"\n >\n <ng-content select=\"clr-dg-action-overflow\"></ng-content>\n </div>\n <div\n *ngIf=\"globalExpandable.hasExpandableRow\"\n class=\"datagrid-expandable-caret datagrid-fixed-column datagrid-cell\"\n role=\"gridcell\"\n >\n <ng-container *ngIf=\"expand.expandable\">\n <button\n *ngIf=\"!expand.loading\"\n (click)=\"toggleExpand()\"\n type=\"button\"\n class=\"datagrid-expandable-caret-button\"\n [attr.aria-expanded]=\"expand.expanded\"\n [attr.aria-label]=\"expand.expanded ? clrDgDetailCloseLabel : clrDgDetailOpenLabel\"\n [attr.aria-controls]=\"expandableId\"\n >\n <cds-icon\n shape=\"angle\"\n class=\"datagrid-expandable-caret-icon\"\n [attr.direction]=\"expand.expanded ? 'down' : 'right'\"\n [attr.title]=\"expand.expanded ? commonStrings.keys.collapse : commonStrings.keys.expand\"\n ></cds-icon>\n </button>\n <clr-spinner *ngIf=\"expand.loading\" clrSmall>{{ commonStrings.keys.loading }}</clr-spinner>\n </ng-container>\n </div>\n <div *ngIf=\"detailService.enabled\" class=\"datagrid-detail-caret datagrid-fixed-column datagrid-cell\">\n <button\n (click)=\"detailService.toggle(item, detailButton)\"\n type=\"button\"\n #detailButton\n class=\"datagrid-detail-caret-button\"\n [class.is-open]=\"detailService.isRowOpen(item)\"\n [attr.aria-label]=\"detailService.isRowOpen(item) ? clrDgDetailCloseLabel : clrDgDetailOpenLabel\"\n [attr.aria-expanded]=\"detailService.isOpen\"\n [attr.aria-controls]=\"detailService.id\"\n aria-haspopup=\"dialog\"\n >\n <cds-icon\n shape=\"angle-double\"\n [attr.direction]=\"detailService.isRowOpen(item) ? 'left' : 'right'\"\n class=\"datagrid-detail-caret-icon\"\n [attr.title]=\"detailService.isRowOpen(item) ? commonStrings.keys.close: commonStrings.keys.open\"\n ></cds-icon>\n </button>\n </div>\n </ng-container>\n <!-- placeholder for projecting other sticky cells as pinned-->\n </div>\n <div class=\"datagrid-row-scrollable\" [ngClass]=\"{'is-replaced': replaced && expanded}\">\n <div class=\"datagrid-scrolling-cells\">\n <ng-content select=\"clr-dg-cell\"></ng-content>\n <ng-container #scrollableCells></ng-container>\n </div>\n <!-- details here when replace, re-visit when sticky container is used for pinned cells -->\n <ng-template *ngIf=\"replaced && !expand.loading\" [ngTemplateOutlet]=\"detail\"></ng-template>\n <ng-template *ngIf=\"!replaced && !expand.loading\" [ngTemplateOutlet]=\"detail\"></ng-template>\n </div>\n </div>\n</ng-template>\n\n<ng-container #calculatedCells></ng-container>\n" }]
15119
14003
  }], ctorParameters: function () { return [{ type: Selection }, { type: RowActionService }, { type: ExpandableRowsCount }, { type: DatagridIfExpandService }, { type: DetailService }, { type: DisplayModeService }, { type: i0.ViewContainerRef }, { type: i0.Renderer2 }, { type: i0.ElementRef }, { type: ClrCommonStringsService }, { type: Items }, { type: undefined, decorators: [{
15120
14004
  type: Inject,
15121
14005
  args: [DOCUMENT]
@@ -15909,13 +14793,13 @@ ClrDatagridActionOverflow.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.
15909
14793
  [attr.aria-hidden]="!open"
15910
14794
  [attr.id]="popoverId"
15911
14795
  clrKeyFocus
15912
- clrFocusTrap
14796
+ cdkTrapFocus
15913
14797
  (click)="closeOverflowContent($event)"
15914
14798
  *clrPopoverContent="open; at: smartPosition; outsideClickToClose: true; scrollToClose: true"
15915
14799
  >
15916
14800
  <ng-content></ng-content>
15917
14801
  </div>
15918
- `, isInline: true, dependencies: [{ kind: "directive", type: CdsIconCustomTag, selector: "cds-icon" }, { kind: "directive", type: ClrPopoverAnchor, selector: "[clrPopoverAnchor]" }, { kind: "directive", type: ClrPopoverOpenCloseButton, selector: "[clrPopoverOpenCloseButton]", outputs: ["clrPopoverOpenCloseChange"] }, { kind: "directive", type: ClrPopoverContent, selector: "[clrPopoverContent]", inputs: ["clrPopoverContent", "clrPopoverContentAt", "clrPopoverContentOutsideClickToClose", "clrPopoverContentScrollToClose"] }, { kind: "component", type: ClrKeyFocus, selector: "[clrKeyFocus]", inputs: ["clrDirection", "clrFocusOnLoad", "clrKeyFocus"], outputs: ["clrFocusChange"] }, { kind: "directive", type: FocusTrapDirective, selector: "[clrFocusTrap]", inputs: ["clrFocusTrap"] }] });
14802
+ `, isInline: true, dependencies: [{ kind: "directive", type: CdkTrapFocusModule_CdkTrapFocus, selector: "[cdkTrapFocus]" }, { kind: "directive", type: CdsIconCustomTag, selector: "cds-icon" }, { kind: "directive", type: ClrPopoverAnchor, selector: "[clrPopoverAnchor]" }, { kind: "directive", type: ClrPopoverOpenCloseButton, selector: "[clrPopoverOpenCloseButton]", outputs: ["clrPopoverOpenCloseChange"] }, { kind: "directive", type: ClrPopoverContent, selector: "[clrPopoverContent]", inputs: ["clrPopoverContent", "clrPopoverContentAt", "clrPopoverContentOutsideClickToClose", "clrPopoverContentScrollToClose"] }, { kind: "component", type: ClrKeyFocus, selector: "[clrKeyFocus]", inputs: ["clrDirection", "clrFocusOnLoad", "clrKeyFocus"], outputs: ["clrFocusChange"] }] });
15919
14803
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.2", ngImport: i0, type: ClrDatagridActionOverflow, decorators: [{
15920
14804
  type: Component,
15921
14805
  args: [{
@@ -15943,7 +14827,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.2", ngImpor
15943
14827
  [attr.aria-hidden]="!open"
15944
14828
  [attr.id]="popoverId"
15945
14829
  clrKeyFocus
15946
- clrFocusTrap
14830
+ cdkTrapFocus
15947
14831
  (click)="closeOverflowContent($event)"
15948
14832
  *clrPopoverContent="open; at: smartPosition; outsideClickToClose: true; scrollToClose: true"
15949
14833
  >
@@ -16133,22 +15017,21 @@ ClrDatagridColumnToggle.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0"
16133
15017
  <button
16134
15018
  role="button"
16135
15019
  type="button"
16136
- class="btn btn-sm btn-link column-toggle--action"
15020
+ class="btn btn-sm column-toggle--action"
16137
15021
  clrPopoverAnchor
16138
15022
  clrPopoverOpenCloseButton
16139
15023
  [attr.aria-controls]="popoverId"
16140
15024
  [attr.aria-owns]="popoverId"
16141
15025
  [attr.aria-expanded]="openState"
16142
15026
  >
16143
- <cds-icon shape="view-columns" aria-hidden="true" [attr.title]="commonStrings.keys.pickColumns"></cds-icon>
16144
- <span class="clr-sr-only">{{ commonStrings.keys.pickColumns }}</span>
15027
+ {{ commonStrings.keys.pickColumns }}
16145
15028
  </button>
16146
15029
  <div
16147
15030
  class="column-switch"
16148
15031
  role="dialog"
16149
15032
  [attr.aria-label]="commonStrings.keys.showColumnsMenuDescription"
16150
15033
  [id]="popoverId"
16151
- clrFocusTrap
15034
+ cdkTrapFocus
16152
15035
  *clrPopoverContent="openState; at: smartPosition; outsideClickToClose: true; scrollToClose: true"
16153
15036
  >
16154
15037
  <div class="switch-header">
@@ -16190,7 +15073,7 @@ ClrDatagridColumnToggle.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0"
16190
15073
  </clr-dg-column-toggle-button>
16191
15074
  </div>
16192
15075
  </div>
16193
- `, isInline: true, dependencies: [{ kind: "directive", type: i5.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i5.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: CdsIconCustomTag, selector: "cds-icon" }, { kind: "directive", type: ClrLabel, selector: "label", inputs: ["for"] }, { kind: "directive", type: ClrCheckbox, selector: "[clrCheckbox],[clrToggle]" }, { kind: "component", type: ClrCheckboxWrapper, selector: "clr-checkbox-wrapper,clr-toggle-wrapper" }, { kind: "directive", type: i1.CheckboxControlValueAccessor, selector: "input[type=checkbox][formControlName],input[type=checkbox][formControl],input[type=checkbox][ngModel]" }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: ClrPopoverAnchor, selector: "[clrPopoverAnchor]" }, { kind: "directive", type: ClrPopoverCloseButton, selector: "[clrPopoverCloseButton]", outputs: ["clrPopoverOnCloseChange"] }, { kind: "directive", type: ClrPopoverOpenCloseButton, selector: "[clrPopoverOpenCloseButton]", outputs: ["clrPopoverOpenCloseChange"] }, { kind: "directive", type: ClrPopoverContent, selector: "[clrPopoverContent]", inputs: ["clrPopoverContent", "clrPopoverContentAt", "clrPopoverContentOutsideClickToClose", "clrPopoverContentScrollToClose"] }, { kind: "directive", type: FocusTrapDirective, selector: "[clrFocusTrap]", inputs: ["clrFocusTrap"] }, { kind: "directive", type: ClrDatagridItemsTrackBy, selector: "[ngForTrackBy]", inputs: ["ngForTrackBy"] }, { kind: "component", type: ClrDatagridColumnToggleButton, selector: "clr-dg-column-toggle-button", outputs: ["clrAllSelected"] }] });
15076
+ `, isInline: true, dependencies: [{ kind: "directive", type: i5.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i5.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: CdkTrapFocusModule_CdkTrapFocus, selector: "[cdkTrapFocus]" }, { kind: "directive", type: CdsIconCustomTag, selector: "cds-icon" }, { kind: "directive", type: ClrLabel, selector: "label", inputs: ["for"] }, { kind: "directive", type: ClrCheckbox, selector: "[clrCheckbox],[clrToggle]" }, { kind: "component", type: ClrCheckboxWrapper, selector: "clr-checkbox-wrapper,clr-toggle-wrapper" }, { kind: "directive", type: i1.CheckboxControlValueAccessor, selector: "input[type=checkbox][formControlName],input[type=checkbox][formControl],input[type=checkbox][ngModel]" }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: ClrPopoverAnchor, selector: "[clrPopoverAnchor]" }, { kind: "directive", type: ClrPopoverCloseButton, selector: "[clrPopoverCloseButton]", outputs: ["clrPopoverOnCloseChange"] }, { kind: "directive", type: ClrPopoverOpenCloseButton, selector: "[clrPopoverOpenCloseButton]", outputs: ["clrPopoverOpenCloseChange"] }, { kind: "directive", type: ClrPopoverContent, selector: "[clrPopoverContent]", inputs: ["clrPopoverContent", "clrPopoverContentAt", "clrPopoverContentOutsideClickToClose", "clrPopoverContentScrollToClose"] }, { kind: "directive", type: ClrDatagridItemsTrackBy, selector: "[ngForTrackBy]", inputs: ["ngForTrackBy"] }, { kind: "component", type: ClrDatagridColumnToggleButton, selector: "clr-dg-column-toggle-button", outputs: ["clrAllSelected"] }] });
16194
15077
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.2", ngImport: i0, type: ClrDatagridColumnToggle, decorators: [{
16195
15078
  type: Component,
16196
15079
  args: [{
@@ -16199,22 +15082,21 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.2", ngImpor
16199
15082
  <button
16200
15083
  role="button"
16201
15084
  type="button"
16202
- class="btn btn-sm btn-link column-toggle--action"
15085
+ class="btn btn-sm column-toggle--action"
16203
15086
  clrPopoverAnchor
16204
15087
  clrPopoverOpenCloseButton
16205
15088
  [attr.aria-controls]="popoverId"
16206
15089
  [attr.aria-owns]="popoverId"
16207
15090
  [attr.aria-expanded]="openState"
16208
15091
  >
16209
- <cds-icon shape="view-columns" aria-hidden="true" [attr.title]="commonStrings.keys.pickColumns"></cds-icon>
16210
- <span class="clr-sr-only">{{ commonStrings.keys.pickColumns }}</span>
15092
+ {{ commonStrings.keys.pickColumns }}
16211
15093
  </button>
16212
15094
  <div
16213
15095
  class="column-switch"
16214
15096
  role="dialog"
16215
15097
  [attr.aria-label]="commonStrings.keys.showColumnsMenuDescription"
16216
15098
  [id]="popoverId"
16217
- clrFocusTrap
15099
+ cdkTrapFocus
16218
15100
  *clrPopoverContent="openState; at: smartPosition; outsideClickToClose: true; scrollToClose: true"
16219
15101
  >
16220
15102
  <div class="switch-header">
@@ -16343,7 +15225,8 @@ class ClrDatagridDetail {
16343
15225
  ClrDatagridDetail.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.0.2", ngImport: i0, type: ClrDatagridDetail, deps: [{ token: DetailService }, { token: ClrCommonStringsService }], target: i0.ɵɵFactoryTarget.Component });
16344
15226
  ClrDatagridDetail.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.0.2", type: ClrDatagridDetail, selector: "clr-dg-detail", host: { listeners: { "document:keyup.esc": "closeCheck()" }, properties: { "class.datagrid-detail-pane": "true" } }, queries: [{ propertyName: "header", first: true, predicate: ClrDatagridDetailHeader, descendants: true }], ngImport: i0, template: `
16345
15227
  <div
16346
- [clrFocusTrap]="{ strict: false }"
15228
+ cdkTrapFocus
15229
+ [cdkTrapFocusAutoCapture]="true"
16347
15230
  class="datagrid-detail-pane-content"
16348
15231
  *ngIf="detailService.isOpen"
16349
15232
  role="dialog"
@@ -16355,7 +15238,7 @@ ClrDatagridDetail.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", vers
16355
15238
  <ng-content></ng-content>
16356
15239
  <div class="clr-sr-only">{{ commonStrings.keys.detailPaneEnd }}</div>
16357
15240
  </div>
16358
- `, isInline: true, dependencies: [{ kind: "directive", type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: FocusTrapDirective, selector: "[clrFocusTrap]", inputs: ["clrFocusTrap"] }] });
15241
+ `, isInline: true, dependencies: [{ kind: "directive", type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: CdkTrapFocusModule_CdkTrapFocus, selector: "[cdkTrapFocus]" }] });
16359
15242
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.2", ngImport: i0, type: ClrDatagridDetail, decorators: [{
16360
15243
  type: Component,
16361
15244
  args: [{
@@ -16363,11 +15246,12 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.2", ngImpor
16363
15246
  host: {
16364
15247
  '[class.datagrid-detail-pane]': 'true',
16365
15248
  },
16366
- // We put the *ngIf on the clrFocusTrap so it doesn't always exist on the page
15249
+ // We put the *ngIf on the cdkTrapFocus so it doesn't always exist on the page
16367
15250
  // have to test for presence of header for aria-describedby because it was causing unit tests to crash
16368
15251
  template: `
16369
15252
  <div
16370
- [clrFocusTrap]="{ strict: false }"
15253
+ cdkTrapFocus
15254
+ [cdkTrapFocusAutoCapture]="true"
16371
15255
  class="datagrid-detail-pane-content"
16372
15256
  *ngIf="detailService.isOpen"
16373
15257
  role="dialog"
@@ -16493,256 +15377,28 @@ function fade(opacity = 1) {
16493
15377
  * This software is released under MIT license.
16494
15378
  * The full license information can be found in LICENSE in the root directory of this project.
16495
15379
  */
16496
- function fadeSlide(direction) {
16497
- let transform = null;
16498
- if (direction === 'up') {
16499
- transform = 'translate(0, 25%)';
16500
- }
16501
- else if (direction === 'down') {
16502
- transform = 'translate(0, -25%)';
16503
- }
16504
- else if (direction === 'left') {
16505
- transform = 'translate(25%, 0)';
16506
- }
16507
- else if (direction === 'right') {
16508
- transform = 'translate(-25%, 0)';
16509
- }
16510
- else {
16511
- throw new Error('Unknown direction ' + direction + ' for slide animation.');
16512
- }
16513
- return [
16514
- transition('void => *', [style({ opacity: 0, transform: transform }), animate(defaultAnimationTiming)]),
16515
- transition('* => void', [animate(defaultAnimationTiming, style({ opacity: 0, transform: transform }))]),
16516
- ];
16517
- }
16518
-
16519
- /*
16520
- * Copyright (c) 2016-2022 VMware, Inc. All Rights Reserved.
16521
- * This software is released under MIT license.
16522
- * The full license information can be found in LICENSE in the root directory of this project.
16523
- */
16524
-
16525
- /*
16526
- * Copyright (c) 2016-2022 VMware, Inc. All Rights Reserved.
16527
- * This software is released under MIT license.
16528
- * The full license information can be found in LICENSE in the root directory of this project.
16529
- */
16530
- function slide(direction) {
16531
- let transform = null;
16532
- if (direction === 'up') {
16533
- transform = 'translate(0, 25%)';
16534
- }
16535
- else if (direction === 'down') {
16536
- transform = 'translate(0, -25%)';
16537
- }
16538
- else if (direction === 'left') {
16539
- transform = 'translate(25%, 0)';
16540
- }
16541
- else if (direction === 'right') {
16542
- transform = 'translate(-25%, 0)';
16543
- }
16544
- else {
16545
- throw new Error('Unknown direction ' + direction + ' for slide animation.');
16546
- }
16547
- return [
16548
- transition('void => *', [style({ transform: transform }), animate(defaultAnimationTiming)]),
16549
- transition('* => void', [animate(defaultAnimationTiming, style({ transform: transform }))]),
16550
- ];
16551
- }
16552
-
16553
- /*
16554
- * Copyright (c) 2016-2022 VMware, Inc. All Rights Reserved.
16555
- * This software is released under MIT license.
16556
- * The full license information can be found in LICENSE in the root directory of this project.
16557
- */
16558
-
16559
- /*
16560
- * Copyright (c) 2016-2022 VMware, Inc. All Rights Reserved.
16561
- * This software is released under MIT license.
16562
- * The full license information can be found in LICENSE in the root directory of this project.
16563
- */
16564
-
16565
- /*
16566
- * Copyright (c) 2016-2022 VMware, Inc. All Rights Reserved.
16567
- * This software is released under MIT license.
16568
- * The full license information can be found in LICENSE in the root directory of this project.
16569
- */
16570
-
16571
- /*
16572
- * Copyright (c) 2016-2022 VMware, Inc. All Rights Reserved.
16573
- * This software is released under MIT license.
16574
- * The full license information can be found in LICENSE in the root directory of this project.
16575
- */
16576
-
16577
- /*
16578
- * Copyright (c) 2016-2022 VMware, Inc. All Rights Reserved.
16579
- * This software is released under MIT license.
16580
- * The full license information can be found in LICENSE in the root directory of this project.
16581
- */
16582
-
16583
- /*
16584
- * Copyright (c) 2016-2022 VMware, Inc. All Rights Reserved.
16585
- * This software is released under MIT license.
16586
- * The full license information can be found in LICENSE in the root directory of this project.
16587
- */
16588
-
16589
- /*
16590
- * Copyright (c) 2016-2022 VMware, Inc. All Rights Reserved.
16591
- * This software is released under MIT license.
16592
- * The full license information can be found in LICENSE in the root directory of this project.
16593
- */
16594
- var ClrAriaLivePoliteness;
16595
- (function (ClrAriaLivePoliteness) {
16596
- ClrAriaLivePoliteness["off"] = "off";
16597
- ClrAriaLivePoliteness["polite"] = "polite";
16598
- ClrAriaLivePoliteness["assertive"] = "assertive";
16599
- })(ClrAriaLivePoliteness || (ClrAriaLivePoliteness = {}));
16600
- /**
16601
- * Time in milliseconds before inserting the content into the container
16602
- */
16603
- const ARIA_LIVE_TICK = 100;
16604
- /**
16605
- * @deprecated
16606
- *
16607
- * -- ClrAriaLiveService is deprecated in 5.0 to be removed in 6.0 --
16608
- * Please consider using the LiveAnnouncer in the Angular Material CDK
16609
- * if your project needs this functionality.
16610
- * More info: https://material.angular.io/cdk/a11y/overview#example-1
16611
- *
16612
- * This service handle `aria-live` accessibility attribute. The issue is that you need
16613
- * to have the DOM Element with attribute `aria-live` before you could insert content
16614
- * and SR (Screen Reader) pick the change and announce it.
16615
- *
16616
- * ```typescript
16617
- * import { ClrAriaLiveService } from 'src/clr-angular/utils/a11y/aria-live.service';
16618
- *
16619
- * @Component({
16620
- * selector: 'clr-demo-component',
16621
- * providers: [ClrAriaLiveService],
16622
- * template: `
16623
- * <ng-content></ng-content>
16624
- * `,
16625
- * })
16626
- * export class DemoComponent {
16627
- * constructor(ariaLiveService: ClrAriaLiveService) {}
16628
- *
16629
- * public actionThatWillTriggerChange() {
16630
- * this.ariaLiveService.announce('message that I want to announce to SR');
16631
- * }
16632
- * }
16633
- * ```
16634
- *
16635
- */
16636
- class ClrAriaLiveService {
16637
- constructor(ngZone, _document, platformId) {
16638
- this.ngZone = ngZone;
16639
- this.platformId = platformId;
16640
- this._id = `clr-aria-live-element-${uniqueIdFactory()}`;
16641
- this.document = _document;
16642
- }
16643
- /**
16644
- * get access to the internal HTML `id` that gonna be used for the AriaLive container.
16645
- * @return ID of the DOM Element as string.
16646
- */
16647
- get id() {
16648
- return this._id;
16649
- }
16650
- /**
16651
- * Append text content inside the AriaLive Container. This method will check if the
16652
- * DOM Element is existing if not it will create one for us and the will apply the text.
16653
- *
16654
- * ```typescript
16655
- * this.ariaLiveService.announce(this.el.nativeElement);
16656
- * // or
16657
- * this.ariaLiveService.announce('Message to announce to SR');
16658
- * ```
16659
- *
16660
- * @remark
16661
- * When second argument is `AriaLivePoliteness.off` we won't create aria container or update it.
16662
- * The reason for that is that we don't want to do additional work if the SR will ignore it.
16663
- *
16664
- * @param message - This could be simple string or HTMLElement
16665
- * @param politeness - 'polite', 'assertive' or 'off'
16666
- */
16667
- announce(message, politeness = ClrAriaLivePoliteness.polite) {
16668
- if (politeness === ClrAriaLivePoliteness.off) {
16669
- return;
16670
- }
16671
- if (!this.ariaLiveElement && isPlatformBrowser(this.platformId)) {
16672
- this.ariaLiveElement = this.createContainer();
16673
- }
16674
- message = typeof message !== 'string' && isPlatformBrowser(this.platformId) ? message.textContent : message;
16675
- // when there is no message do NOTHING!
16676
- if (!message) {
16677
- return;
16678
- }
16679
- this.ariaLiveElement.setAttribute('aria-live', politeness);
16680
- // This 100ms timeout is necessary for some browser + screen-reader combinations:
16681
- // - Both JAWS and NVDA over IE11 will not announce anything without a non-zero timeout.
16682
- // - With Chrome and IE11 with NVDA or JAWS, a repeated (identical) message won't be read a
16683
- // second time without clearing and then using a non-zero delay.
16684
- // (using JAWS 17 at time of this writing).
16685
- this.ngZone.runOutsideAngular(() => {
16686
- // This clearTimeout will stop all older messages from announcing
16687
- // in the case where the messages are comming too fast we gonna try to append only
16688
- // the last one. That's what the SR will try to do anyway.
16689
- clearTimeout(this.previousTimeout);
16690
- this.previousTimeout = setTimeout(() => {
16691
- this.ariaLiveElement.textContent = message;
16692
- }, ARIA_LIVE_TICK);
16693
- });
16694
- }
16695
- /**
16696
- * onDestroy life cycle - must stop all active setTimeouts and remove the AriaLive
16697
- * container from the document.
16698
- */
16699
- ngOnDestroy() {
16700
- clearTimeout(this.previousTimeout);
16701
- if (isPlatformBrowser(this.platformId) && this.ariaLiveElement) {
16702
- this.document.body.removeChild(this.ariaLiveElement);
16703
- this.ariaLiveElement = null;
16704
- }
16705
- }
16706
- /**
16707
- * Create AriaLive DOM element as a last child of the document.
16708
- * After the element is created, we gonna apply Clarity class to hide it from
16709
- * the screen and set the `aria-live` politness.
16710
- *
16711
- * `clr-sr-only` is the CSS class that is used to hide the element from the screen.
16712
- *
16713
- * @remark
16714
- * Calling this method multiple times will create multiple DOM Elements, that
16715
- * won't be tracked and will be GC after the service is destroyed.
16716
- *
16717
- * @return AriaLive container as HTMLElement
16718
- *
16719
- */
16720
- createContainer() {
16721
- const ariaLiveElement = this.document.createElement('div');
16722
- ariaLiveElement.setAttribute('id', this.id);
16723
- // Use clarity screen reader class to hide the dom element
16724
- // and fix the scrollbar shake
16725
- ariaLiveElement.classList.add('clr-sr-only');
16726
- ariaLiveElement.setAttribute('aria-atomic', 'true');
16727
- ariaLiveElement.setAttribute('aria-live', ClrAriaLivePoliteness.polite);
16728
- this.document.body.appendChild(ariaLiveElement);
16729
- return ariaLiveElement;
16730
- }
16731
- }
16732
- ClrAriaLiveService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.0.2", ngImport: i0, type: ClrAriaLiveService, deps: [{ token: i0.NgZone }, { token: DOCUMENT }, { token: PLATFORM_ID }], target: i0.ɵɵFactoryTarget.Injectable });
16733
- ClrAriaLiveService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.0.2", ngImport: i0, type: ClrAriaLiveService, providedIn: 'root' });
16734
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.2", ngImport: i0, type: ClrAriaLiveService, decorators: [{
16735
- type: Injectable,
16736
- args: [{
16737
- providedIn: 'root',
16738
- }]
16739
- }], ctorParameters: function () { return [{ type: i0.NgZone }, { type: undefined, decorators: [{
16740
- type: Inject,
16741
- args: [DOCUMENT]
16742
- }] }, { type: undefined, decorators: [{
16743
- type: Inject,
16744
- args: [PLATFORM_ID]
16745
- }] }]; } });
15380
+ function fadeSlide(direction) {
15381
+ let transform = null;
15382
+ if (direction === 'up') {
15383
+ transform = 'translate(0, 25%)';
15384
+ }
15385
+ else if (direction === 'down') {
15386
+ transform = 'translate(0, -25%)';
15387
+ }
15388
+ else if (direction === 'left') {
15389
+ transform = 'translate(25%, 0)';
15390
+ }
15391
+ else if (direction === 'right') {
15392
+ transform = 'translate(-25%, 0)';
15393
+ }
15394
+ else {
15395
+ throw new Error('Unknown direction ' + direction + ' for slide animation.');
15396
+ }
15397
+ return [
15398
+ transition('void => *', [style({ opacity: 0, transform: transform }), animate(defaultAnimationTiming)]),
15399
+ transition('* => void', [animate(defaultAnimationTiming, style({ opacity: 0, transform: transform }))]),
15400
+ ];
15401
+ }
16746
15402
 
16747
15403
  /*
16748
15404
  * Copyright (c) 2016-2022 VMware, Inc. All Rights Reserved.
@@ -16755,6 +15411,28 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.2", ngImpor
16755
15411
  * This software is released under MIT license.
16756
15412
  * The full license information can be found in LICENSE in the root directory of this project.
16757
15413
  */
15414
+ function slide(direction) {
15415
+ let transform = null;
15416
+ if (direction === 'up') {
15417
+ transform = 'translate(0, 25%)';
15418
+ }
15419
+ else if (direction === 'down') {
15420
+ transform = 'translate(0, -25%)';
15421
+ }
15422
+ else if (direction === 'left') {
15423
+ transform = 'translate(25%, 0)';
15424
+ }
15425
+ else if (direction === 'right') {
15426
+ transform = 'translate(-25%, 0)';
15427
+ }
15428
+ else {
15429
+ throw new Error('Unknown direction ' + direction + ' for slide animation.');
15430
+ }
15431
+ return [
15432
+ transition('void => *', [style({ transform: transform }), animate(defaultAnimationTiming)]),
15433
+ transition('* => void', [animate(defaultAnimationTiming, style({ transform: transform }))]),
15434
+ ];
15435
+ }
16758
15436
 
16759
15437
  /*
16760
15438
  * Copyright (c) 2016-2022 VMware, Inc. All Rights Reserved.
@@ -16797,95 +15475,18 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.2", ngImpor
16797
15475
  * This software is released under MIT license.
16798
15476
  * The full license information can be found in LICENSE in the root directory of this project.
16799
15477
  */
16800
- class ForTypeAheadProvider {
16801
- constructor() {
16802
- this._textContentChange = new Subject();
16803
- }
16804
- get textContentChange() {
16805
- return this._textContentChange.asObservable();
16806
- }
16807
- get textContent() {
16808
- return this._textContent;
16809
- }
16810
- set textContent(value) {
16811
- this._textContent = value;
16812
- this._textContentChange.next(value);
16813
- }
16814
- }
16815
- ForTypeAheadProvider.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.0.2", ngImport: i0, type: ForTypeAheadProvider, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
16816
- ForTypeAheadProvider.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.0.2", ngImport: i0, type: ForTypeAheadProvider });
16817
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.2", ngImport: i0, type: ForTypeAheadProvider, decorators: [{
16818
- type: Injectable
16819
- }] });
16820
15478
 
16821
15479
  /*
16822
15480
  * Copyright (c) 2016-2022 VMware, Inc. All Rights Reserved.
16823
15481
  * This software is released under MIT license.
16824
15482
  * The full license information can be found in LICENSE in the root directory of this project.
16825
15483
  */
16826
- // The purpose of this directive is to provide the text content of its host element
16827
- // or text content that's passed to its input.
16828
- // This directive must stay optional. So do not embed this directive in a component module by default.
16829
- // If users need to use this directive, they should import its module on their side.
16830
- class ClrForTypeAhead {
16831
- constructor(el, forTypeAheadProvider) {
16832
- this.el = el;
16833
- this.forTypeAheadProvider = forTypeAheadProvider;
16834
- }
16835
- trimAndLowerCase(value) {
16836
- return value.toLocaleLowerCase().trim();
16837
- }
16838
- get content() {
16839
- return this._content;
16840
- }
16841
- set content(value) {
16842
- if (value) {
16843
- this._content = this.trimAndLowerCase(value);
16844
- this.forTypeAheadProvider.textContent = this._content;
16845
- }
16846
- else {
16847
- this._content = this.trimAndLowerCase(this.el.nativeElement.textContent);
16848
- this.forTypeAheadProvider.textContent = this._content;
16849
- }
16850
- }
16851
- ngOnInit() {
16852
- if (!this._content) {
16853
- this._content = this.trimAndLowerCase(this.el.nativeElement.textContent);
16854
- this.forTypeAheadProvider.textContent = this._content;
16855
- }
16856
- }
16857
- }
16858
- ClrForTypeAhead.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.0.2", ngImport: i0, type: ClrForTypeAhead, deps: [{ token: i0.ElementRef }, { token: ForTypeAheadProvider }], target: i0.ɵɵFactoryTarget.Directive });
16859
- ClrForTypeAhead.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "15.0.2", type: ClrForTypeAhead, selector: "[clrForTypeAhead]", inputs: { content: ["clrForTypeAhead", "content"] }, providers: [ForTypeAheadProvider], ngImport: i0 });
16860
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.2", ngImport: i0, type: ClrForTypeAhead, decorators: [{
16861
- type: Directive,
16862
- args: [{
16863
- providers: [ForTypeAheadProvider],
16864
- selector: '[clrForTypeAhead]',
16865
- }]
16866
- }], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: ForTypeAheadProvider }]; }, propDecorators: { content: [{
16867
- type: Input,
16868
- args: ['clrForTypeAhead']
16869
- }] } });
16870
15484
 
16871
15485
  /*
16872
15486
  * Copyright (c) 2016-2022 VMware, Inc. All Rights Reserved.
16873
15487
  * This software is released under MIT license.
16874
15488
  * The full license information can be found in LICENSE in the root directory of this project.
16875
15489
  */
16876
- class ClrForTypeAheadModule {
16877
- }
16878
- ClrForTypeAheadModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.0.2", ngImport: i0, type: ClrForTypeAheadModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
16879
- ClrForTypeAheadModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "15.0.2", ngImport: i0, type: ClrForTypeAheadModule, declarations: [ClrForTypeAhead], imports: [CommonModule], exports: [ClrForTypeAhead] });
16880
- ClrForTypeAheadModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "15.0.2", ngImport: i0, type: ClrForTypeAheadModule, imports: [CommonModule] });
16881
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.2", ngImport: i0, type: ClrForTypeAheadModule, decorators: [{
16882
- type: NgModule,
16883
- args: [{
16884
- imports: [CommonModule],
16885
- declarations: [ClrForTypeAhead],
16886
- exports: [ClrForTypeAhead],
16887
- }]
16888
- }] });
16889
15490
 
16890
15491
  /*
16891
15492
  * Copyright (c) 2016-2022 VMware, Inc. All Rights Reserved.
@@ -17316,9 +15917,14 @@ class ClrDatagridPagination {
17316
15917
  }
17317
15918
  return middlePages;
17318
15919
  }
15920
+ verifyCurrentPage(event) {
15921
+ const parsed = parseInt(event.target.value, 10);
15922
+ if (parsed !== this.page.current) {
15923
+ event.target.value = this.page.current;
15924
+ }
15925
+ }
17319
15926
  /**
17320
- * We only update the pagination's current page on blur of the input field, or
17321
- * when they press enter.
15927
+ * We only update the pagination's current page on enter.
17322
15928
  */
17323
15929
  updateCurrentPage(event) {
17324
15930
  const parsed = parseInt(event.target.value, 10);
@@ -17379,7 +15985,7 @@ ClrDatagridPagination.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0",
17379
15985
  [size]="page.last.toString().length"
17380
15986
  [value]="page.current"
17381
15987
  (keydown.enter)="updateCurrentPage($event)"
17382
- (blur)="updateCurrentPage($event)"
15988
+ (blur)="verifyCurrentPage($event)"
17383
15989
  [attr.aria-label]="commonStrings.keys.currentPage"
17384
15990
  />
17385
15991
  <ng-template #readOnly>
@@ -17479,7 +16085,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.2", ngImpor
17479
16085
  [size]="page.last.toString().length"
17480
16086
  [value]="page.current"
17481
16087
  (keydown.enter)="updateCurrentPage($event)"
17482
- (blur)="updateCurrentPage($event)"
16088
+ (blur)="verifyCurrentPage($event)"
17483
16089
  [attr.aria-label]="commonStrings.keys.currentPage"
17484
16090
  />
17485
16091
  <ng-template #readOnly>
@@ -17600,20 +16206,20 @@ class ClrDatagridRowDetail {
17600
16206
  }
17601
16207
  get beginningOfExpandableContentAriaText() {
17602
16208
  return (this._beginningOfExpandableContentAriaText ||
17603
- `${this.commonStrings.keys.dategridExpandableBeginningOf || this.commonStrings.keys.datagridExpandableBeginningOf}
17604
- ${this.commonStrings.keys.dategridExpandableRowContent || this.commonStrings.keys.datagridExpandableRowContent}`);
16209
+ `${this.commonStrings.keys.datagridExpandableBeginningOf}
16210
+ ${this.commonStrings.keys.datagridExpandableRowContent}`);
17605
16211
  }
17606
16212
  get endOfExpandableContentAriaText() {
17607
16213
  return (this._endOfExpandableContentAriaText ||
17608
- `${this.commonStrings.keys.dategridExpandableEndOf || this.commonStrings.keys.datagridExpandableEndOf}
17609
- ${this.commonStrings.keys.dategridExpandableRowContent || this.commonStrings.keys.datagridExpandableRowContent}`);
16214
+ `${this.commonStrings.keys.datagridExpandableEndOf}
16215
+ ${this.commonStrings.keys.datagridExpandableRowContent}`);
17610
16216
  }
17611
16217
  }
17612
16218
  ClrDatagridRowDetail.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.0.2", ngImport: i0, type: ClrDatagridRowDetail, deps: [{ token: Selection }, { token: RowActionService }, { token: DatagridIfExpandService }, { token: ExpandableRowsCount }, { token: ClrCommonStringsService }], target: i0.ɵɵFactoryTarget.Component });
17613
16219
  ClrDatagridRowDetail.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.0.2", type: ClrDatagridRowDetail, selector: "clr-dg-row-detail", inputs: { replace: ["clrDgReplace", "replace"], _beginningOfExpandableContentAriaText: ["clrRowDetailBeginningAriaText", "_beginningOfExpandableContentAriaText"], _endOfExpandableContentAriaText: ["clrRowDetailEndAriaText", "_endOfExpandableContentAriaText"] }, host: { attributes: { "role": "gridcell" }, properties: { "class.datagrid-row-flex": "true", "class.datagrid-row-detail": "true", "class.datagrid-container": "cells.length === 0", "attr.id": "expand.expandableId" } }, queries: [{ propertyName: "cells", predicate: ClrDatagridCell }], ngImport: i0, template: `
17614
16220
  <div class="clr-sr-only">
17615
16221
  {{ beginningOfExpandableContentAriaText }}
17616
- {{ commonStrings.keys.dategridExpandableRowsHelperText || commonStrings.keys.datagridExpandableRowsHelperText }}
16222
+ {{ commonStrings.keys.datagridExpandableRowsHelperText }}
17617
16223
  </div>
17618
16224
  <ng-content></ng-content>
17619
16225
  <div class="clr-sr-only">{{ endOfExpandableContentAriaText }}</div>
@@ -17622,11 +16228,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.2", ngImpor
17622
16228
  type: Component,
17623
16229
  args: [{
17624
16230
  selector: 'clr-dg-row-detail',
17625
- // TODO: @deprecated - dategrid* keys are deprecated. Remove in v14.
17626
16231
  template: `
17627
16232
  <div class="clr-sr-only">
17628
16233
  {{ beginningOfExpandableContentAriaText }}
17629
- {{ commonStrings.keys.dategridExpandableRowsHelperText || commonStrings.keys.datagridExpandableRowsHelperText }}
16234
+ {{ commonStrings.keys.datagridExpandableRowsHelperText }}
17630
16235
  </div>
17631
16236
  <ng-content></ng-content>
17632
16237
  <div class="clr-sr-only">{{ endOfExpandableContentAriaText }}</div>
@@ -18248,6 +16853,8 @@ ClrDatagridModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", versi
18248
16853
  // Built-in shortcuts
18249
16854
  DatagridStringFilter,
18250
16855
  DatagridNumericFilter], imports: [CommonModule,
16856
+ CdkDragModule,
16857
+ CdkTrapFocusModule,
18251
16858
  ClrIconModule,
18252
16859
  ClrFormsModule,
18253
16860
  FormsModule,
@@ -18255,11 +16862,9 @@ ClrDatagridModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", versi
18255
16862
  ClrConditionalModule,
18256
16863
  ClrOutsideClickModule,
18257
16864
  ClrExpandableAnimationModule,
18258
- ClrDragAndDropModule,
18259
16865
  ClrSpinnerModule,
18260
16866
  ClrPopoverModuleNext,
18261
16867
  ClrKeyFocusModule,
18262
- ClrFocusTrapModule,
18263
16868
  ClrFocusOnViewInitModule], exports: [
18264
16869
  // Core
18265
16870
  ClrDatagrid,
@@ -18302,6 +16907,8 @@ ClrDatagridModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", versi
18302
16907
  DatagridStringFilter,
18303
16908
  DatagridNumericFilter] });
18304
16909
  ClrDatagridModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "15.0.2", ngImport: i0, type: ClrDatagridModule, imports: [CommonModule,
16910
+ CdkDragModule,
16911
+ CdkTrapFocusModule,
18305
16912
  ClrIconModule,
18306
16913
  ClrFormsModule,
18307
16914
  FormsModule,
@@ -18309,17 +16916,17 @@ ClrDatagridModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", versi
18309
16916
  ClrConditionalModule,
18310
16917
  ClrOutsideClickModule,
18311
16918
  ClrExpandableAnimationModule,
18312
- ClrDragAndDropModule,
18313
16919
  ClrSpinnerModule,
18314
16920
  ClrPopoverModuleNext,
18315
16921
  ClrKeyFocusModule,
18316
- ClrFocusTrapModule,
18317
16922
  ClrFocusOnViewInitModule] });
18318
16923
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.2", ngImport: i0, type: ClrDatagridModule, decorators: [{
18319
16924
  type: NgModule,
18320
16925
  args: [{
18321
16926
  imports: [
18322
16927
  CommonModule,
16928
+ CdkDragModule,
16929
+ CdkTrapFocusModule,
18323
16930
  ClrIconModule,
18324
16931
  ClrFormsModule,
18325
16932
  FormsModule,
@@ -18327,11 +16934,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.2", ngImpor
18327
16934
  ClrConditionalModule,
18328
16935
  ClrOutsideClickModule,
18329
16936
  ClrExpandableAnimationModule,
18330
- ClrDragAndDropModule,
18331
16937
  ClrSpinnerModule,
18332
16938
  ClrPopoverModuleNext,
18333
16939
  ClrKeyFocusModule,
18334
- ClrFocusTrapModule,
18335
16940
  ClrFocusOnViewInitModule,
18336
16941
  ],
18337
16942
  declarations: [CLR_DATAGRID_DIRECTIVES],
@@ -18480,7 +17085,7 @@ class ClrStackBlock {
18480
17085
  }
18481
17086
  }
18482
17087
  ClrStackBlock.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.0.2", ngImport: i0, type: ClrStackBlock, deps: [{ token: ClrStackBlock, optional: true, skipSelf: true }, { token: ClrCommonStringsService }], target: i0.ɵɵFactoryTarget.Component });
18483
- ClrStackBlock.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.0.2", type: ClrStackBlock, selector: "clr-stack-block", inputs: { expanded: ["clrSbExpanded", "expanded"], expandable: ["clrSbExpandable", "expandable"], setChangedValue: ["clrSbNotifyChange", "setChangedValue"], ariaLevel: ["clrStackViewLevel", "ariaLevel"], ariaSetsize: ["clrStackViewSetsize", "ariaSetsize"], ariaPosinset: ["clrStackViewPosinset", "ariaPosinset"] }, outputs: { expandedChange: "clrSbExpandedChange" }, host: { properties: { "class.stack-block": "true", "attr.role": "\"heading\"", "attr.aria-level": "headingLevel", "class.stack-block-expanded": "this.expanded", "class.stack-block-expandable": "this.expandable", "class.stack-block-changed": "this.getChangedValue", "class.on-focus": "this.onStackLabelFocus" } }, queries: [{ propertyName: "stackBlockTitle", first: true, predicate: ClrStackViewLabel, descendants: true }], ngImport: i0, template: `
17088
+ ClrStackBlock.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.0.2", type: ClrStackBlock, selector: "clr-stack-block", inputs: { expanded: ["clrSbExpanded", "expanded"], expandable: ["clrSbExpandable", "expandable"], setChangedValue: ["clrSbNotifyChange", "setChangedValue"], ariaLevel: ["clrStackViewLevel", "ariaLevel"] }, outputs: { expandedChange: "clrSbExpandedChange" }, host: { properties: { "class.stack-block": "true", "attr.role": "\"heading\"", "attr.aria-level": "headingLevel", "class.stack-block-expanded": "this.expanded", "class.stack-block-expandable": "this.expandable", "class.stack-block-changed": "this.getChangedValue", "class.on-focus": "this.onStackLabelFocus" } }, queries: [{ propertyName: "stackBlockTitle", first: true, predicate: ClrStackViewLabel, descendants: true }], ngImport: i0, template: `
18484
17089
  <!-- The 'preventDefault' for the space keydown event prevents the page
18485
17090
  from scrolling when a stack block is toggled via the space key. -->
18486
17091
  <div
@@ -18599,12 +17204,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.2", ngImpor
18599
17204
  }], ariaLevel: [{
18600
17205
  type: Input,
18601
17206
  args: ['clrStackViewLevel']
18602
- }], ariaSetsize: [{
18603
- type: Input,
18604
- args: ['clrStackViewSetsize']
18605
- }], ariaPosinset: [{
18606
- type: Input,
18607
- args: ['clrStackViewPosinset']
18608
17207
  }], onStackLabelFocus: [{
18609
17208
  type: HostBinding,
18610
17209
  args: ['class.on-focus']
@@ -18639,30 +17238,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.2", ngImpor
18639
17238
  * The full license information can be found in LICENSE in the root directory of this project.
18640
17239
  */
18641
17240
  class ClrStackView {
18642
- constructor() {
18643
- /**
18644
- * Undocumented experimental feature: inline editing.
18645
- */
18646
- this.editable = false;
18647
- this.save = new EventEmitter(false);
18648
- this._editMode = false;
18649
- this.editingChange = new EventEmitter(false);
18650
- }
18651
- get editing() {
18652
- return this.editable && this._editMode;
18653
- }
18654
- set editing(value) {
18655
- if (this.editable) {
18656
- this._editMode = value;
18657
- this.editingChange.emit(value);
18658
- if (!value) {
18659
- this.save.emit(null);
18660
- }
18661
- }
18662
- }
18663
17241
  }
18664
17242
  ClrStackView.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.0.2", ngImport: i0, type: ClrStackView, deps: [], target: i0.ɵɵFactoryTarget.Component });
18665
- ClrStackView.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.0.2", type: ClrStackView, selector: "clr-stack-view", outputs: { save: "clrStackSave" }, ngImport: i0, template: `
17243
+ ClrStackView.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.0.2", type: ClrStackView, selector: "clr-stack-view", ngImport: i0, template: `
18666
17244
  <ng-content select="clr-stack-header"></ng-content>
18667
17245
  <div class="stack-view"><ng-content></ng-content></div>
18668
17246
  `, isInline: true, styles: [":host{display:block}\n"] });
@@ -18672,10 +17250,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.2", ngImpor
18672
17250
  <ng-content select="clr-stack-header"></ng-content>
18673
17251
  <div class="stack-view"><ng-content></ng-content></div>
18674
17252
  `, styles: [":host{display:block}\n"] }]
18675
- }], propDecorators: { save: [{
18676
- type: Output,
18677
- args: ['clrStackSave']
18678
- }] } });
17253
+ }] });
18679
17254
 
18680
17255
  /*
18681
17256
  * Copyright (c) 2016-2022 VMware, Inc. All Rights Reserved.
@@ -18694,19 +17269,9 @@ ClrStackHeader.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version
18694
17269
 
18695
17270
  <span class="stack-actions">
18696
17271
  <ng-content select=".stack-action"></ng-content>
18697
- <!-- Undocumented experimental feature: inline editing. -->
18698
- <button
18699
- *ngIf="stackView.editable"
18700
- class="stack-action btn btn-sm btn-link"
18701
- (click)="stackView.editing = !stackView.editing"
18702
- type="button"
18703
- >
18704
- Edit
18705
- </button>
18706
- <!-- End of undocumented experimental feature. -->
18707
17272
  </span>
18708
17273
  </div>
18709
- `, isInline: true, styles: [":host{display:block}\n"], dependencies: [{ kind: "directive", type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }] });
17274
+ `, isInline: true, styles: [":host{display:block}\n"] });
18710
17275
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.2", ngImport: i0, type: ClrStackHeader, decorators: [{
18711
17276
  type: Component,
18712
17277
  args: [{ selector: 'clr-stack-header', template: `
@@ -18715,116 +17280,11 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.2", ngImpor
18715
17280
 
18716
17281
  <span class="stack-actions">
18717
17282
  <ng-content select=".stack-action"></ng-content>
18718
- <!-- Undocumented experimental feature: inline editing. -->
18719
- <button
18720
- *ngIf="stackView.editable"
18721
- class="stack-action btn btn-sm btn-link"
18722
- (click)="stackView.editing = !stackView.editing"
18723
- type="button"
18724
- >
18725
- Edit
18726
- </button>
18727
- <!-- End of undocumented experimental feature. -->
18728
17283
  </span>
18729
17284
  </div>
18730
17285
  `, styles: [":host{display:block}\n"] }]
18731
17286
  }], ctorParameters: function () { return [{ type: ClrStackView }]; } });
18732
17287
 
18733
- /*
18734
- * Copyright (c) 2016-2022 VMware, Inc. All Rights Reserved.
18735
- * This software is released under MIT license.
18736
- * The full license information can be found in LICENSE in the root directory of this project.
18737
- */
18738
- class StackControl {
18739
- constructor(stackView) {
18740
- this.stackView = stackView;
18741
- this.modelChange = new EventEmitter(false);
18742
- // Make the ClrStackView editable, since it contains a StackControl
18743
- this.stackView.editable = true;
18744
- this.subscription = this.stackView.editingChange.subscribe((editing) => {
18745
- // Edit mode was closed
18746
- if (!editing) {
18747
- this.modelChange.emit(this.model);
18748
- }
18749
- });
18750
- }
18751
- ngOnDestroy() {
18752
- this.subscription.unsubscribe();
18753
- }
18754
- }
18755
- StackControl.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.0.2", ngImport: i0, type: StackControl, deps: [{ token: ClrStackView }], target: i0.ɵɵFactoryTarget.Directive });
18756
- StackControl.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "15.0.2", type: StackControl, ngImport: i0 });
18757
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.2", ngImport: i0, type: StackControl, decorators: [{
18758
- type: Directive
18759
- }], ctorParameters: function () { return [{ type: ClrStackView }]; } });
18760
-
18761
- /*
18762
- * Copyright (c) 2016-2022 VMware, Inc. All Rights Reserved.
18763
- * This software is released under MIT license.
18764
- * The full license information can be found in LICENSE in the root directory of this project.
18765
- */
18766
- class ClrStackInput extends StackControl {
18767
- constructor(stackView) {
18768
- super(stackView);
18769
- this.stackView = stackView;
18770
- this.type = 'text';
18771
- }
18772
- }
18773
- ClrStackInput.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.0.2", ngImport: i0, type: ClrStackInput, deps: [{ token: ClrStackView }], target: i0.ɵɵFactoryTarget.Component });
18774
- ClrStackInput.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.0.2", type: ClrStackInput, selector: "clr-stack-input", inputs: { model: ["clrModel", "model"], type: "type" }, outputs: { modelChange: "clrModelChange" }, usesInheritance: true, ngImport: i0, template: `
18775
- <span *ngIf="!stackView.editing">{{ model }}</span>
18776
- <input [type]="type" *ngIf="stackView.editing" [(ngModel)]="model" />
18777
- `, isInline: true, dependencies: [{ kind: "directive", type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }] });
18778
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.2", ngImport: i0, type: ClrStackInput, decorators: [{
18779
- type: Component,
18780
- args: [{
18781
- selector: 'clr-stack-input',
18782
- inputs: ['model: clrModel', 'type'],
18783
- outputs: ['modelChange: clrModelChange'],
18784
- template: `
18785
- <span *ngIf="!stackView.editing">{{ model }}</span>
18786
- <input [type]="type" *ngIf="stackView.editing" [(ngModel)]="model" />
18787
- `,
18788
- }]
18789
- }], ctorParameters: function () { return [{ type: ClrStackView }]; } });
18790
-
18791
- /*
18792
- * Copyright (c) 2016-2022 VMware, Inc. All Rights Reserved.
18793
- * This software is released under MIT license.
18794
- * The full license information can be found in LICENSE in the root directory of this project.
18795
- */
18796
- class ClrStackSelect extends StackControl {
18797
- constructor(stackView) {
18798
- super(stackView);
18799
- this.stackView = stackView;
18800
- }
18801
- }
18802
- ClrStackSelect.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.0.2", ngImport: i0, type: ClrStackSelect, deps: [{ token: ClrStackView }], target: i0.ɵɵFactoryTarget.Component });
18803
- ClrStackSelect.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.0.2", type: ClrStackSelect, selector: "clr-stack-select", inputs: { model: ["clrModel", "model"] }, outputs: { modelChange: "clrModelChange" }, usesInheritance: true, ngImport: i0, template: `
18804
- <span *ngIf="!stackView.editing">{{ model }}</span>
18805
- <div class="select" *ngIf="stackView.editing">
18806
- <select [(ngModel)]="model">
18807
- <ng-content></ng-content>
18808
- </select>
18809
- </div>
18810
- `, isInline: true, dependencies: [{ kind: "directive", type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.SelectControlValueAccessor, selector: "select:not([multiple])[formControlName],select:not([multiple])[formControl],select:not([multiple])[ngModel]", inputs: ["compareWith"] }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }] });
18811
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.2", ngImport: i0, type: ClrStackSelect, decorators: [{
18812
- type: Component,
18813
- args: [{
18814
- selector: 'clr-stack-select',
18815
- inputs: ['model: clrModel'],
18816
- outputs: ['modelChange: clrModelChange'],
18817
- template: `
18818
- <span *ngIf="!stackView.editing">{{ model }}</span>
18819
- <div class="select" *ngIf="stackView.editing">
18820
- <select [(ngModel)]="model">
18821
- <ng-content></ng-content>
18822
- </select>
18823
- </div>
18824
- `,
18825
- }]
18826
- }], ctorParameters: function () { return [{ type: ClrStackView }]; } });
18827
-
18828
17288
  /*
18829
17289
  * Copyright (c) 2016-2022 VMware, Inc. All Rights Reserved.
18830
17290
  * This software is released under MIT license.
@@ -18837,14 +17297,6 @@ const CLR_STACK_VIEW_DIRECTIVES = [
18837
17297
  ClrStackContentInput,
18838
17298
  ClrStackViewLabel,
18839
17299
  ClrStackViewCustomTags,
18840
- /**
18841
- * Undocumented experimental feature: inline editing.
18842
- */
18843
- ClrStackInput,
18844
- ClrStackSelect,
18845
- /**
18846
- * End of undocumented experimental feature.
18847
- */
18848
17300
  ];
18849
17301
  class ClrStackViewModule {
18850
17302
  constructor() {
@@ -18857,22 +17309,12 @@ ClrStackViewModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", vers
18857
17309
  ClrStackBlock,
18858
17310
  ClrStackContentInput,
18859
17311
  ClrStackViewLabel,
18860
- ClrStackViewCustomTags,
18861
- /**
18862
- * Undocumented experimental feature: inline editing.
18863
- */
18864
- ClrStackInput,
18865
- ClrStackSelect], imports: [CommonModule, FormsModule, ClrIconModule, ClrExpandableAnimationModule], exports: [ClrStackView,
17312
+ ClrStackViewCustomTags], imports: [CommonModule, FormsModule, ClrIconModule, ClrExpandableAnimationModule], exports: [ClrStackView,
18866
17313
  ClrStackHeader,
18867
17314
  ClrStackBlock,
18868
17315
  ClrStackContentInput,
18869
17316
  ClrStackViewLabel,
18870
- ClrStackViewCustomTags,
18871
- /**
18872
- * Undocumented experimental feature: inline editing.
18873
- */
18874
- ClrStackInput,
18875
- ClrStackSelect] });
17317
+ ClrStackViewCustomTags] });
18876
17318
  ClrStackViewModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "15.0.2", ngImport: i0, type: ClrStackViewModule, imports: [CommonModule, FormsModule, ClrIconModule, ClrExpandableAnimationModule] });
18877
17319
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.2", ngImport: i0, type: ClrStackViewModule, decorators: [{
18878
17320
  type: NgModule,
@@ -19497,13 +17939,13 @@ const LVIEW_CONTEXT_INDEX = 8;
19497
17939
  // then those keys are sent together in one request.
19498
17940
  const TREE_TYPE_AHEAD_TIMEOUT = 200;
19499
17941
  class ClrTreeNode {
19500
- constructor(platformId, parent, forTypeAheadProvider, featuresService, expandService, commonStrings, focusManager, injector) {
17942
+ constructor(platformId, parent, featuresService, expandService, commonStrings, focusManager, elementRef, injector) {
19501
17943
  this.platformId = platformId;
19502
- this.forTypeAheadProvider = forTypeAheadProvider;
19503
17944
  this.featuresService = featuresService;
19504
17945
  this.expandService = expandService;
19505
17946
  this.commonStrings = commonStrings;
19506
17947
  this.focusManager = focusManager;
17948
+ this.elementRef = elementRef;
19507
17949
  this.STATES = ClrSelectedState;
19508
17950
  this.skipEmitChange = false;
19509
17951
  this.isModelLoading = false;
@@ -19582,6 +18024,9 @@ class ClrTreeNode {
19582
18024
  set expanded(value) {
19583
18025
  this.expandService.expanded = value;
19584
18026
  }
18027
+ set clrForTypeAhead(value) {
18028
+ this._model.textContent = trimAndLowerCase(value || this.elementRef.nativeElement.textContent);
18029
+ }
19585
18030
  ngOnInit() {
19586
18031
  this._model.expanded = this.expanded;
19587
18032
  this.subscriptions.push(this._model.selected.pipe(filter(() => !this.skipEmitChange)).subscribe(value => {
@@ -19601,14 +18046,14 @@ class ClrTreeNode {
19601
18046
  this.subscriptions.push(this._model.loading$.pipe(debounceTime(0)).subscribe(isLoading => (this.isModelLoading = isLoading)));
19602
18047
  }
19603
18048
  ngAfterContentInit() {
19604
- if (this.forTypeAheadProvider) {
19605
- this._model.textContent = this.forTypeAheadProvider.textContent;
19606
- this.subscriptions.push(this.typeAheadKeyEvent.pipe(debounceTime(TREE_TYPE_AHEAD_TIMEOUT)).subscribe((bufferedKeys) => {
19607
- this.focusManager.focusNodeStartsWith(bufferedKeys, this._model);
19608
- // reset once bufferedKeys are used
19609
- this.typeAheadKeyBuffer = '';
19610
- }));
18049
+ if (!this._model.textContent) {
18050
+ this._model.textContent = trimAndLowerCase(this.elementRef.nativeElement.textContent);
19611
18051
  }
18052
+ this.subscriptions.push(this.typeAheadKeyEvent.pipe(debounceTime(TREE_TYPE_AHEAD_TIMEOUT)).subscribe((bufferedKeys) => {
18053
+ this.focusManager.focusNodeStartsWith(bufferedKeys, this._model);
18054
+ // reset once bufferedKeys are used
18055
+ this.typeAheadKeyBuffer = '';
18056
+ }));
19612
18057
  }
19613
18058
  ngOnDestroy() {
19614
18059
  this._model.destroy();
@@ -19730,8 +18175,8 @@ class ClrTreeNode {
19730
18175
  }
19731
18176
  }
19732
18177
  }
19733
- ClrTreeNode.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.0.2", ngImport: i0, type: ClrTreeNode, deps: [{ token: PLATFORM_ID }, { token: ClrTreeNode, optional: true, skipSelf: true }, { token: ForTypeAheadProvider, optional: true, self: true }, { token: TreeFeaturesService }, { token: IfExpandService }, { token: ClrCommonStringsService }, { token: TreeFocusManagerService }, { token: i0.Injector }], target: i0.ɵɵFactoryTarget.Component });
19734
- ClrTreeNode.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.0.2", type: ClrTreeNode, selector: "clr-tree-node", inputs: { selected: ["clrSelected", "selected"], expandable: ["clrExpandable", "expandable"], expanded: ["clrExpanded", "expanded"] }, outputs: { selectedChange: "clrSelectedChange", expandedChange: "clrExpandedChange" }, host: { properties: { "class.clr-tree-node": "true" } }, providers: [TREE_FEATURES_PROVIDER, IfExpandService, { provide: LoadingListener, useExisting: IfExpandService }], queries: [{ propertyName: "treeNodeLinkList", predicate: ClrTreeNodeLink }], viewQueries: [{ propertyName: "contentContainer", first: true, predicate: ["contentContainer"], descendants: true, read: ElementRef, static: true }], ngImport: i0, 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 || ariaSelected\">\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", dependencies: [{ kind: "directive", type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: CdsIconCustomTag, selector: "cds-icon" }, { kind: "component", type: RecursiveChildren, selector: "clr-recursive-children", inputs: ["parent", "children"] }], animations: [
18178
+ ClrTreeNode.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.0.2", ngImport: i0, type: ClrTreeNode, deps: [{ token: PLATFORM_ID }, { token: ClrTreeNode, optional: true, skipSelf: true }, { token: TreeFeaturesService }, { token: IfExpandService }, { token: ClrCommonStringsService }, { token: TreeFocusManagerService }, { token: i0.ElementRef }, { token: i0.Injector }], target: i0.ɵɵFactoryTarget.Component });
18179
+ ClrTreeNode.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.0.2", type: ClrTreeNode, selector: "clr-tree-node", inputs: { selected: ["clrSelected", "selected"], expandable: ["clrExpandable", "expandable"], expanded: ["clrExpanded", "expanded"], clrForTypeAhead: "clrForTypeAhead" }, outputs: { selectedChange: "clrSelectedChange", expandedChange: "clrExpandedChange" }, host: { properties: { "class.clr-tree-node": "true" } }, providers: [TREE_FEATURES_PROVIDER, IfExpandService, { provide: LoadingListener, useExisting: IfExpandService }], queries: [{ propertyName: "treeNodeLinkList", predicate: ClrTreeNodeLink }], viewQueries: [{ propertyName: "contentContainer", first: true, predicate: ["contentContainer"], descendants: true, read: ElementRef, static: true }], ngImport: i0, 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 || ariaSelected\">\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", dependencies: [{ kind: "directive", type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: CdsIconCustomTag, selector: "cds-icon" }, { kind: "component", type: RecursiveChildren, selector: "clr-recursive-children", inputs: ["parent", "children"] }], animations: [
19735
18180
  trigger('toggleChildrenAnim', [
19736
18181
  transition('collapsed => expanded', [style({ height: 0 }), animate(200, style({ height: '*' }))]),
19737
18182
  transition('expanded => collapsed', [style({ height: '*' }), animate(200, style({ height: 0 }))]),
@@ -19758,11 +18203,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.2", ngImpor
19758
18203
  type: Optional
19759
18204
  }, {
19760
18205
  type: SkipSelf
19761
- }] }, { type: ForTypeAheadProvider, decorators: [{
19762
- type: Optional
19763
- }, {
19764
- type: Self
19765
- }] }, { type: TreeFeaturesService }, { type: IfExpandService }, { type: ClrCommonStringsService }, { type: TreeFocusManagerService }, { type: i0.Injector }]; }, propDecorators: { selected: [{
18206
+ }] }, { type: TreeFeaturesService }, { type: IfExpandService }, { type: ClrCommonStringsService }, { type: TreeFocusManagerService }, { type: i0.ElementRef }, { type: i0.Injector }]; }, propDecorators: { selected: [{
19766
18207
  type: Input,
19767
18208
  args: ['clrSelected']
19768
18209
  }], selectedChange: [{
@@ -19774,6 +18215,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.2", ngImpor
19774
18215
  }], expanded: [{
19775
18216
  type: Input,
19776
18217
  args: ['clrExpanded']
18218
+ }], clrForTypeAhead: [{
18219
+ type: Input,
18220
+ args: ['clrForTypeAhead']
19777
18221
  }], expandedChange: [{
19778
18222
  type: Output,
19779
18223
  args: ['clrExpandedChange']
@@ -19784,6 +18228,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.2", ngImpor
19784
18228
  type: ContentChildren,
19785
18229
  args: [ClrTreeNodeLink, { descendants: false }]
19786
18230
  }] } });
18231
+ function trimAndLowerCase(value) {
18232
+ return value.toLocaleLowerCase().trim();
18233
+ }
19787
18234
 
19788
18235
  /*
19789
18236
  * Copyright (c) 2016-2022 VMware, Inc. All Rights Reserved.
@@ -20266,13 +18713,10 @@ const BASIC_FOCUSABLE_ITEM_PROVIDER = [
20266
18713
  * The full license information can be found in LICENSE in the root directory of this project.
20267
18714
  */
20268
18715
  class ClrDropdownItem {
20269
- constructor(dropdown, el, _dropdownService, renderer, focusableItem) {
18716
+ constructor(dropdown, _dropdownService, focusableItem) {
20270
18717
  this.dropdown = dropdown;
20271
- this.el = el;
20272
18718
  this._dropdownService = _dropdownService;
20273
- this.renderer = renderer;
20274
18719
  this.focusableItem = focusableItem;
20275
- this.setByDeprecatedDisabled = false;
20276
18720
  }
20277
18721
  set disabled(value) {
20278
18722
  // Empty string attribute evaluates to false but should disable the item, so we need to add a special case for it.
@@ -20281,17 +18725,6 @@ class ClrDropdownItem {
20281
18725
  get disabled() {
20282
18726
  return this.focusableItem.disabled;
20283
18727
  }
20284
- /*
20285
- * @deprecated since 3.0, remove in 4.0. the presence of this attribute makes it not-focusable in IE11. Use [clrDisabled] input instead.
20286
- */
20287
- set disabledDeprecated(value) {
20288
- // Empty string attribute evaluates to false but should disable the item, so we need to add a special case for it.
20289
- this.focusableItem.disabled = !!value || value === '';
20290
- this.setByDeprecatedDisabled = true;
20291
- }
20292
- get disabledDeprecated() {
20293
- return this.focusableItem.disabled;
20294
- }
20295
18728
  /**
20296
18729
  * Let you overwrite the focusable auto increment id.
20297
18730
  */
@@ -20301,22 +18734,28 @@ class ClrDropdownItem {
20301
18734
  get dropdownItemId() {
20302
18735
  return this.focusableItem.id;
20303
18736
  }
20304
- ngAfterViewInit() {
20305
- this.unlisten = this.renderer.listen(this.el.nativeElement, 'click', () => this.onDropdownItemClick());
20306
- }
20307
18737
  onDropdownItemClick() {
20308
- if (this.dropdown.isMenuClosable && !this.el.nativeElement.classList.contains('disabled')) {
20309
- this._dropdownService.closeMenus();
20310
- }
18738
+ // Ensure that the dropdown is closed after custom dropdown item click event handlers have run.
18739
+ setTimeout(() => {
18740
+ if (this.dropdown.isMenuClosable && !this.disabled) {
18741
+ this._dropdownService.closeMenus();
18742
+ }
18743
+ });
20311
18744
  }
20312
- ngOnDestroy() {
20313
- if (this.unlisten) {
20314
- this.unlisten();
18745
+ onSpaceKeydown($event) {
18746
+ this.stopImmediatePropagationIfDisabled($event);
18747
+ }
18748
+ onEnterKeydown($event) {
18749
+ this.stopImmediatePropagationIfDisabled($event);
18750
+ }
18751
+ stopImmediatePropagationIfDisabled($event) {
18752
+ if (this.disabled) {
18753
+ $event.stopImmediatePropagation();
20315
18754
  }
20316
18755
  }
20317
18756
  }
20318
- ClrDropdownItem.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.0.2", ngImport: i0, type: ClrDropdownItem, deps: [{ token: ClrDropdown }, { token: i0.ElementRef }, { token: RootDropdownService }, { token: i0.Renderer2 }, { token: FocusableItem }], target: i0.ɵɵFactoryTarget.Directive });
20319
- ClrDropdownItem.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "15.0.2", type: ClrDropdownItem, selector: "[clrDropdownItem]", inputs: { disabled: ["clrDisabled", "disabled"], disabledDeprecated: ["disabled", "disabledDeprecated"], dropdownItemId: ["id", "dropdownItemId"] }, host: { properties: { "class.disabled": "disabled", "class.dropdown-item": "true", "attr.role": "\"menuitem\"", "attr.aria-disabled": "disabled", "attr.disabled": "(disabled && setByDeprecatedDisabled)? '' : null", "attr.id": "dropdownItemId" } }, providers: [BASIC_FOCUSABLE_ITEM_PROVIDER], ngImport: i0 });
18757
+ ClrDropdownItem.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.0.2", ngImport: i0, type: ClrDropdownItem, deps: [{ token: ClrDropdown }, { token: RootDropdownService }, { token: FocusableItem }], target: i0.ɵɵFactoryTarget.Directive });
18758
+ ClrDropdownItem.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "15.0.2", type: ClrDropdownItem, selector: "[clrDropdownItem]", inputs: { disabled: ["clrDisabled", "disabled"], dropdownItemId: ["id", "dropdownItemId"] }, host: { listeners: { "click": "onDropdownItemClick()", "keydown.space": "onSpaceKeydown($event)", "keydown.enter": "onEnterKeydown($event)" }, properties: { "class.disabled": "disabled", "class.dropdown-item": "true", "attr.role": "\"menuitem\"", "attr.aria-disabled": "disabled", "attr.id": "dropdownItemId" } }, providers: [BASIC_FOCUSABLE_ITEM_PROVIDER], ngImport: i0 });
20320
18759
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.2", ngImport: i0, type: ClrDropdownItem, decorators: [{
20321
18760
  type: Directive,
20322
18761
  args: [{
@@ -20326,20 +18765,25 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.2", ngImpor
20326
18765
  '[class.dropdown-item]': 'true',
20327
18766
  '[attr.role]': '"menuitem"',
20328
18767
  '[attr.aria-disabled]': 'disabled',
20329
- '[attr.disabled]': "(disabled && setByDeprecatedDisabled)? '' : null",
20330
18768
  '[attr.id]': 'dropdownItemId',
20331
18769
  },
20332
18770
  providers: [BASIC_FOCUSABLE_ITEM_PROVIDER],
20333
18771
  }]
20334
- }], ctorParameters: function () { return [{ type: ClrDropdown }, { type: i0.ElementRef }, { type: RootDropdownService }, { type: i0.Renderer2 }, { type: FocusableItem }]; }, propDecorators: { disabled: [{
18772
+ }], ctorParameters: function () { return [{ type: ClrDropdown }, { type: RootDropdownService }, { type: FocusableItem }]; }, propDecorators: { disabled: [{
20335
18773
  type: Input,
20336
18774
  args: ['clrDisabled']
20337
- }], disabledDeprecated: [{
20338
- type: Input,
20339
- args: ['disabled']
20340
18775
  }], dropdownItemId: [{
20341
18776
  type: Input,
20342
18777
  args: ['id']
18778
+ }], onDropdownItemClick: [{
18779
+ type: HostListener,
18780
+ args: ['click']
18781
+ }], onSpaceKeydown: [{
18782
+ type: HostListener,
18783
+ args: ['keydown.space', ['$event']]
18784
+ }], onEnterKeydown: [{
18785
+ type: HostListener,
18786
+ args: ['keydown.enter', ['$event']]
20343
18787
  }] } });
20344
18788
 
20345
18789
  /*
@@ -21835,143 +20279,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.2", ngImpor
21835
20279
  }]
21836
20280
  }], ctorParameters: function () { return [{ type: ResponsiveNavigationService }, { type: ClrCommonStringsService }]; } });
21837
20281
 
21838
- /*
21839
- * Copyright (c) 2016-2022 VMware, Inc. All Rights Reserved.
21840
- * This software is released under MIT license.
21841
- * The full license information can be found in LICENSE in the root directory of this project.
21842
- */
21843
- function refocusIfOutsideFocusTrapElement(focusedElement, focusTrapElement, elementToRefocus) {
21844
- const focusTrapIsCurrent = FocusTrapTrackerService.getCurrent() === focusTrapElement;
21845
- const elementToFocusIsOutsideFocusTrap = elementIsOutsideFocusTrapElement(focusedElement, focusTrapElement);
21846
- if (focusTrapIsCurrent && elementToFocusIsOutsideFocusTrap) {
21847
- elementToRefocus = elementToRefocus || focusTrapElement;
21848
- elementToRefocus.focus();
21849
- }
21850
- else {
21851
- focusedElement.focus();
21852
- }
21853
- }
21854
- function elementIsOutsideFocusTrapElement(focusedElement, focusTrapElement) {
21855
- if (focusedElement === focusTrapElement.topReboundElement ||
21856
- focusedElement === focusTrapElement.bottomReboundElement) {
21857
- return true;
21858
- }
21859
- const elementIsInFocusTrapLightDom = focusTrapElement.contains(focusedElement);
21860
- if (elementIsInFocusTrapLightDom) {
21861
- return false;
21862
- }
21863
- if (focusTrapElement !== null && focusTrapElement.contains(focusedElement)) {
21864
- return false;
21865
- }
21866
- return true;
21867
- }
21868
- function createFocusTrapReboundElement(document) {
21869
- const offScreenSpan = document.createElement('span');
21870
- offScreenSpan.setAttribute('tabindex', '0');
21871
- offScreenSpan.classList.add('offscreen-focus-rebounder');
21872
- return offScreenSpan;
21873
- }
21874
- function addReboundElementsToFocusTrapElement(document, focusTrapElement) {
21875
- if (focusTrapElement && !focusTrapElement.topReboundElement && !focusTrapElement.bottomReboundElement) {
21876
- focusTrapElement.topReboundElement = createFocusTrapReboundElement(document);
21877
- focusTrapElement.bottomReboundElement = createFocusTrapReboundElement(document);
21878
- const parent = focusTrapElement.parentElement;
21879
- const sibling = focusTrapElement.nextSibling;
21880
- if (parent) {
21881
- parent.insertBefore(focusTrapElement.topReboundElement, focusTrapElement);
21882
- if (sibling) {
21883
- parent.insertBefore(focusTrapElement.bottomReboundElement, sibling);
21884
- }
21885
- else {
21886
- parent.appendChild(focusTrapElement.bottomReboundElement);
21887
- }
21888
- }
21889
- }
21890
- }
21891
- function removeReboundElementsFromFocusTrapElement(focusTrapElement) {
21892
- if (focusTrapElement) {
21893
- const parent = focusTrapElement.parentElement;
21894
- if (parent) {
21895
- const topRebound = focusTrapElement.topReboundElement;
21896
- const bottomRebound = focusTrapElement.bottomReboundElement;
21897
- if (topRebound) {
21898
- parent.removeChild(topRebound);
21899
- }
21900
- if (bottomRebound) {
21901
- parent.removeChild(bottomRebound);
21902
- }
21903
- }
21904
- // These are here to to make sure that we completely delete all traces of the removed DOM objects.
21905
- delete focusTrapElement.topReboundElement;
21906
- delete focusTrapElement.bottomReboundElement;
21907
- }
21908
- }
21909
- // this helper exists to enable the focus trap class to handle vanilla html elements
21910
- // it's primary concern is to keep TS happy.
21911
- function castHtmlElementToFocusTrapElement(el) {
21912
- return el;
21913
- }
21914
- class FocusTrap {
21915
- constructor(renderer, injector, platformId, hostElement) {
21916
- this.renderer = renderer;
21917
- this.active = false;
21918
- if (isPlatformBrowser(platformId)) {
21919
- this._document = injector.get(DOCUMENT);
21920
- }
21921
- hostElement = castHtmlElementToFocusTrapElement(hostElement);
21922
- if (!hostElement.focusTrapId) {
21923
- hostElement.focusTrapId = createId();
21924
- }
21925
- this.focusTrapElement = hostElement;
21926
- }
21927
- enableFocusTrap() {
21928
- const fte = this.focusTrapElement;
21929
- const firstFocusElement = fte.querySelector('[cds-first-focus]');
21930
- const activeEl = this._document.activeElement;
21931
- if (FocusTrapTrackerService.getCurrent() === fte) {
21932
- throw new Error('Focus trap is already enabled for this instance.');
21933
- }
21934
- this.firstFocusElement = firstFocusElement || this.focusTrapElement;
21935
- addReboundElementsToFocusTrapElement(this._document, fte);
21936
- if (!isFocusable(fte)) {
21937
- fte.setAttribute('tabindex', '-1');
21938
- }
21939
- if (activeEl && isHTMLElement(activeEl)) {
21940
- this.previousFocus = activeEl;
21941
- }
21942
- FocusTrapTrackerService.setCurrent(fte);
21943
- // setTimeout here is required for Safari which may try to set focus on
21944
- // element before it is visible...
21945
- const focusTimer = setTimeout(() => {
21946
- this.firstFocusElement.focus();
21947
- clearTimeout(focusTimer);
21948
- }, 10);
21949
- this.onFocusInEvent = this.onFocusIn.bind(this);
21950
- this.unlisten = this.renderer.listen(this._document, 'focusin', this.onFocusInEvent);
21951
- this.active = true;
21952
- }
21953
- removeFocusTrap() {
21954
- if (this.unlisten) {
21955
- this.unlisten();
21956
- }
21957
- removeReboundElementsFromFocusTrapElement(this.focusTrapElement);
21958
- this.renderer.removeAttribute(this.focusTrapElement, 'tabindex');
21959
- FocusTrapTrackerService.activatePreviousCurrent();
21960
- this.active = false;
21961
- if (this.previousFocus) {
21962
- this.previousFocus.focus();
21963
- }
21964
- }
21965
- onFocusIn(event) {
21966
- refocusIfOutsideFocusTrapElement(event.composedPath()[0], this.focusTrapElement, this.firstFocusElement);
21967
- }
21968
- }
21969
- FocusTrap.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.0.2", ngImport: i0, type: FocusTrap, deps: "invalid", target: i0.ɵɵFactoryTarget.Injectable });
21970
- FocusTrap.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.0.2", ngImport: i0, type: FocusTrap });
21971
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.2", ngImport: i0, type: FocusTrap, decorators: [{
21972
- type: Injectable
21973
- }], ctorParameters: function () { return [{ type: i0.Renderer2 }, { type: i0.Injector }, { type: undefined }, { type: undefined }]; } });
21974
-
21975
20282
  /*
21976
20283
  * Copyright (c) 2016-2022 VMware, Inc. All Rights Reserved.
21977
20284
  * This software is released under MIT license.
@@ -21990,11 +20297,22 @@ const createCdsCloseButton = (document, ariaLabel) => {
21990
20297
  cdsCloseButton.className = 'clr-nav-close';
21991
20298
  return cdsCloseButton;
21992
20299
  };
21993
- class ClrNavLevel extends FocusTrap {
21994
- constructor(platformId, responsiveNavService, elementRef, renderer, injector) {
21995
- super(renderer, injector, platformId, elementRef.nativeElement);
20300
+ class StandaloneCdkTrapFocus extends CdkTrapFocus {
20301
+ }
20302
+ StandaloneCdkTrapFocus.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.0.2", ngImport: i0, type: StandaloneCdkTrapFocus, deps: null, target: i0.ɵɵFactoryTarget.Directive });
20303
+ StandaloneCdkTrapFocus.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "15.0.2", type: StandaloneCdkTrapFocus, isStandalone: true, usesInheritance: true, ngImport: i0 });
20304
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.2", ngImport: i0, type: StandaloneCdkTrapFocus, decorators: [{
20305
+ type: Directive,
20306
+ args: [{
20307
+ standalone: true,
20308
+ }]
20309
+ }] });
20310
+ class ClrNavLevel {
20311
+ constructor(platformId, cdkTrapFocus, responsiveNavService, elementRef, renderer, injector) {
20312
+ this.cdkTrapFocus = cdkTrapFocus;
21996
20313
  this.responsiveNavService = responsiveNavService;
21997
20314
  this.elementRef = elementRef;
20315
+ this.renderer = renderer;
21998
20316
  this._isOpen = false;
21999
20317
  if (isPlatformBrowser(platformId)) {
22000
20318
  this._document = injector.get(DOCUMENT);
@@ -22014,6 +20332,7 @@ class ClrNavLevel extends FocusTrap {
22014
20332
  .subscribe(() => this.close()));
22015
20333
  }
22016
20334
  ngOnInit() {
20335
+ this.cdkTrapFocus.enabled = false;
22017
20336
  if (!this.closeButtonAriaLabel) {
22018
20337
  this.closeButtonAriaLabel =
22019
20338
  this._level === ResponsiveNavCodes.NAV_LEVEL_1
@@ -22071,14 +20390,14 @@ class ClrNavLevel extends FocusTrap {
22071
20390
  open() {
22072
20391
  this._isOpen = true;
22073
20392
  this.showNavigation();
22074
- this.enableFocusTrap();
20393
+ this.cdkTrapFocus.enabled = true;
22075
20394
  this.showCloseButton();
22076
20395
  this.responsiveNavService.sendControlMessage(ResponsiveNavCodes.NAV_OPEN, this.level);
22077
20396
  }
22078
20397
  close() {
22079
20398
  this._isOpen = false;
22080
20399
  this.hideNavigation();
22081
- this.removeFocusTrap();
20400
+ this.cdkTrapFocus.enabled = false;
22082
20401
  this.hideCloseButton();
22083
20402
  this.responsiveNavService.sendControlMessage(ResponsiveNavCodes.NAV_CLOSE, this.level);
22084
20403
  }
@@ -22123,17 +20442,18 @@ class ClrNavLevel extends FocusTrap {
22123
20442
  this._subscription.unsubscribe();
22124
20443
  }
22125
20444
  }
22126
- ClrNavLevel.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.0.2", ngImport: i0, type: ClrNavLevel, deps: [{ token: PLATFORM_ID }, { token: ResponsiveNavigationService }, { token: i0.ElementRef }, { token: i0.Renderer2 }, { token: i0.Injector }], target: i0.ɵɵFactoryTarget.Directive });
22127
- ClrNavLevel.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "15.0.2", type: ClrNavLevel, selector: "[clr-nav-level]", inputs: { _level: ["clr-nav-level", "_level"], closeButtonAriaLabel: ["closeAriaLabel", "closeButtonAriaLabel"] }, host: { listeners: { "window:resize": "onResize($event)", "click": "onMouseClick($event.target)" } }, usesInheritance: true, ngImport: i0 });
20445
+ ClrNavLevel.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.0.2", ngImport: i0, type: ClrNavLevel, deps: [{ token: PLATFORM_ID }, { token: StandaloneCdkTrapFocus }, { token: ResponsiveNavigationService }, { token: i0.ElementRef }, { token: i0.Renderer2 }, { token: i0.Injector }], target: i0.ɵɵFactoryTarget.Directive });
20446
+ ClrNavLevel.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "15.0.2", type: ClrNavLevel, selector: "[clr-nav-level]", inputs: { _level: ["clr-nav-level", "_level"], closeButtonAriaLabel: ["closeAriaLabel", "closeButtonAriaLabel"] }, host: { listeners: { "window:resize": "onResize($event)", "click": "onMouseClick($event.target)" } }, hostDirectives: [{ directive: StandaloneCdkTrapFocus }], ngImport: i0 });
22128
20447
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.2", ngImport: i0, type: ClrNavLevel, decorators: [{
22129
20448
  type: Directive,
22130
20449
  args: [{
22131
20450
  selector: '[clr-nav-level]',
20451
+ hostDirectives: [StandaloneCdkTrapFocus],
22132
20452
  }]
22133
20453
  }], ctorParameters: function () { return [{ type: undefined, decorators: [{
22134
20454
  type: Inject,
22135
20455
  args: [PLATFORM_ID]
22136
- }] }, { type: ResponsiveNavigationService }, { type: i0.ElementRef }, { type: i0.Renderer2 }, { type: i0.Injector }]; }, propDecorators: { _level: [{
20456
+ }] }, { type: StandaloneCdkTrapFocus }, { type: ResponsiveNavigationService }, { type: i0.ElementRef }, { type: i0.Renderer2 }, { type: i0.Injector }]; }, propDecorators: { _level: [{
22137
20457
  type: Input,
22138
20458
  args: ['clr-nav-level']
22139
20459
  }], closeButtonAriaLabel: [{
@@ -23125,7 +21445,6 @@ class ClrVerticalNavGroup {
23125
21445
  this._navService = _navService;
23126
21446
  this.commonStrings = commonStrings;
23127
21447
  this.wasExpanded = false;
23128
- this.groupLabel = this.commonStrings.keys.verticalNavGroupToggle;
23129
21448
  this.expandedChange = new EventEmitter(true);
23130
21449
  this._subscriptions = [];
23131
21450
  this._expandAnimationState = COLLAPSED_STATE;
@@ -23235,7 +21554,7 @@ class ClrVerticalNavGroup {
23235
21554
  }
23236
21555
  }
23237
21556
  ClrVerticalNavGroup.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.0.2", ngImport: i0, type: ClrVerticalNavGroup, deps: [{ token: IfExpandService }, { token: VerticalNavGroupRegistrationService }, { token: VerticalNavGroupService }, { token: VerticalNavService }, { token: ClrCommonStringsService }], target: i0.ɵɵFactoryTarget.Component });
23238
- ClrVerticalNavGroup.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.0.2", type: ClrVerticalNavGroup, selector: "clr-vertical-nav-group", inputs: { groupLabel: ["clrVerticalNavGroupLabel", "groupLabel"], userExpandedInput: ["clrVerticalNavGroupExpanded", "userExpandedInput"] }, outputs: { expandedChange: "clrVerticalNavGroupExpandedChange" }, host: { properties: { "class.is-expanded": "this.expanded" }, classAttribute: "nav-group" }, providers: [IfExpandService, VerticalNavGroupService], ngImport: i0, 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]=\"expanded ? 'down' : 'right'\"\n [attr.title]=\"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", dependencies: [{ kind: "directive", type: CdsIconCustomTag, selector: "cds-icon" }], animations: [
21557
+ ClrVerticalNavGroup.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.0.2", type: ClrVerticalNavGroup, selector: "clr-vertical-nav-group", inputs: { userExpandedInput: ["clrVerticalNavGroupExpanded", "userExpandedInput"] }, outputs: { expandedChange: "clrVerticalNavGroupExpandedChange" }, host: { properties: { "class.is-expanded": "this.expanded" }, classAttribute: "nav-group" }, providers: [IfExpandService, VerticalNavGroupService], ngImport: i0, 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 class=\"nav-group-trigger\" type=\"button\" [attr.aria-expanded]=\"expanded\" (click)=\"toggleExpand()\">\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]=\"expanded ? 'down' : 'right'\"\n [attr.title]=\"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", dependencies: [{ kind: "directive", type: CdsIconCustomTag, selector: "cds-icon" }], animations: [
23239
21558
  trigger('clrExpand', [
23240
21559
  state(EXPANDED_STATE, style({ height: '*' })),
23241
21560
  state(COLLAPSED_STATE, style({ height: 0, visibility: 'hidden' })),
@@ -23250,13 +21569,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.2", ngImpor
23250
21569
  state(COLLAPSED_STATE, style({ height: 0, visibility: 'hidden' })),
23251
21570
  transition(`${EXPANDED_STATE} <=> ${COLLAPSED_STATE}`, animate('0.2s ease-in-out')),
23252
21571
  ]),
23253
- ], host: { class: 'nav-group' }, 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]=\"expanded ? 'down' : 'right'\"\n [attr.title]=\"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" }]
21572
+ ], host: { class: 'nav-group' }, 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 class=\"nav-group-trigger\" type=\"button\" [attr.aria-expanded]=\"expanded\" (click)=\"toggleExpand()\">\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]=\"expanded ? 'down' : 'right'\"\n [attr.title]=\"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" }]
23254
21573
  }], ctorParameters: function () { return [{ type: IfExpandService }, { type: VerticalNavGroupRegistrationService }, { type: VerticalNavGroupService }, { type: VerticalNavService }, { type: ClrCommonStringsService }]; }, propDecorators: { expanded: [{
23255
21574
  type: HostBinding,
23256
21575
  args: ['class.is-expanded']
23257
- }], groupLabel: [{
23258
- type: Input,
23259
- args: ['clrVerticalNavGroupLabel']
23260
21576
  }], userExpandedInput: [{
23261
21577
  type: Input,
23262
21578
  args: ['clrVerticalNavGroupExpanded']
@@ -23451,15 +21767,13 @@ class ClrModal {
23451
21767
  this.closeButtonAriaLabel = this.commonStrings.keys.close;
23452
21768
  this.staticBackdrop = true;
23453
21769
  this.skipAnimation = 'false';
23454
- // presently this is only used by wizards
23455
- this.bypassScrollService = false;
23456
21770
  this.stopClose = false;
23457
21771
  this.altClose = new EventEmitter(false);
23458
21772
  this.labelledBy = this.modalId;
23459
21773
  }
23460
21774
  // Detect when _open is set to true and set no-scrolling to true
23461
21775
  ngOnChanges(changes) {
23462
- if (!this.bypassScrollService && changes && Object.prototype.hasOwnProperty.call(changes, '_open')) {
21776
+ if (changes && Object.prototype.hasOwnProperty.call(changes, '_open')) {
23463
21777
  if (changes._open.currentValue) {
23464
21778
  this._scrollingService.stopScrolling();
23465
21779
  }
@@ -23487,8 +21801,6 @@ class ClrModal {
23487
21801
  return;
23488
21802
  }
23489
21803
  this._open = false;
23490
- // SPECME
23491
- this.focusTrap.setPreviousFocus(); // Handles moving focus back to the element that had it before.
23492
21804
  }
23493
21805
  fadeDone(e) {
23494
21806
  if (e.toState === 'void') {
@@ -23498,7 +21810,7 @@ class ClrModal {
23498
21810
  }
23499
21811
  }
23500
21812
  ClrModal.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.0.2", ngImport: i0, type: ClrModal, deps: [{ token: ScrollingService }, { token: ClrCommonStringsService }], target: i0.ɵɵFactoryTarget.Component });
23501
- ClrModal.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.0.2", type: ClrModal, selector: "clr-modal", inputs: { _open: ["clrModalOpen", "_open"], closable: ["clrModalClosable", "closable"], closeButtonAriaLabel: ["clrModalCloseButtonAriaLabel", "closeButtonAriaLabel"], size: ["clrModalSize", "size"], staticBackdrop: ["clrModalStaticBackdrop", "staticBackdrop"], skipAnimation: ["clrModalSkipAnimation", "skipAnimation"], bypassScrollService: ["clrModalOverrideScrollService", "bypassScrollService"], stopClose: ["clrModalPreventClose", "stopClose"], labelledBy: ["clrModalLabelledById", "labelledBy"] }, outputs: { _openChanged: "clrModalOpenChange", altClose: "clrModalAlternateClose" }, host: { listeners: { "body:keyup.escape": "close()" }, properties: { "class.open": "this._open" } }, viewQueries: [{ propertyName: "focusTrap", first: true, predicate: FocusTrapDirective, descendants: true }], usesOnChanges: true, ngImport: i0, 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 clrFocusTrap class=\"modal\" *ngIf=\"_open\">\n <!--fixme: revisit when ngClass works with exit animation-->\n <div\n [@fadeDown]=\"skipAnimation\"\n (@fadeDown.done)=\"fadeDone($event)\"\n class=\"modal-dialog\"\n [class.modal-sm]=\"size == 'sm'\"\n [class.modal-lg]=\"size == 'lg'\"\n [class.modal-xl]=\"size == 'xl'\"\n role=\"dialog\"\n aria-modal=\"true\"\n [attr.aria-hidden]=\"!_open\"\n [attr.aria-labelledby]=\"labelledBy\"\n >\n <div class=\"clr-sr-only\">{{commonStrings.keys.modalContentStart}}</div>\n <div class=\"modal-content-wrapper\">\n <!-- only used in wizards -->\n <ng-content select=\".modal-nav\"></ng-content>\n\n <div class=\"modal-content\">\n <div class=\"modal-header--accessible\">\n <div class=\"modal-title-wrapper\" id=\"{{modalId}}\" clrFocusOnViewInit>\n <ng-content select=\".modal-title\"></ng-content>\n </div>\n <button\n type=\"button\"\n [attr.aria-label]=\"closeButtonAriaLabel || commonStrings.keys.close\"\n class=\"close\"\n *ngIf=\"closable\"\n (click)=\"close()\"\n >\n <cds-icon shape=\"window-close\"></cds-icon>\n </button>\n </div>\n <div class=\"modal-body-wrapper\">\n <ng-content select=\".modal-body\"></ng-content>\n </div>\n <ng-content select=\".modal-footer\"></ng-content>\n </div>\n </div>\n <div class=\"clr-sr-only\">{{commonStrings.keys.modalContentEnd}}</div>\n </div>\n\n <div [@fade] class=\"modal-backdrop\" aria-hidden=\"true\" (click)=\"staticBackdrop || close()\"></div>\n</div>\n", styles: [":host{display:none}:host.open{display:inline}\n"], dependencies: [{ kind: "directive", type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: CdsIconCustomTag, selector: "cds-icon" }, { kind: "directive", type: FocusTrapDirective, selector: "[clrFocusTrap]", inputs: ["clrFocusTrap"] }, { kind: "directive", type: ClrFocusOnViewInit, selector: "[clrFocusOnViewInit]", inputs: ["clrFocusOnViewInit"] }], viewProviders: [ScrollingService], animations: [
21813
+ ClrModal.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.0.2", type: ClrModal, selector: "clr-modal", inputs: { _open: ["clrModalOpen", "_open"], closable: ["clrModalClosable", "closable"], closeButtonAriaLabel: ["clrModalCloseButtonAriaLabel", "closeButtonAriaLabel"], size: ["clrModalSize", "size"], staticBackdrop: ["clrModalStaticBackdrop", "staticBackdrop"], skipAnimation: ["clrModalSkipAnimation", "skipAnimation"], stopClose: ["clrModalPreventClose", "stopClose"], labelledBy: ["clrModalLabelledById", "labelledBy"] }, outputs: { _openChanged: "clrModalOpenChange", altClose: "clrModalAlternateClose" }, host: { listeners: { "body:keyup.escape": "close()" }, properties: { "class.open": "this._open" } }, usesOnChanges: true, ngImport: i0, 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 cdkTrapFocus class=\"modal\" *ngIf=\"_open\">\n <!--fixme: revisit when ngClass works with exit animation-->\n <div\n [@fadeDown]=\"skipAnimation\"\n (@fadeDown.done)=\"fadeDone($event)\"\n class=\"modal-dialog\"\n [class.modal-sm]=\"size == 'sm'\"\n [class.modal-lg]=\"size == 'lg'\"\n [class.modal-xl]=\"size == 'xl'\"\n role=\"dialog\"\n aria-modal=\"true\"\n [attr.aria-hidden]=\"!_open\"\n [attr.aria-labelledby]=\"labelledBy\"\n >\n <div class=\"clr-sr-only\">{{commonStrings.keys.modalContentStart}}</div>\n <div class=\"modal-content-wrapper\">\n <!-- only used in wizards -->\n <ng-content select=\".modal-nav\"></ng-content>\n\n <div class=\"modal-content\">\n <div class=\"modal-header--accessible\">\n <div class=\"modal-title-wrapper\" id=\"{{modalId}}\" clrFocusOnViewInit>\n <ng-content select=\".modal-title\"></ng-content>\n </div>\n <button\n type=\"button\"\n [attr.aria-label]=\"closeButtonAriaLabel || commonStrings.keys.close\"\n class=\"close\"\n *ngIf=\"closable\"\n (click)=\"close()\"\n >\n <cds-icon shape=\"window-close\"></cds-icon>\n </button>\n </div>\n <div class=\"modal-body-wrapper\">\n <ng-content select=\".modal-body\"></ng-content>\n </div>\n <ng-content select=\".modal-footer\"></ng-content>\n </div>\n </div>\n <div class=\"clr-sr-only\">{{commonStrings.keys.modalContentEnd}}</div>\n </div>\n\n <div [@fade] class=\"modal-backdrop\" aria-hidden=\"true\" (click)=\"staticBackdrop || close()\"></div>\n</div>\n", styles: [":host{display:none}:host.open{display:inline}\n"], dependencies: [{ kind: "directive", type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: CdkTrapFocusModule_CdkTrapFocus, selector: "[cdkTrapFocus]" }, { kind: "directive", type: CdsIconCustomTag, selector: "cds-icon" }, { kind: "directive", type: ClrFocusOnViewInit, selector: "[clrFocusOnViewInit]", inputs: ["clrFocusOnViewInit"] }], viewProviders: [ScrollingService], animations: [
23502
21814
  trigger('fadeDown', [
23503
21815
  transition('* => false', [style({ opacity: 0, transform: 'translate(0, -25%)' }), animate('0.2s ease-in-out')]),
23504
21816
  transition('false => *', [animate('0.2s ease-in-out', style({ opacity: 0, transform: 'translate(0, -25%)' }))]),
@@ -23519,11 +21831,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.2", ngImpor
23519
21831
  transition('void => *', [style({ opacity: 0 }), animate('0.2s ease-in-out', style({ opacity: 0.85 }))]),
23520
21832
  transition('* => void', [animate('0.2s ease-in-out', style({ opacity: 0 }))]),
23521
21833
  ]),
23522
- ], 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 clrFocusTrap class=\"modal\" *ngIf=\"_open\">\n <!--fixme: revisit when ngClass works with exit animation-->\n <div\n [@fadeDown]=\"skipAnimation\"\n (@fadeDown.done)=\"fadeDone($event)\"\n class=\"modal-dialog\"\n [class.modal-sm]=\"size == 'sm'\"\n [class.modal-lg]=\"size == 'lg'\"\n [class.modal-xl]=\"size == 'xl'\"\n role=\"dialog\"\n aria-modal=\"true\"\n [attr.aria-hidden]=\"!_open\"\n [attr.aria-labelledby]=\"labelledBy\"\n >\n <div class=\"clr-sr-only\">{{commonStrings.keys.modalContentStart}}</div>\n <div class=\"modal-content-wrapper\">\n <!-- only used in wizards -->\n <ng-content select=\".modal-nav\"></ng-content>\n\n <div class=\"modal-content\">\n <div class=\"modal-header--accessible\">\n <div class=\"modal-title-wrapper\" id=\"{{modalId}}\" clrFocusOnViewInit>\n <ng-content select=\".modal-title\"></ng-content>\n </div>\n <button\n type=\"button\"\n [attr.aria-label]=\"closeButtonAriaLabel || commonStrings.keys.close\"\n class=\"close\"\n *ngIf=\"closable\"\n (click)=\"close()\"\n >\n <cds-icon shape=\"window-close\"></cds-icon>\n </button>\n </div>\n <div class=\"modal-body-wrapper\">\n <ng-content select=\".modal-body\"></ng-content>\n </div>\n <ng-content select=\".modal-footer\"></ng-content>\n </div>\n </div>\n <div class=\"clr-sr-only\">{{commonStrings.keys.modalContentEnd}}</div>\n </div>\n\n <div [@fade] class=\"modal-backdrop\" aria-hidden=\"true\" (click)=\"staticBackdrop || close()\"></div>\n</div>\n", styles: [":host{display:none}:host.open{display:inline}\n"] }]
23523
- }], ctorParameters: function () { return [{ type: ScrollingService }, { type: ClrCommonStringsService }]; }, propDecorators: { focusTrap: [{
23524
- type: ViewChild,
23525
- args: [FocusTrapDirective]
23526
- }], _open: [{
21834
+ ], 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 cdkTrapFocus class=\"modal\" *ngIf=\"_open\">\n <!--fixme: revisit when ngClass works with exit animation-->\n <div\n [@fadeDown]=\"skipAnimation\"\n (@fadeDown.done)=\"fadeDone($event)\"\n class=\"modal-dialog\"\n [class.modal-sm]=\"size == 'sm'\"\n [class.modal-lg]=\"size == 'lg'\"\n [class.modal-xl]=\"size == 'xl'\"\n role=\"dialog\"\n aria-modal=\"true\"\n [attr.aria-hidden]=\"!_open\"\n [attr.aria-labelledby]=\"labelledBy\"\n >\n <div class=\"clr-sr-only\">{{commonStrings.keys.modalContentStart}}</div>\n <div class=\"modal-content-wrapper\">\n <!-- only used in wizards -->\n <ng-content select=\".modal-nav\"></ng-content>\n\n <div class=\"modal-content\">\n <div class=\"modal-header--accessible\">\n <div class=\"modal-title-wrapper\" id=\"{{modalId}}\" clrFocusOnViewInit>\n <ng-content select=\".modal-title\"></ng-content>\n </div>\n <button\n type=\"button\"\n [attr.aria-label]=\"closeButtonAriaLabel || commonStrings.keys.close\"\n class=\"close\"\n *ngIf=\"closable\"\n (click)=\"close()\"\n >\n <cds-icon shape=\"window-close\"></cds-icon>\n </button>\n </div>\n <div class=\"modal-body-wrapper\">\n <ng-content select=\".modal-body\"></ng-content>\n </div>\n <ng-content select=\".modal-footer\"></ng-content>\n </div>\n </div>\n <div class=\"clr-sr-only\">{{commonStrings.keys.modalContentEnd}}</div>\n </div>\n\n <div [@fade] class=\"modal-backdrop\" aria-hidden=\"true\" (click)=\"staticBackdrop || close()\"></div>\n</div>\n", styles: [":host{display:none}:host.open{display:inline}\n"] }]
21835
+ }], ctorParameters: function () { return [{ type: ScrollingService }, { type: ClrCommonStringsService }]; }, propDecorators: { _open: [{
23527
21836
  type: HostBinding,
23528
21837
  args: ['class.open']
23529
21838
  }, {
@@ -23547,9 +21856,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.2", ngImpor
23547
21856
  }], skipAnimation: [{
23548
21857
  type: Input,
23549
21858
  args: ['clrModalSkipAnimation']
23550
- }], bypassScrollService: [{
23551
- type: Input,
23552
- args: ['clrModalOverrideScrollService']
23553
21859
  }], stopClose: [{
23554
21860
  type: Input,
23555
21861
  args: ['clrModalPreventClose']
@@ -23638,12 +21944,12 @@ class ClrModalModule {
23638
21944
  }
23639
21945
  }
23640
21946
  ClrModalModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.0.2", ngImport: i0, type: ClrModalModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
23641
- ClrModalModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "15.0.2", ngImport: i0, type: ClrModalModule, declarations: [ClrModal, ClrModalBody], imports: [CommonModule, ClrIconModule, ClrFocusTrapModule, ClrFocusOnViewInitModule], exports: [ClrModal, ClrModalBody, ClrIconModule, ClrFocusOnViewInitModule] });
23642
- ClrModalModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "15.0.2", ngImport: i0, type: ClrModalModule, imports: [CommonModule, ClrIconModule, ClrFocusTrapModule, ClrFocusOnViewInitModule, ClrIconModule, ClrFocusOnViewInitModule] });
21947
+ ClrModalModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "15.0.2", ngImport: i0, type: ClrModalModule, declarations: [ClrModal, ClrModalBody], imports: [CommonModule, CdkTrapFocusModule, ClrIconModule, ClrFocusOnViewInitModule], exports: [ClrModal, ClrModalBody, ClrIconModule, ClrFocusOnViewInitModule] });
21948
+ ClrModalModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "15.0.2", ngImport: i0, type: ClrModalModule, imports: [CommonModule, CdkTrapFocusModule, ClrIconModule, ClrFocusOnViewInitModule, ClrIconModule, ClrFocusOnViewInitModule] });
23643
21949
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.2", ngImport: i0, type: ClrModalModule, decorators: [{
23644
21950
  type: NgModule,
23645
21951
  args: [{
23646
- imports: [CommonModule, ClrIconModule, ClrFocusTrapModule, ClrFocusOnViewInitModule],
21952
+ imports: [CommonModule, CdkTrapFocusModule, ClrIconModule, ClrFocusOnViewInitModule],
23647
21953
  declarations: [CLR_MODAL_DIRECTIVES],
23648
21954
  exports: [CLR_MODAL_DIRECTIVES, ClrIconModule, ClrFocusOnViewInitModule],
23649
21955
  }]
@@ -26607,13 +24913,12 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.2", ngImpor
26607
24913
  * The full license information can be found in LICENSE in the root directory of this project.
26608
24914
  */
26609
24915
  class ClrWizard {
26610
- constructor(platformId, navService, pageCollection, buttonService, headerActionService, elementRef, differs) {
24916
+ constructor(platformId, navService, pageCollection, buttonService, headerActionService, differs) {
26611
24917
  this.platformId = platformId;
26612
24918
  this.navService = navService;
26613
24919
  this.pageCollection = pageCollection;
26614
24920
  this.buttonService = buttonService;
26615
24921
  this.headerActionService = headerActionService;
26616
- this.elementRef = elementRef;
26617
24922
  /**
26618
24923
  * Set the modal size of the wizard. Set using `[clrWizardSize]` input.
26619
24924
  */
@@ -26629,13 +24934,6 @@ class ClrWizard {
26629
24934
  this._stopCancel = false;
26630
24935
  this._stopNavigation = false;
26631
24936
  this._disableStepnav = false;
26632
- /**
26633
- * Used to communicate to the underlying modal that animations are not
26634
- * wanted. Primary use is for the display of static/inline wizards.
26635
- * Set using `[clrWizardPreventModalAnimation]` input.
26636
- */
26637
- /** @deprecated since 3.0, input should be removed in 4.0 because is only related to inline wizards */
26638
- this._stopModalAnimations = false;
26639
24937
  /**
26640
24938
  * Emits when the wizard is opened or closed.
26641
24939
  * Listen via `(clrWizardOpenChange)` event.
@@ -26756,9 +25054,6 @@ class ClrWizard {
26756
25054
  get disableStepnav() {
26757
25055
  return this._disableStepnav;
26758
25056
  }
26759
- get stopModalAnimations() {
26760
- return this._stopModalAnimations ? 'true' : 'false';
26761
- }
26762
25057
  get currentPage() {
26763
25058
  return this.navService.currentPage;
26764
25059
  }
@@ -26771,13 +25066,9 @@ class ClrWizard {
26771
25066
  get isFirst() {
26772
25067
  return this.navService.currentPageIsFirst;
26773
25068
  }
26774
- get isStatic() {
26775
- return this.elementRef.nativeElement.classList.contains('clr-wizard--inline');
26776
- }
26777
25069
  ngAfterContentInit() {
26778
25070
  this.pageCollection.pages = this.pages;
26779
25071
  this.headerActionService.wizardHeaderActions = this.headerActions;
26780
- this.initializeButtons();
26781
25072
  }
26782
25073
  ngDoCheck() {
26783
25074
  this.updateNavOnPageChanges();
@@ -26979,12 +25270,6 @@ class ClrWizard {
26979
25270
  changes.forEachRemovedItem(() => this.navService.updateNavigation());
26980
25271
  }
26981
25272
  }
26982
- initializeButtons() {
26983
- // Only trigger buttons ready if default is open (inlined)
26984
- if (this._open) {
26985
- this.buttonService.buttonsReady = true;
26986
- }
26987
- }
26988
25273
  emitWizardFinished() {
26989
25274
  if (!this.stopNext) {
26990
25275
  this.forceFinish();
@@ -26992,8 +25277,8 @@ class ClrWizard {
26992
25277
  this.wizardFinished.emit();
26993
25278
  }
26994
25279
  }
26995
- ClrWizard.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.0.2", ngImport: i0, type: ClrWizard, deps: [{ token: PLATFORM_ID }, { token: WizardNavigationService }, { token: PageCollectionService }, { token: ButtonHubService }, { token: HeaderActionService }, { token: i0.ElementRef }, { token: i0.IterableDiffers }], target: i0.ɵɵFactoryTarget.Component });
26996
- ClrWizard.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.0.2", type: ClrWizard, selector: "clr-wizard", inputs: { size: ["clrWizardSize", "size"], closable: ["clrWizardClosable", "closable"], forceForward: ["clrWizardForceForwardNavigation", "forceForward"], clrWizardOpen: "clrWizardOpen", stopNext: ["clrWizardPreventDefaultNext", "stopNext"], stopCancel: ["clrWizardPreventDefaultCancel", "stopCancel"], stopNavigation: ["clrWizardPreventNavigation", "stopNavigation"], disableStepnav: ["clrWizardDisableStepnav", "disableStepnav"], _stopModalAnimations: ["clrWizardPreventModalAnimation", "_stopModalAnimations"] }, outputs: { _openChanged: "clrWizardOpenChange", onCancel: "clrWizardOnCancel", wizardFinished: "clrWizardOnFinish", onReset: "clrWizardOnReset", currentPageChanged: "clrWizardCurrentPageChanged", onMoveNext: "clrWizardOnNext", onMovePrevious: "clrWizardOnPrevious" }, host: { properties: { "class.clr-wizard": "true", "class.wizard-md": "size == 'md'", "class.wizard-lg": "size == 'lg'", "class.wizard-xl": "size == 'xl'", "class.lastPage": "navService.currentPageIsLast" } }, providers: [WizardNavigationService, PageCollectionService, ButtonHubService, HeaderActionService], queries: [{ propertyName: "pages", predicate: ClrWizardPage, descendants: true }, { propertyName: "headerActions", predicate: ClrWizardHeaderAction }], viewQueries: [{ propertyName: "wizardTitle", first: true, predicate: ["wizardTitle"], descendants: true }], ngImport: i0, 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<clr-modal\n [clrModalOpen]=\"_open\"\n [clrModalSize]=\"size\"\n [clrModalClosable]=\"closable\"\n [clrModalStaticBackdrop]=\"true\"\n [clrModalSkipAnimation]=\"stopModalAnimations\"\n [clrModalOverrideScrollService]=\"isStatic\"\n [clrModalPreventClose]=\"true\"\n (clrModalAlternateClose)=\"modalCancel()\"\n [clrModalLabelledById]=\"wizardId\"\n>\n <nav class=\"modal-nav clr-wizard-stepnav-wrapper\">\n <h1 class=\"clr-wizard-title\" id=\"{{wizardId}}\"><ng-content select=\"clr-wizard-title\"></ng-content></h1>\n <clr-wizard-stepnav></clr-wizard-stepnav>\n </nav>\n\n <h2 class=\"modal-title\">\n <span tabindex=\"-1\" #wizardTitle class=\"modal-title-text\">\n <ng-template [ngTemplateOutlet]=\"navService.currentPageTitle\"></ng-template>\n </span>\n\n <div class=\"modal-header-actions-wrapper\" *ngIf=\"headerActionService.displayHeaderActionsWrapper\">\n <div *ngIf=\"headerActionService.showWizardHeaderActions\">\n <ng-content select=\"clr-wizard-header-action\"></ng-content>\n </div>\n <div *ngIf=\"headerActionService.currentPageHasHeaderActions\">\n <ng-template [ngTemplateOutlet]=\"navService.currentPage.headerActions\"></ng-template>\n </div>\n </div>\n </h2>\n\n <div class=\"modal-body\">\n <main clr-wizard-pages-wrapper class=\"clr-wizard-content\">\n <ng-content></ng-content>\n </main>\n </div>\n <div class=\"modal-footer clr-wizard-footer\">\n <div class=\"clr-wizard-footer-buttons\">\n <div\n *ngIf=\"navService.currentPage && !navService.currentPage.hasButtons\"\n class=\"clr-wizard-footer-buttons-wrapper\"\n >\n <ng-content select=\"clr-wizard-button\"></ng-content>\n </div>\n <div\n *ngIf=\"navService.currentPage && navService.currentPage.hasButtons\"\n class=\"clr-wizard-footer-buttons-wrapper\"\n >\n <ng-template [ngTemplateOutlet]=\"navService.currentPage.buttons\"></ng-template>\n </div>\n </div>\n </div>\n</clr-modal>\n", dependencies: [{ kind: "directive", type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i5.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: ClrModal, selector: "clr-modal", inputs: ["clrModalOpen", "clrModalClosable", "clrModalCloseButtonAriaLabel", "clrModalSize", "clrModalStaticBackdrop", "clrModalSkipAnimation", "clrModalOverrideScrollService", "clrModalPreventClose", "clrModalLabelledById"], outputs: ["clrModalOpenChange", "clrModalAlternateClose"] }, { kind: "directive", type: ClrModalBody, selector: ".modal-body" }, { kind: "component", type: ClrWizardStepnav, selector: "clr-wizard-stepnav" }] });
25280
+ ClrWizard.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.0.2", ngImport: i0, type: ClrWizard, deps: [{ token: PLATFORM_ID }, { token: WizardNavigationService }, { token: PageCollectionService }, { token: ButtonHubService }, { token: HeaderActionService }, { token: i0.IterableDiffers }], target: i0.ɵɵFactoryTarget.Component });
25281
+ ClrWizard.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.0.2", type: ClrWizard, selector: "clr-wizard", inputs: { size: ["clrWizardSize", "size"], closable: ["clrWizardClosable", "closable"], forceForward: ["clrWizardForceForwardNavigation", "forceForward"], clrWizardOpen: "clrWizardOpen", stopNext: ["clrWizardPreventDefaultNext", "stopNext"], stopCancel: ["clrWizardPreventDefaultCancel", "stopCancel"], stopNavigation: ["clrWizardPreventNavigation", "stopNavigation"], disableStepnav: ["clrWizardDisableStepnav", "disableStepnav"] }, outputs: { _openChanged: "clrWizardOpenChange", onCancel: "clrWizardOnCancel", wizardFinished: "clrWizardOnFinish", onReset: "clrWizardOnReset", currentPageChanged: "clrWizardCurrentPageChanged", onMoveNext: "clrWizardOnNext", onMovePrevious: "clrWizardOnPrevious" }, host: { properties: { "class.clr-wizard": "true", "class.wizard-md": "size == 'md'", "class.wizard-lg": "size == 'lg'", "class.wizard-xl": "size == 'xl'", "class.lastPage": "navService.currentPageIsLast" } }, providers: [WizardNavigationService, PageCollectionService, ButtonHubService, HeaderActionService], queries: [{ propertyName: "pages", predicate: ClrWizardPage, descendants: true }, { propertyName: "headerActions", predicate: ClrWizardHeaderAction }], viewQueries: [{ propertyName: "wizardTitle", first: true, predicate: ["wizardTitle"], descendants: true }], ngImport: i0, 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<clr-modal\n [clrModalOpen]=\"_open\"\n [clrModalSize]=\"size\"\n [clrModalClosable]=\"closable\"\n [clrModalStaticBackdrop]=\"true\"\n [clrModalPreventClose]=\"true\"\n (clrModalAlternateClose)=\"modalCancel()\"\n [clrModalLabelledById]=\"wizardId\"\n>\n <nav class=\"modal-nav clr-wizard-stepnav-wrapper\">\n <h1 class=\"clr-wizard-title\" id=\"{{wizardId}}\"><ng-content select=\"clr-wizard-title\"></ng-content></h1>\n <clr-wizard-stepnav></clr-wizard-stepnav>\n </nav>\n\n <h2 class=\"modal-title\">\n <span tabindex=\"-1\" #wizardTitle class=\"modal-title-text\">\n <ng-template [ngTemplateOutlet]=\"navService.currentPageTitle\"></ng-template>\n </span>\n\n <div class=\"modal-header-actions-wrapper\" *ngIf=\"headerActionService.displayHeaderActionsWrapper\">\n <div *ngIf=\"headerActionService.showWizardHeaderActions\">\n <ng-content select=\"clr-wizard-header-action\"></ng-content>\n </div>\n <div *ngIf=\"headerActionService.currentPageHasHeaderActions\">\n <ng-template [ngTemplateOutlet]=\"navService.currentPage.headerActions\"></ng-template>\n </div>\n </div>\n </h2>\n\n <div class=\"modal-body\">\n <main clr-wizard-pages-wrapper class=\"clr-wizard-content\">\n <ng-content></ng-content>\n </main>\n </div>\n <div class=\"modal-footer clr-wizard-footer\">\n <div class=\"clr-wizard-footer-buttons\">\n <div\n *ngIf=\"navService.currentPage && !navService.currentPage.hasButtons\"\n class=\"clr-wizard-footer-buttons-wrapper\"\n >\n <ng-content select=\"clr-wizard-button\"></ng-content>\n </div>\n <div\n *ngIf=\"navService.currentPage && navService.currentPage.hasButtons\"\n class=\"clr-wizard-footer-buttons-wrapper\"\n >\n <ng-template [ngTemplateOutlet]=\"navService.currentPage.buttons\"></ng-template>\n </div>\n </div>\n </div>\n</clr-modal>\n", dependencies: [{ kind: "directive", type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i5.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: ClrModal, selector: "clr-modal", inputs: ["clrModalOpen", "clrModalClosable", "clrModalCloseButtonAriaLabel", "clrModalSize", "clrModalStaticBackdrop", "clrModalSkipAnimation", "clrModalPreventClose", "clrModalLabelledById"], outputs: ["clrModalOpenChange", "clrModalAlternateClose"] }, { kind: "directive", type: ClrModalBody, selector: ".modal-body" }, { kind: "component", type: ClrWizardStepnav, selector: "clr-wizard-stepnav" }] });
26997
25282
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.2", ngImport: i0, type: ClrWizard, decorators: [{
26998
25283
  type: Component,
26999
25284
  args: [{ selector: 'clr-wizard', providers: [WizardNavigationService, PageCollectionService, ButtonHubService, HeaderActionService], host: {
@@ -27002,11 +25287,11 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.2", ngImpor
27002
25287
  '[class.wizard-lg]': "size == 'lg'",
27003
25288
  '[class.wizard-xl]': "size == 'xl'",
27004
25289
  '[class.lastPage]': 'navService.currentPageIsLast',
27005
- }, 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<clr-modal\n [clrModalOpen]=\"_open\"\n [clrModalSize]=\"size\"\n [clrModalClosable]=\"closable\"\n [clrModalStaticBackdrop]=\"true\"\n [clrModalSkipAnimation]=\"stopModalAnimations\"\n [clrModalOverrideScrollService]=\"isStatic\"\n [clrModalPreventClose]=\"true\"\n (clrModalAlternateClose)=\"modalCancel()\"\n [clrModalLabelledById]=\"wizardId\"\n>\n <nav class=\"modal-nav clr-wizard-stepnav-wrapper\">\n <h1 class=\"clr-wizard-title\" id=\"{{wizardId}}\"><ng-content select=\"clr-wizard-title\"></ng-content></h1>\n <clr-wizard-stepnav></clr-wizard-stepnav>\n </nav>\n\n <h2 class=\"modal-title\">\n <span tabindex=\"-1\" #wizardTitle class=\"modal-title-text\">\n <ng-template [ngTemplateOutlet]=\"navService.currentPageTitle\"></ng-template>\n </span>\n\n <div class=\"modal-header-actions-wrapper\" *ngIf=\"headerActionService.displayHeaderActionsWrapper\">\n <div *ngIf=\"headerActionService.showWizardHeaderActions\">\n <ng-content select=\"clr-wizard-header-action\"></ng-content>\n </div>\n <div *ngIf=\"headerActionService.currentPageHasHeaderActions\">\n <ng-template [ngTemplateOutlet]=\"navService.currentPage.headerActions\"></ng-template>\n </div>\n </div>\n </h2>\n\n <div class=\"modal-body\">\n <main clr-wizard-pages-wrapper class=\"clr-wizard-content\">\n <ng-content></ng-content>\n </main>\n </div>\n <div class=\"modal-footer clr-wizard-footer\">\n <div class=\"clr-wizard-footer-buttons\">\n <div\n *ngIf=\"navService.currentPage && !navService.currentPage.hasButtons\"\n class=\"clr-wizard-footer-buttons-wrapper\"\n >\n <ng-content select=\"clr-wizard-button\"></ng-content>\n </div>\n <div\n *ngIf=\"navService.currentPage && navService.currentPage.hasButtons\"\n class=\"clr-wizard-footer-buttons-wrapper\"\n >\n <ng-template [ngTemplateOutlet]=\"navService.currentPage.buttons\"></ng-template>\n </div>\n </div>\n </div>\n</clr-modal>\n" }]
25290
+ }, 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<clr-modal\n [clrModalOpen]=\"_open\"\n [clrModalSize]=\"size\"\n [clrModalClosable]=\"closable\"\n [clrModalStaticBackdrop]=\"true\"\n [clrModalPreventClose]=\"true\"\n (clrModalAlternateClose)=\"modalCancel()\"\n [clrModalLabelledById]=\"wizardId\"\n>\n <nav class=\"modal-nav clr-wizard-stepnav-wrapper\">\n <h1 class=\"clr-wizard-title\" id=\"{{wizardId}}\"><ng-content select=\"clr-wizard-title\"></ng-content></h1>\n <clr-wizard-stepnav></clr-wizard-stepnav>\n </nav>\n\n <h2 class=\"modal-title\">\n <span tabindex=\"-1\" #wizardTitle class=\"modal-title-text\">\n <ng-template [ngTemplateOutlet]=\"navService.currentPageTitle\"></ng-template>\n </span>\n\n <div class=\"modal-header-actions-wrapper\" *ngIf=\"headerActionService.displayHeaderActionsWrapper\">\n <div *ngIf=\"headerActionService.showWizardHeaderActions\">\n <ng-content select=\"clr-wizard-header-action\"></ng-content>\n </div>\n <div *ngIf=\"headerActionService.currentPageHasHeaderActions\">\n <ng-template [ngTemplateOutlet]=\"navService.currentPage.headerActions\"></ng-template>\n </div>\n </div>\n </h2>\n\n <div class=\"modal-body\">\n <main clr-wizard-pages-wrapper class=\"clr-wizard-content\">\n <ng-content></ng-content>\n </main>\n </div>\n <div class=\"modal-footer clr-wizard-footer\">\n <div class=\"clr-wizard-footer-buttons\">\n <div\n *ngIf=\"navService.currentPage && !navService.currentPage.hasButtons\"\n class=\"clr-wizard-footer-buttons-wrapper\"\n >\n <ng-content select=\"clr-wizard-button\"></ng-content>\n </div>\n <div\n *ngIf=\"navService.currentPage && navService.currentPage.hasButtons\"\n class=\"clr-wizard-footer-buttons-wrapper\"\n >\n <ng-template [ngTemplateOutlet]=\"navService.currentPage.buttons\"></ng-template>\n </div>\n </div>\n </div>\n</clr-modal>\n" }]
27006
25291
  }], ctorParameters: function () { return [{ type: undefined, decorators: [{
27007
25292
  type: Inject,
27008
25293
  args: [PLATFORM_ID]
27009
- }] }, { type: WizardNavigationService }, { type: PageCollectionService }, { type: ButtonHubService }, { type: HeaderActionService }, { type: i0.ElementRef }, { type: i0.IterableDiffers }]; }, propDecorators: { size: [{
25294
+ }] }, { type: WizardNavigationService }, { type: PageCollectionService }, { type: ButtonHubService }, { type: HeaderActionService }, { type: i0.IterableDiffers }]; }, propDecorators: { size: [{
27010
25295
  type: Input,
27011
25296
  args: ['clrWizardSize']
27012
25297
  }], closable: [{
@@ -27030,9 +25315,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.2", ngImpor
27030
25315
  }], disableStepnav: [{
27031
25316
  type: Input,
27032
25317
  args: ['clrWizardDisableStepnav']
27033
- }], _stopModalAnimations: [{
27034
- type: Input,
27035
- args: ['clrWizardPreventModalAnimation']
27036
25318
  }], _openChanged: [{
27037
25319
  type: Output,
27038
25320
  args: ['clrWizardOpenChange']
@@ -27333,15 +25615,12 @@ ClarityModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version:
27333
25615
  ClrModalModule,
27334
25616
  ClrLoadingModule,
27335
25617
  ClrConditionalModule,
27336
- ClrFocusTrapModule,
27337
25618
  ClrFocusOnViewInitModule,
27338
- ClrForTypeAheadModule,
27339
25619
  ClrButtonModule,
27340
25620
  ClrFormsModule,
27341
25621
  ClrLayoutModule,
27342
25622
  ClrPopoverModule,
27343
25623
  ClrWizardModule,
27344
- ClrDragAndDropModule,
27345
25624
  ClrStepperModule,
27346
25625
  ClrSpinnerModule,
27347
25626
  ClrProgressBarModule,
@@ -27353,15 +25632,12 @@ ClarityModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version:
27353
25632
  ClrModalModule,
27354
25633
  ClrLoadingModule,
27355
25634
  ClrConditionalModule,
27356
- ClrFocusTrapModule,
27357
25635
  ClrFocusOnViewInitModule,
27358
- ClrForTypeAheadModule,
27359
25636
  ClrButtonModule,
27360
25637
  ClrFormsModule,
27361
25638
  ClrLayoutModule,
27362
25639
  ClrPopoverModule,
27363
25640
  ClrWizardModule,
27364
- ClrDragAndDropModule,
27365
25641
  ClrStepperModule,
27366
25642
  ClrSpinnerModule,
27367
25643
  ClrProgressBarModule,
@@ -27377,15 +25653,12 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.2", ngImpor
27377
25653
  ClrModalModule,
27378
25654
  ClrLoadingModule,
27379
25655
  ClrConditionalModule,
27380
- ClrFocusTrapModule,
27381
25656
  ClrFocusOnViewInitModule,
27382
- ClrForTypeAheadModule,
27383
25657
  ClrButtonModule,
27384
25658
  ClrFormsModule,
27385
25659
  ClrLayoutModule,
27386
25660
  ClrPopoverModule,
27387
25661
  ClrWizardModule,
27388
- ClrDragAndDropModule,
27389
25662
  ClrStepperModule,
27390
25663
  ClrSpinnerModule,
27391
25664
  ClrProgressBarModule,
@@ -27685,5 +25958,5 @@ const CLR_MENU_POSITIONS = [
27685
25958
  * Generated bundle index. Do not edit.
27686
25959
  */
27687
25960
 
27688
- export { CLR_ALERT_DIRECTIVES, CLR_BUTTON_GROUP_DIRECTIVES, CLR_DATAGRID_DIRECTIVES, CLR_DATEPICKER_DIRECTIVES, CLR_DRAG_AND_DROP_DIRECTIVES, CLR_DROPDOWN_DIRECTIVES, CLR_ICON_DIRECTIVES, CLR_LAYOUT_DIRECTIVES, CLR_LOADING_BUTTON_DIRECTIVES, CLR_LOADING_DIRECTIVES, CLR_MENU_POSITIONS, CLR_MODAL_DIRECTIVES, CLR_NAVIGATION_DIRECTIVES, CLR_PROGRESS_BAR_DIRECTIVES, CLR_SIGNPOST_DIRECTIVES, CLR_SPINNER_DIRECTIVES, CLR_STACK_VIEW_DIRECTIVES, CLR_TABS_DIRECTIVES, CLR_TOOLTIP_DIRECTIVES, CLR_TREE_VIEW_DIRECTIVES, CLR_VERTICAL_NAV_DIRECTIVES, CLR_WIZARD_DIRECTIVES, CONDITIONAL_DIRECTIVES, CUSTOM_BUTTON_TYPES, CdsIconCustomTag, ClarityModule, ClrAbstractContainer, ClrAccordion, ClrAccordionContent, ClrAccordionDescription, ClrAccordionModule, ClrAccordionPanel, ClrAccordionTitle, ClrAlert, ClrAlertItem, ClrAlertModule, ClrAlertText, ClrAlerts, ClrAlertsPager, ClrAlignment, ClrAriaCurrentLink, ClrAriaLivePoliteness, ClrAriaLiveService, ClrAxis, ClrButton, ClrButtonGroup, ClrButtonGroupModule, ClrButtonModule, ClrCalendar, ClrCheckbox, ClrCheckboxContainer, ClrCheckboxModule, ClrCheckboxWrapper, ClrCombobox, ClrComboboxContainer, ClrComboboxModule, ClrCommonFormsModule, ClrCommonStringsService, ClrConditionalModule, ClrControl, ClrControlContainer, ClrControlError, ClrControlHelper, ClrControlSuccess, ClrDataModule, ClrDatagrid, ClrDatagridActionBar, ClrDatagridActionOverflow, ClrDatagridCell, ClrDatagridColumn, ClrDatagridColumnSeparator, ClrDatagridColumnToggle, ClrDatagridColumnToggleButton, ClrDatagridColumnToggleTitle, ClrDatagridDetail, ClrDatagridDetailBody, ClrDatagridDetailHeader, ClrDatagridFilter, ClrDatagridFooter, ClrDatagridHideableColumn, ClrDatagridItems, ClrDatagridItemsTrackBy, ClrDatagridModule, ClrDatagridPageSize, ClrDatagridPagination, ClrDatagridPlaceholder, ClrDatagridRow, ClrDatagridRowDetail, ClrDatagridSortOrder, ClrDatalist, ClrDatalistContainer, ClrDatalistInput, ClrDatalistModule, ClrDateContainer, ClrDateInput, ClrDateInputValidator, ClrDatepickerModule, ClrDatepickerViewManager, ClrDay, ClrDaypicker, ClrDestroyService, ClrDragAndDropModule, ClrDragEvent, ClrDragHandle, ClrDraggable, ClrDraggableGhost, ClrDropdown, ClrDropdownItem, ClrDropdownMenu, ClrDropdownModule, ClrDropdownTrigger, ClrDroppable, ClrEmphasisModule, ClrExpandableAnimation, ClrFocusOnViewInit, ClrFocusOnViewInitModule, ClrForTypeAhead, ClrForTypeAheadModule, ClrForm, ClrFormLayout, ClrFormsModule, ClrHeader, ClrIconCustomTag, ClrIconModule, ClrIfActive, ClrIfDetail, ClrIfDragged, ClrIfError, ClrIfExpanded, ClrIfOpen, ClrIfSuccess, ClrInput, ClrInputContainer, ClrInputModule, ClrLabel, ClrLayout, ClrLayoutModule, ClrLoading, ClrLoadingButton, ClrLoadingButtonModule, ClrLoadingModule, ClrLoadingState, ClrMainContainer, ClrMainContainerModule, ClrModal, ClrModalBody, ClrModalModule, ClrMonthpicker, ClrNavLevel, ClrNavigationModule, ClrOption, ClrOptionItems, ClrOptionSelected, ClrOptions, ClrPassword, ClrPasswordContainer, ClrPasswordModule, ClrPopoverAnchor, ClrPopoverContent, ClrPopoverEventsService, ClrPopoverModule, ClrPopoverPositionService, ClrPopoverToggleService, ClrProgressBar, ClrProgressBarModule, ClrRadio, ClrRadioContainer, ClrRadioModule, ClrRadioWrapper, ClrRange, ClrRangeContainer, ClrRangeModule, ClrRecursiveForOf, ClrSelect, ClrSelectContainer, ClrSelectModule, ClrSelectedState, ClrSide, ClrSignpost, ClrSignpostContent, ClrSignpostModule, ClrSignpostTrigger, ClrSpinner, ClrSpinnerModule, ClrStackBlock, ClrStackContentInput, ClrStackHeader, ClrStackInput, ClrStackSelect, ClrStackView, ClrStackViewCustomTags, ClrStackViewLabel, ClrStackViewModule, ClrStepButton, ClrStepButtonType, ClrStepper, ClrStepperModule, ClrStepperPanel, ClrTab, ClrTabContent, ClrTabLink, ClrTabOverflowContent, ClrTabs, ClrTabsModule, ClrTextarea, ClrTextareaContainer, ClrTextareaModule, ClrTimeline, ClrTimelineLayout, ClrTimelineModule, ClrTimelineStep, ClrTimelineStepDescription, ClrTimelineStepHeader, ClrTimelineStepState, ClrTimelineStepTitle, ClrTooltip, ClrTooltipContent, ClrTooltipModule, ClrTooltipTrigger, ClrTree, ClrTreeNode, ClrTreeNodeLink, ClrTreeViewModule, ClrVerticalNav, ClrVerticalNavGroup, ClrVerticalNavGroupChildren, ClrVerticalNavIcon, ClrVerticalNavLink, ClrVerticalNavModule, ClrWizard, ClrWizardButton, ClrWizardCustomTags, ClrWizardHeaderAction, ClrWizardModule, ClrWizardPage, ClrWizardPageButtons, ClrWizardPageHeaderActions, ClrWizardPageNavTitle, ClrWizardPageTitle, ClrWizardStepnav, ClrWizardStepnavItem, ClrYearpicker, DEFAULT_BUTTON_TYPES, DatagridNumericFilter, DatagridPropertyComparator, DatagridPropertyNumericFilter, DatagridPropertyStringFilter, DatagridStringFilter, EXPANDABLE_ANIMATION_DIRECTIVES, FOCUS_ON_VIEW_INIT, FOCUS_ON_VIEW_INIT_DIRECTIVES, IS_TOGGLE, IS_TOGGLE_PROVIDER, LoadingListener, MainContainerWillyWonka, NavDetectionOompaLoompa, TOGGLE_SERVICE, TOGGLE_SERVICE_PROVIDER, ToggleServiceFactory, WrappedFormControl, collapse, commonStringsDefault, fade, fadeSlide, isToggleFactory, slide, AccordionOompaLoompa as ÇlrAccordionOompaLoompa, AccordionWillyWonka as ÇlrAccordionWillyWonka, ActionableOompaLoompa as ÇlrActionableOompaLoompa, ActiveOompaLoompa as ÇlrActiveOompaLoompa, ClrFocusTrapModule as ÇlrClrFocusTrapModule, ClrPopoverCloseButton as ÇlrClrPopoverCloseButton, ClrPopoverModuleNext as ÇlrClrPopoverModuleNext, ClrPopoverOpenCloseButton as ÇlrClrPopoverOpenCloseButton, DatagridCellRenderer as ÇlrDatagridCellRenderer, DatagridDetailRegisterer as ÇlrDatagridDetailRegisterer, DatagridHeaderRenderer as ÇlrDatagridHeaderRenderer, DatagridMainRenderer as ÇlrDatagridMainRenderer, DatagridRowRenderer as ÇlrDatagridRowRenderer, DatagridWillyWonka as ÇlrDatagridWillyWonka, ExpandableOompaLoompa as ÇlrExpandableOompaLoompa, FocusTrapDirective as ÇlrFocusTrapDirective, FocusTrapTracker as ÇlrFocusTrapTracker, StepperOompaLoompa as ÇlrStepperOompaLoompa, StepperWillyWonka as ÇlrStepperWillyWonka, TabsWillyWonka as ÇlrTabsWillyWonka, WrappedCell as ÇlrWrappedCell, WrappedColumn as ÇlrWrappedColumn, WrappedRow as ÇlrWrappedRow };
25961
+ export { CLR_ALERT_DIRECTIVES, CLR_BUTTON_GROUP_DIRECTIVES, CLR_DATAGRID_DIRECTIVES, CLR_DATEPICKER_DIRECTIVES, CLR_DROPDOWN_DIRECTIVES, CLR_ICON_DIRECTIVES, CLR_LAYOUT_DIRECTIVES, CLR_LOADING_BUTTON_DIRECTIVES, CLR_LOADING_DIRECTIVES, CLR_MENU_POSITIONS, CLR_MODAL_DIRECTIVES, CLR_NAVIGATION_DIRECTIVES, CLR_PROGRESS_BAR_DIRECTIVES, CLR_SIGNPOST_DIRECTIVES, CLR_SPINNER_DIRECTIVES, CLR_STACK_VIEW_DIRECTIVES, CLR_TABS_DIRECTIVES, CLR_TOOLTIP_DIRECTIVES, CLR_TREE_VIEW_DIRECTIVES, CLR_VERTICAL_NAV_DIRECTIVES, CLR_WIZARD_DIRECTIVES, CONDITIONAL_DIRECTIVES, CUSTOM_BUTTON_TYPES, CdsIconCustomTag, ClarityModule, ClrAbstractContainer, ClrAccordion, ClrAccordionContent, ClrAccordionDescription, ClrAccordionModule, ClrAccordionPanel, ClrAccordionTitle, ClrAlert, ClrAlertItem, ClrAlertModule, ClrAlertText, ClrAlerts, ClrAlertsPager, ClrAlignment, ClrAriaCurrentLink, ClrAxis, ClrButton, ClrButtonGroup, ClrButtonGroupModule, ClrButtonModule, ClrCalendar, ClrCheckbox, ClrCheckboxContainer, ClrCheckboxModule, ClrCheckboxWrapper, ClrCombobox, ClrComboboxContainer, ClrComboboxModule, ClrCommonFormsModule, ClrCommonStringsService, ClrConditionalModule, ClrControl, ClrControlContainer, ClrControlError, ClrControlHelper, ClrControlSuccess, ClrDataModule, ClrDatagrid, ClrDatagridActionBar, ClrDatagridActionOverflow, ClrDatagridCell, ClrDatagridColumn, ClrDatagridColumnSeparator, ClrDatagridColumnToggle, ClrDatagridColumnToggleButton, ClrDatagridColumnToggleTitle, ClrDatagridDetail, ClrDatagridDetailBody, ClrDatagridDetailHeader, ClrDatagridFilter, ClrDatagridFooter, ClrDatagridHideableColumn, ClrDatagridItems, ClrDatagridItemsTrackBy, ClrDatagridModule, ClrDatagridPageSize, ClrDatagridPagination, ClrDatagridPlaceholder, ClrDatagridRow, ClrDatagridRowDetail, ClrDatagridSortOrder, ClrDatalist, ClrDatalistContainer, ClrDatalistInput, ClrDatalistModule, ClrDateContainer, ClrDateInput, ClrDateInputValidator, ClrDatepickerModule, ClrDatepickerViewManager, ClrDay, ClrDaypicker, ClrDestroyService, ClrDropdown, ClrDropdownItem, ClrDropdownMenu, ClrDropdownModule, ClrDropdownTrigger, ClrEmphasisModule, ClrExpandableAnimation, ClrFocusOnViewInit, ClrFocusOnViewInitModule, ClrForm, ClrFormLayout, ClrFormsModule, ClrHeader, ClrIconCustomTag, ClrIconModule, ClrIfActive, ClrIfDetail, ClrIfError, ClrIfExpanded, ClrIfOpen, ClrIfSuccess, ClrInput, ClrInputContainer, ClrInputModule, ClrLabel, ClrLayout, ClrLayoutModule, ClrLoading, ClrLoadingButton, ClrLoadingButtonModule, ClrLoadingModule, ClrLoadingState, ClrMainContainer, ClrMainContainerModule, ClrModal, ClrModalBody, ClrModalModule, ClrMonthpicker, ClrNavLevel, ClrNavigationModule, ClrOption, ClrOptionItems, ClrOptionSelected, ClrOptions, ClrPassword, ClrPasswordContainer, ClrPasswordModule, ClrPopoverAnchor, ClrPopoverContent, ClrPopoverEventsService, ClrPopoverModule, ClrPopoverPositionService, ClrPopoverToggleService, ClrProgressBar, ClrProgressBarModule, ClrRadio, ClrRadioContainer, ClrRadioModule, ClrRadioWrapper, ClrRange, ClrRangeContainer, ClrRangeModule, ClrRecursiveForOf, ClrSelect, ClrSelectContainer, ClrSelectModule, ClrSelectedState, ClrSide, ClrSignpost, ClrSignpostContent, ClrSignpostModule, ClrSignpostTrigger, ClrSpinner, ClrSpinnerModule, ClrStackBlock, ClrStackContentInput, ClrStackHeader, ClrStackView, ClrStackViewCustomTags, ClrStackViewLabel, ClrStackViewModule, ClrStepButton, ClrStepButtonType, ClrStepper, ClrStepperModule, ClrStepperPanel, ClrTab, ClrTabContent, ClrTabLink, ClrTabOverflowContent, ClrTabs, ClrTabsModule, ClrTextarea, ClrTextareaContainer, ClrTextareaModule, ClrTimeline, ClrTimelineLayout, ClrTimelineModule, ClrTimelineStep, ClrTimelineStepDescription, ClrTimelineStepHeader, ClrTimelineStepState, ClrTimelineStepTitle, ClrTooltip, ClrTooltipContent, ClrTooltipModule, ClrTooltipTrigger, ClrTree, ClrTreeNode, ClrTreeNodeLink, ClrTreeViewModule, ClrVerticalNav, ClrVerticalNavGroup, ClrVerticalNavGroupChildren, ClrVerticalNavIcon, ClrVerticalNavLink, ClrVerticalNavModule, ClrWizard, ClrWizardButton, ClrWizardCustomTags, ClrWizardHeaderAction, ClrWizardModule, ClrWizardPage, ClrWizardPageButtons, ClrWizardPageHeaderActions, ClrWizardPageNavTitle, ClrWizardPageTitle, ClrWizardStepnav, ClrWizardStepnavItem, ClrYearpicker, DEFAULT_BUTTON_TYPES, DatagridNumericFilter, DatagridPropertyComparator, DatagridPropertyNumericFilter, DatagridPropertyStringFilter, DatagridStringFilter, EXPANDABLE_ANIMATION_DIRECTIVES, FOCUS_ON_VIEW_INIT, FOCUS_ON_VIEW_INIT_DIRECTIVES, IS_TOGGLE, IS_TOGGLE_PROVIDER, LoadingListener, MainContainerWillyWonka, NavDetectionOompaLoompa, TOGGLE_SERVICE, TOGGLE_SERVICE_PROVIDER, ToggleServiceFactory, WrappedFormControl, collapse, commonStringsDefault, fade, fadeSlide, isToggleFactory, slide, AccordionOompaLoompa as ÇlrAccordionOompaLoompa, AccordionWillyWonka as ÇlrAccordionWillyWonka, ActionableOompaLoompa as ÇlrActionableOompaLoompa, ActiveOompaLoompa as ÇlrActiveOompaLoompa, ClrPopoverCloseButton as ÇlrClrPopoverCloseButton, ClrPopoverModuleNext as ÇlrClrPopoverModuleNext, ClrPopoverOpenCloseButton as ÇlrClrPopoverOpenCloseButton, DatagridCellRenderer as ÇlrDatagridCellRenderer, DatagridDetailRegisterer as ÇlrDatagridDetailRegisterer, DatagridHeaderRenderer as ÇlrDatagridHeaderRenderer, DatagridMainRenderer as ÇlrDatagridMainRenderer, DatagridRowRenderer as ÇlrDatagridRowRenderer, DatagridWillyWonka as ÇlrDatagridWillyWonka, ExpandableOompaLoompa as ÇlrExpandableOompaLoompa, StepperOompaLoompa as ÇlrStepperOompaLoompa, StepperWillyWonka as ÇlrStepperWillyWonka, TabsWillyWonka as ÇlrTabsWillyWonka, WrappedCell as ÇlrWrappedCell, WrappedColumn as ÇlrWrappedColumn, WrappedRow as ÇlrWrappedRow };
27689
25962
  //# sourceMappingURL=clr-angular.mjs.map