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