@clr/angular 15.0.0-beta.2 → 15.0.0-beta.4

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 (144) hide show
  1. package/clarity.api.md +166 -496
  2. package/clr-angular.module.d.ts +12 -15
  3. package/data/datagrid/datagrid-column.d.ts +1 -22
  4. package/data/datagrid/datagrid-detail.d.ts +1 -1
  5. package/data/datagrid/datagrid-pagination.d.ts +2 -2
  6. package/data/datagrid/datagrid.module.d.ts +13 -13
  7. package/data/stack-view/index.d.ts +0 -2
  8. package/data/stack-view/stack-block.d.ts +1 -17
  9. package/data/stack-view/stack-view.d.ts +1 -11
  10. package/data/stack-view/stack-view.module.d.ts +5 -7
  11. package/data/tree-view/tree-node.d.ts +8 -7
  12. package/esm2020/accordion/accordion-panel.mjs +3 -3
  13. package/esm2020/accordion/stepper/stepper-panel.mjs +3 -3
  14. package/esm2020/clr-angular.module.mjs +1 -13
  15. package/esm2020/data/datagrid/datagrid-action-overflow.mjs +10 -10
  16. package/esm2020/data/datagrid/datagrid-column-separator.mjs +20 -18
  17. package/esm2020/data/datagrid/datagrid-column-toggle.mjs +14 -14
  18. package/esm2020/data/datagrid/datagrid-column.mjs +2 -48
  19. package/esm2020/data/datagrid/datagrid-detail.mjs +12 -10
  20. package/esm2020/data/datagrid/datagrid-filter.mjs +10 -10
  21. package/esm2020/data/datagrid/datagrid-page-size.mjs +6 -5
  22. package/esm2020/data/datagrid/datagrid-pagination.mjs +10 -5
  23. package/esm2020/data/datagrid/datagrid-row-detail.mjs +7 -8
  24. package/esm2020/data/datagrid/datagrid.module.mjs +9 -9
  25. package/esm2020/data/stack-view/index.mjs +1 -3
  26. package/esm2020/data/stack-view/stack-block.mjs +2 -8
  27. package/esm2020/data/stack-view/stack-header.mjs +2 -23
  28. package/esm2020/data/stack-view/stack-view.mjs +4 -28
  29. package/esm2020/data/stack-view/stack-view.module.mjs +3 -23
  30. package/esm2020/data/tree-view/tree-node.mjs +45 -39
  31. package/esm2020/forms/combobox/combobox.mjs +3 -3
  32. package/esm2020/forms/combobox/providers/combobox-focus-handler.service.mjs +11 -11
  33. package/esm2020/forms/datepicker/calendar.mjs +8 -7
  34. package/esm2020/forms/datepicker/date-container.mjs +12 -12
  35. package/esm2020/forms/datepicker/datepicker.module.mjs +5 -5
  36. package/esm2020/forms/datepicker/monthpicker.mjs +8 -7
  37. package/esm2020/forms/datepicker/yearpicker.mjs +8 -7
  38. package/esm2020/layout/nav/nav-level.mjs +23 -10
  39. package/esm2020/layout/tabs/tabs.mjs +3 -3
  40. package/esm2020/layout/vertical-nav/vertical-nav-group.mjs +3 -7
  41. package/esm2020/modal/modal.mjs +8 -19
  42. package/esm2020/modal/modal.module.mjs +5 -5
  43. package/esm2020/popover/common/abstract-popover.mjs +4 -3
  44. package/esm2020/popover/dropdown/dropdown-item.mjs +30 -33
  45. package/esm2020/popover/dropdown/providers/dropdown-focus-handler.service.mjs +6 -6
  46. package/esm2020/popover/tooltip/providers/tooltip-mouse.service.mjs +43 -0
  47. package/esm2020/popover/tooltip/tooltip-content.mjs +20 -6
  48. package/esm2020/popover/tooltip/tooltip-trigger.mjs +21 -13
  49. package/esm2020/popover/tooltip/tooltip.mjs +14 -3
  50. package/esm2020/utils/cdk/cdk-drag.module.mjs +37 -0
  51. package/esm2020/utils/cdk/cdk-trap-focus.module.mjs +37 -0
  52. package/esm2020/utils/enums/keys.enum.mjs +30 -0
  53. package/esm2020/utils/focus/key-focus/key-focus.mjs +13 -13
  54. package/esm2020/utils/focus/key-focus/roving-tabindex.mjs +4 -4
  55. package/esm2020/utils/focus/key-focus/util.mjs +17 -20
  56. package/esm2020/utils/i18n/common-strings.default.mjs +1 -3
  57. package/esm2020/utils/i18n/common-strings.interface.mjs +1 -1
  58. package/esm2020/utils/index.mjs +1 -5
  59. package/esm2020/wizard/wizard.mjs +6 -30
  60. package/fesm2015/clr-angular.mjs +404 -2086
  61. package/fesm2015/clr-angular.mjs.map +1 -1
  62. package/fesm2020/clr-angular.mjs +398 -2076
  63. package/fesm2020/clr-angular.mjs.map +1 -1
  64. package/forms/datepicker/datepicker.module.d.ts +6 -6
  65. package/layout/nav/nav-level.d.ts +12 -4
  66. package/layout/vertical-nav/vertical-nav-group.d.ts +1 -2
  67. package/modal/modal.d.ts +1 -4
  68. package/modal/modal.module.d.ts +3 -3
  69. package/package.json +2 -1
  70. package/popover/dropdown/dropdown-item.d.ts +7 -13
  71. package/popover/tooltip/providers/tooltip-mouse.service.d.ts +15 -0
  72. package/popover/tooltip/tooltip-content.d.ts +6 -2
  73. package/popover/tooltip/tooltip-trigger.d.ts +6 -2
  74. package/src/utils/popover/README.md +1 -1
  75. package/utils/cdk/cdk-drag.module.d.ts +17 -0
  76. package/utils/cdk/cdk-trap-focus.module.d.ts +17 -0
  77. package/utils/enums/{key-codes.enum.d.ts → keys.enum.d.ts} +3 -7
  78. package/utils/focus/key-focus/util.d.ts +1 -1
  79. package/utils/i18n/common-strings.interface.d.ts +0 -18
  80. package/utils/index.d.ts +0 -4
  81. package/wizard/wizard.d.ts +2 -13
  82. package/data/stack-view/stack-control.d.ts +0 -16
  83. package/data/stack-view/stack-input.d.ts +0 -10
  84. package/data/stack-view/stack-select.d.ts +0 -9
  85. package/esm2020/data/stack-view/stack-control.mjs +0 -34
  86. package/esm2020/data/stack-view/stack-input.mjs +0 -42
  87. package/esm2020/data/stack-view/stack-select.mjs +0 -48
  88. package/esm2020/utils/a11y/aria-live.service.mjs +0 -163
  89. package/esm2020/utils/a11y/index.mjs +0 -7
  90. package/esm2020/utils/drag-and-drop/drag-and-drop.module.mjs +0 -42
  91. package/esm2020/utils/drag-and-drop/drag-event.mjs +0 -16
  92. package/esm2020/utils/drag-and-drop/drag-handle.mjs +0 -35
  93. package/esm2020/utils/drag-and-drop/draggable/draggable.mjs +0 -135
  94. package/esm2020/utils/drag-and-drop/draggable-ghost.mjs +0 -124
  95. package/esm2020/utils/drag-and-drop/droppable/droppable.mjs +0 -222
  96. package/esm2020/utils/drag-and-drop/if-dragged.mjs +0 -47
  97. package/esm2020/utils/drag-and-drop/index.mjs +0 -14
  98. package/esm2020/utils/drag-and-drop/interfaces/drag-event.interface.mjs +0 -15
  99. package/esm2020/utils/drag-and-drop/interfaces/drop-tolerance.interface.mjs +0 -7
  100. package/esm2020/utils/drag-and-drop/providers/drag-and-drop-event-bus.service.mjs +0 -54
  101. package/esm2020/utils/drag-and-drop/providers/drag-event-listener.service.mjs +0 -179
  102. package/esm2020/utils/drag-and-drop/providers/drag-handle-registrar.service.mjs +0 -60
  103. package/esm2020/utils/drag-and-drop/providers/draggable-snapshot.service.mjs +0 -38
  104. package/esm2020/utils/drag-and-drop/providers/global-drag-mode.service.mjs +0 -26
  105. package/esm2020/utils/enums/key-codes.enum.mjs +0 -34
  106. package/esm2020/utils/focus-trap/focus-trap-config.interface.mjs +0 -7
  107. package/esm2020/utils/focus-trap/focus-trap-tracker.service.mjs +0 -32
  108. package/esm2020/utils/focus-trap/focus-trap.directive.mjs +0 -158
  109. package/esm2020/utils/focus-trap/focus-trap.mjs +0 -141
  110. package/esm2020/utils/focus-trap/focus-trap.module.mjs +0 -24
  111. package/esm2020/utils/focus-trap/index.mjs +0 -9
  112. package/esm2020/utils/for-type-ahead/for-type-ahead.mjs +0 -54
  113. package/esm2020/utils/for-type-ahead/for-type-ahead.module.mjs +0 -23
  114. package/esm2020/utils/for-type-ahead/for-type-ahead.service.mjs +0 -29
  115. package/esm2020/utils/for-type-ahead/index.mjs +0 -8
  116. package/esm2020/utils/key-codes/key-codes.mjs +0 -16
  117. package/utils/a11y/aria-live.service.d.ts +0 -93
  118. package/utils/a11y/index.d.ts +0 -1
  119. package/utils/drag-and-drop/drag-and-drop.module.d.ts +0 -14
  120. package/utils/drag-and-drop/drag-event.d.ts +0 -8
  121. package/utils/drag-and-drop/drag-handle.d.ts +0 -11
  122. package/utils/drag-and-drop/draggable/draggable.d.ts +0 -36
  123. package/utils/drag-and-drop/draggable-ghost.d.ts +0 -30
  124. package/utils/drag-and-drop/droppable/droppable.d.ts +0 -42
  125. package/utils/drag-and-drop/if-dragged.d.ts +0 -13
  126. package/utils/drag-and-drop/index.d.ts +0 -8
  127. package/utils/drag-and-drop/interfaces/drag-event.interface.d.ts +0 -22
  128. package/utils/drag-and-drop/interfaces/drop-tolerance.interface.d.ts +0 -6
  129. package/utils/drag-and-drop/providers/drag-and-drop-event-bus.service.d.ts +0 -16
  130. package/utils/drag-and-drop/providers/drag-event-listener.service.d.ts +0 -39
  131. package/utils/drag-and-drop/providers/drag-handle-registrar.service.d.ts +0 -18
  132. package/utils/drag-and-drop/providers/draggable-snapshot.service.d.ts +0 -16
  133. package/utils/drag-and-drop/providers/global-drag-mode.service.d.ts +0 -10
  134. package/utils/focus-trap/focus-trap-config.interface.d.ts +0 -3
  135. package/utils/focus-trap/focus-trap-tracker.service.d.ts +0 -12
  136. package/utils/focus-trap/focus-trap.d.ts +0 -29
  137. package/utils/focus-trap/focus-trap.directive.d.ts +0 -38
  138. package/utils/focus-trap/focus-trap.module.d.ts +0 -10
  139. package/utils/focus-trap/index.d.ts +0 -3
  140. package/utils/for-type-ahead/for-type-ahead.d.ts +0 -15
  141. package/utils/for-type-ahead/for-type-ahead.module.d.ts +0 -8
  142. package/utils/for-type-ahead/for-type-ahead.service.d.ts +0 -11
  143. package/utils/for-type-ahead/index.d.ts +0 -2
  144. package/utils/key-codes/key-codes.d.ts +0 -10
@@ -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
 
@@ -314,7 +315,6 @@ const commonStringsDefault = {
314
315
  alertCloseButtonAriaLabel: 'Close alert',
315
316
  // Date Picker
316
317
  datepickerDialogLabel: 'Choose date',
317
- datepickerToggle: 'Toggle datepicker',
318
318
  datepickerToggleChooseDateLabel: 'Choose date',
319
319
  datepickerToggleChangeDateLabel: 'Change date, {SELECTED_DATE}',
320
320
  datepickerPreviousMonth: 'Previous month',
@@ -334,7 +334,6 @@ const commonStringsDefault = {
334
334
  responsiveNavOverflowOpen: 'Navigation overflow menu',
335
335
  responsiveNavOverflowClose: 'Navigation overflow menu',
336
336
  //Vertical Nav
337
- verticalNavGroupToggle: 'Toggle vertical navigation group',
338
337
  verticalNavToggle: 'Toggle vertical navigation',
339
338
  // Timeline steps
340
339
  timelineStepNotStarted: 'Not started',
@@ -598,10 +597,10 @@ class ClrAccordionPanel {
598
597
  }
599
598
  }
600
599
  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 });
601
- 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 });
600
+ 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 });
602
601
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.2", ngImport: i0, type: ClrAccordionPanel, decorators: [{
603
602
  type: Component,
604
- 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" }]
603
+ 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" }]
605
604
  }], ctorParameters: function () { return [{ type: ClrCommonStringsService }, { type: AccordionService }, { type: IfExpandService }]; }, propDecorators: { disabled: [{
606
605
  type: Input,
607
606
  args: ['clrAccordionPanelDisabled']
@@ -1095,10 +1094,10 @@ class ClrStepperPanel extends ClrAccordionPanel {
1095
1094
  }
1096
1095
  }
1097
1096
  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 });
1098
- 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 });
1097
+ 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 });
1099
1098
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.2", ngImport: i0, type: ClrStepperPanel, decorators: [{
1100
1099
  type: Component,
1101
- 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" }]
1100
+ 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" }]
1102
1101
  }], ctorParameters: function () {
1103
1102
  return [{ type: undefined, decorators: [{
1104
1103
  type: Inject,
@@ -1328,69 +1327,62 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.2", ngImpor
1328
1327
  * This software is released under MIT license.
1329
1328
  * The full license information can be found in LICENSE in the root directory of this project.
1330
1329
  */
1331
- var KeyCodes;
1332
- (function (KeyCodes) {
1333
- KeyCodes["ArrowLeft"] = "ArrowLeft";
1334
- KeyCodes["ArrowUp"] = "ArrowUp";
1335
- KeyCodes["ArrowRight"] = "ArrowRight";
1336
- KeyCodes["ArrowDown"] = "ArrowDown";
1337
- KeyCodes["Backspace"] = "Backspace";
1338
- KeyCodes["Tab"] = "Tab";
1339
- KeyCodes["Enter"] = "Enter";
1340
- KeyCodes["Escape"] = "Escape";
1341
- KeyCodes["Space"] = "Space";
1342
- KeyCodes["Spacebar"] = " ";
1343
- KeyCodes["Home"] = "Home";
1344
- KeyCodes["End"] = "End";
1345
- })(KeyCodes || (KeyCodes = {}));
1346
- var IEKeyCodes;
1347
- (function (IEKeyCodes) {
1348
- IEKeyCodes["ArrowUp"] = "Up";
1349
- IEKeyCodes["ArrowDown"] = "Down";
1350
- IEKeyCodes["ArrowRight"] = "Right";
1351
- IEKeyCodes["ArrowLeft"] = "Left";
1352
- IEKeyCodes["Space"] = "Spacebar";
1353
- IEKeyCodes["Escape"] = "Esc";
1354
- IEKeyCodes["Home"] = "Home";
1355
- IEKeyCodes["End"] = "End";
1356
- IEKeyCodes["Enter"] = "Enter";
1357
- IEKeyCodes["Tab"] = "Tab";
1358
- })(IEKeyCodes || (IEKeyCodes = {}));
1330
+ var Keys;
1331
+ (function (Keys) {
1332
+ Keys["ArrowLeft"] = "ArrowLeft";
1333
+ Keys["ArrowUp"] = "ArrowUp";
1334
+ Keys["ArrowRight"] = "ArrowRight";
1335
+ Keys["ArrowDown"] = "ArrowDown";
1336
+ Keys["Backspace"] = "Backspace";
1337
+ Keys["Tab"] = "Tab";
1338
+ Keys["Enter"] = "Enter";
1339
+ Keys["Escape"] = "Escape";
1340
+ Keys["Space"] = "Space";
1341
+ Keys["Spacebar"] = " ";
1342
+ Keys["Home"] = "Home";
1343
+ Keys["End"] = "End";
1344
+ })(Keys || (Keys = {}));
1345
+ var IEKeys;
1346
+ (function (IEKeys) {
1347
+ IEKeys["ArrowUp"] = "Up";
1348
+ IEKeys["ArrowDown"] = "Down";
1349
+ IEKeys["ArrowRight"] = "Right";
1350
+ IEKeys["ArrowLeft"] = "Left";
1351
+ IEKeys["Space"] = "Spacebar";
1352
+ IEKeys["Escape"] = "Esc";
1353
+ })(IEKeys || (IEKeys = {}));
1359
1354
 
1360
1355
  /*
1361
1356
  * Copyright (c) 2016-2022 VMware, Inc. All Rights Reserved.
1362
1357
  * This software is released under MIT license.
1363
1358
  * The full license information can be found in LICENSE in the root directory of this project.
1364
1359
  */
1365
- function keyValidator(key) {
1366
- if (key === KeyCodes.ArrowUp || key === IEKeyCodes.ArrowUp) {
1367
- return KeyCodes.ArrowUp;
1360
+ function normalizeKey(key) {
1361
+ if (key === Keys.ArrowUp || key === IEKeys.ArrowUp) {
1362
+ return Keys.ArrowUp;
1368
1363
  }
1369
- else if (key === KeyCodes.ArrowDown || key === IEKeyCodes.ArrowDown) {
1370
- return KeyCodes.ArrowDown;
1364
+ else if (key === Keys.ArrowDown || key === IEKeys.ArrowDown) {
1365
+ return Keys.ArrowDown;
1371
1366
  }
1372
- else if (key === KeyCodes.ArrowRight || key === IEKeyCodes.ArrowRight) {
1373
- return KeyCodes.ArrowRight;
1367
+ else if (key === Keys.ArrowRight || key === IEKeys.ArrowRight) {
1368
+ return Keys.ArrowRight;
1374
1369
  }
1375
- else if (key === KeyCodes.ArrowLeft || key === IEKeyCodes.ArrowLeft) {
1376
- return KeyCodes.ArrowLeft;
1370
+ else if (key === Keys.ArrowLeft || key === IEKeys.ArrowLeft) {
1371
+ return Keys.ArrowLeft;
1377
1372
  }
1378
- else if (key === KeyCodes.Space || key === IEKeyCodes.Space) {
1379
- return KeyCodes.Space;
1373
+ else if (key === Keys.Space || key === IEKeys.Space) {
1374
+ return Keys.Space;
1380
1375
  }
1381
- else if (key === KeyCodes.Escape || key === IEKeyCodes.Escape) {
1382
- return KeyCodes.Escape;
1376
+ else if (key === Keys.Escape || key === IEKeys.Escape) {
1377
+ return Keys.Escape;
1383
1378
  }
1384
1379
  else {
1385
1380
  return key;
1386
1381
  }
1387
1382
  }
1388
1383
  function preventArrowKeyScroll(event) {
1389
- const validKey = keyValidator(event.key);
1390
- if (validKey === KeyCodes.ArrowUp ||
1391
- validKey === KeyCodes.ArrowDown ||
1392
- validKey === KeyCodes.ArrowLeft ||
1393
- validKey === KeyCodes.ArrowRight) {
1384
+ const key = normalizeKey(event.key);
1385
+ if (key === Keys.ArrowUp || key === Keys.ArrowDown || key === Keys.ArrowLeft || key === Keys.ArrowRight) {
1394
1386
  // prevent element container scroll
1395
1387
  // MDN references this is really the only way to prevent native browser interactions
1396
1388
  // https://developer.mozilla.org/en-US/docs/Web/Accessibility/Keyboard-navigable_JavaScript_widgets
@@ -5002,10 +4994,10 @@ class ClrKeyFocus {
5002
4994
  else if (this.nextKeyPressed(event) && this.currentFocusIsNotLastItem()) {
5003
4995
  this.moveTo(this.current + 1);
5004
4996
  }
5005
- else if (event.code === KeyCodes.Home) {
4997
+ else if (event.code === Keys.Home) {
5006
4998
  this.moveTo(0);
5007
4999
  }
5008
- else if (event.code === KeyCodes.End) {
5000
+ else if (event.code === Keys.End) {
5009
5001
  this.moveTo(this.focusableItems.length - 1);
5010
5002
  }
5011
5003
  preventArrowKeyScroll(event);
@@ -5053,27 +5045,27 @@ class ClrKeyFocus {
5053
5045
  });
5054
5046
  }
5055
5047
  nextKeyPressed(event) {
5056
- const key = keyValidator(event.key);
5048
+ const key = normalizeKey(event.key);
5057
5049
  switch (this.direction) {
5058
5050
  case ClrFocusDirection.VERTICAL:
5059
- return key === KeyCodes.ArrowDown;
5051
+ return key === Keys.ArrowDown;
5060
5052
  case ClrFocusDirection.HORIZONTAL:
5061
- return key === KeyCodes.ArrowRight;
5053
+ return key === Keys.ArrowRight;
5062
5054
  case ClrFocusDirection.BOTH:
5063
- return key === KeyCodes.ArrowDown || key === KeyCodes.ArrowRight;
5055
+ return key === Keys.ArrowDown || key === Keys.ArrowRight;
5064
5056
  default:
5065
5057
  return false;
5066
5058
  }
5067
5059
  }
5068
5060
  prevKeyPressed(event) {
5069
- const key = keyValidator(event.key);
5061
+ const key = normalizeKey(event.key);
5070
5062
  switch (this.direction) {
5071
5063
  case ClrFocusDirection.VERTICAL:
5072
- return key === KeyCodes.ArrowUp;
5064
+ return key === Keys.ArrowUp;
5073
5065
  case ClrFocusDirection.HORIZONTAL:
5074
- return key === KeyCodes.ArrowLeft;
5066
+ return key === Keys.ArrowLeft;
5075
5067
  case ClrFocusDirection.BOTH:
5076
- return key === KeyCodes.ArrowUp || key === KeyCodes.ArrowLeft;
5068
+ return key === Keys.ArrowUp || key === Keys.ArrowLeft;
5077
5069
  default:
5078
5070
  return false;
5079
5071
  }
@@ -5141,10 +5133,10 @@ class ClrRovingTabindex extends ClrKeyFocus {
5141
5133
  else if (this.nextKeyPressed(event) && this.currentFocusIsNotLastItem()) {
5142
5134
  this.updateTabindex(this.current + 1);
5143
5135
  }
5144
- else if (event.code === KeyCodes.Home) {
5136
+ else if (event.code === Keys.Home) {
5145
5137
  this.updateTabindex(0);
5146
5138
  }
5147
- else if (event.code === KeyCodes.End) {
5139
+ else if (event.code === Keys.End) {
5148
5140
  this.updateTabindex(this.focusableItems.length - 1);
5149
5141
  }
5150
5142
  super.handleKeyboardEvent(event);
@@ -5338,22 +5330,6 @@ const FOCUS_SERVICE_PROVIDER = {
5338
5330
  deps: [[new Optional(), new SkipSelf(), FocusService$1], Renderer2],
5339
5331
  };
5340
5332
 
5341
- /*
5342
- * Copyright (c) 2016-2022 VMware, Inc. All Rights Reserved.
5343
- * This software is released under MIT license.
5344
- * The full license information can be found in LICENSE in the root directory of this project.
5345
- */
5346
- const UP_ARROW = 38;
5347
- const DOWN_ARROW = 40;
5348
- const RIGHT_ARROW = 39;
5349
- const LEFT_ARROW = 37;
5350
- const ENTER = 13;
5351
- const SPACE = 32;
5352
- const SHIFT = 16;
5353
- const TAB = 9;
5354
- const ESC = 27;
5355
- const BACKSPACE = 8;
5356
-
5357
5333
  /*
5358
5334
  * Copyright (c) 2016-2022 VMware, Inc. All Rights Reserved.
5359
5335
  * This software is released under MIT license.
@@ -5807,10 +5783,10 @@ class ComboboxFocusHandler {
5807
5783
  // this service is only interested in keys that may move the focus
5808
5784
  handleTextInput(event) {
5809
5785
  let preventDefault = false;
5810
- const key = keyValidator(event.key);
5786
+ const key = normalizeKey(event.key);
5811
5787
  if (event) {
5812
5788
  switch (key) {
5813
- case KeyCodes.Enter:
5789
+ case Keys.Enter:
5814
5790
  if (this.toggleService.open && this.pseudoFocus.model) {
5815
5791
  if (this.selectionService.multiselectable) {
5816
5792
  this.selectionService.toggle(this.pseudoFocus.model.value);
@@ -5821,27 +5797,27 @@ class ComboboxFocusHandler {
5821
5797
  preventDefault = true;
5822
5798
  }
5823
5799
  break;
5824
- case KeyCodes.Space:
5800
+ case Keys.Space:
5825
5801
  if (!this.toggleService.open) {
5826
5802
  this.toggleService.open = true;
5827
5803
  preventDefault = true;
5828
5804
  }
5829
5805
  break;
5830
- case KeyCodes.ArrowUp:
5806
+ case Keys.ArrowUp:
5831
5807
  this.preventViewportScrolling(event);
5832
5808
  this.openAndMoveTo(ArrowKeyDirection.UP);
5833
5809
  preventDefault = true;
5834
5810
  break;
5835
- case KeyCodes.ArrowDown:
5811
+ case Keys.ArrowDown:
5836
5812
  this.preventViewportScrolling(event);
5837
5813
  this.openAndMoveTo(ArrowKeyDirection.DOWN);
5838
5814
  preventDefault = true;
5839
5815
  break;
5840
5816
  default:
5841
5817
  // Any other keypress
5842
- if (event.key !== KeyCodes.Tab &&
5843
- !(this.selectionService.multiselectable && event.key === KeyCodes.Backspace) &&
5844
- !(event.key === KeyCodes.Escape) &&
5818
+ if (event.key !== Keys.Tab &&
5819
+ !(this.selectionService.multiselectable && event.key === Keys.Backspace) &&
5820
+ !(event.key === Keys.Escape) &&
5845
5821
  !this.toggleService.open) {
5846
5822
  this.toggleService.open = true;
5847
5823
  }
@@ -6294,7 +6270,7 @@ class ClrCombobox extends WrappedFormControl {
6294
6270
  }
6295
6271
  onKeyUp(event) {
6296
6272
  // if BACKSPACE in multiselect mode, delete the last pill if text is empty
6297
- if (event.keyCode === BACKSPACE && this.multiSelect && this._searchText.length === 0) {
6273
+ if (event.key === Keys.Backspace && this.multiSelect && this._searchText.length === 0) {
6298
6274
  const multiModel = this.optionSelectionService.selectionModel.model;
6299
6275
  if (multiModel && multiModel.length > 0) {
6300
6276
  const lastItem = multiModel[multiModel.length - 1];
@@ -7046,204 +7022,32 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.2", ngImpor
7046
7022
  * This software is released under MIT license.
7047
7023
  * The full license information can be found in LICENSE in the root directory of this project.
7048
7024
  */
7049
- class FocusTrapTracker {
7050
- constructor() {
7051
- this._previousFocusTraps = [];
7052
- }
7053
- get current() {
7054
- return this._current;
7055
- }
7056
- set current(value) {
7057
- this._previousFocusTraps.push(this._current);
7058
- this._current = value;
7059
- }
7060
- get nbFocusTrappers() {
7061
- return this._previousFocusTraps.length;
7062
- }
7063
- activatePreviousTrapper() {
7064
- this._current = this._previousFocusTraps.pop();
7065
- }
7066
- }
7067
- FocusTrapTracker.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.0.2", ngImport: i0, type: FocusTrapTracker, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
7068
- FocusTrapTracker.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.0.2", ngImport: i0, type: FocusTrapTracker, providedIn: 'root' });
7069
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.2", ngImport: i0, type: FocusTrapTracker, decorators: [{
7070
- type: Injectable,
7071
- args: [{ providedIn: 'root' }]
7072
- }] });
7073
-
7074
- /*
7075
- * Copyright (c) 2016-2022 VMware, Inc. All Rights Reserved.
7076
- * This software is released under MIT license.
7077
- * The full license information can be found in LICENSE in the root directory of this project.
7025
+ /**
7026
+ * This is just a copy of CdkTrapFocus so it can be used independent of the rest of the A11yModule.
7078
7027
  */
7079
- 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"]) ';
7080
- class FocusTrapDirective {
7081
- constructor(el, injector, focusTrapsTracker, renderer, platformId) {
7082
- this.el = el;
7083
- this.injector = injector;
7084
- this.focusTrapsTracker = focusTrapsTracker;
7085
- this.renderer = renderer;
7086
- this.platformId = platformId;
7087
- this.localFocusEscaped = false;
7088
- this._config = {
7089
- strict: true,
7090
- };
7091
- this.document = this.injector.get(DOCUMENT);
7092
- this.focusTrapsTracker.current = this;
7093
- }
7094
- set config(config) {
7095
- this._config = Object.assign(this._config, config === '' ? {} : config);
7096
- }
7097
- onFocusIn(event) {
7098
- const nativeElement = this.el.nativeElement;
7099
- if (this.focusTrapsTracker.current !== this ||
7100
- !isPlatformBrowser(this.platformId) ||
7101
- this.localFocusEscaped ||
7102
- nativeElement.contains(event.target)) {
7103
- return;
7104
- }
7105
- if (event.target === this.topReboundEl && nativeElement.contains(event.relatedTarget)) {
7106
- this.focusLastFocusable();
7107
- // if it fails to focus element inside the trap, focus the trap element.
7108
- this.focusTrapElIfOutside();
7109
- }
7110
- else if (event.target === this.bottomReboundEl && nativeElement.contains(event.relatedTarget)) {
7111
- this.focusFirstFocusable();
7112
- // if it fails to focus element inside the trap, focus the trap element.
7113
- this.focusTrapElIfOutside();
7114
- }
7115
- else {
7116
- this._config.strict ? this.el.nativeElement.focus() : (this.localFocusEscaped = true);
7117
- }
7118
- }
7119
- createFocusableOffScreenEl() {
7120
- // Not using Renderer2's createElement method because that leads to DOM leakage.
7121
- // https://github.com/angular/angular/issues/26954
7122
- const offScreenSpan = this.document.createElement('span');
7123
- this.renderer.setAttribute(offScreenSpan, 'tabindex', '0');
7124
- this.renderer.addClass(offScreenSpan, 'offscreen-focus-rebounder');
7125
- return offScreenSpan;
7126
- }
7127
- addReboundEls() {
7128
- if (isPlatformBrowser(this.platformId)) {
7129
- this.topReboundEl = this.createFocusableOffScreenEl();
7130
- this.bottomReboundEl = this.createFocusableOffScreenEl();
7131
- const hostElement = this.el.nativeElement;
7132
- // Add reboundBeforeTrapEl right outside of host element
7133
- this.renderer.insertBefore(hostElement.parentElement, this.topReboundEl, hostElement);
7134
- // Add reboundAfterTrapEl right after host element
7135
- if (hostElement.nextSibling) {
7136
- this.renderer.insertBefore(hostElement.parentNode, this.bottomReboundEl, hostElement.nextSibling);
7137
- }
7138
- else {
7139
- this.renderer.appendChild(hostElement.parentNode, this.bottomReboundEl);
7140
- }
7141
- }
7142
- }
7143
- removeReboundEls() {
7144
- if (isPlatformBrowser(this.platformId) && this.topReboundEl && this.bottomReboundEl) {
7145
- this.parentElement.removeChild(this.topReboundEl);
7146
- this.parentElement.removeChild(this.bottomReboundEl);
7147
- // These are here to to make sure that
7148
- // we completely delete all traces of the removed DOM objects.
7149
- delete this.topReboundEl;
7150
- delete this.bottomReboundEl;
7151
- }
7152
- }
7153
- setPreviousFocus() {
7154
- if (this.previousActiveElement && this.previousActiveElement.focus) {
7155
- this.previousActiveElement.focus();
7156
- }
7157
- }
7158
- ngOnInit() {
7159
- if (isPlatformBrowser(this.platformId)) {
7160
- this.renderer.setAttribute(this.el.nativeElement, 'tabindex', '-1');
7161
- this.el.nativeElement.focus();
7162
- }
7163
- }
7164
- ngAfterViewInit() {
7165
- if (isPlatformBrowser(this.platformId)) {
7166
- this.previousActiveElement = this.document.activeElement;
7167
- this.parentElement = this.el.nativeElement.parentElement;
7168
- }
7169
- this.addReboundEls();
7170
- }
7171
- get potentiallyFocusableEls() {
7172
- return [...this.el.nativeElement.querySelectorAll(FOCUSABLES)];
7173
- }
7174
- focusFirstFocusable() {
7175
- for (let i = 0; i < this.potentiallyFocusableEls.length; i++) {
7176
- this.firstFocusableEl = this.focusElement(this.potentiallyFocusableEls[i]);
7177
- if (this.firstFocusableEl) {
7178
- break;
7179
- }
7180
- }
7181
- }
7182
- focusLastFocusable() {
7183
- for (let i = this.potentiallyFocusableEls.length - 1; i >= 0; i--) {
7184
- this.lastFocusableEl = this.focusElement(this.potentiallyFocusableEls[i]);
7185
- if (this.lastFocusableEl) {
7186
- break;
7187
- }
7188
- }
7189
- }
7190
- focusTrapElIfOutside() {
7191
- if (!this.el.nativeElement.contains(document.activeElement)) {
7192
- this.el.nativeElement.focus();
7193
- }
7194
- }
7195
- focusElement(el) {
7196
- if (el && el.focus) {
7197
- el.focus();
7198
- if (document.activeElement === el) {
7199
- return el;
7200
- }
7201
- }
7202
- return null;
7203
- }
7204
- ngOnDestroy() {
7205
- this.removeReboundEls();
7206
- this.setPreviousFocus();
7207
- this.focusTrapsTracker.activatePreviousTrapper();
7208
- }
7028
+ class CdkTrapFocusModule_CdkTrapFocus extends CdkTrapFocus {
7209
7029
  }
7210
- 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 });
7211
- 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 });
7212
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.2", ngImport: i0, type: FocusTrapDirective, decorators: [{
7030
+ CdkTrapFocusModule_CdkTrapFocus.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.0.2", ngImport: i0, type: CdkTrapFocusModule_CdkTrapFocus, deps: null, target: i0.ɵɵFactoryTarget.Directive });
7031
+ CdkTrapFocusModule_CdkTrapFocus.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "15.0.2", type: CdkTrapFocusModule_CdkTrapFocus, selector: "[cdkTrapFocus]", usesInheritance: true, ngImport: i0 });
7032
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.2", ngImport: i0, type: CdkTrapFocusModule_CdkTrapFocus, decorators: [{
7213
7033
  type: Directive,
7214
7034
  args: [{
7215
- selector: '[clrFocusTrap]',
7035
+ selector: '[cdkTrapFocus]',
7216
7036
  }]
7217
- }], ctorParameters: function () {
7218
- return [{ type: i0.ElementRef }, { type: i0.Injector }, { type: FocusTrapTracker }, { type: i0.Renderer2 }, { type: undefined, decorators: [{
7219
- type: Inject,
7220
- args: [PLATFORM_ID]
7221
- }] }];
7222
- }, propDecorators: { config: [{
7223
- type: Input,
7224
- args: ['clrFocusTrap']
7225
- }], onFocusIn: [{
7226
- type: HostListener,
7227
- args: ['document:focusin', ['$event']]
7228
- }] } });
7229
-
7230
- /*
7231
- * Copyright (c) 2016-2022 VMware, Inc. All Rights Reserved.
7232
- * This software is released under MIT license.
7233
- * The full license information can be found in LICENSE in the root directory of this project.
7037
+ }] });
7038
+ /**
7039
+ * This module allows us to avoid importing all of A11yModule which results in a smaller application bundle.
7234
7040
  */
7235
- const FOCUS_TRAP_DIRECTIVES = [FocusTrapDirective];
7236
- class ClrFocusTrapModule {
7041
+ class CdkTrapFocusModule {
7237
7042
  }
7238
- ClrFocusTrapModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.0.2", ngImport: i0, type: ClrFocusTrapModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
7239
- ClrFocusTrapModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "15.0.2", ngImport: i0, type: ClrFocusTrapModule, declarations: [FocusTrapDirective], imports: [CommonModule], exports: [FocusTrapDirective] });
7240
- ClrFocusTrapModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "15.0.2", ngImport: i0, type: ClrFocusTrapModule, imports: [CommonModule] });
7241
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.2", ngImport: i0, type: ClrFocusTrapModule, decorators: [{
7043
+ CdkTrapFocusModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.0.2", ngImport: i0, type: CdkTrapFocusModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
7044
+ CdkTrapFocusModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "15.0.2", ngImport: i0, type: CdkTrapFocusModule, declarations: [CdkTrapFocusModule_CdkTrapFocus], exports: [CdkTrapFocusModule_CdkTrapFocus] });
7045
+ CdkTrapFocusModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "15.0.2", ngImport: i0, type: CdkTrapFocusModule });
7046
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.2", ngImport: i0, type: CdkTrapFocusModule, decorators: [{
7242
7047
  type: NgModule,
7243
7048
  args: [{
7244
- imports: [CommonModule],
7245
- declarations: [FOCUS_TRAP_DIRECTIVES],
7246
- exports: [FOCUS_TRAP_DIRECTIVES],
7049
+ declarations: [CdkTrapFocusModule_CdkTrapFocus],
7050
+ exports: [CdkTrapFocusModule_CdkTrapFocus],
7247
7051
  }]
7248
7052
  }] });
7249
7053
 
@@ -8248,20 +8052,20 @@ class ClrCalendar {
8248
8052
  */
8249
8053
  onKeyDown(event) {
8250
8054
  if (event && this.focusedDay) {
8251
- switch (event.keyCode) {
8252
- case UP_ARROW:
8055
+ switch (normalizeKey(event.key)) {
8056
+ case Keys.ArrowUp:
8253
8057
  event.preventDefault();
8254
8058
  this._dateNavigationService.incrementFocusDay(-1 * NO_OF_DAYS_IN_A_WEEK);
8255
8059
  break;
8256
- case DOWN_ARROW:
8060
+ case Keys.ArrowDown:
8257
8061
  event.preventDefault();
8258
8062
  this._dateNavigationService.incrementFocusDay(NO_OF_DAYS_IN_A_WEEK);
8259
8063
  break;
8260
- case LEFT_ARROW:
8064
+ case Keys.ArrowLeft:
8261
8065
  event.preventDefault();
8262
8066
  this._dateNavigationService.incrementFocusDay(-1);
8263
8067
  break;
8264
- case RIGHT_ARROW:
8068
+ case Keys.ArrowRight:
8265
8069
  event.preventDefault();
8266
8070
  this._dateNavigationService.incrementFocusDay(1);
8267
8071
  break;
@@ -8446,23 +8250,23 @@ class ClrMonthpicker {
8446
8250
  // the logic is fairly simple and it didn't make sense for me
8447
8251
  // to create extra observables just to move this logic to the service.
8448
8252
  if (event) {
8449
- const keyCode = event.keyCode;
8450
- if (keyCode === UP_ARROW && this._focusedMonthIndex > 0) {
8253
+ const key = normalizeKey(event.key);
8254
+ if (key === Keys.ArrowUp && this._focusedMonthIndex > 0) {
8451
8255
  event.preventDefault();
8452
8256
  this._focusedMonthIndex--;
8453
8257
  this._datepickerFocusService.focusCell(this._elRef);
8454
8258
  }
8455
- else if (keyCode === DOWN_ARROW && this._focusedMonthIndex < 11) {
8259
+ else if (key === Keys.ArrowDown && this._focusedMonthIndex < 11) {
8456
8260
  event.preventDefault();
8457
8261
  this._focusedMonthIndex++;
8458
8262
  this._datepickerFocusService.focusCell(this._elRef);
8459
8263
  }
8460
- else if (keyCode === RIGHT_ARROW && this._focusedMonthIndex < 6) {
8264
+ else if (key === Keys.ArrowRight && this._focusedMonthIndex < 6) {
8461
8265
  event.preventDefault();
8462
8266
  this._focusedMonthIndex = this._focusedMonthIndex + 6;
8463
8267
  this._datepickerFocusService.focusCell(this._elRef);
8464
8268
  }
8465
- else if (keyCode === LEFT_ARROW && this._focusedMonthIndex > 5) {
8269
+ else if (key === Keys.ArrowLeft && this._focusedMonthIndex > 5) {
8466
8270
  event.preventDefault();
8467
8271
  this._focusedMonthIndex = this._focusedMonthIndex - 6;
8468
8272
  this._datepickerFocusService.focusCell(this._elRef);
@@ -8666,20 +8470,20 @@ class ClrYearpicker {
8666
8470
  // the logic is fairly simple and it didn't make sense for me
8667
8471
  // to create extra observables just to move this logic to the service.
8668
8472
  if (event) {
8669
- const keyCode = event.keyCode;
8670
- if (keyCode === UP_ARROW) {
8473
+ const key = normalizeKey(event.key);
8474
+ if (key === Keys.ArrowUp) {
8671
8475
  event.preventDefault();
8672
8476
  this.incrementFocusYearBy(-1);
8673
8477
  }
8674
- else if (keyCode === DOWN_ARROW) {
8478
+ else if (key === Keys.ArrowDown) {
8675
8479
  event.preventDefault();
8676
8480
  this.incrementFocusYearBy(1);
8677
8481
  }
8678
- else if (keyCode === RIGHT_ARROW) {
8482
+ else if (key === Keys.ArrowRight) {
8679
8483
  event.preventDefault();
8680
8484
  this.incrementFocusYearBy(5);
8681
8485
  }
8682
- else if (keyCode === LEFT_ARROW) {
8486
+ else if (key === Keys.ArrowLeft) {
8683
8487
  event.preventDefault();
8684
8488
  this.incrementFocusYearBy(-5);
8685
8489
  }
@@ -8973,11 +8777,11 @@ class ClrDateContainer extends ClrAbstractContainer {
8973
8777
  getToggleButtonLabel(day) {
8974
8778
  if (day) {
8975
8779
  const formattedDate = this.dateIOService.toLocaleDisplayFormatString(day.toDate());
8976
- return (this.commonStrings.parse(this.commonStrings.keys.datepickerToggleChangeDateLabel, {
8780
+ return this.commonStrings.parse(this.commonStrings.keys.datepickerToggleChangeDateLabel, {
8977
8781
  SELECTED_DATE: formattedDate,
8978
- }) || this.commonStrings.keys.datepickerToggle);
8782
+ });
8979
8783
  }
8980
- return this.commonStrings.keys.datepickerToggleChooseDateLabel || this.commonStrings.keys.datepickerToggle;
8784
+ return this.commonStrings.keys.datepickerToggleChooseDateLabel;
8981
8785
  }
8982
8786
  listenForDateChanges() {
8983
8787
  // because date-input.ts initializes the input in ngAfterViewInit,
@@ -9034,7 +8838,7 @@ ClrDateContainer.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", versi
9034
8838
  </button>
9035
8839
  <clr-datepicker-view-manager
9036
8840
  *clrPopoverContent="open; at: popoverPosition; outsideClickToClose: true; scrollToClose: true"
9037
- clrFocusTrap
8841
+ cdkTrapFocus
9038
8842
  ></clr-datepicker-view-manager>
9039
8843
  </div>
9040
8844
  <cds-icon
@@ -9056,7 +8860,7 @@ ClrDateContainer.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", versi
9056
8860
  <ng-content select="clr-control-error" *ngIf="showInvalid"></ng-content>
9057
8861
  <ng-content select="clr-control-success" *ngIf="showValid"></ng-content>
9058
8862
  </div>
9059
- `, 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" }] });
8863
+ `, 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" }] });
9060
8864
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.2", ngImport: i0, type: ClrDateContainer, decorators: [{
9061
8865
  type: Component,
9062
8866
  args: [{
@@ -9080,7 +8884,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.2", ngImpor
9080
8884
  </button>
9081
8885
  <clr-datepicker-view-manager
9082
8886
  *clrPopoverContent="open; at: popoverPosition; outsideClickToClose: true; scrollToClose: true"
9083
- clrFocusTrap
8887
+ cdkTrapFocus
9084
8888
  ></clr-datepicker-view-manager>
9085
8889
  </div>
9086
8890
  <cds-icon
@@ -9476,11 +9280,11 @@ ClrDatepickerModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", ver
9476
9280
  ClrYearpicker,
9477
9281
  ClrDaypicker,
9478
9282
  ClrCalendar], imports: [CommonModule,
9283
+ CdkTrapFocusModule,
9479
9284
  ClrHostWrappingModule,
9480
9285
  ClrConditionalModule,
9481
9286
  ClrPopoverModuleNext,
9482
9287
  ClrIconModule,
9483
- ClrFocusTrapModule,
9484
9288
  ClrCommonFormsModule], exports: [ClrDay,
9485
9289
  ClrDateContainer,
9486
9290
  ClrDateInput,
@@ -9491,22 +9295,22 @@ ClrDatepickerModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", ver
9491
9295
  ClrDaypicker,
9492
9296
  ClrCalendar] });
9493
9297
  ClrDatepickerModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "15.0.2", ngImport: i0, type: ClrDatepickerModule, imports: [CommonModule,
9298
+ CdkTrapFocusModule,
9494
9299
  ClrHostWrappingModule,
9495
9300
  ClrConditionalModule,
9496
9301
  ClrPopoverModuleNext,
9497
9302
  ClrIconModule,
9498
- ClrFocusTrapModule,
9499
9303
  ClrCommonFormsModule] });
9500
9304
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.2", ngImport: i0, type: ClrDatepickerModule, decorators: [{
9501
9305
  type: NgModule,
9502
9306
  args: [{
9503
9307
  imports: [
9504
9308
  CommonModule,
9309
+ CdkTrapFocusModule,
9505
9310
  ClrHostWrappingModule,
9506
9311
  ClrConditionalModule,
9507
9312
  ClrPopoverModuleNext,
9508
9313
  ClrIconModule,
9509
- ClrFocusTrapModule,
9510
9314
  ClrCommonFormsModule,
9511
9315
  ],
9512
9316
  declarations: [CLR_DATEPICKER_DIRECTIVES],
@@ -10530,973 +10334,66 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.2", ngImpor
10530
10334
  args: ['@expandAnimation']
10531
10335
  }], animationDone: [{
10532
10336
  type: HostListener,
10533
- args: ['@expandAnimation.done']
10534
- }] } });
10535
-
10536
- /*
10537
- * Copyright (c) 2016-2022 VMware, Inc. All Rights Reserved.
10538
- * This software is released under MIT license.
10539
- * The full license information can be found in LICENSE in the root directory of this project.
10540
- */
10541
- const EXPANDABLE_ANIMATION_DIRECTIVES = [ClrExpandableAnimation];
10542
-
10543
- /*
10544
- * Copyright (c) 2016-2022 VMware, Inc. All Rights Reserved.
10545
- * This software is released under MIT license.
10546
- * The full license information can be found in LICENSE in the root directory of this project.
10547
- */
10548
- class ClrExpandableAnimationModule {
10549
- }
10550
- ClrExpandableAnimationModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.0.2", ngImport: i0, type: ClrExpandableAnimationModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
10551
- ClrExpandableAnimationModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "15.0.2", ngImport: i0, type: ClrExpandableAnimationModule, declarations: [ClrExpandableAnimation], imports: [CommonModule], exports: [ClrExpandableAnimation] });
10552
- ClrExpandableAnimationModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "15.0.2", ngImport: i0, type: ClrExpandableAnimationModule, imports: [CommonModule] });
10553
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.2", ngImport: i0, type: ClrExpandableAnimationModule, decorators: [{
10554
- type: NgModule,
10555
- args: [{
10556
- imports: [CommonModule],
10557
- declarations: [EXPANDABLE_ANIMATION_DIRECTIVES],
10558
- exports: [EXPANDABLE_ANIMATION_DIRECTIVES],
10559
- }]
10560
- }] });
10561
-
10562
- /*
10563
- * Copyright (c) 2016-2022 VMware, Inc. All Rights Reserved.
10564
- * This software is released under MIT license.
10565
- * The full license information can be found in LICENSE in the root directory of this project.
10566
- */
10567
- var DragEventType;
10568
- (function (DragEventType) {
10569
- DragEventType[DragEventType["DRAG_START"] = 0] = "DRAG_START";
10570
- DragEventType[DragEventType["DRAG_MOVE"] = 1] = "DRAG_MOVE";
10571
- DragEventType[DragEventType["DRAG_END"] = 2] = "DRAG_END";
10572
- DragEventType[DragEventType["DRAG_ENTER"] = 3] = "DRAG_ENTER";
10573
- DragEventType[DragEventType["DRAG_LEAVE"] = 4] = "DRAG_LEAVE";
10574
- DragEventType[DragEventType["DROP"] = 5] = "DROP";
10575
- })(DragEventType || (DragEventType = {}));
10576
-
10577
- /*
10578
- * Copyright (c) 2016-2022 VMware, Inc. All Rights Reserved.
10579
- * This software is released under MIT license.
10580
- * The full license information can be found in LICENSE in the root directory of this project.
10581
- */
10582
- class DragAndDropEventBusService {
10583
- constructor() {
10584
- this.dragStart = new Subject();
10585
- this.dragMove = new Subject();
10586
- this.dragEnd = new Subject();
10587
- this.drop = new Subject();
10588
- }
10589
- get dragStarted() {
10590
- return this.dragStart.asObservable();
10591
- }
10592
- get dragMoved() {
10593
- return this.dragMove.asObservable();
10594
- }
10595
- get dragEnded() {
10596
- return this.dragEnd.asObservable();
10597
- }
10598
- get dropped() {
10599
- return this.drop.asObservable();
10600
- }
10601
- broadcast(event) {
10602
- switch (event.type) {
10603
- case DragEventType.DRAG_START:
10604
- this.dragStart.next(event);
10605
- break;
10606
- case DragEventType.DRAG_MOVE:
10607
- this.dragMove.next(event);
10608
- break;
10609
- case DragEventType.DRAG_END:
10610
- this.dragEnd.next(event);
10611
- break;
10612
- case DragEventType.DROP:
10613
- this.drop.next(event);
10614
- break;
10615
- default:
10616
- break;
10617
- }
10618
- }
10619
- }
10620
- DragAndDropEventBusService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.0.2", ngImport: i0, type: DragAndDropEventBusService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
10621
- DragAndDropEventBusService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.0.2", ngImport: i0, type: DragAndDropEventBusService, providedIn: 'root' });
10622
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.2", ngImport: i0, type: DragAndDropEventBusService, decorators: [{
10623
- type: Injectable,
10624
- args: [{ providedIn: 'root' }]
10625
- }] });
10626
-
10627
- /*
10628
- * Copyright (c) 2016-2022 VMware, Inc. All Rights Reserved.
10629
- * This software is released under MIT license.
10630
- * The full license information can be found in LICENSE in the root directory of this project.
10631
- */
10632
- class DragEventListenerService {
10633
- constructor(ngZone, renderer, eventBus) {
10634
- this.ngZone = ngZone;
10635
- this.renderer = renderer;
10636
- this.eventBus = eventBus;
10637
- // contains listeners for the starting events such as mousedown and touchstart
10638
- this.listeners = [];
10639
- this.dragStart = new Subject();
10640
- this.dragMove = new Subject();
10641
- this.dragEnd = new Subject();
10642
- this.hasDragStarted = false;
10643
- this.dragStartDelay = 0;
10644
- }
10645
- get dragStarted() {
10646
- return this.dragStart.asObservable();
10647
- }
10648
- get dragMoved() {
10649
- return this.dragMove.asObservable();
10650
- }
10651
- get dragEnded() {
10652
- return this.dragEnd.asObservable();
10653
- }
10654
- get dragStartPosition() {
10655
- return this.initialPosition;
10656
- }
10657
- attachDragListeners(draggableEl) {
10658
- this.draggableEl = draggableEl;
10659
- this.listeners.push(this.customDragEvent(this.draggableEl, 'mousedown', 'mousemove', 'mouseup'));
10660
- this.listeners.push(this.customDragEvent(this.draggableEl, 'touchstart', 'touchmove', 'touchend'));
10661
- }
10662
- detachDragListeners() {
10663
- if (this.listeners) {
10664
- this.listeners.map(event => event());
10665
- }
10666
- // In most cases, once users start dragging with mousedown/touchstart events,
10667
- // they will end dragging at one point with mouseup/touchend.
10668
- // However, there might be a few cases where mousedown/touchstart events get registered,
10669
- // but the draggable element gets removed before user ends dragging.
10670
- // In that case, we need to remove the attached listeners that happened during the mousedown/touchstart events.
10671
- if (this.nestedListeners) {
10672
- this.nestedListeners.map(event => event());
10673
- }
10674
- if (this.checkDragStartBoundaryListener) {
10675
- this.checkDragStartBoundaryListener();
10676
- }
10677
- }
10678
- getNativeEventObject(event) {
10679
- if (Object.prototype.hasOwnProperty.call(event, 'changedTouches')) {
10680
- return event.changedTouches[0];
10681
- }
10682
- else {
10683
- return event;
10684
- }
10685
- }
10686
- customDragEvent(element, startOnEvent, moveOnEvent, endOnEvent) {
10687
- return this.renderer.listen(element, startOnEvent, (startEvent) => {
10688
- // save the initial point to initialPosition
10689
- // this will be used to calculate how far the draggable has been dragged from its initial position
10690
- this.initialPosition = {
10691
- pageX: this.getNativeEventObject(startEvent).pageX,
10692
- pageY: this.getNativeEventObject(startEvent).pageY,
10693
- };
10694
- // Initialize nested listeners' property with a new empty array;
10695
- this.nestedListeners = [];
10696
- // Listen to selectstart/mousemove/touchmove events outside of angular zone.
10697
- this.ngZone.runOutsideAngular(() => {
10698
- // This is needed to disable selection during dragging (especially in EDGE/IE11).
10699
- this.nestedListeners.push(this.renderer.listen('document', 'selectstart', (selectEvent) => {
10700
- selectEvent.preventDefault();
10701
- selectEvent.stopImmediatePropagation();
10702
- }));
10703
- // During the drag start delay, pointer should stay within the boundary.
10704
- this.checkDragStartBoundary(moveOnEvent);
10705
- this.dragStartDelayTimeout = setTimeout(() => {
10706
- if (this.checkDragStartBoundaryListener) {
10707
- this.checkDragStartBoundaryListener();
10708
- }
10709
- this.hasDragStarted = true;
10710
- // Fire "dragstart"
10711
- this.broadcast(startEvent, DragEventType.DRAG_START);
10712
- this.nestedListeners.push(this.renderer.listen('document', moveOnEvent, (moveEvent) => {
10713
- // Event.stopImmediatePropagation() is needed here to prevent nested draggables from getting dragged
10714
- // altogether. We shouldn't use Event.stopPropagation() here as we are listening to the events
10715
- // on the global element level.
10716
- // With Event.stopImmediatePropagation(), it registers the events sent from the inner most draggable
10717
- // first. Then immediately after that, it stops listening to the same type of events on the same
10718
- // element. So this will help us to not register the same events that would come from the parent
10719
- // level draggables eventually.
10720
- moveEvent.stopImmediatePropagation();
10721
- if (this.hasDragStarted) {
10722
- // Fire "dragmove"
10723
- this.broadcast(moveEvent, DragEventType.DRAG_MOVE);
10724
- }
10725
- }));
10726
- }, this.dragStartDelay);
10727
- });
10728
- // Listen to mouseup/touchend events.
10729
- this.nestedListeners.push(this.renderer.listen('document', endOnEvent, (endEvent) => {
10730
- if (this.hasDragStarted) {
10731
- // Fire "dragend" only if dragstart is registered
10732
- this.hasDragStarted = false;
10733
- this.broadcast(endEvent, DragEventType.DRAG_END);
10734
- }
10735
- clearTimeout(this.dragStartDelayTimeout);
10736
- // We must remove the the nested listeners every time drag completes.
10737
- this.nestedListeners.map(event => event());
10738
- // We must remove the event listener from checkDragStartBoundary
10739
- if (this.checkDragStartBoundaryListener) {
10740
- this.checkDragStartBoundaryListener();
10741
- }
10742
- }));
10743
- });
10744
- }
10745
- checkDragStartBoundary(eventType) {
10746
- this.checkDragStartBoundaryListener = this.renderer.listen('document', eventType, (moveEvent) => {
10747
- const deltaX = Math.abs(this.getNativeEventObject(moveEvent).pageX - this.initialPosition.pageX);
10748
- const deltaY = Math.abs(this.getNativeEventObject(moveEvent).pageY - this.initialPosition.pageY);
10749
- // If pointer move delta exceeds horizontal or vertical threshold,
10750
- // we should cancel drag initiation.
10751
- if (deltaX > 1 || deltaY > 1) {
10752
- clearTimeout(this.dragStartDelayTimeout);
10753
- if (this.checkDragStartBoundaryListener) {
10754
- this.checkDragStartBoundaryListener();
10755
- }
10756
- }
10757
- });
10758
- }
10759
- broadcast(event, eventType) {
10760
- const dragEvent = this.generateDragEvent(event, eventType);
10761
- switch (dragEvent.type) {
10762
- case DragEventType.DRAG_START:
10763
- this.dragStart.next(dragEvent);
10764
- break;
10765
- case DragEventType.DRAG_MOVE:
10766
- this.dragMove.next(dragEvent);
10767
- break;
10768
- case DragEventType.DRAG_END:
10769
- this.dragEnd.next(dragEvent);
10770
- break;
10771
- default:
10772
- break;
10773
- }
10774
- // The following properties are set after they are broadcasted to the DraggableGhost component.
10775
- dragEvent.ghostElement = this.ghostElement;
10776
- dragEvent.dropPointPosition = this.dropPointPosition;
10777
- this.eventBus.broadcast(dragEvent);
10778
- }
10779
- generateDragEvent(event, eventType) {
10780
- const nativeEvent = this.getNativeEventObject(event);
10781
- return {
10782
- type: eventType,
10783
- dragPosition: {
10784
- pageX: nativeEvent.pageX,
10785
- pageY: nativeEvent.pageY,
10786
- moveX: nativeEvent.pageX - this.initialPosition.pageX,
10787
- moveY: nativeEvent.pageY - this.initialPosition.pageY,
10788
- },
10789
- group: this.group,
10790
- dragDataTransfer: this.dragDataTransfer,
10791
- ghostElement: this.ghostElement,
10792
- };
10793
- }
10794
- }
10795
- 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 });
10796
- DragEventListenerService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.0.2", ngImport: i0, type: DragEventListenerService });
10797
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.2", ngImport: i0, type: DragEventListenerService, decorators: [{
10798
- type: Injectable
10799
- }], ctorParameters: function () { return [{ type: i0.NgZone }, { type: i0.Renderer2 }, { type: DragAndDropEventBusService }]; } });
10800
-
10801
- /*
10802
- * Copyright (c) 2016-2022 VMware, Inc. All Rights Reserved.
10803
- * This software is released under MIT license.
10804
- * The full license information can be found in LICENSE in the root directory of this project.
10805
- */
10806
- // This provider registers the drag handle element.
10807
- // When it registers a element as a drag handle, it attaches that element to the listeners from ClrDragEventListener.
10808
- // Also, it adds the "drag-handle" css class to the registered element through Renderer.
10809
- class DragHandleRegistrarService {
10810
- constructor(dragEventListener, renderer) {
10811
- this.dragEventListener = dragEventListener;
10812
- this.renderer = renderer;
10813
- }
10814
- get defaultHandleEl() {
10815
- return this._defaultHandleEl;
10816
- }
10817
- set defaultHandleEl(el) {
10818
- this._defaultHandleEl = el; // defaultHandleEl will be usually the clrDraggable element.
10819
- // If the customHandleEl has been registered,
10820
- // don't make the defaultHandleEl the drag handle yet until the customHandleEl is unregistered.
10821
- if (!this._customHandleEl) {
10822
- this.makeElementHandle(this._defaultHandleEl);
10823
- }
10824
- }
10825
- makeElementHandle(el) {
10826
- if (this._defaultHandleEl && this._defaultHandleEl !== el) {
10827
- // Before making an element the custom handle element,
10828
- // we should remove the existing drag-handle class from the draggable element.
10829
- this.renderer.removeClass(this._defaultHandleEl, 'drag-handle');
10830
- }
10831
- this.dragEventListener.attachDragListeners(el);
10832
- this.renderer.addClass(el, 'drag-handle');
10833
- }
10834
- get customHandleEl() {
10835
- return this._customHandleEl;
10836
- }
10837
- registerCustomHandle(el) {
10838
- this.dragEventListener.detachDragListeners(); // removes the existing listeners
10839
- this._customHandleEl = el;
10840
- this.makeElementHandle(this._customHandleEl);
10841
- }
10842
- unregisterCustomHandle() {
10843
- this.dragEventListener.detachDragListeners(); // removes the existing listeners
10844
- this.renderer.removeClass(this._customHandleEl, 'drag-handle');
10845
- delete this._customHandleEl;
10846
- // if default handle is set, make that handle
10847
- if (this._defaultHandleEl) {
10848
- this.makeElementHandle(this._defaultHandleEl);
10849
- }
10850
- }
10851
- }
10852
- 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 });
10853
- DragHandleRegistrarService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.0.2", ngImport: i0, type: DragHandleRegistrarService });
10854
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.2", ngImport: i0, type: DragHandleRegistrarService, decorators: [{
10855
- type: Injectable
10856
- }], ctorParameters: function () { return [{ type: DragEventListenerService }, { type: i0.Renderer2 }]; } });
10857
-
10858
- /*
10859
- * Copyright (c) 2016-2022 VMware, Inc. All Rights Reserved.
10860
- * This software is released under MIT license.
10861
- * The full license information can be found in LICENSE in the root directory of this project.
10862
- */
10863
- class ClrDragHandle {
10864
- constructor(el, dragHandleRegistrar) {
10865
- this.el = el;
10866
- this.dragHandleRegistrar = dragHandleRegistrar;
10867
- if (!this.dragHandleRegistrar) {
10868
- // ClrDragHandleRegistrar is provided in ClrDraggable so we expect it to be present here
10869
- // as clrDragHandle is required to be used only inside of a clrDraggable directive.
10870
- throw new Error('The clrDragHandle directive can only be used inside of a clrDraggable directive.');
10871
- }
10872
- this.dragHandleRegistrar.registerCustomHandle(this.el.nativeElement);
10873
- }
10874
- ngOnDestroy() {
10875
- this.dragHandleRegistrar.unregisterCustomHandle();
10876
- }
10877
- }
10878
- 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 });
10879
- ClrDragHandle.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "15.0.2", type: ClrDragHandle, selector: "[clrDragHandle]", host: { properties: { "class.drag-handle": "true" } }, ngImport: i0 });
10880
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.2", ngImport: i0, type: ClrDragHandle, decorators: [{
10881
- type: Directive,
10882
- args: [{
10883
- selector: '[clrDragHandle]',
10884
- host: { '[class.drag-handle]': 'true' },
10885
- }]
10886
- }], ctorParameters: function () {
10887
- return [{ type: i0.ElementRef }, { type: DragHandleRegistrarService, decorators: [{
10888
- type: Optional
10889
- }] }];
10890
- } });
10891
-
10892
- /*
10893
- * Copyright (c) 2016-2022 VMware, Inc. All Rights Reserved.
10894
- * This software is released under MIT license.
10895
- * The full license information can be found in LICENSE in the root directory of this project.
10896
- */
10897
- // This service is used to capture the state of clrDraggable element
10898
- // at a certain event and passes it to clrDraggableGhost component.
10899
- class DraggableSnapshotService {
10900
- constructor(domAdapter) {
10901
- this.domAdapter = domAdapter;
10902
- }
10903
- capture(el, event) {
10904
- this.draggableElClientRect = this.domAdapter.clientRect(el);
10905
- this.snapshotDragEvent = event;
10906
- }
10907
- discard() {
10908
- delete this.draggableElClientRect;
10909
- delete this.snapshotDragEvent;
10910
- }
10911
- get hasDraggableState() {
10912
- return !!this.snapshotDragEvent && !!this.draggableElClientRect;
10913
- }
10914
- get clientRect() {
10915
- return this.draggableElClientRect;
10916
- }
10917
- get dragEvent() {
10918
- return this.snapshotDragEvent;
10919
- }
10920
- }
10921
- DraggableSnapshotService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.0.2", ngImport: i0, type: DraggableSnapshotService, deps: [{ token: DomAdapter }], target: i0.ɵɵFactoryTarget.Injectable });
10922
- DraggableSnapshotService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.0.2", ngImport: i0, type: DraggableSnapshotService });
10923
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.2", ngImport: i0, type: DraggableSnapshotService, decorators: [{
10924
- type: Injectable
10925
- }], ctorParameters: function () { return [{ type: DomAdapter }]; } });
10926
-
10927
- /*
10928
- * Copyright (c) 2016-2022 VMware, Inc. All Rights Reserved.
10929
- * This software is released under MIT license.
10930
- * The full license information can be found in LICENSE in the root directory of this project.
10931
- */
10932
- class ClrDraggableGhost {
10933
- constructor(el, dragEventListener, draggableSnapshot, renderer, ngZone) {
10934
- this.el = el;
10935
- this.dragEventListener = dragEventListener;
10936
- this.draggableSnapshot = draggableSnapshot;
10937
- this.renderer = renderer;
10938
- this.ngZone = ngZone;
10939
- this.subscriptions = [];
10940
- this.leaveAnimConfig = { value: 0, params: { top: '0px', left: '0px' } };
10941
- if (!this.dragEventListener || !this.draggableSnapshot) {
10942
- throw new Error('The clr-draggable-ghost component can only be used inside of a clrDraggable directive.');
10943
- }
10944
- this.draggableGhostEl = this.el.nativeElement;
10945
- // Need to use Renderer2 as it runs outside of NgZone
10946
- this.renderer.addClass(this.draggableGhostEl, 'draggable-ghost');
10947
- // Register the ghost element in DragEventListener to pass in a ClrDragEvent.
10948
- this.dragEventListener.ghostElement = this.draggableGhostEl;
10949
- // Default ghost size gets the size of ClrDraggable element.
10950
- this.setDefaultGhostSize(this.draggableGhostEl);
10951
- const offset = {
10952
- top: this.draggableSnapshot.hasDraggableState
10953
- ? this.draggableSnapshot.dragEvent.dragPosition.pageY - this.draggableSnapshot.clientRect.top
10954
- : 0,
10955
- left: this.draggableSnapshot.hasDraggableState
10956
- ? this.draggableSnapshot.dragEvent.dragPosition.pageX - this.draggableSnapshot.clientRect.left
10957
- : 0,
10958
- };
10959
- let isAnimationConfigured = false;
10960
- this.subscriptions.push(this.dragEventListener.dragMoved.subscribe((event) => {
10961
- // On the first drag move event, we configure the animation as it's dependent on the first drag event.
10962
- if (!isAnimationConfigured) {
10963
- if (this.draggableSnapshot.hasDraggableState) {
10964
- this.animateToOnLeave(`${this.draggableSnapshot.clientRect.top}px`, `${this.draggableSnapshot.clientRect.left}px`);
10965
- }
10966
- else {
10967
- this.animateToOnLeave(`${this.dragEventListener.dragStartPosition.pageY}px`, `${this.dragEventListener.dragStartPosition.pageY}px`);
10968
- }
10969
- isAnimationConfigured = true;
10970
- }
10971
- // Position the draggable ghost.
10972
- const topLeftPosition = this.findTopLeftPosition(event.dragPosition, offset);
10973
- this.setPositionStyle(this.draggableGhostEl, topLeftPosition.pageX, topLeftPosition.pageY);
10974
- this.dragEventListener.dropPointPosition = this.findDropPointPosition(topLeftPosition);
10975
- }));
10976
- }
10977
- setDefaultGhostSize(el) {
10978
- if (this.draggableSnapshot.hasDraggableState) {
10979
- this.setSizeStyle(el, this.draggableSnapshot.clientRect.width, this.draggableSnapshot.clientRect.height);
10980
- }
10981
- }
10982
- animateToOnLeave(top, left) {
10983
- this.ngZone.run(() => {
10984
- this.leaveAnimConfig = { value: 0, params: { top: top, left: left } };
10985
- });
10986
- }
10987
- findTopLeftPosition(dragPosition, offset) {
10988
- return { pageX: dragPosition.pageX - offset.left, pageY: dragPosition.pageY - offset.top };
10989
- }
10990
- findDropPointPosition(topLeftPosition) {
10991
- if (this.draggableSnapshot.hasDraggableState) {
10992
- return {
10993
- pageX: topLeftPosition.pageX + this.draggableSnapshot.clientRect.width / 2,
10994
- pageY: topLeftPosition.pageY + this.draggableSnapshot.clientRect.height / 2,
10995
- };
10996
- }
10997
- else {
10998
- return topLeftPosition;
10999
- }
11000
- }
11001
- setSizeStyle(el, width, height) {
11002
- this.renderer.setStyle(el, 'width', `${width}px`);
11003
- this.renderer.setStyle(el, 'height', `${height}px`);
11004
- }
11005
- setPositionStyle(el, left, top) {
11006
- this.renderer.setStyle(el, 'left', `${left}px`);
11007
- this.renderer.setStyle(el, 'top', `${top}px`);
11008
- this.renderer.setStyle(el, 'visibility', 'visible');
11009
- }
11010
- ngOnDestroy() {
11011
- this.subscriptions.forEach((sub) => sub.unsubscribe());
11012
- }
11013
- }
11014
- 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 });
11015
- 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: [
11016
- trigger('leaveAnimation', [
11017
- transition(':leave', [
11018
- style({ left: '*', top: '*' }),
11019
- animate('0.2s ease-in-out', style({ top: '{{top}}', left: '{{left}}' })),
11020
- ]),
11021
- ]),
11022
- ] });
11023
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.2", ngImport: i0, type: ClrDraggableGhost, decorators: [{
11024
- type: Component,
11025
- args: [{
11026
- selector: 'clr-draggable-ghost',
11027
- template: `<ng-content></ng-content>`,
11028
- animations: [
11029
- trigger('leaveAnimation', [
11030
- transition(':leave', [
11031
- style({ left: '*', top: '*' }),
11032
- animate('0.2s ease-in-out', style({ top: '{{top}}', left: '{{left}}' })),
11033
- ]),
11034
- ]),
11035
- ],
11036
- }]
11037
- }], ctorParameters: function () {
11038
- return [{ type: i0.ElementRef }, { type: DragEventListenerService, decorators: [{
11039
- type: Optional
11040
- }] }, { type: DraggableSnapshotService, decorators: [{
11041
- type: Optional
11042
- }] }, { type: i0.Renderer2 }, { type: i0.NgZone }];
11043
- }, propDecorators: { leaveAnimConfig: [{
11044
- type: HostBinding,
11045
- args: ['@leaveAnimation']
11046
- }] } });
11047
-
11048
- /*
11049
- * Copyright (c) 2016-2022 VMware, Inc. All Rights Reserved.
11050
- * This software is released under MIT license.
11051
- * The full license information can be found in LICENSE in the root directory of this project.
11052
- */
11053
- // This class is used to convert an internal event
11054
- // to an external event to be emitted.
11055
- class ClrDragEvent {
11056
- constructor(dragEvent) {
11057
- this.dragPosition = dragEvent.dragPosition;
11058
- this.group = dragEvent.group;
11059
- this.dragDataTransfer = dragEvent.dragDataTransfer;
11060
- this.dropPointPosition = dragEvent.dropPointPosition;
11061
- }
11062
- }
11063
-
11064
- /*
11065
- * Copyright (c) 2016-2022 VMware, Inc. All Rights Reserved.
11066
- * This software is released under MIT license.
11067
- * The full license information can be found in LICENSE in the root directory of this project.
11068
- */
11069
- // This structural directive will be used mainly together with `clr-draggable-ghost` directive inside of clrDraggable
11070
- // directive. The directive is responsible for instantiating `clr-draggable-ghost` directive only during dragging so
11071
- // that Angular Change Detection is prevented from running if a component or directive is placed inside of the
11072
- // `clr-draggable-ghost` directive.
11073
- class ClrIfDragged {
11074
- constructor(template, container, dragEventListener) {
11075
- this.template = template;
11076
- this.container = container;
11077
- this.dragEventListener = dragEventListener;
11078
- this.subscriptions = [];
11079
- if (!this.dragEventListener || !this.container) {
11080
- throw new Error('The *clrIfDragged directive can only be used inside of a clrDraggable directive.');
11081
- }
11082
- this.subscriptions.push(this.dragEventListener.dragStarted.subscribe(() => {
11083
- this.container.createEmbeddedView(this.template);
11084
- }));
11085
- this.subscriptions.push(this.dragEventListener.dragEnded.subscribe(() => {
11086
- this.container.clear();
11087
- }));
11088
- }
11089
- ngOnDestroy() {
11090
- this.subscriptions.forEach((sub) => sub.unsubscribe());
11091
- }
11092
- }
11093
- 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 });
11094
- ClrIfDragged.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "15.0.2", type: ClrIfDragged, selector: "[clrIfDragged]", ngImport: i0 });
11095
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.2", ngImport: i0, type: ClrIfDragged, decorators: [{
11096
- type: Directive,
11097
- args: [{
11098
- selector: '[clrIfDragged]',
11099
- }]
11100
- }], ctorParameters: function () {
11101
- return [{ type: i0.TemplateRef }, { type: i0.ViewContainerRef, decorators: [{
11102
- type: Optional
11103
- }, {
11104
- type: SkipSelf
11105
- }] }, { type: DragEventListenerService, decorators: [{
11106
- type: Optional
11107
- }] }];
11108
- } });
11109
-
11110
- /*
11111
- * Copyright (c) 2016-2022 VMware, Inc. All Rights Reserved.
11112
- * This software is released under MIT license.
11113
- * The full license information can be found in LICENSE in the root directory of this project.
11114
- */
11115
- // This service class adds and removes the "in-drag" class to the document body element
11116
- // through its public enter() and exit() methods.
11117
- class GlobalDragModeService {
11118
- constructor(renderer) {
11119
- this.renderer = renderer;
11120
- }
11121
- enter() {
11122
- this.renderer.addClass(document.body, 'in-drag');
11123
- }
11124
- exit() {
11125
- this.renderer.removeClass(document.body, 'in-drag');
11126
- }
11127
- }
11128
- GlobalDragModeService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.0.2", ngImport: i0, type: GlobalDragModeService, deps: [{ token: i0.Renderer2 }], target: i0.ɵɵFactoryTarget.Injectable });
11129
- GlobalDragModeService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.0.2", ngImport: i0, type: GlobalDragModeService });
11130
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.2", ngImport: i0, type: GlobalDragModeService, decorators: [{
11131
- type: Injectable
11132
- }], ctorParameters: function () { return [{ type: i0.Renderer2 }]; } });
10337
+ args: ['@expandAnimation.done']
10338
+ }] } });
11133
10339
 
11134
10340
  /*
11135
10341
  * Copyright (c) 2016-2022 VMware, Inc. All Rights Reserved.
11136
10342
  * This software is released under MIT license.
11137
10343
  * The full license information can be found in LICENSE in the root directory of this project.
11138
10344
  */
11139
- class ClrDraggable {
11140
- constructor(el, dragEventListener, dragHandleRegistrar, viewContainerRef, cfr, injector, draggableSnapshot, globalDragMode) {
11141
- this.el = el;
11142
- this.dragEventListener = dragEventListener;
11143
- this.dragHandleRegistrar = dragHandleRegistrar;
11144
- this.viewContainerRef = viewContainerRef;
11145
- this.cfr = cfr;
11146
- this.injector = injector;
11147
- this.draggableSnapshot = draggableSnapshot;
11148
- this.globalDragMode = globalDragMode;
11149
- this.subscriptions = [];
11150
- this.dragOn = false;
11151
- this.dragStartEmitter = new EventEmitter();
11152
- this.dragMoveEmitter = new EventEmitter();
11153
- this.dragEndEmitter = new EventEmitter();
11154
- this.draggableEl = this.el.nativeElement;
11155
- this.componentFactory = this.cfr.resolveComponentFactory(ClrDraggableGhost);
11156
- }
11157
- set dataTransfer(value) {
11158
- this.dragEventListener.dragDataTransfer = value;
11159
- }
11160
- set group(value) {
11161
- this.dragEventListener.group = value;
11162
- }
11163
- set dragStartDelay(value) {
11164
- if (typeof value === 'number') {
11165
- this.dragEventListener.dragStartDelay = value;
11166
- }
11167
- else if (typeof value === 'string') {
11168
- this.dragEventListener.dragStartDelay = parseInt(value, 10) || 0;
11169
- }
11170
- }
11171
- createDefaultGhost(event) {
11172
- this.draggableSnapshot.capture(this.draggableEl, event);
11173
- // NOTE: The default ghost element will appear
11174
- // next to the clrDraggable in the DOM as a sibling element.
11175
- this.viewContainerRef.createComponent(this.componentFactory, 0, this.injector, [
11176
- [this.draggableEl.cloneNode(true)],
11177
- ]);
11178
- }
11179
- destroyDefaultGhost() {
11180
- this.viewContainerRef.clear();
11181
- this.draggableSnapshot.discard();
11182
- }
11183
- ngAfterContentInit() {
11184
- this.dragHandleRegistrar.defaultHandleEl = this.draggableEl;
11185
- this.subscriptions.push(this.dragEventListener.dragStarted.subscribe((event) => {
11186
- this.globalDragMode.enter();
11187
- this.dragOn = true;
11188
- if (!this.customGhost) {
11189
- this.createDefaultGhost(event);
11190
- }
11191
- this.dragStartEmitter.emit(new ClrDragEvent(event));
11192
- }));
11193
- this.subscriptions.push(this.dragEventListener.dragMoved.subscribe((event) => {
11194
- this.dragMoveEmitter.emit(new ClrDragEvent(event));
11195
- }));
11196
- this.subscriptions.push(this.dragEventListener.dragEnded.subscribe((event) => {
11197
- this.globalDragMode.exit();
11198
- this.dragOn = false;
11199
- if (!this.customGhost) {
11200
- this.destroyDefaultGhost();
11201
- }
11202
- this.dragEndEmitter.emit(new ClrDragEvent(event));
11203
- }));
11204
- }
11205
- ngOnDestroy() {
11206
- this.subscriptions.forEach((sub) => sub.unsubscribe());
11207
- this.dragEventListener.detachDragListeners();
11208
- }
11209
- }
11210
- 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 });
11211
- 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: [
11212
- DragEventListenerService,
11213
- DragHandleRegistrarService,
11214
- DraggableSnapshotService,
11215
- GlobalDragModeService,
11216
- DomAdapter,
11217
- ], queries: [{ propertyName: "customGhost", first: true, predicate: ClrIfDragged, descendants: true }], ngImport: i0 });
11218
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.2", ngImport: i0, type: ClrDraggable, decorators: [{
11219
- type: Directive,
11220
- args: [{
11221
- selector: '[clrDraggable]',
11222
- providers: [
11223
- DragEventListenerService,
11224
- DragHandleRegistrarService,
11225
- DraggableSnapshotService,
11226
- GlobalDragModeService,
11227
- DomAdapter,
11228
- ],
11229
- host: { '[class.draggable]': 'true', '[class.being-dragged]': 'dragOn' },
11230
- }]
11231
- }], 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: [{
11232
- type: ContentChild,
11233
- args: [ClrIfDragged]
11234
- }], dataTransfer: [{
11235
- type: Input,
11236
- args: ['clrDraggable']
11237
- }], group: [{
11238
- type: Input,
11239
- args: ['clrGroup']
11240
- }], dragStartDelay: [{
11241
- type: Input,
11242
- args: ['clrDragStartDelay']
11243
- }], dragStartEmitter: [{
11244
- type: Output,
11245
- args: ['clrDragStart']
11246
- }], dragMoveEmitter: [{
11247
- type: Output,
11248
- args: ['clrDragMove']
11249
- }], dragEndEmitter: [{
11250
- type: Output,
11251
- args: ['clrDragEnd']
11252
- }] } });
10345
+ const EXPANDABLE_ANIMATION_DIRECTIVES = [ClrExpandableAnimation];
11253
10346
 
11254
10347
  /*
11255
10348
  * Copyright (c) 2016-2022 VMware, Inc. All Rights Reserved.
11256
10349
  * This software is released under MIT license.
11257
10350
  * The full license information can be found in LICENSE in the root directory of this project.
11258
10351
  */
11259
- class ClrDroppable {
11260
- constructor(el, eventBus, domAdapter, renderer) {
11261
- this.el = el;
11262
- this.eventBus = eventBus;
11263
- this.domAdapter = domAdapter;
11264
- this.renderer = renderer;
11265
- this.isDraggableMatch = false;
11266
- this._isDraggableOver = false;
11267
- this._dropTolerance = { top: 0, right: 0, bottom: 0, left: 0 };
11268
- this.dragStartEmitter = new EventEmitter();
11269
- this.dragMoveEmitter = new EventEmitter();
11270
- this.dragEndEmitter = new EventEmitter();
11271
- this.dragLeaveEmitter = new EventEmitter();
11272
- this.dragEnterEmitter = new EventEmitter();
11273
- this.dropEmitter = new EventEmitter();
11274
- this.droppableEl = this.el.nativeElement;
11275
- }
11276
- set isDraggableOver(value) {
11277
- // We need to add/remove this draggable-over class via Renderer2
11278
- // because isDraggableOver is set outside of NgZone.
11279
- if (value) {
11280
- this.renderer.addClass(this.droppableEl, 'draggable-over');
11281
- }
11282
- else {
11283
- this.renderer.removeClass(this.droppableEl, 'draggable-over');
11284
- }
11285
- this._isDraggableOver = value;
11286
- }
11287
- set group(value) {
11288
- this._group = value;
11289
- }
11290
- dropToleranceGenerator(top = 0, right = top, bottom = top, left = right) {
11291
- return { top, right, bottom, left };
11292
- }
11293
- set dropTolerance(value) {
11294
- // If user provides an object here and wants to manipulate/update properties individually,
11295
- // the object must be immutable as we generate new object based user's given object.
11296
- if (typeof value === 'number') {
11297
- this._dropTolerance = this.dropToleranceGenerator(value);
11298
- }
11299
- else if (typeof value === 'string') {
11300
- const toleranceValues = value
11301
- .trim()
11302
- .split(/\s+/)
11303
- .map(tolerance => parseInt(tolerance, 10));
11304
- this._dropTolerance = this.dropToleranceGenerator(...toleranceValues);
11305
- }
11306
- else if (value) {
11307
- // The value could be passed in as {left: 20, top: 30 }
11308
- // In this case, the rest of the direction properties should be 0.
11309
- // That's why we initialize properties with 0 first, then override with user's given value.
11310
- this._dropTolerance = Object.assign(Object.assign({}, this.dropToleranceGenerator(0)), value);
11311
- }
11312
- }
11313
- unsubscribeFrom(subscription) {
11314
- if (subscription) {
11315
- subscription.unsubscribe();
11316
- }
11317
- }
11318
- checkGroupMatch(draggableGroup) {
11319
- // Both Draggable and Droppable have clrGroup input.
11320
- // The clrGroup input can be both a string key or array of string keys in Draggable and Droppable.
11321
- // It's not match if Draggable has no defined value assigned to clrGroup, but Droppable has a defined clrGroup.
11322
- if (!draggableGroup && this._group) {
11323
- return false;
11324
- }
11325
- // The same is true the other way round.
11326
- if (!this._group && draggableGroup) {
11327
- return false;
11328
- }
11329
- // It's match if both Draggable and Droppable have no assigned value for clrGroup.
11330
- if (!this._group && !draggableGroup) {
11331
- return true;
11332
- }
11333
- // It's match if both Draggable and Droppable have simple string keys that are matching.
11334
- // It's match if Draggable's simple clrGroup key is matching with one of the clrGroup keys of Droppable. The
11335
- // same is true the other way round.
11336
- // it's match if one of the clrGroup keys of Droppable is matching with one of the clrGroup keys of Draggable.
11337
- if (typeof draggableGroup === 'string') {
11338
- if (typeof this._group === 'string') {
11339
- return this._group === draggableGroup;
11340
- }
11341
- else {
11342
- return this._group.indexOf(draggableGroup) > -1;
11343
- }
11344
- }
11345
- else {
11346
- if (typeof this._group === 'string') {
11347
- return draggableGroup.indexOf(this._group) > -1;
11348
- }
11349
- else {
11350
- return this._group.some(groupKey => draggableGroup.indexOf(groupKey) > -1);
11351
- }
11352
- }
11353
- }
11354
- isInDropArea(point) {
11355
- if (!point) {
11356
- return false;
11357
- }
11358
- if (!this.clientRect) {
11359
- this.clientRect = this.domAdapter.clientRect(this.droppableEl);
11360
- }
11361
- if (point.pageX >= this.clientRect.left - this._dropTolerance.left &&
11362
- point.pageX <= this.clientRect.right + this._dropTolerance.right &&
11363
- point.pageY >= this.clientRect.top - this._dropTolerance.top &&
11364
- point.pageY <= this.clientRect.bottom + this._dropTolerance.bottom) {
11365
- return true;
11366
- }
11367
- else {
11368
- return false;
11369
- }
11370
- }
11371
- onDragStart(dragStartEvent) {
11372
- // Check draggable and droppable have a matching group key.
11373
- this.isDraggableMatch = this.checkGroupMatch(dragStartEvent.group);
11374
- // Subscribe to dragMoved and dragEnded only if draggable and droppable have a matching group key.
11375
- if (this.isDraggableMatch) {
11376
- this.dragStartEmitter.emit(new ClrDragEvent(dragStartEvent));
11377
- this.dragMoveSubscription = this.eventBus.dragMoved.subscribe((dragMoveEvent) => {
11378
- this.onDragMove(dragMoveEvent);
11379
- });
11380
- this.dragEndSubscription = this.eventBus.dragEnded.subscribe((dragEndEvent) => {
11381
- this.onDragEnd(dragEndEvent);
11382
- });
11383
- }
11384
- }
11385
- onDragMove(dragMoveEvent) {
11386
- const isInDropArea = this.isInDropArea(dragMoveEvent.dropPointPosition);
11387
- if (!this._isDraggableOver && isInDropArea) {
11388
- this.isDraggableOver = true;
11389
- const dragEnterEvent = Object.assign(Object.assign({}, dragMoveEvent), { type: DragEventType.DRAG_ENTER });
11390
- this.eventBus.broadcast(dragEnterEvent);
11391
- this.dragEnterEmitter.emit(new ClrDragEvent(dragEnterEvent));
11392
- }
11393
- else if (this._isDraggableOver && !isInDropArea) {
11394
- this.isDraggableOver = false;
11395
- const dragLeaveEvent = Object.assign(Object.assign({}, dragMoveEvent), { type: DragEventType.DRAG_LEAVE });
11396
- this.eventBus.broadcast(dragLeaveEvent);
11397
- this.dragLeaveEmitter.emit(new ClrDragEvent(dragLeaveEvent));
11398
- }
11399
- this.dragMoveEmitter.emit(new ClrDragEvent(dragMoveEvent));
11400
- }
11401
- onDragEnd(dragEndEvent) {
11402
- if (this._isDraggableOver) {
11403
- if (dragEndEvent.ghostElement) {
11404
- // By this point, the draggable ghost component is destroyed,
11405
- // but the element would be active until its animation completes.
11406
- // As such, once the ghost is dropped over, we will give it "dropped" class.
11407
- // This process cannot be done in the ghost component
11408
- // because any subscription to the drop event is ineffective or invalid
11409
- // as the component had been already destroyed.
11410
- this.renderer.addClass(dragEndEvent.ghostElement, 'dropped');
11411
- }
11412
- const dropEvent = Object.assign(Object.assign({}, dragEndEvent), { type: DragEventType.DROP });
11413
- this.eventBus.broadcast(dropEvent);
11414
- this.dropEmitter.emit(new ClrDragEvent(dropEvent));
11415
- this.isDraggableOver = false;
11416
- }
11417
- this.dragEndEmitter.emit(new ClrDragEvent(dragEndEvent));
11418
- this.unsubscribeFrom(this.dragMoveSubscription);
11419
- this.unsubscribeFrom(this.dragEndSubscription);
11420
- this.isDraggableMatch = false;
11421
- delete this.clientRect;
11422
- }
11423
- ngOnInit() {
11424
- this.dragStartSubscription = this.eventBus.dragStarted.subscribe((dragStartEvent) => {
11425
- this.onDragStart(dragStartEvent);
11426
- });
11427
- }
11428
- ngOnDestroy() {
11429
- this.unsubscribeFrom(this.dragStartSubscription);
11430
- this.unsubscribeFrom(this.dragMoveSubscription);
11431
- this.unsubscribeFrom(this.dragEndSubscription);
11432
- }
10352
+ class ClrExpandableAnimationModule {
11433
10353
  }
11434
- 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 });
11435
- 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 });
11436
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.2", ngImport: i0, type: ClrDroppable, decorators: [{
11437
- type: Directive,
10354
+ ClrExpandableAnimationModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.0.2", ngImport: i0, type: ClrExpandableAnimationModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
10355
+ ClrExpandableAnimationModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "15.0.2", ngImport: i0, type: ClrExpandableAnimationModule, declarations: [ClrExpandableAnimation], imports: [CommonModule], exports: [ClrExpandableAnimation] });
10356
+ ClrExpandableAnimationModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "15.0.2", ngImport: i0, type: ClrExpandableAnimationModule, imports: [CommonModule] });
10357
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.2", ngImport: i0, type: ClrExpandableAnimationModule, decorators: [{
10358
+ type: NgModule,
11438
10359
  args: [{
11439
- selector: '[clrDroppable]',
11440
- providers: [DomAdapter],
11441
- host: { '[class.droppable]': 'true', '[class.draggable-match]': 'isDraggableMatch' },
10360
+ imports: [CommonModule],
10361
+ declarations: [EXPANDABLE_ANIMATION_DIRECTIVES],
10362
+ exports: [EXPANDABLE_ANIMATION_DIRECTIVES],
11442
10363
  }]
11443
- }], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: DragAndDropEventBusService }, { type: DomAdapter }, { type: i0.Renderer2 }]; }, propDecorators: { group: [{
11444
- type: Input,
11445
- args: ['clrGroup']
11446
- }], dropTolerance: [{
11447
- type: Input,
11448
- args: ['clrDropTolerance']
11449
- }], dragStartEmitter: [{
11450
- type: Output,
11451
- args: ['clrDragStart']
11452
- }], dragMoveEmitter: [{
11453
- type: Output,
11454
- args: ['clrDragMove']
11455
- }], dragEndEmitter: [{
11456
- type: Output,
11457
- args: ['clrDragEnd']
11458
- }], dragLeaveEmitter: [{
11459
- type: Output,
11460
- args: ['clrDragLeave']
11461
- }], dragEnterEmitter: [{
11462
- type: Output,
11463
- args: ['clrDragEnter']
11464
- }], dropEmitter: [{
11465
- type: Output,
11466
- args: ['clrDrop']
11467
- }] } });
10364
+ }] });
11468
10365
 
11469
10366
  /*
11470
10367
  * Copyright (c) 2016-2022 VMware, Inc. All Rights Reserved.
11471
10368
  * This software is released under MIT license.
11472
10369
  * The full license information can be found in LICENSE in the root directory of this project.
11473
10370
  */
11474
- const CLR_DRAG_AND_DROP_DIRECTIVES = [
11475
- ClrDraggable,
11476
- ClrDroppable,
11477
- ClrIfDragged,
11478
- ClrDragHandle,
11479
- ClrDraggableGhost,
11480
- ];
11481
- class ClrDragAndDropModule {
11482
- }
11483
- ClrDragAndDropModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.0.2", ngImport: i0, type: ClrDragAndDropModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
11484
- ClrDragAndDropModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "15.0.2", ngImport: i0, type: ClrDragAndDropModule, declarations: [ClrDraggable,
11485
- ClrDroppable,
11486
- ClrIfDragged,
11487
- ClrDragHandle,
11488
- ClrDraggableGhost], imports: [CommonModule], exports: [ClrDraggable,
11489
- ClrDroppable,
11490
- ClrIfDragged,
11491
- ClrDragHandle,
11492
- ClrDraggableGhost] });
11493
- ClrDragAndDropModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "15.0.2", ngImport: i0, type: ClrDragAndDropModule, imports: [CommonModule] });
11494
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.2", ngImport: i0, type: ClrDragAndDropModule, decorators: [{
10371
+ /**
10372
+ * This is just a copy of CdkDrag so it can be used independent of the rest of the CdkDragDropModule.
10373
+ */
10374
+ class CdkDragModule_CdkDrag extends CdkDrag {
10375
+ }
10376
+ CdkDragModule_CdkDrag.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.0.2", ngImport: i0, type: CdkDragModule_CdkDrag, deps: null, target: i0.ɵɵFactoryTarget.Directive });
10377
+ CdkDragModule_CdkDrag.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "15.0.2", type: CdkDragModule_CdkDrag, selector: "[cdkDrag]", usesInheritance: true, ngImport: i0 });
10378
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.2", ngImport: i0, type: CdkDragModule_CdkDrag, decorators: [{
10379
+ type: Directive,
10380
+ args: [{
10381
+ selector: '[cdkDrag]',
10382
+ }]
10383
+ }] });
10384
+ /**
10385
+ * This module allows us to avoid importing all of CdkDragDropModule which results in a smaller application bundle.
10386
+ */
10387
+ class CdkDragModule {
10388
+ }
10389
+ CdkDragModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.0.2", ngImport: i0, type: CdkDragModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
10390
+ CdkDragModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "15.0.2", ngImport: i0, type: CdkDragModule, declarations: [CdkDragModule_CdkDrag], exports: [CdkDragModule_CdkDrag] });
10391
+ CdkDragModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "15.0.2", ngImport: i0, type: CdkDragModule });
10392
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.2", ngImport: i0, type: CdkDragModule, decorators: [{
11495
10393
  type: NgModule,
11496
10394
  args: [{
11497
- imports: [CommonModule],
11498
- declarations: [CLR_DRAG_AND_DROP_DIRECTIVES],
11499
- exports: [CLR_DRAG_AND_DROP_DIRECTIVES],
10395
+ declarations: [CdkDragModule_CdkDrag],
10396
+ exports: [CdkDragModule_CdkDrag],
11500
10397
  }]
11501
10398
  }] });
11502
10399
 
@@ -12156,7 +11053,7 @@ ClrDatagridFilter.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", vers
12156
11053
  <div
12157
11054
  class="datagrid-filter"
12158
11055
  [id]="popoverId"
12159
- clrFocusTrap
11056
+ cdkTrapFocus
12160
11057
  *clrPopoverContent="open; at: smartPosition; outsideClickToClose: true; scrollToClose: true"
12161
11058
  role="dialog"
12162
11059
  [attr.aria-label]="commonStrings.keys.datagridFilterDialogAriaLabel"
@@ -12169,7 +11066,7 @@ ClrDatagridFilter.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", vers
12169
11066
 
12170
11067
  <ng-content></ng-content>
12171
11068
  </div>
12172
- `, 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"] }] });
11069
+ `, 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"] }] });
12173
11070
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.2", ngImport: i0, type: ClrDatagridFilter, decorators: [{
12174
11071
  type: Component,
12175
11072
  args: [{
@@ -12199,7 +11096,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.2", ngImpor
12199
11096
  <div
12200
11097
  class="datagrid-filter"
12201
11098
  [id]="popoverId"
12202
- clrFocusTrap
11099
+ cdkTrapFocus
12203
11100
  *clrPopoverContent="open; at: smartPosition; outsideClickToClose: true; scrollToClose: true"
12204
11101
  role="dialog"
12205
11102
  [attr.aria-label]="commonStrings.keys.datagridFilterDialogAriaLabel"
@@ -13362,8 +12259,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.2", ngImpor
13362
12259
  // Default resize length on each keyboard move event
13363
12260
  const KEYBOARD_RESIZE_LENGTH = 12;
13364
12261
  class ClrDatagridColumnSeparator {
13365
- // Every column draggable separator should have its own unique ID
13366
- // in order to not conflict with other draggables/droppables.
13367
12262
  constructor(columnResizerService, renderer, ngZone, tableSizeService, commonString, document) {
13368
12263
  this.columnResizerService = columnResizerService;
13369
12264
  this.renderer = renderer;
@@ -13411,6 +12306,7 @@ class ClrDatagridColumnSeparator {
13411
12306
  this.columnResizerService.endResize();
13412
12307
  this.renderer.setStyle(this.resizeTrackerEl, 'display', 'none');
13413
12308
  this.renderer.setStyle(this.resizeTrackerEl, 'transform', `translateX(0px)`);
12309
+ this.renderer.setStyle(this.columnHandleEl, 'transform', `translateX(0px)`);
13414
12310
  this.renderer.setStyle(this.document.body, 'cursor', 'auto');
13415
12311
  }
13416
12312
  showTrackerOnFirstKeyDown(event) {
@@ -13422,9 +12318,11 @@ class ClrDatagridColumnSeparator {
13422
12318
  }
13423
12319
  moveTrackerOnKeyDown(event) {
13424
12320
  if (this.isArrowLeftKeyEvent(event)) {
12321
+ event.stopPropagation();
13425
12322
  this.moveTracker(this.columnResizerService.resizedBy - KEYBOARD_RESIZE_LENGTH);
13426
12323
  }
13427
12324
  else if (this.isArrowRightKeyEvent(event)) {
12325
+ event.stopPropagation();
13428
12326
  this.moveTracker(this.columnResizerService.resizedBy + KEYBOARD_RESIZE_LENGTH);
13429
12327
  }
13430
12328
  }
@@ -13448,10 +12346,10 @@ class ClrDatagridColumnSeparator {
13448
12346
  }
13449
12347
  }
13450
12348
  isArrowLeftKeyEvent(event) {
13451
- return event.key === KeyCodes.ArrowLeft || event.key === IEKeyCodes.ArrowLeft;
12349
+ return normalizeKey(event.key) === Keys.ArrowLeft;
13452
12350
  }
13453
12351
  isArrowRightKeyEvent(event) {
13454
- return event.key === KeyCodes.ArrowRight || event.key === IEKeyCodes.ArrowRight;
12352
+ return normalizeKey(event.key) === Keys.ArrowRight;
13455
12353
  }
13456
12354
  ngOnDestroy() {
13457
12355
  this.unlisteners.forEach(unlistener => unlistener());
@@ -13464,18 +12362,18 @@ ClrDatagridColumnSeparator.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0
13464
12362
  class="datagrid-column-handle"
13465
12363
  [attr.aria-label]="commonString.keys.columnSeparatorAriaLabel"
13466
12364
  [attr.aria-describedby]="descriptionId"
13467
- clrDraggable
13468
- [clrGroup]="columnSeparatorId"
13469
- (clrDragStart)="showTracker()"
13470
- (clrDragMove)="moveTracker($event.dragPosition.moveX)"
13471
- (clrDragEnd)="hideTracker()"
12365
+ cdkDrag
12366
+ cdkDragLockAxis="x"
12367
+ (cdkDragStarted)="showTracker()"
12368
+ (cdkDragMoved)="moveTracker($event.distance.x)"
12369
+ (cdkDragEnded)="hideTracker(); $event.source._dragRef.reset()"
13472
12370
  #columnHandle
13473
12371
  ></button>
13474
12372
  <span class="clr-sr-only" [attr.id]="descriptionId">
13475
12373
  {{ commonString.keys.columnSeparatorDescription }}
13476
12374
  </span>
13477
12375
  <div class="datagrid-column-resize-tracker" #resizeTracker></div>
13478
- `, isInline: true, dependencies: [{ kind: "directive", type: ClrDraggable, selector: "[clrDraggable]", inputs: ["clrDraggable", "clrGroup", "clrDragStartDelay"], outputs: ["clrDragStart", "clrDragMove", "clrDragEnd"] }] });
12376
+ `, isInline: true, dependencies: [{ kind: "directive", type: CdkDragModule_CdkDrag, selector: "[cdkDrag]" }] });
13479
12377
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.2", ngImport: i0, type: ClrDatagridColumnSeparator, decorators: [{
13480
12378
  type: Component,
13481
12379
  args: [{
@@ -13486,11 +12384,11 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.2", ngImpor
13486
12384
  class="datagrid-column-handle"
13487
12385
  [attr.aria-label]="commonString.keys.columnSeparatorAriaLabel"
13488
12386
  [attr.aria-describedby]="descriptionId"
13489
- clrDraggable
13490
- [clrGroup]="columnSeparatorId"
13491
- (clrDragStart)="showTracker()"
13492
- (clrDragMove)="moveTracker($event.dragPosition.moveX)"
13493
- (clrDragEnd)="hideTracker()"
12387
+ cdkDrag
12388
+ cdkDragLockAxis="x"
12389
+ (cdkDragStarted)="showTracker()"
12390
+ (cdkDragMoved)="moveTracker($event.distance.x)"
12391
+ (cdkDragEnded)="hideTracker(); $event.source._dragRef.reset()"
13494
12392
  #columnHandle
13495
12393
  ></button>
13496
12394
  <span class="clr-sr-only" [attr.id]="descriptionId">
@@ -13539,18 +12437,6 @@ class ClrDatagridColumn extends DatagridFilterRegistrar {
13539
12437
  * via the [clrDgColType] input by setting it to 'string' or 'number'.
13540
12438
  */
13541
12439
  this._colType = 'string';
13542
- // deprecated: to be removed - START
13543
- /**
13544
- * Indicates if the column is currently sorted
13545
- *
13546
- * @deprecated This will be removed soon, in favor of the sortOrder mechanism
13547
- */
13548
- this._sorted = false;
13549
- /**
13550
- * @deprecated This will be removed soon, in favor of the sortOrder mechanism
13551
- */
13552
- this.sortedChange = new EventEmitter();
13553
- // deprecated: to be removed - END
13554
12440
  /**
13555
12441
  * Indicates how the column is currently sorted
13556
12442
  */
@@ -13586,16 +12472,8 @@ class ClrDatagridColumn extends DatagridFilterRegistrar {
13586
12472
  if (this.sortOrder !== ClrDatagridSortOrder.UNSORTED && sort.comparator !== this._sortBy) {
13587
12473
  this._sortOrder = ClrDatagridSortOrder.UNSORTED;
13588
12474
  this.sortOrderChange.emit(this._sortOrder);
13589
- // removes the sortIcon when column becomes unsorted
13590
- this.sortIcon = null;
13591
12475
  this._sortDirection = null;
13592
12476
  }
13593
- // deprecated: to be removed - START
13594
- if (this.sorted && sort.comparator !== this._sortBy) {
13595
- this._sorted = false;
13596
- this.sortedChange.emit(false);
13597
- }
13598
- // deprecated: to be removed - END
13599
12477
  });
13600
12478
  }
13601
12479
  get colType() {
@@ -13672,21 +12550,6 @@ class ClrDatagridColumn extends DatagridFilterRegistrar {
13672
12550
  get sortable() {
13673
12551
  return !!this._sortBy;
13674
12552
  }
13675
- get sorted() {
13676
- return this._sorted;
13677
- }
13678
- /**
13679
- * @deprecated This will be removed soon, in favor of the sortOrder mechanism
13680
- */
13681
- set sorted(value) {
13682
- if (!value && this.sorted) {
13683
- this._sorted = false;
13684
- this._sort.clear();
13685
- }
13686
- else if (value && !this.sorted) {
13687
- this.sort();
13688
- }
13689
- }
13690
12553
  get sortOrder() {
13691
12554
  return this._sortOrder;
13692
12555
  }
@@ -13738,12 +12601,7 @@ class ClrDatagridColumn extends DatagridFilterRegistrar {
13738
12601
  this._sortOrder = this._sort.reverse ? ClrDatagridSortOrder.DESC : ClrDatagridSortOrder.ASC;
13739
12602
  // Sets the correct icon for current sort order
13740
12603
  this._sortDirection = this._sortOrder === ClrDatagridSortOrder.DESC ? 'down' : 'up';
13741
- this.sortIcon = this._sortOrder === ClrDatagridSortOrder.DESC ? 'arrow down' : 'arrow'; // Backward compatibility
13742
12604
  this.sortOrderChange.emit(this._sortOrder);
13743
- // deprecated: to be removed - START
13744
- this._sorted = true;
13745
- this.sortedChange.emit(true);
13746
- // deprecated: to be removed - END
13747
12605
  }
13748
12606
  set projectedFilter(custom) {
13749
12607
  if (custom) {
@@ -13811,7 +12669,7 @@ class ClrDatagridColumn extends DatagridFilterRegistrar {
13811
12669
  }
13812
12670
  }
13813
12671
  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 });
13814
- 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: `
12672
+ 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: `
13815
12673
  <div class="datagrid-column-flex">
13816
12674
  <button class="datagrid-column-title" *ngIf="sortable" (click)="sort()" type="button">
13817
12675
  <ng-container *ngTemplateOutlet="columnTitle"></ng-container>
@@ -13914,12 +12772,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.2", ngImpor
13914
12772
  }], sortBy: [{
13915
12773
  type: Input,
13916
12774
  args: ['clrDgSortBy']
13917
- }], sorted: [{
13918
- type: Input,
13919
- args: ['clrDgSorted']
13920
- }], sortedChange: [{
13921
- type: Output,
13922
- args: ['clrDgSortedChange']
13923
12775
  }], sortOrder: [{
13924
12776
  type: Input,
13925
12777
  args: ['clrDgSortOrder']
@@ -16032,13 +14884,13 @@ ClrDatagridActionOverflow.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.
16032
14884
  [attr.aria-hidden]="!open"
16033
14885
  [attr.id]="popoverId"
16034
14886
  clrKeyFocus
16035
- clrFocusTrap
14887
+ cdkTrapFocus
16036
14888
  (click)="closeOverflowContent($event)"
16037
14889
  *clrPopoverContent="open; at: smartPosition; outsideClickToClose: true; scrollToClose: true"
16038
14890
  >
16039
14891
  <ng-content></ng-content>
16040
14892
  </div>
16041
- `, 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"] }] });
14893
+ `, 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"] }] });
16042
14894
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.2", ngImport: i0, type: ClrDatagridActionOverflow, decorators: [{
16043
14895
  type: Component,
16044
14896
  args: [{
@@ -16066,7 +14918,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.2", ngImpor
16066
14918
  [attr.aria-hidden]="!open"
16067
14919
  [attr.id]="popoverId"
16068
14920
  clrKeyFocus
16069
- clrFocusTrap
14921
+ cdkTrapFocus
16070
14922
  (click)="closeOverflowContent($event)"
16071
14923
  *clrPopoverContent="open; at: smartPosition; outsideClickToClose: true; scrollToClose: true"
16072
14924
  >
@@ -16274,7 +15126,7 @@ ClrDatagridColumnToggle.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0"
16274
15126
  role="dialog"
16275
15127
  [attr.aria-label]="commonStrings.keys.showColumnsMenuDescription"
16276
15128
  [id]="popoverId"
16277
- clrFocusTrap
15129
+ cdkTrapFocus
16278
15130
  *clrPopoverContent="openState; at: smartPosition; outsideClickToClose: true; scrollToClose: true"
16279
15131
  >
16280
15132
  <div class="switch-header">
@@ -16316,7 +15168,7 @@ ClrDatagridColumnToggle.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0"
16316
15168
  </clr-dg-column-toggle-button>
16317
15169
  </div>
16318
15170
  </div>
16319
- `, 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"] }] });
15171
+ `, 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"] }] });
16320
15172
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.2", ngImport: i0, type: ClrDatagridColumnToggle, decorators: [{
16321
15173
  type: Component,
16322
15174
  args: [{
@@ -16339,7 +15191,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.2", ngImpor
16339
15191
  role="dialog"
16340
15192
  [attr.aria-label]="commonStrings.keys.showColumnsMenuDescription"
16341
15193
  [id]="popoverId"
16342
- clrFocusTrap
15194
+ cdkTrapFocus
16343
15195
  *clrPopoverContent="openState; at: smartPosition; outsideClickToClose: true; scrollToClose: true"
16344
15196
  >
16345
15197
  <div class="switch-header">
@@ -16461,14 +15313,15 @@ class ClrDatagridDetail {
16461
15313
  this.detailService = detailService;
16462
15314
  this.commonStrings = commonStrings;
16463
15315
  }
16464
- closeCheck() {
15316
+ close() {
16465
15317
  this.detailService.close();
16466
15318
  }
16467
15319
  }
16468
15320
  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 });
16469
- 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: `
15321
+ ClrDatagridDetail.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.0.2", type: ClrDatagridDetail, selector: "clr-dg-detail", host: { listeners: { "document:keyup.escape": "close()" }, properties: { "class.datagrid-detail-pane": "true" } }, queries: [{ propertyName: "header", first: true, predicate: ClrDatagridDetailHeader, descendants: true }], ngImport: i0, template: `
16470
15322
  <div
16471
- [clrFocusTrap]="{ strict: false }"
15323
+ cdkTrapFocus
15324
+ [cdkTrapFocusAutoCapture]="true"
16472
15325
  class="datagrid-detail-pane-content"
16473
15326
  *ngIf="detailService.isOpen"
16474
15327
  role="dialog"
@@ -16480,7 +15333,7 @@ ClrDatagridDetail.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", vers
16480
15333
  <ng-content></ng-content>
16481
15334
  <div class="clr-sr-only">{{ commonStrings.keys.detailPaneEnd }}</div>
16482
15335
  </div>
16483
- `, isInline: true, dependencies: [{ kind: "directive", type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: FocusTrapDirective, selector: "[clrFocusTrap]", inputs: ["clrFocusTrap"] }] });
15336
+ `, isInline: true, dependencies: [{ kind: "directive", type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: CdkTrapFocusModule_CdkTrapFocus, selector: "[cdkTrapFocus]" }] });
16484
15337
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.2", ngImport: i0, type: ClrDatagridDetail, decorators: [{
16485
15338
  type: Component,
16486
15339
  args: [{
@@ -16488,11 +15341,12 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.2", ngImpor
16488
15341
  host: {
16489
15342
  '[class.datagrid-detail-pane]': 'true',
16490
15343
  },
16491
- // We put the *ngIf on the clrFocusTrap so it doesn't always exist on the page
15344
+ // We put the *ngIf on the cdkTrapFocus so it doesn't always exist on the page
16492
15345
  // have to test for presence of header for aria-describedby because it was causing unit tests to crash
16493
15346
  template: `
16494
15347
  <div
16495
- [clrFocusTrap]="{ strict: false }"
15348
+ cdkTrapFocus
15349
+ [cdkTrapFocusAutoCapture]="true"
16496
15350
  class="datagrid-detail-pane-content"
16497
15351
  *ngIf="detailService.isOpen"
16498
15352
  role="dialog"
@@ -16509,9 +15363,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.2", ngImpor
16509
15363
  }], ctorParameters: function () { return [{ type: DetailService }, { type: ClrCommonStringsService }]; }, propDecorators: { header: [{
16510
15364
  type: ContentChild,
16511
15365
  args: [ClrDatagridDetailHeader]
16512
- }], closeCheck: [{
15366
+ }], close: [{
16513
15367
  type: HostListener,
16514
- args: ['document:keyup.esc']
15368
+ args: ['document:keyup.escape']
16515
15369
  }] } });
16516
15370
 
16517
15371
  /*
@@ -16712,291 +15566,12 @@ function slide(direction) {
16712
15566
  * This software is released under MIT license.
16713
15567
  * The full license information can be found in LICENSE in the root directory of this project.
16714
15568
  */
16715
- var ClrAriaLivePoliteness;
16716
- (function (ClrAriaLivePoliteness) {
16717
- ClrAriaLivePoliteness["off"] = "off";
16718
- ClrAriaLivePoliteness["polite"] = "polite";
16719
- ClrAriaLivePoliteness["assertive"] = "assertive";
16720
- })(ClrAriaLivePoliteness || (ClrAriaLivePoliteness = {}));
16721
- /**
16722
- * Time in milliseconds before inserting the content into the container
16723
- */
16724
- const ARIA_LIVE_TICK = 100;
16725
- /**
16726
- * @deprecated
16727
- *
16728
- * -- ClrAriaLiveService is deprecated in 5.0 to be removed in 6.0 --
16729
- * Please consider using the LiveAnnouncer in the Angular Material CDK
16730
- * if your project needs this functionality.
16731
- * More info: https://material.angular.io/cdk/a11y/overview#example-1
16732
- *
16733
- * This service handle `aria-live` accessibility attribute. The issue is that you need
16734
- * to have the DOM Element with attribute `aria-live` before you could insert content
16735
- * and SR (Screen Reader) pick the change and announce it.
16736
- *
16737
- * ```typescript
16738
- * import { ClrAriaLiveService } from 'src/clr-angular/utils/a11y/aria-live.service';
16739
- *
16740
- * @Component({
16741
- * selector: 'clr-demo-component',
16742
- * providers: [ClrAriaLiveService],
16743
- * template: `
16744
- * <ng-content></ng-content>
16745
- * `,
16746
- * })
16747
- * export class DemoComponent {
16748
- * constructor(ariaLiveService: ClrAriaLiveService) {}
16749
- *
16750
- * public actionThatWillTriggerChange() {
16751
- * this.ariaLiveService.announce('message that I want to announce to SR');
16752
- * }
16753
- * }
16754
- * ```
16755
- *
16756
- */
16757
- class ClrAriaLiveService {
16758
- constructor(ngZone, _document, platformId) {
16759
- this.ngZone = ngZone;
16760
- this.platformId = platformId;
16761
- this._id = `clr-aria-live-element-${uniqueIdFactory()}`;
16762
- this.document = _document;
16763
- }
16764
- /**
16765
- * get access to the internal HTML `id` that gonna be used for the AriaLive container.
16766
- * @return ID of the DOM Element as string.
16767
- */
16768
- get id() {
16769
- return this._id;
16770
- }
16771
- /**
16772
- * Append text content inside the AriaLive Container. This method will check if the
16773
- * DOM Element is existing if not it will create one for us and the will apply the text.
16774
- *
16775
- * ```typescript
16776
- * this.ariaLiveService.announce(this.el.nativeElement);
16777
- * // or
16778
- * this.ariaLiveService.announce('Message to announce to SR');
16779
- * ```
16780
- *
16781
- * @remark
16782
- * When second argument is `AriaLivePoliteness.off` we won't create aria container or update it.
16783
- * The reason for that is that we don't want to do additional work if the SR will ignore it.
16784
- *
16785
- * @param message - This could be simple string or HTMLElement
16786
- * @param politeness - 'polite', 'assertive' or 'off'
16787
- */
16788
- announce(message, politeness = ClrAriaLivePoliteness.polite) {
16789
- if (politeness === ClrAriaLivePoliteness.off) {
16790
- return;
16791
- }
16792
- if (!this.ariaLiveElement && isPlatformBrowser(this.platformId)) {
16793
- this.ariaLiveElement = this.createContainer();
16794
- }
16795
- message = typeof message !== 'string' && isPlatformBrowser(this.platformId) ? message.textContent : message;
16796
- // when there is no message do NOTHING!
16797
- if (!message) {
16798
- return;
16799
- }
16800
- this.ariaLiveElement.setAttribute('aria-live', politeness);
16801
- // This 100ms timeout is necessary for some browser + screen-reader combinations:
16802
- // - Both JAWS and NVDA over IE11 will not announce anything without a non-zero timeout.
16803
- // - With Chrome and IE11 with NVDA or JAWS, a repeated (identical) message won't be read a
16804
- // second time without clearing and then using a non-zero delay.
16805
- // (using JAWS 17 at time of this writing).
16806
- this.ngZone.runOutsideAngular(() => {
16807
- // This clearTimeout will stop all older messages from announcing
16808
- // in the case where the messages are comming too fast we gonna try to append only
16809
- // the last one. That's what the SR will try to do anyway.
16810
- clearTimeout(this.previousTimeout);
16811
- this.previousTimeout = setTimeout(() => {
16812
- this.ariaLiveElement.textContent = message;
16813
- }, ARIA_LIVE_TICK);
16814
- });
16815
- }
16816
- /**
16817
- * onDestroy life cycle - must stop all active setTimeouts and remove the AriaLive
16818
- * container from the document.
16819
- */
16820
- ngOnDestroy() {
16821
- clearTimeout(this.previousTimeout);
16822
- if (isPlatformBrowser(this.platformId) && this.ariaLiveElement) {
16823
- this.document.body.removeChild(this.ariaLiveElement);
16824
- this.ariaLiveElement = null;
16825
- }
16826
- }
16827
- /**
16828
- * Create AriaLive DOM element as a last child of the document.
16829
- * After the element is created, we gonna apply Clarity class to hide it from
16830
- * the screen and set the `aria-live` politness.
16831
- *
16832
- * `clr-sr-only` is the CSS class that is used to hide the element from the screen.
16833
- *
16834
- * @remark
16835
- * Calling this method multiple times will create multiple DOM Elements, that
16836
- * won't be tracked and will be GC after the service is destroyed.
16837
- *
16838
- * @return AriaLive container as HTMLElement
16839
- *
16840
- */
16841
- createContainer() {
16842
- const ariaLiveElement = this.document.createElement('div');
16843
- ariaLiveElement.setAttribute('id', this.id);
16844
- // Use clarity screen reader class to hide the dom element
16845
- // and fix the scrollbar shake
16846
- ariaLiveElement.classList.add('clr-sr-only');
16847
- ariaLiveElement.setAttribute('aria-atomic', 'true');
16848
- ariaLiveElement.setAttribute('aria-live', ClrAriaLivePoliteness.polite);
16849
- this.document.body.appendChild(ariaLiveElement);
16850
- return ariaLiveElement;
16851
- }
16852
- }
16853
- 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 });
16854
- ClrAriaLiveService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.0.2", ngImport: i0, type: ClrAriaLiveService, providedIn: 'root' });
16855
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.2", ngImport: i0, type: ClrAriaLiveService, decorators: [{
16856
- type: Injectable,
16857
- args: [{
16858
- providedIn: 'root',
16859
- }]
16860
- }], ctorParameters: function () {
16861
- return [{ type: i0.NgZone }, { type: undefined, decorators: [{
16862
- type: Inject,
16863
- args: [DOCUMENT]
16864
- }] }, { type: undefined, decorators: [{
16865
- type: Inject,
16866
- args: [PLATFORM_ID]
16867
- }] }];
16868
- } });
16869
-
16870
- /*
16871
- * Copyright (c) 2016-2022 VMware, Inc. All Rights Reserved.
16872
- * This software is released under MIT license.
16873
- * The full license information can be found in LICENSE in the root directory of this project.
16874
- */
16875
-
16876
- /*
16877
- * Copyright (c) 2016-2022 VMware, Inc. All Rights Reserved.
16878
- * This software is released under MIT license.
16879
- * The full license information can be found in LICENSE in the root directory of this project.
16880
- */
16881
-
16882
- /*
16883
- * Copyright (c) 2016-2022 VMware, Inc. All Rights Reserved.
16884
- * This software is released under MIT license.
16885
- * The full license information can be found in LICENSE in the root directory of this project.
16886
- */
16887
-
16888
- /*
16889
- * Copyright (c) 2016-2022 VMware, Inc. All Rights Reserved.
16890
- * This software is released under MIT license.
16891
- * The full license information can be found in LICENSE in the root directory of this project.
16892
- */
16893
-
16894
- /*
16895
- * Copyright (c) 2016-2022 VMware, Inc. All Rights Reserved.
16896
- * This software is released under MIT license.
16897
- * The full license information can be found in LICENSE in the root directory of this project.
16898
- */
16899
-
16900
- /*
16901
- * Copyright (c) 2016-2022 VMware, Inc. All Rights Reserved.
16902
- * This software is released under MIT license.
16903
- * The full license information can be found in LICENSE in the root directory of this project.
16904
- */
16905
-
16906
- /*
16907
- * Copyright (c) 2016-2022 VMware, Inc. All Rights Reserved.
16908
- * This software is released under MIT license.
16909
- * The full license information can be found in LICENSE in the root directory of this project.
16910
- */
16911
- class ForTypeAheadProvider {
16912
- constructor() {
16913
- this._textContentChange = new Subject();
16914
- }
16915
- get textContentChange() {
16916
- return this._textContentChange.asObservable();
16917
- }
16918
- get textContent() {
16919
- return this._textContent;
16920
- }
16921
- set textContent(value) {
16922
- this._textContent = value;
16923
- this._textContentChange.next(value);
16924
- }
16925
- }
16926
- ForTypeAheadProvider.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.0.2", ngImport: i0, type: ForTypeAheadProvider, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
16927
- ForTypeAheadProvider.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.0.2", ngImport: i0, type: ForTypeAheadProvider });
16928
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.2", ngImport: i0, type: ForTypeAheadProvider, decorators: [{
16929
- type: Injectable
16930
- }] });
16931
-
16932
- /*
16933
- * Copyright (c) 2016-2022 VMware, Inc. All Rights Reserved.
16934
- * This software is released under MIT license.
16935
- * The full license information can be found in LICENSE in the root directory of this project.
16936
- */
16937
- // The purpose of this directive is to provide the text content of its host element
16938
- // or text content that's passed to its input.
16939
- // This directive must stay optional. So do not embed this directive in a component module by default.
16940
- // If users need to use this directive, they should import its module on their side.
16941
- class ClrForTypeAhead {
16942
- constructor(el, forTypeAheadProvider) {
16943
- this.el = el;
16944
- this.forTypeAheadProvider = forTypeAheadProvider;
16945
- }
16946
- trimAndLowerCase(value) {
16947
- return value.toLocaleLowerCase().trim();
16948
- }
16949
- get content() {
16950
- return this._content;
16951
- }
16952
- set content(value) {
16953
- if (value) {
16954
- this._content = this.trimAndLowerCase(value);
16955
- this.forTypeAheadProvider.textContent = this._content;
16956
- }
16957
- else {
16958
- this._content = this.trimAndLowerCase(this.el.nativeElement.textContent);
16959
- this.forTypeAheadProvider.textContent = this._content;
16960
- }
16961
- }
16962
- ngOnInit() {
16963
- if (!this._content) {
16964
- this._content = this.trimAndLowerCase(this.el.nativeElement.textContent);
16965
- this.forTypeAheadProvider.textContent = this._content;
16966
- }
16967
- }
16968
- }
16969
- 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 });
16970
- ClrForTypeAhead.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "15.0.2", type: ClrForTypeAhead, selector: "[clrForTypeAhead]", inputs: { content: ["clrForTypeAhead", "content"] }, providers: [ForTypeAheadProvider], ngImport: i0 });
16971
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.2", ngImport: i0, type: ClrForTypeAhead, decorators: [{
16972
- type: Directive,
16973
- args: [{
16974
- providers: [ForTypeAheadProvider],
16975
- selector: '[clrForTypeAhead]',
16976
- }]
16977
- }], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: ForTypeAheadProvider }]; }, propDecorators: { content: [{
16978
- type: Input,
16979
- args: ['clrForTypeAhead']
16980
- }] } });
16981
15569
 
16982
15570
  /*
16983
15571
  * Copyright (c) 2016-2022 VMware, Inc. All Rights Reserved.
16984
15572
  * This software is released under MIT license.
16985
15573
  * The full license information can be found in LICENSE in the root directory of this project.
16986
15574
  */
16987
- class ClrForTypeAheadModule {
16988
- }
16989
- ClrForTypeAheadModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.0.2", ngImport: i0, type: ClrForTypeAheadModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
16990
- ClrForTypeAheadModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "15.0.2", ngImport: i0, type: ClrForTypeAheadModule, declarations: [ClrForTypeAhead], imports: [CommonModule], exports: [ClrForTypeAhead] });
16991
- ClrForTypeAheadModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "15.0.2", ngImport: i0, type: ClrForTypeAheadModule, imports: [CommonModule] });
16992
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.2", ngImport: i0, type: ClrForTypeAheadModule, decorators: [{
16993
- type: NgModule,
16994
- args: [{
16995
- imports: [CommonModule],
16996
- declarations: [ClrForTypeAhead],
16997
- exports: [ClrForTypeAhead],
16998
- }]
16999
- }] });
17000
15575
 
17001
15576
  /*
17002
15577
  * Copyright (c) 2016-2022 VMware, Inc. All Rights Reserved.
@@ -17285,19 +15860,19 @@ class ClrDatagridPageSize {
17285
15860
  }
17286
15861
  ClrDatagridPageSize.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.0.2", ngImport: i0, type: ClrDatagridPageSize, deps: [{ token: Page }], target: i0.ɵɵFactoryTarget.Component });
17287
15862
  ClrDatagridPageSize.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.0.2", type: ClrDatagridPageSize, selector: "clr-dg-page-size", inputs: { pageSizeOptions: ["clrPageSizeOptions", "pageSizeOptions"], pageSizeOptionsId: ["clrPageSizeOptionsId", "pageSizeOptionsId"] }, ngImport: i0, template: `
17288
- <ng-content></ng-content>
15863
+ <label [for]="pageSizeOptionsId"><ng-content></ng-content></label>
17289
15864
  <div class="clr-select-wrapper">
17290
15865
  <select [id]="pageSizeOptionsId" [class.clr-page-size-select]="true" [(ngModel)]="page.size">
17291
15866
  <option *ngFor="let option of pageSizeOptions" [ngValue]="option">{{ option }}</option>
17292
15867
  </select>
17293
15868
  </div>
17294
- `, isInline: true, dependencies: [{ kind: "directive", type: i5.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgSelectOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i1.ɵNgSelectMultipleOption, selector: "option", inputs: ["ngValue", "value"] }, { 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"] }] });
15869
+ `, isInline: true, dependencies: [{ kind: "directive", type: i5.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: ClrLabel, selector: "label", inputs: ["for"] }, { kind: "directive", type: i1.NgSelectOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i1.ɵNgSelectMultipleOption, selector: "option", inputs: ["ngValue", "value"] }, { 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"] }] });
17295
15870
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.2", ngImport: i0, type: ClrDatagridPageSize, decorators: [{
17296
15871
  type: Component,
17297
15872
  args: [{
17298
15873
  selector: 'clr-dg-page-size',
17299
15874
  template: `
17300
- <ng-content></ng-content>
15875
+ <label [for]="pageSizeOptionsId"><ng-content></ng-content></label>
17301
15876
  <div class="clr-select-wrapper">
17302
15877
  <select [id]="pageSizeOptionsId" [class.clr-page-size-select]="true" [(ngModel)]="page.size">
17303
15878
  <option *ngFor="let option of pageSizeOptions" [ngValue]="option">{{ option }}</option>
@@ -17429,9 +16004,14 @@ class ClrDatagridPagination {
17429
16004
  }
17430
16005
  return middlePages;
17431
16006
  }
16007
+ verifyCurrentPage(event) {
16008
+ const parsed = parseInt(event.target.value, 10);
16009
+ if (parsed !== this.page.current) {
16010
+ event.target.value = this.page.current;
16011
+ }
16012
+ }
17432
16013
  /**
17433
- * We only update the pagination's current page on blur of the input field, or
17434
- * when they press enter.
16014
+ * We only update the pagination's current page on enter.
17435
16015
  */
17436
16016
  updateCurrentPage(event) {
17437
16017
  const parsed = parseInt(event.target.value, 10);
@@ -17492,7 +16072,7 @@ ClrDatagridPagination.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0",
17492
16072
  [size]="page.last.toString().length"
17493
16073
  [value]="page.current"
17494
16074
  (keydown.enter)="updateCurrentPage($event)"
17495
- (blur)="updateCurrentPage($event)"
16075
+ (blur)="verifyCurrentPage($event)"
17496
16076
  [attr.aria-label]="commonStrings.keys.currentPage"
17497
16077
  />
17498
16078
  <ng-template #readOnly>
@@ -17592,7 +16172,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.2", ngImpor
17592
16172
  [size]="page.last.toString().length"
17593
16173
  [value]="page.current"
17594
16174
  (keydown.enter)="updateCurrentPage($event)"
17595
- (blur)="updateCurrentPage($event)"
16175
+ (blur)="verifyCurrentPage($event)"
17596
16176
  [attr.aria-label]="commonStrings.keys.currentPage"
17597
16177
  />
17598
16178
  <ng-template #readOnly>
@@ -17713,20 +16293,20 @@ class ClrDatagridRowDetail {
17713
16293
  }
17714
16294
  get beginningOfExpandableContentAriaText() {
17715
16295
  return (this._beginningOfExpandableContentAriaText ||
17716
- `${this.commonStrings.keys.dategridExpandableBeginningOf || this.commonStrings.keys.datagridExpandableBeginningOf}
17717
- ${this.commonStrings.keys.dategridExpandableRowContent || this.commonStrings.keys.datagridExpandableRowContent}`);
16296
+ `${this.commonStrings.keys.datagridExpandableBeginningOf}
16297
+ ${this.commonStrings.keys.datagridExpandableRowContent}`);
17718
16298
  }
17719
16299
  get endOfExpandableContentAriaText() {
17720
16300
  return (this._endOfExpandableContentAriaText ||
17721
- `${this.commonStrings.keys.dategridExpandableEndOf || this.commonStrings.keys.datagridExpandableEndOf}
17722
- ${this.commonStrings.keys.dategridExpandableRowContent || this.commonStrings.keys.datagridExpandableRowContent}`);
16301
+ `${this.commonStrings.keys.datagridExpandableEndOf}
16302
+ ${this.commonStrings.keys.datagridExpandableRowContent}`);
17723
16303
  }
17724
16304
  }
17725
16305
  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 });
17726
16306
  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: `
17727
16307
  <div class="clr-sr-only">
17728
16308
  {{ beginningOfExpandableContentAriaText }}
17729
- {{ commonStrings.keys.dategridExpandableRowsHelperText || commonStrings.keys.datagridExpandableRowsHelperText }}
16309
+ {{ commonStrings.keys.datagridExpandableRowsHelperText }}
17730
16310
  </div>
17731
16311
  <ng-content></ng-content>
17732
16312
  <div class="clr-sr-only">{{ endOfExpandableContentAriaText }}</div>
@@ -17735,11 +16315,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.2", ngImpor
17735
16315
  type: Component,
17736
16316
  args: [{
17737
16317
  selector: 'clr-dg-row-detail',
17738
- // TODO: @deprecated - dategrid* keys are deprecated. Remove in v14.
17739
16318
  template: `
17740
16319
  <div class="clr-sr-only">
17741
16320
  {{ beginningOfExpandableContentAriaText }}
17742
- {{ commonStrings.keys.dategridExpandableRowsHelperText || commonStrings.keys.datagridExpandableRowsHelperText }}
16321
+ {{ commonStrings.keys.datagridExpandableRowsHelperText }}
17743
16322
  </div>
17744
16323
  <ng-content></ng-content>
17745
16324
  <div class="clr-sr-only">{{ endOfExpandableContentAriaText }}</div>
@@ -18361,6 +16940,8 @@ ClrDatagridModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", versi
18361
16940
  DatagridStringFilter,
18362
16941
  DatagridNumericFilter
18363
16942
  ], imports: [CommonModule,
16943
+ CdkDragModule,
16944
+ CdkTrapFocusModule,
18364
16945
  ClrIconModule,
18365
16946
  ClrFormsModule,
18366
16947
  FormsModule,
@@ -18368,11 +16949,9 @@ ClrDatagridModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", versi
18368
16949
  ClrConditionalModule,
18369
16950
  ClrOutsideClickModule,
18370
16951
  ClrExpandableAnimationModule,
18371
- ClrDragAndDropModule,
18372
16952
  ClrSpinnerModule,
18373
16953
  ClrPopoverModuleNext,
18374
16954
  ClrKeyFocusModule,
18375
- ClrFocusTrapModule,
18376
16955
  ClrFocusOnViewInitModule], exports: [
18377
16956
  // Core
18378
16957
  ClrDatagrid,
@@ -18416,6 +16995,8 @@ ClrDatagridModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", versi
18416
16995
  DatagridNumericFilter
18417
16996
  ] });
18418
16997
  ClrDatagridModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "15.0.2", ngImport: i0, type: ClrDatagridModule, imports: [CommonModule,
16998
+ CdkDragModule,
16999
+ CdkTrapFocusModule,
18419
17000
  ClrIconModule,
18420
17001
  ClrFormsModule,
18421
17002
  FormsModule,
@@ -18423,17 +17004,17 @@ ClrDatagridModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", versi
18423
17004
  ClrConditionalModule,
18424
17005
  ClrOutsideClickModule,
18425
17006
  ClrExpandableAnimationModule,
18426
- ClrDragAndDropModule,
18427
17007
  ClrSpinnerModule,
18428
17008
  ClrPopoverModuleNext,
18429
17009
  ClrKeyFocusModule,
18430
- ClrFocusTrapModule,
18431
17010
  ClrFocusOnViewInitModule] });
18432
17011
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.2", ngImport: i0, type: ClrDatagridModule, decorators: [{
18433
17012
  type: NgModule,
18434
17013
  args: [{
18435
17014
  imports: [
18436
17015
  CommonModule,
17016
+ CdkDragModule,
17017
+ CdkTrapFocusModule,
18437
17018
  ClrIconModule,
18438
17019
  ClrFormsModule,
18439
17020
  FormsModule,
@@ -18441,11 +17022,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.2", ngImpor
18441
17022
  ClrConditionalModule,
18442
17023
  ClrOutsideClickModule,
18443
17024
  ClrExpandableAnimationModule,
18444
- ClrDragAndDropModule,
18445
17025
  ClrSpinnerModule,
18446
17026
  ClrPopoverModuleNext,
18447
17027
  ClrKeyFocusModule,
18448
- ClrFocusTrapModule,
18449
17028
  ClrFocusOnViewInitModule,
18450
17029
  ],
18451
17030
  declarations: [CLR_DATAGRID_DIRECTIVES],
@@ -18594,7 +17173,7 @@ class ClrStackBlock {
18594
17173
  }
18595
17174
  }
18596
17175
  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 });
18597
- 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: `
17176
+ 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: `
18598
17177
  <!-- The 'preventDefault' for the space keydown event prevents the page
18599
17178
  from scrolling when a stack block is toggled via the space key. -->
18600
17179
  <div
@@ -18715,12 +17294,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.2", ngImpor
18715
17294
  }], ariaLevel: [{
18716
17295
  type: Input,
18717
17296
  args: ['clrStackViewLevel']
18718
- }], ariaSetsize: [{
18719
- type: Input,
18720
- args: ['clrStackViewSetsize']
18721
- }], ariaPosinset: [{
18722
- type: Input,
18723
- args: ['clrStackViewPosinset']
18724
17297
  }], onStackLabelFocus: [{
18725
17298
  type: HostBinding,
18726
17299
  args: ['class.on-focus']
@@ -18755,30 +17328,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.2", ngImpor
18755
17328
  * The full license information can be found in LICENSE in the root directory of this project.
18756
17329
  */
18757
17330
  class ClrStackView {
18758
- constructor() {
18759
- /**
18760
- * Undocumented experimental feature: inline editing.
18761
- */
18762
- this.editable = false;
18763
- this.save = new EventEmitter(false);
18764
- this._editMode = false;
18765
- this.editingChange = new EventEmitter(false);
18766
- }
18767
- get editing() {
18768
- return this.editable && this._editMode;
18769
- }
18770
- set editing(value) {
18771
- if (this.editable) {
18772
- this._editMode = value;
18773
- this.editingChange.emit(value);
18774
- if (!value) {
18775
- this.save.emit(null);
18776
- }
18777
- }
18778
- }
18779
17331
  }
18780
17332
  ClrStackView.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.0.2", ngImport: i0, type: ClrStackView, deps: [], target: i0.ɵɵFactoryTarget.Component });
18781
- ClrStackView.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.0.2", type: ClrStackView, selector: "clr-stack-view", outputs: { save: "clrStackSave" }, ngImport: i0, template: `
17333
+ ClrStackView.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.0.2", type: ClrStackView, selector: "clr-stack-view", ngImport: i0, template: `
18782
17334
  <ng-content select="clr-stack-header"></ng-content>
18783
17335
  <div class="stack-view"><ng-content></ng-content></div>
18784
17336
  `, isInline: true, styles: [":host{display:block}\n"] });
@@ -18788,10 +17340,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.2", ngImpor
18788
17340
  <ng-content select="clr-stack-header"></ng-content>
18789
17341
  <div class="stack-view"><ng-content></ng-content></div>
18790
17342
  `, styles: [":host{display:block}\n"] }]
18791
- }], propDecorators: { save: [{
18792
- type: Output,
18793
- args: ['clrStackSave']
18794
- }] } });
17343
+ }] });
18795
17344
 
18796
17345
  /*
18797
17346
  * Copyright (c) 2016-2022 VMware, Inc. All Rights Reserved.
@@ -18810,19 +17359,9 @@ ClrStackHeader.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version
18810
17359
 
18811
17360
  <span class="stack-actions">
18812
17361
  <ng-content select=".stack-action"></ng-content>
18813
- <!-- Undocumented experimental feature: inline editing. -->
18814
- <button
18815
- *ngIf="stackView.editable"
18816
- class="stack-action btn btn-sm btn-link"
18817
- (click)="stackView.editing = !stackView.editing"
18818
- type="button"
18819
- >
18820
- Edit
18821
- </button>
18822
- <!-- End of undocumented experimental feature. -->
18823
17362
  </span>
18824
17363
  </div>
18825
- `, isInline: true, styles: [":host{display:block}\n"], dependencies: [{ kind: "directive", type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }] });
17364
+ `, isInline: true, styles: [":host{display:block}\n"] });
18826
17365
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.2", ngImport: i0, type: ClrStackHeader, decorators: [{
18827
17366
  type: Component,
18828
17367
  args: [{ selector: 'clr-stack-header', template: `
@@ -18831,116 +17370,11 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.2", ngImpor
18831
17370
 
18832
17371
  <span class="stack-actions">
18833
17372
  <ng-content select=".stack-action"></ng-content>
18834
- <!-- Undocumented experimental feature: inline editing. -->
18835
- <button
18836
- *ngIf="stackView.editable"
18837
- class="stack-action btn btn-sm btn-link"
18838
- (click)="stackView.editing = !stackView.editing"
18839
- type="button"
18840
- >
18841
- Edit
18842
- </button>
18843
- <!-- End of undocumented experimental feature. -->
18844
17373
  </span>
18845
17374
  </div>
18846
17375
  `, styles: [":host{display:block}\n"] }]
18847
17376
  }], ctorParameters: function () { return [{ type: ClrStackView }]; } });
18848
17377
 
18849
- /*
18850
- * Copyright (c) 2016-2022 VMware, Inc. All Rights Reserved.
18851
- * This software is released under MIT license.
18852
- * The full license information can be found in LICENSE in the root directory of this project.
18853
- */
18854
- class StackControl {
18855
- constructor(stackView) {
18856
- this.stackView = stackView;
18857
- this.modelChange = new EventEmitter(false);
18858
- // Make the ClrStackView editable, since it contains a StackControl
18859
- this.stackView.editable = true;
18860
- this.subscription = this.stackView.editingChange.subscribe((editing) => {
18861
- // Edit mode was closed
18862
- if (!editing) {
18863
- this.modelChange.emit(this.model);
18864
- }
18865
- });
18866
- }
18867
- ngOnDestroy() {
18868
- this.subscription.unsubscribe();
18869
- }
18870
- }
18871
- StackControl.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.0.2", ngImport: i0, type: StackControl, deps: [{ token: ClrStackView }], target: i0.ɵɵFactoryTarget.Directive });
18872
- StackControl.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "15.0.2", type: StackControl, ngImport: i0 });
18873
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.2", ngImport: i0, type: StackControl, decorators: [{
18874
- type: Directive
18875
- }], ctorParameters: function () { return [{ type: ClrStackView }]; } });
18876
-
18877
- /*
18878
- * Copyright (c) 2016-2022 VMware, Inc. All Rights Reserved.
18879
- * This software is released under MIT license.
18880
- * The full license information can be found in LICENSE in the root directory of this project.
18881
- */
18882
- class ClrStackInput extends StackControl {
18883
- constructor(stackView) {
18884
- super(stackView);
18885
- this.stackView = stackView;
18886
- this.type = 'text';
18887
- }
18888
- }
18889
- ClrStackInput.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.0.2", ngImport: i0, type: ClrStackInput, deps: [{ token: ClrStackView }], target: i0.ɵɵFactoryTarget.Component });
18890
- 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: `
18891
- <span *ngIf="!stackView.editing">{{ model }}</span>
18892
- <input [type]="type" *ngIf="stackView.editing" [(ngModel)]="model" />
18893
- `, 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"] }] });
18894
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.2", ngImport: i0, type: ClrStackInput, decorators: [{
18895
- type: Component,
18896
- args: [{
18897
- selector: 'clr-stack-input',
18898
- inputs: ['model: clrModel', 'type'],
18899
- outputs: ['modelChange: clrModelChange'],
18900
- template: `
18901
- <span *ngIf="!stackView.editing">{{ model }}</span>
18902
- <input [type]="type" *ngIf="stackView.editing" [(ngModel)]="model" />
18903
- `,
18904
- }]
18905
- }], ctorParameters: function () { return [{ type: ClrStackView }]; } });
18906
-
18907
- /*
18908
- * Copyright (c) 2016-2022 VMware, Inc. All Rights Reserved.
18909
- * This software is released under MIT license.
18910
- * The full license information can be found in LICENSE in the root directory of this project.
18911
- */
18912
- class ClrStackSelect extends StackControl {
18913
- constructor(stackView) {
18914
- super(stackView);
18915
- this.stackView = stackView;
18916
- }
18917
- }
18918
- ClrStackSelect.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.0.2", ngImport: i0, type: ClrStackSelect, deps: [{ token: ClrStackView }], target: i0.ɵɵFactoryTarget.Component });
18919
- 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: `
18920
- <span *ngIf="!stackView.editing">{{ model }}</span>
18921
- <div class="select" *ngIf="stackView.editing">
18922
- <select [(ngModel)]="model">
18923
- <ng-content></ng-content>
18924
- </select>
18925
- </div>
18926
- `, 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"] }] });
18927
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.2", ngImport: i0, type: ClrStackSelect, decorators: [{
18928
- type: Component,
18929
- args: [{
18930
- selector: 'clr-stack-select',
18931
- inputs: ['model: clrModel'],
18932
- outputs: ['modelChange: clrModelChange'],
18933
- template: `
18934
- <span *ngIf="!stackView.editing">{{ model }}</span>
18935
- <div class="select" *ngIf="stackView.editing">
18936
- <select [(ngModel)]="model">
18937
- <ng-content></ng-content>
18938
- </select>
18939
- </div>
18940
- `,
18941
- }]
18942
- }], ctorParameters: function () { return [{ type: ClrStackView }]; } });
18943
-
18944
17378
  /*
18945
17379
  * Copyright (c) 2016-2022 VMware, Inc. All Rights Reserved.
18946
17380
  * This software is released under MIT license.
@@ -18953,14 +17387,6 @@ const CLR_STACK_VIEW_DIRECTIVES = [
18953
17387
  ClrStackContentInput,
18954
17388
  ClrStackViewLabel,
18955
17389
  ClrStackViewCustomTags,
18956
- /**
18957
- * Undocumented experimental feature: inline editing.
18958
- */
18959
- ClrStackInput,
18960
- ClrStackSelect,
18961
- /**
18962
- * End of undocumented experimental feature.
18963
- */
18964
17390
  ];
18965
17391
  class ClrStackViewModule {
18966
17392
  constructor() {
@@ -18973,22 +17399,12 @@ ClrStackViewModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", vers
18973
17399
  ClrStackBlock,
18974
17400
  ClrStackContentInput,
18975
17401
  ClrStackViewLabel,
18976
- ClrStackViewCustomTags,
18977
- /**
18978
- * Undocumented experimental feature: inline editing.
18979
- */
18980
- ClrStackInput,
18981
- ClrStackSelect], imports: [CommonModule, FormsModule, ClrIconModule, ClrExpandableAnimationModule], exports: [ClrStackView,
17402
+ ClrStackViewCustomTags], imports: [CommonModule, FormsModule, ClrIconModule, ClrExpandableAnimationModule], exports: [ClrStackView,
18982
17403
  ClrStackHeader,
18983
17404
  ClrStackBlock,
18984
17405
  ClrStackContentInput,
18985
17406
  ClrStackViewLabel,
18986
- ClrStackViewCustomTags,
18987
- /**
18988
- * Undocumented experimental feature: inline editing.
18989
- */
18990
- ClrStackInput,
18991
- ClrStackSelect] });
17407
+ ClrStackViewCustomTags] });
18992
17408
  ClrStackViewModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "15.0.2", ngImport: i0, type: ClrStackViewModule, imports: [CommonModule, FormsModule, ClrIconModule, ClrExpandableAnimationModule] });
18993
17409
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.2", ngImport: i0, type: ClrStackViewModule, decorators: [{
18994
17410
  type: NgModule,
@@ -19615,13 +18031,13 @@ const LVIEW_CONTEXT_INDEX = 8;
19615
18031
  // then those keys are sent together in one request.
19616
18032
  const TREE_TYPE_AHEAD_TIMEOUT = 200;
19617
18033
  class ClrTreeNode {
19618
- constructor(platformId, parent, forTypeAheadProvider, featuresService, expandService, commonStrings, focusManager, injector) {
18034
+ constructor(platformId, parent, featuresService, expandService, commonStrings, focusManager, elementRef, injector) {
19619
18035
  this.platformId = platformId;
19620
- this.forTypeAheadProvider = forTypeAheadProvider;
19621
18036
  this.featuresService = featuresService;
19622
18037
  this.expandService = expandService;
19623
18038
  this.commonStrings = commonStrings;
19624
18039
  this.focusManager = focusManager;
18040
+ this.elementRef = elementRef;
19625
18041
  this.STATES = ClrSelectedState;
19626
18042
  this.skipEmitChange = false;
19627
18043
  this.isModelLoading = false;
@@ -19701,6 +18117,9 @@ class ClrTreeNode {
19701
18117
  set expanded(value) {
19702
18118
  this.expandService.expanded = value;
19703
18119
  }
18120
+ set clrForTypeAhead(value) {
18121
+ this._model.textContent = trimAndLowerCase(value || this.elementRef.nativeElement.textContent);
18122
+ }
19704
18123
  ngOnInit() {
19705
18124
  this._model.expanded = this.expanded;
19706
18125
  this.subscriptions.push(this._model.selected.pipe(filter(() => !this.skipEmitChange)).subscribe(value => {
@@ -19720,13 +18139,15 @@ class ClrTreeNode {
19720
18139
  this.subscriptions.push(this._model.loading$.pipe(debounceTime(0)).subscribe(isLoading => (this.isModelLoading = isLoading)));
19721
18140
  }
19722
18141
  ngAfterContentInit() {
19723
- if (this.forTypeAheadProvider) {
19724
- this._model.textContent = this.forTypeAheadProvider.textContent;
19725
- this.subscriptions.push(this.typeAheadKeyEvent.pipe(debounceTime(TREE_TYPE_AHEAD_TIMEOUT)).subscribe((bufferedKeys) => {
19726
- this.focusManager.focusNodeStartsWith(bufferedKeys, this._model);
19727
- // reset once bufferedKeys are used
19728
- this.typeAheadKeyBuffer = '';
19729
- }));
18142
+ this.subscriptions.push(this.typeAheadKeyEvent.pipe(debounceTime(TREE_TYPE_AHEAD_TIMEOUT)).subscribe((bufferedKeys) => {
18143
+ this.focusManager.focusNodeStartsWith(bufferedKeys, this._model);
18144
+ // reset once bufferedKeys are used
18145
+ this.typeAheadKeyBuffer = '';
18146
+ }));
18147
+ }
18148
+ ngAfterViewInit() {
18149
+ if (!this._model.textContent) {
18150
+ this._model.textContent = trimAndLowerCase(this.elementRef.nativeElement.textContent);
19730
18151
  }
19731
18152
  }
19732
18153
  ngOnDestroy() {
@@ -19763,32 +18184,32 @@ class ClrTreeNode {
19763
18184
  // By default, pressing arrow key makes AT focus go into the nested content of the item.
19764
18185
  preventArrowKeyScroll(event);
19765
18186
  // https://www.w3.org/TR/wai-aria-practices-1.1/#keyboard-interaction-22
19766
- switch (keyValidator(event.key)) {
19767
- case KeyCodes.ArrowUp:
18187
+ switch (normalizeKey(event.key)) {
18188
+ case Keys.ArrowUp:
19768
18189
  this.focusManager.focusNodeAbove(this._model);
19769
18190
  break;
19770
- case KeyCodes.ArrowDown:
18191
+ case Keys.ArrowDown:
19771
18192
  this.focusManager.focusNodeBelow(this._model);
19772
18193
  break;
19773
- case KeyCodes.ArrowRight:
18194
+ case Keys.ArrowRight:
19774
18195
  this.expandOrFocusFirstChild();
19775
18196
  break;
19776
- case KeyCodes.ArrowLeft:
18197
+ case Keys.ArrowLeft:
19777
18198
  this.collapseOrFocusParent();
19778
18199
  break;
19779
- case KeyCodes.Home:
18200
+ case Keys.Home:
19780
18201
  event.preventDefault();
19781
18202
  this.focusManager.focusFirstVisibleNode();
19782
18203
  break;
19783
- case KeyCodes.End:
18204
+ case Keys.End:
19784
18205
  event.preventDefault();
19785
18206
  this.focusManager.focusLastVisibleNode();
19786
18207
  break;
19787
- case KeyCodes.Enter:
18208
+ case Keys.Enter:
19788
18209
  this.toggleExpandOrTriggerDefault();
19789
18210
  break;
19790
- case KeyCodes.Space:
19791
- case KeyCodes.Spacebar:
18211
+ case Keys.Space:
18212
+ case Keys.Spacebar:
19792
18213
  // to prevent scrolling on space key in this specific case
19793
18214
  event.preventDefault();
19794
18215
  this.toggleExpandOrTriggerDefault();
@@ -19849,8 +18270,8 @@ class ClrTreeNode {
19849
18270
  }
19850
18271
  }
19851
18272
  }
19852
- 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 });
19853
- 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: [
18273
+ 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 });
18274
+ 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\">\n <ng-container [ngTemplateOutlet]=\"treenodeContent\"></ng-container>\n </label>\n </div>\n <div class=\"clr-treenode-content\" (mousedown)=\"focusTreeNode()\" *ngIf=\"!featuresService.selectable\">\n <ng-container [ngTemplateOutlet]=\"treenodeContent\"></ng-container>\n </div>\n\n <ng-template #treenodeContent>\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 </ng-template>\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: i5.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: CdsIconCustomTag, selector: "cds-icon" }, { kind: "component", type: RecursiveChildren, selector: "clr-recursive-children", inputs: ["parent", "children"] }], animations: [
19854
18275
  trigger('toggleChildrenAnim', [
19855
18276
  transition('collapsed => expanded', [style({ height: 0 }), animate(200, style({ height: '*' }))]),
19856
18277
  transition('expanded => collapsed', [style({ height: '*' }), animate(200, style({ height: 0 }))]),
@@ -19869,7 +18290,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.2", ngImpor
19869
18290
  ]),
19870
18291
  ], host: {
19871
18292
  '[class.clr-tree-node]': 'true',
19872
- }, 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" }]
18293
+ }, 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\">\n <ng-container [ngTemplateOutlet]=\"treenodeContent\"></ng-container>\n </label>\n </div>\n <div class=\"clr-treenode-content\" (mousedown)=\"focusTreeNode()\" *ngIf=\"!featuresService.selectable\">\n <ng-container [ngTemplateOutlet]=\"treenodeContent\"></ng-container>\n </div>\n\n <ng-template #treenodeContent>\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 </ng-template>\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" }]
19873
18294
  }], ctorParameters: function () {
19874
18295
  return [{ type: undefined, decorators: [{
19875
18296
  type: Inject,
@@ -19878,11 +18299,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.2", ngImpor
19878
18299
  type: Optional
19879
18300
  }, {
19880
18301
  type: SkipSelf
19881
- }] }, { type: ForTypeAheadProvider, decorators: [{
19882
- type: Optional
19883
- }, {
19884
- type: Self
19885
- }] }, { type: TreeFeaturesService }, { type: IfExpandService }, { type: ClrCommonStringsService }, { type: TreeFocusManagerService }, { type: i0.Injector }];
18302
+ }] }, { type: TreeFeaturesService }, { type: IfExpandService }, { type: ClrCommonStringsService }, { type: TreeFocusManagerService }, { type: i0.ElementRef }, { type: i0.Injector }];
19886
18303
  }, propDecorators: { selected: [{
19887
18304
  type: Input,
19888
18305
  args: ['clrSelected']
@@ -19895,6 +18312,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.2", ngImpor
19895
18312
  }], expanded: [{
19896
18313
  type: Input,
19897
18314
  args: ['clrExpanded']
18315
+ }], clrForTypeAhead: [{
18316
+ type: Input,
18317
+ args: ['clrForTypeAhead']
19898
18318
  }], expandedChange: [{
19899
18319
  type: Output,
19900
18320
  args: ['clrExpandedChange']
@@ -19905,6 +18325,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.2", ngImpor
19905
18325
  type: ContentChildren,
19906
18326
  args: [ClrTreeNodeLink, { descendants: false }]
19907
18327
  }] } });
18328
+ function trimAndLowerCase(value) {
18329
+ return value.toLocaleLowerCase().trim();
18330
+ }
19908
18331
 
19909
18332
  /*
19910
18333
  * Copyright (c) 2016-2022 VMware, Inc. All Rights Reserved.
@@ -20157,10 +18580,10 @@ class DropdownFocusHandler {
20157
18580
  // whether root container or not, tab key should always toggle (i.e. close) the container
20158
18581
  this._unlistenFuncs.push(this.renderer.listen(el, 'keydown.tab', event => this.toggleService.toggleWithEvent(event)));
20159
18582
  if (this.parent) {
20160
- // if it's a nested container, pressing esc has the same effect as pressing left key, which closes the current
18583
+ // if it's a nested container, pressing escape has the same effect as pressing left key, which closes the current
20161
18584
  // popup and moves up to its parent. Here, we stop propagation so that the parent container
20162
- // doesn't receive the esc keydown
20163
- this._unlistenFuncs.push(this.renderer.listen(el, 'keydown.esc', event => {
18585
+ // doesn't receive the escape keydown
18586
+ this._unlistenFuncs.push(this.renderer.listen(el, 'keydown.escape', event => {
20164
18587
  this.focusService.move(ArrowKeyDirection.LEFT);
20165
18588
  event.stopPropagation();
20166
18589
  }));
@@ -20168,8 +18591,8 @@ class DropdownFocusHandler {
20168
18591
  else {
20169
18592
  // The root container is the only one we register to the focus service, others do not need focus
20170
18593
  this.focusService.registerContainer(el);
20171
- // The root container will simply close the container when esc key is pressed
20172
- this._unlistenFuncs.push(this.renderer.listen(el, 'keydown.esc', event => this.toggleService.toggleWithEvent(event)));
18594
+ // The root container will simply close the container when escape key is pressed
18595
+ this._unlistenFuncs.push(this.renderer.listen(el, 'keydown.escape', event => this.toggleService.toggleWithEvent(event)));
20173
18596
  // When the user moves focus outside of the menu, we close the dropdown
20174
18597
  this._unlistenFuncs.push(this.renderer.listen(el, 'blur', event => {
20175
18598
  // we clear out any existing focus on the items
@@ -20393,13 +18816,10 @@ const BASIC_FOCUSABLE_ITEM_PROVIDER = [
20393
18816
  * The full license information can be found in LICENSE in the root directory of this project.
20394
18817
  */
20395
18818
  class ClrDropdownItem {
20396
- constructor(dropdown, el, _dropdownService, renderer, focusableItem) {
18819
+ constructor(dropdown, _dropdownService, focusableItem) {
20397
18820
  this.dropdown = dropdown;
20398
- this.el = el;
20399
18821
  this._dropdownService = _dropdownService;
20400
- this.renderer = renderer;
20401
18822
  this.focusableItem = focusableItem;
20402
- this.setByDeprecatedDisabled = false;
20403
18823
  }
20404
18824
  set disabled(value) {
20405
18825
  // Empty string attribute evaluates to false but should disable the item, so we need to add a special case for it.
@@ -20408,17 +18828,6 @@ class ClrDropdownItem {
20408
18828
  get disabled() {
20409
18829
  return this.focusableItem.disabled;
20410
18830
  }
20411
- /*
20412
- * @deprecated since 3.0, remove in 4.0. the presence of this attribute makes it not-focusable in IE11. Use [clrDisabled] input instead.
20413
- */
20414
- set disabledDeprecated(value) {
20415
- // Empty string attribute evaluates to false but should disable the item, so we need to add a special case for it.
20416
- this.focusableItem.disabled = !!value || value === '';
20417
- this.setByDeprecatedDisabled = true;
20418
- }
20419
- get disabledDeprecated() {
20420
- return this.focusableItem.disabled;
20421
- }
20422
18831
  /**
20423
18832
  * Let you overwrite the focusable auto increment id.
20424
18833
  */
@@ -20428,22 +18837,28 @@ class ClrDropdownItem {
20428
18837
  get dropdownItemId() {
20429
18838
  return this.focusableItem.id;
20430
18839
  }
20431
- ngAfterViewInit() {
20432
- this.unlisten = this.renderer.listen(this.el.nativeElement, 'click', () => this.onDropdownItemClick());
20433
- }
20434
18840
  onDropdownItemClick() {
20435
- if (this.dropdown.isMenuClosable && !this.el.nativeElement.classList.contains('disabled')) {
20436
- this._dropdownService.closeMenus();
20437
- }
18841
+ // Ensure that the dropdown is closed after custom dropdown item click event handlers have run.
18842
+ setTimeout(() => {
18843
+ if (this.dropdown.isMenuClosable && !this.disabled) {
18844
+ this._dropdownService.closeMenus();
18845
+ }
18846
+ });
20438
18847
  }
20439
- ngOnDestroy() {
20440
- if (this.unlisten) {
20441
- this.unlisten();
18848
+ onSpaceKeydown($event) {
18849
+ this.stopImmediatePropagationIfDisabled($event);
18850
+ }
18851
+ onEnterKeydown($event) {
18852
+ this.stopImmediatePropagationIfDisabled($event);
18853
+ }
18854
+ stopImmediatePropagationIfDisabled($event) {
18855
+ if (this.disabled) {
18856
+ $event.stopImmediatePropagation();
20442
18857
  }
20443
18858
  }
20444
18859
  }
20445
- 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 });
20446
- 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 });
18860
+ 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 });
18861
+ 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 });
20447
18862
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.2", ngImport: i0, type: ClrDropdownItem, decorators: [{
20448
18863
  type: Directive,
20449
18864
  args: [{
@@ -20453,20 +18868,25 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.2", ngImpor
20453
18868
  '[class.dropdown-item]': 'true',
20454
18869
  '[attr.role]': '"menuitem"',
20455
18870
  '[attr.aria-disabled]': 'disabled',
20456
- '[attr.disabled]': "(disabled && setByDeprecatedDisabled)? '' : null",
20457
18871
  '[attr.id]': 'dropdownItemId',
20458
18872
  },
20459
18873
  providers: [BASIC_FOCUSABLE_ITEM_PROVIDER],
20460
18874
  }]
20461
- }], ctorParameters: function () { return [{ type: ClrDropdown }, { type: i0.ElementRef }, { type: RootDropdownService }, { type: i0.Renderer2 }, { type: FocusableItem }]; }, propDecorators: { disabled: [{
18875
+ }], ctorParameters: function () { return [{ type: ClrDropdown }, { type: RootDropdownService }, { type: FocusableItem }]; }, propDecorators: { disabled: [{
20462
18876
  type: Input,
20463
18877
  args: ['clrDisabled']
20464
- }], disabledDeprecated: [{
20465
- type: Input,
20466
- args: ['disabled']
20467
18878
  }], dropdownItemId: [{
20468
18879
  type: Input,
20469
18880
  args: ['id']
18881
+ }], onDropdownItemClick: [{
18882
+ type: HostListener,
18883
+ args: ['click']
18884
+ }], onSpaceKeydown: [{
18885
+ type: HostListener,
18886
+ args: ['keydown.space', ['$event']]
18887
+ }], onEnterKeydown: [{
18888
+ type: HostListener,
18889
+ args: ['keydown.enter', ['$event']]
20470
18890
  }] } });
20471
18891
 
20472
18892
  /*
@@ -20739,7 +19159,6 @@ class Popover {
20739
19159
  * This software is released under MIT license.
20740
19160
  * The full license information can be found in LICENSE in the root directory of this project.
20741
19161
  */
20742
- // Literally any annotation would work here, but writing our own @HoneyBadger annotation feels overkill.
20743
19162
  class AbstractPopover {
20744
19163
  constructor(injector, parentHost) {
20745
19164
  this.parentHost = parentHost;
@@ -20818,7 +19237,7 @@ class AbstractPopover {
20818
19237
  this.ngZone.runOutsideAngular(() => {
20819
19238
  this.documentESCListener = this.renderer.listen('document', 'keydown', event => {
20820
19239
  if (event && event.key) {
20821
- if (event.key === 'Escape' || event.key === 'Esc') {
19240
+ if (normalizeKey(event.key) === Keys.Escape) {
20822
19241
  this.ngZone.run(() => {
20823
19242
  this.toggleService.open = false;
20824
19243
  this.ref.markForCheck();
@@ -21971,143 +20390,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.2", ngImpor
21971
20390
  }]
21972
20391
  }], ctorParameters: function () { return [{ type: ResponsiveNavigationService }, { type: ClrCommonStringsService }]; } });
21973
20392
 
21974
- /*
21975
- * Copyright (c) 2016-2022 VMware, Inc. All Rights Reserved.
21976
- * This software is released under MIT license.
21977
- * The full license information can be found in LICENSE in the root directory of this project.
21978
- */
21979
- function refocusIfOutsideFocusTrapElement(focusedElement, focusTrapElement, elementToRefocus) {
21980
- const focusTrapIsCurrent = FocusTrapTrackerService.getCurrent() === focusTrapElement;
21981
- const elementToFocusIsOutsideFocusTrap = elementIsOutsideFocusTrapElement(focusedElement, focusTrapElement);
21982
- if (focusTrapIsCurrent && elementToFocusIsOutsideFocusTrap) {
21983
- elementToRefocus = elementToRefocus || focusTrapElement;
21984
- elementToRefocus.focus();
21985
- }
21986
- else {
21987
- focusedElement.focus();
21988
- }
21989
- }
21990
- function elementIsOutsideFocusTrapElement(focusedElement, focusTrapElement) {
21991
- if (focusedElement === focusTrapElement.topReboundElement ||
21992
- focusedElement === focusTrapElement.bottomReboundElement) {
21993
- return true;
21994
- }
21995
- const elementIsInFocusTrapLightDom = focusTrapElement.contains(focusedElement);
21996
- if (elementIsInFocusTrapLightDom) {
21997
- return false;
21998
- }
21999
- if (focusTrapElement !== null && focusTrapElement.contains(focusedElement)) {
22000
- return false;
22001
- }
22002
- return true;
22003
- }
22004
- function createFocusTrapReboundElement(document) {
22005
- const offScreenSpan = document.createElement('span');
22006
- offScreenSpan.setAttribute('tabindex', '0');
22007
- offScreenSpan.classList.add('offscreen-focus-rebounder');
22008
- return offScreenSpan;
22009
- }
22010
- function addReboundElementsToFocusTrapElement(document, focusTrapElement) {
22011
- if (focusTrapElement && !focusTrapElement.topReboundElement && !focusTrapElement.bottomReboundElement) {
22012
- focusTrapElement.topReboundElement = createFocusTrapReboundElement(document);
22013
- focusTrapElement.bottomReboundElement = createFocusTrapReboundElement(document);
22014
- const parent = focusTrapElement.parentElement;
22015
- const sibling = focusTrapElement.nextSibling;
22016
- if (parent) {
22017
- parent.insertBefore(focusTrapElement.topReboundElement, focusTrapElement);
22018
- if (sibling) {
22019
- parent.insertBefore(focusTrapElement.bottomReboundElement, sibling);
22020
- }
22021
- else {
22022
- parent.appendChild(focusTrapElement.bottomReboundElement);
22023
- }
22024
- }
22025
- }
22026
- }
22027
- function removeReboundElementsFromFocusTrapElement(focusTrapElement) {
22028
- if (focusTrapElement) {
22029
- const parent = focusTrapElement.parentElement;
22030
- if (parent) {
22031
- const topRebound = focusTrapElement.topReboundElement;
22032
- const bottomRebound = focusTrapElement.bottomReboundElement;
22033
- if (topRebound) {
22034
- parent.removeChild(topRebound);
22035
- }
22036
- if (bottomRebound) {
22037
- parent.removeChild(bottomRebound);
22038
- }
22039
- }
22040
- // These are here to to make sure that we completely delete all traces of the removed DOM objects.
22041
- delete focusTrapElement.topReboundElement;
22042
- delete focusTrapElement.bottomReboundElement;
22043
- }
22044
- }
22045
- // this helper exists to enable the focus trap class to handle vanilla html elements
22046
- // it's primary concern is to keep TS happy.
22047
- function castHtmlElementToFocusTrapElement(el) {
22048
- return el;
22049
- }
22050
- class FocusTrap {
22051
- constructor(renderer, injector, platformId, hostElement) {
22052
- this.renderer = renderer;
22053
- this.active = false;
22054
- if (isPlatformBrowser(platformId)) {
22055
- this._document = injector.get(DOCUMENT);
22056
- }
22057
- hostElement = castHtmlElementToFocusTrapElement(hostElement);
22058
- if (!hostElement.focusTrapId) {
22059
- hostElement.focusTrapId = createId();
22060
- }
22061
- this.focusTrapElement = hostElement;
22062
- }
22063
- enableFocusTrap() {
22064
- const fte = this.focusTrapElement;
22065
- const firstFocusElement = fte.querySelector('[cds-first-focus]');
22066
- const activeEl = this._document.activeElement;
22067
- if (FocusTrapTrackerService.getCurrent() === fte) {
22068
- throw new Error('Focus trap is already enabled for this instance.');
22069
- }
22070
- this.firstFocusElement = firstFocusElement || this.focusTrapElement;
22071
- addReboundElementsToFocusTrapElement(this._document, fte);
22072
- if (!isFocusable(fte)) {
22073
- fte.setAttribute('tabindex', '-1');
22074
- }
22075
- if (activeEl && isHTMLElement(activeEl)) {
22076
- this.previousFocus = activeEl;
22077
- }
22078
- FocusTrapTrackerService.setCurrent(fte);
22079
- // setTimeout here is required for Safari which may try to set focus on
22080
- // element before it is visible...
22081
- const focusTimer = setTimeout(() => {
22082
- this.firstFocusElement.focus();
22083
- clearTimeout(focusTimer);
22084
- }, 10);
22085
- this.onFocusInEvent = this.onFocusIn.bind(this);
22086
- this.unlisten = this.renderer.listen(this._document, 'focusin', this.onFocusInEvent);
22087
- this.active = true;
22088
- }
22089
- removeFocusTrap() {
22090
- if (this.unlisten) {
22091
- this.unlisten();
22092
- }
22093
- removeReboundElementsFromFocusTrapElement(this.focusTrapElement);
22094
- this.renderer.removeAttribute(this.focusTrapElement, 'tabindex');
22095
- FocusTrapTrackerService.activatePreviousCurrent();
22096
- this.active = false;
22097
- if (this.previousFocus) {
22098
- this.previousFocus.focus();
22099
- }
22100
- }
22101
- onFocusIn(event) {
22102
- refocusIfOutsideFocusTrapElement(event.composedPath()[0], this.focusTrapElement, this.firstFocusElement);
22103
- }
22104
- }
22105
- FocusTrap.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.0.2", ngImport: i0, type: FocusTrap, deps: "invalid", target: i0.ɵɵFactoryTarget.Injectable });
22106
- FocusTrap.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.0.2", ngImport: i0, type: FocusTrap });
22107
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.2", ngImport: i0, type: FocusTrap, decorators: [{
22108
- type: Injectable
22109
- }], ctorParameters: function () { return [{ type: i0.Renderer2 }, { type: i0.Injector }, { type: undefined }, { type: undefined }]; } });
22110
-
22111
20393
  /*
22112
20394
  * Copyright (c) 2016-2022 VMware, Inc. All Rights Reserved.
22113
20395
  * This software is released under MIT license.
@@ -22126,11 +20408,22 @@ const createCdsCloseButton = (document, ariaLabel) => {
22126
20408
  cdsCloseButton.className = 'clr-nav-close';
22127
20409
  return cdsCloseButton;
22128
20410
  };
22129
- class ClrNavLevel extends FocusTrap {
22130
- constructor(platformId, responsiveNavService, elementRef, renderer, injector) {
22131
- super(renderer, injector, platformId, elementRef.nativeElement);
20411
+ class StandaloneCdkTrapFocus extends CdkTrapFocus {
20412
+ }
20413
+ StandaloneCdkTrapFocus.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.0.2", ngImport: i0, type: StandaloneCdkTrapFocus, deps: null, target: i0.ɵɵFactoryTarget.Directive });
20414
+ StandaloneCdkTrapFocus.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "15.0.2", type: StandaloneCdkTrapFocus, isStandalone: true, usesInheritance: true, ngImport: i0 });
20415
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.2", ngImport: i0, type: StandaloneCdkTrapFocus, decorators: [{
20416
+ type: Directive,
20417
+ args: [{
20418
+ standalone: true,
20419
+ }]
20420
+ }] });
20421
+ class ClrNavLevel {
20422
+ constructor(platformId, cdkTrapFocus, responsiveNavService, elementRef, renderer, injector) {
20423
+ this.cdkTrapFocus = cdkTrapFocus;
22132
20424
  this.responsiveNavService = responsiveNavService;
22133
20425
  this.elementRef = elementRef;
20426
+ this.renderer = renderer;
22134
20427
  this._isOpen = false;
22135
20428
  if (isPlatformBrowser(platformId)) {
22136
20429
  this._document = injector.get(DOCUMENT);
@@ -22150,6 +20443,7 @@ class ClrNavLevel extends FocusTrap {
22150
20443
  .subscribe(() => this.close()));
22151
20444
  }
22152
20445
  ngOnInit() {
20446
+ this.cdkTrapFocus.enabled = false;
22153
20447
  if (!this.closeButtonAriaLabel) {
22154
20448
  this.closeButtonAriaLabel =
22155
20449
  this._level === ResponsiveNavCodes.NAV_LEVEL_1
@@ -22207,14 +20501,14 @@ class ClrNavLevel extends FocusTrap {
22207
20501
  open() {
22208
20502
  this._isOpen = true;
22209
20503
  this.showNavigation();
22210
- this.enableFocusTrap();
20504
+ this.cdkTrapFocus.enabled = true;
22211
20505
  this.showCloseButton();
22212
20506
  this.responsiveNavService.sendControlMessage(ResponsiveNavCodes.NAV_OPEN, this.level);
22213
20507
  }
22214
20508
  close() {
22215
20509
  this._isOpen = false;
22216
20510
  this.hideNavigation();
22217
- this.removeFocusTrap();
20511
+ this.cdkTrapFocus.enabled = false;
22218
20512
  this.hideCloseButton();
22219
20513
  this.responsiveNavService.sendControlMessage(ResponsiveNavCodes.NAV_CLOSE, this.level);
22220
20514
  }
@@ -22259,18 +20553,19 @@ class ClrNavLevel extends FocusTrap {
22259
20553
  this._subscription.unsubscribe();
22260
20554
  }
22261
20555
  }
22262
- 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 });
22263
- 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 });
20556
+ 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 });
20557
+ 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 });
22264
20558
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.2", ngImport: i0, type: ClrNavLevel, decorators: [{
22265
20559
  type: Directive,
22266
20560
  args: [{
22267
20561
  selector: '[clr-nav-level]',
20562
+ hostDirectives: [StandaloneCdkTrapFocus],
22268
20563
  }]
22269
20564
  }], ctorParameters: function () {
22270
20565
  return [{ type: undefined, decorators: [{
22271
20566
  type: Inject,
22272
20567
  args: [PLATFORM_ID]
22273
- }] }, { type: ResponsiveNavigationService }, { type: i0.ElementRef }, { type: i0.Renderer2 }, { type: i0.Injector }];
20568
+ }] }, { type: StandaloneCdkTrapFocus }, { type: ResponsiveNavigationService }, { type: i0.ElementRef }, { type: i0.Renderer2 }, { type: i0.Injector }];
22274
20569
  }, propDecorators: { _level: [{
22275
20570
  type: Input,
22276
20571
  args: ['clr-nav-level']
@@ -22922,7 +21217,7 @@ ClrTabs.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.0
22922
21217
  <!--tab links in overflow menu-->
22923
21218
  <clr-tab-overflow-content
22924
21219
  *ngIf="toggleService.open"
22925
- (document:keydown.esc)="closeOnEscapeKey()"
21220
+ (document:keydown.escape)="closeOnEscapeKey()"
22926
21221
  (document:click)="closeOnOutsideClick($event, tabOverflowTrigger)"
22927
21222
  (focusout)="closeOnFocusOut($event)"
22928
21223
  >
@@ -22986,7 +21281,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.2", ngImpor
22986
21281
  <!--tab links in overflow menu-->
22987
21282
  <clr-tab-overflow-content
22988
21283
  *ngIf="toggleService.open"
22989
- (document:keydown.esc)="closeOnEscapeKey()"
21284
+ (document:keydown.escape)="closeOnEscapeKey()"
22990
21285
  (document:click)="closeOnOutsideClick($event, tabOverflowTrigger)"
22991
21286
  (focusout)="closeOnFocusOut($event)"
22992
21287
  >
@@ -23275,7 +21570,6 @@ class ClrVerticalNavGroup {
23275
21570
  this._navService = _navService;
23276
21571
  this.commonStrings = commonStrings;
23277
21572
  this.wasExpanded = false;
23278
- this.groupLabel = this.commonStrings.keys.verticalNavGroupToggle;
23279
21573
  this.expandedChange = new EventEmitter(true);
23280
21574
  this._subscriptions = [];
23281
21575
  this._expandAnimationState = COLLAPSED_STATE;
@@ -23385,7 +21679,7 @@ class ClrVerticalNavGroup {
23385
21679
  }
23386
21680
  }
23387
21681
  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 });
23388
- 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: [
21682
+ 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: [
23389
21683
  trigger('clrExpand', [
23390
21684
  state(EXPANDED_STATE, style({ height: '*' })),
23391
21685
  state(COLLAPSED_STATE, style({ height: 0, visibility: 'hidden' })),
@@ -23400,13 +21694,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.2", ngImpor
23400
21694
  state(COLLAPSED_STATE, style({ height: 0, visibility: 'hidden' })),
23401
21695
  transition(`${EXPANDED_STATE} <=> ${COLLAPSED_STATE}`, animate('0.2s ease-in-out')),
23402
21696
  ]),
23403
- ], 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" }]
21697
+ ], 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" }]
23404
21698
  }], ctorParameters: function () { return [{ type: IfExpandService }, { type: VerticalNavGroupRegistrationService }, { type: VerticalNavGroupService }, { type: VerticalNavService }, { type: ClrCommonStringsService }]; }, propDecorators: { expanded: [{
23405
21699
  type: HostBinding,
23406
21700
  args: ['class.is-expanded']
23407
- }], groupLabel: [{
23408
- type: Input,
23409
- args: ['clrVerticalNavGroupLabel']
23410
21701
  }], userExpandedInput: [{
23411
21702
  type: Input,
23412
21703
  args: ['clrVerticalNavGroupExpanded']
@@ -23605,15 +21896,13 @@ class ClrModal {
23605
21896
  this.closeButtonAriaLabel = this.commonStrings.keys.close;
23606
21897
  this.staticBackdrop = true;
23607
21898
  this.skipAnimation = 'false';
23608
- // presently this is only used by wizards
23609
- this.bypassScrollService = false;
23610
21899
  this.stopClose = false;
23611
21900
  this.altClose = new EventEmitter(false);
23612
21901
  this.labelledBy = this.modalId;
23613
21902
  }
23614
21903
  // Detect when _open is set to true and set no-scrolling to true
23615
21904
  ngOnChanges(changes) {
23616
- if (!this.bypassScrollService && changes && Object.prototype.hasOwnProperty.call(changes, '_open')) {
21905
+ if (changes && Object.prototype.hasOwnProperty.call(changes, '_open')) {
23617
21906
  if (changes._open.currentValue) {
23618
21907
  this._scrollingService.stopScrolling();
23619
21908
  }
@@ -23641,8 +21930,6 @@ class ClrModal {
23641
21930
  return;
23642
21931
  }
23643
21932
  this._open = false;
23644
- // SPECME
23645
- this.focusTrap.setPreviousFocus(); // Handles moving focus back to the element that had it before.
23646
21933
  }
23647
21934
  fadeDone(e) {
23648
21935
  if (e.toState === 'void') {
@@ -23652,7 +21939,7 @@ class ClrModal {
23652
21939
  }
23653
21940
  }
23654
21941
  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 });
23655
- 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: [
21942
+ 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 [cdkTrapFocusAutoCapture]=\"true\" 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: [
23656
21943
  trigger('fadeDown', [
23657
21944
  transition('* => false', [style({ opacity: 0, transform: 'translate(0, -25%)' }), animate('0.2s ease-in-out')]),
23658
21945
  transition('false => *', [animate('0.2s ease-in-out', style({ opacity: 0, transform: 'translate(0, -25%)' }))]),
@@ -23673,11 +21960,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.2", ngImpor
23673
21960
  transition('void => *', [style({ opacity: 0 }), animate('0.2s ease-in-out', style({ opacity: 0.85 }))]),
23674
21961
  transition('* => void', [animate('0.2s ease-in-out', style({ opacity: 0 }))]),
23675
21962
  ]),
23676
- ], 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"] }]
23677
- }], ctorParameters: function () { return [{ type: ScrollingService }, { type: ClrCommonStringsService }]; }, propDecorators: { focusTrap: [{
23678
- type: ViewChild,
23679
- args: [FocusTrapDirective]
23680
- }], _open: [{
21963
+ ], 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 [cdkTrapFocusAutoCapture]=\"true\" 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"] }]
21964
+ }], ctorParameters: function () { return [{ type: ScrollingService }, { type: ClrCommonStringsService }]; }, propDecorators: { _open: [{
23681
21965
  type: HostBinding,
23682
21966
  args: ['class.open']
23683
21967
  }, {
@@ -23701,9 +21985,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.2", ngImpor
23701
21985
  }], skipAnimation: [{
23702
21986
  type: Input,
23703
21987
  args: ['clrModalSkipAnimation']
23704
- }], bypassScrollService: [{
23705
- type: Input,
23706
- args: ['clrModalOverrideScrollService']
23707
21988
  }], stopClose: [{
23708
21989
  type: Input,
23709
21990
  args: ['clrModalPreventClose']
@@ -23792,12 +22073,12 @@ class ClrModalModule {
23792
22073
  }
23793
22074
  }
23794
22075
  ClrModalModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.0.2", ngImport: i0, type: ClrModalModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
23795
- 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] });
23796
- ClrModalModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "15.0.2", ngImport: i0, type: ClrModalModule, imports: [CommonModule, ClrIconModule, ClrFocusTrapModule, ClrFocusOnViewInitModule, ClrIconModule, ClrFocusOnViewInitModule] });
22076
+ 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] });
22077
+ ClrModalModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "15.0.2", ngImport: i0, type: ClrModalModule, imports: [CommonModule, CdkTrapFocusModule, ClrIconModule, ClrFocusOnViewInitModule, ClrIconModule, ClrFocusOnViewInitModule] });
23797
22078
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.2", ngImport: i0, type: ClrModalModule, decorators: [{
23798
22079
  type: NgModule,
23799
22080
  args: [{
23800
- imports: [CommonModule, ClrIconModule, ClrFocusTrapModule, ClrFocusOnViewInitModule],
22081
+ imports: [CommonModule, CdkTrapFocusModule, ClrIconModule, ClrFocusOnViewInitModule],
23801
22082
  declarations: [CLR_MODAL_DIRECTIVES],
23802
22083
  exports: [CLR_MODAL_DIRECTIVES, ClrIconModule, ClrFocusOnViewInitModule],
23803
22084
  }]
@@ -24034,6 +22315,46 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.2", ngImpor
24034
22315
  type: Injectable
24035
22316
  }] });
24036
22317
 
22318
+ /*
22319
+ * Copyright (c) 2016-2022 VMware, Inc. All Rights Reserved.
22320
+ * This software is released under MIT license.
22321
+ * The full license information can be found in LICENSE in the root directory of this project.
22322
+ */
22323
+ class TooltipMouseService {
22324
+ constructor(toggleService) {
22325
+ this.toggleService = toggleService;
22326
+ }
22327
+ onMouseEnterTrigger() {
22328
+ this.mouseOverTrigger = true;
22329
+ this.toggleService.open = true;
22330
+ }
22331
+ onMouseLeaveTrigger() {
22332
+ this.mouseOverTrigger = false;
22333
+ this.hideIfMouseOut();
22334
+ }
22335
+ onMouseEnterContent() {
22336
+ this.mouseOverContent = true;
22337
+ }
22338
+ onMouseLeaveContent() {
22339
+ this.mouseOverContent = false;
22340
+ this.hideIfMouseOut();
22341
+ }
22342
+ hideIfMouseOut() {
22343
+ // A zero timeout is used so that the code has a chance to update
22344
+ // the `mouseOverContent` property after the user moves the mouse from the trigger to the content.
22345
+ setTimeout(() => {
22346
+ if (!this.mouseOverTrigger && !this.mouseOverContent) {
22347
+ this.toggleService.open = false;
22348
+ }
22349
+ }, 0);
22350
+ }
22351
+ }
22352
+ TooltipMouseService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.0.2", ngImport: i0, type: TooltipMouseService, deps: [{ token: ClrPopoverToggleService }], target: i0.ɵɵFactoryTarget.Injectable });
22353
+ TooltipMouseService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.0.2", ngImport: i0, type: TooltipMouseService });
22354
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.2", ngImport: i0, type: TooltipMouseService, decorators: [{
22355
+ type: Injectable
22356
+ }], ctorParameters: function () { return [{ type: ClrPopoverToggleService }]; } });
22357
+
24037
22358
  /*
24038
22359
  * Copyright (c) 2016-2022 VMware, Inc. All Rights Reserved.
24039
22360
  * This software is released under MIT license.
@@ -24042,7 +22363,12 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.2", ngImpor
24042
22363
  class ClrTooltip {
24043
22364
  }
24044
22365
  ClrTooltip.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.0.2", ngImport: i0, type: ClrTooltip, deps: [], target: i0.ɵɵFactoryTarget.Component });
24045
- ClrTooltip.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.0.2", type: ClrTooltip, selector: "clr-tooltip", host: { properties: { "class.tooltip": "true" } }, providers: [ClrPopoverToggleService, { provide: POPOVER_HOST_ANCHOR, useExisting: ElementRef }, TooltipIdService], ngImport: i0, template: `<ng-content></ng-content>`, isInline: true });
22366
+ ClrTooltip.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.0.2", type: ClrTooltip, selector: "clr-tooltip", host: { properties: { "class.tooltip": "true" } }, providers: [
22367
+ ClrPopoverToggleService,
22368
+ { provide: POPOVER_HOST_ANCHOR, useExisting: ElementRef },
22369
+ TooltipIdService,
22370
+ TooltipMouseService,
22371
+ ], ngImport: i0, template: `<ng-content></ng-content>`, isInline: true });
24046
22372
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.2", ngImport: i0, type: ClrTooltip, decorators: [{
24047
22373
  type: Component,
24048
22374
  args: [{
@@ -24051,7 +22377,12 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.2", ngImpor
24051
22377
  host: {
24052
22378
  '[class.tooltip]': 'true',
24053
22379
  },
24054
- providers: [ClrPopoverToggleService, { provide: POPOVER_HOST_ANCHOR, useExisting: ElementRef }, TooltipIdService],
22380
+ providers: [
22381
+ ClrPopoverToggleService,
22382
+ { provide: POPOVER_HOST_ANCHOR, useExisting: ElementRef },
22383
+ TooltipIdService,
22384
+ TooltipMouseService,
22385
+ ],
24055
22386
  }]
24056
22387
  }] });
24057
22388
 
@@ -24074,9 +22405,10 @@ const SIZES = ['xs', 'sm', 'md', 'lg'];
24074
22405
  const defaultPosition = 'right';
24075
22406
  const defaultSize = 'sm';
24076
22407
  class ClrTooltipContent extends AbstractPopover {
24077
- constructor(injector, parentHost, tooltipIdService) {
22408
+ constructor(injector, parentHost, tooltipIdService, tooltipMouseService) {
24078
22409
  super(injector, parentHost);
24079
22410
  this.tooltipIdService = tooltipIdService;
22411
+ this.tooltipMouseService = tooltipMouseService;
24080
22412
  if (!parentHost) {
24081
22413
  throw new Error('clr-tooltip-content should only be used inside of a clr-tooltip');
24082
22414
  }
@@ -24142,13 +22474,19 @@ class ClrTooltipContent extends AbstractPopover {
24142
22474
  this.size = this.size || defaultSize;
24143
22475
  this.position = this.position || defaultPosition;
24144
22476
  }
22477
+ onMouseEnter() {
22478
+ this.tooltipMouseService.onMouseEnterContent();
22479
+ }
22480
+ onMouseLeave() {
22481
+ this.tooltipMouseService.onMouseLeaveContent();
22482
+ }
24145
22483
  updateCssClass({ oldClass, newClass }) {
24146
22484
  this.renderer.removeClass(this.el.nativeElement, oldClass);
24147
22485
  this.renderer.addClass(this.el.nativeElement, newClass);
24148
22486
  }
24149
22487
  }
24150
- ClrTooltipContent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.0.2", ngImport: i0, type: ClrTooltipContent, deps: [{ token: i0.Injector }, { token: POPOVER_HOST_ANCHOR, optional: true }, { token: TooltipIdService }], target: i0.ɵɵFactoryTarget.Component });
24151
- ClrTooltipContent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.0.2", type: ClrTooltipContent, selector: "clr-tooltip-content", inputs: { id: "id", position: ["clrPosition", "position"], size: ["clrSize", "size"] }, host: { properties: { "class.tooltip-content": "true", "style.opacity": "1", "attr.role": "\"tooltip\"", "id": "id" } }, usesInheritance: true, ngImport: i0, template: `<ng-content></ng-content>`, isInline: true });
22488
+ ClrTooltipContent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.0.2", ngImport: i0, type: ClrTooltipContent, deps: [{ token: i0.Injector }, { token: POPOVER_HOST_ANCHOR, optional: true }, { token: TooltipIdService }, { token: TooltipMouseService }], target: i0.ɵɵFactoryTarget.Component });
22489
+ ClrTooltipContent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.0.2", type: ClrTooltipContent, selector: "clr-tooltip-content", inputs: { id: "id", position: ["clrPosition", "position"], size: ["clrSize", "size"] }, host: { listeners: { "mouseenter": "onMouseEnter()", "mouseleave": "onMouseLeave()" }, properties: { "class.tooltip-content": "true", "style.opacity": "1", "attr.role": "\"tooltip\"", "id": "id" } }, usesInheritance: true, ngImport: i0, template: `<ng-content></ng-content>`, isInline: true });
24152
22490
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.2", ngImport: i0, type: ClrTooltipContent, decorators: [{
24153
22491
  type: Component,
24154
22492
  args: [{
@@ -24167,7 +22505,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.2", ngImpor
24167
22505
  }, {
24168
22506
  type: Inject,
24169
22507
  args: [POPOVER_HOST_ANCHOR]
24170
- }] }, { type: TooltipIdService }];
22508
+ }] }, { type: TooltipIdService }, { type: TooltipMouseService }];
24171
22509
  }, propDecorators: { id: [{
24172
22510
  type: Input
24173
22511
  }], position: [{
@@ -24176,6 +22514,12 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.2", ngImpor
24176
22514
  }], size: [{
24177
22515
  type: Input,
24178
22516
  args: ['clrSize']
22517
+ }], onMouseEnter: [{
22518
+ type: HostListener,
22519
+ args: ['mouseenter']
22520
+ }], onMouseLeave: [{
22521
+ type: HostListener,
22522
+ args: ['mouseleave']
24179
22523
  }] } });
24180
22524
 
24181
22525
  /*
@@ -24184,25 +22528,32 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.2", ngImpor
24184
22528
  * The full license information can be found in LICENSE in the root directory of this project.
24185
22529
  */
24186
22530
  class ClrTooltipTrigger {
24187
- constructor(toggleService, tooltipIdService) {
22531
+ constructor(toggleService, tooltipIdService, tooltipMouseService) {
24188
22532
  this.toggleService = toggleService;
24189
22533
  this.tooltipIdService = tooltipIdService;
22534
+ this.tooltipMouseService = tooltipMouseService;
24190
22535
  this.subs = [];
24191
22536
  // The aria-described by comes from the id of content. It
24192
22537
  this.subs.push(this.tooltipIdService.id.subscribe(tooltipId => (this.ariaDescribedBy = tooltipId)));
24193
22538
  }
22539
+ ngOnDestroy() {
22540
+ this.subs.forEach(sub => sub.unsubscribe());
22541
+ }
24194
22542
  showTooltip() {
24195
22543
  this.toggleService.open = true;
24196
22544
  }
24197
22545
  hideTooltip() {
24198
22546
  this.toggleService.open = false;
24199
22547
  }
24200
- ngOnDestroy() {
24201
- this.subs.forEach(sub => sub.unsubscribe());
22548
+ onMouseEnter() {
22549
+ this.tooltipMouseService.onMouseEnterTrigger();
22550
+ }
22551
+ onMouseLeave() {
22552
+ this.tooltipMouseService.onMouseLeaveTrigger();
24202
22553
  }
24203
22554
  }
24204
- ClrTooltipTrigger.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.0.2", ngImport: i0, type: ClrTooltipTrigger, deps: [{ token: ClrPopoverToggleService }, { token: TooltipIdService }], target: i0.ɵɵFactoryTarget.Directive });
24205
- ClrTooltipTrigger.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "15.0.2", type: ClrTooltipTrigger, selector: "[clrTooltipTrigger]", host: { attributes: { "tabindex": "0" }, listeners: { "mouseenter": "showTooltip()", "focus": "showTooltip()", "mouseleave": "hideTooltip()", "blur": "hideTooltip()" }, properties: { "class.tooltip-trigger": "true", "attr.aria-describedby": "ariaDescribedBy", "attr.role": "\"button\"" } }, ngImport: i0 });
22555
+ ClrTooltipTrigger.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.0.2", ngImport: i0, type: ClrTooltipTrigger, deps: [{ token: ClrPopoverToggleService }, { token: TooltipIdService }, { token: TooltipMouseService }], target: i0.ɵɵFactoryTarget.Directive });
22556
+ ClrTooltipTrigger.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "15.0.2", type: ClrTooltipTrigger, selector: "[clrTooltipTrigger]", host: { attributes: { "tabindex": "0" }, listeners: { "focus": "showTooltip()", "blur": "hideTooltip()", "mouseenter": "onMouseEnter()", "mouseleave": "onMouseLeave()" }, properties: { "class.tooltip-trigger": "true", "attr.aria-describedby": "ariaDescribedBy", "attr.role": "\"button\"" } }, ngImport: i0 });
24206
22557
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.2", ngImport: i0, type: ClrTooltipTrigger, decorators: [{
24207
22558
  type: Directive,
24208
22559
  args: [{
@@ -24214,18 +22565,18 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.2", ngImpor
24214
22565
  '[attr.role]': '"button"',
24215
22566
  },
24216
22567
  }]
24217
- }], ctorParameters: function () { return [{ type: ClrPopoverToggleService }, { type: TooltipIdService }]; }, propDecorators: { showTooltip: [{
24218
- type: HostListener,
24219
- args: ['mouseenter']
24220
- }, {
22568
+ }], ctorParameters: function () { return [{ type: ClrPopoverToggleService }, { type: TooltipIdService }, { type: TooltipMouseService }]; }, propDecorators: { showTooltip: [{
24221
22569
  type: HostListener,
24222
22570
  args: ['focus']
24223
22571
  }], hideTooltip: [{
24224
- type: HostListener,
24225
- args: ['mouseleave']
24226
- }, {
24227
22572
  type: HostListener,
24228
22573
  args: ['blur']
22574
+ }], onMouseEnter: [{
22575
+ type: HostListener,
22576
+ args: ['mouseenter']
22577
+ }], onMouseLeave: [{
22578
+ type: HostListener,
22579
+ args: ['mouseleave']
24229
22580
  }] } });
24230
22581
 
24231
22582
  /*
@@ -26767,13 +25118,12 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.2", ngImpor
26767
25118
  * The full license information can be found in LICENSE in the root directory of this project.
26768
25119
  */
26769
25120
  class ClrWizard {
26770
- constructor(platformId, navService, pageCollection, buttonService, headerActionService, elementRef, differs) {
25121
+ constructor(platformId, navService, pageCollection, buttonService, headerActionService, differs) {
26771
25122
  this.platformId = platformId;
26772
25123
  this.navService = navService;
26773
25124
  this.pageCollection = pageCollection;
26774
25125
  this.buttonService = buttonService;
26775
25126
  this.headerActionService = headerActionService;
26776
- this.elementRef = elementRef;
26777
25127
  /**
26778
25128
  * Set the modal size of the wizard. Set using `[clrWizardSize]` input.
26779
25129
  */
@@ -26789,13 +25139,6 @@ class ClrWizard {
26789
25139
  this._stopCancel = false;
26790
25140
  this._stopNavigation = false;
26791
25141
  this._disableStepnav = false;
26792
- /**
26793
- * Used to communicate to the underlying modal that animations are not
26794
- * wanted. Primary use is for the display of static/inline wizards.
26795
- * Set using `[clrWizardPreventModalAnimation]` input.
26796
- */
26797
- /** @deprecated since 3.0, input should be removed in 4.0 because is only related to inline wizards */
26798
- this._stopModalAnimations = false;
26799
25142
  /**
26800
25143
  * Emits when the wizard is opened or closed.
26801
25144
  * Listen via `(clrWizardOpenChange)` event.
@@ -26916,9 +25259,6 @@ class ClrWizard {
26916
25259
  get disableStepnav() {
26917
25260
  return this._disableStepnav;
26918
25261
  }
26919
- get stopModalAnimations() {
26920
- return this._stopModalAnimations ? 'true' : 'false';
26921
- }
26922
25262
  get currentPage() {
26923
25263
  return this.navService.currentPage;
26924
25264
  }
@@ -26931,13 +25271,9 @@ class ClrWizard {
26931
25271
  get isFirst() {
26932
25272
  return this.navService.currentPageIsFirst;
26933
25273
  }
26934
- get isStatic() {
26935
- return this.elementRef.nativeElement.classList.contains('clr-wizard--inline');
26936
- }
26937
25274
  ngAfterContentInit() {
26938
25275
  this.pageCollection.pages = this.pages;
26939
25276
  this.headerActionService.wizardHeaderActions = this.headerActions;
26940
- this.initializeButtons();
26941
25277
  }
26942
25278
  ngDoCheck() {
26943
25279
  this.updateNavOnPageChanges();
@@ -27142,12 +25478,6 @@ class ClrWizard {
27142
25478
  changes.forEachRemovedItem(() => this.navService.updateNavigation());
27143
25479
  }
27144
25480
  }
27145
- initializeButtons() {
27146
- // Only trigger buttons ready if default is open (inlined)
27147
- if (this._open) {
27148
- this.buttonService.buttonsReady = true;
27149
- }
27150
- }
27151
25481
  emitWizardFinished() {
27152
25482
  if (!this.stopNext) {
27153
25483
  this.forceFinish();
@@ -27155,8 +25485,8 @@ class ClrWizard {
27155
25485
  this.wizardFinished.emit();
27156
25486
  }
27157
25487
  }
27158
- 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 });
27159
- 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" }] });
25488
+ 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 });
25489
+ 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" }] });
27160
25490
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.2", ngImport: i0, type: ClrWizard, decorators: [{
27161
25491
  type: Component,
27162
25492
  args: [{ selector: 'clr-wizard', providers: [WizardNavigationService, PageCollectionService, ButtonHubService, HeaderActionService], host: {
@@ -27165,12 +25495,12 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.2", ngImpor
27165
25495
  '[class.wizard-lg]': "size == 'lg'",
27166
25496
  '[class.wizard-xl]': "size == 'xl'",
27167
25497
  '[class.lastPage]': 'navService.currentPageIsLast',
27168
- }, 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" }]
25498
+ }, 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" }]
27169
25499
  }], ctorParameters: function () {
27170
25500
  return [{ type: undefined, decorators: [{
27171
25501
  type: Inject,
27172
25502
  args: [PLATFORM_ID]
27173
- }] }, { type: WizardNavigationService }, { type: PageCollectionService }, { type: ButtonHubService }, { type: HeaderActionService }, { type: i0.ElementRef }, { type: i0.IterableDiffers }];
25503
+ }] }, { type: WizardNavigationService }, { type: PageCollectionService }, { type: ButtonHubService }, { type: HeaderActionService }, { type: i0.IterableDiffers }];
27174
25504
  }, propDecorators: { size: [{
27175
25505
  type: Input,
27176
25506
  args: ['clrWizardSize']
@@ -27195,9 +25525,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.2", ngImpor
27195
25525
  }], disableStepnav: [{
27196
25526
  type: Input,
27197
25527
  args: ['clrWizardDisableStepnav']
27198
- }], _stopModalAnimations: [{
27199
- type: Input,
27200
- args: ['clrWizardPreventModalAnimation']
27201
25528
  }], _openChanged: [{
27202
25529
  type: Output,
27203
25530
  args: ['clrWizardOpenChange']
@@ -27498,15 +25825,12 @@ ClarityModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version:
27498
25825
  ClrModalModule,
27499
25826
  ClrLoadingModule,
27500
25827
  ClrConditionalModule,
27501
- ClrFocusTrapModule,
27502
25828
  ClrFocusOnViewInitModule,
27503
- ClrForTypeAheadModule,
27504
25829
  ClrButtonModule,
27505
25830
  ClrFormsModule,
27506
25831
  ClrLayoutModule,
27507
25832
  ClrPopoverModule,
27508
25833
  ClrWizardModule,
27509
- ClrDragAndDropModule,
27510
25834
  ClrStepperModule,
27511
25835
  ClrSpinnerModule,
27512
25836
  ClrProgressBarModule,
@@ -27518,15 +25842,12 @@ ClarityModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version:
27518
25842
  ClrModalModule,
27519
25843
  ClrLoadingModule,
27520
25844
  ClrConditionalModule,
27521
- ClrFocusTrapModule,
27522
25845
  ClrFocusOnViewInitModule,
27523
- ClrForTypeAheadModule,
27524
25846
  ClrButtonModule,
27525
25847
  ClrFormsModule,
27526
25848
  ClrLayoutModule,
27527
25849
  ClrPopoverModule,
27528
25850
  ClrWizardModule,
27529
- ClrDragAndDropModule,
27530
25851
  ClrStepperModule,
27531
25852
  ClrSpinnerModule,
27532
25853
  ClrProgressBarModule,
@@ -27542,15 +25863,12 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.2", ngImpor
27542
25863
  ClrModalModule,
27543
25864
  ClrLoadingModule,
27544
25865
  ClrConditionalModule,
27545
- ClrFocusTrapModule,
27546
25866
  ClrFocusOnViewInitModule,
27547
- ClrForTypeAheadModule,
27548
25867
  ClrButtonModule,
27549
25868
  ClrFormsModule,
27550
25869
  ClrLayoutModule,
27551
25870
  ClrPopoverModule,
27552
25871
  ClrWizardModule,
27553
- ClrDragAndDropModule,
27554
25872
  ClrStepperModule,
27555
25873
  ClrSpinnerModule,
27556
25874
  ClrProgressBarModule,
@@ -27820,5 +26138,5 @@ const CLR_MENU_POSITIONS = [
27820
26138
  * Generated bundle index. Do not edit.
27821
26139
  */
27822
26140
 
27823
- 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 };
26141
+ 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 };
27824
26142
  //# sourceMappingURL=clr-angular.mjs.map