@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
 
@@ -312,7 +313,6 @@ const commonStringsDefault = {
312
313
  alertCloseButtonAriaLabel: 'Close alert',
313
314
  // Date Picker
314
315
  datepickerDialogLabel: 'Choose date',
315
- datepickerToggle: 'Toggle datepicker',
316
316
  datepickerToggleChooseDateLabel: 'Choose date',
317
317
  datepickerToggleChangeDateLabel: 'Change date, {SELECTED_DATE}',
318
318
  datepickerPreviousMonth: 'Previous month',
@@ -332,7 +332,6 @@ const commonStringsDefault = {
332
332
  responsiveNavOverflowOpen: 'Navigation overflow menu',
333
333
  responsiveNavOverflowClose: 'Navigation overflow menu',
334
334
  //Vertical Nav
335
- verticalNavGroupToggle: 'Toggle vertical navigation group',
336
335
  verticalNavToggle: 'Toggle vertical navigation',
337
336
  // Timeline steps
338
337
  timelineStepNotStarted: 'Not started',
@@ -596,10 +595,10 @@ class ClrAccordionPanel {
596
595
  }
597
596
  }
598
597
  ClrAccordionPanel.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.0.2", ngImport: i0, type: ClrAccordionPanel, deps: [{ token: ClrCommonStringsService }, { token: AccordionService }, { token: IfExpandService }], target: i0.ɵɵFactoryTarget.Component });
599
- ClrAccordionPanel.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.0.2", type: ClrAccordionPanel, selector: "clr-accordion-panel", inputs: { disabled: ["clrAccordionPanelDisabled", "disabled"], panelOpen: ["clrAccordionPanelOpen", "panelOpen"] }, outputs: { panelOpenChange: "clrAccordionPanelOpenChange" }, host: { properties: { "class.clr-accordion-panel": "true" } }, providers: [IfExpandService], queries: [{ propertyName: "accordionDescription", predicate: ClrAccordionDescription }], usesOnChanges: true, ngImport: i0, template: "<ng-container *ngIf=\"panel | async; let panel\">\n <div *ngIf=\"panel.status !== AccordionStatus.Inactive\" aria-live=\"assertive\" class=\"clr-sr-only\">\n <ng-container *ngIf=\"panel.status === AccordionStatus.Error\">{{commonStrings.keys.danger}}</ng-container>\n </div>\n\n <div [ngClass]=\"getPanelStateClasses(panel)\">\n <div class=\"clr-accordion-header\">\n <button\n type=\"button\"\n class=\"clr-accordion-header-button\"\n (click)=\"togglePanel()\"\n [id]=\"getAccordionHeaderId(panel.templateId)\"\n [disabled]=\"isAccordion && panel.disabled\"\n [attr.aria-disabled]=\"!isAccordion && panel.disabled\"\n [attr.aria-controls]=\"getAccordionContentId(panel.templateId)\"\n [attr.aria-expanded]=\"panel.open\"\n [class.clr-accordion-header-has-description]=\"(accordionDescription.changes | async)?.length || accordionDescription.length\"\n #headerButton\n >\n <span class=\"clr-sr-only\">\n <ng-container *ngIf=\"panel.status === AccordionStatus.Error\">{{commonStrings.keys.danger}}</ng-container>\n <ng-container *ngIf=\"panel.status === AccordionStatus.Complete\">{{commonStrings.keys.success}}</ng-container>\n </span>\n <span class=\"clr-accordion-status\">\n <cds-icon shape=\"angle\" direction=\"right\" class=\"clr-accordion-angle\"></cds-icon>\n <span class=\"clr-accordion-number\"></span>\n <cds-icon status=\"danger\" shape=\"exclamation-circle\" class=\"clr-accordion-error-icon\"></cds-icon>\n <cds-icon status=\"success\" shape=\"check-circle\" class=\"clr-accordion-complete-icon\"></cds-icon>\n </span>\n <ng-content select=\"clr-accordion-title, clr-step-title\"></ng-content>\n <ng-content select=\"clr-accordion-description, clr-step-description\"></ng-content>\n </button>\n </div>\n <div\n @skipInitialRender\n role=\"region\"\n [id]=\"getAccordionContentId(panel.templateId)\"\n [attr.aria-hidden]=\"!panel.open\"\n [attr.aria-labelledby]=\"getAccordionHeaderId(panel.templateId)\"\n >\n <div\n *ngIf=\"panel.open\"\n @toggle\n (@toggle.done)=\"collapsePanelOnAnimationDone(panel)\"\n class=\"clr-accordion-content\"\n >\n <div class=\"clr-accordion-inner-content\">\n <ng-content></ng-content>\n </div>\n </div>\n </div>\n </div>\n</ng-container>\n", dependencies: [{ kind: "directive", type: i5.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: CdsIconCustomTag, selector: "cds-icon" }, { kind: "pipe", type: i5.AsyncPipe, name: "async" }], animations: panelAnimation, changeDetection: i0.ChangeDetectionStrategy.OnPush });
598
+ ClrAccordionPanel.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.0.2", type: ClrAccordionPanel, selector: "clr-accordion-panel", inputs: { disabled: ["clrAccordionPanelDisabled", "disabled"], panelOpen: ["clrAccordionPanelOpen", "panelOpen"] }, outputs: { panelOpenChange: "clrAccordionPanelOpenChange" }, host: { properties: { "class.clr-accordion-panel": "true" } }, providers: [IfExpandService], queries: [{ propertyName: "accordionDescription", predicate: ClrAccordionDescription }], usesOnChanges: true, ngImport: i0, template: "<ng-container *ngIf=\"panel | async; let panel\">\n <div [ngClass]=\"getPanelStateClasses(panel)\">\n <div class=\"clr-accordion-header\">\n <button\n type=\"button\"\n class=\"clr-accordion-header-button\"\n (click)=\"togglePanel()\"\n [id]=\"getAccordionHeaderId(panel.templateId)\"\n [disabled]=\"isAccordion && panel.disabled\"\n [attr.aria-disabled]=\"!isAccordion && panel.disabled\"\n [attr.aria-controls]=\"getAccordionContentId(panel.templateId)\"\n [attr.aria-expanded]=\"panel.open\"\n [class.clr-accordion-header-has-description]=\"(accordionDescription.changes | async)?.length || accordionDescription.length\"\n #headerButton\n >\n <span class=\"clr-sr-only\">\n <ng-container *ngIf=\"panel.status === AccordionStatus.Error\">{{commonStrings.keys.danger}}</ng-container>\n <ng-container *ngIf=\"panel.status === AccordionStatus.Complete\">{{commonStrings.keys.success}}</ng-container>\n </span>\n <span class=\"clr-accordion-status\">\n <cds-icon shape=\"angle\" direction=\"right\" class=\"clr-accordion-angle\"></cds-icon>\n <span class=\"clr-accordion-number\"></span>\n <cds-icon status=\"danger\" shape=\"exclamation-circle\" class=\"clr-accordion-error-icon\"></cds-icon>\n <cds-icon status=\"success\" shape=\"check-circle\" class=\"clr-accordion-complete-icon\"></cds-icon>\n </span>\n <ng-content select=\"clr-accordion-title, clr-step-title\"></ng-content>\n <ng-content select=\"clr-accordion-description, clr-step-description\"></ng-content>\n </button>\n </div>\n <div\n @skipInitialRender\n role=\"region\"\n [id]=\"getAccordionContentId(panel.templateId)\"\n [attr.aria-hidden]=\"!panel.open\"\n [attr.aria-labelledby]=\"getAccordionHeaderId(panel.templateId)\"\n >\n <div\n *ngIf=\"panel.open\"\n @toggle\n (@toggle.done)=\"collapsePanelOnAnimationDone(panel)\"\n class=\"clr-accordion-content\"\n >\n <div class=\"clr-accordion-inner-content\">\n <ng-content></ng-content>\n </div>\n </div>\n </div>\n </div>\n</ng-container>\n", dependencies: [{ kind: "directive", type: i5.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: CdsIconCustomTag, selector: "cds-icon" }, { kind: "pipe", type: i5.AsyncPipe, name: "async" }], animations: panelAnimation, changeDetection: i0.ChangeDetectionStrategy.OnPush });
600
599
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.2", ngImport: i0, type: ClrAccordionPanel, decorators: [{
601
600
  type: Component,
602
- args: [{ selector: 'clr-accordion-panel', host: { '[class.clr-accordion-panel]': 'true' }, changeDetection: ChangeDetectionStrategy.OnPush, animations: panelAnimation, providers: [IfExpandService], template: "<ng-container *ngIf=\"panel | async; let panel\">\n <div *ngIf=\"panel.status !== AccordionStatus.Inactive\" aria-live=\"assertive\" class=\"clr-sr-only\">\n <ng-container *ngIf=\"panel.status === AccordionStatus.Error\">{{commonStrings.keys.danger}}</ng-container>\n </div>\n\n <div [ngClass]=\"getPanelStateClasses(panel)\">\n <div class=\"clr-accordion-header\">\n <button\n type=\"button\"\n class=\"clr-accordion-header-button\"\n (click)=\"togglePanel()\"\n [id]=\"getAccordionHeaderId(panel.templateId)\"\n [disabled]=\"isAccordion && panel.disabled\"\n [attr.aria-disabled]=\"!isAccordion && panel.disabled\"\n [attr.aria-controls]=\"getAccordionContentId(panel.templateId)\"\n [attr.aria-expanded]=\"panel.open\"\n [class.clr-accordion-header-has-description]=\"(accordionDescription.changes | async)?.length || accordionDescription.length\"\n #headerButton\n >\n <span class=\"clr-sr-only\">\n <ng-container *ngIf=\"panel.status === AccordionStatus.Error\">{{commonStrings.keys.danger}}</ng-container>\n <ng-container *ngIf=\"panel.status === AccordionStatus.Complete\">{{commonStrings.keys.success}}</ng-container>\n </span>\n <span class=\"clr-accordion-status\">\n <cds-icon shape=\"angle\" direction=\"right\" class=\"clr-accordion-angle\"></cds-icon>\n <span class=\"clr-accordion-number\"></span>\n <cds-icon status=\"danger\" shape=\"exclamation-circle\" class=\"clr-accordion-error-icon\"></cds-icon>\n <cds-icon status=\"success\" shape=\"check-circle\" class=\"clr-accordion-complete-icon\"></cds-icon>\n </span>\n <ng-content select=\"clr-accordion-title, clr-step-title\"></ng-content>\n <ng-content select=\"clr-accordion-description, clr-step-description\"></ng-content>\n </button>\n </div>\n <div\n @skipInitialRender\n role=\"region\"\n [id]=\"getAccordionContentId(panel.templateId)\"\n [attr.aria-hidden]=\"!panel.open\"\n [attr.aria-labelledby]=\"getAccordionHeaderId(panel.templateId)\"\n >\n <div\n *ngIf=\"panel.open\"\n @toggle\n (@toggle.done)=\"collapsePanelOnAnimationDone(panel)\"\n class=\"clr-accordion-content\"\n >\n <div class=\"clr-accordion-inner-content\">\n <ng-content></ng-content>\n </div>\n </div>\n </div>\n </div>\n</ng-container>\n" }]
601
+ args: [{ selector: 'clr-accordion-panel', host: { '[class.clr-accordion-panel]': 'true' }, changeDetection: ChangeDetectionStrategy.OnPush, animations: panelAnimation, providers: [IfExpandService], template: "<ng-container *ngIf=\"panel | async; let panel\">\n <div [ngClass]=\"getPanelStateClasses(panel)\">\n <div class=\"clr-accordion-header\">\n <button\n type=\"button\"\n class=\"clr-accordion-header-button\"\n (click)=\"togglePanel()\"\n [id]=\"getAccordionHeaderId(panel.templateId)\"\n [disabled]=\"isAccordion && panel.disabled\"\n [attr.aria-disabled]=\"!isAccordion && panel.disabled\"\n [attr.aria-controls]=\"getAccordionContentId(panel.templateId)\"\n [attr.aria-expanded]=\"panel.open\"\n [class.clr-accordion-header-has-description]=\"(accordionDescription.changes | async)?.length || accordionDescription.length\"\n #headerButton\n >\n <span class=\"clr-sr-only\">\n <ng-container *ngIf=\"panel.status === AccordionStatus.Error\">{{commonStrings.keys.danger}}</ng-container>\n <ng-container *ngIf=\"panel.status === AccordionStatus.Complete\">{{commonStrings.keys.success}}</ng-container>\n </span>\n <span class=\"clr-accordion-status\">\n <cds-icon shape=\"angle\" direction=\"right\" class=\"clr-accordion-angle\"></cds-icon>\n <span class=\"clr-accordion-number\"></span>\n <cds-icon status=\"danger\" shape=\"exclamation-circle\" class=\"clr-accordion-error-icon\"></cds-icon>\n <cds-icon status=\"success\" shape=\"check-circle\" class=\"clr-accordion-complete-icon\"></cds-icon>\n </span>\n <ng-content select=\"clr-accordion-title, clr-step-title\"></ng-content>\n <ng-content select=\"clr-accordion-description, clr-step-description\"></ng-content>\n </button>\n </div>\n <div\n @skipInitialRender\n role=\"region\"\n [id]=\"getAccordionContentId(panel.templateId)\"\n [attr.aria-hidden]=\"!panel.open\"\n [attr.aria-labelledby]=\"getAccordionHeaderId(panel.templateId)\"\n >\n <div\n *ngIf=\"panel.open\"\n @toggle\n (@toggle.done)=\"collapsePanelOnAnimationDone(panel)\"\n class=\"clr-accordion-content\"\n >\n <div class=\"clr-accordion-inner-content\">\n <ng-content></ng-content>\n </div>\n </div>\n </div>\n </div>\n</ng-container>\n" }]
603
602
  }], ctorParameters: function () { return [{ type: ClrCommonStringsService }, { type: AccordionService }, { type: IfExpandService }]; }, propDecorators: { disabled: [{
604
603
  type: Input,
605
604
  args: ['clrAccordionPanelDisabled']
@@ -1091,10 +1090,10 @@ class ClrStepperPanel extends ClrAccordionPanel {
1091
1090
  }
1092
1091
  }
1093
1092
  ClrStepperPanel.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.0.2", ngImport: i0, type: ClrStepperPanel, deps: [{ token: PLATFORM_ID }, { token: ClrCommonStringsService }, { token: i1.FormGroupName, optional: true }, { token: i1.NgModelGroup, optional: true }, { token: StepperService }, { token: IfExpandService }], target: i0.ɵɵFactoryTarget.Component });
1094
- ClrStepperPanel.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.0.2", type: ClrStepperPanel, selector: "clr-stepper-panel", host: { properties: { "class.clr-accordion-panel": "true" } }, providers: [IfExpandService], viewQueries: [{ propertyName: "headerButton", first: true, predicate: ["headerButton"], descendants: true }], usesInheritance: true, ngImport: i0, template: "<ng-container *ngIf=\"panel | async; let panel\">\n <div *ngIf=\"panel.status !== AccordionStatus.Inactive\" aria-live=\"assertive\" class=\"clr-sr-only\">\n <ng-container *ngIf=\"panel.status === AccordionStatus.Error\">{{commonStrings.keys.danger}}</ng-container>\n </div>\n\n <div [ngClass]=\"getPanelStateClasses(panel)\">\n <div class=\"clr-accordion-header\">\n <button\n type=\"button\"\n class=\"clr-accordion-header-button\"\n (click)=\"togglePanel()\"\n [id]=\"getAccordionHeaderId(panel.templateId)\"\n [disabled]=\"isAccordion && panel.disabled\"\n [attr.aria-disabled]=\"!isAccordion && panel.disabled\"\n [attr.aria-controls]=\"getAccordionContentId(panel.templateId)\"\n [attr.aria-expanded]=\"panel.open\"\n [class.clr-accordion-header-has-description]=\"(accordionDescription.changes | async)?.length || accordionDescription.length\"\n #headerButton\n >\n <span class=\"clr-sr-only\">\n <ng-container *ngIf=\"panel.status === AccordionStatus.Error\">{{commonStrings.keys.danger}}</ng-container>\n <ng-container *ngIf=\"panel.status === AccordionStatus.Complete\">{{commonStrings.keys.success}}</ng-container>\n </span>\n <span class=\"clr-accordion-status\">\n <cds-icon shape=\"angle\" direction=\"right\" class=\"clr-accordion-angle\"></cds-icon>\n <span class=\"clr-accordion-number\"></span>\n <cds-icon status=\"danger\" shape=\"exclamation-circle\" class=\"clr-accordion-error-icon\"></cds-icon>\n <cds-icon status=\"success\" shape=\"check-circle\" class=\"clr-accordion-complete-icon\"></cds-icon>\n </span>\n <ng-content select=\"clr-accordion-title, clr-step-title\"></ng-content>\n <ng-content select=\"clr-accordion-description, clr-step-description\"></ng-content>\n </button>\n </div>\n <div\n @skipInitialRender\n role=\"region\"\n [id]=\"getAccordionContentId(panel.templateId)\"\n [attr.aria-hidden]=\"!panel.open\"\n [attr.aria-labelledby]=\"getAccordionHeaderId(panel.templateId)\"\n >\n <div\n *ngIf=\"panel.open\"\n @toggle\n (@toggle.done)=\"collapsePanelOnAnimationDone(panel)\"\n class=\"clr-accordion-content\"\n >\n <div class=\"clr-accordion-inner-content\">\n <ng-content></ng-content>\n </div>\n </div>\n </div>\n </div>\n</ng-container>\n", dependencies: [{ kind: "directive", type: i5.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: CdsIconCustomTag, selector: "cds-icon" }, { kind: "pipe", type: i5.AsyncPipe, name: "async" }], animations: stepAnimation, changeDetection: i0.ChangeDetectionStrategy.OnPush });
1093
+ ClrStepperPanel.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.0.2", type: ClrStepperPanel, selector: "clr-stepper-panel", host: { properties: { "class.clr-accordion-panel": "true" } }, providers: [IfExpandService], viewQueries: [{ propertyName: "headerButton", first: true, predicate: ["headerButton"], descendants: true }], usesInheritance: true, ngImport: i0, template: "<ng-container *ngIf=\"panel | async; let panel\">\n <div [ngClass]=\"getPanelStateClasses(panel)\">\n <div class=\"clr-accordion-header\">\n <button\n type=\"button\"\n class=\"clr-accordion-header-button\"\n (click)=\"togglePanel()\"\n [id]=\"getAccordionHeaderId(panel.templateId)\"\n [disabled]=\"isAccordion && panel.disabled\"\n [attr.aria-disabled]=\"!isAccordion && panel.disabled\"\n [attr.aria-controls]=\"getAccordionContentId(panel.templateId)\"\n [attr.aria-expanded]=\"panel.open\"\n [class.clr-accordion-header-has-description]=\"(accordionDescription.changes | async)?.length || accordionDescription.length\"\n #headerButton\n >\n <span class=\"clr-sr-only\">\n <ng-container *ngIf=\"panel.status === AccordionStatus.Error\">{{commonStrings.keys.danger}}</ng-container>\n <ng-container *ngIf=\"panel.status === AccordionStatus.Complete\">{{commonStrings.keys.success}}</ng-container>\n </span>\n <span class=\"clr-accordion-status\">\n <cds-icon shape=\"angle\" direction=\"right\" class=\"clr-accordion-angle\"></cds-icon>\n <span class=\"clr-accordion-number\"></span>\n <cds-icon status=\"danger\" shape=\"exclamation-circle\" class=\"clr-accordion-error-icon\"></cds-icon>\n <cds-icon status=\"success\" shape=\"check-circle\" class=\"clr-accordion-complete-icon\"></cds-icon>\n </span>\n <ng-content select=\"clr-accordion-title, clr-step-title\"></ng-content>\n <ng-content select=\"clr-accordion-description, clr-step-description\"></ng-content>\n </button>\n </div>\n <div\n @skipInitialRender\n role=\"region\"\n [id]=\"getAccordionContentId(panel.templateId)\"\n [attr.aria-hidden]=\"!panel.open\"\n [attr.aria-labelledby]=\"getAccordionHeaderId(panel.templateId)\"\n >\n <div\n *ngIf=\"panel.open\"\n @toggle\n (@toggle.done)=\"collapsePanelOnAnimationDone(panel)\"\n class=\"clr-accordion-content\"\n >\n <div class=\"clr-accordion-inner-content\">\n <ng-content></ng-content>\n </div>\n </div>\n </div>\n </div>\n</ng-container>\n", dependencies: [{ kind: "directive", type: i5.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: CdsIconCustomTag, selector: "cds-icon" }, { kind: "pipe", type: i5.AsyncPipe, name: "async" }], animations: stepAnimation, changeDetection: i0.ChangeDetectionStrategy.OnPush });
1095
1094
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.2", ngImport: i0, type: ClrStepperPanel, decorators: [{
1096
1095
  type: Component,
1097
- args: [{ selector: 'clr-stepper-panel', host: { '[class.clr-accordion-panel]': 'true' }, changeDetection: ChangeDetectionStrategy.OnPush, animations: stepAnimation, providers: [IfExpandService], template: "<ng-container *ngIf=\"panel | async; let panel\">\n <div *ngIf=\"panel.status !== AccordionStatus.Inactive\" aria-live=\"assertive\" class=\"clr-sr-only\">\n <ng-container *ngIf=\"panel.status === AccordionStatus.Error\">{{commonStrings.keys.danger}}</ng-container>\n </div>\n\n <div [ngClass]=\"getPanelStateClasses(panel)\">\n <div class=\"clr-accordion-header\">\n <button\n type=\"button\"\n class=\"clr-accordion-header-button\"\n (click)=\"togglePanel()\"\n [id]=\"getAccordionHeaderId(panel.templateId)\"\n [disabled]=\"isAccordion && panel.disabled\"\n [attr.aria-disabled]=\"!isAccordion && panel.disabled\"\n [attr.aria-controls]=\"getAccordionContentId(panel.templateId)\"\n [attr.aria-expanded]=\"panel.open\"\n [class.clr-accordion-header-has-description]=\"(accordionDescription.changes | async)?.length || accordionDescription.length\"\n #headerButton\n >\n <span class=\"clr-sr-only\">\n <ng-container *ngIf=\"panel.status === AccordionStatus.Error\">{{commonStrings.keys.danger}}</ng-container>\n <ng-container *ngIf=\"panel.status === AccordionStatus.Complete\">{{commonStrings.keys.success}}</ng-container>\n </span>\n <span class=\"clr-accordion-status\">\n <cds-icon shape=\"angle\" direction=\"right\" class=\"clr-accordion-angle\"></cds-icon>\n <span class=\"clr-accordion-number\"></span>\n <cds-icon status=\"danger\" shape=\"exclamation-circle\" class=\"clr-accordion-error-icon\"></cds-icon>\n <cds-icon status=\"success\" shape=\"check-circle\" class=\"clr-accordion-complete-icon\"></cds-icon>\n </span>\n <ng-content select=\"clr-accordion-title, clr-step-title\"></ng-content>\n <ng-content select=\"clr-accordion-description, clr-step-description\"></ng-content>\n </button>\n </div>\n <div\n @skipInitialRender\n role=\"region\"\n [id]=\"getAccordionContentId(panel.templateId)\"\n [attr.aria-hidden]=\"!panel.open\"\n [attr.aria-labelledby]=\"getAccordionHeaderId(panel.templateId)\"\n >\n <div\n *ngIf=\"panel.open\"\n @toggle\n (@toggle.done)=\"collapsePanelOnAnimationDone(panel)\"\n class=\"clr-accordion-content\"\n >\n <div class=\"clr-accordion-inner-content\">\n <ng-content></ng-content>\n </div>\n </div>\n </div>\n </div>\n</ng-container>\n" }]
1096
+ args: [{ selector: 'clr-stepper-panel', host: { '[class.clr-accordion-panel]': 'true' }, changeDetection: ChangeDetectionStrategy.OnPush, animations: stepAnimation, providers: [IfExpandService], template: "<ng-container *ngIf=\"panel | async; let panel\">\n <div [ngClass]=\"getPanelStateClasses(panel)\">\n <div class=\"clr-accordion-header\">\n <button\n type=\"button\"\n class=\"clr-accordion-header-button\"\n (click)=\"togglePanel()\"\n [id]=\"getAccordionHeaderId(panel.templateId)\"\n [disabled]=\"isAccordion && panel.disabled\"\n [attr.aria-disabled]=\"!isAccordion && panel.disabled\"\n [attr.aria-controls]=\"getAccordionContentId(panel.templateId)\"\n [attr.aria-expanded]=\"panel.open\"\n [class.clr-accordion-header-has-description]=\"(accordionDescription.changes | async)?.length || accordionDescription.length\"\n #headerButton\n >\n <span class=\"clr-sr-only\">\n <ng-container *ngIf=\"panel.status === AccordionStatus.Error\">{{commonStrings.keys.danger}}</ng-container>\n <ng-container *ngIf=\"panel.status === AccordionStatus.Complete\">{{commonStrings.keys.success}}</ng-container>\n </span>\n <span class=\"clr-accordion-status\">\n <cds-icon shape=\"angle\" direction=\"right\" class=\"clr-accordion-angle\"></cds-icon>\n <span class=\"clr-accordion-number\"></span>\n <cds-icon status=\"danger\" shape=\"exclamation-circle\" class=\"clr-accordion-error-icon\"></cds-icon>\n <cds-icon status=\"success\" shape=\"check-circle\" class=\"clr-accordion-complete-icon\"></cds-icon>\n </span>\n <ng-content select=\"clr-accordion-title, clr-step-title\"></ng-content>\n <ng-content select=\"clr-accordion-description, clr-step-description\"></ng-content>\n </button>\n </div>\n <div\n @skipInitialRender\n role=\"region\"\n [id]=\"getAccordionContentId(panel.templateId)\"\n [attr.aria-hidden]=\"!panel.open\"\n [attr.aria-labelledby]=\"getAccordionHeaderId(panel.templateId)\"\n >\n <div\n *ngIf=\"panel.open\"\n @toggle\n (@toggle.done)=\"collapsePanelOnAnimationDone(panel)\"\n class=\"clr-accordion-content\"\n >\n <div class=\"clr-accordion-inner-content\">\n <ng-content></ng-content>\n </div>\n </div>\n </div>\n </div>\n</ng-container>\n" }]
1098
1097
  }], ctorParameters: function () { return [{ type: undefined, decorators: [{
1099
1098
  type: Inject,
1100
1099
  args: [PLATFORM_ID]
@@ -1318,69 +1317,62 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.2", ngImpor
1318
1317
  * This software is released under MIT license.
1319
1318
  * The full license information can be found in LICENSE in the root directory of this project.
1320
1319
  */
1321
- var KeyCodes;
1322
- (function (KeyCodes) {
1323
- KeyCodes["ArrowLeft"] = "ArrowLeft";
1324
- KeyCodes["ArrowUp"] = "ArrowUp";
1325
- KeyCodes["ArrowRight"] = "ArrowRight";
1326
- KeyCodes["ArrowDown"] = "ArrowDown";
1327
- KeyCodes["Backspace"] = "Backspace";
1328
- KeyCodes["Tab"] = "Tab";
1329
- KeyCodes["Enter"] = "Enter";
1330
- KeyCodes["Escape"] = "Escape";
1331
- KeyCodes["Space"] = "Space";
1332
- KeyCodes["Spacebar"] = " ";
1333
- KeyCodes["Home"] = "Home";
1334
- KeyCodes["End"] = "End";
1335
- })(KeyCodes || (KeyCodes = {}));
1336
- var IEKeyCodes;
1337
- (function (IEKeyCodes) {
1338
- IEKeyCodes["ArrowUp"] = "Up";
1339
- IEKeyCodes["ArrowDown"] = "Down";
1340
- IEKeyCodes["ArrowRight"] = "Right";
1341
- IEKeyCodes["ArrowLeft"] = "Left";
1342
- IEKeyCodes["Space"] = "Spacebar";
1343
- IEKeyCodes["Escape"] = "Esc";
1344
- IEKeyCodes["Home"] = "Home";
1345
- IEKeyCodes["End"] = "End";
1346
- IEKeyCodes["Enter"] = "Enter";
1347
- IEKeyCodes["Tab"] = "Tab";
1348
- })(IEKeyCodes || (IEKeyCodes = {}));
1320
+ var Keys;
1321
+ (function (Keys) {
1322
+ Keys["ArrowLeft"] = "ArrowLeft";
1323
+ Keys["ArrowUp"] = "ArrowUp";
1324
+ Keys["ArrowRight"] = "ArrowRight";
1325
+ Keys["ArrowDown"] = "ArrowDown";
1326
+ Keys["Backspace"] = "Backspace";
1327
+ Keys["Tab"] = "Tab";
1328
+ Keys["Enter"] = "Enter";
1329
+ Keys["Escape"] = "Escape";
1330
+ Keys["Space"] = "Space";
1331
+ Keys["Spacebar"] = " ";
1332
+ Keys["Home"] = "Home";
1333
+ Keys["End"] = "End";
1334
+ })(Keys || (Keys = {}));
1335
+ var IEKeys;
1336
+ (function (IEKeys) {
1337
+ IEKeys["ArrowUp"] = "Up";
1338
+ IEKeys["ArrowDown"] = "Down";
1339
+ IEKeys["ArrowRight"] = "Right";
1340
+ IEKeys["ArrowLeft"] = "Left";
1341
+ IEKeys["Space"] = "Spacebar";
1342
+ IEKeys["Escape"] = "Esc";
1343
+ })(IEKeys || (IEKeys = {}));
1349
1344
 
1350
1345
  /*
1351
1346
  * Copyright (c) 2016-2022 VMware, Inc. All Rights Reserved.
1352
1347
  * This software is released under MIT license.
1353
1348
  * The full license information can be found in LICENSE in the root directory of this project.
1354
1349
  */
1355
- function keyValidator(key) {
1356
- if (key === KeyCodes.ArrowUp || key === IEKeyCodes.ArrowUp) {
1357
- return KeyCodes.ArrowUp;
1350
+ function normalizeKey(key) {
1351
+ if (key === Keys.ArrowUp || key === IEKeys.ArrowUp) {
1352
+ return Keys.ArrowUp;
1358
1353
  }
1359
- else if (key === KeyCodes.ArrowDown || key === IEKeyCodes.ArrowDown) {
1360
- return KeyCodes.ArrowDown;
1354
+ else if (key === Keys.ArrowDown || key === IEKeys.ArrowDown) {
1355
+ return Keys.ArrowDown;
1361
1356
  }
1362
- else if (key === KeyCodes.ArrowRight || key === IEKeyCodes.ArrowRight) {
1363
- return KeyCodes.ArrowRight;
1357
+ else if (key === Keys.ArrowRight || key === IEKeys.ArrowRight) {
1358
+ return Keys.ArrowRight;
1364
1359
  }
1365
- else if (key === KeyCodes.ArrowLeft || key === IEKeyCodes.ArrowLeft) {
1366
- return KeyCodes.ArrowLeft;
1360
+ else if (key === Keys.ArrowLeft || key === IEKeys.ArrowLeft) {
1361
+ return Keys.ArrowLeft;
1367
1362
  }
1368
- else if (key === KeyCodes.Space || key === IEKeyCodes.Space) {
1369
- return KeyCodes.Space;
1363
+ else if (key === Keys.Space || key === IEKeys.Space) {
1364
+ return Keys.Space;
1370
1365
  }
1371
- else if (key === KeyCodes.Escape || key === IEKeyCodes.Escape) {
1372
- return KeyCodes.Escape;
1366
+ else if (key === Keys.Escape || key === IEKeys.Escape) {
1367
+ return Keys.Escape;
1373
1368
  }
1374
1369
  else {
1375
1370
  return key;
1376
1371
  }
1377
1372
  }
1378
1373
  function preventArrowKeyScroll(event) {
1379
- const validKey = keyValidator(event.key);
1380
- if (validKey === KeyCodes.ArrowUp ||
1381
- validKey === KeyCodes.ArrowDown ||
1382
- validKey === KeyCodes.ArrowLeft ||
1383
- validKey === KeyCodes.ArrowRight) {
1374
+ const key = normalizeKey(event.key);
1375
+ if (key === Keys.ArrowUp || key === Keys.ArrowDown || key === Keys.ArrowLeft || key === Keys.ArrowRight) {
1384
1376
  // prevent element container scroll
1385
1377
  // MDN references this is really the only way to prevent native browser interactions
1386
1378
  // https://developer.mozilla.org/en-US/docs/Web/Accessibility/Keyboard-navigable_JavaScript_widgets
@@ -4959,10 +4951,10 @@ class ClrKeyFocus {
4959
4951
  else if (this.nextKeyPressed(event) && this.currentFocusIsNotLastItem()) {
4960
4952
  this.moveTo(this.current + 1);
4961
4953
  }
4962
- else if (event.code === KeyCodes.Home) {
4954
+ else if (event.code === Keys.Home) {
4963
4955
  this.moveTo(0);
4964
4956
  }
4965
- else if (event.code === KeyCodes.End) {
4957
+ else if (event.code === Keys.End) {
4966
4958
  this.moveTo(this.focusableItems.length - 1);
4967
4959
  }
4968
4960
  preventArrowKeyScroll(event);
@@ -5010,27 +5002,27 @@ class ClrKeyFocus {
5010
5002
  });
5011
5003
  }
5012
5004
  nextKeyPressed(event) {
5013
- const key = keyValidator(event.key);
5005
+ const key = normalizeKey(event.key);
5014
5006
  switch (this.direction) {
5015
5007
  case ClrFocusDirection.VERTICAL:
5016
- return key === KeyCodes.ArrowDown;
5008
+ return key === Keys.ArrowDown;
5017
5009
  case ClrFocusDirection.HORIZONTAL:
5018
- return key === KeyCodes.ArrowRight;
5010
+ return key === Keys.ArrowRight;
5019
5011
  case ClrFocusDirection.BOTH:
5020
- return key === KeyCodes.ArrowDown || key === KeyCodes.ArrowRight;
5012
+ return key === Keys.ArrowDown || key === Keys.ArrowRight;
5021
5013
  default:
5022
5014
  return false;
5023
5015
  }
5024
5016
  }
5025
5017
  prevKeyPressed(event) {
5026
- const key = keyValidator(event.key);
5018
+ const key = normalizeKey(event.key);
5027
5019
  switch (this.direction) {
5028
5020
  case ClrFocusDirection.VERTICAL:
5029
- return key === KeyCodes.ArrowUp;
5021
+ return key === Keys.ArrowUp;
5030
5022
  case ClrFocusDirection.HORIZONTAL:
5031
- return key === KeyCodes.ArrowLeft;
5023
+ return key === Keys.ArrowLeft;
5032
5024
  case ClrFocusDirection.BOTH:
5033
- return key === KeyCodes.ArrowUp || key === KeyCodes.ArrowLeft;
5025
+ return key === Keys.ArrowUp || key === Keys.ArrowLeft;
5034
5026
  default:
5035
5027
  return false;
5036
5028
  }
@@ -5098,10 +5090,10 @@ class ClrRovingTabindex extends ClrKeyFocus {
5098
5090
  else if (this.nextKeyPressed(event) && this.currentFocusIsNotLastItem()) {
5099
5091
  this.updateTabindex(this.current + 1);
5100
5092
  }
5101
- else if (event.code === KeyCodes.Home) {
5093
+ else if (event.code === Keys.Home) {
5102
5094
  this.updateTabindex(0);
5103
5095
  }
5104
- else if (event.code === KeyCodes.End) {
5096
+ else if (event.code === Keys.End) {
5105
5097
  this.updateTabindex(this.focusableItems.length - 1);
5106
5098
  }
5107
5099
  super.handleKeyboardEvent(event);
@@ -5295,22 +5287,6 @@ const FOCUS_SERVICE_PROVIDER = {
5295
5287
  deps: [[new Optional(), new SkipSelf(), FocusService$1], Renderer2],
5296
5288
  };
5297
5289
 
5298
- /*
5299
- * Copyright (c) 2016-2022 VMware, Inc. All Rights Reserved.
5300
- * This software is released under MIT license.
5301
- * The full license information can be found in LICENSE in the root directory of this project.
5302
- */
5303
- const UP_ARROW = 38;
5304
- const DOWN_ARROW = 40;
5305
- const RIGHT_ARROW = 39;
5306
- const LEFT_ARROW = 37;
5307
- const ENTER = 13;
5308
- const SPACE = 32;
5309
- const SHIFT = 16;
5310
- const TAB = 9;
5311
- const ESC = 27;
5312
- const BACKSPACE = 8;
5313
-
5314
5290
  /*
5315
5291
  * Copyright (c) 2016-2022 VMware, Inc. All Rights Reserved.
5316
5292
  * This software is released under MIT license.
@@ -5762,10 +5738,10 @@ class ComboboxFocusHandler {
5762
5738
  // this service is only interested in keys that may move the focus
5763
5739
  handleTextInput(event) {
5764
5740
  let preventDefault = false;
5765
- const key = keyValidator(event.key);
5741
+ const key = normalizeKey(event.key);
5766
5742
  if (event) {
5767
5743
  switch (key) {
5768
- case KeyCodes.Enter:
5744
+ case Keys.Enter:
5769
5745
  if (this.toggleService.open && this.pseudoFocus.model) {
5770
5746
  if (this.selectionService.multiselectable) {
5771
5747
  this.selectionService.toggle(this.pseudoFocus.model.value);
@@ -5776,27 +5752,27 @@ class ComboboxFocusHandler {
5776
5752
  preventDefault = true;
5777
5753
  }
5778
5754
  break;
5779
- case KeyCodes.Space:
5755
+ case Keys.Space:
5780
5756
  if (!this.toggleService.open) {
5781
5757
  this.toggleService.open = true;
5782
5758
  preventDefault = true;
5783
5759
  }
5784
5760
  break;
5785
- case KeyCodes.ArrowUp:
5761
+ case Keys.ArrowUp:
5786
5762
  this.preventViewportScrolling(event);
5787
5763
  this.openAndMoveTo(ArrowKeyDirection.UP);
5788
5764
  preventDefault = true;
5789
5765
  break;
5790
- case KeyCodes.ArrowDown:
5766
+ case Keys.ArrowDown:
5791
5767
  this.preventViewportScrolling(event);
5792
5768
  this.openAndMoveTo(ArrowKeyDirection.DOWN);
5793
5769
  preventDefault = true;
5794
5770
  break;
5795
5771
  default:
5796
5772
  // Any other keypress
5797
- if (event.key !== KeyCodes.Tab &&
5798
- !(this.selectionService.multiselectable && event.key === KeyCodes.Backspace) &&
5799
- !(event.key === KeyCodes.Escape) &&
5773
+ if (event.key !== Keys.Tab &&
5774
+ !(this.selectionService.multiselectable && event.key === Keys.Backspace) &&
5775
+ !(event.key === Keys.Escape) &&
5800
5776
  !this.toggleService.open) {
5801
5777
  this.toggleService.open = true;
5802
5778
  }
@@ -6243,7 +6219,7 @@ class ClrCombobox extends WrappedFormControl {
6243
6219
  }
6244
6220
  onKeyUp(event) {
6245
6221
  // if BACKSPACE in multiselect mode, delete the last pill if text is empty
6246
- if (event.keyCode === BACKSPACE && this.multiSelect && this._searchText.length === 0) {
6222
+ if (event.key === Keys.Backspace && this.multiSelect && this._searchText.length === 0) {
6247
6223
  const multiModel = this.optionSelectionService.selectionModel.model;
6248
6224
  if (multiModel && multiModel.length > 0) {
6249
6225
  const lastItem = multiModel[multiModel.length - 1];
@@ -6985,202 +6961,32 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.2", ngImpor
6985
6961
  * This software is released under MIT license.
6986
6962
  * The full license information can be found in LICENSE in the root directory of this project.
6987
6963
  */
6988
- class FocusTrapTracker {
6989
- constructor() {
6990
- this._previousFocusTraps = [];
6991
- }
6992
- get current() {
6993
- return this._current;
6994
- }
6995
- set current(value) {
6996
- this._previousFocusTraps.push(this._current);
6997
- this._current = value;
6998
- }
6999
- get nbFocusTrappers() {
7000
- return this._previousFocusTraps.length;
7001
- }
7002
- activatePreviousTrapper() {
7003
- this._current = this._previousFocusTraps.pop();
7004
- }
7005
- }
7006
- FocusTrapTracker.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.0.2", ngImport: i0, type: FocusTrapTracker, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
7007
- FocusTrapTracker.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.0.2", ngImport: i0, type: FocusTrapTracker, providedIn: 'root' });
7008
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.2", ngImport: i0, type: FocusTrapTracker, decorators: [{
7009
- type: Injectable,
7010
- args: [{ providedIn: 'root' }]
7011
- }] });
7012
-
7013
- /*
7014
- * Copyright (c) 2016-2022 VMware, Inc. All Rights Reserved.
7015
- * This software is released under MIT license.
7016
- * The full license information can be found in LICENSE in the root directory of this project.
6964
+ /**
6965
+ * This is just a copy of CdkTrapFocus so it can be used independent of the rest of the A11yModule.
7017
6966
  */
7018
- const FOCUSABLES = '[href]:not([tabindex="-1"]), button:not([disabled]):not([tabindex="-1"]), input:not([disabled]):not([tabindex="-1"]), select:not([disabled]):not([tabindex="-1"]), textarea:not([disabled]):not([tabindex="-1"]), [contenteditable="true"]:not([tabindex="-1"]), [tabindex]:not([tabindex="-1"]) ';
7019
- class FocusTrapDirective {
7020
- constructor(el, injector, focusTrapsTracker, renderer, platformId) {
7021
- this.el = el;
7022
- this.injector = injector;
7023
- this.focusTrapsTracker = focusTrapsTracker;
7024
- this.renderer = renderer;
7025
- this.platformId = platformId;
7026
- this.localFocusEscaped = false;
7027
- this._config = {
7028
- strict: true,
7029
- };
7030
- this.document = this.injector.get(DOCUMENT);
7031
- this.focusTrapsTracker.current = this;
7032
- }
7033
- set config(config) {
7034
- this._config = Object.assign(this._config, config === '' ? {} : config);
7035
- }
7036
- onFocusIn(event) {
7037
- const nativeElement = this.el.nativeElement;
7038
- if (this.focusTrapsTracker.current !== this ||
7039
- !isPlatformBrowser(this.platformId) ||
7040
- this.localFocusEscaped ||
7041
- nativeElement.contains(event.target)) {
7042
- return;
7043
- }
7044
- if (event.target === this.topReboundEl && nativeElement.contains(event.relatedTarget)) {
7045
- this.focusLastFocusable();
7046
- // if it fails to focus element inside the trap, focus the trap element.
7047
- this.focusTrapElIfOutside();
7048
- }
7049
- else if (event.target === this.bottomReboundEl && nativeElement.contains(event.relatedTarget)) {
7050
- this.focusFirstFocusable();
7051
- // if it fails to focus element inside the trap, focus the trap element.
7052
- this.focusTrapElIfOutside();
7053
- }
7054
- else {
7055
- this._config.strict ? this.el.nativeElement.focus() : (this.localFocusEscaped = true);
7056
- }
7057
- }
7058
- createFocusableOffScreenEl() {
7059
- // Not using Renderer2's createElement method because that leads to DOM leakage.
7060
- // https://github.com/angular/angular/issues/26954
7061
- const offScreenSpan = this.document.createElement('span');
7062
- this.renderer.setAttribute(offScreenSpan, 'tabindex', '0');
7063
- this.renderer.addClass(offScreenSpan, 'offscreen-focus-rebounder');
7064
- return offScreenSpan;
7065
- }
7066
- addReboundEls() {
7067
- if (isPlatformBrowser(this.platformId)) {
7068
- this.topReboundEl = this.createFocusableOffScreenEl();
7069
- this.bottomReboundEl = this.createFocusableOffScreenEl();
7070
- const hostElement = this.el.nativeElement;
7071
- // Add reboundBeforeTrapEl right outside of host element
7072
- this.renderer.insertBefore(hostElement.parentElement, this.topReboundEl, hostElement);
7073
- // Add reboundAfterTrapEl right after host element
7074
- if (hostElement.nextSibling) {
7075
- this.renderer.insertBefore(hostElement.parentNode, this.bottomReboundEl, hostElement.nextSibling);
7076
- }
7077
- else {
7078
- this.renderer.appendChild(hostElement.parentNode, this.bottomReboundEl);
7079
- }
7080
- }
7081
- }
7082
- removeReboundEls() {
7083
- if (isPlatformBrowser(this.platformId) && this.topReboundEl && this.bottomReboundEl) {
7084
- this.parentElement.removeChild(this.topReboundEl);
7085
- this.parentElement.removeChild(this.bottomReboundEl);
7086
- // These are here to to make sure that
7087
- // we completely delete all traces of the removed DOM objects.
7088
- delete this.topReboundEl;
7089
- delete this.bottomReboundEl;
7090
- }
7091
- }
7092
- setPreviousFocus() {
7093
- if (this.previousActiveElement && this.previousActiveElement.focus) {
7094
- this.previousActiveElement.focus();
7095
- }
7096
- }
7097
- ngOnInit() {
7098
- if (isPlatformBrowser(this.platformId)) {
7099
- this.renderer.setAttribute(this.el.nativeElement, 'tabindex', '-1');
7100
- this.el.nativeElement.focus();
7101
- }
7102
- }
7103
- ngAfterViewInit() {
7104
- if (isPlatformBrowser(this.platformId)) {
7105
- this.previousActiveElement = this.document.activeElement;
7106
- this.parentElement = this.el.nativeElement.parentElement;
7107
- }
7108
- this.addReboundEls();
7109
- }
7110
- get potentiallyFocusableEls() {
7111
- return [...this.el.nativeElement.querySelectorAll(FOCUSABLES)];
7112
- }
7113
- focusFirstFocusable() {
7114
- for (let i = 0; i < this.potentiallyFocusableEls.length; i++) {
7115
- this.firstFocusableEl = this.focusElement(this.potentiallyFocusableEls[i]);
7116
- if (this.firstFocusableEl) {
7117
- break;
7118
- }
7119
- }
7120
- }
7121
- focusLastFocusable() {
7122
- for (let i = this.potentiallyFocusableEls.length - 1; i >= 0; i--) {
7123
- this.lastFocusableEl = this.focusElement(this.potentiallyFocusableEls[i]);
7124
- if (this.lastFocusableEl) {
7125
- break;
7126
- }
7127
- }
7128
- }
7129
- focusTrapElIfOutside() {
7130
- if (!this.el.nativeElement.contains(document.activeElement)) {
7131
- this.el.nativeElement.focus();
7132
- }
7133
- }
7134
- focusElement(el) {
7135
- if (el && el.focus) {
7136
- el.focus();
7137
- if (document.activeElement === el) {
7138
- return el;
7139
- }
7140
- }
7141
- return null;
7142
- }
7143
- ngOnDestroy() {
7144
- this.removeReboundEls();
7145
- this.setPreviousFocus();
7146
- this.focusTrapsTracker.activatePreviousTrapper();
7147
- }
6967
+ class CdkTrapFocusModule_CdkTrapFocus extends CdkTrapFocus {
7148
6968
  }
7149
- FocusTrapDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.0.2", ngImport: i0, type: FocusTrapDirective, deps: [{ token: i0.ElementRef }, { token: i0.Injector }, { token: FocusTrapTracker }, { token: i0.Renderer2 }, { token: PLATFORM_ID }], target: i0.ɵɵFactoryTarget.Directive });
7150
- FocusTrapDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "15.0.2", type: FocusTrapDirective, selector: "[clrFocusTrap]", inputs: { config: ["clrFocusTrap", "config"] }, host: { listeners: { "document:focusin": "onFocusIn($event)" } }, ngImport: i0 });
7151
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.2", ngImport: i0, type: FocusTrapDirective, decorators: [{
6969
+ CdkTrapFocusModule_CdkTrapFocus.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.0.2", ngImport: i0, type: CdkTrapFocusModule_CdkTrapFocus, deps: null, target: i0.ɵɵFactoryTarget.Directive });
6970
+ CdkTrapFocusModule_CdkTrapFocus.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "15.0.2", type: CdkTrapFocusModule_CdkTrapFocus, selector: "[cdkTrapFocus]", usesInheritance: true, ngImport: i0 });
6971
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.2", ngImport: i0, type: CdkTrapFocusModule_CdkTrapFocus, decorators: [{
7152
6972
  type: Directive,
7153
6973
  args: [{
7154
- selector: '[clrFocusTrap]',
6974
+ selector: '[cdkTrapFocus]',
7155
6975
  }]
7156
- }], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: i0.Injector }, { type: FocusTrapTracker }, { type: i0.Renderer2 }, { type: undefined, decorators: [{
7157
- type: Inject,
7158
- args: [PLATFORM_ID]
7159
- }] }]; }, propDecorators: { config: [{
7160
- type: Input,
7161
- args: ['clrFocusTrap']
7162
- }], onFocusIn: [{
7163
- type: HostListener,
7164
- args: ['document:focusin', ['$event']]
7165
- }] } });
7166
-
7167
- /*
7168
- * Copyright (c) 2016-2022 VMware, Inc. All Rights Reserved.
7169
- * This software is released under MIT license.
7170
- * The full license information can be found in LICENSE in the root directory of this project.
6976
+ }] });
6977
+ /**
6978
+ * This module allows us to avoid importing all of A11yModule which results in a smaller application bundle.
7171
6979
  */
7172
- const FOCUS_TRAP_DIRECTIVES = [FocusTrapDirective];
7173
- class ClrFocusTrapModule {
6980
+ class CdkTrapFocusModule {
7174
6981
  }
7175
- ClrFocusTrapModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.0.2", ngImport: i0, type: ClrFocusTrapModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
7176
- ClrFocusTrapModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "15.0.2", ngImport: i0, type: ClrFocusTrapModule, declarations: [FocusTrapDirective], imports: [CommonModule], exports: [FocusTrapDirective] });
7177
- ClrFocusTrapModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "15.0.2", ngImport: i0, type: ClrFocusTrapModule, imports: [CommonModule] });
7178
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.2", ngImport: i0, type: ClrFocusTrapModule, decorators: [{
6982
+ CdkTrapFocusModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.0.2", ngImport: i0, type: CdkTrapFocusModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
6983
+ CdkTrapFocusModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "15.0.2", ngImport: i0, type: CdkTrapFocusModule, declarations: [CdkTrapFocusModule_CdkTrapFocus], exports: [CdkTrapFocusModule_CdkTrapFocus] });
6984
+ CdkTrapFocusModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "15.0.2", ngImport: i0, type: CdkTrapFocusModule });
6985
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.2", ngImport: i0, type: CdkTrapFocusModule, decorators: [{
7179
6986
  type: NgModule,
7180
6987
  args: [{
7181
- imports: [CommonModule],
7182
- declarations: [FOCUS_TRAP_DIRECTIVES],
7183
- exports: [FOCUS_TRAP_DIRECTIVES],
6988
+ declarations: [CdkTrapFocusModule_CdkTrapFocus],
6989
+ exports: [CdkTrapFocusModule_CdkTrapFocus],
7184
6990
  }]
7185
6991
  }] });
7186
6992
 
@@ -8181,20 +7987,20 @@ class ClrCalendar {
8181
7987
  */
8182
7988
  onKeyDown(event) {
8183
7989
  if (event && this.focusedDay) {
8184
- switch (event.keyCode) {
8185
- case UP_ARROW:
7990
+ switch (normalizeKey(event.key)) {
7991
+ case Keys.ArrowUp:
8186
7992
  event.preventDefault();
8187
7993
  this._dateNavigationService.incrementFocusDay(-1 * NO_OF_DAYS_IN_A_WEEK);
8188
7994
  break;
8189
- case DOWN_ARROW:
7995
+ case Keys.ArrowDown:
8190
7996
  event.preventDefault();
8191
7997
  this._dateNavigationService.incrementFocusDay(NO_OF_DAYS_IN_A_WEEK);
8192
7998
  break;
8193
- case LEFT_ARROW:
7999
+ case Keys.ArrowLeft:
8194
8000
  event.preventDefault();
8195
8001
  this._dateNavigationService.incrementFocusDay(-1);
8196
8002
  break;
8197
- case RIGHT_ARROW:
8003
+ case Keys.ArrowRight:
8198
8004
  event.preventDefault();
8199
8005
  this._dateNavigationService.incrementFocusDay(1);
8200
8006
  break;
@@ -8377,23 +8183,23 @@ class ClrMonthpicker {
8377
8183
  // the logic is fairly simple and it didn't make sense for me
8378
8184
  // to create extra observables just to move this logic to the service.
8379
8185
  if (event) {
8380
- const keyCode = event.keyCode;
8381
- if (keyCode === UP_ARROW && this._focusedMonthIndex > 0) {
8186
+ const key = normalizeKey(event.key);
8187
+ if (key === Keys.ArrowUp && this._focusedMonthIndex > 0) {
8382
8188
  event.preventDefault();
8383
8189
  this._focusedMonthIndex--;
8384
8190
  this._datepickerFocusService.focusCell(this._elRef);
8385
8191
  }
8386
- else if (keyCode === DOWN_ARROW && this._focusedMonthIndex < 11) {
8192
+ else if (key === Keys.ArrowDown && this._focusedMonthIndex < 11) {
8387
8193
  event.preventDefault();
8388
8194
  this._focusedMonthIndex++;
8389
8195
  this._datepickerFocusService.focusCell(this._elRef);
8390
8196
  }
8391
- else if (keyCode === RIGHT_ARROW && this._focusedMonthIndex < 6) {
8197
+ else if (key === Keys.ArrowRight && this._focusedMonthIndex < 6) {
8392
8198
  event.preventDefault();
8393
8199
  this._focusedMonthIndex = this._focusedMonthIndex + 6;
8394
8200
  this._datepickerFocusService.focusCell(this._elRef);
8395
8201
  }
8396
- else if (keyCode === LEFT_ARROW && this._focusedMonthIndex > 5) {
8202
+ else if (key === Keys.ArrowLeft && this._focusedMonthIndex > 5) {
8397
8203
  event.preventDefault();
8398
8204
  this._focusedMonthIndex = this._focusedMonthIndex - 6;
8399
8205
  this._datepickerFocusService.focusCell(this._elRef);
@@ -8597,20 +8403,20 @@ class ClrYearpicker {
8597
8403
  // the logic is fairly simple and it didn't make sense for me
8598
8404
  // to create extra observables just to move this logic to the service.
8599
8405
  if (event) {
8600
- const keyCode = event.keyCode;
8601
- if (keyCode === UP_ARROW) {
8406
+ const key = normalizeKey(event.key);
8407
+ if (key === Keys.ArrowUp) {
8602
8408
  event.preventDefault();
8603
8409
  this.incrementFocusYearBy(-1);
8604
8410
  }
8605
- else if (keyCode === DOWN_ARROW) {
8411
+ else if (key === Keys.ArrowDown) {
8606
8412
  event.preventDefault();
8607
8413
  this.incrementFocusYearBy(1);
8608
8414
  }
8609
- else if (keyCode === RIGHT_ARROW) {
8415
+ else if (key === Keys.ArrowRight) {
8610
8416
  event.preventDefault();
8611
8417
  this.incrementFocusYearBy(5);
8612
8418
  }
8613
- else if (keyCode === LEFT_ARROW) {
8419
+ else if (key === Keys.ArrowLeft) {
8614
8420
  event.preventDefault();
8615
8421
  this.incrementFocusYearBy(-5);
8616
8422
  }
@@ -8904,11 +8710,11 @@ class ClrDateContainer extends ClrAbstractContainer {
8904
8710
  getToggleButtonLabel(day) {
8905
8711
  if (day) {
8906
8712
  const formattedDate = this.dateIOService.toLocaleDisplayFormatString(day.toDate());
8907
- return (this.commonStrings.parse(this.commonStrings.keys.datepickerToggleChangeDateLabel, {
8713
+ return this.commonStrings.parse(this.commonStrings.keys.datepickerToggleChangeDateLabel, {
8908
8714
  SELECTED_DATE: formattedDate,
8909
- }) || this.commonStrings.keys.datepickerToggle);
8715
+ });
8910
8716
  }
8911
- return this.commonStrings.keys.datepickerToggleChooseDateLabel || this.commonStrings.keys.datepickerToggle;
8717
+ return this.commonStrings.keys.datepickerToggleChooseDateLabel;
8912
8718
  }
8913
8719
  listenForDateChanges() {
8914
8720
  // because date-input.ts initializes the input in ngAfterViewInit,
@@ -8965,7 +8771,7 @@ ClrDateContainer.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", versi
8965
8771
  </button>
8966
8772
  <clr-datepicker-view-manager
8967
8773
  *clrPopoverContent="open; at: popoverPosition; outsideClickToClose: true; scrollToClose: true"
8968
- clrFocusTrap
8774
+ cdkTrapFocus
8969
8775
  ></clr-datepicker-view-manager>
8970
8776
  </div>
8971
8777
  <cds-icon
@@ -8987,7 +8793,7 @@ ClrDateContainer.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", versi
8987
8793
  <ng-content select="clr-control-error" *ngIf="showInvalid"></ng-content>
8988
8794
  <ng-content select="clr-control-success" *ngIf="showValid"></ng-content>
8989
8795
  </div>
8990
- `, isInline: true, dependencies: [{ kind: "directive", type: i5.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: ClrPopoverAnchor, selector: "[clrPopoverAnchor]" }, { kind: "directive", type: ClrPopoverOpenCloseButton, selector: "[clrPopoverOpenCloseButton]", outputs: ["clrPopoverOpenCloseChange"] }, { kind: "directive", type: ClrPopoverContent, selector: "[clrPopoverContent]", inputs: ["clrPopoverContent", "clrPopoverContentAt", "clrPopoverContentOutsideClickToClose", "clrPopoverContentScrollToClose"] }, { kind: "directive", type: CdsIconCustomTag, selector: "cds-icon" }, { kind: "directive", type: FocusTrapDirective, selector: "[clrFocusTrap]", inputs: ["clrFocusTrap"] }, { kind: "directive", type: ClrLabel, selector: "label", inputs: ["for"] }, { kind: "component", type: ClrDatepickerViewManager, selector: "clr-datepicker-view-manager" }] });
8796
+ `, isInline: true, dependencies: [{ kind: "directive", type: i5.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: CdkTrapFocusModule_CdkTrapFocus, selector: "[cdkTrapFocus]" }, { kind: "directive", type: ClrPopoverAnchor, selector: "[clrPopoverAnchor]" }, { kind: "directive", type: ClrPopoverOpenCloseButton, selector: "[clrPopoverOpenCloseButton]", outputs: ["clrPopoverOpenCloseChange"] }, { kind: "directive", type: ClrPopoverContent, selector: "[clrPopoverContent]", inputs: ["clrPopoverContent", "clrPopoverContentAt", "clrPopoverContentOutsideClickToClose", "clrPopoverContentScrollToClose"] }, { kind: "directive", type: CdsIconCustomTag, selector: "cds-icon" }, { kind: "directive", type: ClrLabel, selector: "label", inputs: ["for"] }, { kind: "component", type: ClrDatepickerViewManager, selector: "clr-datepicker-view-manager" }] });
8991
8797
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.2", ngImport: i0, type: ClrDateContainer, decorators: [{
8992
8798
  type: Component,
8993
8799
  args: [{
@@ -9011,7 +8817,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.2", ngImpor
9011
8817
  </button>
9012
8818
  <clr-datepicker-view-manager
9013
8819
  *clrPopoverContent="open; at: popoverPosition; outsideClickToClose: true; scrollToClose: true"
9014
- clrFocusTrap
8820
+ cdkTrapFocus
9015
8821
  ></clr-datepicker-view-manager>
9016
8822
  </div>
9017
8823
  <cds-icon
@@ -9401,11 +9207,11 @@ ClrDatepickerModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", ver
9401
9207
  ClrYearpicker,
9402
9208
  ClrDaypicker,
9403
9209
  ClrCalendar], imports: [CommonModule,
9210
+ CdkTrapFocusModule,
9404
9211
  ClrHostWrappingModule,
9405
9212
  ClrConditionalModule,
9406
9213
  ClrPopoverModuleNext,
9407
9214
  ClrIconModule,
9408
- ClrFocusTrapModule,
9409
9215
  ClrCommonFormsModule], exports: [ClrDay,
9410
9216
  ClrDateContainer,
9411
9217
  ClrDateInput,
@@ -9416,22 +9222,22 @@ ClrDatepickerModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", ver
9416
9222
  ClrDaypicker,
9417
9223
  ClrCalendar] });
9418
9224
  ClrDatepickerModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "15.0.2", ngImport: i0, type: ClrDatepickerModule, imports: [CommonModule,
9225
+ CdkTrapFocusModule,
9419
9226
  ClrHostWrappingModule,
9420
9227
  ClrConditionalModule,
9421
9228
  ClrPopoverModuleNext,
9422
9229
  ClrIconModule,
9423
- ClrFocusTrapModule,
9424
9230
  ClrCommonFormsModule] });
9425
9231
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.2", ngImport: i0, type: ClrDatepickerModule, decorators: [{
9426
9232
  type: NgModule,
9427
9233
  args: [{
9428
9234
  imports: [
9429
9235
  CommonModule,
9236
+ CdkTrapFocusModule,
9430
9237
  ClrHostWrappingModule,
9431
9238
  ClrConditionalModule,
9432
9239
  ClrPopoverModuleNext,
9433
9240
  ClrIconModule,
9434
- ClrFocusTrapModule,
9435
9241
  ClrCommonFormsModule,
9436
9242
  ],
9437
9243
  declarations: [CLR_DATEPICKER_DIRECTIVES],
@@ -10445,959 +10251,58 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.2", ngImpor
10445
10251
  * This software is released under MIT license.
10446
10252
  * The full license information can be found in LICENSE in the root directory of this project.
10447
10253
  */
10448
- const EXPANDABLE_ANIMATION_DIRECTIVES = [ClrExpandableAnimation];
10449
-
10450
- /*
10451
- * Copyright (c) 2016-2022 VMware, Inc. All Rights Reserved.
10452
- * This software is released under MIT license.
10453
- * The full license information can be found in LICENSE in the root directory of this project.
10454
- */
10455
- class ClrExpandableAnimationModule {
10456
- }
10457
- ClrExpandableAnimationModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.0.2", ngImport: i0, type: ClrExpandableAnimationModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
10458
- ClrExpandableAnimationModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "15.0.2", ngImport: i0, type: ClrExpandableAnimationModule, declarations: [ClrExpandableAnimation], imports: [CommonModule], exports: [ClrExpandableAnimation] });
10459
- ClrExpandableAnimationModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "15.0.2", ngImport: i0, type: ClrExpandableAnimationModule, imports: [CommonModule] });
10460
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.2", ngImport: i0, type: ClrExpandableAnimationModule, decorators: [{
10461
- type: NgModule,
10462
- args: [{
10463
- imports: [CommonModule],
10464
- declarations: [EXPANDABLE_ANIMATION_DIRECTIVES],
10465
- exports: [EXPANDABLE_ANIMATION_DIRECTIVES],
10466
- }]
10467
- }] });
10468
-
10469
- /*
10470
- * Copyright (c) 2016-2022 VMware, Inc. All Rights Reserved.
10471
- * This software is released under MIT license.
10472
- * The full license information can be found in LICENSE in the root directory of this project.
10473
- */
10474
- var DragEventType;
10475
- (function (DragEventType) {
10476
- DragEventType[DragEventType["DRAG_START"] = 0] = "DRAG_START";
10477
- DragEventType[DragEventType["DRAG_MOVE"] = 1] = "DRAG_MOVE";
10478
- DragEventType[DragEventType["DRAG_END"] = 2] = "DRAG_END";
10479
- DragEventType[DragEventType["DRAG_ENTER"] = 3] = "DRAG_ENTER";
10480
- DragEventType[DragEventType["DRAG_LEAVE"] = 4] = "DRAG_LEAVE";
10481
- DragEventType[DragEventType["DROP"] = 5] = "DROP";
10482
- })(DragEventType || (DragEventType = {}));
10483
-
10484
- /*
10485
- * Copyright (c) 2016-2022 VMware, Inc. All Rights Reserved.
10486
- * This software is released under MIT license.
10487
- * The full license information can be found in LICENSE in the root directory of this project.
10488
- */
10489
- class DragAndDropEventBusService {
10490
- constructor() {
10491
- this.dragStart = new Subject();
10492
- this.dragMove = new Subject();
10493
- this.dragEnd = new Subject();
10494
- this.drop = new Subject();
10495
- }
10496
- get dragStarted() {
10497
- return this.dragStart.asObservable();
10498
- }
10499
- get dragMoved() {
10500
- return this.dragMove.asObservable();
10501
- }
10502
- get dragEnded() {
10503
- return this.dragEnd.asObservable();
10504
- }
10505
- get dropped() {
10506
- return this.drop.asObservable();
10507
- }
10508
- broadcast(event) {
10509
- switch (event.type) {
10510
- case DragEventType.DRAG_START:
10511
- this.dragStart.next(event);
10512
- break;
10513
- case DragEventType.DRAG_MOVE:
10514
- this.dragMove.next(event);
10515
- break;
10516
- case DragEventType.DRAG_END:
10517
- this.dragEnd.next(event);
10518
- break;
10519
- case DragEventType.DROP:
10520
- this.drop.next(event);
10521
- break;
10522
- default:
10523
- break;
10524
- }
10525
- }
10526
- }
10527
- DragAndDropEventBusService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.0.2", ngImport: i0, type: DragAndDropEventBusService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
10528
- DragAndDropEventBusService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.0.2", ngImport: i0, type: DragAndDropEventBusService, providedIn: 'root' });
10529
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.2", ngImport: i0, type: DragAndDropEventBusService, decorators: [{
10530
- type: Injectable,
10531
- args: [{ providedIn: 'root' }]
10532
- }] });
10533
-
10534
- /*
10535
- * Copyright (c) 2016-2022 VMware, Inc. All Rights Reserved.
10536
- * This software is released under MIT license.
10537
- * The full license information can be found in LICENSE in the root directory of this project.
10538
- */
10539
- class DragEventListenerService {
10540
- constructor(ngZone, renderer, eventBus) {
10541
- this.ngZone = ngZone;
10542
- this.renderer = renderer;
10543
- this.eventBus = eventBus;
10544
- // contains listeners for the starting events such as mousedown and touchstart
10545
- this.listeners = [];
10546
- this.dragStart = new Subject();
10547
- this.dragMove = new Subject();
10548
- this.dragEnd = new Subject();
10549
- this.hasDragStarted = false;
10550
- this.dragStartDelay = 0;
10551
- }
10552
- get dragStarted() {
10553
- return this.dragStart.asObservable();
10554
- }
10555
- get dragMoved() {
10556
- return this.dragMove.asObservable();
10557
- }
10558
- get dragEnded() {
10559
- return this.dragEnd.asObservable();
10560
- }
10561
- get dragStartPosition() {
10562
- return this.initialPosition;
10563
- }
10564
- attachDragListeners(draggableEl) {
10565
- this.draggableEl = draggableEl;
10566
- this.listeners.push(this.customDragEvent(this.draggableEl, 'mousedown', 'mousemove', 'mouseup'));
10567
- this.listeners.push(this.customDragEvent(this.draggableEl, 'touchstart', 'touchmove', 'touchend'));
10568
- }
10569
- detachDragListeners() {
10570
- if (this.listeners) {
10571
- this.listeners.map(event => event());
10572
- }
10573
- // In most cases, once users start dragging with mousedown/touchstart events,
10574
- // they will end dragging at one point with mouseup/touchend.
10575
- // However, there might be a few cases where mousedown/touchstart events get registered,
10576
- // but the draggable element gets removed before user ends dragging.
10577
- // In that case, we need to remove the attached listeners that happened during the mousedown/touchstart events.
10578
- if (this.nestedListeners) {
10579
- this.nestedListeners.map(event => event());
10580
- }
10581
- if (this.checkDragStartBoundaryListener) {
10582
- this.checkDragStartBoundaryListener();
10583
- }
10584
- }
10585
- getNativeEventObject(event) {
10586
- if (Object.prototype.hasOwnProperty.call(event, 'changedTouches')) {
10587
- return event.changedTouches[0];
10588
- }
10589
- else {
10590
- return event;
10591
- }
10592
- }
10593
- customDragEvent(element, startOnEvent, moveOnEvent, endOnEvent) {
10594
- return this.renderer.listen(element, startOnEvent, (startEvent) => {
10595
- // save the initial point to initialPosition
10596
- // this will be used to calculate how far the draggable has been dragged from its initial position
10597
- this.initialPosition = {
10598
- pageX: this.getNativeEventObject(startEvent).pageX,
10599
- pageY: this.getNativeEventObject(startEvent).pageY,
10600
- };
10601
- // Initialize nested listeners' property with a new empty array;
10602
- this.nestedListeners = [];
10603
- // Listen to selectstart/mousemove/touchmove events outside of angular zone.
10604
- this.ngZone.runOutsideAngular(() => {
10605
- // This is needed to disable selection during dragging (especially in EDGE/IE11).
10606
- this.nestedListeners.push(this.renderer.listen('document', 'selectstart', (selectEvent) => {
10607
- selectEvent.preventDefault();
10608
- selectEvent.stopImmediatePropagation();
10609
- }));
10610
- // During the drag start delay, pointer should stay within the boundary.
10611
- this.checkDragStartBoundary(moveOnEvent);
10612
- this.dragStartDelayTimeout = setTimeout(() => {
10613
- if (this.checkDragStartBoundaryListener) {
10614
- this.checkDragStartBoundaryListener();
10615
- }
10616
- this.hasDragStarted = true;
10617
- // Fire "dragstart"
10618
- this.broadcast(startEvent, DragEventType.DRAG_START);
10619
- this.nestedListeners.push(this.renderer.listen('document', moveOnEvent, (moveEvent) => {
10620
- // Event.stopImmediatePropagation() is needed here to prevent nested draggables from getting dragged
10621
- // altogether. We shouldn't use Event.stopPropagation() here as we are listening to the events
10622
- // on the global element level.
10623
- // With Event.stopImmediatePropagation(), it registers the events sent from the inner most draggable
10624
- // first. Then immediately after that, it stops listening to the same type of events on the same
10625
- // element. So this will help us to not register the same events that would come from the parent
10626
- // level draggables eventually.
10627
- moveEvent.stopImmediatePropagation();
10628
- if (this.hasDragStarted) {
10629
- // Fire "dragmove"
10630
- this.broadcast(moveEvent, DragEventType.DRAG_MOVE);
10631
- }
10632
- }));
10633
- }, this.dragStartDelay);
10634
- });
10635
- // Listen to mouseup/touchend events.
10636
- this.nestedListeners.push(this.renderer.listen('document', endOnEvent, (endEvent) => {
10637
- if (this.hasDragStarted) {
10638
- // Fire "dragend" only if dragstart is registered
10639
- this.hasDragStarted = false;
10640
- this.broadcast(endEvent, DragEventType.DRAG_END);
10641
- }
10642
- clearTimeout(this.dragStartDelayTimeout);
10643
- // We must remove the the nested listeners every time drag completes.
10644
- this.nestedListeners.map(event => event());
10645
- // We must remove the event listener from checkDragStartBoundary
10646
- if (this.checkDragStartBoundaryListener) {
10647
- this.checkDragStartBoundaryListener();
10648
- }
10649
- }));
10650
- });
10651
- }
10652
- checkDragStartBoundary(eventType) {
10653
- this.checkDragStartBoundaryListener = this.renderer.listen('document', eventType, (moveEvent) => {
10654
- const deltaX = Math.abs(this.getNativeEventObject(moveEvent).pageX - this.initialPosition.pageX);
10655
- const deltaY = Math.abs(this.getNativeEventObject(moveEvent).pageY - this.initialPosition.pageY);
10656
- // If pointer move delta exceeds horizontal or vertical threshold,
10657
- // we should cancel drag initiation.
10658
- if (deltaX > 1 || deltaY > 1) {
10659
- clearTimeout(this.dragStartDelayTimeout);
10660
- if (this.checkDragStartBoundaryListener) {
10661
- this.checkDragStartBoundaryListener();
10662
- }
10663
- }
10664
- });
10665
- }
10666
- broadcast(event, eventType) {
10667
- const dragEvent = this.generateDragEvent(event, eventType);
10668
- switch (dragEvent.type) {
10669
- case DragEventType.DRAG_START:
10670
- this.dragStart.next(dragEvent);
10671
- break;
10672
- case DragEventType.DRAG_MOVE:
10673
- this.dragMove.next(dragEvent);
10674
- break;
10675
- case DragEventType.DRAG_END:
10676
- this.dragEnd.next(dragEvent);
10677
- break;
10678
- default:
10679
- break;
10680
- }
10681
- // The following properties are set after they are broadcasted to the DraggableGhost component.
10682
- dragEvent.ghostElement = this.ghostElement;
10683
- dragEvent.dropPointPosition = this.dropPointPosition;
10684
- this.eventBus.broadcast(dragEvent);
10685
- }
10686
- generateDragEvent(event, eventType) {
10687
- const nativeEvent = this.getNativeEventObject(event);
10688
- return {
10689
- type: eventType,
10690
- dragPosition: {
10691
- pageX: nativeEvent.pageX,
10692
- pageY: nativeEvent.pageY,
10693
- moveX: nativeEvent.pageX - this.initialPosition.pageX,
10694
- moveY: nativeEvent.pageY - this.initialPosition.pageY,
10695
- },
10696
- group: this.group,
10697
- dragDataTransfer: this.dragDataTransfer,
10698
- ghostElement: this.ghostElement,
10699
- };
10700
- }
10701
- }
10702
- DragEventListenerService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.0.2", ngImport: i0, type: DragEventListenerService, deps: [{ token: i0.NgZone }, { token: i0.Renderer2 }, { token: DragAndDropEventBusService }], target: i0.ɵɵFactoryTarget.Injectable });
10703
- DragEventListenerService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.0.2", ngImport: i0, type: DragEventListenerService });
10704
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.2", ngImport: i0, type: DragEventListenerService, decorators: [{
10705
- type: Injectable
10706
- }], ctorParameters: function () { return [{ type: i0.NgZone }, { type: i0.Renderer2 }, { type: DragAndDropEventBusService }]; } });
10707
-
10708
- /*
10709
- * Copyright (c) 2016-2022 VMware, Inc. All Rights Reserved.
10710
- * This software is released under MIT license.
10711
- * The full license information can be found in LICENSE in the root directory of this project.
10712
- */
10713
- // This provider registers the drag handle element.
10714
- // When it registers a element as a drag handle, it attaches that element to the listeners from ClrDragEventListener.
10715
- // Also, it adds the "drag-handle" css class to the registered element through Renderer.
10716
- class DragHandleRegistrarService {
10717
- constructor(dragEventListener, renderer) {
10718
- this.dragEventListener = dragEventListener;
10719
- this.renderer = renderer;
10720
- }
10721
- get defaultHandleEl() {
10722
- return this._defaultHandleEl;
10723
- }
10724
- set defaultHandleEl(el) {
10725
- this._defaultHandleEl = el; // defaultHandleEl will be usually the clrDraggable element.
10726
- // If the customHandleEl has been registered,
10727
- // don't make the defaultHandleEl the drag handle yet until the customHandleEl is unregistered.
10728
- if (!this._customHandleEl) {
10729
- this.makeElementHandle(this._defaultHandleEl);
10730
- }
10731
- }
10732
- makeElementHandle(el) {
10733
- if (this._defaultHandleEl && this._defaultHandleEl !== el) {
10734
- // Before making an element the custom handle element,
10735
- // we should remove the existing drag-handle class from the draggable element.
10736
- this.renderer.removeClass(this._defaultHandleEl, 'drag-handle');
10737
- }
10738
- this.dragEventListener.attachDragListeners(el);
10739
- this.renderer.addClass(el, 'drag-handle');
10740
- }
10741
- get customHandleEl() {
10742
- return this._customHandleEl;
10743
- }
10744
- registerCustomHandle(el) {
10745
- this.dragEventListener.detachDragListeners(); // removes the existing listeners
10746
- this._customHandleEl = el;
10747
- this.makeElementHandle(this._customHandleEl);
10748
- }
10749
- unregisterCustomHandle() {
10750
- this.dragEventListener.detachDragListeners(); // removes the existing listeners
10751
- this.renderer.removeClass(this._customHandleEl, 'drag-handle');
10752
- delete this._customHandleEl;
10753
- // if default handle is set, make that handle
10754
- if (this._defaultHandleEl) {
10755
- this.makeElementHandle(this._defaultHandleEl);
10756
- }
10757
- }
10758
- }
10759
- DragHandleRegistrarService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.0.2", ngImport: i0, type: DragHandleRegistrarService, deps: [{ token: DragEventListenerService }, { token: i0.Renderer2 }], target: i0.ɵɵFactoryTarget.Injectable });
10760
- DragHandleRegistrarService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.0.2", ngImport: i0, type: DragHandleRegistrarService });
10761
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.2", ngImport: i0, type: DragHandleRegistrarService, decorators: [{
10762
- type: Injectable
10763
- }], ctorParameters: function () { return [{ type: DragEventListenerService }, { type: i0.Renderer2 }]; } });
10764
-
10765
- /*
10766
- * Copyright (c) 2016-2022 VMware, Inc. All Rights Reserved.
10767
- * This software is released under MIT license.
10768
- * The full license information can be found in LICENSE in the root directory of this project.
10769
- */
10770
- class ClrDragHandle {
10771
- constructor(el, dragHandleRegistrar) {
10772
- this.el = el;
10773
- this.dragHandleRegistrar = dragHandleRegistrar;
10774
- if (!this.dragHandleRegistrar) {
10775
- // ClrDragHandleRegistrar is provided in ClrDraggable so we expect it to be present here
10776
- // as clrDragHandle is required to be used only inside of a clrDraggable directive.
10777
- throw new Error('The clrDragHandle directive can only be used inside of a clrDraggable directive.');
10778
- }
10779
- this.dragHandleRegistrar.registerCustomHandle(this.el.nativeElement);
10780
- }
10781
- ngOnDestroy() {
10782
- this.dragHandleRegistrar.unregisterCustomHandle();
10783
- }
10784
- }
10785
- ClrDragHandle.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.0.2", ngImport: i0, type: ClrDragHandle, deps: [{ token: i0.ElementRef }, { token: DragHandleRegistrarService, optional: true }], target: i0.ɵɵFactoryTarget.Directive });
10786
- ClrDragHandle.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "15.0.2", type: ClrDragHandle, selector: "[clrDragHandle]", host: { properties: { "class.drag-handle": "true" } }, ngImport: i0 });
10787
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.2", ngImport: i0, type: ClrDragHandle, decorators: [{
10788
- type: Directive,
10789
- args: [{
10790
- selector: '[clrDragHandle]',
10791
- host: { '[class.drag-handle]': 'true' },
10792
- }]
10793
- }], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: DragHandleRegistrarService, decorators: [{
10794
- type: Optional
10795
- }] }]; } });
10796
-
10797
- /*
10798
- * Copyright (c) 2016-2022 VMware, Inc. All Rights Reserved.
10799
- * This software is released under MIT license.
10800
- * The full license information can be found in LICENSE in the root directory of this project.
10801
- */
10802
- // This service is used to capture the state of clrDraggable element
10803
- // at a certain event and passes it to clrDraggableGhost component.
10804
- class DraggableSnapshotService {
10805
- constructor(domAdapter) {
10806
- this.domAdapter = domAdapter;
10807
- }
10808
- capture(el, event) {
10809
- this.draggableElClientRect = this.domAdapter.clientRect(el);
10810
- this.snapshotDragEvent = event;
10811
- }
10812
- discard() {
10813
- delete this.draggableElClientRect;
10814
- delete this.snapshotDragEvent;
10815
- }
10816
- get hasDraggableState() {
10817
- return !!this.snapshotDragEvent && !!this.draggableElClientRect;
10818
- }
10819
- get clientRect() {
10820
- return this.draggableElClientRect;
10821
- }
10822
- get dragEvent() {
10823
- return this.snapshotDragEvent;
10824
- }
10825
- }
10826
- DraggableSnapshotService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.0.2", ngImport: i0, type: DraggableSnapshotService, deps: [{ token: DomAdapter }], target: i0.ɵɵFactoryTarget.Injectable });
10827
- DraggableSnapshotService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.0.2", ngImport: i0, type: DraggableSnapshotService });
10828
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.2", ngImport: i0, type: DraggableSnapshotService, decorators: [{
10829
- type: Injectable
10830
- }], ctorParameters: function () { return [{ type: DomAdapter }]; } });
10831
-
10832
- /*
10833
- * Copyright (c) 2016-2022 VMware, Inc. All Rights Reserved.
10834
- * This software is released under MIT license.
10835
- * The full license information can be found in LICENSE in the root directory of this project.
10836
- */
10837
- class ClrDraggableGhost {
10838
- constructor(el, dragEventListener, draggableSnapshot, renderer, ngZone) {
10839
- this.el = el;
10840
- this.dragEventListener = dragEventListener;
10841
- this.draggableSnapshot = draggableSnapshot;
10842
- this.renderer = renderer;
10843
- this.ngZone = ngZone;
10844
- this.subscriptions = [];
10845
- this.leaveAnimConfig = { value: 0, params: { top: '0px', left: '0px' } };
10846
- if (!this.dragEventListener || !this.draggableSnapshot) {
10847
- throw new Error('The clr-draggable-ghost component can only be used inside of a clrDraggable directive.');
10848
- }
10849
- this.draggableGhostEl = this.el.nativeElement;
10850
- // Need to use Renderer2 as it runs outside of NgZone
10851
- this.renderer.addClass(this.draggableGhostEl, 'draggable-ghost');
10852
- // Register the ghost element in DragEventListener to pass in a ClrDragEvent.
10853
- this.dragEventListener.ghostElement = this.draggableGhostEl;
10854
- // Default ghost size gets the size of ClrDraggable element.
10855
- this.setDefaultGhostSize(this.draggableGhostEl);
10856
- const offset = {
10857
- top: this.draggableSnapshot.hasDraggableState
10858
- ? this.draggableSnapshot.dragEvent.dragPosition.pageY - this.draggableSnapshot.clientRect.top
10859
- : 0,
10860
- left: this.draggableSnapshot.hasDraggableState
10861
- ? this.draggableSnapshot.dragEvent.dragPosition.pageX - this.draggableSnapshot.clientRect.left
10862
- : 0,
10863
- };
10864
- let isAnimationConfigured = false;
10865
- this.subscriptions.push(this.dragEventListener.dragMoved.subscribe((event) => {
10866
- // On the first drag move event, we configure the animation as it's dependent on the first drag event.
10867
- if (!isAnimationConfigured) {
10868
- if (this.draggableSnapshot.hasDraggableState) {
10869
- this.animateToOnLeave(`${this.draggableSnapshot.clientRect.top}px`, `${this.draggableSnapshot.clientRect.left}px`);
10870
- }
10871
- else {
10872
- this.animateToOnLeave(`${this.dragEventListener.dragStartPosition.pageY}px`, `${this.dragEventListener.dragStartPosition.pageY}px`);
10873
- }
10874
- isAnimationConfigured = true;
10875
- }
10876
- // Position the draggable ghost.
10877
- const topLeftPosition = this.findTopLeftPosition(event.dragPosition, offset);
10878
- this.setPositionStyle(this.draggableGhostEl, topLeftPosition.pageX, topLeftPosition.pageY);
10879
- this.dragEventListener.dropPointPosition = this.findDropPointPosition(topLeftPosition);
10880
- }));
10881
- }
10882
- setDefaultGhostSize(el) {
10883
- if (this.draggableSnapshot.hasDraggableState) {
10884
- this.setSizeStyle(el, this.draggableSnapshot.clientRect.width, this.draggableSnapshot.clientRect.height);
10885
- }
10886
- }
10887
- animateToOnLeave(top, left) {
10888
- this.ngZone.run(() => {
10889
- this.leaveAnimConfig = { value: 0, params: { top: top, left: left } };
10890
- });
10891
- }
10892
- findTopLeftPosition(dragPosition, offset) {
10893
- return { pageX: dragPosition.pageX - offset.left, pageY: dragPosition.pageY - offset.top };
10894
- }
10895
- findDropPointPosition(topLeftPosition) {
10896
- if (this.draggableSnapshot.hasDraggableState) {
10897
- return {
10898
- pageX: topLeftPosition.pageX + this.draggableSnapshot.clientRect.width / 2,
10899
- pageY: topLeftPosition.pageY + this.draggableSnapshot.clientRect.height / 2,
10900
- };
10901
- }
10902
- else {
10903
- return topLeftPosition;
10904
- }
10905
- }
10906
- setSizeStyle(el, width, height) {
10907
- this.renderer.setStyle(el, 'width', `${width}px`);
10908
- this.renderer.setStyle(el, 'height', `${height}px`);
10909
- }
10910
- setPositionStyle(el, left, top) {
10911
- this.renderer.setStyle(el, 'left', `${left}px`);
10912
- this.renderer.setStyle(el, 'top', `${top}px`);
10913
- this.renderer.setStyle(el, 'visibility', 'visible');
10914
- }
10915
- ngOnDestroy() {
10916
- this.subscriptions.forEach((sub) => sub.unsubscribe());
10917
- }
10918
- }
10919
- ClrDraggableGhost.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.0.2", ngImport: i0, type: ClrDraggableGhost, deps: [{ token: i0.ElementRef }, { token: DragEventListenerService, optional: true }, { token: DraggableSnapshotService, optional: true }, { token: i0.Renderer2 }, { token: i0.NgZone }], target: i0.ɵɵFactoryTarget.Component });
10920
- ClrDraggableGhost.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.0.2", type: ClrDraggableGhost, selector: "clr-draggable-ghost", host: { properties: { "@leaveAnimation": "this.leaveAnimConfig" } }, ngImport: i0, template: `<ng-content></ng-content>`, isInline: true, animations: [
10921
- trigger('leaveAnimation', [
10922
- transition(':leave', [
10923
- style({ left: '*', top: '*' }),
10924
- animate('0.2s ease-in-out', style({ top: '{{top}}', left: '{{left}}' })),
10925
- ]),
10926
- ]),
10927
- ] });
10928
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.2", ngImport: i0, type: ClrDraggableGhost, decorators: [{
10929
- type: Component,
10930
- args: [{
10931
- selector: 'clr-draggable-ghost',
10932
- template: `<ng-content></ng-content>`,
10933
- animations: [
10934
- trigger('leaveAnimation', [
10935
- transition(':leave', [
10936
- style({ left: '*', top: '*' }),
10937
- animate('0.2s ease-in-out', style({ top: '{{top}}', left: '{{left}}' })),
10938
- ]),
10939
- ]),
10940
- ],
10941
- }]
10942
- }], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: DragEventListenerService, decorators: [{
10943
- type: Optional
10944
- }] }, { type: DraggableSnapshotService, decorators: [{
10945
- type: Optional
10946
- }] }, { type: i0.Renderer2 }, { type: i0.NgZone }]; }, propDecorators: { leaveAnimConfig: [{
10947
- type: HostBinding,
10948
- args: ['@leaveAnimation']
10949
- }] } });
10950
-
10951
- /*
10952
- * Copyright (c) 2016-2022 VMware, Inc. All Rights Reserved.
10953
- * This software is released under MIT license.
10954
- * The full license information can be found in LICENSE in the root directory of this project.
10955
- */
10956
- // This class is used to convert an internal event
10957
- // to an external event to be emitted.
10958
- class ClrDragEvent {
10959
- constructor(dragEvent) {
10960
- this.dragPosition = dragEvent.dragPosition;
10961
- this.group = dragEvent.group;
10962
- this.dragDataTransfer = dragEvent.dragDataTransfer;
10963
- this.dropPointPosition = dragEvent.dropPointPosition;
10964
- }
10965
- }
10966
-
10967
- /*
10968
- * Copyright (c) 2016-2022 VMware, Inc. All Rights Reserved.
10969
- * This software is released under MIT license.
10970
- * The full license information can be found in LICENSE in the root directory of this project.
10971
- */
10972
- // This structural directive will be used mainly together with `clr-draggable-ghost` directive inside of clrDraggable
10973
- // directive. The directive is responsible for instantiating `clr-draggable-ghost` directive only during dragging so
10974
- // that Angular Change Detection is prevented from running if a component or directive is placed inside of the
10975
- // `clr-draggable-ghost` directive.
10976
- class ClrIfDragged {
10977
- constructor(template, container, dragEventListener) {
10978
- this.template = template;
10979
- this.container = container;
10980
- this.dragEventListener = dragEventListener;
10981
- this.subscriptions = [];
10982
- if (!this.dragEventListener || !this.container) {
10983
- throw new Error('The *clrIfDragged directive can only be used inside of a clrDraggable directive.');
10984
- }
10985
- this.subscriptions.push(this.dragEventListener.dragStarted.subscribe(() => {
10986
- this.container.createEmbeddedView(this.template);
10987
- }));
10988
- this.subscriptions.push(this.dragEventListener.dragEnded.subscribe(() => {
10989
- this.container.clear();
10990
- }));
10991
- }
10992
- ngOnDestroy() {
10993
- this.subscriptions.forEach((sub) => sub.unsubscribe());
10994
- }
10995
- }
10996
- ClrIfDragged.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.0.2", ngImport: i0, type: ClrIfDragged, deps: [{ token: i0.TemplateRef }, { token: i0.ViewContainerRef, optional: true, skipSelf: true }, { token: DragEventListenerService, optional: true }], target: i0.ɵɵFactoryTarget.Directive });
10997
- ClrIfDragged.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "15.0.2", type: ClrIfDragged, selector: "[clrIfDragged]", ngImport: i0 });
10998
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.2", ngImport: i0, type: ClrIfDragged, decorators: [{
10999
- type: Directive,
11000
- args: [{
11001
- selector: '[clrIfDragged]',
11002
- }]
11003
- }], ctorParameters: function () { return [{ type: i0.TemplateRef }, { type: i0.ViewContainerRef, decorators: [{
11004
- type: Optional
11005
- }, {
11006
- type: SkipSelf
11007
- }] }, { type: DragEventListenerService, decorators: [{
11008
- type: Optional
11009
- }] }]; } });
11010
-
11011
- /*
11012
- * Copyright (c) 2016-2022 VMware, Inc. All Rights Reserved.
11013
- * This software is released under MIT license.
11014
- * The full license information can be found in LICENSE in the root directory of this project.
11015
- */
11016
- // This service class adds and removes the "in-drag" class to the document body element
11017
- // through its public enter() and exit() methods.
11018
- class GlobalDragModeService {
11019
- constructor(renderer) {
11020
- this.renderer = renderer;
11021
- }
11022
- enter() {
11023
- this.renderer.addClass(document.body, 'in-drag');
11024
- }
11025
- exit() {
11026
- this.renderer.removeClass(document.body, 'in-drag');
11027
- }
11028
- }
11029
- GlobalDragModeService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.0.2", ngImport: i0, type: GlobalDragModeService, deps: [{ token: i0.Renderer2 }], target: i0.ɵɵFactoryTarget.Injectable });
11030
- GlobalDragModeService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.0.2", ngImport: i0, type: GlobalDragModeService });
11031
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.2", ngImport: i0, type: GlobalDragModeService, decorators: [{
11032
- type: Injectable
11033
- }], ctorParameters: function () { return [{ type: i0.Renderer2 }]; } });
10254
+ const EXPANDABLE_ANIMATION_DIRECTIVES = [ClrExpandableAnimation];
11034
10255
 
11035
10256
  /*
11036
10257
  * Copyright (c) 2016-2022 VMware, Inc. All Rights Reserved.
11037
10258
  * This software is released under MIT license.
11038
10259
  * The full license information can be found in LICENSE in the root directory of this project.
11039
10260
  */
11040
- class ClrDraggable {
11041
- constructor(el, dragEventListener, dragHandleRegistrar, viewContainerRef, cfr, injector, draggableSnapshot, globalDragMode) {
11042
- this.el = el;
11043
- this.dragEventListener = dragEventListener;
11044
- this.dragHandleRegistrar = dragHandleRegistrar;
11045
- this.viewContainerRef = viewContainerRef;
11046
- this.cfr = cfr;
11047
- this.injector = injector;
11048
- this.draggableSnapshot = draggableSnapshot;
11049
- this.globalDragMode = globalDragMode;
11050
- this.subscriptions = [];
11051
- this.dragOn = false;
11052
- this.dragStartEmitter = new EventEmitter();
11053
- this.dragMoveEmitter = new EventEmitter();
11054
- this.dragEndEmitter = new EventEmitter();
11055
- this.draggableEl = this.el.nativeElement;
11056
- this.componentFactory = this.cfr.resolveComponentFactory(ClrDraggableGhost);
11057
- }
11058
- set dataTransfer(value) {
11059
- this.dragEventListener.dragDataTransfer = value;
11060
- }
11061
- set group(value) {
11062
- this.dragEventListener.group = value;
11063
- }
11064
- set dragStartDelay(value) {
11065
- if (typeof value === 'number') {
11066
- this.dragEventListener.dragStartDelay = value;
11067
- }
11068
- else if (typeof value === 'string') {
11069
- this.dragEventListener.dragStartDelay = parseInt(value, 10) || 0;
11070
- }
11071
- }
11072
- createDefaultGhost(event) {
11073
- this.draggableSnapshot.capture(this.draggableEl, event);
11074
- // NOTE: The default ghost element will appear
11075
- // next to the clrDraggable in the DOM as a sibling element.
11076
- this.viewContainerRef.createComponent(this.componentFactory, 0, this.injector, [
11077
- [this.draggableEl.cloneNode(true)],
11078
- ]);
11079
- }
11080
- destroyDefaultGhost() {
11081
- this.viewContainerRef.clear();
11082
- this.draggableSnapshot.discard();
11083
- }
11084
- ngAfterContentInit() {
11085
- this.dragHandleRegistrar.defaultHandleEl = this.draggableEl;
11086
- this.subscriptions.push(this.dragEventListener.dragStarted.subscribe((event) => {
11087
- this.globalDragMode.enter();
11088
- this.dragOn = true;
11089
- if (!this.customGhost) {
11090
- this.createDefaultGhost(event);
11091
- }
11092
- this.dragStartEmitter.emit(new ClrDragEvent(event));
11093
- }));
11094
- this.subscriptions.push(this.dragEventListener.dragMoved.subscribe((event) => {
11095
- this.dragMoveEmitter.emit(new ClrDragEvent(event));
11096
- }));
11097
- this.subscriptions.push(this.dragEventListener.dragEnded.subscribe((event) => {
11098
- this.globalDragMode.exit();
11099
- this.dragOn = false;
11100
- if (!this.customGhost) {
11101
- this.destroyDefaultGhost();
11102
- }
11103
- this.dragEndEmitter.emit(new ClrDragEvent(event));
11104
- }));
11105
- }
11106
- ngOnDestroy() {
11107
- this.subscriptions.forEach((sub) => sub.unsubscribe());
11108
- this.dragEventListener.detachDragListeners();
11109
- }
11110
- }
11111
- ClrDraggable.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.0.2", ngImport: i0, type: ClrDraggable, deps: [{ token: i0.ElementRef }, { token: DragEventListenerService }, { token: DragHandleRegistrarService }, { token: i0.ViewContainerRef }, { token: i0.ComponentFactoryResolver }, { token: i0.Injector }, { token: DraggableSnapshotService }, { token: GlobalDragModeService }], target: i0.ɵɵFactoryTarget.Directive });
11112
- ClrDraggable.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "15.0.2", type: ClrDraggable, selector: "[clrDraggable]", inputs: { dataTransfer: ["clrDraggable", "dataTransfer"], group: ["clrGroup", "group"], dragStartDelay: ["clrDragStartDelay", "dragStartDelay"] }, outputs: { dragStartEmitter: "clrDragStart", dragMoveEmitter: "clrDragMove", dragEndEmitter: "clrDragEnd" }, host: { properties: { "class.draggable": "true", "class.being-dragged": "dragOn" } }, providers: [
11113
- DragEventListenerService,
11114
- DragHandleRegistrarService,
11115
- DraggableSnapshotService,
11116
- GlobalDragModeService,
11117
- DomAdapter,
11118
- ], queries: [{ propertyName: "customGhost", first: true, predicate: ClrIfDragged, descendants: true }], ngImport: i0 });
11119
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.2", ngImport: i0, type: ClrDraggable, decorators: [{
11120
- type: Directive,
10261
+ class ClrExpandableAnimationModule {
10262
+ }
10263
+ ClrExpandableAnimationModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.0.2", ngImport: i0, type: ClrExpandableAnimationModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
10264
+ ClrExpandableAnimationModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "15.0.2", ngImport: i0, type: ClrExpandableAnimationModule, declarations: [ClrExpandableAnimation], imports: [CommonModule], exports: [ClrExpandableAnimation] });
10265
+ ClrExpandableAnimationModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "15.0.2", ngImport: i0, type: ClrExpandableAnimationModule, imports: [CommonModule] });
10266
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.2", ngImport: i0, type: ClrExpandableAnimationModule, decorators: [{
10267
+ type: NgModule,
11121
10268
  args: [{
11122
- selector: '[clrDraggable]',
11123
- providers: [
11124
- DragEventListenerService,
11125
- DragHandleRegistrarService,
11126
- DraggableSnapshotService,
11127
- GlobalDragModeService,
11128
- DomAdapter,
11129
- ],
11130
- host: { '[class.draggable]': 'true', '[class.being-dragged]': 'dragOn' },
10269
+ imports: [CommonModule],
10270
+ declarations: [EXPANDABLE_ANIMATION_DIRECTIVES],
10271
+ exports: [EXPANDABLE_ANIMATION_DIRECTIVES],
11131
10272
  }]
11132
- }], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: DragEventListenerService }, { type: DragHandleRegistrarService }, { type: i0.ViewContainerRef }, { type: i0.ComponentFactoryResolver }, { type: i0.Injector }, { type: DraggableSnapshotService }, { type: GlobalDragModeService }]; }, propDecorators: { customGhost: [{
11133
- type: ContentChild,
11134
- args: [ClrIfDragged]
11135
- }], dataTransfer: [{
11136
- type: Input,
11137
- args: ['clrDraggable']
11138
- }], group: [{
11139
- type: Input,
11140
- args: ['clrGroup']
11141
- }], dragStartDelay: [{
11142
- type: Input,
11143
- args: ['clrDragStartDelay']
11144
- }], dragStartEmitter: [{
11145
- type: Output,
11146
- args: ['clrDragStart']
11147
- }], dragMoveEmitter: [{
11148
- type: Output,
11149
- args: ['clrDragMove']
11150
- }], dragEndEmitter: [{
11151
- type: Output,
11152
- args: ['clrDragEnd']
11153
- }] } });
10273
+ }] });
11154
10274
 
11155
10275
  /*
11156
10276
  * Copyright (c) 2016-2022 VMware, Inc. All Rights Reserved.
11157
10277
  * This software is released under MIT license.
11158
10278
  * The full license information can be found in LICENSE in the root directory of this project.
11159
10279
  */
11160
- class ClrDroppable {
11161
- constructor(el, eventBus, domAdapter, renderer) {
11162
- this.el = el;
11163
- this.eventBus = eventBus;
11164
- this.domAdapter = domAdapter;
11165
- this.renderer = renderer;
11166
- this.isDraggableMatch = false;
11167
- this._isDraggableOver = false;
11168
- this._dropTolerance = { top: 0, right: 0, bottom: 0, left: 0 };
11169
- this.dragStartEmitter = new EventEmitter();
11170
- this.dragMoveEmitter = new EventEmitter();
11171
- this.dragEndEmitter = new EventEmitter();
11172
- this.dragLeaveEmitter = new EventEmitter();
11173
- this.dragEnterEmitter = new EventEmitter();
11174
- this.dropEmitter = new EventEmitter();
11175
- this.droppableEl = this.el.nativeElement;
11176
- }
11177
- set isDraggableOver(value) {
11178
- // We need to add/remove this draggable-over class via Renderer2
11179
- // because isDraggableOver is set outside of NgZone.
11180
- if (value) {
11181
- this.renderer.addClass(this.droppableEl, 'draggable-over');
11182
- }
11183
- else {
11184
- this.renderer.removeClass(this.droppableEl, 'draggable-over');
11185
- }
11186
- this._isDraggableOver = value;
11187
- }
11188
- set group(value) {
11189
- this._group = value;
11190
- }
11191
- dropToleranceGenerator(top = 0, right = top, bottom = top, left = right) {
11192
- return { top, right, bottom, left };
11193
- }
11194
- set dropTolerance(value) {
11195
- // If user provides an object here and wants to manipulate/update properties individually,
11196
- // the object must be immutable as we generate new object based user's given object.
11197
- if (typeof value === 'number') {
11198
- this._dropTolerance = this.dropToleranceGenerator(value);
11199
- }
11200
- else if (typeof value === 'string') {
11201
- const toleranceValues = value
11202
- .trim()
11203
- .split(/\s+/)
11204
- .map(tolerance => parseInt(tolerance, 10));
11205
- this._dropTolerance = this.dropToleranceGenerator(...toleranceValues);
11206
- }
11207
- else if (value) {
11208
- // The value could be passed in as {left: 20, top: 30 }
11209
- // In this case, the rest of the direction properties should be 0.
11210
- // That's why we initialize properties with 0 first, then override with user's given value.
11211
- this._dropTolerance = { ...this.dropToleranceGenerator(0), ...value };
11212
- }
11213
- }
11214
- unsubscribeFrom(subscription) {
11215
- if (subscription) {
11216
- subscription.unsubscribe();
11217
- }
11218
- }
11219
- checkGroupMatch(draggableGroup) {
11220
- // Both Draggable and Droppable have clrGroup input.
11221
- // The clrGroup input can be both a string key or array of string keys in Draggable and Droppable.
11222
- // It's not match if Draggable has no defined value assigned to clrGroup, but Droppable has a defined clrGroup.
11223
- if (!draggableGroup && this._group) {
11224
- return false;
11225
- }
11226
- // The same is true the other way round.
11227
- if (!this._group && draggableGroup) {
11228
- return false;
11229
- }
11230
- // It's match if both Draggable and Droppable have no assigned value for clrGroup.
11231
- if (!this._group && !draggableGroup) {
11232
- return true;
11233
- }
11234
- // It's match if both Draggable and Droppable have simple string keys that are matching.
11235
- // It's match if Draggable's simple clrGroup key is matching with one of the clrGroup keys of Droppable. The
11236
- // same is true the other way round.
11237
- // it's match if one of the clrGroup keys of Droppable is matching with one of the clrGroup keys of Draggable.
11238
- if (typeof draggableGroup === 'string') {
11239
- if (typeof this._group === 'string') {
11240
- return this._group === draggableGroup;
11241
- }
11242
- else {
11243
- return this._group.indexOf(draggableGroup) > -1;
11244
- }
11245
- }
11246
- else {
11247
- if (typeof this._group === 'string') {
11248
- return draggableGroup.indexOf(this._group) > -1;
11249
- }
11250
- else {
11251
- return this._group.some(groupKey => draggableGroup.indexOf(groupKey) > -1);
11252
- }
11253
- }
11254
- }
11255
- isInDropArea(point) {
11256
- if (!point) {
11257
- return false;
11258
- }
11259
- if (!this.clientRect) {
11260
- this.clientRect = this.domAdapter.clientRect(this.droppableEl);
11261
- }
11262
- if (point.pageX >= this.clientRect.left - this._dropTolerance.left &&
11263
- point.pageX <= this.clientRect.right + this._dropTolerance.right &&
11264
- point.pageY >= this.clientRect.top - this._dropTolerance.top &&
11265
- point.pageY <= this.clientRect.bottom + this._dropTolerance.bottom) {
11266
- return true;
11267
- }
11268
- else {
11269
- return false;
11270
- }
11271
- }
11272
- onDragStart(dragStartEvent) {
11273
- // Check draggable and droppable have a matching group key.
11274
- this.isDraggableMatch = this.checkGroupMatch(dragStartEvent.group);
11275
- // Subscribe to dragMoved and dragEnded only if draggable and droppable have a matching group key.
11276
- if (this.isDraggableMatch) {
11277
- this.dragStartEmitter.emit(new ClrDragEvent(dragStartEvent));
11278
- this.dragMoveSubscription = this.eventBus.dragMoved.subscribe((dragMoveEvent) => {
11279
- this.onDragMove(dragMoveEvent);
11280
- });
11281
- this.dragEndSubscription = this.eventBus.dragEnded.subscribe((dragEndEvent) => {
11282
- this.onDragEnd(dragEndEvent);
11283
- });
11284
- }
11285
- }
11286
- onDragMove(dragMoveEvent) {
11287
- const isInDropArea = this.isInDropArea(dragMoveEvent.dropPointPosition);
11288
- if (!this._isDraggableOver && isInDropArea) {
11289
- this.isDraggableOver = true;
11290
- const dragEnterEvent = { ...dragMoveEvent, type: DragEventType.DRAG_ENTER };
11291
- this.eventBus.broadcast(dragEnterEvent);
11292
- this.dragEnterEmitter.emit(new ClrDragEvent(dragEnterEvent));
11293
- }
11294
- else if (this._isDraggableOver && !isInDropArea) {
11295
- this.isDraggableOver = false;
11296
- const dragLeaveEvent = { ...dragMoveEvent, type: DragEventType.DRAG_LEAVE };
11297
- this.eventBus.broadcast(dragLeaveEvent);
11298
- this.dragLeaveEmitter.emit(new ClrDragEvent(dragLeaveEvent));
11299
- }
11300
- this.dragMoveEmitter.emit(new ClrDragEvent(dragMoveEvent));
11301
- }
11302
- onDragEnd(dragEndEvent) {
11303
- if (this._isDraggableOver) {
11304
- if (dragEndEvent.ghostElement) {
11305
- // By this point, the draggable ghost component is destroyed,
11306
- // but the element would be active until its animation completes.
11307
- // As such, once the ghost is dropped over, we will give it "dropped" class.
11308
- // This process cannot be done in the ghost component
11309
- // because any subscription to the drop event is ineffective or invalid
11310
- // as the component had been already destroyed.
11311
- this.renderer.addClass(dragEndEvent.ghostElement, 'dropped');
11312
- }
11313
- const dropEvent = { ...dragEndEvent, type: DragEventType.DROP };
11314
- this.eventBus.broadcast(dropEvent);
11315
- this.dropEmitter.emit(new ClrDragEvent(dropEvent));
11316
- this.isDraggableOver = false;
11317
- }
11318
- this.dragEndEmitter.emit(new ClrDragEvent(dragEndEvent));
11319
- this.unsubscribeFrom(this.dragMoveSubscription);
11320
- this.unsubscribeFrom(this.dragEndSubscription);
11321
- this.isDraggableMatch = false;
11322
- delete this.clientRect;
11323
- }
11324
- ngOnInit() {
11325
- this.dragStartSubscription = this.eventBus.dragStarted.subscribe((dragStartEvent) => {
11326
- this.onDragStart(dragStartEvent);
11327
- });
11328
- }
11329
- ngOnDestroy() {
11330
- this.unsubscribeFrom(this.dragStartSubscription);
11331
- this.unsubscribeFrom(this.dragMoveSubscription);
11332
- this.unsubscribeFrom(this.dragEndSubscription);
11333
- }
10280
+ /**
10281
+ * This is just a copy of CdkDrag so it can be used independent of the rest of the CdkDragDropModule.
10282
+ */
10283
+ class CdkDragModule_CdkDrag extends CdkDrag {
11334
10284
  }
11335
- ClrDroppable.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.0.2", ngImport: i0, type: ClrDroppable, deps: [{ token: i0.ElementRef }, { token: DragAndDropEventBusService }, { token: DomAdapter }, { token: i0.Renderer2 }], target: i0.ɵɵFactoryTarget.Directive });
11336
- ClrDroppable.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "15.0.2", type: ClrDroppable, selector: "[clrDroppable]", inputs: { group: ["clrGroup", "group"], dropTolerance: ["clrDropTolerance", "dropTolerance"] }, outputs: { dragStartEmitter: "clrDragStart", dragMoveEmitter: "clrDragMove", dragEndEmitter: "clrDragEnd", dragLeaveEmitter: "clrDragLeave", dragEnterEmitter: "clrDragEnter", dropEmitter: "clrDrop" }, host: { properties: { "class.droppable": "true", "class.draggable-match": "isDraggableMatch" } }, providers: [DomAdapter], ngImport: i0 });
11337
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.2", ngImport: i0, type: ClrDroppable, decorators: [{
10285
+ CdkDragModule_CdkDrag.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.0.2", ngImport: i0, type: CdkDragModule_CdkDrag, deps: null, target: i0.ɵɵFactoryTarget.Directive });
10286
+ CdkDragModule_CdkDrag.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "15.0.2", type: CdkDragModule_CdkDrag, selector: "[cdkDrag]", usesInheritance: true, ngImport: i0 });
10287
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.2", ngImport: i0, type: CdkDragModule_CdkDrag, decorators: [{
11338
10288
  type: Directive,
11339
10289
  args: [{
11340
- selector: '[clrDroppable]',
11341
- providers: [DomAdapter],
11342
- host: { '[class.droppable]': 'true', '[class.draggable-match]': 'isDraggableMatch' },
10290
+ selector: '[cdkDrag]',
11343
10291
  }]
11344
- }], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: DragAndDropEventBusService }, { type: DomAdapter }, { type: i0.Renderer2 }]; }, propDecorators: { group: [{
11345
- type: Input,
11346
- args: ['clrGroup']
11347
- }], dropTolerance: [{
11348
- type: Input,
11349
- args: ['clrDropTolerance']
11350
- }], dragStartEmitter: [{
11351
- type: Output,
11352
- args: ['clrDragStart']
11353
- }], dragMoveEmitter: [{
11354
- type: Output,
11355
- args: ['clrDragMove']
11356
- }], dragEndEmitter: [{
11357
- type: Output,
11358
- args: ['clrDragEnd']
11359
- }], dragLeaveEmitter: [{
11360
- type: Output,
11361
- args: ['clrDragLeave']
11362
- }], dragEnterEmitter: [{
11363
- type: Output,
11364
- args: ['clrDragEnter']
11365
- }], dropEmitter: [{
11366
- type: Output,
11367
- args: ['clrDrop']
11368
- }] } });
11369
-
11370
- /*
11371
- * Copyright (c) 2016-2022 VMware, Inc. All Rights Reserved.
11372
- * This software is released under MIT license.
11373
- * The full license information can be found in LICENSE in the root directory of this project.
10292
+ }] });
10293
+ /**
10294
+ * This module allows us to avoid importing all of CdkDragDropModule which results in a smaller application bundle.
11374
10295
  */
11375
- const CLR_DRAG_AND_DROP_DIRECTIVES = [
11376
- ClrDraggable,
11377
- ClrDroppable,
11378
- ClrIfDragged,
11379
- ClrDragHandle,
11380
- ClrDraggableGhost,
11381
- ];
11382
- class ClrDragAndDropModule {
11383
- }
11384
- ClrDragAndDropModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.0.2", ngImport: i0, type: ClrDragAndDropModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
11385
- ClrDragAndDropModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "15.0.2", ngImport: i0, type: ClrDragAndDropModule, declarations: [ClrDraggable,
11386
- ClrDroppable,
11387
- ClrIfDragged,
11388
- ClrDragHandle,
11389
- ClrDraggableGhost], imports: [CommonModule], exports: [ClrDraggable,
11390
- ClrDroppable,
11391
- ClrIfDragged,
11392
- ClrDragHandle,
11393
- ClrDraggableGhost] });
11394
- ClrDragAndDropModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "15.0.2", ngImport: i0, type: ClrDragAndDropModule, imports: [CommonModule] });
11395
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.2", ngImport: i0, type: ClrDragAndDropModule, decorators: [{
10296
+ class CdkDragModule {
10297
+ }
10298
+ CdkDragModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.0.2", ngImport: i0, type: CdkDragModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
10299
+ CdkDragModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "15.0.2", ngImport: i0, type: CdkDragModule, declarations: [CdkDragModule_CdkDrag], exports: [CdkDragModule_CdkDrag] });
10300
+ CdkDragModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "15.0.2", ngImport: i0, type: CdkDragModule });
10301
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.2", ngImport: i0, type: CdkDragModule, decorators: [{
11396
10302
  type: NgModule,
11397
10303
  args: [{
11398
- imports: [CommonModule],
11399
- declarations: [CLR_DRAG_AND_DROP_DIRECTIVES],
11400
- exports: [CLR_DRAG_AND_DROP_DIRECTIVES],
10304
+ declarations: [CdkDragModule_CdkDrag],
10305
+ exports: [CdkDragModule_CdkDrag],
11401
10306
  }]
11402
10307
  }] });
11403
10308
 
@@ -12054,7 +10959,7 @@ ClrDatagridFilter.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", vers
12054
10959
  <div
12055
10960
  class="datagrid-filter"
12056
10961
  [id]="popoverId"
12057
- clrFocusTrap
10962
+ cdkTrapFocus
12058
10963
  *clrPopoverContent="open; at: smartPosition; outsideClickToClose: true; scrollToClose: true"
12059
10964
  role="dialog"
12060
10965
  [attr.aria-label]="commonStrings.keys.datagridFilterDialogAriaLabel"
@@ -12067,7 +10972,7 @@ ClrDatagridFilter.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", vers
12067
10972
 
12068
10973
  <ng-content></ng-content>
12069
10974
  </div>
12070
- `, isInline: true, dependencies: [{ kind: "directive", type: CdsIconCustomTag, selector: "cds-icon" }, { kind: "directive", type: ClrPopoverAnchor, selector: "[clrPopoverAnchor]" }, { kind: "directive", type: ClrPopoverCloseButton, selector: "[clrPopoverCloseButton]", outputs: ["clrPopoverOnCloseChange"] }, { kind: "directive", type: ClrPopoverOpenCloseButton, selector: "[clrPopoverOpenCloseButton]", outputs: ["clrPopoverOpenCloseChange"] }, { kind: "directive", type: ClrPopoverContent, selector: "[clrPopoverContent]", inputs: ["clrPopoverContent", "clrPopoverContentAt", "clrPopoverContentOutsideClickToClose", "clrPopoverContentScrollToClose"] }, { kind: "directive", type: FocusTrapDirective, selector: "[clrFocusTrap]", inputs: ["clrFocusTrap"] }] });
10975
+ `, isInline: true, dependencies: [{ kind: "directive", type: CdkTrapFocusModule_CdkTrapFocus, selector: "[cdkTrapFocus]" }, { kind: "directive", type: CdsIconCustomTag, selector: "cds-icon" }, { kind: "directive", type: ClrPopoverAnchor, selector: "[clrPopoverAnchor]" }, { kind: "directive", type: ClrPopoverCloseButton, selector: "[clrPopoverCloseButton]", outputs: ["clrPopoverOnCloseChange"] }, { kind: "directive", type: ClrPopoverOpenCloseButton, selector: "[clrPopoverOpenCloseButton]", outputs: ["clrPopoverOpenCloseChange"] }, { kind: "directive", type: ClrPopoverContent, selector: "[clrPopoverContent]", inputs: ["clrPopoverContent", "clrPopoverContentAt", "clrPopoverContentOutsideClickToClose", "clrPopoverContentScrollToClose"] }] });
12071
10976
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.2", ngImport: i0, type: ClrDatagridFilter, decorators: [{
12072
10977
  type: Component,
12073
10978
  args: [{
@@ -12097,7 +11002,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.2", ngImpor
12097
11002
  <div
12098
11003
  class="datagrid-filter"
12099
11004
  [id]="popoverId"
12100
- clrFocusTrap
11005
+ cdkTrapFocus
12101
11006
  *clrPopoverContent="open; at: smartPosition; outsideClickToClose: true; scrollToClose: true"
12102
11007
  role="dialog"
12103
11008
  [attr.aria-label]="commonStrings.keys.datagridFilterDialogAriaLabel"
@@ -13252,8 +12157,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.2", ngImpor
13252
12157
  // Default resize length on each keyboard move event
13253
12158
  const KEYBOARD_RESIZE_LENGTH = 12;
13254
12159
  class ClrDatagridColumnSeparator {
13255
- // Every column draggable separator should have its own unique ID
13256
- // in order to not conflict with other draggables/droppables.
13257
12160
  constructor(columnResizerService, renderer, ngZone, tableSizeService, commonString, document) {
13258
12161
  this.columnResizerService = columnResizerService;
13259
12162
  this.renderer = renderer;
@@ -13301,6 +12204,7 @@ class ClrDatagridColumnSeparator {
13301
12204
  this.columnResizerService.endResize();
13302
12205
  this.renderer.setStyle(this.resizeTrackerEl, 'display', 'none');
13303
12206
  this.renderer.setStyle(this.resizeTrackerEl, 'transform', `translateX(0px)`);
12207
+ this.renderer.setStyle(this.columnHandleEl, 'transform', `translateX(0px)`);
13304
12208
  this.renderer.setStyle(this.document.body, 'cursor', 'auto');
13305
12209
  }
13306
12210
  showTrackerOnFirstKeyDown(event) {
@@ -13312,9 +12216,11 @@ class ClrDatagridColumnSeparator {
13312
12216
  }
13313
12217
  moveTrackerOnKeyDown(event) {
13314
12218
  if (this.isArrowLeftKeyEvent(event)) {
12219
+ event.stopPropagation();
13315
12220
  this.moveTracker(this.columnResizerService.resizedBy - KEYBOARD_RESIZE_LENGTH);
13316
12221
  }
13317
12222
  else if (this.isArrowRightKeyEvent(event)) {
12223
+ event.stopPropagation();
13318
12224
  this.moveTracker(this.columnResizerService.resizedBy + KEYBOARD_RESIZE_LENGTH);
13319
12225
  }
13320
12226
  }
@@ -13338,10 +12244,10 @@ class ClrDatagridColumnSeparator {
13338
12244
  }
13339
12245
  }
13340
12246
  isArrowLeftKeyEvent(event) {
13341
- return event.key === KeyCodes.ArrowLeft || event.key === IEKeyCodes.ArrowLeft;
12247
+ return normalizeKey(event.key) === Keys.ArrowLeft;
13342
12248
  }
13343
12249
  isArrowRightKeyEvent(event) {
13344
- return event.key === KeyCodes.ArrowRight || event.key === IEKeyCodes.ArrowRight;
12250
+ return normalizeKey(event.key) === Keys.ArrowRight;
13345
12251
  }
13346
12252
  ngOnDestroy() {
13347
12253
  this.unlisteners.forEach(unlistener => unlistener());
@@ -13354,18 +12260,18 @@ ClrDatagridColumnSeparator.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0
13354
12260
  class="datagrid-column-handle"
13355
12261
  [attr.aria-label]="commonString.keys.columnSeparatorAriaLabel"
13356
12262
  [attr.aria-describedby]="descriptionId"
13357
- clrDraggable
13358
- [clrGroup]="columnSeparatorId"
13359
- (clrDragStart)="showTracker()"
13360
- (clrDragMove)="moveTracker($event.dragPosition.moveX)"
13361
- (clrDragEnd)="hideTracker()"
12263
+ cdkDrag
12264
+ cdkDragLockAxis="x"
12265
+ (cdkDragStarted)="showTracker()"
12266
+ (cdkDragMoved)="moveTracker($event.distance.x)"
12267
+ (cdkDragEnded)="hideTracker(); $event.source._dragRef.reset()"
13362
12268
  #columnHandle
13363
12269
  ></button>
13364
12270
  <span class="clr-sr-only" [attr.id]="descriptionId">
13365
12271
  {{ commonString.keys.columnSeparatorDescription }}
13366
12272
  </span>
13367
12273
  <div class="datagrid-column-resize-tracker" #resizeTracker></div>
13368
- `, isInline: true, dependencies: [{ kind: "directive", type: ClrDraggable, selector: "[clrDraggable]", inputs: ["clrDraggable", "clrGroup", "clrDragStartDelay"], outputs: ["clrDragStart", "clrDragMove", "clrDragEnd"] }] });
12274
+ `, isInline: true, dependencies: [{ kind: "directive", type: CdkDragModule_CdkDrag, selector: "[cdkDrag]" }] });
13369
12275
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.2", ngImport: i0, type: ClrDatagridColumnSeparator, decorators: [{
13370
12276
  type: Component,
13371
12277
  args: [{
@@ -13376,11 +12282,11 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.2", ngImpor
13376
12282
  class="datagrid-column-handle"
13377
12283
  [attr.aria-label]="commonString.keys.columnSeparatorAriaLabel"
13378
12284
  [attr.aria-describedby]="descriptionId"
13379
- clrDraggable
13380
- [clrGroup]="columnSeparatorId"
13381
- (clrDragStart)="showTracker()"
13382
- (clrDragMove)="moveTracker($event.dragPosition.moveX)"
13383
- (clrDragEnd)="hideTracker()"
12285
+ cdkDrag
12286
+ cdkDragLockAxis="x"
12287
+ (cdkDragStarted)="showTracker()"
12288
+ (cdkDragMoved)="moveTracker($event.distance.x)"
12289
+ (cdkDragEnded)="hideTracker(); $event.source._dragRef.reset()"
13384
12290
  #columnHandle
13385
12291
  ></button>
13386
12292
  <span class="clr-sr-only" [attr.id]="descriptionId">
@@ -13427,18 +12333,6 @@ class ClrDatagridColumn extends DatagridFilterRegistrar {
13427
12333
  * via the [clrDgColType] input by setting it to 'string' or 'number'.
13428
12334
  */
13429
12335
  this._colType = 'string';
13430
- // deprecated: to be removed - START
13431
- /**
13432
- * Indicates if the column is currently sorted
13433
- *
13434
- * @deprecated This will be removed soon, in favor of the sortOrder mechanism
13435
- */
13436
- this._sorted = false;
13437
- /**
13438
- * @deprecated This will be removed soon, in favor of the sortOrder mechanism
13439
- */
13440
- this.sortedChange = new EventEmitter();
13441
- // deprecated: to be removed - END
13442
12336
  /**
13443
12337
  * Indicates how the column is currently sorted
13444
12338
  */
@@ -13474,16 +12368,8 @@ class ClrDatagridColumn extends DatagridFilterRegistrar {
13474
12368
  if (this.sortOrder !== ClrDatagridSortOrder.UNSORTED && sort.comparator !== this._sortBy) {
13475
12369
  this._sortOrder = ClrDatagridSortOrder.UNSORTED;
13476
12370
  this.sortOrderChange.emit(this._sortOrder);
13477
- // removes the sortIcon when column becomes unsorted
13478
- this.sortIcon = null;
13479
12371
  this._sortDirection = null;
13480
12372
  }
13481
- // deprecated: to be removed - START
13482
- if (this.sorted && sort.comparator !== this._sortBy) {
13483
- this._sorted = false;
13484
- this.sortedChange.emit(false);
13485
- }
13486
- // deprecated: to be removed - END
13487
12373
  });
13488
12374
  }
13489
12375
  get colType() {
@@ -13560,21 +12446,6 @@ class ClrDatagridColumn extends DatagridFilterRegistrar {
13560
12446
  get sortable() {
13561
12447
  return !!this._sortBy;
13562
12448
  }
13563
- get sorted() {
13564
- return this._sorted;
13565
- }
13566
- /**
13567
- * @deprecated This will be removed soon, in favor of the sortOrder mechanism
13568
- */
13569
- set sorted(value) {
13570
- if (!value && this.sorted) {
13571
- this._sorted = false;
13572
- this._sort.clear();
13573
- }
13574
- else if (value && !this.sorted) {
13575
- this.sort();
13576
- }
13577
- }
13578
12449
  get sortOrder() {
13579
12450
  return this._sortOrder;
13580
12451
  }
@@ -13626,12 +12497,7 @@ class ClrDatagridColumn extends DatagridFilterRegistrar {
13626
12497
  this._sortOrder = this._sort.reverse ? ClrDatagridSortOrder.DESC : ClrDatagridSortOrder.ASC;
13627
12498
  // Sets the correct icon for current sort order
13628
12499
  this._sortDirection = this._sortOrder === ClrDatagridSortOrder.DESC ? 'down' : 'up';
13629
- this.sortIcon = this._sortOrder === ClrDatagridSortOrder.DESC ? 'arrow down' : 'arrow'; // Backward compatibility
13630
12500
  this.sortOrderChange.emit(this._sortOrder);
13631
- // deprecated: to be removed - START
13632
- this._sorted = true;
13633
- this.sortedChange.emit(true);
13634
- // deprecated: to be removed - END
13635
12501
  }
13636
12502
  set projectedFilter(custom) {
13637
12503
  if (custom) {
@@ -13699,7 +12565,7 @@ class ClrDatagridColumn extends DatagridFilterRegistrar {
13699
12565
  }
13700
12566
  }
13701
12567
  ClrDatagridColumn.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.0.2", ngImport: i0, type: ClrDatagridColumn, deps: [{ token: Sort }, { token: FiltersProvider }, { token: i0.ViewContainerRef }, { token: DetailService }, { token: i0.ChangeDetectorRef }, { token: ClrCommonStringsService }], target: i0.ɵɵFactoryTarget.Component });
13702
- ClrDatagridColumn.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.0.2", type: ClrDatagridColumn, selector: "clr-dg-column", inputs: { colType: ["clrDgColType", "colType"], field: ["clrDgField", "field"], sortBy: ["clrDgSortBy", "sortBy"], sorted: ["clrDgSorted", "sorted"], sortOrder: ["clrDgSortOrder", "sortOrder"], filterStringPlaceholder: ["clrFilterStringPlaceholder", "filterStringPlaceholder"], filterNumberMaxPlaceholder: ["clrFilterNumberMaxPlaceholder", "filterNumberMaxPlaceholder"], filterNumberMinPlaceholder: ["clrFilterNumberMinPlaceholder", "filterNumberMinPlaceholder"], updateFilterValue: ["clrFilterValue", "updateFilterValue"] }, outputs: { sortedChange: "clrDgSortedChange", sortOrderChange: "clrDgSortOrderChange", filterValueChange: "clrFilterValueChange" }, host: { attributes: { "role": "columnheader" }, properties: { "class.datagrid-column": "true", "attr.aria-sort": "ariaSort" } }, providers: [ClrPopoverPositionService, ClrPopoverEventsService, ClrPopoverToggleService], queries: [{ propertyName: "projectedFilter", first: true, predicate: CustomFilter, descendants: true }], usesInheritance: true, usesOnChanges: true, ngImport: i0, template: `
12568
+ ClrDatagridColumn.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.0.2", type: ClrDatagridColumn, selector: "clr-dg-column", inputs: { colType: ["clrDgColType", "colType"], field: ["clrDgField", "field"], sortBy: ["clrDgSortBy", "sortBy"], sortOrder: ["clrDgSortOrder", "sortOrder"], filterStringPlaceholder: ["clrFilterStringPlaceholder", "filterStringPlaceholder"], filterNumberMaxPlaceholder: ["clrFilterNumberMaxPlaceholder", "filterNumberMaxPlaceholder"], filterNumberMinPlaceholder: ["clrFilterNumberMinPlaceholder", "filterNumberMinPlaceholder"], updateFilterValue: ["clrFilterValue", "updateFilterValue"] }, outputs: { sortOrderChange: "clrDgSortOrderChange", filterValueChange: "clrFilterValueChange" }, host: { attributes: { "role": "columnheader" }, properties: { "class.datagrid-column": "true", "attr.aria-sort": "ariaSort" } }, providers: [ClrPopoverPositionService, ClrPopoverEventsService, ClrPopoverToggleService], queries: [{ propertyName: "projectedFilter", first: true, predicate: CustomFilter, descendants: true }], usesInheritance: true, usesOnChanges: true, ngImport: i0, template: `
13703
12569
  <div class="datagrid-column-flex">
13704
12570
  <button class="datagrid-column-title" *ngIf="sortable" (click)="sort()" type="button">
13705
12571
  <ng-container *ngTemplateOutlet="columnTitle"></ng-container>
@@ -13802,12 +12668,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.2", ngImpor
13802
12668
  }], sortBy: [{
13803
12669
  type: Input,
13804
12670
  args: ['clrDgSortBy']
13805
- }], sorted: [{
13806
- type: Input,
13807
- args: ['clrDgSorted']
13808
- }], sortedChange: [{
13809
- type: Output,
13810
- args: ['clrDgSortedChange']
13811
12671
  }], sortOrder: [{
13812
12672
  type: Input,
13813
12673
  args: ['clrDgSortOrder']
@@ -15909,13 +14769,13 @@ ClrDatagridActionOverflow.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.
15909
14769
  [attr.aria-hidden]="!open"
15910
14770
  [attr.id]="popoverId"
15911
14771
  clrKeyFocus
15912
- clrFocusTrap
14772
+ cdkTrapFocus
15913
14773
  (click)="closeOverflowContent($event)"
15914
14774
  *clrPopoverContent="open; at: smartPosition; outsideClickToClose: true; scrollToClose: true"
15915
14775
  >
15916
14776
  <ng-content></ng-content>
15917
14777
  </div>
15918
- `, isInline: true, dependencies: [{ kind: "directive", type: CdsIconCustomTag, selector: "cds-icon" }, { kind: "directive", type: ClrPopoverAnchor, selector: "[clrPopoverAnchor]" }, { kind: "directive", type: ClrPopoverOpenCloseButton, selector: "[clrPopoverOpenCloseButton]", outputs: ["clrPopoverOpenCloseChange"] }, { kind: "directive", type: ClrPopoverContent, selector: "[clrPopoverContent]", inputs: ["clrPopoverContent", "clrPopoverContentAt", "clrPopoverContentOutsideClickToClose", "clrPopoverContentScrollToClose"] }, { kind: "component", type: ClrKeyFocus, selector: "[clrKeyFocus]", inputs: ["clrDirection", "clrFocusOnLoad", "clrKeyFocus"], outputs: ["clrFocusChange"] }, { kind: "directive", type: FocusTrapDirective, selector: "[clrFocusTrap]", inputs: ["clrFocusTrap"] }] });
14778
+ `, isInline: true, dependencies: [{ kind: "directive", type: CdkTrapFocusModule_CdkTrapFocus, selector: "[cdkTrapFocus]" }, { kind: "directive", type: CdsIconCustomTag, selector: "cds-icon" }, { kind: "directive", type: ClrPopoverAnchor, selector: "[clrPopoverAnchor]" }, { kind: "directive", type: ClrPopoverOpenCloseButton, selector: "[clrPopoverOpenCloseButton]", outputs: ["clrPopoverOpenCloseChange"] }, { kind: "directive", type: ClrPopoverContent, selector: "[clrPopoverContent]", inputs: ["clrPopoverContent", "clrPopoverContentAt", "clrPopoverContentOutsideClickToClose", "clrPopoverContentScrollToClose"] }, { kind: "component", type: ClrKeyFocus, selector: "[clrKeyFocus]", inputs: ["clrDirection", "clrFocusOnLoad", "clrKeyFocus"], outputs: ["clrFocusChange"] }] });
15919
14779
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.2", ngImport: i0, type: ClrDatagridActionOverflow, decorators: [{
15920
14780
  type: Component,
15921
14781
  args: [{
@@ -15943,7 +14803,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.2", ngImpor
15943
14803
  [attr.aria-hidden]="!open"
15944
14804
  [attr.id]="popoverId"
15945
14805
  clrKeyFocus
15946
- clrFocusTrap
14806
+ cdkTrapFocus
15947
14807
  (click)="closeOverflowContent($event)"
15948
14808
  *clrPopoverContent="open; at: smartPosition; outsideClickToClose: true; scrollToClose: true"
15949
14809
  >
@@ -16147,7 +15007,7 @@ ClrDatagridColumnToggle.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0"
16147
15007
  role="dialog"
16148
15008
  [attr.aria-label]="commonStrings.keys.showColumnsMenuDescription"
16149
15009
  [id]="popoverId"
16150
- clrFocusTrap
15010
+ cdkTrapFocus
16151
15011
  *clrPopoverContent="openState; at: smartPosition; outsideClickToClose: true; scrollToClose: true"
16152
15012
  >
16153
15013
  <div class="switch-header">
@@ -16189,7 +15049,7 @@ ClrDatagridColumnToggle.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0"
16189
15049
  </clr-dg-column-toggle-button>
16190
15050
  </div>
16191
15051
  </div>
16192
- `, 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"] }] });
15052
+ `, 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"] }] });
16193
15053
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.2", ngImport: i0, type: ClrDatagridColumnToggle, decorators: [{
16194
15054
  type: Component,
16195
15055
  args: [{
@@ -16212,7 +15072,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.2", ngImpor
16212
15072
  role="dialog"
16213
15073
  [attr.aria-label]="commonStrings.keys.showColumnsMenuDescription"
16214
15074
  [id]="popoverId"
16215
- clrFocusTrap
15075
+ cdkTrapFocus
16216
15076
  *clrPopoverContent="openState; at: smartPosition; outsideClickToClose: true; scrollToClose: true"
16217
15077
  >
16218
15078
  <div class="switch-header">
@@ -16334,14 +15194,15 @@ class ClrDatagridDetail {
16334
15194
  this.detailService = detailService;
16335
15195
  this.commonStrings = commonStrings;
16336
15196
  }
16337
- closeCheck() {
15197
+ close() {
16338
15198
  this.detailService.close();
16339
15199
  }
16340
15200
  }
16341
15201
  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 });
16342
- 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: `
15202
+ 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: `
16343
15203
  <div
16344
- [clrFocusTrap]="{ strict: false }"
15204
+ cdkTrapFocus
15205
+ [cdkTrapFocusAutoCapture]="true"
16345
15206
  class="datagrid-detail-pane-content"
16346
15207
  *ngIf="detailService.isOpen"
16347
15208
  role="dialog"
@@ -16353,7 +15214,7 @@ ClrDatagridDetail.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", vers
16353
15214
  <ng-content></ng-content>
16354
15215
  <div class="clr-sr-only">{{ commonStrings.keys.detailPaneEnd }}</div>
16355
15216
  </div>
16356
- `, isInline: true, dependencies: [{ kind: "directive", type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: FocusTrapDirective, selector: "[clrFocusTrap]", inputs: ["clrFocusTrap"] }] });
15217
+ `, isInline: true, dependencies: [{ kind: "directive", type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: CdkTrapFocusModule_CdkTrapFocus, selector: "[cdkTrapFocus]" }] });
16357
15218
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.2", ngImport: i0, type: ClrDatagridDetail, decorators: [{
16358
15219
  type: Component,
16359
15220
  args: [{
@@ -16361,11 +15222,12 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.2", ngImpor
16361
15222
  host: {
16362
15223
  '[class.datagrid-detail-pane]': 'true',
16363
15224
  },
16364
- // We put the *ngIf on the clrFocusTrap so it doesn't always exist on the page
15225
+ // We put the *ngIf on the cdkTrapFocus so it doesn't always exist on the page
16365
15226
  // have to test for presence of header for aria-describedby because it was causing unit tests to crash
16366
15227
  template: `
16367
15228
  <div
16368
- [clrFocusTrap]="{ strict: false }"
15229
+ cdkTrapFocus
15230
+ [cdkTrapFocusAutoCapture]="true"
16369
15231
  class="datagrid-detail-pane-content"
16370
15232
  *ngIf="detailService.isOpen"
16371
15233
  role="dialog"
@@ -16382,9 +15244,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.2", ngImpor
16382
15244
  }], ctorParameters: function () { return [{ type: DetailService }, { type: ClrCommonStringsService }]; }, propDecorators: { header: [{
16383
15245
  type: ContentChild,
16384
15246
  args: [ClrDatagridDetailHeader]
16385
- }], closeCheck: [{
15247
+ }], close: [{
16386
15248
  type: HostListener,
16387
- args: ['document:keyup.esc']
15249
+ args: ['document:keyup.escape']
16388
15250
  }] } });
16389
15251
 
16390
15252
  /*
@@ -16589,301 +15451,18 @@ function slide(direction) {
16589
15451
  * This software is released under MIT license.
16590
15452
  * The full license information can be found in LICENSE in the root directory of this project.
16591
15453
  */
16592
- var ClrAriaLivePoliteness;
16593
- (function (ClrAriaLivePoliteness) {
16594
- ClrAriaLivePoliteness["off"] = "off";
16595
- ClrAriaLivePoliteness["polite"] = "polite";
16596
- ClrAriaLivePoliteness["assertive"] = "assertive";
16597
- })(ClrAriaLivePoliteness || (ClrAriaLivePoliteness = {}));
16598
- /**
16599
- * Time in milliseconds before inserting the content into the container
16600
- */
16601
- const ARIA_LIVE_TICK = 100;
16602
- /**
16603
- * @deprecated
16604
- *
16605
- * -- ClrAriaLiveService is deprecated in 5.0 to be removed in 6.0 --
16606
- * Please consider using the LiveAnnouncer in the Angular Material CDK
16607
- * if your project needs this functionality.
16608
- * More info: https://material.angular.io/cdk/a11y/overview#example-1
16609
- *
16610
- * This service handle `aria-live` accessibility attribute. The issue is that you need
16611
- * to have the DOM Element with attribute `aria-live` before you could insert content
16612
- * and SR (Screen Reader) pick the change and announce it.
16613
- *
16614
- * ```typescript
16615
- * import { ClrAriaLiveService } from 'src/clr-angular/utils/a11y/aria-live.service';
16616
- *
16617
- * @Component({
16618
- * selector: 'clr-demo-component',
16619
- * providers: [ClrAriaLiveService],
16620
- * template: `
16621
- * <ng-content></ng-content>
16622
- * `,
16623
- * })
16624
- * export class DemoComponent {
16625
- * constructor(ariaLiveService: ClrAriaLiveService) {}
16626
- *
16627
- * public actionThatWillTriggerChange() {
16628
- * this.ariaLiveService.announce('message that I want to announce to SR');
16629
- * }
16630
- * }
16631
- * ```
16632
- *
16633
- */
16634
- class ClrAriaLiveService {
16635
- constructor(ngZone, _document, platformId) {
16636
- this.ngZone = ngZone;
16637
- this.platformId = platformId;
16638
- this._id = `clr-aria-live-element-${uniqueIdFactory()}`;
16639
- this.document = _document;
16640
- }
16641
- /**
16642
- * get access to the internal HTML `id` that gonna be used for the AriaLive container.
16643
- * @return ID of the DOM Element as string.
16644
- */
16645
- get id() {
16646
- return this._id;
16647
- }
16648
- /**
16649
- * Append text content inside the AriaLive Container. This method will check if the
16650
- * DOM Element is existing if not it will create one for us and the will apply the text.
16651
- *
16652
- * ```typescript
16653
- * this.ariaLiveService.announce(this.el.nativeElement);
16654
- * // or
16655
- * this.ariaLiveService.announce('Message to announce to SR');
16656
- * ```
16657
- *
16658
- * @remark
16659
- * When second argument is `AriaLivePoliteness.off` we won't create aria container or update it.
16660
- * The reason for that is that we don't want to do additional work if the SR will ignore it.
16661
- *
16662
- * @param message - This could be simple string or HTMLElement
16663
- * @param politeness - 'polite', 'assertive' or 'off'
16664
- */
16665
- announce(message, politeness = ClrAriaLivePoliteness.polite) {
16666
- if (politeness === ClrAriaLivePoliteness.off) {
16667
- return;
16668
- }
16669
- if (!this.ariaLiveElement && isPlatformBrowser(this.platformId)) {
16670
- this.ariaLiveElement = this.createContainer();
16671
- }
16672
- message = typeof message !== 'string' && isPlatformBrowser(this.platformId) ? message.textContent : message;
16673
- // when there is no message do NOTHING!
16674
- if (!message) {
16675
- return;
16676
- }
16677
- this.ariaLiveElement.setAttribute('aria-live', politeness);
16678
- // This 100ms timeout is necessary for some browser + screen-reader combinations:
16679
- // - Both JAWS and NVDA over IE11 will not announce anything without a non-zero timeout.
16680
- // - With Chrome and IE11 with NVDA or JAWS, a repeated (identical) message won't be read a
16681
- // second time without clearing and then using a non-zero delay.
16682
- // (using JAWS 17 at time of this writing).
16683
- this.ngZone.runOutsideAngular(() => {
16684
- // This clearTimeout will stop all older messages from announcing
16685
- // in the case where the messages are comming too fast we gonna try to append only
16686
- // the last one. That's what the SR will try to do anyway.
16687
- clearTimeout(this.previousTimeout);
16688
- this.previousTimeout = setTimeout(() => {
16689
- this.ariaLiveElement.textContent = message;
16690
- }, ARIA_LIVE_TICK);
16691
- });
16692
- }
16693
- /**
16694
- * onDestroy life cycle - must stop all active setTimeouts and remove the AriaLive
16695
- * container from the document.
16696
- */
16697
- ngOnDestroy() {
16698
- clearTimeout(this.previousTimeout);
16699
- if (isPlatformBrowser(this.platformId) && this.ariaLiveElement) {
16700
- this.document.body.removeChild(this.ariaLiveElement);
16701
- this.ariaLiveElement = null;
16702
- }
16703
- }
16704
- /**
16705
- * Create AriaLive DOM element as a last child of the document.
16706
- * After the element is created, we gonna apply Clarity class to hide it from
16707
- * the screen and set the `aria-live` politness.
16708
- *
16709
- * `clr-sr-only` is the CSS class that is used to hide the element from the screen.
16710
- *
16711
- * @remark
16712
- * Calling this method multiple times will create multiple DOM Elements, that
16713
- * won't be tracked and will be GC after the service is destroyed.
16714
- *
16715
- * @return AriaLive container as HTMLElement
16716
- *
16717
- */
16718
- createContainer() {
16719
- const ariaLiveElement = this.document.createElement('div');
16720
- ariaLiveElement.setAttribute('id', this.id);
16721
- // Use clarity screen reader class to hide the dom element
16722
- // and fix the scrollbar shake
16723
- ariaLiveElement.classList.add('clr-sr-only');
16724
- ariaLiveElement.setAttribute('aria-atomic', 'true');
16725
- ariaLiveElement.setAttribute('aria-live', ClrAriaLivePoliteness.polite);
16726
- this.document.body.appendChild(ariaLiveElement);
16727
- return ariaLiveElement;
16728
- }
16729
- }
16730
- 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 });
16731
- ClrAriaLiveService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.0.2", ngImport: i0, type: ClrAriaLiveService, providedIn: 'root' });
16732
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.2", ngImport: i0, type: ClrAriaLiveService, decorators: [{
16733
- type: Injectable,
16734
- args: [{
16735
- providedIn: 'root',
16736
- }]
16737
- }], ctorParameters: function () { return [{ type: i0.NgZone }, { type: undefined, decorators: [{
16738
- type: Inject,
16739
- args: [DOCUMENT]
16740
- }] }, { type: undefined, decorators: [{
16741
- type: Inject,
16742
- args: [PLATFORM_ID]
16743
- }] }]; } });
16744
-
16745
- /*
16746
- * Copyright (c) 2016-2022 VMware, Inc. All Rights Reserved.
16747
- * This software is released under MIT license.
16748
- * The full license information can be found in LICENSE in the root directory of this project.
16749
- */
16750
-
16751
- /*
16752
- * Copyright (c) 2016-2022 VMware, Inc. All Rights Reserved.
16753
- * This software is released under MIT license.
16754
- * The full license information can be found in LICENSE in the root directory of this project.
16755
- */
16756
-
16757
- /*
16758
- * Copyright (c) 2016-2022 VMware, Inc. All Rights Reserved.
16759
- * This software is released under MIT license.
16760
- * The full license information can be found in LICENSE in the root directory of this project.
16761
- */
16762
-
16763
- /*
16764
- * Copyright (c) 2016-2022 VMware, Inc. All Rights Reserved.
16765
- * This software is released under MIT license.
16766
- * The full license information can be found in LICENSE in the root directory of this project.
16767
- */
16768
-
16769
- /*
16770
- * Copyright (c) 2016-2022 VMware, Inc. All Rights Reserved.
16771
- * This software is released under MIT license.
16772
- * The full license information can be found in LICENSE in the root directory of this project.
16773
- */
16774
-
16775
- /*
16776
- * Copyright (c) 2016-2022 VMware, Inc. All Rights Reserved.
16777
- * This software is released under MIT license.
16778
- * The full license information can be found in LICENSE in the root directory of this project.
16779
- */
16780
-
16781
- /*
16782
- * Copyright (c) 2016-2022 VMware, Inc. All Rights Reserved.
16783
- * This software is released under MIT license.
16784
- * The full license information can be found in LICENSE in the root directory of this project.
16785
- */
16786
-
16787
- /*
16788
- * Copyright (c) 2016-2022 VMware, Inc. All Rights Reserved.
16789
- * This software is released under MIT license.
16790
- * The full license information can be found in LICENSE in the root directory of this project.
16791
- */
16792
-
16793
- /*
16794
- * Copyright (c) 2016-2022 VMware, Inc. All Rights Reserved.
16795
- * This software is released under MIT license.
16796
- * The full license information can be found in LICENSE in the root directory of this project.
16797
- */
16798
- class ForTypeAheadProvider {
16799
- constructor() {
16800
- this._textContentChange = new Subject();
16801
- }
16802
- get textContentChange() {
16803
- return this._textContentChange.asObservable();
16804
- }
16805
- get textContent() {
16806
- return this._textContent;
16807
- }
16808
- set textContent(value) {
16809
- this._textContent = value;
16810
- this._textContentChange.next(value);
16811
- }
16812
- }
16813
- ForTypeAheadProvider.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.0.2", ngImport: i0, type: ForTypeAheadProvider, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
16814
- ForTypeAheadProvider.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.0.2", ngImport: i0, type: ForTypeAheadProvider });
16815
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.2", ngImport: i0, type: ForTypeAheadProvider, decorators: [{
16816
- type: Injectable
16817
- }] });
16818
15454
 
16819
15455
  /*
16820
15456
  * Copyright (c) 2016-2022 VMware, Inc. All Rights Reserved.
16821
15457
  * This software is released under MIT license.
16822
15458
  * The full license information can be found in LICENSE in the root directory of this project.
16823
15459
  */
16824
- // The purpose of this directive is to provide the text content of its host element
16825
- // or text content that's passed to its input.
16826
- // This directive must stay optional. So do not embed this directive in a component module by default.
16827
- // If users need to use this directive, they should import its module on their side.
16828
- class ClrForTypeAhead {
16829
- constructor(el, forTypeAheadProvider) {
16830
- this.el = el;
16831
- this.forTypeAheadProvider = forTypeAheadProvider;
16832
- }
16833
- trimAndLowerCase(value) {
16834
- return value.toLocaleLowerCase().trim();
16835
- }
16836
- get content() {
16837
- return this._content;
16838
- }
16839
- set content(value) {
16840
- if (value) {
16841
- this._content = this.trimAndLowerCase(value);
16842
- this.forTypeAheadProvider.textContent = this._content;
16843
- }
16844
- else {
16845
- this._content = this.trimAndLowerCase(this.el.nativeElement.textContent);
16846
- this.forTypeAheadProvider.textContent = this._content;
16847
- }
16848
- }
16849
- ngOnInit() {
16850
- if (!this._content) {
16851
- this._content = this.trimAndLowerCase(this.el.nativeElement.textContent);
16852
- this.forTypeAheadProvider.textContent = this._content;
16853
- }
16854
- }
16855
- }
16856
- 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 });
16857
- ClrForTypeAhead.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "15.0.2", type: ClrForTypeAhead, selector: "[clrForTypeAhead]", inputs: { content: ["clrForTypeAhead", "content"] }, providers: [ForTypeAheadProvider], ngImport: i0 });
16858
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.2", ngImport: i0, type: ClrForTypeAhead, decorators: [{
16859
- type: Directive,
16860
- args: [{
16861
- providers: [ForTypeAheadProvider],
16862
- selector: '[clrForTypeAhead]',
16863
- }]
16864
- }], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: ForTypeAheadProvider }]; }, propDecorators: { content: [{
16865
- type: Input,
16866
- args: ['clrForTypeAhead']
16867
- }] } });
16868
15460
 
16869
15461
  /*
16870
15462
  * Copyright (c) 2016-2022 VMware, Inc. All Rights Reserved.
16871
15463
  * This software is released under MIT license.
16872
15464
  * The full license information can be found in LICENSE in the root directory of this project.
16873
15465
  */
16874
- class ClrForTypeAheadModule {
16875
- }
16876
- ClrForTypeAheadModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.0.2", ngImport: i0, type: ClrForTypeAheadModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
16877
- ClrForTypeAheadModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "15.0.2", ngImport: i0, type: ClrForTypeAheadModule, declarations: [ClrForTypeAhead], imports: [CommonModule], exports: [ClrForTypeAhead] });
16878
- ClrForTypeAheadModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "15.0.2", ngImport: i0, type: ClrForTypeAheadModule, imports: [CommonModule] });
16879
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.2", ngImport: i0, type: ClrForTypeAheadModule, decorators: [{
16880
- type: NgModule,
16881
- args: [{
16882
- imports: [CommonModule],
16883
- declarations: [ClrForTypeAhead],
16884
- exports: [ClrForTypeAhead],
16885
- }]
16886
- }] });
16887
15466
 
16888
15467
  /*
16889
15468
  * Copyright (c) 2016-2022 VMware, Inc. All Rights Reserved.
@@ -17170,19 +15749,19 @@ class ClrDatagridPageSize {
17170
15749
  }
17171
15750
  ClrDatagridPageSize.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.0.2", ngImport: i0, type: ClrDatagridPageSize, deps: [{ token: Page }], target: i0.ɵɵFactoryTarget.Component });
17172
15751
  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: `
17173
- <ng-content></ng-content>
15752
+ <label [for]="pageSizeOptionsId"><ng-content></ng-content></label>
17174
15753
  <div class="clr-select-wrapper">
17175
15754
  <select [id]="pageSizeOptionsId" [class.clr-page-size-select]="true" [(ngModel)]="page.size">
17176
15755
  <option *ngFor="let option of pageSizeOptions" [ngValue]="option">{{ option }}</option>
17177
15756
  </select>
17178
15757
  </div>
17179
- `, 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"] }] });
15758
+ `, 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"] }] });
17180
15759
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.2", ngImport: i0, type: ClrDatagridPageSize, decorators: [{
17181
15760
  type: Component,
17182
15761
  args: [{
17183
15762
  selector: 'clr-dg-page-size',
17184
15763
  template: `
17185
- <ng-content></ng-content>
15764
+ <label [for]="pageSizeOptionsId"><ng-content></ng-content></label>
17186
15765
  <div class="clr-select-wrapper">
17187
15766
  <select [id]="pageSizeOptionsId" [class.clr-page-size-select]="true" [(ngModel)]="page.size">
17188
15767
  <option *ngFor="let option of pageSizeOptions" [ngValue]="option">{{ option }}</option>
@@ -17314,9 +15893,14 @@ class ClrDatagridPagination {
17314
15893
  }
17315
15894
  return middlePages;
17316
15895
  }
15896
+ verifyCurrentPage(event) {
15897
+ const parsed = parseInt(event.target.value, 10);
15898
+ if (parsed !== this.page.current) {
15899
+ event.target.value = this.page.current;
15900
+ }
15901
+ }
17317
15902
  /**
17318
- * We only update the pagination's current page on blur of the input field, or
17319
- * when they press enter.
15903
+ * We only update the pagination's current page on enter.
17320
15904
  */
17321
15905
  updateCurrentPage(event) {
17322
15906
  const parsed = parseInt(event.target.value, 10);
@@ -17377,7 +15961,7 @@ ClrDatagridPagination.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0",
17377
15961
  [size]="page.last.toString().length"
17378
15962
  [value]="page.current"
17379
15963
  (keydown.enter)="updateCurrentPage($event)"
17380
- (blur)="updateCurrentPage($event)"
15964
+ (blur)="verifyCurrentPage($event)"
17381
15965
  [attr.aria-label]="commonStrings.keys.currentPage"
17382
15966
  />
17383
15967
  <ng-template #readOnly>
@@ -17477,7 +16061,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.2", ngImpor
17477
16061
  [size]="page.last.toString().length"
17478
16062
  [value]="page.current"
17479
16063
  (keydown.enter)="updateCurrentPage($event)"
17480
- (blur)="updateCurrentPage($event)"
16064
+ (blur)="verifyCurrentPage($event)"
17481
16065
  [attr.aria-label]="commonStrings.keys.currentPage"
17482
16066
  />
17483
16067
  <ng-template #readOnly>
@@ -17598,20 +16182,20 @@ class ClrDatagridRowDetail {
17598
16182
  }
17599
16183
  get beginningOfExpandableContentAriaText() {
17600
16184
  return (this._beginningOfExpandableContentAriaText ||
17601
- `${this.commonStrings.keys.dategridExpandableBeginningOf || this.commonStrings.keys.datagridExpandableBeginningOf}
17602
- ${this.commonStrings.keys.dategridExpandableRowContent || this.commonStrings.keys.datagridExpandableRowContent}`);
16185
+ `${this.commonStrings.keys.datagridExpandableBeginningOf}
16186
+ ${this.commonStrings.keys.datagridExpandableRowContent}`);
17603
16187
  }
17604
16188
  get endOfExpandableContentAriaText() {
17605
16189
  return (this._endOfExpandableContentAriaText ||
17606
- `${this.commonStrings.keys.dategridExpandableEndOf || this.commonStrings.keys.datagridExpandableEndOf}
17607
- ${this.commonStrings.keys.dategridExpandableRowContent || this.commonStrings.keys.datagridExpandableRowContent}`);
16190
+ `${this.commonStrings.keys.datagridExpandableEndOf}
16191
+ ${this.commonStrings.keys.datagridExpandableRowContent}`);
17608
16192
  }
17609
16193
  }
17610
16194
  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 });
17611
16195
  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: `
17612
16196
  <div class="clr-sr-only">
17613
16197
  {{ beginningOfExpandableContentAriaText }}
17614
- {{ commonStrings.keys.dategridExpandableRowsHelperText || commonStrings.keys.datagridExpandableRowsHelperText }}
16198
+ {{ commonStrings.keys.datagridExpandableRowsHelperText }}
17615
16199
  </div>
17616
16200
  <ng-content></ng-content>
17617
16201
  <div class="clr-sr-only">{{ endOfExpandableContentAriaText }}</div>
@@ -17620,11 +16204,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.2", ngImpor
17620
16204
  type: Component,
17621
16205
  args: [{
17622
16206
  selector: 'clr-dg-row-detail',
17623
- // TODO: @deprecated - dategrid* keys are deprecated. Remove in v14.
17624
16207
  template: `
17625
16208
  <div class="clr-sr-only">
17626
16209
  {{ beginningOfExpandableContentAriaText }}
17627
- {{ commonStrings.keys.dategridExpandableRowsHelperText || commonStrings.keys.datagridExpandableRowsHelperText }}
16210
+ {{ commonStrings.keys.datagridExpandableRowsHelperText }}
17628
16211
  </div>
17629
16212
  <ng-content></ng-content>
17630
16213
  <div class="clr-sr-only">{{ endOfExpandableContentAriaText }}</div>
@@ -18246,6 +16829,8 @@ ClrDatagridModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", versi
18246
16829
  // Built-in shortcuts
18247
16830
  DatagridStringFilter,
18248
16831
  DatagridNumericFilter], imports: [CommonModule,
16832
+ CdkDragModule,
16833
+ CdkTrapFocusModule,
18249
16834
  ClrIconModule,
18250
16835
  ClrFormsModule,
18251
16836
  FormsModule,
@@ -18253,11 +16838,9 @@ ClrDatagridModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", versi
18253
16838
  ClrConditionalModule,
18254
16839
  ClrOutsideClickModule,
18255
16840
  ClrExpandableAnimationModule,
18256
- ClrDragAndDropModule,
18257
16841
  ClrSpinnerModule,
18258
16842
  ClrPopoverModuleNext,
18259
16843
  ClrKeyFocusModule,
18260
- ClrFocusTrapModule,
18261
16844
  ClrFocusOnViewInitModule], exports: [
18262
16845
  // Core
18263
16846
  ClrDatagrid,
@@ -18300,6 +16883,8 @@ ClrDatagridModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", versi
18300
16883
  DatagridStringFilter,
18301
16884
  DatagridNumericFilter] });
18302
16885
  ClrDatagridModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "15.0.2", ngImport: i0, type: ClrDatagridModule, imports: [CommonModule,
16886
+ CdkDragModule,
16887
+ CdkTrapFocusModule,
18303
16888
  ClrIconModule,
18304
16889
  ClrFormsModule,
18305
16890
  FormsModule,
@@ -18307,17 +16892,17 @@ ClrDatagridModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", versi
18307
16892
  ClrConditionalModule,
18308
16893
  ClrOutsideClickModule,
18309
16894
  ClrExpandableAnimationModule,
18310
- ClrDragAndDropModule,
18311
16895
  ClrSpinnerModule,
18312
16896
  ClrPopoverModuleNext,
18313
16897
  ClrKeyFocusModule,
18314
- ClrFocusTrapModule,
18315
16898
  ClrFocusOnViewInitModule] });
18316
16899
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.2", ngImport: i0, type: ClrDatagridModule, decorators: [{
18317
16900
  type: NgModule,
18318
16901
  args: [{
18319
16902
  imports: [
18320
16903
  CommonModule,
16904
+ CdkDragModule,
16905
+ CdkTrapFocusModule,
18321
16906
  ClrIconModule,
18322
16907
  ClrFormsModule,
18323
16908
  FormsModule,
@@ -18325,11 +16910,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.2", ngImpor
18325
16910
  ClrConditionalModule,
18326
16911
  ClrOutsideClickModule,
18327
16912
  ClrExpandableAnimationModule,
18328
- ClrDragAndDropModule,
18329
16913
  ClrSpinnerModule,
18330
16914
  ClrPopoverModuleNext,
18331
16915
  ClrKeyFocusModule,
18332
- ClrFocusTrapModule,
18333
16916
  ClrFocusOnViewInitModule,
18334
16917
  ],
18335
16918
  declarations: [CLR_DATAGRID_DIRECTIVES],
@@ -18478,7 +17061,7 @@ class ClrStackBlock {
18478
17061
  }
18479
17062
  }
18480
17063
  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 });
18481
- 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: `
17064
+ 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: `
18482
17065
  <!-- The 'preventDefault' for the space keydown event prevents the page
18483
17066
  from scrolling when a stack block is toggled via the space key. -->
18484
17067
  <div
@@ -18597,12 +17180,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.2", ngImpor
18597
17180
  }], ariaLevel: [{
18598
17181
  type: Input,
18599
17182
  args: ['clrStackViewLevel']
18600
- }], ariaSetsize: [{
18601
- type: Input,
18602
- args: ['clrStackViewSetsize']
18603
- }], ariaPosinset: [{
18604
- type: Input,
18605
- args: ['clrStackViewPosinset']
18606
17183
  }], onStackLabelFocus: [{
18607
17184
  type: HostBinding,
18608
17185
  args: ['class.on-focus']
@@ -18637,30 +17214,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.2", ngImpor
18637
17214
  * The full license information can be found in LICENSE in the root directory of this project.
18638
17215
  */
18639
17216
  class ClrStackView {
18640
- constructor() {
18641
- /**
18642
- * Undocumented experimental feature: inline editing.
18643
- */
18644
- this.editable = false;
18645
- this.save = new EventEmitter(false);
18646
- this._editMode = false;
18647
- this.editingChange = new EventEmitter(false);
18648
- }
18649
- get editing() {
18650
- return this.editable && this._editMode;
18651
- }
18652
- set editing(value) {
18653
- if (this.editable) {
18654
- this._editMode = value;
18655
- this.editingChange.emit(value);
18656
- if (!value) {
18657
- this.save.emit(null);
18658
- }
18659
- }
18660
- }
18661
17217
  }
18662
17218
  ClrStackView.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.0.2", ngImport: i0, type: ClrStackView, deps: [], target: i0.ɵɵFactoryTarget.Component });
18663
- ClrStackView.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.0.2", type: ClrStackView, selector: "clr-stack-view", outputs: { save: "clrStackSave" }, ngImport: i0, template: `
17219
+ ClrStackView.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.0.2", type: ClrStackView, selector: "clr-stack-view", ngImport: i0, template: `
18664
17220
  <ng-content select="clr-stack-header"></ng-content>
18665
17221
  <div class="stack-view"><ng-content></ng-content></div>
18666
17222
  `, isInline: true, styles: [":host{display:block}\n"] });
@@ -18670,10 +17226,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.2", ngImpor
18670
17226
  <ng-content select="clr-stack-header"></ng-content>
18671
17227
  <div class="stack-view"><ng-content></ng-content></div>
18672
17228
  `, styles: [":host{display:block}\n"] }]
18673
- }], propDecorators: { save: [{
18674
- type: Output,
18675
- args: ['clrStackSave']
18676
- }] } });
17229
+ }] });
18677
17230
 
18678
17231
  /*
18679
17232
  * Copyright (c) 2016-2022 VMware, Inc. All Rights Reserved.
@@ -18692,19 +17245,9 @@ ClrStackHeader.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version
18692
17245
 
18693
17246
  <span class="stack-actions">
18694
17247
  <ng-content select=".stack-action"></ng-content>
18695
- <!-- Undocumented experimental feature: inline editing. -->
18696
- <button
18697
- *ngIf="stackView.editable"
18698
- class="stack-action btn btn-sm btn-link"
18699
- (click)="stackView.editing = !stackView.editing"
18700
- type="button"
18701
- >
18702
- Edit
18703
- </button>
18704
- <!-- End of undocumented experimental feature. -->
18705
17248
  </span>
18706
17249
  </div>
18707
- `, isInline: true, styles: [":host{display:block}\n"], dependencies: [{ kind: "directive", type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }] });
17250
+ `, isInline: true, styles: [":host{display:block}\n"] });
18708
17251
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.2", ngImport: i0, type: ClrStackHeader, decorators: [{
18709
17252
  type: Component,
18710
17253
  args: [{ selector: 'clr-stack-header', template: `
@@ -18713,116 +17256,11 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.2", ngImpor
18713
17256
 
18714
17257
  <span class="stack-actions">
18715
17258
  <ng-content select=".stack-action"></ng-content>
18716
- <!-- Undocumented experimental feature: inline editing. -->
18717
- <button
18718
- *ngIf="stackView.editable"
18719
- class="stack-action btn btn-sm btn-link"
18720
- (click)="stackView.editing = !stackView.editing"
18721
- type="button"
18722
- >
18723
- Edit
18724
- </button>
18725
- <!-- End of undocumented experimental feature. -->
18726
17259
  </span>
18727
17260
  </div>
18728
17261
  `, styles: [":host{display:block}\n"] }]
18729
17262
  }], ctorParameters: function () { return [{ type: ClrStackView }]; } });
18730
17263
 
18731
- /*
18732
- * Copyright (c) 2016-2022 VMware, Inc. All Rights Reserved.
18733
- * This software is released under MIT license.
18734
- * The full license information can be found in LICENSE in the root directory of this project.
18735
- */
18736
- class StackControl {
18737
- constructor(stackView) {
18738
- this.stackView = stackView;
18739
- this.modelChange = new EventEmitter(false);
18740
- // Make the ClrStackView editable, since it contains a StackControl
18741
- this.stackView.editable = true;
18742
- this.subscription = this.stackView.editingChange.subscribe((editing) => {
18743
- // Edit mode was closed
18744
- if (!editing) {
18745
- this.modelChange.emit(this.model);
18746
- }
18747
- });
18748
- }
18749
- ngOnDestroy() {
18750
- this.subscription.unsubscribe();
18751
- }
18752
- }
18753
- StackControl.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.0.2", ngImport: i0, type: StackControl, deps: [{ token: ClrStackView }], target: i0.ɵɵFactoryTarget.Directive });
18754
- StackControl.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "15.0.2", type: StackControl, ngImport: i0 });
18755
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.2", ngImport: i0, type: StackControl, decorators: [{
18756
- type: Directive
18757
- }], ctorParameters: function () { return [{ type: ClrStackView }]; } });
18758
-
18759
- /*
18760
- * Copyright (c) 2016-2022 VMware, Inc. All Rights Reserved.
18761
- * This software is released under MIT license.
18762
- * The full license information can be found in LICENSE in the root directory of this project.
18763
- */
18764
- class ClrStackInput extends StackControl {
18765
- constructor(stackView) {
18766
- super(stackView);
18767
- this.stackView = stackView;
18768
- this.type = 'text';
18769
- }
18770
- }
18771
- ClrStackInput.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.0.2", ngImport: i0, type: ClrStackInput, deps: [{ token: ClrStackView }], target: i0.ɵɵFactoryTarget.Component });
18772
- 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: `
18773
- <span *ngIf="!stackView.editing">{{ model }}</span>
18774
- <input [type]="type" *ngIf="stackView.editing" [(ngModel)]="model" />
18775
- `, 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"] }] });
18776
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.2", ngImport: i0, type: ClrStackInput, decorators: [{
18777
- type: Component,
18778
- args: [{
18779
- selector: 'clr-stack-input',
18780
- inputs: ['model: clrModel', 'type'],
18781
- outputs: ['modelChange: clrModelChange'],
18782
- template: `
18783
- <span *ngIf="!stackView.editing">{{ model }}</span>
18784
- <input [type]="type" *ngIf="stackView.editing" [(ngModel)]="model" />
18785
- `,
18786
- }]
18787
- }], ctorParameters: function () { return [{ type: ClrStackView }]; } });
18788
-
18789
- /*
18790
- * Copyright (c) 2016-2022 VMware, Inc. All Rights Reserved.
18791
- * This software is released under MIT license.
18792
- * The full license information can be found in LICENSE in the root directory of this project.
18793
- */
18794
- class ClrStackSelect extends StackControl {
18795
- constructor(stackView) {
18796
- super(stackView);
18797
- this.stackView = stackView;
18798
- }
18799
- }
18800
- ClrStackSelect.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.0.2", ngImport: i0, type: ClrStackSelect, deps: [{ token: ClrStackView }], target: i0.ɵɵFactoryTarget.Component });
18801
- 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: `
18802
- <span *ngIf="!stackView.editing">{{ model }}</span>
18803
- <div class="select" *ngIf="stackView.editing">
18804
- <select [(ngModel)]="model">
18805
- <ng-content></ng-content>
18806
- </select>
18807
- </div>
18808
- `, 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"] }] });
18809
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.2", ngImport: i0, type: ClrStackSelect, decorators: [{
18810
- type: Component,
18811
- args: [{
18812
- selector: 'clr-stack-select',
18813
- inputs: ['model: clrModel'],
18814
- outputs: ['modelChange: clrModelChange'],
18815
- template: `
18816
- <span *ngIf="!stackView.editing">{{ model }}</span>
18817
- <div class="select" *ngIf="stackView.editing">
18818
- <select [(ngModel)]="model">
18819
- <ng-content></ng-content>
18820
- </select>
18821
- </div>
18822
- `,
18823
- }]
18824
- }], ctorParameters: function () { return [{ type: ClrStackView }]; } });
18825
-
18826
17264
  /*
18827
17265
  * Copyright (c) 2016-2022 VMware, Inc. All Rights Reserved.
18828
17266
  * This software is released under MIT license.
@@ -18835,14 +17273,6 @@ const CLR_STACK_VIEW_DIRECTIVES = [
18835
17273
  ClrStackContentInput,
18836
17274
  ClrStackViewLabel,
18837
17275
  ClrStackViewCustomTags,
18838
- /**
18839
- * Undocumented experimental feature: inline editing.
18840
- */
18841
- ClrStackInput,
18842
- ClrStackSelect,
18843
- /**
18844
- * End of undocumented experimental feature.
18845
- */
18846
17276
  ];
18847
17277
  class ClrStackViewModule {
18848
17278
  constructor() {
@@ -18855,22 +17285,12 @@ ClrStackViewModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", vers
18855
17285
  ClrStackBlock,
18856
17286
  ClrStackContentInput,
18857
17287
  ClrStackViewLabel,
18858
- ClrStackViewCustomTags,
18859
- /**
18860
- * Undocumented experimental feature: inline editing.
18861
- */
18862
- ClrStackInput,
18863
- ClrStackSelect], imports: [CommonModule, FormsModule, ClrIconModule, ClrExpandableAnimationModule], exports: [ClrStackView,
17288
+ ClrStackViewCustomTags], imports: [CommonModule, FormsModule, ClrIconModule, ClrExpandableAnimationModule], exports: [ClrStackView,
18864
17289
  ClrStackHeader,
18865
17290
  ClrStackBlock,
18866
17291
  ClrStackContentInput,
18867
17292
  ClrStackViewLabel,
18868
- ClrStackViewCustomTags,
18869
- /**
18870
- * Undocumented experimental feature: inline editing.
18871
- */
18872
- ClrStackInput,
18873
- ClrStackSelect] });
17293
+ ClrStackViewCustomTags] });
18874
17294
  ClrStackViewModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "15.0.2", ngImport: i0, type: ClrStackViewModule, imports: [CommonModule, FormsModule, ClrIconModule, ClrExpandableAnimationModule] });
18875
17295
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.2", ngImport: i0, type: ClrStackViewModule, decorators: [{
18876
17296
  type: NgModule,
@@ -19495,13 +17915,13 @@ const LVIEW_CONTEXT_INDEX = 8;
19495
17915
  // then those keys are sent together in one request.
19496
17916
  const TREE_TYPE_AHEAD_TIMEOUT = 200;
19497
17917
  class ClrTreeNode {
19498
- constructor(platformId, parent, forTypeAheadProvider, featuresService, expandService, commonStrings, focusManager, injector) {
17918
+ constructor(platformId, parent, featuresService, expandService, commonStrings, focusManager, elementRef, injector) {
19499
17919
  this.platformId = platformId;
19500
- this.forTypeAheadProvider = forTypeAheadProvider;
19501
17920
  this.featuresService = featuresService;
19502
17921
  this.expandService = expandService;
19503
17922
  this.commonStrings = commonStrings;
19504
17923
  this.focusManager = focusManager;
17924
+ this.elementRef = elementRef;
19505
17925
  this.STATES = ClrSelectedState;
19506
17926
  this.skipEmitChange = false;
19507
17927
  this.isModelLoading = false;
@@ -19580,6 +18000,9 @@ class ClrTreeNode {
19580
18000
  set expanded(value) {
19581
18001
  this.expandService.expanded = value;
19582
18002
  }
18003
+ set clrForTypeAhead(value) {
18004
+ this._model.textContent = trimAndLowerCase(value || this.elementRef.nativeElement.textContent);
18005
+ }
19583
18006
  ngOnInit() {
19584
18007
  this._model.expanded = this.expanded;
19585
18008
  this.subscriptions.push(this._model.selected.pipe(filter(() => !this.skipEmitChange)).subscribe(value => {
@@ -19599,13 +18022,15 @@ class ClrTreeNode {
19599
18022
  this.subscriptions.push(this._model.loading$.pipe(debounceTime(0)).subscribe(isLoading => (this.isModelLoading = isLoading)));
19600
18023
  }
19601
18024
  ngAfterContentInit() {
19602
- if (this.forTypeAheadProvider) {
19603
- this._model.textContent = this.forTypeAheadProvider.textContent;
19604
- this.subscriptions.push(this.typeAheadKeyEvent.pipe(debounceTime(TREE_TYPE_AHEAD_TIMEOUT)).subscribe((bufferedKeys) => {
19605
- this.focusManager.focusNodeStartsWith(bufferedKeys, this._model);
19606
- // reset once bufferedKeys are used
19607
- this.typeAheadKeyBuffer = '';
19608
- }));
18025
+ this.subscriptions.push(this.typeAheadKeyEvent.pipe(debounceTime(TREE_TYPE_AHEAD_TIMEOUT)).subscribe((bufferedKeys) => {
18026
+ this.focusManager.focusNodeStartsWith(bufferedKeys, this._model);
18027
+ // reset once bufferedKeys are used
18028
+ this.typeAheadKeyBuffer = '';
18029
+ }));
18030
+ }
18031
+ ngAfterViewInit() {
18032
+ if (!this._model.textContent) {
18033
+ this._model.textContent = trimAndLowerCase(this.elementRef.nativeElement.textContent);
19609
18034
  }
19610
18035
  }
19611
18036
  ngOnDestroy() {
@@ -19642,32 +18067,32 @@ class ClrTreeNode {
19642
18067
  // By default, pressing arrow key makes AT focus go into the nested content of the item.
19643
18068
  preventArrowKeyScroll(event);
19644
18069
  // https://www.w3.org/TR/wai-aria-practices-1.1/#keyboard-interaction-22
19645
- switch (keyValidator(event.key)) {
19646
- case KeyCodes.ArrowUp:
18070
+ switch (normalizeKey(event.key)) {
18071
+ case Keys.ArrowUp:
19647
18072
  this.focusManager.focusNodeAbove(this._model);
19648
18073
  break;
19649
- case KeyCodes.ArrowDown:
18074
+ case Keys.ArrowDown:
19650
18075
  this.focusManager.focusNodeBelow(this._model);
19651
18076
  break;
19652
- case KeyCodes.ArrowRight:
18077
+ case Keys.ArrowRight:
19653
18078
  this.expandOrFocusFirstChild();
19654
18079
  break;
19655
- case KeyCodes.ArrowLeft:
18080
+ case Keys.ArrowLeft:
19656
18081
  this.collapseOrFocusParent();
19657
18082
  break;
19658
- case KeyCodes.Home:
18083
+ case Keys.Home:
19659
18084
  event.preventDefault();
19660
18085
  this.focusManager.focusFirstVisibleNode();
19661
18086
  break;
19662
- case KeyCodes.End:
18087
+ case Keys.End:
19663
18088
  event.preventDefault();
19664
18089
  this.focusManager.focusLastVisibleNode();
19665
18090
  break;
19666
- case KeyCodes.Enter:
18091
+ case Keys.Enter:
19667
18092
  this.toggleExpandOrTriggerDefault();
19668
18093
  break;
19669
- case KeyCodes.Space:
19670
- case KeyCodes.Spacebar:
18094
+ case Keys.Space:
18095
+ case Keys.Spacebar:
19671
18096
  // to prevent scrolling on space key in this specific case
19672
18097
  event.preventDefault();
19673
18098
  this.toggleExpandOrTriggerDefault();
@@ -19728,8 +18153,8 @@ class ClrTreeNode {
19728
18153
  }
19729
18154
  }
19730
18155
  }
19731
- 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 });
19732
- 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: [
18156
+ 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 });
18157
+ 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: [
19733
18158
  trigger('toggleChildrenAnim', [
19734
18159
  transition('collapsed => expanded', [style({ height: 0 }), animate(200, style({ height: '*' }))]),
19735
18160
  transition('expanded => collapsed', [style({ height: '*' }), animate(200, style({ height: 0 }))]),
@@ -19748,7 +18173,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.2", ngImpor
19748
18173
  ]),
19749
18174
  ], host: {
19750
18175
  '[class.clr-tree-node]': 'true',
19751
- }, 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" }]
18176
+ }, 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" }]
19752
18177
  }], ctorParameters: function () { return [{ type: undefined, decorators: [{
19753
18178
  type: Inject,
19754
18179
  args: [PLATFORM_ID]
@@ -19756,11 +18181,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.2", ngImpor
19756
18181
  type: Optional
19757
18182
  }, {
19758
18183
  type: SkipSelf
19759
- }] }, { type: ForTypeAheadProvider, decorators: [{
19760
- type: Optional
19761
- }, {
19762
- type: Self
19763
- }] }, { type: TreeFeaturesService }, { type: IfExpandService }, { type: ClrCommonStringsService }, { type: TreeFocusManagerService }, { type: i0.Injector }]; }, propDecorators: { selected: [{
18184
+ }] }, { type: TreeFeaturesService }, { type: IfExpandService }, { type: ClrCommonStringsService }, { type: TreeFocusManagerService }, { type: i0.ElementRef }, { type: i0.Injector }]; }, propDecorators: { selected: [{
19764
18185
  type: Input,
19765
18186
  args: ['clrSelected']
19766
18187
  }], selectedChange: [{
@@ -19772,6 +18193,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.2", ngImpor
19772
18193
  }], expanded: [{
19773
18194
  type: Input,
19774
18195
  args: ['clrExpanded']
18196
+ }], clrForTypeAhead: [{
18197
+ type: Input,
18198
+ args: ['clrForTypeAhead']
19775
18199
  }], expandedChange: [{
19776
18200
  type: Output,
19777
18201
  args: ['clrExpandedChange']
@@ -19782,6 +18206,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.2", ngImpor
19782
18206
  type: ContentChildren,
19783
18207
  args: [ClrTreeNodeLink, { descendants: false }]
19784
18208
  }] } });
18209
+ function trimAndLowerCase(value) {
18210
+ return value.toLocaleLowerCase().trim();
18211
+ }
19785
18212
 
19786
18213
  /*
19787
18214
  * Copyright (c) 2016-2022 VMware, Inc. All Rights Reserved.
@@ -20034,10 +18461,10 @@ class DropdownFocusHandler {
20034
18461
  // whether root container or not, tab key should always toggle (i.e. close) the container
20035
18462
  this._unlistenFuncs.push(this.renderer.listen(el, 'keydown.tab', event => this.toggleService.toggleWithEvent(event)));
20036
18463
  if (this.parent) {
20037
- // if it's a nested container, pressing esc has the same effect as pressing left key, which closes the current
18464
+ // if it's a nested container, pressing escape has the same effect as pressing left key, which closes the current
20038
18465
  // popup and moves up to its parent. Here, we stop propagation so that the parent container
20039
- // doesn't receive the esc keydown
20040
- this._unlistenFuncs.push(this.renderer.listen(el, 'keydown.esc', event => {
18466
+ // doesn't receive the escape keydown
18467
+ this._unlistenFuncs.push(this.renderer.listen(el, 'keydown.escape', event => {
20041
18468
  this.focusService.move(ArrowKeyDirection.LEFT);
20042
18469
  event.stopPropagation();
20043
18470
  }));
@@ -20045,8 +18472,8 @@ class DropdownFocusHandler {
20045
18472
  else {
20046
18473
  // The root container is the only one we register to the focus service, others do not need focus
20047
18474
  this.focusService.registerContainer(el);
20048
- // The root container will simply close the container when esc key is pressed
20049
- this._unlistenFuncs.push(this.renderer.listen(el, 'keydown.esc', event => this.toggleService.toggleWithEvent(event)));
18475
+ // The root container will simply close the container when escape key is pressed
18476
+ this._unlistenFuncs.push(this.renderer.listen(el, 'keydown.escape', event => this.toggleService.toggleWithEvent(event)));
20050
18477
  // When the user moves focus outside of the menu, we close the dropdown
20051
18478
  this._unlistenFuncs.push(this.renderer.listen(el, 'blur', event => {
20052
18479
  // we clear out any existing focus on the items
@@ -20264,13 +18691,10 @@ const BASIC_FOCUSABLE_ITEM_PROVIDER = [
20264
18691
  * The full license information can be found in LICENSE in the root directory of this project.
20265
18692
  */
20266
18693
  class ClrDropdownItem {
20267
- constructor(dropdown, el, _dropdownService, renderer, focusableItem) {
18694
+ constructor(dropdown, _dropdownService, focusableItem) {
20268
18695
  this.dropdown = dropdown;
20269
- this.el = el;
20270
18696
  this._dropdownService = _dropdownService;
20271
- this.renderer = renderer;
20272
18697
  this.focusableItem = focusableItem;
20273
- this.setByDeprecatedDisabled = false;
20274
18698
  }
20275
18699
  set disabled(value) {
20276
18700
  // Empty string attribute evaluates to false but should disable the item, so we need to add a special case for it.
@@ -20279,17 +18703,6 @@ class ClrDropdownItem {
20279
18703
  get disabled() {
20280
18704
  return this.focusableItem.disabled;
20281
18705
  }
20282
- /*
20283
- * @deprecated since 3.0, remove in 4.0. the presence of this attribute makes it not-focusable in IE11. Use [clrDisabled] input instead.
20284
- */
20285
- set disabledDeprecated(value) {
20286
- // Empty string attribute evaluates to false but should disable the item, so we need to add a special case for it.
20287
- this.focusableItem.disabled = !!value || value === '';
20288
- this.setByDeprecatedDisabled = true;
20289
- }
20290
- get disabledDeprecated() {
20291
- return this.focusableItem.disabled;
20292
- }
20293
18706
  /**
20294
18707
  * Let you overwrite the focusable auto increment id.
20295
18708
  */
@@ -20299,22 +18712,28 @@ class ClrDropdownItem {
20299
18712
  get dropdownItemId() {
20300
18713
  return this.focusableItem.id;
20301
18714
  }
20302
- ngAfterViewInit() {
20303
- this.unlisten = this.renderer.listen(this.el.nativeElement, 'click', () => this.onDropdownItemClick());
20304
- }
20305
18715
  onDropdownItemClick() {
20306
- if (this.dropdown.isMenuClosable && !this.el.nativeElement.classList.contains('disabled')) {
20307
- this._dropdownService.closeMenus();
20308
- }
18716
+ // Ensure that the dropdown is closed after custom dropdown item click event handlers have run.
18717
+ setTimeout(() => {
18718
+ if (this.dropdown.isMenuClosable && !this.disabled) {
18719
+ this._dropdownService.closeMenus();
18720
+ }
18721
+ });
20309
18722
  }
20310
- ngOnDestroy() {
20311
- if (this.unlisten) {
20312
- this.unlisten();
18723
+ onSpaceKeydown($event) {
18724
+ this.stopImmediatePropagationIfDisabled($event);
18725
+ }
18726
+ onEnterKeydown($event) {
18727
+ this.stopImmediatePropagationIfDisabled($event);
18728
+ }
18729
+ stopImmediatePropagationIfDisabled($event) {
18730
+ if (this.disabled) {
18731
+ $event.stopImmediatePropagation();
20313
18732
  }
20314
18733
  }
20315
18734
  }
20316
- 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 });
20317
- 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 });
18735
+ 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 });
18736
+ 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 });
20318
18737
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.2", ngImport: i0, type: ClrDropdownItem, decorators: [{
20319
18738
  type: Directive,
20320
18739
  args: [{
@@ -20324,20 +18743,25 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.2", ngImpor
20324
18743
  '[class.dropdown-item]': 'true',
20325
18744
  '[attr.role]': '"menuitem"',
20326
18745
  '[attr.aria-disabled]': 'disabled',
20327
- '[attr.disabled]': "(disabled && setByDeprecatedDisabled)? '' : null",
20328
18746
  '[attr.id]': 'dropdownItemId',
20329
18747
  },
20330
18748
  providers: [BASIC_FOCUSABLE_ITEM_PROVIDER],
20331
18749
  }]
20332
- }], ctorParameters: function () { return [{ type: ClrDropdown }, { type: i0.ElementRef }, { type: RootDropdownService }, { type: i0.Renderer2 }, { type: FocusableItem }]; }, propDecorators: { disabled: [{
18750
+ }], ctorParameters: function () { return [{ type: ClrDropdown }, { type: RootDropdownService }, { type: FocusableItem }]; }, propDecorators: { disabled: [{
20333
18751
  type: Input,
20334
18752
  args: ['clrDisabled']
20335
- }], disabledDeprecated: [{
20336
- type: Input,
20337
- args: ['disabled']
20338
18753
  }], dropdownItemId: [{
20339
18754
  type: Input,
20340
18755
  args: ['id']
18756
+ }], onDropdownItemClick: [{
18757
+ type: HostListener,
18758
+ args: ['click']
18759
+ }], onSpaceKeydown: [{
18760
+ type: HostListener,
18761
+ args: ['keydown.space', ['$event']]
18762
+ }], onEnterKeydown: [{
18763
+ type: HostListener,
18764
+ args: ['keydown.enter', ['$event']]
20341
18765
  }] } });
20342
18766
 
20343
18767
  /*
@@ -20610,7 +19034,6 @@ class Popover {
20610
19034
  * This software is released under MIT license.
20611
19035
  * The full license information can be found in LICENSE in the root directory of this project.
20612
19036
  */
20613
- // Literally any annotation would work here, but writing our own @HoneyBadger annotation feels overkill.
20614
19037
  class AbstractPopover {
20615
19038
  constructor(injector, parentHost) {
20616
19039
  this.parentHost = parentHost;
@@ -20689,7 +19112,7 @@ class AbstractPopover {
20689
19112
  this.ngZone.runOutsideAngular(() => {
20690
19113
  this.documentESCListener = this.renderer.listen('document', 'keydown', event => {
20691
19114
  if (event && event.key) {
20692
- if (event.key === 'Escape' || event.key === 'Esc') {
19115
+ if (normalizeKey(event.key) === Keys.Escape) {
20693
19116
  this.ngZone.run(() => {
20694
19117
  this.toggleService.open = false;
20695
19118
  this.ref.markForCheck();
@@ -21833,143 +20256,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.2", ngImpor
21833
20256
  }]
21834
20257
  }], ctorParameters: function () { return [{ type: ResponsiveNavigationService }, { type: ClrCommonStringsService }]; } });
21835
20258
 
21836
- /*
21837
- * Copyright (c) 2016-2022 VMware, Inc. All Rights Reserved.
21838
- * This software is released under MIT license.
21839
- * The full license information can be found in LICENSE in the root directory of this project.
21840
- */
21841
- function refocusIfOutsideFocusTrapElement(focusedElement, focusTrapElement, elementToRefocus) {
21842
- const focusTrapIsCurrent = FocusTrapTrackerService.getCurrent() === focusTrapElement;
21843
- const elementToFocusIsOutsideFocusTrap = elementIsOutsideFocusTrapElement(focusedElement, focusTrapElement);
21844
- if (focusTrapIsCurrent && elementToFocusIsOutsideFocusTrap) {
21845
- elementToRefocus = elementToRefocus || focusTrapElement;
21846
- elementToRefocus.focus();
21847
- }
21848
- else {
21849
- focusedElement.focus();
21850
- }
21851
- }
21852
- function elementIsOutsideFocusTrapElement(focusedElement, focusTrapElement) {
21853
- if (focusedElement === focusTrapElement.topReboundElement ||
21854
- focusedElement === focusTrapElement.bottomReboundElement) {
21855
- return true;
21856
- }
21857
- const elementIsInFocusTrapLightDom = focusTrapElement.contains(focusedElement);
21858
- if (elementIsInFocusTrapLightDom) {
21859
- return false;
21860
- }
21861
- if (focusTrapElement !== null && focusTrapElement.contains(focusedElement)) {
21862
- return false;
21863
- }
21864
- return true;
21865
- }
21866
- function createFocusTrapReboundElement(document) {
21867
- const offScreenSpan = document.createElement('span');
21868
- offScreenSpan.setAttribute('tabindex', '0');
21869
- offScreenSpan.classList.add('offscreen-focus-rebounder');
21870
- return offScreenSpan;
21871
- }
21872
- function addReboundElementsToFocusTrapElement(document, focusTrapElement) {
21873
- if (focusTrapElement && !focusTrapElement.topReboundElement && !focusTrapElement.bottomReboundElement) {
21874
- focusTrapElement.topReboundElement = createFocusTrapReboundElement(document);
21875
- focusTrapElement.bottomReboundElement = createFocusTrapReboundElement(document);
21876
- const parent = focusTrapElement.parentElement;
21877
- const sibling = focusTrapElement.nextSibling;
21878
- if (parent) {
21879
- parent.insertBefore(focusTrapElement.topReboundElement, focusTrapElement);
21880
- if (sibling) {
21881
- parent.insertBefore(focusTrapElement.bottomReboundElement, sibling);
21882
- }
21883
- else {
21884
- parent.appendChild(focusTrapElement.bottomReboundElement);
21885
- }
21886
- }
21887
- }
21888
- }
21889
- function removeReboundElementsFromFocusTrapElement(focusTrapElement) {
21890
- if (focusTrapElement) {
21891
- const parent = focusTrapElement.parentElement;
21892
- if (parent) {
21893
- const topRebound = focusTrapElement.topReboundElement;
21894
- const bottomRebound = focusTrapElement.bottomReboundElement;
21895
- if (topRebound) {
21896
- parent.removeChild(topRebound);
21897
- }
21898
- if (bottomRebound) {
21899
- parent.removeChild(bottomRebound);
21900
- }
21901
- }
21902
- // These are here to to make sure that we completely delete all traces of the removed DOM objects.
21903
- delete focusTrapElement.topReboundElement;
21904
- delete focusTrapElement.bottomReboundElement;
21905
- }
21906
- }
21907
- // this helper exists to enable the focus trap class to handle vanilla html elements
21908
- // it's primary concern is to keep TS happy.
21909
- function castHtmlElementToFocusTrapElement(el) {
21910
- return el;
21911
- }
21912
- class FocusTrap {
21913
- constructor(renderer, injector, platformId, hostElement) {
21914
- this.renderer = renderer;
21915
- this.active = false;
21916
- if (isPlatformBrowser(platformId)) {
21917
- this._document = injector.get(DOCUMENT);
21918
- }
21919
- hostElement = castHtmlElementToFocusTrapElement(hostElement);
21920
- if (!hostElement.focusTrapId) {
21921
- hostElement.focusTrapId = createId();
21922
- }
21923
- this.focusTrapElement = hostElement;
21924
- }
21925
- enableFocusTrap() {
21926
- const fte = this.focusTrapElement;
21927
- const firstFocusElement = fte.querySelector('[cds-first-focus]');
21928
- const activeEl = this._document.activeElement;
21929
- if (FocusTrapTrackerService.getCurrent() === fte) {
21930
- throw new Error('Focus trap is already enabled for this instance.');
21931
- }
21932
- this.firstFocusElement = firstFocusElement || this.focusTrapElement;
21933
- addReboundElementsToFocusTrapElement(this._document, fte);
21934
- if (!isFocusable(fte)) {
21935
- fte.setAttribute('tabindex', '-1');
21936
- }
21937
- if (activeEl && isHTMLElement(activeEl)) {
21938
- this.previousFocus = activeEl;
21939
- }
21940
- FocusTrapTrackerService.setCurrent(fte);
21941
- // setTimeout here is required for Safari which may try to set focus on
21942
- // element before it is visible...
21943
- const focusTimer = setTimeout(() => {
21944
- this.firstFocusElement.focus();
21945
- clearTimeout(focusTimer);
21946
- }, 10);
21947
- this.onFocusInEvent = this.onFocusIn.bind(this);
21948
- this.unlisten = this.renderer.listen(this._document, 'focusin', this.onFocusInEvent);
21949
- this.active = true;
21950
- }
21951
- removeFocusTrap() {
21952
- if (this.unlisten) {
21953
- this.unlisten();
21954
- }
21955
- removeReboundElementsFromFocusTrapElement(this.focusTrapElement);
21956
- this.renderer.removeAttribute(this.focusTrapElement, 'tabindex');
21957
- FocusTrapTrackerService.activatePreviousCurrent();
21958
- this.active = false;
21959
- if (this.previousFocus) {
21960
- this.previousFocus.focus();
21961
- }
21962
- }
21963
- onFocusIn(event) {
21964
- refocusIfOutsideFocusTrapElement(event.composedPath()[0], this.focusTrapElement, this.firstFocusElement);
21965
- }
21966
- }
21967
- FocusTrap.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.0.2", ngImport: i0, type: FocusTrap, deps: "invalid", target: i0.ɵɵFactoryTarget.Injectable });
21968
- FocusTrap.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.0.2", ngImport: i0, type: FocusTrap });
21969
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.2", ngImport: i0, type: FocusTrap, decorators: [{
21970
- type: Injectable
21971
- }], ctorParameters: function () { return [{ type: i0.Renderer2 }, { type: i0.Injector }, { type: undefined }, { type: undefined }]; } });
21972
-
21973
20259
  /*
21974
20260
  * Copyright (c) 2016-2022 VMware, Inc. All Rights Reserved.
21975
20261
  * This software is released under MIT license.
@@ -21988,11 +20274,22 @@ const createCdsCloseButton = (document, ariaLabel) => {
21988
20274
  cdsCloseButton.className = 'clr-nav-close';
21989
20275
  return cdsCloseButton;
21990
20276
  };
21991
- class ClrNavLevel extends FocusTrap {
21992
- constructor(platformId, responsiveNavService, elementRef, renderer, injector) {
21993
- super(renderer, injector, platformId, elementRef.nativeElement);
20277
+ class StandaloneCdkTrapFocus extends CdkTrapFocus {
20278
+ }
20279
+ StandaloneCdkTrapFocus.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.0.2", ngImport: i0, type: StandaloneCdkTrapFocus, deps: null, target: i0.ɵɵFactoryTarget.Directive });
20280
+ StandaloneCdkTrapFocus.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "15.0.2", type: StandaloneCdkTrapFocus, isStandalone: true, usesInheritance: true, ngImport: i0 });
20281
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.2", ngImport: i0, type: StandaloneCdkTrapFocus, decorators: [{
20282
+ type: Directive,
20283
+ args: [{
20284
+ standalone: true,
20285
+ }]
20286
+ }] });
20287
+ class ClrNavLevel {
20288
+ constructor(platformId, cdkTrapFocus, responsiveNavService, elementRef, renderer, injector) {
20289
+ this.cdkTrapFocus = cdkTrapFocus;
21994
20290
  this.responsiveNavService = responsiveNavService;
21995
20291
  this.elementRef = elementRef;
20292
+ this.renderer = renderer;
21996
20293
  this._isOpen = false;
21997
20294
  if (isPlatformBrowser(platformId)) {
21998
20295
  this._document = injector.get(DOCUMENT);
@@ -22012,6 +20309,7 @@ class ClrNavLevel extends FocusTrap {
22012
20309
  .subscribe(() => this.close()));
22013
20310
  }
22014
20311
  ngOnInit() {
20312
+ this.cdkTrapFocus.enabled = false;
22015
20313
  if (!this.closeButtonAriaLabel) {
22016
20314
  this.closeButtonAriaLabel =
22017
20315
  this._level === ResponsiveNavCodes.NAV_LEVEL_1
@@ -22069,14 +20367,14 @@ class ClrNavLevel extends FocusTrap {
22069
20367
  open() {
22070
20368
  this._isOpen = true;
22071
20369
  this.showNavigation();
22072
- this.enableFocusTrap();
20370
+ this.cdkTrapFocus.enabled = true;
22073
20371
  this.showCloseButton();
22074
20372
  this.responsiveNavService.sendControlMessage(ResponsiveNavCodes.NAV_OPEN, this.level);
22075
20373
  }
22076
20374
  close() {
22077
20375
  this._isOpen = false;
22078
20376
  this.hideNavigation();
22079
- this.removeFocusTrap();
20377
+ this.cdkTrapFocus.enabled = false;
22080
20378
  this.hideCloseButton();
22081
20379
  this.responsiveNavService.sendControlMessage(ResponsiveNavCodes.NAV_CLOSE, this.level);
22082
20380
  }
@@ -22121,17 +20419,18 @@ class ClrNavLevel extends FocusTrap {
22121
20419
  this._subscription.unsubscribe();
22122
20420
  }
22123
20421
  }
22124
- 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 });
22125
- 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 });
20422
+ 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 });
20423
+ 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 });
22126
20424
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.2", ngImport: i0, type: ClrNavLevel, decorators: [{
22127
20425
  type: Directive,
22128
20426
  args: [{
22129
20427
  selector: '[clr-nav-level]',
20428
+ hostDirectives: [StandaloneCdkTrapFocus],
22130
20429
  }]
22131
20430
  }], ctorParameters: function () { return [{ type: undefined, decorators: [{
22132
20431
  type: Inject,
22133
20432
  args: [PLATFORM_ID]
22134
- }] }, { type: ResponsiveNavigationService }, { type: i0.ElementRef }, { type: i0.Renderer2 }, { type: i0.Injector }]; }, propDecorators: { _level: [{
20433
+ }] }, { type: StandaloneCdkTrapFocus }, { type: ResponsiveNavigationService }, { type: i0.ElementRef }, { type: i0.Renderer2 }, { type: i0.Injector }]; }, propDecorators: { _level: [{
22135
20434
  type: Input,
22136
20435
  args: ['clr-nav-level']
22137
20436
  }], closeButtonAriaLabel: [{
@@ -22772,7 +21071,7 @@ ClrTabs.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.0
22772
21071
  <!--tab links in overflow menu-->
22773
21072
  <clr-tab-overflow-content
22774
21073
  *ngIf="toggleService.open"
22775
- (document:keydown.esc)="closeOnEscapeKey()"
21074
+ (document:keydown.escape)="closeOnEscapeKey()"
22776
21075
  (document:click)="closeOnOutsideClick($event, tabOverflowTrigger)"
22777
21076
  (focusout)="closeOnFocusOut($event)"
22778
21077
  >
@@ -22836,7 +21135,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.2", ngImpor
22836
21135
  <!--tab links in overflow menu-->
22837
21136
  <clr-tab-overflow-content
22838
21137
  *ngIf="toggleService.open"
22839
- (document:keydown.esc)="closeOnEscapeKey()"
21138
+ (document:keydown.escape)="closeOnEscapeKey()"
22840
21139
  (document:click)="closeOnOutsideClick($event, tabOverflowTrigger)"
22841
21140
  (focusout)="closeOnFocusOut($event)"
22842
21141
  >
@@ -23123,7 +21422,6 @@ class ClrVerticalNavGroup {
23123
21422
  this._navService = _navService;
23124
21423
  this.commonStrings = commonStrings;
23125
21424
  this.wasExpanded = false;
23126
- this.groupLabel = this.commonStrings.keys.verticalNavGroupToggle;
23127
21425
  this.expandedChange = new EventEmitter(true);
23128
21426
  this._subscriptions = [];
23129
21427
  this._expandAnimationState = COLLAPSED_STATE;
@@ -23233,7 +21531,7 @@ class ClrVerticalNavGroup {
23233
21531
  }
23234
21532
  }
23235
21533
  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 });
23236
- 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: [
21534
+ 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: [
23237
21535
  trigger('clrExpand', [
23238
21536
  state(EXPANDED_STATE, style({ height: '*' })),
23239
21537
  state(COLLAPSED_STATE, style({ height: 0, visibility: 'hidden' })),
@@ -23248,13 +21546,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.2", ngImpor
23248
21546
  state(COLLAPSED_STATE, style({ height: 0, visibility: 'hidden' })),
23249
21547
  transition(`${EXPANDED_STATE} <=> ${COLLAPSED_STATE}`, animate('0.2s ease-in-out')),
23250
21548
  ]),
23251
- ], 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" }]
21549
+ ], 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" }]
23252
21550
  }], ctorParameters: function () { return [{ type: IfExpandService }, { type: VerticalNavGroupRegistrationService }, { type: VerticalNavGroupService }, { type: VerticalNavService }, { type: ClrCommonStringsService }]; }, propDecorators: { expanded: [{
23253
21551
  type: HostBinding,
23254
21552
  args: ['class.is-expanded']
23255
- }], groupLabel: [{
23256
- type: Input,
23257
- args: ['clrVerticalNavGroupLabel']
23258
21553
  }], userExpandedInput: [{
23259
21554
  type: Input,
23260
21555
  args: ['clrVerticalNavGroupExpanded']
@@ -23449,15 +21744,13 @@ class ClrModal {
23449
21744
  this.closeButtonAriaLabel = this.commonStrings.keys.close;
23450
21745
  this.staticBackdrop = true;
23451
21746
  this.skipAnimation = 'false';
23452
- // presently this is only used by wizards
23453
- this.bypassScrollService = false;
23454
21747
  this.stopClose = false;
23455
21748
  this.altClose = new EventEmitter(false);
23456
21749
  this.labelledBy = this.modalId;
23457
21750
  }
23458
21751
  // Detect when _open is set to true and set no-scrolling to true
23459
21752
  ngOnChanges(changes) {
23460
- if (!this.bypassScrollService && changes && Object.prototype.hasOwnProperty.call(changes, '_open')) {
21753
+ if (changes && Object.prototype.hasOwnProperty.call(changes, '_open')) {
23461
21754
  if (changes._open.currentValue) {
23462
21755
  this._scrollingService.stopScrolling();
23463
21756
  }
@@ -23485,8 +21778,6 @@ class ClrModal {
23485
21778
  return;
23486
21779
  }
23487
21780
  this._open = false;
23488
- // SPECME
23489
- this.focusTrap.setPreviousFocus(); // Handles moving focus back to the element that had it before.
23490
21781
  }
23491
21782
  fadeDone(e) {
23492
21783
  if (e.toState === 'void') {
@@ -23496,7 +21787,7 @@ class ClrModal {
23496
21787
  }
23497
21788
  }
23498
21789
  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 });
23499
- 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: [
21790
+ 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: [
23500
21791
  trigger('fadeDown', [
23501
21792
  transition('* => false', [style({ opacity: 0, transform: 'translate(0, -25%)' }), animate('0.2s ease-in-out')]),
23502
21793
  transition('false => *', [animate('0.2s ease-in-out', style({ opacity: 0, transform: 'translate(0, -25%)' }))]),
@@ -23517,11 +21808,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.2", ngImpor
23517
21808
  transition('void => *', [style({ opacity: 0 }), animate('0.2s ease-in-out', style({ opacity: 0.85 }))]),
23518
21809
  transition('* => void', [animate('0.2s ease-in-out', style({ opacity: 0 }))]),
23519
21810
  ]),
23520
- ], 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"] }]
23521
- }], ctorParameters: function () { return [{ type: ScrollingService }, { type: ClrCommonStringsService }]; }, propDecorators: { focusTrap: [{
23522
- type: ViewChild,
23523
- args: [FocusTrapDirective]
23524
- }], _open: [{
21811
+ ], 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"] }]
21812
+ }], ctorParameters: function () { return [{ type: ScrollingService }, { type: ClrCommonStringsService }]; }, propDecorators: { _open: [{
23525
21813
  type: HostBinding,
23526
21814
  args: ['class.open']
23527
21815
  }, {
@@ -23545,9 +21833,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.2", ngImpor
23545
21833
  }], skipAnimation: [{
23546
21834
  type: Input,
23547
21835
  args: ['clrModalSkipAnimation']
23548
- }], bypassScrollService: [{
23549
- type: Input,
23550
- args: ['clrModalOverrideScrollService']
23551
21836
  }], stopClose: [{
23552
21837
  type: Input,
23553
21838
  args: ['clrModalPreventClose']
@@ -23636,12 +21921,12 @@ class ClrModalModule {
23636
21921
  }
23637
21922
  }
23638
21923
  ClrModalModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.0.2", ngImport: i0, type: ClrModalModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
23639
- 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] });
23640
- ClrModalModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "15.0.2", ngImport: i0, type: ClrModalModule, imports: [CommonModule, ClrIconModule, ClrFocusTrapModule, ClrFocusOnViewInitModule, ClrIconModule, ClrFocusOnViewInitModule] });
21924
+ 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] });
21925
+ ClrModalModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "15.0.2", ngImport: i0, type: ClrModalModule, imports: [CommonModule, CdkTrapFocusModule, ClrIconModule, ClrFocusOnViewInitModule, ClrIconModule, ClrFocusOnViewInitModule] });
23641
21926
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.2", ngImport: i0, type: ClrModalModule, decorators: [{
23642
21927
  type: NgModule,
23643
21928
  args: [{
23644
- imports: [CommonModule, ClrIconModule, ClrFocusTrapModule, ClrFocusOnViewInitModule],
21929
+ imports: [CommonModule, CdkTrapFocusModule, ClrIconModule, ClrFocusOnViewInitModule],
23645
21930
  declarations: [CLR_MODAL_DIRECTIVES],
23646
21931
  exports: [CLR_MODAL_DIRECTIVES, ClrIconModule, ClrFocusOnViewInitModule],
23647
21932
  }]
@@ -23876,6 +22161,46 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.2", ngImpor
23876
22161
  type: Injectable
23877
22162
  }] });
23878
22163
 
22164
+ /*
22165
+ * Copyright (c) 2016-2022 VMware, Inc. All Rights Reserved.
22166
+ * This software is released under MIT license.
22167
+ * The full license information can be found in LICENSE in the root directory of this project.
22168
+ */
22169
+ class TooltipMouseService {
22170
+ constructor(toggleService) {
22171
+ this.toggleService = toggleService;
22172
+ }
22173
+ onMouseEnterTrigger() {
22174
+ this.mouseOverTrigger = true;
22175
+ this.toggleService.open = true;
22176
+ }
22177
+ onMouseLeaveTrigger() {
22178
+ this.mouseOverTrigger = false;
22179
+ this.hideIfMouseOut();
22180
+ }
22181
+ onMouseEnterContent() {
22182
+ this.mouseOverContent = true;
22183
+ }
22184
+ onMouseLeaveContent() {
22185
+ this.mouseOverContent = false;
22186
+ this.hideIfMouseOut();
22187
+ }
22188
+ hideIfMouseOut() {
22189
+ // A zero timeout is used so that the code has a chance to update
22190
+ // the `mouseOverContent` property after the user moves the mouse from the trigger to the content.
22191
+ setTimeout(() => {
22192
+ if (!this.mouseOverTrigger && !this.mouseOverContent) {
22193
+ this.toggleService.open = false;
22194
+ }
22195
+ }, 0);
22196
+ }
22197
+ }
22198
+ TooltipMouseService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.0.2", ngImport: i0, type: TooltipMouseService, deps: [{ token: ClrPopoverToggleService }], target: i0.ɵɵFactoryTarget.Injectable });
22199
+ TooltipMouseService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.0.2", ngImport: i0, type: TooltipMouseService });
22200
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.2", ngImport: i0, type: TooltipMouseService, decorators: [{
22201
+ type: Injectable
22202
+ }], ctorParameters: function () { return [{ type: ClrPopoverToggleService }]; } });
22203
+
23879
22204
  /*
23880
22205
  * Copyright (c) 2016-2022 VMware, Inc. All Rights Reserved.
23881
22206
  * This software is released under MIT license.
@@ -23884,7 +22209,12 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.2", ngImpor
23884
22209
  class ClrTooltip {
23885
22210
  }
23886
22211
  ClrTooltip.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.0.2", ngImport: i0, type: ClrTooltip, deps: [], target: i0.ɵɵFactoryTarget.Component });
23887
- 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 });
22212
+ ClrTooltip.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.0.2", type: ClrTooltip, selector: "clr-tooltip", host: { properties: { "class.tooltip": "true" } }, providers: [
22213
+ ClrPopoverToggleService,
22214
+ { provide: POPOVER_HOST_ANCHOR, useExisting: ElementRef },
22215
+ TooltipIdService,
22216
+ TooltipMouseService,
22217
+ ], ngImport: i0, template: `<ng-content></ng-content>`, isInline: true });
23888
22218
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.2", ngImport: i0, type: ClrTooltip, decorators: [{
23889
22219
  type: Component,
23890
22220
  args: [{
@@ -23893,7 +22223,12 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.2", ngImpor
23893
22223
  host: {
23894
22224
  '[class.tooltip]': 'true',
23895
22225
  },
23896
- providers: [ClrPopoverToggleService, { provide: POPOVER_HOST_ANCHOR, useExisting: ElementRef }, TooltipIdService],
22226
+ providers: [
22227
+ ClrPopoverToggleService,
22228
+ { provide: POPOVER_HOST_ANCHOR, useExisting: ElementRef },
22229
+ TooltipIdService,
22230
+ TooltipMouseService,
22231
+ ],
23897
22232
  }]
23898
22233
  }] });
23899
22234
 
@@ -23916,9 +22251,10 @@ const SIZES = ['xs', 'sm', 'md', 'lg'];
23916
22251
  const defaultPosition = 'right';
23917
22252
  const defaultSize = 'sm';
23918
22253
  class ClrTooltipContent extends AbstractPopover {
23919
- constructor(injector, parentHost, tooltipIdService) {
22254
+ constructor(injector, parentHost, tooltipIdService, tooltipMouseService) {
23920
22255
  super(injector, parentHost);
23921
22256
  this.tooltipIdService = tooltipIdService;
22257
+ this.tooltipMouseService = tooltipMouseService;
23922
22258
  if (!parentHost) {
23923
22259
  throw new Error('clr-tooltip-content should only be used inside of a clr-tooltip');
23924
22260
  }
@@ -23984,13 +22320,19 @@ class ClrTooltipContent extends AbstractPopover {
23984
22320
  this.size = this.size || defaultSize;
23985
22321
  this.position = this.position || defaultPosition;
23986
22322
  }
22323
+ onMouseEnter() {
22324
+ this.tooltipMouseService.onMouseEnterContent();
22325
+ }
22326
+ onMouseLeave() {
22327
+ this.tooltipMouseService.onMouseLeaveContent();
22328
+ }
23987
22329
  updateCssClass({ oldClass, newClass }) {
23988
22330
  this.renderer.removeClass(this.el.nativeElement, oldClass);
23989
22331
  this.renderer.addClass(this.el.nativeElement, newClass);
23990
22332
  }
23991
22333
  }
23992
- 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 });
23993
- 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 });
22334
+ 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 });
22335
+ 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 });
23994
22336
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.2", ngImport: i0, type: ClrTooltipContent, decorators: [{
23995
22337
  type: Component,
23996
22338
  args: [{
@@ -24008,7 +22350,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.2", ngImpor
24008
22350
  }, {
24009
22351
  type: Inject,
24010
22352
  args: [POPOVER_HOST_ANCHOR]
24011
- }] }, { type: TooltipIdService }]; }, propDecorators: { id: [{
22353
+ }] }, { type: TooltipIdService }, { type: TooltipMouseService }]; }, propDecorators: { id: [{
24012
22354
  type: Input
24013
22355
  }], position: [{
24014
22356
  type: Input,
@@ -24016,6 +22358,12 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.2", ngImpor
24016
22358
  }], size: [{
24017
22359
  type: Input,
24018
22360
  args: ['clrSize']
22361
+ }], onMouseEnter: [{
22362
+ type: HostListener,
22363
+ args: ['mouseenter']
22364
+ }], onMouseLeave: [{
22365
+ type: HostListener,
22366
+ args: ['mouseleave']
24019
22367
  }] } });
24020
22368
 
24021
22369
  /*
@@ -24024,25 +22372,32 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.2", ngImpor
24024
22372
  * The full license information can be found in LICENSE in the root directory of this project.
24025
22373
  */
24026
22374
  class ClrTooltipTrigger {
24027
- constructor(toggleService, tooltipIdService) {
22375
+ constructor(toggleService, tooltipIdService, tooltipMouseService) {
24028
22376
  this.toggleService = toggleService;
24029
22377
  this.tooltipIdService = tooltipIdService;
22378
+ this.tooltipMouseService = tooltipMouseService;
24030
22379
  this.subs = [];
24031
22380
  // The aria-described by comes from the id of content. It
24032
22381
  this.subs.push(this.tooltipIdService.id.subscribe(tooltipId => (this.ariaDescribedBy = tooltipId)));
24033
22382
  }
22383
+ ngOnDestroy() {
22384
+ this.subs.forEach(sub => sub.unsubscribe());
22385
+ }
24034
22386
  showTooltip() {
24035
22387
  this.toggleService.open = true;
24036
22388
  }
24037
22389
  hideTooltip() {
24038
22390
  this.toggleService.open = false;
24039
22391
  }
24040
- ngOnDestroy() {
24041
- this.subs.forEach(sub => sub.unsubscribe());
22392
+ onMouseEnter() {
22393
+ this.tooltipMouseService.onMouseEnterTrigger();
22394
+ }
22395
+ onMouseLeave() {
22396
+ this.tooltipMouseService.onMouseLeaveTrigger();
24042
22397
  }
24043
22398
  }
24044
- 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 });
24045
- 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 });
22399
+ 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 });
22400
+ 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 });
24046
22401
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.2", ngImport: i0, type: ClrTooltipTrigger, decorators: [{
24047
22402
  type: Directive,
24048
22403
  args: [{
@@ -24054,18 +22409,18 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.2", ngImpor
24054
22409
  '[attr.role]': '"button"',
24055
22410
  },
24056
22411
  }]
24057
- }], ctorParameters: function () { return [{ type: ClrPopoverToggleService }, { type: TooltipIdService }]; }, propDecorators: { showTooltip: [{
24058
- type: HostListener,
24059
- args: ['mouseenter']
24060
- }, {
22412
+ }], ctorParameters: function () { return [{ type: ClrPopoverToggleService }, { type: TooltipIdService }, { type: TooltipMouseService }]; }, propDecorators: { showTooltip: [{
24061
22413
  type: HostListener,
24062
22414
  args: ['focus']
24063
22415
  }], hideTooltip: [{
24064
- type: HostListener,
24065
- args: ['mouseleave']
24066
- }, {
24067
22416
  type: HostListener,
24068
22417
  args: ['blur']
22418
+ }], onMouseEnter: [{
22419
+ type: HostListener,
22420
+ args: ['mouseenter']
22421
+ }], onMouseLeave: [{
22422
+ type: HostListener,
22423
+ args: ['mouseleave']
24069
22424
  }] } });
24070
22425
 
24071
22426
  /*
@@ -26605,13 +24960,12 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.2", ngImpor
26605
24960
  * The full license information can be found in LICENSE in the root directory of this project.
26606
24961
  */
26607
24962
  class ClrWizard {
26608
- constructor(platformId, navService, pageCollection, buttonService, headerActionService, elementRef, differs) {
24963
+ constructor(platformId, navService, pageCollection, buttonService, headerActionService, differs) {
26609
24964
  this.platformId = platformId;
26610
24965
  this.navService = navService;
26611
24966
  this.pageCollection = pageCollection;
26612
24967
  this.buttonService = buttonService;
26613
24968
  this.headerActionService = headerActionService;
26614
- this.elementRef = elementRef;
26615
24969
  /**
26616
24970
  * Set the modal size of the wizard. Set using `[clrWizardSize]` input.
26617
24971
  */
@@ -26627,13 +24981,6 @@ class ClrWizard {
26627
24981
  this._stopCancel = false;
26628
24982
  this._stopNavigation = false;
26629
24983
  this._disableStepnav = false;
26630
- /**
26631
- * Used to communicate to the underlying modal that animations are not
26632
- * wanted. Primary use is for the display of static/inline wizards.
26633
- * Set using `[clrWizardPreventModalAnimation]` input.
26634
- */
26635
- /** @deprecated since 3.0, input should be removed in 4.0 because is only related to inline wizards */
26636
- this._stopModalAnimations = false;
26637
24984
  /**
26638
24985
  * Emits when the wizard is opened or closed.
26639
24986
  * Listen via `(clrWizardOpenChange)` event.
@@ -26754,9 +25101,6 @@ class ClrWizard {
26754
25101
  get disableStepnav() {
26755
25102
  return this._disableStepnav;
26756
25103
  }
26757
- get stopModalAnimations() {
26758
- return this._stopModalAnimations ? 'true' : 'false';
26759
- }
26760
25104
  get currentPage() {
26761
25105
  return this.navService.currentPage;
26762
25106
  }
@@ -26769,13 +25113,9 @@ class ClrWizard {
26769
25113
  get isFirst() {
26770
25114
  return this.navService.currentPageIsFirst;
26771
25115
  }
26772
- get isStatic() {
26773
- return this.elementRef.nativeElement.classList.contains('clr-wizard--inline');
26774
- }
26775
25116
  ngAfterContentInit() {
26776
25117
  this.pageCollection.pages = this.pages;
26777
25118
  this.headerActionService.wizardHeaderActions = this.headerActions;
26778
- this.initializeButtons();
26779
25119
  }
26780
25120
  ngDoCheck() {
26781
25121
  this.updateNavOnPageChanges();
@@ -26977,12 +25317,6 @@ class ClrWizard {
26977
25317
  changes.forEachRemovedItem(() => this.navService.updateNavigation());
26978
25318
  }
26979
25319
  }
26980
- initializeButtons() {
26981
- // Only trigger buttons ready if default is open (inlined)
26982
- if (this._open) {
26983
- this.buttonService.buttonsReady = true;
26984
- }
26985
- }
26986
25320
  emitWizardFinished() {
26987
25321
  if (!this.stopNext) {
26988
25322
  this.forceFinish();
@@ -26990,8 +25324,8 @@ class ClrWizard {
26990
25324
  this.wizardFinished.emit();
26991
25325
  }
26992
25326
  }
26993
- 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 });
26994
- 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" }] });
25327
+ 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 });
25328
+ 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" }] });
26995
25329
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.2", ngImport: i0, type: ClrWizard, decorators: [{
26996
25330
  type: Component,
26997
25331
  args: [{ selector: 'clr-wizard', providers: [WizardNavigationService, PageCollectionService, ButtonHubService, HeaderActionService], host: {
@@ -27000,11 +25334,11 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.2", ngImpor
27000
25334
  '[class.wizard-lg]': "size == 'lg'",
27001
25335
  '[class.wizard-xl]': "size == 'xl'",
27002
25336
  '[class.lastPage]': 'navService.currentPageIsLast',
27003
- }, 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" }]
25337
+ }, 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" }]
27004
25338
  }], ctorParameters: function () { return [{ type: undefined, decorators: [{
27005
25339
  type: Inject,
27006
25340
  args: [PLATFORM_ID]
27007
- }] }, { type: WizardNavigationService }, { type: PageCollectionService }, { type: ButtonHubService }, { type: HeaderActionService }, { type: i0.ElementRef }, { type: i0.IterableDiffers }]; }, propDecorators: { size: [{
25341
+ }] }, { type: WizardNavigationService }, { type: PageCollectionService }, { type: ButtonHubService }, { type: HeaderActionService }, { type: i0.IterableDiffers }]; }, propDecorators: { size: [{
27008
25342
  type: Input,
27009
25343
  args: ['clrWizardSize']
27010
25344
  }], closable: [{
@@ -27028,9 +25362,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.2", ngImpor
27028
25362
  }], disableStepnav: [{
27029
25363
  type: Input,
27030
25364
  args: ['clrWizardDisableStepnav']
27031
- }], _stopModalAnimations: [{
27032
- type: Input,
27033
- args: ['clrWizardPreventModalAnimation']
27034
25365
  }], _openChanged: [{
27035
25366
  type: Output,
27036
25367
  args: ['clrWizardOpenChange']
@@ -27331,15 +25662,12 @@ ClarityModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version:
27331
25662
  ClrModalModule,
27332
25663
  ClrLoadingModule,
27333
25664
  ClrConditionalModule,
27334
- ClrFocusTrapModule,
27335
25665
  ClrFocusOnViewInitModule,
27336
- ClrForTypeAheadModule,
27337
25666
  ClrButtonModule,
27338
25667
  ClrFormsModule,
27339
25668
  ClrLayoutModule,
27340
25669
  ClrPopoverModule,
27341
25670
  ClrWizardModule,
27342
- ClrDragAndDropModule,
27343
25671
  ClrStepperModule,
27344
25672
  ClrSpinnerModule,
27345
25673
  ClrProgressBarModule,
@@ -27351,15 +25679,12 @@ ClarityModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version:
27351
25679
  ClrModalModule,
27352
25680
  ClrLoadingModule,
27353
25681
  ClrConditionalModule,
27354
- ClrFocusTrapModule,
27355
25682
  ClrFocusOnViewInitModule,
27356
- ClrForTypeAheadModule,
27357
25683
  ClrButtonModule,
27358
25684
  ClrFormsModule,
27359
25685
  ClrLayoutModule,
27360
25686
  ClrPopoverModule,
27361
25687
  ClrWizardModule,
27362
- ClrDragAndDropModule,
27363
25688
  ClrStepperModule,
27364
25689
  ClrSpinnerModule,
27365
25690
  ClrProgressBarModule,
@@ -27375,15 +25700,12 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.2", ngImpor
27375
25700
  ClrModalModule,
27376
25701
  ClrLoadingModule,
27377
25702
  ClrConditionalModule,
27378
- ClrFocusTrapModule,
27379
25703
  ClrFocusOnViewInitModule,
27380
- ClrForTypeAheadModule,
27381
25704
  ClrButtonModule,
27382
25705
  ClrFormsModule,
27383
25706
  ClrLayoutModule,
27384
25707
  ClrPopoverModule,
27385
25708
  ClrWizardModule,
27386
- ClrDragAndDropModule,
27387
25709
  ClrStepperModule,
27388
25710
  ClrSpinnerModule,
27389
25711
  ClrProgressBarModule,
@@ -27683,5 +26005,5 @@ const CLR_MENU_POSITIONS = [
27683
26005
  * Generated bundle index. Do not edit.
27684
26006
  */
27685
26007
 
27686
- 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 };
26008
+ 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 };
27687
26009
  //# sourceMappingURL=clr-angular.mjs.map