@clr/angular 17.10.0 → 17.11.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/clarity.api.md +126 -56
- package/data/datagrid/datagrid-column.d.ts +6 -1
- package/data/datagrid/datagrid-filter.d.ts +2 -9
- package/data/datagrid/datagrid-row.d.ts +1 -0
- package/data/datagrid/datagrid-virtual-scroll.directive.d.ts +2 -0
- package/data/datagrid/datagrid.d.ts +9 -3
- package/data/datagrid/datagrid.module.d.ts +23 -22
- package/data/datagrid/index.d.ts +1 -0
- package/data/datagrid/render/row-detail-renderer.d.ts +11 -0
- package/data/datagrid/render/row-renderer.d.ts +3 -2
- package/data/datagrid/utils/datagrid-filter-registrar.d.ts +1 -1
- package/data/datagrid/utils/key-navigation-grid.controller.d.ts +7 -8
- package/data/datagrid/utils/key-navigation-strategies/expanded-columns-row.d.ts +0 -2
- package/data/datagrid/utils/key-navigation-strategies/expanded-row.d.ts +0 -2
- package/data/datagrid/utils/key-navigation-utils.d.ts +2 -0
- package/esm2020/accordion/stepper/stepper-panel.mjs +3 -3
- package/esm2020/button/button-group/button.mjs +20 -4
- package/esm2020/data/datagrid/datagrid-column.mjs +33 -17
- package/esm2020/data/datagrid/datagrid-detail-header.mjs +3 -3
- package/esm2020/data/datagrid/datagrid-filter.mjs +2 -21
- package/esm2020/data/datagrid/datagrid-pagination.mjs +35 -31
- package/esm2020/data/datagrid/datagrid-row.mjs +6 -7
- package/esm2020/data/datagrid/datagrid-virtual-scroll.directive.mjs +30 -32
- package/esm2020/data/datagrid/datagrid.mjs +65 -13
- package/esm2020/data/datagrid/datagrid.module.mjs +5 -1
- package/esm2020/data/datagrid/index.mjs +2 -1
- package/esm2020/data/datagrid/render/main-renderer.mjs +10 -4
- package/esm2020/data/datagrid/render/row-detail-renderer.mjs +31 -0
- package/esm2020/data/datagrid/render/row-renderer.mjs +5 -7
- package/esm2020/data/datagrid/utils/datagrid-filter-registrar.mjs +1 -1
- package/esm2020/data/datagrid/utils/key-navigation-grid.controller.mjs +34 -34
- package/esm2020/data/datagrid/utils/key-navigation-strategies/expanded-columns-row.mjs +1 -4
- package/esm2020/data/datagrid/utils/key-navigation-strategies/expanded-row.mjs +1 -4
- package/esm2020/data/datagrid/utils/key-navigation-utils.mjs +15 -2
- package/esm2020/data/stack-view/stack-block.mjs +3 -3
- package/esm2020/emphasis/alert/alert.mjs +3 -3
- package/esm2020/forms/combobox/combobox.mjs +3 -3
- package/esm2020/forms/combobox/combobox.module.mjs +20 -3
- package/esm2020/forms/combobox/index.mjs +2 -1
- package/esm2020/forms/combobox/option-group.mjs +42 -0
- package/esm2020/forms/combobox/option-items.directive.mjs +5 -1
- package/esm2020/forms/combobox/options.mjs +3 -3
- package/esm2020/forms/common/abstract-control.mjs +1 -1
- package/esm2020/forms/common/if-control-state/abstract-if-state.mjs +1 -1
- package/esm2020/forms/datepicker/datepicker-view-manager.mjs +3 -3
- package/esm2020/forms/file-input/file-input-container.mjs +4 -4
- package/esm2020/forms/file-input/file-input.mjs +11 -4
- package/esm2020/forms/number-input/number-input-container.mjs +6 -3
- package/esm2020/forms/number-input/number-input.mjs +10 -3
- package/esm2020/layout/breadcrumbs/breadcrumbs.mjs +2 -2
- package/esm2020/modal/index.mjs +2 -2
- package/esm2020/modal/modal-host.component.mjs +29 -0
- package/esm2020/modal/modal.mjs +7 -3
- package/esm2020/modal/modal.module.mjs +4 -4
- package/esm2020/modal/side-panel.mjs +102 -47
- package/esm2020/popover/common/abstract-popover.mjs +8 -2
- package/esm2020/popover/dropdown/dropdown-item.mjs +10 -4
- package/esm2020/popover/dropdown/dropdown-trigger.mjs +12 -4
- package/esm2020/popover/dropdown/utils/content-wrapping.mjs +22 -0
- package/esm2020/utils/animations/expandable-animation/base-expandable-animation.mjs +9 -1
- package/esm2020/utils/animations/expandable-animation/expandable-animation.mjs +5 -6
- package/esm2020/utils/chocolate/oompa-loompa.mjs +1 -1
- package/esm2020/utils/i18n/common-strings.default.mjs +2 -1
- package/esm2020/utils/i18n/common-strings.interface.mjs +1 -1
- package/esm2020/wizard/wizard-stepnav-item.mjs +60 -24
- package/esm2020/wizard/wizard.mjs +3 -3
- package/fesm2015/clr-angular.mjs +663 -330
- package/fesm2015/clr-angular.mjs.map +1 -1
- package/fesm2020/clr-angular.mjs +656 -325
- package/fesm2020/clr-angular.mjs.map +1 -1
- package/forms/combobox/combobox.module.d.ts +12 -11
- package/forms/combobox/index.d.ts +1 -0
- package/forms/combobox/option-group.d.ts +9 -0
- package/forms/combobox/option-items.directive.d.ts +1 -0
- package/forms/common/abstract-control.d.ts +1 -1
- package/forms/common/if-control-state/abstract-if-state.d.ts +1 -1
- package/forms/file-input/file-input.d.ts +2 -0
- package/forms/number-input/number-input-container.d.ts +1 -0
- package/forms/number-input/number-input.d.ts +2 -0
- package/modal/index.d.ts +1 -1
- package/modal/modal-host.component.d.ts +5 -0
- package/modal/modal.module.d.ts +2 -2
- package/modal/side-panel.d.ts +18 -10
- package/package.json +2 -2
- package/popover/common/abstract-popover.d.ts +1 -1
- package/popover/dropdown/dropdown-item.d.ts +5 -1
- package/popover/dropdown/dropdown-trigger.d.ts +5 -2
- package/popover/dropdown/utils/content-wrapping.d.ts +2 -0
- package/utils/animations/expandable-animation/base-expandable-animation.d.ts +3 -0
- package/utils/animations/expandable-animation/expandable-animation.d.ts +0 -3
- package/utils/chocolate/oompa-loompa.d.ts +1 -1
- package/utils/i18n/common-strings.interface.d.ts +4 -0
- package/wizard/wizard-stepnav-item.d.ts +16 -2
- package/esm2020/modal/modal-host.directive.mjs +0 -20
- package/modal/modal-host.directive.d.ts +0 -5
package/fesm2020/clr-angular.mjs
CHANGED
|
@@ -376,6 +376,7 @@ const commonStringsDefault = {
|
|
|
376
376
|
datagridExpandableRowsHelperText: `Screen reader table commands may not work for viewing expanded content, please use your screen reader's browse mode to read the content exposed by this button`,
|
|
377
377
|
// Wizard
|
|
378
378
|
wizardStep: 'Step',
|
|
379
|
+
wizardStepCurrent: 'Current',
|
|
379
380
|
wizardStepSuccess: 'Completed',
|
|
380
381
|
wizardStepError: 'Error',
|
|
381
382
|
wizardStepnavAriaLabel: 'Wizard steps',
|
|
@@ -1252,10 +1253,10 @@ class ClrStepperPanel extends ClrAccordionPanel {
|
|
|
1252
1253
|
}
|
|
1253
1254
|
}
|
|
1254
1255
|
ClrStepperPanel.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.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 }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
|
|
1255
|
-
ClrStepperPanel.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.2", type: ClrStepperPanel, selector: "clr-stepper-panel", host: { properties: { "class.clr-stepper-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 clr-stepper-header\">\n <button\n type=\"button\"\n class=\"clr-accordion-header-button\"\n (click)=\"togglePanel()\"\n [id]=\"getAccordionHeaderId(panel.templateId)\"\n [attr.aria-disabled]=\"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-step-status\">\n <cds-icon shape=\"angle\" direction=\"right\" class=\"clr-accordion-angle clr-step-angle\"></cds-icon>\n <cds-icon\n
|
|
1256
|
+
ClrStepperPanel.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.2", type: ClrStepperPanel, selector: "clr-stepper-panel", host: { properties: { "class.clr-stepper-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 clr-stepper-header\">\n <button\n type=\"button\"\n class=\"clr-accordion-header-button\"\n (click)=\"togglePanel()\"\n [id]=\"getAccordionHeaderId(panel.templateId)\"\n [attr.aria-disabled]=\"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-step-status\">\n <cds-icon shape=\"angle\" direction=\"right\" class=\"clr-accordion-angle clr-step-angle\"></cds-icon>\n <span class=\"clr-step-status-icon\">\n <cds-icon\n status=\"danger\"\n *ngIf=\"panel.status === AccordionStatus.Error\"\n shape=\"exclamation-circle\"\n class=\"clr-step-error-icon\"\n ></cds-icon>\n <cds-icon\n status=\"success\"\n *ngIf=\"panel.status === AccordionStatus.Complete\"\n shape=\"check-circle\"\n class=\"clr-step-complete-icon\"\n ></cds-icon>\n </span>\n </span>\n <span class=\"clr-step-title-wrapper\">\n <span class=\"clr-step-number\">{{panelNumber}}.</span>\n <ng-content select=\"clr-step-title\"></ng-content>\n </span>\n <ng-content select=\"clr-step-description\"></ng-content>\n </button>\n <div class=\"clr-sr-only\" role=\"status\">\n <ng-container *ngIf=\"panel.status === AccordionStatus.Error\"> {{ stepErrorText(panelNumber)}} </ng-container>\n <ng-container *ngIf=\"panel.status === AccordionStatus.Complete\">\n {{ stepCompleteText(panelNumber)}}\n </ng-container>\n </div>\n </div>\n <div\n @skipInitialRender\n role=\"region\"\n class=\"clr-accordion-content-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 });
|
|
1256
1257
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: ClrStepperPanel, decorators: [{
|
|
1257
1258
|
type: Component,
|
|
1258
|
-
args: [{ selector: 'clr-stepper-panel', host: { '[class.clr-stepper-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 clr-stepper-header\">\n <button\n type=\"button\"\n class=\"clr-accordion-header-button\"\n (click)=\"togglePanel()\"\n [id]=\"getAccordionHeaderId(panel.templateId)\"\n [attr.aria-disabled]=\"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-step-status\">\n <cds-icon shape=\"angle\" direction=\"right\" class=\"clr-accordion-angle clr-step-angle\"></cds-icon>\n <cds-icon\n
|
|
1259
|
+
args: [{ selector: 'clr-stepper-panel', host: { '[class.clr-stepper-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 clr-stepper-header\">\n <button\n type=\"button\"\n class=\"clr-accordion-header-button\"\n (click)=\"togglePanel()\"\n [id]=\"getAccordionHeaderId(panel.templateId)\"\n [attr.aria-disabled]=\"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-step-status\">\n <cds-icon shape=\"angle\" direction=\"right\" class=\"clr-accordion-angle clr-step-angle\"></cds-icon>\n <span class=\"clr-step-status-icon\">\n <cds-icon\n status=\"danger\"\n *ngIf=\"panel.status === AccordionStatus.Error\"\n shape=\"exclamation-circle\"\n class=\"clr-step-error-icon\"\n ></cds-icon>\n <cds-icon\n status=\"success\"\n *ngIf=\"panel.status === AccordionStatus.Complete\"\n shape=\"check-circle\"\n class=\"clr-step-complete-icon\"\n ></cds-icon>\n </span>\n </span>\n <span class=\"clr-step-title-wrapper\">\n <span class=\"clr-step-number\">{{panelNumber}}.</span>\n <ng-content select=\"clr-step-title\"></ng-content>\n </span>\n <ng-content select=\"clr-step-description\"></ng-content>\n </button>\n <div class=\"clr-sr-only\" role=\"status\">\n <ng-container *ngIf=\"panel.status === AccordionStatus.Error\"> {{ stepErrorText(panelNumber)}} </ng-container>\n <ng-container *ngIf=\"panel.status === AccordionStatus.Complete\">\n {{ stepCompleteText(panelNumber)}}\n </ng-container>\n </div>\n </div>\n <div\n @skipInitialRender\n role=\"region\"\n class=\"clr-accordion-content-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" }]
|
|
1259
1260
|
}], ctorParameters: function () { return [{ type: undefined, decorators: [{
|
|
1260
1261
|
type: Inject,
|
|
1261
1262
|
args: [PLATFORM_ID]
|
|
@@ -2626,10 +2627,18 @@ ClrButton.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15
|
|
|
2626
2627
|
[attr.id]="id"
|
|
2627
2628
|
>
|
|
2628
2629
|
<span class="spinner spinner-inline" *ngIf="loading"></span>
|
|
2629
|
-
<ng-
|
|
2630
|
+
<ng-container *ngIf="inMenu; then inMenuTemplate; else defaultTemplate"></ng-container>
|
|
2630
2631
|
</button>
|
|
2631
2632
|
</ng-template>
|
|
2632
|
-
|
|
2633
|
+
<ng-template #defaultTemplate>
|
|
2634
|
+
<ng-content></ng-content>
|
|
2635
|
+
</ng-template>
|
|
2636
|
+
<ng-template #inMenuTemplate>
|
|
2637
|
+
<span class="dropdown-item-content">
|
|
2638
|
+
<ng-container [ngTemplateOutlet]="defaultTemplate"></ng-container>
|
|
2639
|
+
</span>
|
|
2640
|
+
</ng-template>
|
|
2641
|
+
`, isInline: true, dependencies: [{ kind: "directive", type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i5.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }] });
|
|
2633
2642
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: ClrButton, decorators: [{
|
|
2634
2643
|
type: Component,
|
|
2635
2644
|
args: [{
|
|
@@ -2646,9 +2655,17 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImpor
|
|
|
2646
2655
|
[attr.id]="id"
|
|
2647
2656
|
>
|
|
2648
2657
|
<span class="spinner spinner-inline" *ngIf="loading"></span>
|
|
2649
|
-
<ng-
|
|
2658
|
+
<ng-container *ngIf="inMenu; then inMenuTemplate; else defaultTemplate"></ng-container>
|
|
2650
2659
|
</button>
|
|
2651
2660
|
</ng-template>
|
|
2661
|
+
<ng-template #defaultTemplate>
|
|
2662
|
+
<ng-content></ng-content>
|
|
2663
|
+
</ng-template>
|
|
2664
|
+
<ng-template #inMenuTemplate>
|
|
2665
|
+
<span class="dropdown-item-content">
|
|
2666
|
+
<ng-container [ngTemplateOutlet]="defaultTemplate"></ng-container>
|
|
2667
|
+
</span>
|
|
2668
|
+
</ng-template>
|
|
2652
2669
|
`,
|
|
2653
2670
|
providers: [{ provide: LoadingListener, useExisting: ClrButton }],
|
|
2654
2671
|
}]
|
|
@@ -3141,6 +3158,11 @@ class BaseExpandableAnimation {
|
|
|
3141
3158
|
});
|
|
3142
3159
|
}
|
|
3143
3160
|
}
|
|
3161
|
+
BaseExpandableAnimation.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: BaseExpandableAnimation, deps: [{ token: i0.ElementRef }, { token: DomAdapter }, { token: i0.Renderer2 }], target: i0.ɵɵFactoryTarget.Directive });
|
|
3162
|
+
BaseExpandableAnimation.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "15.2.2", type: BaseExpandableAnimation, ngImport: i0 });
|
|
3163
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: BaseExpandableAnimation, decorators: [{
|
|
3164
|
+
type: Directive
|
|
3165
|
+
}], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: DomAdapter }, { type: i0.Renderer2 }]; } });
|
|
3144
3166
|
|
|
3145
3167
|
/*
|
|
3146
3168
|
* Copyright (c) 2016-2025 Broadcom. All Rights Reserved.
|
|
@@ -3149,8 +3171,8 @@ class BaseExpandableAnimation {
|
|
|
3149
3171
|
* The full license information can be found in LICENSE in the root directory of this project.
|
|
3150
3172
|
*/
|
|
3151
3173
|
class ClrExpandableAnimation extends BaseExpandableAnimation {
|
|
3152
|
-
constructor(
|
|
3153
|
-
super(
|
|
3174
|
+
constructor() {
|
|
3175
|
+
super(...arguments);
|
|
3154
3176
|
this.clrExpandTrigger = false;
|
|
3155
3177
|
}
|
|
3156
3178
|
get expandAnimation() {
|
|
@@ -3167,12 +3189,12 @@ class ClrExpandableAnimation extends BaseExpandableAnimation {
|
|
|
3167
3189
|
}
|
|
3168
3190
|
}
|
|
3169
3191
|
}
|
|
3170
|
-
ClrExpandableAnimation.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: ClrExpandableAnimation, deps:
|
|
3192
|
+
ClrExpandableAnimation.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: ClrExpandableAnimation, deps: null, target: i0.ɵɵFactoryTarget.Component });
|
|
3171
3193
|
ClrExpandableAnimation.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.2", type: ClrExpandableAnimation, selector: "clr-expandable-animation", inputs: { clrExpandTrigger: "clrExpandTrigger" }, host: { listeners: { "@expandAnimation.start": "animationStart($event)", "@expandAnimation.done": "animationDone($event)" }, properties: { "@expandAnimation": "this.expandAnimation" } }, providers: [DomAdapter], usesInheritance: true, ngImport: i0, template: `<ng-content></ng-content>`, isInline: true, styles: [":host{display:block}\n"], animations: [trigger('expandAnimation', [transition('true <=> false', [useAnimation(defaultExpandAnimation)])])] });
|
|
3172
3194
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: ClrExpandableAnimation, decorators: [{
|
|
3173
3195
|
type: Component,
|
|
3174
3196
|
args: [{ selector: 'clr-expandable-animation', template: `<ng-content></ng-content>`, animations: [trigger('expandAnimation', [transition('true <=> false', [useAnimation(defaultExpandAnimation)])])], providers: [DomAdapter], styles: [":host{display:block}\n"] }]
|
|
3175
|
-
}],
|
|
3197
|
+
}], propDecorators: { clrExpandTrigger: [{
|
|
3176
3198
|
type: Input
|
|
3177
3199
|
}], expandAnimation: [{
|
|
3178
3200
|
type: HostBinding,
|
|
@@ -5288,7 +5310,13 @@ class AbstractPopover {
|
|
|
5288
5310
|
this.documentESCListener = null;
|
|
5289
5311
|
this.closeOnOutsideClickCallback = event => {
|
|
5290
5312
|
// The anchor element containing the click event origin means, the click wasn't triggered outside.
|
|
5291
|
-
if (
|
|
5313
|
+
if (event.target.shadowRoot) {
|
|
5314
|
+
const containsNode = event.composedPath().some((element) => element === this.anchorElem);
|
|
5315
|
+
if (containsNode) {
|
|
5316
|
+
return;
|
|
5317
|
+
}
|
|
5318
|
+
}
|
|
5319
|
+
else if (this.anchorElem.contains(event.target)) {
|
|
5292
5320
|
return;
|
|
5293
5321
|
}
|
|
5294
5322
|
this.toggleService.open = false;
|
|
@@ -5498,6 +5526,28 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImpor
|
|
|
5498
5526
|
args: ['clrPosition']
|
|
5499
5527
|
}] } });
|
|
5500
5528
|
|
|
5529
|
+
/*
|
|
5530
|
+
* Copyright (c) 2016-2025 Broadcom. All Rights Reserved.
|
|
5531
|
+
* The term "Broadcom" refers to Broadcom Inc. and/or its subsidiaries.
|
|
5532
|
+
* This software is released under MIT license.
|
|
5533
|
+
* The full license information can be found in LICENSE in the root directory of this project.
|
|
5534
|
+
*/
|
|
5535
|
+
function wrapHostContentInsideSpan(hostElement, renderer, wrapperClass) {
|
|
5536
|
+
if (!hostElement || !renderer) {
|
|
5537
|
+
return;
|
|
5538
|
+
}
|
|
5539
|
+
const wrapper = renderer.createElement('span');
|
|
5540
|
+
if (wrapperClass) {
|
|
5541
|
+
renderer.addClass(wrapper, wrapperClass);
|
|
5542
|
+
}
|
|
5543
|
+
// Move all existing children into the wrapper
|
|
5544
|
+
// We must loop while there are child nodes and re-append them to wrapper.
|
|
5545
|
+
while (hostElement.firstChild) {
|
|
5546
|
+
renderer.appendChild(wrapper, hostElement.firstChild);
|
|
5547
|
+
}
|
|
5548
|
+
renderer.appendChild(hostElement, wrapper);
|
|
5549
|
+
}
|
|
5550
|
+
|
|
5501
5551
|
/*
|
|
5502
5552
|
* Copyright (c) 2016-2025 Broadcom. All Rights Reserved.
|
|
5503
5553
|
* The term "Broadcom" refers to Broadcom Inc. and/or its subsidiaries.
|
|
@@ -5505,8 +5555,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImpor
|
|
|
5505
5555
|
* The full license information can be found in LICENSE in the root directory of this project.
|
|
5506
5556
|
*/
|
|
5507
5557
|
class ClrDropdownTrigger {
|
|
5508
|
-
constructor(dropdown, toggleService, el, focusHandler) {
|
|
5558
|
+
constructor(dropdown, toggleService, el, focusHandler, renderer) {
|
|
5509
5559
|
this.toggleService = toggleService;
|
|
5560
|
+
this.el = el;
|
|
5561
|
+
this.renderer = renderer;
|
|
5510
5562
|
this.isRootLevelToggle = true;
|
|
5511
5563
|
// if the containing dropdown has a parent, then this is not the root level one
|
|
5512
5564
|
if (dropdown.parent) {
|
|
@@ -5520,8 +5572,13 @@ class ClrDropdownTrigger {
|
|
|
5520
5572
|
onDropdownTriggerClick(event) {
|
|
5521
5573
|
this.toggleService.toggleWithEvent(event);
|
|
5522
5574
|
}
|
|
5575
|
+
ngAfterViewInit() {
|
|
5576
|
+
if (!this.isRootLevelToggle) {
|
|
5577
|
+
wrapHostContentInsideSpan(this.el.nativeElement, this.renderer, 'dropdown-item-content');
|
|
5578
|
+
}
|
|
5579
|
+
}
|
|
5523
5580
|
}
|
|
5524
|
-
ClrDropdownTrigger.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: ClrDropdownTrigger, deps: [{ token: ClrDropdown }, { token: ClrPopoverToggleService }, { token: i0.ElementRef }, { token: DropdownFocusHandler }], target: i0.ɵɵFactoryTarget.Directive });
|
|
5581
|
+
ClrDropdownTrigger.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: ClrDropdownTrigger, deps: [{ token: ClrDropdown }, { token: ClrPopoverToggleService }, { token: i0.ElementRef }, { token: DropdownFocusHandler }, { token: i0.Renderer2 }], target: i0.ɵɵFactoryTarget.Directive });
|
|
5525
5582
|
ClrDropdownTrigger.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "15.2.2", type: ClrDropdownTrigger, selector: "[clrDropdownTrigger],[clrDropdownToggle]", host: { listeners: { "click": "onDropdownTriggerClick($event)" }, properties: { "class.dropdown-toggle": "isRootLevelToggle", "class.dropdown-item": "!isRootLevelToggle", "class.expandable": "!isRootLevelToggle", "class.active": "active", "attr.aria-haspopup": "\"menu\"", "attr.aria-expanded": "active" } }, ngImport: i0 });
|
|
5526
5583
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: ClrDropdownTrigger, decorators: [{
|
|
5527
5584
|
type: Directive,
|
|
@@ -5537,7 +5594,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImpor
|
|
|
5537
5594
|
'[attr.aria-expanded]': 'active',
|
|
5538
5595
|
},
|
|
5539
5596
|
}]
|
|
5540
|
-
}], ctorParameters: function () { return [{ type: ClrDropdown }, { type: ClrPopoverToggleService }, { type: i0.ElementRef }, { type: DropdownFocusHandler }]; }, propDecorators: { onDropdownTriggerClick: [{
|
|
5597
|
+
}], ctorParameters: function () { return [{ type: ClrDropdown }, { type: ClrPopoverToggleService }, { type: i0.ElementRef }, { type: DropdownFocusHandler }, { type: i0.Renderer2 }]; }, propDecorators: { onDropdownTriggerClick: [{
|
|
5541
5598
|
type: HostListener,
|
|
5542
5599
|
args: ['click', ['$event']]
|
|
5543
5600
|
}] } });
|
|
@@ -5599,10 +5656,12 @@ const BASIC_FOCUSABLE_ITEM_PROVIDER = [
|
|
|
5599
5656
|
* The full license information can be found in LICENSE in the root directory of this project.
|
|
5600
5657
|
*/
|
|
5601
5658
|
class ClrDropdownItem {
|
|
5602
|
-
constructor(dropdown, _dropdownService, focusableItem) {
|
|
5659
|
+
constructor(dropdown, _dropdownService, focusableItem, el, renderer) {
|
|
5603
5660
|
this.dropdown = dropdown;
|
|
5604
5661
|
this._dropdownService = _dropdownService;
|
|
5605
5662
|
this.focusableItem = focusableItem;
|
|
5663
|
+
this.el = el;
|
|
5664
|
+
this.renderer = renderer;
|
|
5606
5665
|
}
|
|
5607
5666
|
get disabled() {
|
|
5608
5667
|
return this.focusableItem.disabled;
|
|
@@ -5620,6 +5679,9 @@ class ClrDropdownItem {
|
|
|
5620
5679
|
set dropdownItemId(value) {
|
|
5621
5680
|
this.focusableItem.id = value;
|
|
5622
5681
|
}
|
|
5682
|
+
ngAfterViewInit() {
|
|
5683
|
+
wrapHostContentInsideSpan(this.el.nativeElement, this.renderer, 'dropdown-item-content');
|
|
5684
|
+
}
|
|
5623
5685
|
onDropdownItemClick() {
|
|
5624
5686
|
// Move focus back to the root dropdown trigger.
|
|
5625
5687
|
// This is done BEFORE the dropdown is closed so that focus gets moved properly if a modal is opened.
|
|
@@ -5657,7 +5719,7 @@ class ClrDropdownItem {
|
|
|
5657
5719
|
return rootDropdown;
|
|
5658
5720
|
}
|
|
5659
5721
|
}
|
|
5660
|
-
ClrDropdownItem.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: ClrDropdownItem, deps: [{ token: ClrDropdown }, { token: RootDropdownService }, { token: FocusableItem }], target: i0.ɵɵFactoryTarget.Directive });
|
|
5722
|
+
ClrDropdownItem.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: ClrDropdownItem, deps: [{ token: ClrDropdown }, { token: RootDropdownService }, { token: FocusableItem }, { token: i0.ElementRef }, { token: i0.Renderer2 }], target: i0.ɵɵFactoryTarget.Directive });
|
|
5661
5723
|
ClrDropdownItem.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "15.2.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 });
|
|
5662
5724
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: ClrDropdownItem, decorators: [{
|
|
5663
5725
|
type: Directive,
|
|
@@ -5672,7 +5734,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImpor
|
|
|
5672
5734
|
},
|
|
5673
5735
|
providers: [BASIC_FOCUSABLE_ITEM_PROVIDER],
|
|
5674
5736
|
}]
|
|
5675
|
-
}], ctorParameters: function () { return [{ type: ClrDropdown }, { type: RootDropdownService }, { type: FocusableItem }]; }, propDecorators: { disabled: [{
|
|
5737
|
+
}], ctorParameters: function () { return [{ type: ClrDropdown }, { type: RootDropdownService }, { type: FocusableItem }, { type: i0.ElementRef }, { type: i0.Renderer2 }]; }, propDecorators: { disabled: [{
|
|
5676
5738
|
type: Input,
|
|
5677
5739
|
args: ['clrDisabled']
|
|
5678
5740
|
}], dropdownItemId: [{
|
|
@@ -8997,7 +9059,7 @@ class ClrOptions {
|
|
|
8997
9059
|
}
|
|
8998
9060
|
}
|
|
8999
9061
|
ClrOptions.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: ClrOptions, deps: [{ token: OptionSelectionService }, { token: IF_ACTIVE_ID }, { token: i0.ElementRef }, { token: ClrCommonStringsService }, { token: ComboboxFocusHandler }, { token: ClrPopoverToggleService }, { token: POPOVER_HOST_ANCHOR, optional: true }, { token: DOCUMENT }], target: i0.ɵɵFactoryTarget.Component });
|
|
9000
|
-
ClrOptions.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.2", type: ClrOptions, selector: "clr-options", inputs: { optionsId: ["id", "optionsId"] }, host: { properties: { "class.clr-combobox-options": "true", "attr.role": "\"listbox\"", "id": "optionsId" } }, providers: [{ provide: LoadingListener, useExisting: ClrOptions }], queries: [{ propertyName: "items", predicate: ClrOption }], ngImport: i0, template: `
|
|
9062
|
+
ClrOptions.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.2", type: ClrOptions, selector: "clr-options", inputs: { optionsId: ["id", "optionsId"] }, host: { properties: { "class.clr-combobox-options": "true", "attr.role": "\"listbox\"", "id": "optionsId" } }, providers: [{ provide: LoadingListener, useExisting: ClrOptions }], queries: [{ propertyName: "items", predicate: ClrOption, descendants: true }], ngImport: i0, template: `
|
|
9001
9063
|
<div *ngIf="optionSelectionService.loading" class="clr-combobox-options-loading">
|
|
9002
9064
|
<clr-spinner clrInline>
|
|
9003
9065
|
{{ commonStrings.keys.loading }}
|
|
@@ -9064,7 +9126,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImpor
|
|
|
9064
9126
|
args: ['id']
|
|
9065
9127
|
}], items: [{
|
|
9066
9128
|
type: ContentChildren,
|
|
9067
|
-
args: [ClrOption]
|
|
9129
|
+
args: [ClrOption, { descendants: true }]
|
|
9068
9130
|
}] } });
|
|
9069
9131
|
|
|
9070
9132
|
/*
|
|
@@ -9336,7 +9398,7 @@ ClrCombobox.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "
|
|
|
9336
9398
|
IF_ACTIVE_ID_PROVIDER,
|
|
9337
9399
|
FOCUS_SERVICE_PROVIDER,
|
|
9338
9400
|
COMBOBOX_FOCUS_HANDLER_PROVIDER,
|
|
9339
|
-
], queries: [{ propertyName: "optionSelected", first: true, predicate: ClrOptionSelected, descendants: true }, { propertyName: "options", first: true, predicate: ClrOptions, descendants: true }], viewQueries: [{ propertyName: "textbox", first: true, predicate: ["textboxInput"], descendants: true }, { propertyName: "trigger", first: true, predicate: ["trigger"], descendants: true }], usesInheritance: true, hostDirectives: [{ directive: ClrPopoverHostDirective }], ngImport: i0, template: "<!--\n ~ Copyright (c) 2016-2025 Broadcom. All Rights Reserved.\n ~ The term \"Broadcom\" refers to Broadcom Inc. and/or its subsidiaries.\n ~ This software is released under MIT license.\n ~ The full license information can be found in LICENSE in the root directory of this project.\n-->\n\n<!-- The (click) handler is needed to auto-focus on input field which can not currently occupy the whole\n width of the component, after being wrapped to a new line -->\n<div\n class=\"clr-combobox-wrapper\"\n clrPopoverAnchor\n (click)=\"focusInput()\"\n [class.multi]=\"multiSelect\"\n [class.invalid]=\"invalid\"\n [class.disabled]=\"control?.disabled? true: null\"\n>\n <span\n *ngIf=\"multiSelect && optionSelectionService.selectionModel.model\"\n role=\"grid\"\n clrRovingTabindex\n [clrRovingTabindexDisabled]=\"control?.disabled\"\n clrDirection=\"both\"\n [attr.aria-label]=\"getSelectionAriaLabel()\"\n [attr.aria-disabled]=\"control?.disabled? true: null\"\n >\n <span *ngFor=\"let item of multiSelectModel; let i = index\" class=\"label label-combobox-pill\" role=\"row\">\n <span role=\"gridcell\">\n <span class=\"clr-combobox-pill-content\" clrKeyFocusItem>\n <ng-container\n *ngIf=\"optionSelected\"\n [ngTemplateOutlet]=\"optionSelected.template\"\n [ngTemplateOutletContext]=\"{$implicit: optionSelectionService.selectionModel.model[i]}\"\n ></ng-container>\n </span>\n </span>\n <span role=\"gridcell\">\n <button\n clrKeyFocusItem\n type=\"button\"\n class=\"clr-combobox-remove-btn\"\n [disabled]=\"control?.disabled? true: null\"\n [attr.aria-label]=\"commonStrings.keys.comboboxDelete + ' ' + optionSelectionService.selectionModel.toString(displayField, i)\"\n (click)=\"unselect(item)\"\n >\n <cds-icon shape=\"window-close\" size=\"12\"></cds-icon>\n </button>\n </span>\n </span>\n </span>\n\n <
|
|
9401
|
+
], queries: [{ propertyName: "optionSelected", first: true, predicate: ClrOptionSelected, descendants: true }, { propertyName: "options", first: true, predicate: ClrOptions, descendants: true }], viewQueries: [{ propertyName: "textbox", first: true, predicate: ["textboxInput"], descendants: true }, { propertyName: "trigger", first: true, predicate: ["trigger"], descendants: true }], usesInheritance: true, hostDirectives: [{ directive: ClrPopoverHostDirective }], ngImport: i0, template: "<!--\n ~ Copyright (c) 2016-2025 Broadcom. All Rights Reserved.\n ~ The term \"Broadcom\" refers to Broadcom Inc. and/or its subsidiaries.\n ~ This software is released under MIT license.\n ~ The full license information can be found in LICENSE in the root directory of this project.\n-->\n\n<!-- The (click) handler is needed to auto-focus on input field which can not currently occupy the whole\n width of the component, after being wrapped to a new line -->\n<div\n class=\"clr-combobox-wrapper\"\n clrPopoverAnchor\n (click)=\"focusInput()\"\n [class.multi]=\"multiSelect\"\n [class.invalid]=\"invalid\"\n [class.disabled]=\"control?.disabled? true: null\"\n>\n <span\n *ngIf=\"multiSelect && optionSelectionService.selectionModel.model && multiSelectModel.length > 0\"\n role=\"grid\"\n clrRovingTabindex\n [clrRovingTabindexDisabled]=\"control?.disabled\"\n clrDirection=\"both\"\n [attr.aria-label]=\"getSelectionAriaLabel()\"\n [attr.aria-disabled]=\"control?.disabled? true: null\"\n class=\"clr-combobox-pills\"\n >\n <span *ngFor=\"let item of multiSelectModel; let i = index\" class=\"label label-combobox-pill\" role=\"row\">\n <span role=\"gridcell\">\n <span class=\"clr-combobox-pill-content\" clrKeyFocusItem>\n <ng-container\n *ngIf=\"optionSelected\"\n [ngTemplateOutlet]=\"optionSelected.template\"\n [ngTemplateOutletContext]=\"{$implicit: optionSelectionService.selectionModel.model[i]}\"\n ></ng-container>\n </span>\n </span>\n <span role=\"gridcell\">\n <button\n clrKeyFocusItem\n type=\"button\"\n class=\"clr-combobox-remove-btn\"\n [disabled]=\"control?.disabled? true: null\"\n [attr.aria-label]=\"commonStrings.keys.comboboxDelete + ' ' + optionSelectionService.selectionModel.toString(displayField, i)\"\n (click)=\"unselect(item)\"\n >\n <cds-icon shape=\"window-close\" size=\"12\"></cds-icon>\n </button>\n </span>\n </span>\n </span>\n\n <input\n #textboxInput\n type=\"text\"\n role=\"combobox\"\n [id]=\"inputId()\"\n class=\"clr-input clr-combobox-input\"\n [(ngModel)]=\"searchText\"\n (blur)=\"onBlur()\"\n (focus)=\"onFocus()\"\n [attr.aria-expanded]=\"openState\"\n [attr.aria-owns]=\"ariaOwns\"\n aria-haspopup=\"listbox\"\n aria-autocomplete=\"list\"\n autocomplete=\"off\"\n [attr.aria-invalid]=\"control?.invalid? true: null\"\n [disabled]=\"control?.disabled? true: null\"\n [attr.aria-activedescendant]=\"getActiveDescendant()\"\n [attr.placeholder]=\"placeholder\"\n />\n\n <!-- No click handler, as it uses the handler on the .clr-combobox-wrapper -->\n <button\n clrPopoverOpenCloseButton\n #trigger\n type=\"button\"\n class=\"clr-combobox-trigger\"\n tabindex=\"-1\"\n [disabled]=\"control?.disabled || null\"\n [attr.aria-label]=\"commonStrings.keys.comboboxOpen\"\n >\n <cds-icon shape=\"angle\" direction=\"down\"></cds-icon>\n </button>\n\n <div class=\"clr-focus-indicator\" [class.clr-focus]=\"focused\"></div>\n</div>\n\n<!-- Both close handlers are handled manually due to issues in Edge browser.\n Additionally 'outsideClickToClose' has complex handling that's necessary\n to be manual due to the component architecture -->\n<div role=\"dialog\" *clrPopoverContent=\"openState at smartPosition; outsideClickToClose: false; scrollToClose: false\">\n <ng-content></ng-content>\n</div>\n", 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: 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"] }, { kind: "directive", type: CdsIconCustomTag, selector: "cds-icon" }, { kind: "component", type: ClrRovingTabindex, selector: "[clrRovingTabindex]", inputs: ["clrRovingTabindex", "clrRovingTabindexDisabled"] }, { kind: "directive", type: ClrKeyFocusItem, selector: "[clrKeyFocusItem]" }, { 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"] }] });
|
|
9340
9402
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: ClrCombobox, decorators: [{
|
|
9341
9403
|
type: Component,
|
|
9342
9404
|
args: [{ selector: 'clr-combobox', providers: [
|
|
@@ -9349,7 +9411,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImpor
|
|
|
9349
9411
|
'[class.aria-required]': 'true',
|
|
9350
9412
|
'[class.clr-combobox]': 'true',
|
|
9351
9413
|
'[class.clr-combobox-disabled]': 'control?.disabled',
|
|
9352
|
-
}, template: "<!--\n ~ Copyright (c) 2016-2025 Broadcom. All Rights Reserved.\n ~ The term \"Broadcom\" refers to Broadcom Inc. and/or its subsidiaries.\n ~ This software is released under MIT license.\n ~ The full license information can be found in LICENSE in the root directory of this project.\n-->\n\n<!-- The (click) handler is needed to auto-focus on input field which can not currently occupy the whole\n width of the component, after being wrapped to a new line -->\n<div\n class=\"clr-combobox-wrapper\"\n clrPopoverAnchor\n (click)=\"focusInput()\"\n [class.multi]=\"multiSelect\"\n [class.invalid]=\"invalid\"\n [class.disabled]=\"control?.disabled? true: null\"\n>\n <span\n *ngIf=\"multiSelect && optionSelectionService.selectionModel.model\"\n role=\"grid\"\n clrRovingTabindex\n [clrRovingTabindexDisabled]=\"control?.disabled\"\n clrDirection=\"both\"\n [attr.aria-label]=\"getSelectionAriaLabel()\"\n [attr.aria-disabled]=\"control?.disabled? true: null\"\n >\n <span *ngFor=\"let item of multiSelectModel; let i = index\" class=\"label label-combobox-pill\" role=\"row\">\n <span role=\"gridcell\">\n <span class=\"clr-combobox-pill-content\" clrKeyFocusItem>\n <ng-container\n *ngIf=\"optionSelected\"\n [ngTemplateOutlet]=\"optionSelected.template\"\n [ngTemplateOutletContext]=\"{$implicit: optionSelectionService.selectionModel.model[i]}\"\n ></ng-container>\n </span>\n </span>\n <span role=\"gridcell\">\n <button\n clrKeyFocusItem\n type=\"button\"\n class=\"clr-combobox-remove-btn\"\n [disabled]=\"control?.disabled? true: null\"\n [attr.aria-label]=\"commonStrings.keys.comboboxDelete + ' ' + optionSelectionService.selectionModel.toString(displayField, i)\"\n (click)=\"unselect(item)\"\n >\n <cds-icon shape=\"window-close\" size=\"12\"></cds-icon>\n </button>\n </span>\n </span>\n </span>\n\n <
|
|
9414
|
+
}, template: "<!--\n ~ Copyright (c) 2016-2025 Broadcom. All Rights Reserved.\n ~ The term \"Broadcom\" refers to Broadcom Inc. and/or its subsidiaries.\n ~ This software is released under MIT license.\n ~ The full license information can be found in LICENSE in the root directory of this project.\n-->\n\n<!-- The (click) handler is needed to auto-focus on input field which can not currently occupy the whole\n width of the component, after being wrapped to a new line -->\n<div\n class=\"clr-combobox-wrapper\"\n clrPopoverAnchor\n (click)=\"focusInput()\"\n [class.multi]=\"multiSelect\"\n [class.invalid]=\"invalid\"\n [class.disabled]=\"control?.disabled? true: null\"\n>\n <span\n *ngIf=\"multiSelect && optionSelectionService.selectionModel.model && multiSelectModel.length > 0\"\n role=\"grid\"\n clrRovingTabindex\n [clrRovingTabindexDisabled]=\"control?.disabled\"\n clrDirection=\"both\"\n [attr.aria-label]=\"getSelectionAriaLabel()\"\n [attr.aria-disabled]=\"control?.disabled? true: null\"\n class=\"clr-combobox-pills\"\n >\n <span *ngFor=\"let item of multiSelectModel; let i = index\" class=\"label label-combobox-pill\" role=\"row\">\n <span role=\"gridcell\">\n <span class=\"clr-combobox-pill-content\" clrKeyFocusItem>\n <ng-container\n *ngIf=\"optionSelected\"\n [ngTemplateOutlet]=\"optionSelected.template\"\n [ngTemplateOutletContext]=\"{$implicit: optionSelectionService.selectionModel.model[i]}\"\n ></ng-container>\n </span>\n </span>\n <span role=\"gridcell\">\n <button\n clrKeyFocusItem\n type=\"button\"\n class=\"clr-combobox-remove-btn\"\n [disabled]=\"control?.disabled? true: null\"\n [attr.aria-label]=\"commonStrings.keys.comboboxDelete + ' ' + optionSelectionService.selectionModel.toString(displayField, i)\"\n (click)=\"unselect(item)\"\n >\n <cds-icon shape=\"window-close\" size=\"12\"></cds-icon>\n </button>\n </span>\n </span>\n </span>\n\n <input\n #textboxInput\n type=\"text\"\n role=\"combobox\"\n [id]=\"inputId()\"\n class=\"clr-input clr-combobox-input\"\n [(ngModel)]=\"searchText\"\n (blur)=\"onBlur()\"\n (focus)=\"onFocus()\"\n [attr.aria-expanded]=\"openState\"\n [attr.aria-owns]=\"ariaOwns\"\n aria-haspopup=\"listbox\"\n aria-autocomplete=\"list\"\n autocomplete=\"off\"\n [attr.aria-invalid]=\"control?.invalid? true: null\"\n [disabled]=\"control?.disabled? true: null\"\n [attr.aria-activedescendant]=\"getActiveDescendant()\"\n [attr.placeholder]=\"placeholder\"\n />\n\n <!-- No click handler, as it uses the handler on the .clr-combobox-wrapper -->\n <button\n clrPopoverOpenCloseButton\n #trigger\n type=\"button\"\n class=\"clr-combobox-trigger\"\n tabindex=\"-1\"\n [disabled]=\"control?.disabled || null\"\n [attr.aria-label]=\"commonStrings.keys.comboboxOpen\"\n >\n <cds-icon shape=\"angle\" direction=\"down\"></cds-icon>\n </button>\n\n <div class=\"clr-focus-indicator\" [class.clr-focus]=\"focused\"></div>\n</div>\n\n<!-- Both close handlers are handled manually due to issues in Edge browser.\n Additionally 'outsideClickToClose' has complex handling that's necessary\n to be manual due to the component architecture -->\n<div role=\"dialog\" *clrPopoverContent=\"openState at smartPosition; outsideClickToClose: false; scrollToClose: false\">\n <ng-content></ng-content>\n</div>\n" }]
|
|
9353
9415
|
}], ctorParameters: function () { return [{ type: i0.ViewContainerRef }, { type: i0.Injector }, { type: i1.NgControl, decorators: [{
|
|
9354
9416
|
type: Self
|
|
9355
9417
|
}, {
|
|
@@ -9425,6 +9487,10 @@ class ClrOptionItems {
|
|
|
9425
9487
|
this._filterField = field;
|
|
9426
9488
|
this.optionService.displayField = field;
|
|
9427
9489
|
}
|
|
9490
|
+
get hasResults() {
|
|
9491
|
+
// explicity return `undefined` instead of `false` if the answer is not known
|
|
9492
|
+
return this.filteredItems ? this.filteredItems.length : undefined;
|
|
9493
|
+
}
|
|
9428
9494
|
ngDoCheck() {
|
|
9429
9495
|
if (!this.differ) {
|
|
9430
9496
|
this.differ = this.differs.find(this.filteredItems).create(this.iterableProxy.ngForTrackBy);
|
|
@@ -9494,6 +9560,44 @@ function normalizeValue(value) {
|
|
|
9494
9560
|
.toLowerCase();
|
|
9495
9561
|
}
|
|
9496
9562
|
|
|
9563
|
+
/*
|
|
9564
|
+
* Copyright (c) 2016-2025 Broadcom. All Rights Reserved.
|
|
9565
|
+
* The term "Broadcom" refers to Broadcom Inc. and/or its subsidiaries.
|
|
9566
|
+
* This software is released under MIT license.
|
|
9567
|
+
* The full license information can be found in LICENSE in the root directory of this project.
|
|
9568
|
+
*/
|
|
9569
|
+
class ClrOptionGroup {
|
|
9570
|
+
constructor() {
|
|
9571
|
+
this.labelId = uniqueIdFactory();
|
|
9572
|
+
}
|
|
9573
|
+
}
|
|
9574
|
+
ClrOptionGroup.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: ClrOptionGroup, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
9575
|
+
ClrOptionGroup.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.2", type: ClrOptionGroup, selector: "clr-option-group", inputs: { label: ["clrOptionGroupLabel", "label"] }, host: { properties: { "attr.role": "\"group\"", "attr.aria-labelledby": "labelId", "style.display": "clrOptionItems.hasResults ? undefined : \"none\"" } }, queries: [{ propertyName: "clrOptionItems", first: true, predicate: ClrOptionItems, descendants: true }], ngImport: i0, template: `
|
|
9576
|
+
<span [id]="labelId" class="clr-option-group-label" role="presentation">{{ label }}</span>
|
|
9577
|
+
<ng-content></ng-content>
|
|
9578
|
+
`, isInline: true });
|
|
9579
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: ClrOptionGroup, decorators: [{
|
|
9580
|
+
type: Component,
|
|
9581
|
+
args: [{
|
|
9582
|
+
selector: 'clr-option-group',
|
|
9583
|
+
host: {
|
|
9584
|
+
'[attr.role]': '"group"',
|
|
9585
|
+
'[attr.aria-labelledby]': 'labelId',
|
|
9586
|
+
'[style.display]': 'clrOptionItems.hasResults ? undefined : "none"',
|
|
9587
|
+
},
|
|
9588
|
+
template: `
|
|
9589
|
+
<span [id]="labelId" class="clr-option-group-label" role="presentation">{{ label }}</span>
|
|
9590
|
+
<ng-content></ng-content>
|
|
9591
|
+
`,
|
|
9592
|
+
}]
|
|
9593
|
+
}], propDecorators: { label: [{
|
|
9594
|
+
type: Input,
|
|
9595
|
+
args: ['clrOptionGroupLabel']
|
|
9596
|
+
}], clrOptionItems: [{
|
|
9597
|
+
type: ContentChild,
|
|
9598
|
+
args: [ClrOptionItems]
|
|
9599
|
+
}] } });
|
|
9600
|
+
|
|
9497
9601
|
/*
|
|
9498
9602
|
* Copyright (c) 2016-2025 Broadcom. All Rights Reserved.
|
|
9499
9603
|
* The term "Broadcom" refers to Broadcom Inc. and/or its subsidiaries.
|
|
@@ -9506,7 +9610,13 @@ class ClrComboboxModule {
|
|
|
9506
9610
|
}
|
|
9507
9611
|
}
|
|
9508
9612
|
ClrComboboxModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: ClrComboboxModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
|
|
9509
|
-
ClrComboboxModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "15.2.2", ngImport: i0, type: ClrComboboxModule, declarations: [ClrCombobox,
|
|
9613
|
+
ClrComboboxModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "15.2.2", ngImport: i0, type: ClrComboboxModule, declarations: [ClrCombobox,
|
|
9614
|
+
ClrComboboxContainer,
|
|
9615
|
+
ClrOptions,
|
|
9616
|
+
ClrOption,
|
|
9617
|
+
ClrOptionGroup,
|
|
9618
|
+
ClrOptionSelected,
|
|
9619
|
+
ClrOptionItems], imports: [CommonModule,
|
|
9510
9620
|
FormsModule,
|
|
9511
9621
|
ClrIconModule,
|
|
9512
9622
|
ClrKeyFocusModule,
|
|
@@ -9518,6 +9628,7 @@ ClrComboboxModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", versi
|
|
|
9518
9628
|
ClrComboboxContainer,
|
|
9519
9629
|
ClrOptions,
|
|
9520
9630
|
ClrOption,
|
|
9631
|
+
ClrOptionGroup,
|
|
9521
9632
|
ClrOptionSelected,
|
|
9522
9633
|
ClrConditionalModule,
|
|
9523
9634
|
ClrOptionItems] });
|
|
@@ -9543,13 +9654,22 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImpor
|
|
|
9543
9654
|
ClrPopoverModuleNext,
|
|
9544
9655
|
ClrSpinnerModule,
|
|
9545
9656
|
],
|
|
9546
|
-
declarations: [
|
|
9657
|
+
declarations: [
|
|
9658
|
+
ClrCombobox,
|
|
9659
|
+
ClrComboboxContainer,
|
|
9660
|
+
ClrOptions,
|
|
9661
|
+
ClrOption,
|
|
9662
|
+
ClrOptionGroup,
|
|
9663
|
+
ClrOptionSelected,
|
|
9664
|
+
ClrOptionItems,
|
|
9665
|
+
],
|
|
9547
9666
|
exports: [
|
|
9548
9667
|
ClrCommonFormsModule,
|
|
9549
9668
|
ClrCombobox,
|
|
9550
9669
|
ClrComboboxContainer,
|
|
9551
9670
|
ClrOptions,
|
|
9552
9671
|
ClrOption,
|
|
9672
|
+
ClrOptionGroup,
|
|
9553
9673
|
ClrOptionSelected,
|
|
9554
9674
|
ClrConditionalModule,
|
|
9555
9675
|
ClrOptionItems,
|
|
@@ -10033,14 +10153,14 @@ class ClrBreadcrumbs {
|
|
|
10033
10153
|
}
|
|
10034
10154
|
}
|
|
10035
10155
|
ClrBreadcrumbs.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: ClrBreadcrumbs, deps: [{ token: ClrCommonStringsService }], target: i0.ɵɵFactoryTarget.Component });
|
|
10036
|
-
ClrBreadcrumbs.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.2", type: ClrBreadcrumbs, selector: "clr-breadcrumbs", inputs: { items: "items" }, outputs: { clrBreadcrumbItemClick: "clrBreadcrumbItemClick" }, host: { properties: { "attr.aria-label": "commonStrings.keys.breadcrumbsLabel", "attr.role": "\"navigation\"" }, classAttribute: "clr-breadcrumb" }, ngImport: i0, template: "<div *ngIf=\"items?.length\" role=\"list\" class=\"clr-breadcrumb-menu\">\n <clr-breadcrumb-item *ngIf=\"items.length > max && !isExpanded\">\n <button\n [attr.aria-label]=\"commonStrings.keys.expandBreadcrumbsLabel\"\n class=\"btn btn-link btn-sm clr-breadcrumb-expand\"\n (click)=\"expand()\"\n (keydown)=\"expand()\"\n >\n <cds-icon shape=\"ellipsis-horizontal\"></cds-icon>\n </button>\n </clr-breadcrumb-item>\n <clr-breadcrumb-item *ngFor=\"let breadcrumb of items | slice: -limit : items.length; let isLastItem=last\">\n <span *ngIf=\"isLastItem; else breadcrumbLinks\" aria-current=\"page\">{{ breadcrumb.label }}</span>\n\n <ng-template #breadcrumbLinks>\n <a\n *ngIf=\"breadcrumb.routerLink\"\n [routerLink]=\"breadcrumb.routerLink\"\n [queryParams]=\"breadcrumb.queryParams\"\n [target]=\"breadcrumb.target || '_self'\"\n (click)=\"handleItemClick(breadcrumb)\"\n >\n {{ breadcrumb.label }}\n </a>\n <a\n *ngIf=\"breadcrumb.href\"\n [href]=\"breadcrumb.href\"\n [target]=\"breadcrumb.target || '_self'\"\n (click)=\"handleItemClick(breadcrumb)\"\n >\n {{ breadcrumb.label }}\n </a>\n </ng-template>\n </clr-breadcrumb-item>\n</div>\n", styles: [":root [
|
|
10156
|
+
ClrBreadcrumbs.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.2", type: ClrBreadcrumbs, selector: "clr-breadcrumbs", inputs: { items: "items" }, outputs: { clrBreadcrumbItemClick: "clrBreadcrumbItemClick" }, host: { properties: { "attr.aria-label": "commonStrings.keys.breadcrumbsLabel", "attr.role": "\"navigation\"" }, classAttribute: "clr-breadcrumb" }, ngImport: i0, template: "<div *ngIf=\"items?.length\" role=\"list\" class=\"clr-breadcrumb-menu\">\n <clr-breadcrumb-item *ngIf=\"items.length > max && !isExpanded\">\n <button\n [attr.aria-label]=\"commonStrings.keys.expandBreadcrumbsLabel\"\n class=\"btn btn-link btn-sm clr-breadcrumb-expand\"\n (click)=\"expand()\"\n (keydown)=\"expand()\"\n >\n <cds-icon shape=\"ellipsis-horizontal\"></cds-icon>\n </button>\n </clr-breadcrumb-item>\n <clr-breadcrumb-item *ngFor=\"let breadcrumb of items | slice: -limit : items.length; let isLastItem=last\">\n <span *ngIf=\"isLastItem; else breadcrumbLinks\" aria-current=\"page\">{{ breadcrumb.label }}</span>\n\n <ng-template #breadcrumbLinks>\n <a\n *ngIf=\"breadcrumb.routerLink\"\n [routerLink]=\"breadcrumb.routerLink\"\n [queryParams]=\"breadcrumb.queryParams\"\n [target]=\"breadcrumb.target || '_self'\"\n (click)=\"handleItemClick(breadcrumb)\"\n >\n {{ breadcrumb.label }}\n </a>\n <a\n *ngIf=\"breadcrumb.href\"\n [href]=\"breadcrumb.href\"\n [target]=\"breadcrumb.target || '_self'\"\n (click)=\"handleItemClick(breadcrumb)\"\n >\n {{ breadcrumb.label }}\n </a>\n </ng-template>\n </clr-breadcrumb-item>\n</div>\n", styles: [":root,:root [clr-density]{--clr-breadcrumb-item-space: var(--clr-base-gap-s)}.clr-breadcrumb-menu{display:flex;flex-wrap:wrap;align-items:center}.clr-breadcrumb-menu .clr-breadcrumb-item{display:flex;align-items:center;height:var(--clr-base-row-height-s);color:var(--cds-alias-typography-color-400);font-size:var(--clr-base-typography-font-size-inline);font-weight:var(--cds-alias-typography-secondary-font-weight);line-height:var(--clr-base-typography-line-height-16);letter-spacing:calc(-.1 * (1rem / var(--cds-global-base)))}.clr-breadcrumb-menu .clr-breadcrumb-item a{text-decoration:none;text-align:center}.clr-breadcrumb-menu .clr-breadcrumb-item a:visited{color:var(--clr-link-color)}.clr-breadcrumb-menu .clr-breadcrumb-item a:visited:hover{color:var(--clr-link-hover-color)}.clr-breadcrumb-menu .clr-breadcrumb-item a:visited:active{color:var(--clr-link-active-color)}.clr-breadcrumb-menu .clr-breadcrumb-item:not(:last-child):after{content:\"/\";margin:0 var(--clr-breadcrumb-item-space)}.clr-breadcrumb-menu .clr-breadcrumb-expand{height:var(--clr-base-icon-size-l);width:var(--clr-base-icon-size-l);min-height:var(--clr-base-icon-size-l);min-width:var(--clr-base-icon-size-l);margin:0;padding:0;gap:0}\n"], 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: CdsIconCustomTag, selector: "cds-icon" }, { kind: "directive", type: i1$1.RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "component", type: ClrBreadcrumbItem, selector: "clr-breadcrumb-item" }, { kind: "pipe", type: i5.SlicePipe, name: "slice" }] });
|
|
10037
10157
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: ClrBreadcrumbs, decorators: [{
|
|
10038
10158
|
type: Component,
|
|
10039
10159
|
args: [{ selector: 'clr-breadcrumbs', host: {
|
|
10040
10160
|
class: 'clr-breadcrumb',
|
|
10041
10161
|
'[attr.aria-label]': 'commonStrings.keys.breadcrumbsLabel',
|
|
10042
10162
|
'[attr.role]': '"navigation"',
|
|
10043
|
-
}, template: "<div *ngIf=\"items?.length\" role=\"list\" class=\"clr-breadcrumb-menu\">\n <clr-breadcrumb-item *ngIf=\"items.length > max && !isExpanded\">\n <button\n [attr.aria-label]=\"commonStrings.keys.expandBreadcrumbsLabel\"\n class=\"btn btn-link btn-sm clr-breadcrumb-expand\"\n (click)=\"expand()\"\n (keydown)=\"expand()\"\n >\n <cds-icon shape=\"ellipsis-horizontal\"></cds-icon>\n </button>\n </clr-breadcrumb-item>\n <clr-breadcrumb-item *ngFor=\"let breadcrumb of items | slice: -limit : items.length; let isLastItem=last\">\n <span *ngIf=\"isLastItem; else breadcrumbLinks\" aria-current=\"page\">{{ breadcrumb.label }}</span>\n\n <ng-template #breadcrumbLinks>\n <a\n *ngIf=\"breadcrumb.routerLink\"\n [routerLink]=\"breadcrumb.routerLink\"\n [queryParams]=\"breadcrumb.queryParams\"\n [target]=\"breadcrumb.target || '_self'\"\n (click)=\"handleItemClick(breadcrumb)\"\n >\n {{ breadcrumb.label }}\n </a>\n <a\n *ngIf=\"breadcrumb.href\"\n [href]=\"breadcrumb.href\"\n [target]=\"breadcrumb.target || '_self'\"\n (click)=\"handleItemClick(breadcrumb)\"\n >\n {{ breadcrumb.label }}\n </a>\n </ng-template>\n </clr-breadcrumb-item>\n</div>\n", styles: [":root [
|
|
10163
|
+
}, template: "<div *ngIf=\"items?.length\" role=\"list\" class=\"clr-breadcrumb-menu\">\n <clr-breadcrumb-item *ngIf=\"items.length > max && !isExpanded\">\n <button\n [attr.aria-label]=\"commonStrings.keys.expandBreadcrumbsLabel\"\n class=\"btn btn-link btn-sm clr-breadcrumb-expand\"\n (click)=\"expand()\"\n (keydown)=\"expand()\"\n >\n <cds-icon shape=\"ellipsis-horizontal\"></cds-icon>\n </button>\n </clr-breadcrumb-item>\n <clr-breadcrumb-item *ngFor=\"let breadcrumb of items | slice: -limit : items.length; let isLastItem=last\">\n <span *ngIf=\"isLastItem; else breadcrumbLinks\" aria-current=\"page\">{{ breadcrumb.label }}</span>\n\n <ng-template #breadcrumbLinks>\n <a\n *ngIf=\"breadcrumb.routerLink\"\n [routerLink]=\"breadcrumb.routerLink\"\n [queryParams]=\"breadcrumb.queryParams\"\n [target]=\"breadcrumb.target || '_self'\"\n (click)=\"handleItemClick(breadcrumb)\"\n >\n {{ breadcrumb.label }}\n </a>\n <a\n *ngIf=\"breadcrumb.href\"\n [href]=\"breadcrumb.href\"\n [target]=\"breadcrumb.target || '_self'\"\n (click)=\"handleItemClick(breadcrumb)\"\n >\n {{ breadcrumb.label }}\n </a>\n </ng-template>\n </clr-breadcrumb-item>\n</div>\n", styles: [":root,:root [clr-density]{--clr-breadcrumb-item-space: var(--clr-base-gap-s)}.clr-breadcrumb-menu{display:flex;flex-wrap:wrap;align-items:center}.clr-breadcrumb-menu .clr-breadcrumb-item{display:flex;align-items:center;height:var(--clr-base-row-height-s);color:var(--cds-alias-typography-color-400);font-size:var(--clr-base-typography-font-size-inline);font-weight:var(--cds-alias-typography-secondary-font-weight);line-height:var(--clr-base-typography-line-height-16);letter-spacing:calc(-.1 * (1rem / var(--cds-global-base)))}.clr-breadcrumb-menu .clr-breadcrumb-item a{text-decoration:none;text-align:center}.clr-breadcrumb-menu .clr-breadcrumb-item a:visited{color:var(--clr-link-color)}.clr-breadcrumb-menu .clr-breadcrumb-item a:visited:hover{color:var(--clr-link-hover-color)}.clr-breadcrumb-menu .clr-breadcrumb-item a:visited:active{color:var(--clr-link-active-color)}.clr-breadcrumb-menu .clr-breadcrumb-item:not(:last-child):after{content:\"/\";margin:0 var(--clr-breadcrumb-item-space)}.clr-breadcrumb-menu .clr-breadcrumb-expand{height:var(--clr-base-icon-size-l);width:var(--clr-base-icon-size-l);min-height:var(--clr-base-icon-size-l);min-width:var(--clr-base-icon-size-l);margin:0;padding:0;gap:0}\n"] }]
|
|
10044
10164
|
}], ctorParameters: function () { return [{ type: ClrCommonStringsService }]; }, propDecorators: { items: [{
|
|
10045
10165
|
type: Input
|
|
10046
10166
|
}], clrBreadcrumbItemClick: [{
|
|
@@ -14806,7 +14926,7 @@ class ClrDatepickerViewManager {
|
|
|
14806
14926
|
}
|
|
14807
14927
|
}
|
|
14808
14928
|
ClrDatepickerViewManager.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: ClrDatepickerViewManager, deps: [{ token: ClrCommonStringsService }, { token: ViewManagerService }, { token: DateNavigationService }, { token: DateIOService }], target: i0.ɵɵFactoryTarget.Component });
|
|
14809
|
-
ClrDatepickerViewManager.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.2", type: ClrDatepickerViewManager, selector: "clr-datepicker-view-manager", host: { attributes: { "role": "dialog" }, properties: { "class.datepicker": "true", "class.has-range-option": "hasRangeOptions", "class.has-action-buttons": "hasActionButtons", "attr.aria-modal": "true", "attr.aria-label": "commonStrings.keys.datepickerDialogLabel" } }, providers: [DatepickerFocusService], ngImport: i0, template: "<!--\n ~ Copyright (c) 2016-2025 Broadcom. All Rights Reserved.\n ~ The term \"Broadcom\" refers to Broadcom Inc. and/or its subsidiaries.\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<ng-container *ngIf=\"hasRangeOptions; else calendarView\">\n <clr-vertical-nav class=\"clr-date-range-picker-nav\">\n <ng-container *ngFor=\"let option of dateRangeOptions\">\n <a\n clrVerticalNavLink\n href=\"javascript:void(0)\"\n [attr.aria-label]=\"option?.label\"\n tabindex=\"0\"\n (keyup.enter)=\"onRangeOptionSelect(option)\"\n (click)=\"onRangeOptionSelect(option)\"\n >\n {{option.label}}\n </a>\n </ng-container>\n </clr-vertical-nav>\n\n <
|
|
14929
|
+
ClrDatepickerViewManager.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.2", type: ClrDatepickerViewManager, selector: "clr-datepicker-view-manager", host: { attributes: { "role": "dialog" }, properties: { "class.datepicker": "true", "class.has-range-option": "hasRangeOptions", "class.has-action-buttons": "hasActionButtons", "attr.aria-modal": "true", "attr.aria-label": "commonStrings.keys.datepickerDialogLabel" } }, providers: [DatepickerFocusService], ngImport: i0, template: "<!--\n ~ Copyright (c) 2016-2025 Broadcom. All Rights Reserved.\n ~ The term \"Broadcom\" refers to Broadcom Inc. and/or its subsidiaries.\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<ng-container *ngIf=\"hasRangeOptions; else calendarView\">\n <clr-vertical-nav class=\"clr-date-range-picker-nav\">\n <ng-container *ngFor=\"let option of dateRangeOptions\">\n <a\n clrVerticalNavLink\n href=\"javascript:void(0)\"\n [attr.aria-label]=\"option?.label\"\n tabindex=\"0\"\n (keyup.enter)=\"onRangeOptionSelect(option)\"\n (click)=\"onRangeOptionSelect(option)\"\n >\n {{option.label}}\n </a>\n </ng-container>\n </clr-vertical-nav>\n\n <ng-container *ngTemplateOutlet=\"calendarView\"></ng-container>\n</ng-container>\n\n<ng-template #calendarView>\n <div class=\"datepicker-view-manager\">\n <clr-monthpicker *ngIf=\"isMonthView\"></clr-monthpicker>\n <clr-yearpicker *ngIf=\"isYearView\"></clr-yearpicker>\n <clr-daypicker *ngIf=\"isDayView\"></clr-daypicker>\n <clr-datepicker-actions *ngIf=\"hasActionButtons\"></clr-datepicker-actions>\n </div>\n</ng-template>\n", 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: "component", type: ClrVerticalNav, selector: "clr-vertical-nav", inputs: ["clrVerticalNavToggleLabel", "clrVerticalNavCollapsible", "clrVerticalNavCollapsed"], outputs: ["clrVerticalNavCollapsedChange"] }, { kind: "component", type: ClrVerticalNavLink, selector: "[clrVerticalNavLink]" }, { kind: "component", type: ClrMonthpicker, selector: "clr-monthpicker" }, { kind: "component", type: ClrYearpicker, selector: "clr-yearpicker" }, { kind: "component", type: ClrDaypicker, selector: "clr-daypicker" }, { kind: "component", type: ClrDatepickerActions, selector: "clr-datepicker-actions" }] });
|
|
14810
14930
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: ClrDatepickerViewManager, decorators: [{
|
|
14811
14931
|
type: Component,
|
|
14812
14932
|
args: [{ selector: 'clr-datepicker-view-manager', providers: [DatepickerFocusService], host: {
|
|
@@ -14816,7 +14936,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImpor
|
|
|
14816
14936
|
'[attr.aria-modal]': 'true',
|
|
14817
14937
|
'[attr.aria-label]': 'commonStrings.keys.datepickerDialogLabel',
|
|
14818
14938
|
role: 'dialog',
|
|
14819
|
-
}, template: "<!--\n ~ Copyright (c) 2016-2025 Broadcom. All Rights Reserved.\n ~ The term \"Broadcom\" refers to Broadcom Inc. and/or its subsidiaries.\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<ng-container *ngIf=\"hasRangeOptions; else calendarView\">\n <clr-vertical-nav class=\"clr-date-range-picker-nav\">\n <ng-container *ngFor=\"let option of dateRangeOptions\">\n <a\n clrVerticalNavLink\n href=\"javascript:void(0)\"\n [attr.aria-label]=\"option?.label\"\n tabindex=\"0\"\n (keyup.enter)=\"onRangeOptionSelect(option)\"\n (click)=\"onRangeOptionSelect(option)\"\n >\n {{option.label}}\n </a>\n </ng-container>\n </clr-vertical-nav>\n\n <
|
|
14939
|
+
}, template: "<!--\n ~ Copyright (c) 2016-2025 Broadcom. All Rights Reserved.\n ~ The term \"Broadcom\" refers to Broadcom Inc. and/or its subsidiaries.\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<ng-container *ngIf=\"hasRangeOptions; else calendarView\">\n <clr-vertical-nav class=\"clr-date-range-picker-nav\">\n <ng-container *ngFor=\"let option of dateRangeOptions\">\n <a\n clrVerticalNavLink\n href=\"javascript:void(0)\"\n [attr.aria-label]=\"option?.label\"\n tabindex=\"0\"\n (keyup.enter)=\"onRangeOptionSelect(option)\"\n (click)=\"onRangeOptionSelect(option)\"\n >\n {{option.label}}\n </a>\n </ng-container>\n </clr-vertical-nav>\n\n <ng-container *ngTemplateOutlet=\"calendarView\"></ng-container>\n</ng-container>\n\n<ng-template #calendarView>\n <div class=\"datepicker-view-manager\">\n <clr-monthpicker *ngIf=\"isMonthView\"></clr-monthpicker>\n <clr-yearpicker *ngIf=\"isYearView\"></clr-yearpicker>\n <clr-daypicker *ngIf=\"isDayView\"></clr-daypicker>\n <clr-datepicker-actions *ngIf=\"hasActionButtons\"></clr-datepicker-actions>\n </div>\n</ng-template>\n" }]
|
|
14820
14940
|
}], ctorParameters: function () { return [{ type: ClrCommonStringsService }, { type: ViewManagerService }, { type: DateNavigationService }, { type: DateIOService }]; } });
|
|
14821
14941
|
|
|
14822
14942
|
/*
|
|
@@ -15597,7 +15717,7 @@ class ClrFileInputContainer extends ClrAbstractContainer {
|
|
|
15597
15717
|
return this.fileInput.elementRef.nativeElement.multiple;
|
|
15598
15718
|
}
|
|
15599
15719
|
get disabled() {
|
|
15600
|
-
return this.fileInput.elementRef.nativeElement.disabled;
|
|
15720
|
+
return this.fileInput.elementRef.nativeElement.disabled || (this.control && this.control.disabled);
|
|
15601
15721
|
}
|
|
15602
15722
|
get browseButtonText() {
|
|
15603
15723
|
const selectionButtonLabel = this.fileList ? undefined : this.fileInput?.selection?.buttonLabel;
|
|
@@ -15680,7 +15800,7 @@ ClrFileInputContainer.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0",
|
|
|
15680
15800
|
[attr.aria-label]="fileInput?.selection?.clearFilesButtonLabel"
|
|
15681
15801
|
(click)="clearSelectedFiles()"
|
|
15682
15802
|
>
|
|
15683
|
-
<cds-icon shape="times" status="neutral"
|
|
15803
|
+
<cds-icon shape="times" status="neutral"></cds-icon>
|
|
15684
15804
|
</button>
|
|
15685
15805
|
<cds-icon
|
|
15686
15806
|
*ngIf="showInvalid"
|
|
@@ -15751,7 +15871,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImpor
|
|
|
15751
15871
|
[attr.aria-label]="fileInput?.selection?.clearFilesButtonLabel"
|
|
15752
15872
|
(click)="clearSelectedFiles()"
|
|
15753
15873
|
>
|
|
15754
|
-
<cds-icon shape="times" status="neutral"
|
|
15874
|
+
<cds-icon shape="times" status="neutral"></cds-icon>
|
|
15755
15875
|
</button>
|
|
15756
15876
|
<cds-icon
|
|
15757
15877
|
*ngIf="showInvalid"
|
|
@@ -15819,9 +15939,13 @@ class ClrFileInput extends WrappedFormControl {
|
|
|
15819
15939
|
constructor(injector, renderer, viewContainerRef, elementRef, control, commonStrings) {
|
|
15820
15940
|
super(viewContainerRef, ClrFileInputContainer, injector, control, renderer, elementRef);
|
|
15821
15941
|
this.elementRef = elementRef;
|
|
15942
|
+
this.control = control;
|
|
15822
15943
|
this.commonStrings = commonStrings;
|
|
15823
15944
|
this.selection = undefined;
|
|
15824
15945
|
}
|
|
15946
|
+
get disabled() {
|
|
15947
|
+
return this.control && this.control.disabled;
|
|
15948
|
+
}
|
|
15825
15949
|
handleChange() {
|
|
15826
15950
|
this.updateSelection();
|
|
15827
15951
|
}
|
|
@@ -15853,7 +15977,7 @@ class ClrFileInput extends WrappedFormControl {
|
|
|
15853
15977
|
}
|
|
15854
15978
|
}
|
|
15855
15979
|
ClrFileInput.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: ClrFileInput, deps: [{ token: i0.Injector }, { token: i0.Renderer2 }, { token: i0.ViewContainerRef }, { token: i0.ElementRef }, { token: i1.NgControl, optional: true, self: true }, { token: ClrCommonStringsService }], target: i0.ɵɵFactoryTarget.Directive });
|
|
15856
|
-
ClrFileInput.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "15.2.2", type: ClrFileInput, selector: "input[type=\"file\"][clrFileInput]", host: { attributes: { "tabindex": "-1", "aria-hidden": "true" }, listeners: { "change": "handleChange()" }, properties: { "class.clr-file-input": "true" } }, usesInheritance: true, ngImport: i0 });
|
|
15980
|
+
ClrFileInput.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "15.2.2", type: ClrFileInput, selector: "input[type=\"file\"][clrFileInput]", host: { attributes: { "tabindex": "-1", "aria-hidden": "true" }, listeners: { "change": "handleChange()" }, properties: { "class.clr-file-input": "true", "disabled": "this.disabled" } }, usesInheritance: true, ngImport: i0 });
|
|
15857
15981
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: ClrFileInput, decorators: [{
|
|
15858
15982
|
type: Directive,
|
|
15859
15983
|
args: [{
|
|
@@ -15868,7 +15992,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImpor
|
|
|
15868
15992
|
type: Self
|
|
15869
15993
|
}, {
|
|
15870
15994
|
type: Optional
|
|
15871
|
-
}] }, { type: ClrCommonStringsService }]; }, propDecorators: {
|
|
15995
|
+
}] }, { type: ClrCommonStringsService }]; }, propDecorators: { disabled: [{
|
|
15996
|
+
type: HostBinding,
|
|
15997
|
+
args: ['disabled']
|
|
15998
|
+
}], handleChange: [{
|
|
15872
15999
|
type: HostListener,
|
|
15873
16000
|
args: ['change']
|
|
15874
16001
|
}] } });
|
|
@@ -16071,6 +16198,9 @@ class ClrNumberInputContainer extends ClrAbstractContainer {
|
|
|
16071
16198
|
this.focus = false;
|
|
16072
16199
|
this.subscriptions.push(focusService.focusChange.subscribe(state => (this.focus = state)));
|
|
16073
16200
|
}
|
|
16201
|
+
focusOut() {
|
|
16202
|
+
this.input.dispatchBlur();
|
|
16203
|
+
}
|
|
16074
16204
|
}
|
|
16075
16205
|
ClrNumberInputContainer.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: ClrNumberInputContainer, deps: [{ token: ControlClassService }, { token: LayoutService, optional: true }, { token: NgControlService }, { token: FocusService }, { token: IfControlStateService }], target: i0.ɵɵFactoryTarget.Component });
|
|
16076
16206
|
ClrNumberInputContainer.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.2", type: ClrNumberInputContainer, selector: "clr-number-input-container", host: { properties: { "class.clr-form-control": "true", "class.clr-form-control-disabled": "control?.disabled", "class.clr-form-control-readonly": "input.readonly", "class.clr-row": "addGrid()" } }, providers: [FocusService, IfControlStateService, NgControlService, ControlIdService, ControlClassService], queries: [{ propertyName: "input", first: true, predicate: i0.forwardRef(function () { return ClrNumberInput; }), descendants: true }], usesInheritance: true, ngImport: i0, template: `
|
|
@@ -16078,7 +16208,7 @@ ClrNumberInputContainer.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0"
|
|
|
16078
16208
|
<label *ngIf="!label && addGrid()"></label>
|
|
16079
16209
|
<div class="clr-control-container" [ngClass]="controlClass()">
|
|
16080
16210
|
<div class="clr-number-input-wrapper">
|
|
16081
|
-
<div class="clr-input-group" [class.clr-focus]="focus">
|
|
16211
|
+
<div class="clr-input-group" [class.clr-focus]="focus" (focusout)="focusOut()">
|
|
16082
16212
|
<ng-content select="[clrNumberInput]"></ng-content>
|
|
16083
16213
|
<div class="clr-input-group-actions">
|
|
16084
16214
|
<button
|
|
@@ -16129,7 +16259,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImpor
|
|
|
16129
16259
|
<label *ngIf="!label && addGrid()"></label>
|
|
16130
16260
|
<div class="clr-control-container" [ngClass]="controlClass()">
|
|
16131
16261
|
<div class="clr-number-input-wrapper">
|
|
16132
|
-
<div class="clr-input-group" [class.clr-focus]="focus">
|
|
16262
|
+
<div class="clr-input-group" [class.clr-focus]="focus" (focusout)="focusOut()">
|
|
16133
16263
|
<ng-content select="[clrNumberInput]"></ng-content>
|
|
16134
16264
|
<div class="clr-input-group-actions">
|
|
16135
16265
|
<button
|
|
@@ -16221,14 +16351,21 @@ class ClrNumberInput extends WrappedFormControl {
|
|
|
16221
16351
|
}
|
|
16222
16352
|
stepUp() {
|
|
16223
16353
|
this.el.nativeElement.stepUp();
|
|
16224
|
-
this.
|
|
16354
|
+
this.dispatchStepChangeEvents();
|
|
16225
16355
|
this.control.control.markAllAsTouched();
|
|
16226
16356
|
}
|
|
16227
16357
|
stepDown() {
|
|
16228
16358
|
this.el.nativeElement.stepDown();
|
|
16229
|
-
this.
|
|
16359
|
+
this.dispatchStepChangeEvents();
|
|
16230
16360
|
this.control.control.markAllAsTouched();
|
|
16231
16361
|
}
|
|
16362
|
+
dispatchBlur() {
|
|
16363
|
+
this.el.nativeElement.dispatchEvent(new Event('blur', { bubbles: true, cancelable: true }));
|
|
16364
|
+
}
|
|
16365
|
+
dispatchStepChangeEvents() {
|
|
16366
|
+
this.el.nativeElement.dispatchEvent(new Event('input', { bubbles: true, cancelable: true }));
|
|
16367
|
+
this.el.nativeElement.dispatchEvent(new Event('change', { bubbles: true, cancelable: true }));
|
|
16368
|
+
}
|
|
16232
16369
|
}
|
|
16233
16370
|
ClrNumberInput.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: ClrNumberInput, deps: [{ token: FocusService, optional: true }, { token: i0.ViewContainerRef }, { token: i0.Injector }, { token: i1.NgControl, optional: true, self: true }, { token: i0.Renderer2 }, { token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Directive });
|
|
16234
16371
|
ClrNumberInput.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "15.2.2", type: ClrNumberInput, selector: "input[type=\"number\"][clrNumberInput]", host: { listeners: { "focus": "triggerFocus()", "blur": "triggerValidation()" }, properties: { "class.clr-input": "true", "class.clr-number-input": "true" } }, usesInheritance: true, ngImport: i0 });
|
|
@@ -17872,9 +18009,6 @@ class DefaultKeyNavigationStrategy {
|
|
|
17872
18009
|
* The full license information can be found in LICENSE in the root directory of this project.
|
|
17873
18010
|
*/
|
|
17874
18011
|
class ExpandedRowKeyNavigationStrategy extends DefaultKeyNavigationStrategy {
|
|
17875
|
-
constructor(utils) {
|
|
17876
|
-
super(utils);
|
|
17877
|
-
}
|
|
17878
18012
|
keyUp(currentCellCoords) {
|
|
17879
18013
|
const nextCellCoords = this.utils.createNextCellCoords(currentCellCoords);
|
|
17880
18014
|
if (currentCellCoords.y === 0) {
|
|
@@ -18039,9 +18173,6 @@ class ExpandedRowKeyNavigationStrategy extends DefaultKeyNavigationStrategy {
|
|
|
18039
18173
|
* The full license information can be found in LICENSE in the root directory of this project.
|
|
18040
18174
|
*/
|
|
18041
18175
|
class ExpandedColumnsRowKeyNavigationStrategy extends ExpandedRowKeyNavigationStrategy {
|
|
18042
|
-
constructor(utils) {
|
|
18043
|
-
super(utils);
|
|
18044
|
-
}
|
|
18045
18176
|
keyUp(currentCellCoords) {
|
|
18046
18177
|
const nextCellCoords = this.utils.createNextCellCoords(currentCellCoords);
|
|
18047
18178
|
if (currentCellCoords.y === 0) {
|
|
@@ -18194,8 +18325,21 @@ class KeyNavigationUtils {
|
|
|
18194
18325
|
};
|
|
18195
18326
|
return coordinates;
|
|
18196
18327
|
}
|
|
18328
|
+
get averageRowHeight() {
|
|
18329
|
+
const heightSum = Array.from(this.rows.values()).reduce((sum, row) => {
|
|
18330
|
+
return sum + row.clientHeight;
|
|
18331
|
+
}, 0);
|
|
18332
|
+
return Math.round(heightSum / this.rows.length);
|
|
18333
|
+
}
|
|
18197
18334
|
get itemsPerPage() {
|
|
18198
|
-
return Math.floor(this.host?.querySelector('.datagrid').clientHeight / this.
|
|
18335
|
+
return Math.floor(this.host?.querySelector('.datagrid').clientHeight / this.averageRowHeight) - 1 || 0;
|
|
18336
|
+
}
|
|
18337
|
+
setAriaRowIndexTo(cellCoords) {
|
|
18338
|
+
let ariaRowIndex = this.rows[cellCoords.y].getAttribute('aria-rowindex');
|
|
18339
|
+
if (!ariaRowIndex) {
|
|
18340
|
+
ariaRowIndex = this.rows[cellCoords.y - 1].getAttribute('aria-rowindex');
|
|
18341
|
+
}
|
|
18342
|
+
cellCoords.ariaRowIndex = ariaRowIndex;
|
|
18199
18343
|
}
|
|
18200
18344
|
getNextItemCoordinate(e) {
|
|
18201
18345
|
const currentCellCoords = this.currentCellCoordinates;
|
|
@@ -18298,15 +18442,16 @@ function isActionableItem(el) {
|
|
|
18298
18442
|
class KeyNavigationGridController {
|
|
18299
18443
|
constructor(zone) {
|
|
18300
18444
|
this.zone = zone;
|
|
18445
|
+
this.nextCellCoordsEmitter = new EventEmitter(false);
|
|
18301
18446
|
this.skipItemFocus = false;
|
|
18302
|
-
this.
|
|
18303
|
-
this.destroy$ = new Subject();
|
|
18304
|
-
this._activeCell = null;
|
|
18447
|
+
this.preventScrollOnFocus = false;
|
|
18305
18448
|
this.config = {
|
|
18306
18449
|
keyGridRows: '[role=row]:not(.datagrid-placeholder):not([style*="display: none"])',
|
|
18307
18450
|
keyGridCells: '[role=gridcell]:not(.datagrid-hidden-column):not(.datagrid-placeholder-content), [role=columnheader]:not(.datagrid-hidden-column):not(.datagrid-placeholder-content), .datagrid-detail-caret',
|
|
18308
18451
|
keyGrid: '[role=grid]',
|
|
18309
18452
|
};
|
|
18453
|
+
this.listenersAdded = false;
|
|
18454
|
+
this.destroy$ = new Subject();
|
|
18310
18455
|
}
|
|
18311
18456
|
ngOnDestroy() {
|
|
18312
18457
|
this.destroy$.next();
|
|
@@ -18326,22 +18471,17 @@ class KeyNavigationGridController {
|
|
|
18326
18471
|
? Array.from(this.keyNavUtils.cells).find(c => c === e.target || c === e.target.closest(this.config.keyGridCells))
|
|
18327
18472
|
: null;
|
|
18328
18473
|
if (activeCell) {
|
|
18329
|
-
this.setActiveCell(activeCell
|
|
18474
|
+
this.setActiveCell(activeCell);
|
|
18475
|
+
if (!isActionableItem(e.target)) {
|
|
18476
|
+
this.focusElement(activeCell);
|
|
18477
|
+
}
|
|
18330
18478
|
}
|
|
18331
18479
|
}
|
|
18332
18480
|
});
|
|
18333
18481
|
fromEvent(this.keyNavUtils.grid, 'wheel')
|
|
18334
18482
|
.pipe(takeUntil(this.destroy$))
|
|
18335
18483
|
.subscribe(() => {
|
|
18336
|
-
this.
|
|
18337
|
-
});
|
|
18338
|
-
fromEvent(this.keyNavUtils.grid, 'focusout')
|
|
18339
|
-
.pipe(debounceTime(0), takeUntil(this.destroy$))
|
|
18340
|
-
.subscribe(() => {
|
|
18341
|
-
if (this.keyNavUtils.grid.contains(document.activeElement)) {
|
|
18342
|
-
return;
|
|
18343
|
-
}
|
|
18344
|
-
this.removeActiveCell();
|
|
18484
|
+
this.nextCellCoordsEmitter.emit(null);
|
|
18345
18485
|
});
|
|
18346
18486
|
fromEvent(this.keyNavUtils.grid, 'keydown')
|
|
18347
18487
|
.pipe(takeUntil(this.destroy$))
|
|
@@ -18360,11 +18500,19 @@ class KeyNavigationGridController {
|
|
|
18360
18500
|
e.key === Keys.PageUp ||
|
|
18361
18501
|
e.key === Keys.PageDown) {
|
|
18362
18502
|
const nextCellCoords = this.keyNavUtils.getNextItemCoordinate(e);
|
|
18503
|
+
if (nextCellCoords.y > 0 &&
|
|
18504
|
+
(e.key === Keys.ArrowUp || e.key === Keys.ArrowDown || e.key === Keys.PageUp || e.key === Keys.PageDown)) {
|
|
18505
|
+
this.keyNavUtils.setAriaRowIndexTo(nextCellCoords);
|
|
18506
|
+
this.nextCellCoordsEmitter.emit(nextCellCoords);
|
|
18507
|
+
}
|
|
18363
18508
|
const activeItem = this.keyNavUtils.rows
|
|
18364
18509
|
? Array.from(this.keyNavUtils.getCellsForRow(nextCellCoords.y))[nextCellCoords.x]
|
|
18365
18510
|
: null;
|
|
18366
18511
|
if (activeItem) {
|
|
18367
18512
|
this.setActiveCell(activeItem);
|
|
18513
|
+
this.focusElement(activeItem, {
|
|
18514
|
+
preventScroll: this.preventScrollOnFocus && !!nextCellCoords.ariaRowIndex,
|
|
18515
|
+
});
|
|
18368
18516
|
}
|
|
18369
18517
|
e.preventDefault();
|
|
18370
18518
|
}
|
|
@@ -18382,13 +18530,7 @@ class KeyNavigationGridController {
|
|
|
18382
18530
|
const firstCell = this.keyNavUtils.cells ? this.keyNavUtils.cells[0] : null;
|
|
18383
18531
|
firstCell?.setAttribute('tabindex', '0');
|
|
18384
18532
|
}
|
|
18385
|
-
|
|
18386
|
-
this._activeCell = null;
|
|
18387
|
-
}
|
|
18388
|
-
getActiveCell() {
|
|
18389
|
-
return this._activeCell;
|
|
18390
|
-
}
|
|
18391
|
-
setActiveCell(activeCell, { keepFocus } = { keepFocus: false }) {
|
|
18533
|
+
setActiveCell(activeCell) {
|
|
18392
18534
|
const prior = this.keyNavUtils.cells
|
|
18393
18535
|
? Array.from(this.keyNavUtils.cells).find(c => c.getAttribute('tabindex') === '0')
|
|
18394
18536
|
: null;
|
|
@@ -18396,18 +18538,20 @@ class KeyNavigationGridController {
|
|
|
18396
18538
|
prior.setAttribute('tabindex', '-1');
|
|
18397
18539
|
}
|
|
18398
18540
|
activeCell.setAttribute('tabindex', '0');
|
|
18399
|
-
|
|
18400
|
-
|
|
18401
|
-
|
|
18402
|
-
|
|
18403
|
-
|
|
18404
|
-
|
|
18405
|
-
|
|
18406
|
-
|
|
18407
|
-
|
|
18408
|
-
|
|
18409
|
-
|
|
18541
|
+
}
|
|
18542
|
+
focusElement(activeCell, options = { preventScroll: false }) {
|
|
18543
|
+
if (this.skipItemFocus) {
|
|
18544
|
+
return;
|
|
18545
|
+
}
|
|
18546
|
+
let elementToFocus;
|
|
18547
|
+
if (activeCell.getAttribute('role') === 'columnheader') {
|
|
18548
|
+
elementToFocus = activeCell;
|
|
18549
|
+
}
|
|
18550
|
+
else {
|
|
18551
|
+
const tabbableElements = getTabbableItems(activeCell);
|
|
18552
|
+
elementToFocus = tabbableElements.length ? tabbableElements[0] : activeCell;
|
|
18410
18553
|
}
|
|
18554
|
+
elementToFocus.focus(options);
|
|
18411
18555
|
}
|
|
18412
18556
|
}
|
|
18413
18557
|
KeyNavigationGridController.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: KeyNavigationGridController, deps: [{ token: i0.NgZone }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
@@ -18479,35 +18623,17 @@ class ClrDatagridFilter extends DatagridFilterRegistrar {
|
|
|
18479
18623
|
get active() {
|
|
18480
18624
|
return !!this.filter && this.filter.isActive();
|
|
18481
18625
|
}
|
|
18482
|
-
ngOnChanges() {
|
|
18483
|
-
setTimeout(() => {
|
|
18484
|
-
this.setToggleButtonAriaLabel();
|
|
18485
|
-
});
|
|
18486
|
-
}
|
|
18487
18626
|
ngOnDestroy() {
|
|
18488
18627
|
super.ngOnDestroy();
|
|
18489
18628
|
this.subs.forEach(sub => sub.unsubscribe());
|
|
18490
18629
|
}
|
|
18491
|
-
/**
|
|
18492
|
-
* This is not in a getter to prevent "expression has changed after it was checked" errors.
|
|
18493
|
-
* And it's more performant this way since it only runs on change.
|
|
18494
|
-
*/
|
|
18495
|
-
setToggleButtonAriaLabel() {
|
|
18496
|
-
const columnElement = this.elementRef.nativeElement?.closest('clr-dg-column');
|
|
18497
|
-
const columnTitleElement = columnElement?.querySelector('.datagrid-column-title');
|
|
18498
|
-
const columnTitle = columnTitleElement?.textContent.trim().toLocaleLowerCase();
|
|
18499
|
-
this.toggleButtonAriaLabel = this.commonStrings.parse(this.commonStrings.keys.datagridFilterAriaLabel, {
|
|
18500
|
-
COLUMN: columnTitle || '',
|
|
18501
|
-
});
|
|
18502
|
-
}
|
|
18503
18630
|
}
|
|
18504
18631
|
ClrDatagridFilter.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: ClrDatagridFilter, deps: [{ token: FiltersProvider }, { token: ClrCommonStringsService }, { token: ClrPopoverToggleService }, { token: PLATFORM_ID }, { token: i0.ElementRef }, { token: KeyNavigationGridController, optional: true }], target: i0.ɵɵFactoryTarget.Component });
|
|
18505
|
-
ClrDatagridFilter.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.2", type: ClrDatagridFilter, selector: "clr-dg-filter", inputs: { open: ["clrDgFilterOpen", "open"], customFilter: ["clrDgFilter", "customFilter"] }, outputs: { openChange: "clrDgFilterOpenChange" }, providers: [{ provide: CustomFilter, useExisting: ClrDatagridFilter }], viewQueries: [{ propertyName: "anchor", first: true, predicate: ["anchor"], descendants: true, read: ElementRef }], usesInheritance: true,
|
|
18632
|
+
ClrDatagridFilter.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.2", type: ClrDatagridFilter, selector: "clr-dg-filter", inputs: { open: ["clrDgFilterOpen", "open"], customFilter: ["clrDgFilter", "customFilter"] }, outputs: { openChange: "clrDgFilterOpenChange" }, providers: [{ provide: CustomFilter, useExisting: ClrDatagridFilter }], viewQueries: [{ propertyName: "anchor", first: true, predicate: ["anchor"], descendants: true, read: ElementRef }], usesInheritance: true, ngImport: i0, template: `
|
|
18506
18633
|
<button
|
|
18507
18634
|
class="datagrid-filter-toggle"
|
|
18508
18635
|
type="button"
|
|
18509
18636
|
#anchor
|
|
18510
|
-
[attr.aria-label]="toggleButtonAriaLabel"
|
|
18511
18637
|
[attr.aria-expanded]="ariaExpanded"
|
|
18512
18638
|
[attr.aria-controls]="popoverId"
|
|
18513
18639
|
clrPopoverAnchor
|
|
@@ -18550,7 +18676,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImpor
|
|
|
18550
18676
|
class="datagrid-filter-toggle"
|
|
18551
18677
|
type="button"
|
|
18552
18678
|
#anchor
|
|
18553
|
-
[attr.aria-label]="toggleButtonAriaLabel"
|
|
18554
18679
|
[attr.aria-expanded]="ariaExpanded"
|
|
18555
18680
|
[attr.aria-controls]="popoverId"
|
|
18556
18681
|
clrPopoverAnchor
|
|
@@ -20040,13 +20165,14 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImpor
|
|
|
20040
20165
|
* The full license information can be found in LICENSE in the root directory of this project.
|
|
20041
20166
|
*/
|
|
20042
20167
|
class ClrDatagridColumn extends DatagridFilterRegistrar {
|
|
20043
|
-
constructor(el, _sort, filters, vcr, detailService, changeDetectorRef) {
|
|
20168
|
+
constructor(el, _sort, filters, vcr, detailService, changeDetectorRef, commonStrings) {
|
|
20044
20169
|
super(filters);
|
|
20045
20170
|
this.el = el;
|
|
20046
20171
|
this._sort = _sort;
|
|
20047
20172
|
this.vcr = vcr;
|
|
20048
20173
|
this.detailService = detailService;
|
|
20049
20174
|
this.changeDetectorRef = changeDetectorRef;
|
|
20175
|
+
this.commonStrings = commonStrings;
|
|
20050
20176
|
this.sortOrderChange = new EventEmitter();
|
|
20051
20177
|
this.filterValueChange = new EventEmitter();
|
|
20052
20178
|
/**
|
|
@@ -20216,6 +20342,9 @@ class ClrDatagridColumn extends DatagridFilterRegistrar {
|
|
|
20216
20342
|
ngOnInit() {
|
|
20217
20343
|
this.wrappedInjector = new HostWrapper(WrappedColumn, this.vcr);
|
|
20218
20344
|
}
|
|
20345
|
+
ngAfterViewInit() {
|
|
20346
|
+
this.setFilterToggleAriaLabel();
|
|
20347
|
+
}
|
|
20219
20348
|
ngOnChanges(changes) {
|
|
20220
20349
|
if (changes.colType &&
|
|
20221
20350
|
changes.colType.currentValue &&
|
|
@@ -20255,6 +20384,14 @@ class ClrDatagridColumn extends DatagridFilterRegistrar {
|
|
|
20255
20384
|
}
|
|
20256
20385
|
});
|
|
20257
20386
|
}
|
|
20387
|
+
setFilterToggleAriaLabel() {
|
|
20388
|
+
const filterToggle = this.el.nativeElement.querySelector('.datagrid-filter-toggle');
|
|
20389
|
+
if (filterToggle) {
|
|
20390
|
+
filterToggle.ariaLabel = this.commonStrings.parse(this.commonStrings.keys.datagridFilterAriaLabel, {
|
|
20391
|
+
COLUMN: this?.titleContainer?.nativeElement.textContent.trim().toLocaleLowerCase(),
|
|
20392
|
+
});
|
|
20393
|
+
}
|
|
20394
|
+
}
|
|
20258
20395
|
listenForSortingChanges() {
|
|
20259
20396
|
return this._sort.change.subscribe(sort => {
|
|
20260
20397
|
// Need to manually mark the component to be checked
|
|
@@ -20284,10 +20421,10 @@ class ClrDatagridColumn extends DatagridFilterRegistrar {
|
|
|
20284
20421
|
}
|
|
20285
20422
|
}
|
|
20286
20423
|
}
|
|
20287
|
-
ClrDatagridColumn.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: ClrDatagridColumn, deps: [{ token: i0.ElementRef }, { token: Sort }, { token: FiltersProvider }, { token: i0.ViewContainerRef }, { token: DetailService }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
|
|
20288
|
-
ClrDatagridColumn.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.2", type: ClrDatagridColumn, selector: "clr-dg-column", inputs: { filterStringPlaceholder: ["clrFilterStringPlaceholder", "filterStringPlaceholder"], filterNumberMaxPlaceholder: ["clrFilterNumberMaxPlaceholder", "filterNumberMaxPlaceholder"], filterNumberMinPlaceholder: ["clrFilterNumberMinPlaceholder", "filterNumberMinPlaceholder"], colType: ["clrDgColType", "colType"], field: ["clrDgField", "field"], sortBy: ["clrDgSortBy", "sortBy"], sortOrder: ["clrDgSortOrder", "sortOrder"], updateFilterValue: ["clrFilterValue", "updateFilterValue"] }, outputs: { sortOrderChange: "clrDgSortOrderChange", filterValueChange: "clrFilterValueChange" }, host: { attributes: { "role": "columnheader" }, properties: { "class.datagrid-column": "true", "attr.aria-sort": "ariaSort" } }, queries: [{ propertyName: "projectedFilter", first: true, predicate: CustomFilter, descendants: true }], usesInheritance: true, usesOnChanges: true, hostDirectives: [{ directive: ClrPopoverHostDirective }], ngImport: i0, template: `
|
|
20424
|
+
ClrDatagridColumn.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: ClrDatagridColumn, deps: [{ token: i0.ElementRef }, { token: Sort }, { token: FiltersProvider }, { token: i0.ViewContainerRef }, { token: DetailService }, { token: i0.ChangeDetectorRef }, { token: ClrCommonStringsService }], target: i0.ɵɵFactoryTarget.Component });
|
|
20425
|
+
ClrDatagridColumn.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.2", type: ClrDatagridColumn, selector: "clr-dg-column", inputs: { filterStringPlaceholder: ["clrFilterStringPlaceholder", "filterStringPlaceholder"], filterNumberMaxPlaceholder: ["clrFilterNumberMaxPlaceholder", "filterNumberMaxPlaceholder"], filterNumberMinPlaceholder: ["clrFilterNumberMinPlaceholder", "filterNumberMinPlaceholder"], colType: ["clrDgColType", "colType"], field: ["clrDgField", "field"], sortBy: ["clrDgSortBy", "sortBy"], sortOrder: ["clrDgSortOrder", "sortOrder"], updateFilterValue: ["clrFilterValue", "updateFilterValue"] }, outputs: { sortOrderChange: "clrDgSortOrderChange", filterValueChange: "clrFilterValueChange" }, host: { attributes: { "role": "columnheader" }, properties: { "class.datagrid-column": "true", "attr.aria-sort": "ariaSort" } }, queries: [{ propertyName: "projectedFilter", first: true, predicate: CustomFilter, descendants: true }], viewQueries: [{ propertyName: "titleContainer", first: true, predicate: ["titleContainer"], descendants: true, read: ElementRef }], usesInheritance: true, usesOnChanges: true, hostDirectives: [{ directive: ClrPopoverHostDirective }], ngImport: i0, template: `
|
|
20289
20426
|
<div class="datagrid-column-flex">
|
|
20290
|
-
<button class="datagrid-column-title" *ngIf="sortable" (click)="sort()" type="button">
|
|
20427
|
+
<button class="datagrid-column-title" *ngIf="sortable" (click)="sort()" type="button" #titleContainer>
|
|
20291
20428
|
<ng-container *ngTemplateOutlet="columnTitle"></ng-container>
|
|
20292
20429
|
<cds-icon
|
|
20293
20430
|
*ngIf="sortDirection"
|
|
@@ -20319,7 +20456,7 @@ ClrDatagridColumn.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", vers
|
|
|
20319
20456
|
<ng-content></ng-content>
|
|
20320
20457
|
</ng-template>
|
|
20321
20458
|
|
|
20322
|
-
<span class="datagrid-column-title" *ngIf="!sortable">
|
|
20459
|
+
<span class="datagrid-column-title" *ngIf="!sortable" #titleContainer>
|
|
20323
20460
|
<ng-container *ngTemplateOutlet="columnTitle"></ng-container>
|
|
20324
20461
|
</span>
|
|
20325
20462
|
|
|
@@ -20332,7 +20469,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImpor
|
|
|
20332
20469
|
selector: 'clr-dg-column',
|
|
20333
20470
|
template: `
|
|
20334
20471
|
<div class="datagrid-column-flex">
|
|
20335
|
-
<button class="datagrid-column-title" *ngIf="sortable" (click)="sort()" type="button">
|
|
20472
|
+
<button class="datagrid-column-title" *ngIf="sortable" (click)="sort()" type="button" #titleContainer>
|
|
20336
20473
|
<ng-container *ngTemplateOutlet="columnTitle"></ng-container>
|
|
20337
20474
|
<cds-icon
|
|
20338
20475
|
*ngIf="sortDirection"
|
|
@@ -20364,7 +20501,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImpor
|
|
|
20364
20501
|
<ng-content></ng-content>
|
|
20365
20502
|
</ng-template>
|
|
20366
20503
|
|
|
20367
|
-
<span class="datagrid-column-title" *ngIf="!sortable">
|
|
20504
|
+
<span class="datagrid-column-title" *ngIf="!sortable" #titleContainer>
|
|
20368
20505
|
<ng-container *ngTemplateOutlet="columnTitle"></ng-container>
|
|
20369
20506
|
</span>
|
|
20370
20507
|
|
|
@@ -20379,7 +20516,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImpor
|
|
|
20379
20516
|
},
|
|
20380
20517
|
changeDetection: ChangeDetectionStrategy.OnPush,
|
|
20381
20518
|
}]
|
|
20382
|
-
}], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: Sort }, { type: FiltersProvider }, { type: i0.ViewContainerRef }, { type: DetailService }, { type: i0.ChangeDetectorRef }]; }, propDecorators: { filterStringPlaceholder: [{
|
|
20519
|
+
}], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: Sort }, { type: FiltersProvider }, { type: i0.ViewContainerRef }, { type: DetailService }, { type: i0.ChangeDetectorRef }, { type: ClrCommonStringsService }]; }, propDecorators: { filterStringPlaceholder: [{
|
|
20383
20520
|
type: Input,
|
|
20384
20521
|
args: ['clrFilterStringPlaceholder']
|
|
20385
20522
|
}], filterNumberMaxPlaceholder: [{
|
|
@@ -20394,6 +20531,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImpor
|
|
|
20394
20531
|
}], filterValueChange: [{
|
|
20395
20532
|
type: Output,
|
|
20396
20533
|
args: ['clrFilterValueChange']
|
|
20534
|
+
}], titleContainer: [{
|
|
20535
|
+
type: ViewChild,
|
|
20536
|
+
args: ['titleContainer', { read: ElementRef }]
|
|
20397
20537
|
}], colType: [{
|
|
20398
20538
|
type: Input,
|
|
20399
20539
|
args: ['clrDgColType']
|
|
@@ -21289,60 +21429,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImpor
|
|
|
21289
21429
|
args: ['click', ['$event']]
|
|
21290
21430
|
}] } });
|
|
21291
21431
|
|
|
21292
|
-
/*
|
|
21293
|
-
* Copyright (c) 2016-2025 Broadcom. All Rights Reserved.
|
|
21294
|
-
* The term "Broadcom" refers to Broadcom Inc. and/or its subsidiaries.
|
|
21295
|
-
* This software is released under MIT license.
|
|
21296
|
-
* The full license information can be found in LICENSE in the root directory of this project.
|
|
21297
|
-
*/
|
|
21298
|
-
class DatagridCellRenderer {
|
|
21299
|
-
constructor(el, renderer, organizer) {
|
|
21300
|
-
this.el = el;
|
|
21301
|
-
this.renderer = renderer;
|
|
21302
|
-
this.subscriptions = [];
|
|
21303
|
-
this.subscriptions.push(organizer.filterRenderSteps(DatagridRenderStep.CLEAR_WIDTHS).subscribe(() => this.clearWidth()));
|
|
21304
|
-
}
|
|
21305
|
-
ngOnDestroy() {
|
|
21306
|
-
this.subscriptions.forEach(sub => sub.unsubscribe());
|
|
21307
|
-
if (this.stateSubscription) {
|
|
21308
|
-
this.stateSubscription.unsubscribe();
|
|
21309
|
-
}
|
|
21310
|
-
}
|
|
21311
|
-
resetState(state) {
|
|
21312
|
-
this.setWidth(state);
|
|
21313
|
-
this.setHidden(state);
|
|
21314
|
-
}
|
|
21315
|
-
setWidth(state) {
|
|
21316
|
-
if (state.strictWidth) {
|
|
21317
|
-
this.renderer.addClass(this.el.nativeElement, STRICT_WIDTH_CLASS);
|
|
21318
|
-
}
|
|
21319
|
-
else {
|
|
21320
|
-
this.renderer.removeClass(this.el.nativeElement, STRICT_WIDTH_CLASS);
|
|
21321
|
-
}
|
|
21322
|
-
this.renderer.setStyle(this.el.nativeElement, 'width', state.width + 'px');
|
|
21323
|
-
}
|
|
21324
|
-
setHidden(state) {
|
|
21325
|
-
if (state.hidden) {
|
|
21326
|
-
this.renderer.addClass(this.el.nativeElement, HIDDEN_COLUMN_CLASS);
|
|
21327
|
-
}
|
|
21328
|
-
else {
|
|
21329
|
-
this.renderer.removeClass(this.el.nativeElement, HIDDEN_COLUMN_CLASS);
|
|
21330
|
-
}
|
|
21331
|
-
}
|
|
21332
|
-
clearWidth() {
|
|
21333
|
-
this.renderer.removeClass(this.el.nativeElement, STRICT_WIDTH_CLASS);
|
|
21334
|
-
this.renderer.setStyle(this.el.nativeElement, 'width', null);
|
|
21335
|
-
}
|
|
21336
|
-
}
|
|
21337
|
-
DatagridCellRenderer.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: DatagridCellRenderer, deps: [{ token: i0.ElementRef }, { token: i0.Renderer2 }, { token: DatagridRenderOrganizer }], target: i0.ɵɵFactoryTarget.Directive });
|
|
21338
|
-
DatagridCellRenderer.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "15.2.2", type: DatagridCellRenderer, selector: "clr-dg-cell", ngImport: i0 });
|
|
21339
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: DatagridCellRenderer, decorators: [{
|
|
21340
|
-
type: Directive,
|
|
21341
|
-
args: [{
|
|
21342
|
-
selector: 'clr-dg-cell',
|
|
21343
|
-
}]
|
|
21344
|
-
}], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: i0.Renderer2 }, { type: DatagridRenderOrganizer }]; } });
|
|
21345
|
-
|
|
21346
21432
|
/*
|
|
21347
21433
|
* Copyright (c) 2016-2025 Broadcom. All Rights Reserved.
|
|
21348
21434
|
* The term "Broadcom" refers to Broadcom Inc. and/or its subsidiaries.
|
|
@@ -21359,6 +21445,7 @@ class ClrDatagridRow {
|
|
|
21359
21445
|
this.detailService = detailService;
|
|
21360
21446
|
this.displayMode = displayMode;
|
|
21361
21447
|
this.vcr = vcr;
|
|
21448
|
+
this.el = el;
|
|
21362
21449
|
this.commonStrings = commonStrings;
|
|
21363
21450
|
this.items = items;
|
|
21364
21451
|
this.document = document;
|
|
@@ -21569,7 +21656,7 @@ class ClrDatagridRow {
|
|
|
21569
21656
|
selectRow(selected = !this.selected, $event) {
|
|
21570
21657
|
// The label also captures clicks that bubble up to the row event listener, causing
|
|
21571
21658
|
// this handler to run twice. This exits early to prevent toggling the checkbox twice.
|
|
21572
|
-
if (!this.selection.rowSelectionMode || $event.target.tagName === 'LABEL') {
|
|
21659
|
+
if (!this.selection.rowSelectionMode || $event.target.tagName === 'LABEL' || !this._selectable) {
|
|
21573
21660
|
return;
|
|
21574
21661
|
}
|
|
21575
21662
|
if (this.selection.selectionType === this.SELECTION_TYPE.Single) {
|
|
@@ -21608,7 +21695,7 @@ ClrDatagridRow.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version
|
|
|
21608
21695
|
DatagridIfExpandService,
|
|
21609
21696
|
{ provide: IfExpandService, useExisting: DatagridIfExpandService },
|
|
21610
21697
|
{ provide: LoadingListener, useExisting: DatagridIfExpandService },
|
|
21611
|
-
], queries: [{ propertyName: "dgCells", predicate: ClrDatagridCell }], viewQueries: [{ propertyName: "expandAnimation", first: true, predicate: ClrExpandableAnimationDirective, 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 }, { propertyName: "_fixedCellTemplate", first: true, predicate: ["fixedCellTemplate"], descendants: true }], ngImport: i0, template: "<div\n role=\"row\"\n [id]=\"id\"\n class=\"datagrid-row-master datagrid-row-flex\"\n [clrExpandableAnimation]=\"expandAnimationTrigger\"\n (mousedown)=\"clearRanges($event)\"\n (click)=\"selectRow(!selected, $event)\"\n [class.datagrid-row-clickable]=\"selection.rowSelectionMode\"\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 tabindex=\"-1\"\n type=\"checkbox\"\n [ngModel]=\"selected\"\n (ngModelChange)=\"toggle($event)\"\n [id]=\"checkboxId\"\n [disabled]=\"clrDgSelectable ? null : true\"\n [attr.aria-disabled]=\"clrDgSelectable ? null : true\"\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\">{{clrDgRowSelectionLabel || 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 [ngClass]=\"{ 'clr-form-control-disabled': !clrDgSelectable }\"\n role=\"gridcell\"\n >\n <clr-radio-wrapper>\n <input\n tabindex=\"-1\"\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 [disabled]=\"clrDgSelectable ? null : true\"\n [attr.aria-disabled]=\"clrDgSelectable ? null : true\"\n />\n <label class=\"clr-control-label clr-col-null\" [for]=\"radioId\">\n <span class=\"clr-sr-only\">{{ clrDgRowSelectionLabel || commonStrings.keys.select }}</span>\n </label>\n </clr-radio-wrapper>\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 tabindex=\"-1\"\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]=\"expand.hasExpandTemplate && !expand.expanded ? null : 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\n *ngIf=\"detailService.enabled\"\n class=\"datagrid-detail-caret datagrid-fixed-column datagrid-cell\"\n role=\"gridcell\"\n >\n <button\n tabindex=\"-1\"\n (click)=\"detailService.toggle(item, detailButton)\"\n type=\"button\"\n #detailButton\n class=\"datagrid-detail-caret-button\"\n [disabled]=\"detailDisabled\"\n *ngIf=\"!detailHidden\"\n [class.is-open]=\"detailService.isRowOpen(item)\"\n [attr.aria-label]=\"detailService.isRowOpen(item) ? clrDgDetailCloseLabel : clrDgDetailOpenLabel\"\n [attr.aria-expanded]=\"detailService.isRowOpen(item)\"\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
|
|
21698
|
+
], queries: [{ propertyName: "dgCells", predicate: ClrDatagridCell }], viewQueries: [{ propertyName: "expandAnimation", first: true, predicate: ClrExpandableAnimationDirective, 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 }, { propertyName: "_fixedCellTemplate", first: true, predicate: ["fixedCellTemplate"], descendants: true }], ngImport: i0, template: "<div\n role=\"row\"\n [id]=\"id\"\n class=\"datagrid-row-master datagrid-row-flex\"\n [clrExpandableAnimation]=\"expandAnimationTrigger\"\n (mousedown)=\"clearRanges($event)\"\n (click)=\"selectRow(!selected, $event)\"\n [class.datagrid-row-clickable]=\"selection.rowSelectionMode\"\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 tabindex=\"-1\"\n type=\"checkbox\"\n [ngModel]=\"selected\"\n (ngModelChange)=\"toggle($event)\"\n [id]=\"checkboxId\"\n [disabled]=\"clrDgSelectable ? null : true\"\n [attr.aria-disabled]=\"clrDgSelectable ? null : true\"\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\">{{clrDgRowSelectionLabel || 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 [ngClass]=\"{ 'clr-form-control-disabled': !clrDgSelectable }\"\n role=\"gridcell\"\n >\n <clr-radio-wrapper>\n <input\n tabindex=\"-1\"\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 [disabled]=\"clrDgSelectable ? null : true\"\n [attr.aria-disabled]=\"clrDgSelectable ? null : true\"\n />\n <label class=\"clr-control-label clr-col-null\" [for]=\"radioId\">\n <span class=\"clr-sr-only\">{{ clrDgRowSelectionLabel || commonStrings.keys.select }}</span>\n </label>\n </clr-radio-wrapper>\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 tabindex=\"-1\"\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]=\"expand.hasExpandTemplate && !expand.expanded ? null : 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\n *ngIf=\"detailService.enabled\"\n class=\"datagrid-detail-caret datagrid-fixed-column datagrid-cell\"\n role=\"gridcell\"\n >\n <button\n tabindex=\"-1\"\n (click)=\"detailService.toggle(item, detailButton)\"\n type=\"button\"\n #detailButton\n class=\"datagrid-detail-caret-button\"\n [disabled]=\"detailDisabled\"\n *ngIf=\"!detailHidden\"\n [class.is-open]=\"detailService.isRowOpen(item)\"\n [attr.aria-label]=\"detailService.isRowOpen(item) ? clrDgDetailCloseLabel : clrDgDetailOpenLabel\"\n [attr.aria-expanded]=\"detailService.isRowOpen(item)\"\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<!--\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-container #calculatedCells></ng-container>\n\n<ng-template #fixedCellTemplate>\n <div class=\"datagrid-fixed-column datagrid-cell\" role=\"gridcell\"></div>\n</ng-template>\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: ["id", "for"] }, { kind: "directive", type: ClrRadio, selector: "[clrRadio]" }, { kind: "component", type: ClrRadioWrapper, selector: "clr-radio-wrapper" }, { 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: "directive", type: ClrExpandableAnimationDirective, selector: "[clrExpandableAnimation]", inputs: ["clrExpandableAnimation"] }, { kind: "component", type: ClrSpinner, selector: "clr-spinner", inputs: ["clrInline", "clrInverse", "clrSmall", "clrMedium"] }, { kind: "directive", type: ClrDatagridSelectionCellDirective, selector: ".datagrid-select" }] });
|
|
21612
21699
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: ClrDatagridRow, decorators: [{
|
|
21613
21700
|
type: Component,
|
|
21614
21701
|
args: [{ selector: 'clr-dg-row', host: {
|
|
@@ -21621,7 +21708,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImpor
|
|
|
21621
21708
|
DatagridIfExpandService,
|
|
21622
21709
|
{ provide: IfExpandService, useExisting: DatagridIfExpandService },
|
|
21623
21710
|
{ provide: LoadingListener, useExisting: DatagridIfExpandService },
|
|
21624
|
-
], template: "<div\n role=\"row\"\n [id]=\"id\"\n class=\"datagrid-row-master datagrid-row-flex\"\n [clrExpandableAnimation]=\"expandAnimationTrigger\"\n (mousedown)=\"clearRanges($event)\"\n (click)=\"selectRow(!selected, $event)\"\n [class.datagrid-row-clickable]=\"selection.rowSelectionMode\"\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 tabindex=\"-1\"\n type=\"checkbox\"\n [ngModel]=\"selected\"\n (ngModelChange)=\"toggle($event)\"\n [id]=\"checkboxId\"\n [disabled]=\"clrDgSelectable ? null : true\"\n [attr.aria-disabled]=\"clrDgSelectable ? null : true\"\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\">{{clrDgRowSelectionLabel || 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 [ngClass]=\"{ 'clr-form-control-disabled': !clrDgSelectable }\"\n role=\"gridcell\"\n >\n <clr-radio-wrapper>\n <input\n tabindex=\"-1\"\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 [disabled]=\"clrDgSelectable ? null : true\"\n [attr.aria-disabled]=\"clrDgSelectable ? null : true\"\n />\n <label class=\"clr-control-label clr-col-null\" [for]=\"radioId\">\n <span class=\"clr-sr-only\">{{ clrDgRowSelectionLabel || commonStrings.keys.select }}</span>\n </label>\n </clr-radio-wrapper>\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 tabindex=\"-1\"\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]=\"expand.hasExpandTemplate && !expand.expanded ? null : 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\n *ngIf=\"detailService.enabled\"\n class=\"datagrid-detail-caret datagrid-fixed-column datagrid-cell\"\n role=\"gridcell\"\n >\n <button\n tabindex=\"-1\"\n (click)=\"detailService.toggle(item, detailButton)\"\n type=\"button\"\n #detailButton\n class=\"datagrid-detail-caret-button\"\n [disabled]=\"detailDisabled\"\n *ngIf=\"!detailHidden\"\n [class.is-open]=\"detailService.isRowOpen(item)\"\n [attr.aria-label]=\"detailService.isRowOpen(item) ? clrDgDetailCloseLabel : clrDgDetailOpenLabel\"\n [attr.aria-expanded]=\"detailService.isRowOpen(item)\"\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
|
|
21711
|
+
], template: "<div\n role=\"row\"\n [id]=\"id\"\n class=\"datagrid-row-master datagrid-row-flex\"\n [clrExpandableAnimation]=\"expandAnimationTrigger\"\n (mousedown)=\"clearRanges($event)\"\n (click)=\"selectRow(!selected, $event)\"\n [class.datagrid-row-clickable]=\"selection.rowSelectionMode\"\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 tabindex=\"-1\"\n type=\"checkbox\"\n [ngModel]=\"selected\"\n (ngModelChange)=\"toggle($event)\"\n [id]=\"checkboxId\"\n [disabled]=\"clrDgSelectable ? null : true\"\n [attr.aria-disabled]=\"clrDgSelectable ? null : true\"\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\">{{clrDgRowSelectionLabel || 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 [ngClass]=\"{ 'clr-form-control-disabled': !clrDgSelectable }\"\n role=\"gridcell\"\n >\n <clr-radio-wrapper>\n <input\n tabindex=\"-1\"\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 [disabled]=\"clrDgSelectable ? null : true\"\n [attr.aria-disabled]=\"clrDgSelectable ? null : true\"\n />\n <label class=\"clr-control-label clr-col-null\" [for]=\"radioId\">\n <span class=\"clr-sr-only\">{{ clrDgRowSelectionLabel || commonStrings.keys.select }}</span>\n </label>\n </clr-radio-wrapper>\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 tabindex=\"-1\"\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]=\"expand.hasExpandTemplate && !expand.expanded ? null : 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\n *ngIf=\"detailService.enabled\"\n class=\"datagrid-detail-caret datagrid-fixed-column datagrid-cell\"\n role=\"gridcell\"\n >\n <button\n tabindex=\"-1\"\n (click)=\"detailService.toggle(item, detailButton)\"\n type=\"button\"\n #detailButton\n class=\"datagrid-detail-caret-button\"\n [disabled]=\"detailDisabled\"\n *ngIf=\"!detailHidden\"\n [class.is-open]=\"detailService.isRowOpen(item)\"\n [attr.aria-label]=\"detailService.isRowOpen(item) ? clrDgDetailCloseLabel : clrDgDetailOpenLabel\"\n [attr.aria-expanded]=\"detailService.isRowOpen(item)\"\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<!--\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-container #calculatedCells></ng-container>\n\n<ng-template #fixedCellTemplate>\n <div class=\"datagrid-fixed-column datagrid-cell\" role=\"gridcell\"></div>\n</ng-template>\n" }]
|
|
21625
21712
|
}], 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: [{
|
|
21626
21713
|
type: Inject,
|
|
21627
21714
|
args: [DOCUMENT]
|
|
@@ -21784,9 +21871,11 @@ class ClrDatagridVirtualScrollDirective {
|
|
|
21784
21871
|
this.injector = injector;
|
|
21785
21872
|
this.renderedRangeChange = new EventEmitter();
|
|
21786
21873
|
this.persistItems = true;
|
|
21874
|
+
this.shouldUpdateAriaRowIndexes = false;
|
|
21787
21875
|
this._cdkFixedSizeVirtualScrollInputs = { ...defaultCdkFixedSizeVirtualScrollInputs };
|
|
21788
21876
|
this.subscriptions = [];
|
|
21789
21877
|
this.topIndex = 0;
|
|
21878
|
+
// @deprecated remove the mutation observer when `datagrid-compact` class is deleted
|
|
21790
21879
|
this.mutationChanges = new MutationObserver((mutations) => {
|
|
21791
21880
|
mutations.forEach((mutation) => {
|
|
21792
21881
|
// it is possible this to be called twice because the old class is removed and the new added
|
|
@@ -21804,12 +21893,20 @@ class ClrDatagridVirtualScrollDirective {
|
|
|
21804
21893
|
this.datagridElementRef = datagrid.el;
|
|
21805
21894
|
// default
|
|
21806
21895
|
this.cdkVirtualForTemplateCacheSize = 20;
|
|
21896
|
+
const rowHeightToken = window.getComputedStyle(document.body).getPropertyValue('--clr-table-row-height');
|
|
21897
|
+
const rowHeightValue = +/calc\(([0-9]+) \* calc\(\(1rem \/ 20\) \* 1\)\)/.exec(rowHeightToken)?.[1];
|
|
21898
|
+
if (rowHeightValue && this.itemSize > rowHeightValue) {
|
|
21899
|
+
this.itemSize = rowHeightValue;
|
|
21900
|
+
}
|
|
21807
21901
|
this.mutationChanges.observe(this.datagridElementRef.nativeElement, {
|
|
21808
21902
|
attributeFilter: ['class'],
|
|
21809
21903
|
attributeOldValue: true,
|
|
21810
21904
|
});
|
|
21811
21905
|
this.virtualScrollStrategy = new FixedSizeVirtualScrollStrategy(this._cdkFixedSizeVirtualScrollInputs.itemSize, this._cdkFixedSizeVirtualScrollInputs.minBufferPx, this._cdkFixedSizeVirtualScrollInputs.maxBufferPx);
|
|
21812
21906
|
}
|
|
21907
|
+
get totalContentHeight() {
|
|
21908
|
+
return this.virtualScrollViewport?._totalContentHeight || '';
|
|
21909
|
+
}
|
|
21813
21910
|
get cdkVirtualForOf() {
|
|
21814
21911
|
return this.cdkVirtualForInputs.cdkVirtualForOf;
|
|
21815
21912
|
}
|
|
@@ -21888,12 +21985,14 @@ class ClrDatagridVirtualScrollDirective {
|
|
|
21888
21985
|
if (this.items.smart) {
|
|
21889
21986
|
this.cdkVirtualFor.cdkVirtualForOf = newItems;
|
|
21890
21987
|
}
|
|
21988
|
+
this.shouldUpdateAriaRowIndexes = true;
|
|
21891
21989
|
}), this.cdkVirtualFor.dataStream.subscribe(data => {
|
|
21892
21990
|
this.updateAriaRowCount(data.length);
|
|
21893
21991
|
}), this.virtualScrollViewport.scrolledIndexChange.subscribe(index => {
|
|
21894
21992
|
this.topIndex = index;
|
|
21895
21993
|
}), this.virtualScrollViewport.renderedRangeStream.subscribe(renderedRange => {
|
|
21896
21994
|
this.renderedRangeChange.emit(renderedRange);
|
|
21995
|
+
this.shouldUpdateAriaRowIndexes = true;
|
|
21897
21996
|
}), this.datagrid.refresh.subscribe(datagridState => {
|
|
21898
21997
|
if (datagridState.filters) {
|
|
21899
21998
|
this.scrollToIndex(0);
|
|
@@ -21904,7 +22003,10 @@ class ClrDatagridVirtualScrollDirective {
|
|
|
21904
22003
|
}
|
|
21905
22004
|
ngDoCheck() {
|
|
21906
22005
|
this.cdkVirtualFor?.ngDoCheck();
|
|
21907
|
-
this.
|
|
22006
|
+
if (this.shouldUpdateAriaRowIndexes) {
|
|
22007
|
+
this.updateAriaRowIndexes();
|
|
22008
|
+
this.shouldUpdateAriaRowIndexes = false;
|
|
22009
|
+
}
|
|
21908
22010
|
}
|
|
21909
22011
|
ngOnDestroy() {
|
|
21910
22012
|
this.cdkVirtualFor?.ngOnDestroy();
|
|
@@ -21954,37 +22056,17 @@ class ClrDatagridVirtualScrollDirective {
|
|
|
21954
22056
|
const rootElements = viewRef.rootNodes;
|
|
21955
22057
|
const datagridRowElement = rootElements.find(rowElement => rowElement.tagName === 'CLR-DG-ROW');
|
|
21956
22058
|
const rowRoleElement = datagridRowElement?.querySelector('[role="row"]');
|
|
21957
|
-
|
|
21958
|
-
rowRoleElement?.
|
|
22059
|
+
const newAriaRowIndex = (viewRef.context.index + 1).toString();
|
|
22060
|
+
if (rowRoleElement?.getAttribute('aria-rowindex') !== newAriaRowIndex) {
|
|
22061
|
+
// aria-rowindex should start with one, not zero, so we have to add one to the zero-based index
|
|
22062
|
+
rowRoleElement?.setAttribute('aria-rowindex', newAriaRowIndex);
|
|
22063
|
+
}
|
|
21959
22064
|
}
|
|
21960
22065
|
}
|
|
21961
22066
|
createVirtualScrollViewportForDatagrid(changeDetectorRef, ngZone, renderer2, directionality, scrollDispatcher, viewportRuler, datagridElementRef, virtualScrollStrategy) {
|
|
21962
|
-
const
|
|
21963
|
-
const datagridTableElement = datagridElementRef.nativeElement.querySelector('.datagrid-table');
|
|
22067
|
+
const datagridContentElement = datagridElementRef.nativeElement.querySelector('.datagrid-content');
|
|
21964
22068
|
const datagridRowsElement = datagridElementRef.nativeElement.querySelector('.datagrid-rows');
|
|
21965
|
-
const
|
|
21966
|
-
let topOffset = 0;
|
|
21967
|
-
let totalContentSize = 0;
|
|
21968
|
-
function updateDatagridElementStyles() {
|
|
21969
|
-
datagridRowsElement.style.transform = `translateY(${topOffset}px)`;
|
|
21970
|
-
datagridRowsElement.style.height = `${totalContentSize - topOffset}px`;
|
|
21971
|
-
}
|
|
21972
|
-
const virtualScrollViewport = createCdkVirtualScrollViewport(datagridDivElementRef, changeDetectorRef, ngZone, renderer2, virtualScrollStrategy, directionality, scrollDispatcher, viewportRuler, null);
|
|
21973
|
-
virtualScrollViewport._contentWrapper = {
|
|
21974
|
-
nativeElement: {
|
|
21975
|
-
style: {
|
|
21976
|
-
set transform(value) {
|
|
21977
|
-
topOffset = value === undefined ? 0 : +/translateY\(([0-9]+)px\)/.exec(value)?.[1];
|
|
21978
|
-
updateDatagridElementStyles();
|
|
21979
|
-
},
|
|
21980
|
-
},
|
|
21981
|
-
},
|
|
21982
|
-
};
|
|
21983
|
-
virtualScrollViewport.setTotalContentSize = (value) => {
|
|
21984
|
-
totalContentSize = value;
|
|
21985
|
-
datagridTableElement.style.height = `${totalContentSize}px`;
|
|
21986
|
-
updateDatagridElementStyles();
|
|
21987
|
-
};
|
|
22069
|
+
const virtualScrollViewport = createCdkVirtualScrollViewport(new ElementRef(datagridContentElement), new ElementRef(datagridRowsElement), changeDetectorRef, ngZone, renderer2, virtualScrollStrategy, directionality, scrollDispatcher, viewportRuler, null);
|
|
21988
22070
|
return virtualScrollViewport;
|
|
21989
22071
|
}
|
|
21990
22072
|
}
|
|
@@ -22029,9 +22111,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImpor
|
|
|
22029
22111
|
type: Input,
|
|
22030
22112
|
args: ['clrVirtualDataRange']
|
|
22031
22113
|
}] } });
|
|
22032
|
-
function createCdkVirtualScrollViewport(datagridDivElementRef, changeDetectorRef, ngZone, renderer2, virtualScrollStrategy, directionality, scrollDispatcher, viewportRuler, scrollable) {
|
|
22114
|
+
function createCdkVirtualScrollViewport(datagridDivElementRef, contentWrapper, changeDetectorRef, ngZone, renderer2, virtualScrollStrategy, directionality, scrollDispatcher, viewportRuler, scrollable) {
|
|
22115
|
+
let viewPort;
|
|
22033
22116
|
if (+VERSION.major < 19) {
|
|
22034
|
-
|
|
22117
|
+
viewPort = new CdkVirtualScrollViewport(datagridDivElementRef, changeDetectorRef, ngZone, virtualScrollStrategy, directionality, scrollDispatcher, viewportRuler, scrollable);
|
|
22035
22118
|
}
|
|
22036
22119
|
else {
|
|
22037
22120
|
const virtualScrollViewportInjector = Injector.create({
|
|
@@ -22049,8 +22132,10 @@ function createCdkVirtualScrollViewport(datagridDivElementRef, changeDetectorRef
|
|
|
22049
22132
|
{ provide: CdkVirtualScrollViewport, useClass: CdkVirtualScrollViewport },
|
|
22050
22133
|
],
|
|
22051
22134
|
});
|
|
22052
|
-
|
|
22135
|
+
viewPort = virtualScrollViewportInjector.get(CdkVirtualScrollViewport);
|
|
22053
22136
|
}
|
|
22137
|
+
viewPort._contentWrapper = contentWrapper;
|
|
22138
|
+
return viewPort;
|
|
22054
22139
|
}
|
|
22055
22140
|
function createCdkVirtualForOfDirective(viewContainerRef, templateRef, iterableDiffers, viewRepeater, virtualScrollViewport, ngZone) {
|
|
22056
22141
|
if (+VERSION.major < 19) {
|
|
@@ -22143,6 +22228,60 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImpor
|
|
|
22143
22228
|
type: Injectable
|
|
22144
22229
|
}], ctorParameters: function () { return [{ type: FiltersProvider }, { type: Sort }, { type: Page }, { type: StateDebouncer }]; } });
|
|
22145
22230
|
|
|
22231
|
+
/*
|
|
22232
|
+
* Copyright (c) 2016-2025 Broadcom. All Rights Reserved.
|
|
22233
|
+
* The term "Broadcom" refers to Broadcom Inc. and/or its subsidiaries.
|
|
22234
|
+
* This software is released under MIT license.
|
|
22235
|
+
* The full license information can be found in LICENSE in the root directory of this project.
|
|
22236
|
+
*/
|
|
22237
|
+
class DatagridCellRenderer {
|
|
22238
|
+
constructor(el, renderer, organizer) {
|
|
22239
|
+
this.el = el;
|
|
22240
|
+
this.renderer = renderer;
|
|
22241
|
+
this.subscriptions = [];
|
|
22242
|
+
this.subscriptions.push(organizer.filterRenderSteps(DatagridRenderStep.CLEAR_WIDTHS).subscribe(() => this.clearWidth()));
|
|
22243
|
+
}
|
|
22244
|
+
ngOnDestroy() {
|
|
22245
|
+
this.subscriptions.forEach(sub => sub.unsubscribe());
|
|
22246
|
+
if (this.stateSubscription) {
|
|
22247
|
+
this.stateSubscription.unsubscribe();
|
|
22248
|
+
}
|
|
22249
|
+
}
|
|
22250
|
+
resetState(state) {
|
|
22251
|
+
this.setWidth(state);
|
|
22252
|
+
this.setHidden(state);
|
|
22253
|
+
}
|
|
22254
|
+
setWidth(state) {
|
|
22255
|
+
if (state.strictWidth) {
|
|
22256
|
+
this.renderer.addClass(this.el.nativeElement, STRICT_WIDTH_CLASS);
|
|
22257
|
+
}
|
|
22258
|
+
else {
|
|
22259
|
+
this.renderer.removeClass(this.el.nativeElement, STRICT_WIDTH_CLASS);
|
|
22260
|
+
}
|
|
22261
|
+
this.renderer.setStyle(this.el.nativeElement, 'width', state.width + 'px');
|
|
22262
|
+
}
|
|
22263
|
+
setHidden(state) {
|
|
22264
|
+
if (state.hidden) {
|
|
22265
|
+
this.renderer.addClass(this.el.nativeElement, HIDDEN_COLUMN_CLASS);
|
|
22266
|
+
}
|
|
22267
|
+
else {
|
|
22268
|
+
this.renderer.removeClass(this.el.nativeElement, HIDDEN_COLUMN_CLASS);
|
|
22269
|
+
}
|
|
22270
|
+
}
|
|
22271
|
+
clearWidth() {
|
|
22272
|
+
this.renderer.removeClass(this.el.nativeElement, STRICT_WIDTH_CLASS);
|
|
22273
|
+
this.renderer.setStyle(this.el.nativeElement, 'width', null);
|
|
22274
|
+
}
|
|
22275
|
+
}
|
|
22276
|
+
DatagridCellRenderer.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: DatagridCellRenderer, deps: [{ token: i0.ElementRef }, { token: i0.Renderer2 }, { token: DatagridRenderOrganizer }], target: i0.ɵɵFactoryTarget.Directive });
|
|
22277
|
+
DatagridCellRenderer.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "15.2.2", type: DatagridCellRenderer, selector: "clr-dg-cell", ngImport: i0 });
|
|
22278
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: DatagridCellRenderer, decorators: [{
|
|
22279
|
+
type: Directive,
|
|
22280
|
+
args: [{
|
|
22281
|
+
selector: 'clr-dg-cell',
|
|
22282
|
+
}]
|
|
22283
|
+
}], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: i0.Renderer2 }, { type: DatagridRenderOrganizer }]; } });
|
|
22284
|
+
|
|
22146
22285
|
/*
|
|
22147
22286
|
* Copyright (c) 2016-2025 Broadcom. All Rights Reserved.
|
|
22148
22287
|
* The term "Broadcom" refers to Broadcom Inc. and/or its subsidiaries.
|
|
@@ -22152,6 +22291,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImpor
|
|
|
22152
22291
|
class DatagridRowRenderer {
|
|
22153
22292
|
constructor(columnsService) {
|
|
22154
22293
|
this.columnsService = columnsService;
|
|
22294
|
+
this.expandableRows = [];
|
|
22155
22295
|
this.subscriptions = [];
|
|
22156
22296
|
}
|
|
22157
22297
|
ngAfterContentInit() {
|
|
@@ -22189,18 +22329,15 @@ class DatagridRowRenderer {
|
|
|
22189
22329
|
}
|
|
22190
22330
|
}
|
|
22191
22331
|
DatagridRowRenderer.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: DatagridRowRenderer, deps: [{ token: ColumnsService }], target: i0.ɵɵFactoryTarget.Directive });
|
|
22192
|
-
DatagridRowRenderer.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "15.2.2", type: DatagridRowRenderer, selector: "clr-dg-row
|
|
22332
|
+
DatagridRowRenderer.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "15.2.2", type: DatagridRowRenderer, selector: "clr-dg-row", queries: [{ propertyName: "cells", predicate: DatagridCellRenderer }], ngImport: i0 });
|
|
22193
22333
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: DatagridRowRenderer, decorators: [{
|
|
22194
22334
|
type: Directive,
|
|
22195
22335
|
args: [{
|
|
22196
|
-
selector: 'clr-dg-row
|
|
22336
|
+
selector: 'clr-dg-row',
|
|
22197
22337
|
}]
|
|
22198
22338
|
}], ctorParameters: function () { return [{ type: ColumnsService }]; }, propDecorators: { cells: [{
|
|
22199
22339
|
type: ContentChildren,
|
|
22200
22340
|
args: [DatagridCellRenderer]
|
|
22201
|
-
}], expandableRow: [{
|
|
22202
|
-
type: ContentChild,
|
|
22203
|
-
args: [forwardRef(() => DatagridRowRenderer)]
|
|
22204
22341
|
}] } });
|
|
22205
22342
|
|
|
22206
22343
|
/*
|
|
@@ -22248,6 +22385,7 @@ class ClrDatagrid {
|
|
|
22248
22385
|
* Subscriptions to all the services and queries changes
|
|
22249
22386
|
*/
|
|
22250
22387
|
this._subscriptions = [];
|
|
22388
|
+
this._virtualScrollSubscriptions = [];
|
|
22251
22389
|
const datagridId = uniqueIdFactory();
|
|
22252
22390
|
this.selectAllId = 'clr-dg-select-all-' + datagridId;
|
|
22253
22391
|
detailService.id = datagridId;
|
|
@@ -22321,6 +22459,9 @@ class ClrDatagrid {
|
|
|
22321
22459
|
this.selection.toggleAll();
|
|
22322
22460
|
}
|
|
22323
22461
|
}
|
|
22462
|
+
get virtualScroll() {
|
|
22463
|
+
return this._virtualScroll.get(0);
|
|
22464
|
+
}
|
|
22324
22465
|
ngAfterContentInit() {
|
|
22325
22466
|
if (!this.items.smart) {
|
|
22326
22467
|
this.items.all = this.rows.map((row) => row.item);
|
|
@@ -22334,6 +22475,8 @@ class ClrDatagrid {
|
|
|
22334
22475
|
if (!this.items.smart) {
|
|
22335
22476
|
this.items.all = all;
|
|
22336
22477
|
}
|
|
22478
|
+
}), this._virtualScroll.changes.subscribe(() => {
|
|
22479
|
+
this.toggleVirtualScrollSubscriptions();
|
|
22337
22480
|
}), this.rows.changes.subscribe(() => {
|
|
22338
22481
|
// Remove any projected rows from the displayedRows container
|
|
22339
22482
|
// Necessary with Ivy off. See https://github.com/vmware/clarity/issues/4692
|
|
@@ -22347,13 +22490,18 @@ class ClrDatagrid {
|
|
|
22347
22490
|
});
|
|
22348
22491
|
this.updateDetailState();
|
|
22349
22492
|
// retain active cell when navigating with Up/Down Arrows, PageUp and PageDown buttons in virtual scroller
|
|
22350
|
-
if (this.virtualScroll) {
|
|
22351
|
-
|
|
22352
|
-
|
|
22353
|
-
|
|
22354
|
-
setTimeout(() => this.keyNavigation.setActiveCell(active));
|
|
22493
|
+
if (this.virtualScroll && this.activeCellCoords) {
|
|
22494
|
+
this.zone.runOutsideAngular(() => {
|
|
22495
|
+
const row = Array.from(this.rows).find(row => {
|
|
22496
|
+
return row.el.nativeElement.children[0].ariaRowIndex === this.activeCellCoords.ariaRowIndex;
|
|
22355
22497
|
});
|
|
22356
|
-
|
|
22498
|
+
if (!row) {
|
|
22499
|
+
return;
|
|
22500
|
+
}
|
|
22501
|
+
const activeCell = row.el.nativeElement.querySelectorAll(this.keyNavigation.config.keyGridCells)[this.activeCellCoords.x];
|
|
22502
|
+
this.keyNavigation.setActiveCell(activeCell);
|
|
22503
|
+
this.keyNavigation.focusElement(activeCell, { preventScroll: true });
|
|
22504
|
+
});
|
|
22357
22505
|
}
|
|
22358
22506
|
}));
|
|
22359
22507
|
}
|
|
@@ -22444,6 +22592,7 @@ class ClrDatagrid {
|
|
|
22444
22592
|
}
|
|
22445
22593
|
ngOnDestroy() {
|
|
22446
22594
|
this._subscriptions.forEach((sub) => sub.unsubscribe());
|
|
22595
|
+
this._virtualScrollSubscriptions.forEach((sub) => sub.unsubscribe());
|
|
22447
22596
|
}
|
|
22448
22597
|
toggleAllSelected($event) {
|
|
22449
22598
|
$event.preventDefault();
|
|
@@ -22481,9 +22630,42 @@ class ClrDatagrid {
|
|
|
22481
22630
|
dataChanged() {
|
|
22482
22631
|
this.items.refresh();
|
|
22483
22632
|
}
|
|
22633
|
+
toggleVirtualScrollSubscriptions() {
|
|
22634
|
+
const hasVirtualScroll = !!this.virtualScroll;
|
|
22635
|
+
// the virtual scroll will handle the scrolling
|
|
22636
|
+
this.keyNavigation.preventScrollOnFocus = hasVirtualScroll;
|
|
22637
|
+
if (hasVirtualScroll && this._virtualScrollSubscriptions.length === 0) {
|
|
22638
|
+
this._virtualScrollSubscriptions.push(fromEvent(this.contentWrapper.nativeElement, 'scroll').subscribe(() => {
|
|
22639
|
+
if (this.datagridHeader.nativeElement.scrollLeft !== this.contentWrapper.nativeElement.scrollLeft) {
|
|
22640
|
+
this.datagridHeader.nativeElement.scrollLeft = this.contentWrapper.nativeElement.scrollLeft;
|
|
22641
|
+
}
|
|
22642
|
+
}), fromEvent(this.datagridHeader.nativeElement, 'scroll').subscribe(() => {
|
|
22643
|
+
if (this.datagridHeader.nativeElement.scrollLeft !== this.contentWrapper.nativeElement.scrollLeft) {
|
|
22644
|
+
this.contentWrapper.nativeElement.scrollLeft = this.datagridHeader.nativeElement.scrollLeft;
|
|
22645
|
+
}
|
|
22646
|
+
}), this.keyNavigation.nextCellCoordsEmitter.subscribe(cellCoords => {
|
|
22647
|
+
if (!cellCoords?.ariaRowIndex) {
|
|
22648
|
+
this.activeCellCoords = null;
|
|
22649
|
+
return;
|
|
22650
|
+
}
|
|
22651
|
+
if (cellCoords.ariaRowIndex === this.activeCellCoords?.ariaRowIndex) {
|
|
22652
|
+
this.activeCellCoords = cellCoords;
|
|
22653
|
+
return;
|
|
22654
|
+
}
|
|
22655
|
+
this.activeCellCoords = cellCoords;
|
|
22656
|
+
// aria-rowindex is always + 1. Check virtual scroller updateAriaRowIndexes method.
|
|
22657
|
+
const rowIndex = Number(cellCoords.ariaRowIndex) - 1;
|
|
22658
|
+
this.virtualScroll.scrollToIndex(rowIndex);
|
|
22659
|
+
}));
|
|
22660
|
+
}
|
|
22661
|
+
else if (!hasVirtualScroll) {
|
|
22662
|
+
this._virtualScrollSubscriptions.forEach((sub) => sub.unsubscribe());
|
|
22663
|
+
this._virtualScrollSubscriptions = [];
|
|
22664
|
+
}
|
|
22665
|
+
}
|
|
22484
22666
|
}
|
|
22485
22667
|
ClrDatagrid.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: ClrDatagrid, deps: [{ token: DatagridRenderOrganizer }, { token: Items }, { token: ExpandableRowsCount }, { token: Selection }, { token: RowActionService }, { token: StateProvider }, { token: DisplayModeService }, { token: i0.Renderer2 }, { token: DetailService }, { token: DOCUMENT }, { token: i0.ElementRef }, { token: Page }, { token: ClrCommonStringsService }, { token: KeyNavigationGridController }, { token: i0.NgZone }], target: i0.ɵɵFactoryTarget.Component });
|
|
22486
|
-
ClrDatagrid.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.2", type: ClrDatagrid, selector: "clr-datagrid", inputs: { loadingMoreItems: ["clrLoadingMoreItems", "loadingMoreItems"], clrDgSingleSelectionAriaLabel: "clrDgSingleSelectionAriaLabel", clrDgSingleActionableAriaLabel: "clrDgSingleActionableAriaLabel", clrDetailExpandableAriaLabel: "clrDetailExpandableAriaLabel", clrDgDisablePageFocus: "clrDgDisablePageFocus", customSelectAllEnabled: ["clrDgCustomSelectAllEnabled", "customSelectAllEnabled"], loading: ["clrDgLoading", "loading"], selected: ["clrDgSelected", "selected"], singleSelected: ["clrDgSingleSelected", "singleSelected"], clrDgPreserveSelection: "clrDgPreserveSelection", rowSelectionMode: ["clrDgRowSelection", "rowSelectionMode"], trackBy: ["clrDgItemsTrackBy", "trackBy"] }, outputs: { selectedChanged: "clrDgSelectedChange", singleSelectedChanged: "clrDgSingleSelectedChange", refresh: "clrDgRefresh", customSelectAll: "clrDgCustomSelectAll" }, host: { properties: { "class.datagrid-host": "true", "class.datagrid-detail-open": "detailService.isOpen" } }, providers: [
|
|
22668
|
+
ClrDatagrid.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.2", type: ClrDatagrid, selector: "clr-datagrid", inputs: { loadingMoreItems: ["clrLoadingMoreItems", "loadingMoreItems"], clrDgSingleSelectionAriaLabel: "clrDgSingleSelectionAriaLabel", clrDgSingleActionableAriaLabel: "clrDgSingleActionableAriaLabel", clrDetailExpandableAriaLabel: "clrDetailExpandableAriaLabel", clrDgDisablePageFocus: "clrDgDisablePageFocus", customSelectAllEnabled: ["clrDgCustomSelectAllEnabled", "customSelectAllEnabled"], loading: ["clrDgLoading", "loading"], selected: ["clrDgSelected", "selected"], singleSelected: ["clrDgSingleSelected", "singleSelected"], clrDgPreserveSelection: "clrDgPreserveSelection", rowSelectionMode: ["clrDgRowSelection", "rowSelectionMode"], trackBy: ["clrDgItemsTrackBy", "trackBy"] }, outputs: { selectedChanged: "clrDgSelectedChange", singleSelectedChanged: "clrDgSingleSelectedChange", refresh: "clrDgRefresh", customSelectAll: "clrDgCustomSelectAll" }, host: { properties: { "class.datagrid-host": "true", "class.datagrid-detail-open": "detailService.isOpen", "class.datagrid-virtual-scroll": "!!virtualScroll" } }, providers: [
|
|
22487
22669
|
Selection,
|
|
22488
22670
|
Sort,
|
|
22489
22671
|
FiltersProvider,
|
|
@@ -22499,7 +22681,7 @@ ClrDatagrid.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "
|
|
|
22499
22681
|
ColumnsService,
|
|
22500
22682
|
DisplayModeService,
|
|
22501
22683
|
KeyNavigationGridController,
|
|
22502
|
-
], queries: [{ propertyName: "virtualScroll", first: true, predicate: ClrDatagridVirtualScrollDirective, descendants: true }, { propertyName: "iterator", first: true, predicate: ClrDatagridItems, descendants: true }, { propertyName: "placeholder", first: true, predicate: ClrDatagridPlaceholder, descendants: true }, { propertyName: "columns", predicate: ClrDatagridColumn }, { propertyName: "rows", predicate: ClrDatagridRow }], viewQueries: [{ propertyName: "datagrid", first: true, predicate: ["datagrid"], descendants: true, read: ElementRef }, { propertyName: "datagridTable", first: true, predicate: ["datagridTable"], descendants: true, read: ElementRef }, { propertyName: "scrollableColumns", first: true, predicate: ["scrollableColumns"], descendants: true, read: ViewContainerRef }, { propertyName: "_projectedDisplayColumns", first: true, predicate: ["projectedDisplayColumns"], descendants: true, read: ViewContainerRef }, { propertyName: "_projectedCalculationColumns", first: true, predicate: ["projectedCalculationColumns"], descendants: true, read: ViewContainerRef }, { propertyName: "_displayedRows", first: true, predicate: ["displayedRows"], descendants: true, read: ViewContainerRef }, { propertyName: "_calculationRows", first: true, predicate: ["calculationRows"], descendants: true, read: ViewContainerRef }, { propertyName: "_fixedColumnTemplate", first: true, predicate: ["fixedColumnTemplate"], descendants: true }, { propertyName: "selectAllCheckbox", first: true, predicate: ["selectAllCheckbox"], descendants: true }, { propertyName: "stickyHeaders", predicate: ["stickyHeader"], descendants: true }], ngImport: i0, template: "<!--\n ~ Copyright (c) 2016-2025 Broadcom. All Rights Reserved.\n ~ The term \"Broadcom\" refers to Broadcom Inc. and/or its subsidiaries.\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<ng-content select=\"clr-dg-action-bar\"></ng-content>\n<div class=\"datagrid-outer-wrapper\">\n <div class=\"datagrid-inner-wrapper\">\n <div class=\"datagrid\" #datagrid [attr.aria-hidden]=\"detailService.isOpen ? true : null\">\n <div class=\"datagrid-table-wrapper\">\n <div role=\"grid\" class=\"datagrid-table\" tabindex=\"-1\" #datagridTable>\n <div role=\"rowgroup\" class=\"datagrid-header\">\n <div role=\"row\" class=\"datagrid-row\">\n <div class=\"datagrid-row-master datagrid-row-flex\">\n <div class=\"datagrid-row-sticky\">\n <!--header for datagrid where you can select multiple rows -->\n <div\n #stickyHeader\n role=\"columnheader\"\n class=\"datagrid-column datagrid-select datagrid-fixed-column\"\n *ngIf=\"selection.selectionType === SELECTION_TYPE.Multi\"\n (keydown.space)=\"toggleAllSelected($event)\"\n >\n <div *ngIf=\"!virtualScroll || customSelectAllEnabled\" class=\"clr-checkbox-wrapper\">\n <!-- We need to move focus and space-key handling to the parent because of keyboard arrow key navigation,\n which is not able to transfer focus directly on the input when focused with the tab key -->\n <input\n #selectAllCheckbox\n type=\"checkbox\"\n [id]=\"selectAllId\"\n [(ngModel)]=\"allSelected\"\n [attr.aria-label]=\"commonStrings.keys.selectAll\"\n tabindex=\"-1\"\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]=\"selectAllId\" class=\"clr-control-label clr-col-null\">\n <span class=\"clr-sr-only\">{{commonStrings.keys.selectAll}}</span>\n </label>\n </div>\n\n <div class=\"datagrid-column-separator\"></div>\n </div>\n <!-- header for datagrid where you can select one row only -->\n <div\n #stickyHeader\n role=\"columnheader\"\n class=\"datagrid-column datagrid-select datagrid-fixed-column\"\n *ngIf=\"selection.selectionType === SELECTION_TYPE.Single\"\n >\n <div class=\"clr-sr-only\">{{clrDgSingleSelectionAriaLabel}}</div>\n <div class=\"datagrid-column-separator\"></div>\n </div>\n <!-- header for single row action; only displayType if we have at least one actionable row in datagrid -->\n <div\n #stickyHeader\n role=\"columnheader\"\n class=\"datagrid-column datagrid-row-actions datagrid-fixed-column\"\n *ngIf=\"rowActionService.hasActionableRow\"\n >\n <div class=\"clr-sr-only\">{{clrDgSingleActionableAriaLabel}}</div>\n <div class=\"datagrid-column-separator\"></div>\n </div>\n <!-- header for carets; only displayType if we have at least one expandable row in datagrid -->\n <div\n #stickyHeader\n role=\"columnheader\"\n class=\"datagrid-column datagrid-expandable-caret datagrid-fixed-column\"\n *ngIf=\"expandableRows.hasExpandableRow || detailService.enabled\"\n >\n <div class=\"clr-sr-only\">{{clrDetailExpandableAriaLabel}}</div>\n <div class=\"datagrid-column-separator\"></div>\n </div>\n </div>\n <div class=\"datagrid-row-scrollable\">\n <ng-container #projectedDisplayColumns></ng-container>\n </div>\n </div>\n </div>\n </div>\n\n <div role=\"presentation\" class=\"datagrid-rows\">\n <clr-dg-row class=\"datagrid-row-loading\" *ngIf=\"loadingMoreItems\">\n <clr-dg-cell>\n <clr-spinner clrMedium></clr-spinner>\n <span>{{ commonStrings.keys.loading }}</span>\n </clr-dg-cell>\n </clr-dg-row>\n\n <ng-container #displayedRows></ng-container>\n\n <clr-dg-row class=\"datagrid-row-loading\" *ngIf=\"loadingMoreItems\">\n <clr-dg-cell>\n <clr-spinner clrMedium></clr-spinner>\n <span>{{ commonStrings.keys.loading }}</span>\n </clr-dg-cell>\n </clr-dg-row>\n\n <!-- Custom placeholder overrides the default empty one -->\n <ng-content select=\"clr-dg-placeholder\"></ng-content>\n <clr-dg-placeholder *ngIf=\"!placeholder\"></clr-dg-placeholder>\n </div>\n </div>\n </div>\n </div>\n <ng-content select=\"clr-dg-footer\"></ng-content>\n <div class=\"datagrid-spinner\" *ngIf=\"loading\">\n <clr-spinner clrMedium>Loading</clr-spinner>\n </div>\n </div>\n <ng-content select=\"[clrIfDetail],clr-dg-detail\"></ng-content>\n</div>\n\n<div class=\"datagrid-calculation-table\">\n <div class=\"datagrid-calculation-header\">\n <ng-container #projectedCalculationColumns></ng-container>\n </div>\n <ng-container #calculationRows></ng-container>\n</div>\n\n<ng-template #fixedColumnTemplate>\n <div class=\"datagrid-column datagrid-fixed-column\"></div>\n</ng-template>\n", dependencies: [{ kind: "directive", type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: ClrLabel, selector: "label", inputs: ["id", "for"] }, { 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: "component", type: ClrSpinner, selector: "clr-spinner", inputs: ["clrInline", "clrInverse", "clrSmall", "clrMedium"] }, { kind: "component", type: ClrDatagridCell, selector: "clr-dg-cell" }, { kind: "component", type: ClrDatagridPlaceholder, selector: "clr-dg-placeholder" }, { kind: "component", type: ClrDatagridRow, selector: "clr-dg-row", inputs: ["clrDgDetailDisabled", "clrDgDetailHidden", "clrDgSkeletonLoading", "clrDgItem", "clrDgSelectable", "clrDgSelected", "clrDgExpanded", "clrDgDetailOpenLabel", "clrDgDetailCloseLabel", "clrDgRowSelectionLabel"], outputs: ["clrDgSelectedChange", "clrDgExpandedChange"] }, { kind: "directive", type: ClrDatagridSelectionCellDirective, selector: ".datagrid-select" }, { kind: "directive", type: DatagridCellRenderer, selector: "clr-dg-cell" }, { kind: "directive", type: DatagridRowRenderer, selector: "clr-dg-row, clr-dg-row-detail" }, { kind: "directive", type: ActionableOompaLoompa, selector: "clr-datagrid, clr-dg-row" }, { kind: "directive", type: ExpandableOompaLoompa, selector: "clr-datagrid, clr-dg-row" }] });
|
|
22684
|
+
], queries: [{ propertyName: "iterator", first: true, predicate: ClrDatagridItems, descendants: true }, { propertyName: "placeholder", first: true, predicate: ClrDatagridPlaceholder, descendants: true }, { propertyName: "_virtualScroll", predicate: ClrDatagridVirtualScrollDirective }, { propertyName: "columns", predicate: ClrDatagridColumn }, { propertyName: "rows", predicate: ClrDatagridRow, emitDistinctChangesOnly: false }], viewQueries: [{ propertyName: "datagrid", first: true, predicate: ["datagrid"], descendants: true, read: ElementRef }, { propertyName: "datagridTable", first: true, predicate: ["datagridTable"], descendants: true, read: ElementRef }, { propertyName: "datagridHeader", first: true, predicate: ["datagridHeader"], descendants: true, read: ElementRef }, { propertyName: "contentWrapper", first: true, predicate: ["contentWrapper"], descendants: true, read: ElementRef }, { propertyName: "scrollableColumns", first: true, predicate: ["scrollableColumns"], descendants: true, read: ViewContainerRef }, { propertyName: "_projectedDisplayColumns", first: true, predicate: ["projectedDisplayColumns"], descendants: true, read: ViewContainerRef }, { propertyName: "_projectedCalculationColumns", first: true, predicate: ["projectedCalculationColumns"], descendants: true, read: ViewContainerRef }, { propertyName: "_displayedRows", first: true, predicate: ["displayedRows"], descendants: true, read: ViewContainerRef }, { propertyName: "_calculationRows", first: true, predicate: ["calculationRows"], descendants: true, read: ViewContainerRef }, { propertyName: "_fixedColumnTemplate", first: true, predicate: ["fixedColumnTemplate"], descendants: true }, { propertyName: "selectAllCheckbox", first: true, predicate: ["selectAllCheckbox"], descendants: true }, { propertyName: "stickyHeaders", predicate: ["stickyHeader"], descendants: true }], ngImport: i0, template: "<!--\n ~ Copyright (c) 2016-2025 Broadcom. All Rights Reserved.\n ~ The term \"Broadcom\" refers to Broadcom Inc. and/or its subsidiaries.\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<ng-content select=\"clr-dg-action-bar\"></ng-content>\n<div class=\"datagrid-outer-wrapper\">\n <div class=\"datagrid-inner-wrapper\">\n <div class=\"datagrid\" #datagrid [attr.aria-hidden]=\"detailService.isOpen ? true : null\">\n <div class=\"datagrid-table-wrapper\">\n <div role=\"grid\" class=\"datagrid-table\" tabindex=\"-1\" #datagridTable>\n <div role=\"rowgroup\" class=\"datagrid-header\" #datagridHeader>\n <div role=\"row\" class=\"datagrid-row\">\n <div class=\"datagrid-row-master datagrid-row-flex\">\n <div class=\"datagrid-row-sticky\">\n <!--header for datagrid where you can select multiple rows -->\n <div\n #stickyHeader\n role=\"columnheader\"\n class=\"datagrid-column datagrid-select datagrid-fixed-column\"\n *ngIf=\"selection.selectionType === SELECTION_TYPE.Multi\"\n (keydown.space)=\"toggleAllSelected($event)\"\n >\n <div *ngIf=\"!virtualScroll || customSelectAllEnabled\" class=\"clr-checkbox-wrapper\">\n <!-- We need to move focus and space-key handling to the parent because of keyboard arrow key navigation,\n which is not able to transfer focus directly on the input when focused with the tab key -->\n <input\n #selectAllCheckbox\n type=\"checkbox\"\n [id]=\"selectAllId\"\n [(ngModel)]=\"allSelected\"\n [attr.aria-label]=\"commonStrings.keys.selectAll\"\n tabindex=\"-1\"\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]=\"selectAllId\" class=\"clr-control-label clr-col-null\">\n <span class=\"clr-sr-only\">{{commonStrings.keys.selectAll}}</span>\n </label>\n </div>\n\n <div class=\"datagrid-column-separator\"></div>\n </div>\n <!-- header for datagrid where you can select one row only -->\n <div\n #stickyHeader\n role=\"columnheader\"\n class=\"datagrid-column datagrid-select datagrid-fixed-column\"\n *ngIf=\"selection.selectionType === SELECTION_TYPE.Single\"\n >\n <div class=\"clr-sr-only\">{{clrDgSingleSelectionAriaLabel}}</div>\n <div class=\"datagrid-column-separator\"></div>\n </div>\n <!-- header for single row action; only displayType if we have at least one actionable row in datagrid -->\n <div\n #stickyHeader\n role=\"columnheader\"\n class=\"datagrid-column datagrid-row-actions datagrid-fixed-column\"\n *ngIf=\"rowActionService.hasActionableRow\"\n >\n <div class=\"clr-sr-only\">{{clrDgSingleActionableAriaLabel}}</div>\n <div class=\"datagrid-column-separator\"></div>\n </div>\n <!-- header for carets; only displayType if we have at least one expandable row in datagrid -->\n <div\n #stickyHeader\n role=\"columnheader\"\n class=\"datagrid-column datagrid-expandable-caret datagrid-fixed-column\"\n *ngIf=\"expandableRows.hasExpandableRow || detailService.enabled\"\n >\n <div class=\"clr-sr-only\">{{clrDetailExpandableAriaLabel}}</div>\n <div class=\"datagrid-column-separator\"></div>\n </div>\n </div>\n <div class=\"datagrid-row-scrollable\">\n <ng-container #projectedDisplayColumns></ng-container>\n </div>\n <div *ngIf=\"virtualScroll\" class=\"datagrid-row-sticky datagrid-row-sticky-scroll\">\n <div class=\"datagrid-column\"></div>\n </div>\n </div>\n </div>\n </div>\n\n <div class=\"datagrid-content\" [class.datagrid-content-virtual]=\"virtualScroll\" #contentWrapper>\n <div\n *ngIf=\"virtualScroll\"\n class=\"datagrid-content-virtual-spacer\"\n [style.height]=\"virtualScroll?.totalContentHeight\"\n ></div>\n <div role=\"presentation\" class=\"datagrid-rows\">\n <clr-dg-row class=\"datagrid-row-loading\" *ngIf=\"loadingMoreItems\">\n <clr-dg-cell>\n <clr-spinner clrMedium></clr-spinner>\n <span>{{ commonStrings.keys.loading }}</span>\n </clr-dg-cell>\n </clr-dg-row>\n\n <ng-container #displayedRows></ng-container>\n\n <clr-dg-row class=\"datagrid-row-loading\" *ngIf=\"loadingMoreItems\">\n <clr-dg-cell>\n <clr-spinner clrMedium></clr-spinner>\n <span>{{ commonStrings.keys.loading }}</span>\n </clr-dg-cell>\n </clr-dg-row>\n\n <!-- Custom placeholder overrides the default empty one -->\n <ng-content select=\"clr-dg-placeholder\"></ng-content>\n <clr-dg-placeholder *ngIf=\"!placeholder\"></clr-dg-placeholder>\n </div>\n </div>\n </div>\n </div>\n </div>\n <ng-content select=\"clr-dg-footer\"></ng-content>\n <div class=\"datagrid-spinner\" *ngIf=\"loading\">\n <clr-spinner clrMedium>Loading</clr-spinner>\n </div>\n </div>\n <ng-content select=\"[clrIfDetail],clr-dg-detail\"></ng-content>\n</div>\n\n<div class=\"datagrid-calculation-table\">\n <div class=\"datagrid-calculation-header\">\n <ng-container #projectedCalculationColumns></ng-container>\n </div>\n <ng-container #calculationRows></ng-container>\n</div>\n\n<ng-template #fixedColumnTemplate>\n <div class=\"datagrid-column datagrid-fixed-column\"></div>\n</ng-template>\n", dependencies: [{ kind: "directive", type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: ClrLabel, selector: "label", inputs: ["id", "for"] }, { 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: "component", type: ClrSpinner, selector: "clr-spinner", inputs: ["clrInline", "clrInverse", "clrSmall", "clrMedium"] }, { kind: "component", type: ClrDatagridCell, selector: "clr-dg-cell" }, { kind: "component", type: ClrDatagridPlaceholder, selector: "clr-dg-placeholder" }, { kind: "component", type: ClrDatagridRow, selector: "clr-dg-row", inputs: ["clrDgDetailDisabled", "clrDgDetailHidden", "clrDgSkeletonLoading", "clrDgItem", "clrDgSelectable", "clrDgSelected", "clrDgExpanded", "clrDgDetailOpenLabel", "clrDgDetailCloseLabel", "clrDgRowSelectionLabel"], outputs: ["clrDgSelectedChange", "clrDgExpandedChange"] }, { kind: "directive", type: ClrDatagridSelectionCellDirective, selector: ".datagrid-select" }, { kind: "directive", type: DatagridCellRenderer, selector: "clr-dg-cell" }, { kind: "directive", type: DatagridRowRenderer, selector: "clr-dg-row" }, { kind: "directive", type: ActionableOompaLoompa, selector: "clr-datagrid, clr-dg-row" }, { kind: "directive", type: ExpandableOompaLoompa, selector: "clr-datagrid, clr-dg-row" }] });
|
|
22503
22685
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: ClrDatagrid, decorators: [{
|
|
22504
22686
|
type: Component,
|
|
22505
22687
|
args: [{ selector: 'clr-datagrid', providers: [
|
|
@@ -22521,7 +22703,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImpor
|
|
|
22521
22703
|
], host: {
|
|
22522
22704
|
'[class.datagrid-host]': 'true',
|
|
22523
22705
|
'[class.datagrid-detail-open]': 'detailService.isOpen',
|
|
22524
|
-
|
|
22706
|
+
'[class.datagrid-virtual-scroll]': '!!virtualScroll',
|
|
22707
|
+
}, template: "<!--\n ~ Copyright (c) 2016-2025 Broadcom. All Rights Reserved.\n ~ The term \"Broadcom\" refers to Broadcom Inc. and/or its subsidiaries.\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<ng-content select=\"clr-dg-action-bar\"></ng-content>\n<div class=\"datagrid-outer-wrapper\">\n <div class=\"datagrid-inner-wrapper\">\n <div class=\"datagrid\" #datagrid [attr.aria-hidden]=\"detailService.isOpen ? true : null\">\n <div class=\"datagrid-table-wrapper\">\n <div role=\"grid\" class=\"datagrid-table\" tabindex=\"-1\" #datagridTable>\n <div role=\"rowgroup\" class=\"datagrid-header\" #datagridHeader>\n <div role=\"row\" class=\"datagrid-row\">\n <div class=\"datagrid-row-master datagrid-row-flex\">\n <div class=\"datagrid-row-sticky\">\n <!--header for datagrid where you can select multiple rows -->\n <div\n #stickyHeader\n role=\"columnheader\"\n class=\"datagrid-column datagrid-select datagrid-fixed-column\"\n *ngIf=\"selection.selectionType === SELECTION_TYPE.Multi\"\n (keydown.space)=\"toggleAllSelected($event)\"\n >\n <div *ngIf=\"!virtualScroll || customSelectAllEnabled\" class=\"clr-checkbox-wrapper\">\n <!-- We need to move focus and space-key handling to the parent because of keyboard arrow key navigation,\n which is not able to transfer focus directly on the input when focused with the tab key -->\n <input\n #selectAllCheckbox\n type=\"checkbox\"\n [id]=\"selectAllId\"\n [(ngModel)]=\"allSelected\"\n [attr.aria-label]=\"commonStrings.keys.selectAll\"\n tabindex=\"-1\"\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]=\"selectAllId\" class=\"clr-control-label clr-col-null\">\n <span class=\"clr-sr-only\">{{commonStrings.keys.selectAll}}</span>\n </label>\n </div>\n\n <div class=\"datagrid-column-separator\"></div>\n </div>\n <!-- header for datagrid where you can select one row only -->\n <div\n #stickyHeader\n role=\"columnheader\"\n class=\"datagrid-column datagrid-select datagrid-fixed-column\"\n *ngIf=\"selection.selectionType === SELECTION_TYPE.Single\"\n >\n <div class=\"clr-sr-only\">{{clrDgSingleSelectionAriaLabel}}</div>\n <div class=\"datagrid-column-separator\"></div>\n </div>\n <!-- header for single row action; only displayType if we have at least one actionable row in datagrid -->\n <div\n #stickyHeader\n role=\"columnheader\"\n class=\"datagrid-column datagrid-row-actions datagrid-fixed-column\"\n *ngIf=\"rowActionService.hasActionableRow\"\n >\n <div class=\"clr-sr-only\">{{clrDgSingleActionableAriaLabel}}</div>\n <div class=\"datagrid-column-separator\"></div>\n </div>\n <!-- header for carets; only displayType if we have at least one expandable row in datagrid -->\n <div\n #stickyHeader\n role=\"columnheader\"\n class=\"datagrid-column datagrid-expandable-caret datagrid-fixed-column\"\n *ngIf=\"expandableRows.hasExpandableRow || detailService.enabled\"\n >\n <div class=\"clr-sr-only\">{{clrDetailExpandableAriaLabel}}</div>\n <div class=\"datagrid-column-separator\"></div>\n </div>\n </div>\n <div class=\"datagrid-row-scrollable\">\n <ng-container #projectedDisplayColumns></ng-container>\n </div>\n <div *ngIf=\"virtualScroll\" class=\"datagrid-row-sticky datagrid-row-sticky-scroll\">\n <div class=\"datagrid-column\"></div>\n </div>\n </div>\n </div>\n </div>\n\n <div class=\"datagrid-content\" [class.datagrid-content-virtual]=\"virtualScroll\" #contentWrapper>\n <div\n *ngIf=\"virtualScroll\"\n class=\"datagrid-content-virtual-spacer\"\n [style.height]=\"virtualScroll?.totalContentHeight\"\n ></div>\n <div role=\"presentation\" class=\"datagrid-rows\">\n <clr-dg-row class=\"datagrid-row-loading\" *ngIf=\"loadingMoreItems\">\n <clr-dg-cell>\n <clr-spinner clrMedium></clr-spinner>\n <span>{{ commonStrings.keys.loading }}</span>\n </clr-dg-cell>\n </clr-dg-row>\n\n <ng-container #displayedRows></ng-container>\n\n <clr-dg-row class=\"datagrid-row-loading\" *ngIf=\"loadingMoreItems\">\n <clr-dg-cell>\n <clr-spinner clrMedium></clr-spinner>\n <span>{{ commonStrings.keys.loading }}</span>\n </clr-dg-cell>\n </clr-dg-row>\n\n <!-- Custom placeholder overrides the default empty one -->\n <ng-content select=\"clr-dg-placeholder\"></ng-content>\n <clr-dg-placeholder *ngIf=\"!placeholder\"></clr-dg-placeholder>\n </div>\n </div>\n </div>\n </div>\n </div>\n <ng-content select=\"clr-dg-footer\"></ng-content>\n <div class=\"datagrid-spinner\" *ngIf=\"loading\">\n <clr-spinner clrMedium>Loading</clr-spinner>\n </div>\n </div>\n <ng-content select=\"[clrIfDetail],clr-dg-detail\"></ng-content>\n</div>\n\n<div class=\"datagrid-calculation-table\">\n <div class=\"datagrid-calculation-header\">\n <ng-container #projectedCalculationColumns></ng-container>\n </div>\n <ng-container #calculationRows></ng-container>\n</div>\n\n<ng-template #fixedColumnTemplate>\n <div class=\"datagrid-column datagrid-fixed-column\"></div>\n</ng-template>\n" }]
|
|
22525
22708
|
}], ctorParameters: function () { return [{ type: DatagridRenderOrganizer }, { type: Items }, { type: ExpandableRowsCount }, { type: Selection }, { type: RowActionService }, { type: StateProvider }, { type: DisplayModeService }, { type: i0.Renderer2 }, { type: DetailService }, { type: undefined, decorators: [{
|
|
22526
22709
|
type: Inject,
|
|
22527
22710
|
args: [DOCUMENT]
|
|
@@ -22551,8 +22734,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImpor
|
|
|
22551
22734
|
}], customSelectAll: [{
|
|
22552
22735
|
type: Output,
|
|
22553
22736
|
args: ['clrDgCustomSelectAll']
|
|
22554
|
-
}],
|
|
22555
|
-
type:
|
|
22737
|
+
}], _virtualScroll: [{
|
|
22738
|
+
type: ContentChildren,
|
|
22556
22739
|
args: [ClrDatagridVirtualScrollDirective]
|
|
22557
22740
|
}], iterator: [{
|
|
22558
22741
|
type: ContentChild,
|
|
@@ -22565,13 +22748,19 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImpor
|
|
|
22565
22748
|
args: [ClrDatagridColumn]
|
|
22566
22749
|
}], rows: [{
|
|
22567
22750
|
type: ContentChildren,
|
|
22568
|
-
args: [ClrDatagridRow]
|
|
22751
|
+
args: [ClrDatagridRow, { emitDistinctChangesOnly: false }]
|
|
22569
22752
|
}], datagrid: [{
|
|
22570
22753
|
type: ViewChild,
|
|
22571
22754
|
args: ['datagrid', { read: ElementRef }]
|
|
22572
22755
|
}], datagridTable: [{
|
|
22573
22756
|
type: ViewChild,
|
|
22574
22757
|
args: ['datagridTable', { read: ElementRef }]
|
|
22758
|
+
}], datagridHeader: [{
|
|
22759
|
+
type: ViewChild,
|
|
22760
|
+
args: ['datagridHeader', { read: ElementRef }]
|
|
22761
|
+
}], contentWrapper: [{
|
|
22762
|
+
type: ViewChild,
|
|
22763
|
+
args: ['contentWrapper', { read: ElementRef }]
|
|
22575
22764
|
}], scrollableColumns: [{
|
|
22576
22765
|
type: ViewChild,
|
|
22577
22766
|
args: ['scrollableColumns', { read: ViewContainerRef }]
|
|
@@ -23061,7 +23250,7 @@ ClrDatagridDetailHeader.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0"
|
|
|
23061
23250
|
<div class="datagrid-detail-pane-close">
|
|
23062
23251
|
<button
|
|
23063
23252
|
type="button"
|
|
23064
|
-
class="btn btn-link"
|
|
23253
|
+
class="btn btn-icon btn-link"
|
|
23065
23254
|
(click)="detailService.close()"
|
|
23066
23255
|
[attr.aria-label]="commonStrings.keys.close"
|
|
23067
23256
|
>
|
|
@@ -23083,7 +23272,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImpor
|
|
|
23083
23272
|
<div class="datagrid-detail-pane-close">
|
|
23084
23273
|
<button
|
|
23085
23274
|
type="button"
|
|
23086
|
-
class="btn btn-link"
|
|
23275
|
+
class="btn btn-icon btn-link"
|
|
23087
23276
|
(click)="detailService.close()"
|
|
23088
23277
|
[attr.aria-label]="commonStrings.keys.close"
|
|
23089
23278
|
>
|
|
@@ -23755,22 +23944,24 @@ ClrDatagridPagination.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0",
|
|
|
23755
23944
|
<span class="clr-sr-only">{{ commonStrings.keys.previousPage }}</span>
|
|
23756
23945
|
<cds-icon shape="angle" direction="left"></cds-icon>
|
|
23757
23946
|
</button>
|
|
23758
|
-
<
|
|
23759
|
-
|
|
23760
|
-
|
|
23761
|
-
|
|
23762
|
-
|
|
23763
|
-
|
|
23764
|
-
|
|
23765
|
-
|
|
23766
|
-
|
|
23767
|
-
|
|
23768
|
-
|
|
23769
|
-
|
|
23770
|
-
<
|
|
23771
|
-
|
|
23947
|
+
<div class="pagination-pages">
|
|
23948
|
+
<input
|
|
23949
|
+
*ngIf="!disableCurrentPageInput; else readOnly"
|
|
23950
|
+
#currentPageInput
|
|
23951
|
+
type="text"
|
|
23952
|
+
class="pagination-current clr-input"
|
|
23953
|
+
[size]="page.last.toString().length"
|
|
23954
|
+
[value]="page.current"
|
|
23955
|
+
(keydown.enter)="updateCurrentPage($event)"
|
|
23956
|
+
(blur)="verifyCurrentPage($event)"
|
|
23957
|
+
[attr.aria-label]="commonStrings.keys.currentPage"
|
|
23958
|
+
/>
|
|
23959
|
+
<ng-template #readOnly>
|
|
23960
|
+
<span>{{ page.current }}</span>
|
|
23961
|
+
</ng-template>
|
|
23772
23962
|
|
|
23773
|
-
|
|
23963
|
+
/ <span [attr.aria-label]="commonStrings.keys.totalPages">{{ page.last }}</span>
|
|
23964
|
+
</div>
|
|
23774
23965
|
<button
|
|
23775
23966
|
type="button"
|
|
23776
23967
|
class="pagination-next"
|
|
@@ -23855,22 +24046,24 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImpor
|
|
|
23855
24046
|
<span class="clr-sr-only">{{ commonStrings.keys.previousPage }}</span>
|
|
23856
24047
|
<cds-icon shape="angle" direction="left"></cds-icon>
|
|
23857
24048
|
</button>
|
|
23858
|
-
<
|
|
23859
|
-
|
|
23860
|
-
|
|
23861
|
-
|
|
23862
|
-
|
|
23863
|
-
|
|
23864
|
-
|
|
23865
|
-
|
|
23866
|
-
|
|
23867
|
-
|
|
23868
|
-
|
|
23869
|
-
|
|
23870
|
-
<
|
|
23871
|
-
|
|
24049
|
+
<div class="pagination-pages">
|
|
24050
|
+
<input
|
|
24051
|
+
*ngIf="!disableCurrentPageInput; else readOnly"
|
|
24052
|
+
#currentPageInput
|
|
24053
|
+
type="text"
|
|
24054
|
+
class="pagination-current clr-input"
|
|
24055
|
+
[size]="page.last.toString().length"
|
|
24056
|
+
[value]="page.current"
|
|
24057
|
+
(keydown.enter)="updateCurrentPage($event)"
|
|
24058
|
+
(blur)="verifyCurrentPage($event)"
|
|
24059
|
+
[attr.aria-label]="commonStrings.keys.currentPage"
|
|
24060
|
+
/>
|
|
24061
|
+
<ng-template #readOnly>
|
|
24062
|
+
<span>{{ page.current }}</span>
|
|
24063
|
+
</ng-template>
|
|
23872
24064
|
|
|
23873
|
-
|
|
24065
|
+
/ <span [attr.aria-label]="commonStrings.keys.totalPages">{{ page.last }}</span>
|
|
24066
|
+
</div>
|
|
23874
24067
|
<button
|
|
23875
24068
|
type="button"
|
|
23876
24069
|
class="pagination-next"
|
|
@@ -24392,7 +24585,9 @@ class DatagridMainRenderer {
|
|
|
24392
24585
|
this.rows.forEach(row => {
|
|
24393
24586
|
if (row?.cells.length === this.columnsService.columns.length) {
|
|
24394
24587
|
row.cells.get(columnIndex).setWidth(state);
|
|
24395
|
-
row.
|
|
24588
|
+
row.expandableRows.forEach(expandableRow => {
|
|
24589
|
+
expandableRow.cells.get(columnIndex)?.setWidth(state);
|
|
24590
|
+
});
|
|
24396
24591
|
}
|
|
24397
24592
|
});
|
|
24398
24593
|
break;
|
|
@@ -24401,7 +24596,9 @@ class DatagridMainRenderer {
|
|
|
24401
24596
|
this.rows.forEach(row => {
|
|
24402
24597
|
if (row.cells && row.cells.length) {
|
|
24403
24598
|
row.cells.get(columnIndex).setHidden(state);
|
|
24404
|
-
row.
|
|
24599
|
+
row.expandableRows.forEach(expandableRow => {
|
|
24600
|
+
expandableRow.cells.get(columnIndex)?.setHidden(state);
|
|
24601
|
+
});
|
|
24405
24602
|
}
|
|
24406
24603
|
});
|
|
24407
24604
|
this.updateColumnSeparatorsVisibility();
|
|
@@ -24412,7 +24609,9 @@ class DatagridMainRenderer {
|
|
|
24412
24609
|
this.headers.get(columnIndex).setHidden(state);
|
|
24413
24610
|
this.rows.forEach(row => {
|
|
24414
24611
|
row.setCellsState();
|
|
24415
|
-
row.expandableRow
|
|
24612
|
+
row.expandableRows.forEach(expandableRow => {
|
|
24613
|
+
expandableRow.setCellsState();
|
|
24614
|
+
});
|
|
24416
24615
|
});
|
|
24417
24616
|
}
|
|
24418
24617
|
break;
|
|
@@ -24464,6 +24663,32 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImpor
|
|
|
24464
24663
|
args: [DatagridRowRenderer]
|
|
24465
24664
|
}] } });
|
|
24466
24665
|
|
|
24666
|
+
/*
|
|
24667
|
+
* Copyright (c) 2016-2025 Broadcom. All Rights Reserved.
|
|
24668
|
+
* The term "Broadcom" refers to Broadcom Inc. and/or its subsidiaries.
|
|
24669
|
+
* This software is released under MIT license.
|
|
24670
|
+
* The full license information can be found in LICENSE in the root directory of this project.
|
|
24671
|
+
*/
|
|
24672
|
+
class DatagridRowDetailRenderer extends DatagridRowRenderer {
|
|
24673
|
+
constructor(parentRow, columnsService) {
|
|
24674
|
+
super(columnsService);
|
|
24675
|
+
this.parentRow = parentRow;
|
|
24676
|
+
parentRow.expandableRows.push(this);
|
|
24677
|
+
}
|
|
24678
|
+
ngOnDestroy() {
|
|
24679
|
+
this.parentRow.expandableRows = [];
|
|
24680
|
+
super.ngOnDestroy();
|
|
24681
|
+
}
|
|
24682
|
+
}
|
|
24683
|
+
DatagridRowDetailRenderer.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: DatagridRowDetailRenderer, deps: [{ token: DatagridRowRenderer }, { token: ColumnsService }], target: i0.ɵɵFactoryTarget.Directive });
|
|
24684
|
+
DatagridRowDetailRenderer.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "15.2.2", type: DatagridRowDetailRenderer, selector: "clr-dg-row-detail", usesInheritance: true, ngImport: i0 });
|
|
24685
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: DatagridRowDetailRenderer, decorators: [{
|
|
24686
|
+
type: Directive,
|
|
24687
|
+
args: [{
|
|
24688
|
+
selector: 'clr-dg-row-detail',
|
|
24689
|
+
}]
|
|
24690
|
+
}], ctorParameters: function () { return [{ type: DatagridRowRenderer }, { type: ColumnsService }]; } });
|
|
24691
|
+
|
|
24467
24692
|
/*
|
|
24468
24693
|
* Copyright (c) 2016-2025 Broadcom. All Rights Reserved.
|
|
24469
24694
|
* The term "Broadcom" refers to Broadcom Inc. and/or its subsidiaries.
|
|
@@ -24501,6 +24726,7 @@ const CLR_DATAGRID_DIRECTIVES = [
|
|
|
24501
24726
|
DatagridCellRenderer,
|
|
24502
24727
|
DatagridHeaderRenderer,
|
|
24503
24728
|
DatagridMainRenderer,
|
|
24729
|
+
DatagridRowDetailRenderer,
|
|
24504
24730
|
DatagridRowRenderer,
|
|
24505
24731
|
// Chocolate
|
|
24506
24732
|
ActionableOompaLoompa,
|
|
@@ -24548,6 +24774,7 @@ ClrDatagridModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", versi
|
|
|
24548
24774
|
DatagridCellRenderer,
|
|
24549
24775
|
DatagridHeaderRenderer,
|
|
24550
24776
|
DatagridMainRenderer,
|
|
24777
|
+
DatagridRowDetailRenderer,
|
|
24551
24778
|
DatagridRowRenderer,
|
|
24552
24779
|
// Chocolate
|
|
24553
24780
|
ActionableOompaLoompa,
|
|
@@ -24598,6 +24825,7 @@ ClrDatagridModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", versi
|
|
|
24598
24825
|
DatagridCellRenderer,
|
|
24599
24826
|
DatagridHeaderRenderer,
|
|
24600
24827
|
DatagridMainRenderer,
|
|
24828
|
+
DatagridRowDetailRenderer,
|
|
24601
24829
|
DatagridRowRenderer,
|
|
24602
24830
|
// Chocolate
|
|
24603
24831
|
ActionableOompaLoompa,
|
|
@@ -24811,7 +25039,7 @@ ClrStackBlock.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version:
|
|
|
24811
25039
|
[attr.aria-expanded]="ariaExpanded"
|
|
24812
25040
|
[attr.aria-controls]="getStackChildrenId()"
|
|
24813
25041
|
>
|
|
24814
|
-
<cds-icon shape="angle" class="stack-block-caret"
|
|
25042
|
+
<cds-icon shape="angle" class="stack-block-caret" [attr.direction]="caretDirection"></cds-icon>
|
|
24815
25043
|
<span class="clr-sr-only" *ngIf="getChangedValue">{{ commonStrings.keys.stackViewChanged }}</span>
|
|
24816
25044
|
<div class="stack-view-key">
|
|
24817
25045
|
<!-- This structure changed to fix #3567 and the a11y request was to move away from dl's -->
|
|
@@ -24854,7 +25082,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImpor
|
|
|
24854
25082
|
[attr.aria-expanded]="ariaExpanded"
|
|
24855
25083
|
[attr.aria-controls]="getStackChildrenId()"
|
|
24856
25084
|
>
|
|
24857
|
-
<cds-icon shape="angle" class="stack-block-caret"
|
|
25085
|
+
<cds-icon shape="angle" class="stack-block-caret" [attr.direction]="caretDirection"></cds-icon>
|
|
24858
25086
|
<span class="clr-sr-only" *ngIf="getChangedValue">{{ commonStrings.keys.stackViewChanged }}</span>
|
|
24859
25087
|
<div class="stack-view-key">
|
|
24860
25088
|
<!-- This structure changed to fix #3567 and the a11y request was to move away from dl's -->
|
|
@@ -26437,10 +26665,10 @@ class ClrAlert {
|
|
|
26437
26665
|
}
|
|
26438
26666
|
}
|
|
26439
26667
|
ClrAlert.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: ClrAlert, deps: [{ token: AlertIconAndTypesService }, { token: i0.ChangeDetectorRef }, { token: MultiAlertService, optional: true }, { token: ClrCommonStringsService }, { token: i0.Renderer2 }, { token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Component });
|
|
26440
|
-
ClrAlert.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.2", type: ClrAlert, selector: "clr-alert", inputs: { isSmall: ["clrAlertSizeSmall", "isSmall"], closable: ["clrAlertClosable", "closable"], isAppLevel: ["clrAlertAppLevel", "isAppLevel"], clrCloseButtonAriaLabel: "clrCloseButtonAriaLabel", isLightweight: ["clrAlertLightweight", "isLightweight"], alertType: ["clrAlertType", "alertType"], alertIconShape: ["clrAlertIcon", "alertIconShape"], closed: ["clrAlertClosed", "closed"] }, outputs: { _closedChanged: "clrAlertClosedChange" }, providers: [AlertIconAndTypesService], ngImport: i0, template: "<!--\n ~ Copyright (c) 2016-2025 Broadcom. All Rights Reserved.\n ~ The term \"Broadcom\" refers to Broadcom Inc. and/or its subsidiaries.\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 *ngIf=\"!_closed\"\n class=\"alert\"\n [ngClass]=\"alertClass\"\n [class.alert-sm]=\"isSmall\"\n [class.alert-lightweight]=\"isLightweight\"\n [class.alert-app-level]=\"isAppLevel\"\n>\n <div class=\"alert-items\">\n <ng-content></ng-content>\n </div>\n <button type=\"button\" class=\"close\" *ngIf=\"closable\" (click)=\"close()\" [attr.aria-label]=\"clrCloseButtonAriaLabel\">\n <cds-icon shape=\"
|
|
26668
|
+
ClrAlert.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.2", type: ClrAlert, selector: "clr-alert", inputs: { isSmall: ["clrAlertSizeSmall", "isSmall"], closable: ["clrAlertClosable", "closable"], isAppLevel: ["clrAlertAppLevel", "isAppLevel"], clrCloseButtonAriaLabel: "clrCloseButtonAriaLabel", isLightweight: ["clrAlertLightweight", "isLightweight"], alertType: ["clrAlertType", "alertType"], alertIconShape: ["clrAlertIcon", "alertIconShape"], closed: ["clrAlertClosed", "closed"] }, outputs: { _closedChanged: "clrAlertClosedChange" }, providers: [AlertIconAndTypesService], ngImport: i0, template: "<!--\n ~ Copyright (c) 2016-2025 Broadcom. All Rights Reserved.\n ~ The term \"Broadcom\" refers to Broadcom Inc. and/or its subsidiaries.\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 *ngIf=\"!_closed\"\n class=\"alert\"\n [ngClass]=\"alertClass\"\n [class.alert-sm]=\"isSmall\"\n [class.alert-lightweight]=\"isLightweight\"\n [class.alert-app-level]=\"isAppLevel\"\n>\n <div class=\"alert-items\">\n <ng-content></ng-content>\n </div>\n <button type=\"button\" class=\"close\" *ngIf=\"closable\" (click)=\"close()\" [attr.aria-label]=\"clrCloseButtonAriaLabel\">\n <cds-icon shape=\"times\"></cds-icon>\n </button>\n</div>\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" }] });
|
|
26441
26669
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: ClrAlert, decorators: [{
|
|
26442
26670
|
type: Component,
|
|
26443
|
-
args: [{ selector: 'clr-alert', providers: [AlertIconAndTypesService], template: "<!--\n ~ Copyright (c) 2016-2025 Broadcom. All Rights Reserved.\n ~ The term \"Broadcom\" refers to Broadcom Inc. and/or its subsidiaries.\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 *ngIf=\"!_closed\"\n class=\"alert\"\n [ngClass]=\"alertClass\"\n [class.alert-sm]=\"isSmall\"\n [class.alert-lightweight]=\"isLightweight\"\n [class.alert-app-level]=\"isAppLevel\"\n>\n <div class=\"alert-items\">\n <ng-content></ng-content>\n </div>\n <button type=\"button\" class=\"close\" *ngIf=\"closable\" (click)=\"close()\" [attr.aria-label]=\"clrCloseButtonAriaLabel\">\n <cds-icon shape=\"
|
|
26671
|
+
args: [{ selector: 'clr-alert', providers: [AlertIconAndTypesService], template: "<!--\n ~ Copyright (c) 2016-2025 Broadcom. All Rights Reserved.\n ~ The term \"Broadcom\" refers to Broadcom Inc. and/or its subsidiaries.\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 *ngIf=\"!_closed\"\n class=\"alert\"\n [ngClass]=\"alertClass\"\n [class.alert-sm]=\"isSmall\"\n [class.alert-lightweight]=\"isLightweight\"\n [class.alert-app-level]=\"isAppLevel\"\n>\n <div class=\"alert-items\">\n <ng-content></ng-content>\n </div>\n <button type=\"button\" class=\"close\" *ngIf=\"closable\" (click)=\"close()\" [attr.aria-label]=\"clrCloseButtonAriaLabel\">\n <cds-icon shape=\"times\"></cds-icon>\n </button>\n</div>\n" }]
|
|
26444
26672
|
}], ctorParameters: function () { return [{ type: AlertIconAndTypesService }, { type: i0.ChangeDetectorRef }, { type: MultiAlertService, decorators: [{
|
|
26445
26673
|
type: Optional
|
|
26446
26674
|
}] }, { type: ClrCommonStringsService }, { type: i0.Renderer2 }, { type: i0.ElementRef }]; }, propDecorators: { isSmall: [{
|
|
@@ -26890,7 +27118,7 @@ class ClrModal {
|
|
|
26890
27118
|
}
|
|
26891
27119
|
}
|
|
26892
27120
|
ClrModal.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: ClrModal, deps: [{ token: ScrollingService }, { token: ClrCommonStringsService }, { token: ModalStackService }, { token: ClrModalConfigurationService }], target: i0.ɵɵFactoryTarget.Component });
|
|
26893
|
-
ClrModal.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.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"], bypassScrollService: ["clrModalOverrideScrollService", "bypassScrollService"] }, outputs: { _openChanged: "clrModalOpenChange", altClose: "clrModalAlternateClose" }, host: { properties: { "class.open": "this._open" } }, queries: [{ propertyName: "modalContentTemplate", first: true, predicate: ["clrInternalModalContentTemplate"], descendants: true }], viewQueries: [{ propertyName: "title", first: true, predicate: ["title"], descendants: true }, { propertyName: "bodyElementRef", first: true, predicate: ["body"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<!--\n ~ Copyright (c) 2016-2025 Broadcom. All Rights Reserved.\n ~ The term \"Broadcom\" refers to Broadcom Inc. and/or its subsidiaries.\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 *ngIf=\"_open\" class=\"modal\" [class.modal-full-screen]=\"size == 'full-screen'\">\n <!--fixme: revisit when ngClass works with exit animation-->\n <div\n cdkTrapFocus\n [cdkTrapFocusAutoCapture]=\"true\"\n [@fadeMove]=\"fadeMove\"\n (@fadeMove.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 || modalId\"\n >\n <div class=\"clr-sr-only\">{{commonStrings.keys.modalContentStart}}</div>\n <!-- This wizard is tightly coupled to the modal styles, so changes here could require changes in the wizard. -->\n <div *ngIf=\"!modalContentTemplate; else modalContentTemplate\" class=\"modal-content-wrapper\">\n <div class=\"modal-content\">\n <div class=\"modal-header--accessible\">\n <ng-content select=\".leading-button\"></ng-content>\n <div class=\"modal-title-wrapper\" #title [id]=\"modalId\" cdkFocusInitial tabindex=\"-1\">\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 #body 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
|
|
27121
|
+
ClrModal.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.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"], bypassScrollService: ["clrModalOverrideScrollService", "bypassScrollService"] }, outputs: { _openChanged: "clrModalOpenChange", altClose: "clrModalAlternateClose" }, host: { properties: { "class.open": "this._open" } }, queries: [{ propertyName: "modalContentTemplate", first: true, predicate: ["clrInternalModalContentTemplate"], descendants: true }], viewQueries: [{ propertyName: "title", first: true, predicate: ["title"], descendants: true }, { propertyName: "bodyElementRef", first: true, predicate: ["body"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<!--\n ~ Copyright (c) 2016-2025 Broadcom. All Rights Reserved.\n ~ The term \"Broadcom\" refers to Broadcom Inc. and/or its subsidiaries.\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 *ngIf=\"_open\" class=\"modal\" [class.modal-full-screen]=\"size == 'full-screen'\">\n <!--fixme: revisit when ngClass works with exit animation-->\n <div\n cdkTrapFocus\n [cdkTrapFocusAutoCapture]=\"true\"\n [@fadeMove]=\"fadeMove\"\n (@fadeMove.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 || modalId\"\n >\n <div class=\"clr-sr-only\">{{commonStrings.keys.modalContentStart}}</div>\n <!-- This wizard is tightly coupled to the modal styles, so changes here could require changes in the wizard. -->\n <div *ngIf=\"!modalContentTemplate; else modalContentTemplate\" class=\"modal-content-wrapper\">\n <div class=\"modal-content\">\n <div class=\"modal-header--accessible\">\n <ng-content select=\".leading-button\"></ng-content>\n <div class=\"modal-title-wrapper\" #title [id]=\"modalId\" cdkFocusInitial tabindex=\"-1\">\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 #body 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 <div [@fade] *ngIf=\"backdrop\" class=\"modal-backdrop\" aria-hidden=\"true\" (click)=\"backdropClick()\"></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" }], viewProviders: [ScrollingService], animations: [
|
|
26894
27122
|
trigger('fadeMove', [
|
|
26895
27123
|
transition('* => fadeDown', [
|
|
26896
27124
|
style({ opacity: 0, transform: 'translate(0, -25%)' }),
|
|
@@ -26901,6 +27129,8 @@ ClrModal.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.
|
|
|
26901
27129
|
]),
|
|
26902
27130
|
transition('* => fadeLeft', [style({ opacity: 0, transform: 'translate(25%, 0)' }), animate('0.2s ease-in-out')]),
|
|
26903
27131
|
transition('fadeLeft => *', [animate('0.2s ease-in-out', style({ opacity: 0, transform: 'translate(25%, 0)' }))]),
|
|
27132
|
+
transition('* => fadeUp', [style({ opacity: 0, transform: 'translate(0, 50%)' }), animate('0.2s ease-in-out')]),
|
|
27133
|
+
transition('fadeUp => *', [animate('0.2s ease-in-out', style({ opacity: 0, transform: 'translate(0, 50%)' }))]),
|
|
26904
27134
|
]),
|
|
26905
27135
|
trigger('fade', [
|
|
26906
27136
|
transition('void => *', [style({ opacity: 0 }), animate('0.2s ease-in-out', style({ opacity: 0.85 }))]),
|
|
@@ -26920,12 +27150,14 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImpor
|
|
|
26920
27150
|
]),
|
|
26921
27151
|
transition('* => fadeLeft', [style({ opacity: 0, transform: 'translate(25%, 0)' }), animate('0.2s ease-in-out')]),
|
|
26922
27152
|
transition('fadeLeft => *', [animate('0.2s ease-in-out', style({ opacity: 0, transform: 'translate(25%, 0)' }))]),
|
|
27153
|
+
transition('* => fadeUp', [style({ opacity: 0, transform: 'translate(0, 50%)' }), animate('0.2s ease-in-out')]),
|
|
27154
|
+
transition('fadeUp => *', [animate('0.2s ease-in-out', style({ opacity: 0, transform: 'translate(0, 50%)' }))]),
|
|
26923
27155
|
]),
|
|
26924
27156
|
trigger('fade', [
|
|
26925
27157
|
transition('void => *', [style({ opacity: 0 }), animate('0.2s ease-in-out', style({ opacity: 0.85 }))]),
|
|
26926
27158
|
transition('* => void', [animate('0.2s ease-in-out', style({ opacity: 0 }))]),
|
|
26927
27159
|
]),
|
|
26928
|
-
], template: "<!--\n ~ Copyright (c) 2016-2025 Broadcom. All Rights Reserved.\n ~ The term \"Broadcom\" refers to Broadcom Inc. and/or its subsidiaries.\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 *ngIf=\"_open\" class=\"modal\" [class.modal-full-screen]=\"size == 'full-screen'\">\n <!--fixme: revisit when ngClass works with exit animation-->\n <div\n cdkTrapFocus\n [cdkTrapFocusAutoCapture]=\"true\"\n [@fadeMove]=\"fadeMove\"\n (@fadeMove.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 || modalId\"\n >\n <div class=\"clr-sr-only\">{{commonStrings.keys.modalContentStart}}</div>\n <!-- This wizard is tightly coupled to the modal styles, so changes here could require changes in the wizard. -->\n <div *ngIf=\"!modalContentTemplate; else modalContentTemplate\" class=\"modal-content-wrapper\">\n <div class=\"modal-content\">\n <div class=\"modal-header--accessible\">\n <ng-content select=\".leading-button\"></ng-content>\n <div class=\"modal-title-wrapper\" #title [id]=\"modalId\" cdkFocusInitial tabindex=\"-1\">\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 #body 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
|
|
27160
|
+
], template: "<!--\n ~ Copyright (c) 2016-2025 Broadcom. All Rights Reserved.\n ~ The term \"Broadcom\" refers to Broadcom Inc. and/or its subsidiaries.\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 *ngIf=\"_open\" class=\"modal\" [class.modal-full-screen]=\"size == 'full-screen'\">\n <!--fixme: revisit when ngClass works with exit animation-->\n <div\n cdkTrapFocus\n [cdkTrapFocusAutoCapture]=\"true\"\n [@fadeMove]=\"fadeMove\"\n (@fadeMove.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 || modalId\"\n >\n <div class=\"clr-sr-only\">{{commonStrings.keys.modalContentStart}}</div>\n <!-- This wizard is tightly coupled to the modal styles, so changes here could require changes in the wizard. -->\n <div *ngIf=\"!modalContentTemplate; else modalContentTemplate\" class=\"modal-content-wrapper\">\n <div class=\"modal-content\">\n <div class=\"modal-header--accessible\">\n <ng-content select=\".leading-button\"></ng-content>\n <div class=\"modal-title-wrapper\" #title [id]=\"modalId\" cdkFocusInitial tabindex=\"-1\">\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 #body 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 <div [@fade] *ngIf=\"backdrop\" class=\"modal-backdrop\" aria-hidden=\"true\" (click)=\"backdropClick()\"></div>\n</div>\n", styles: [":host{display:none}:host.open{display:inline}\n"] }]
|
|
26929
27161
|
}], ctorParameters: function () { return [{ type: ScrollingService }, { type: ClrCommonStringsService }, { type: ModalStackService }, { type: ClrModalConfigurationService }]; }, propDecorators: { title: [{
|
|
26930
27162
|
type: ViewChild,
|
|
26931
27163
|
args: ['title']
|
|
@@ -27042,15 +27274,24 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImpor
|
|
|
27042
27274
|
* This software is released under MIT license.
|
|
27043
27275
|
* The full license information can be found in LICENSE in the root directory of this project.
|
|
27044
27276
|
*/
|
|
27045
|
-
class
|
|
27277
|
+
class ClrModalHostComponent {
|
|
27046
27278
|
}
|
|
27047
|
-
|
|
27048
|
-
|
|
27049
|
-
|
|
27050
|
-
|
|
27279
|
+
ClrModalHostComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: ClrModalHostComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
27280
|
+
ClrModalHostComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.2", type: ClrModalHostComponent, selector: "[clrModalHost]", host: { properties: { "class.clr-modal-host": "true" } }, ngImport: i0, template: `
|
|
27281
|
+
<div class="clr-modal-host-scrollable">
|
|
27282
|
+
<ng-content></ng-content>
|
|
27283
|
+
</div>
|
|
27284
|
+
`, isInline: true });
|
|
27285
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: ClrModalHostComponent, decorators: [{
|
|
27286
|
+
type: Component,
|
|
27051
27287
|
args: [{
|
|
27052
27288
|
selector: '[clrModalHost]',
|
|
27053
27289
|
host: { '[class.clr-modal-host]': 'true' },
|
|
27290
|
+
template: `
|
|
27291
|
+
<div class="clr-modal-host-scrollable">
|
|
27292
|
+
<ng-content></ng-content>
|
|
27293
|
+
</div>
|
|
27294
|
+
`,
|
|
27054
27295
|
}]
|
|
27055
27296
|
}] });
|
|
27056
27297
|
|
|
@@ -27060,14 +27301,14 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImpor
|
|
|
27060
27301
|
* This software is released under MIT license.
|
|
27061
27302
|
* The full license information can be found in LICENSE in the root directory of this project.
|
|
27062
27303
|
*/
|
|
27063
|
-
const CLR_MODAL_DIRECTIVES = [ClrModal, ClrModalBody,
|
|
27304
|
+
const CLR_MODAL_DIRECTIVES = [ClrModal, ClrModalBody, ClrModalHostComponent];
|
|
27064
27305
|
class ClrModalModule {
|
|
27065
27306
|
constructor() {
|
|
27066
27307
|
ClarityIcons.addIcons(windowCloseIcon);
|
|
27067
27308
|
}
|
|
27068
27309
|
}
|
|
27069
27310
|
ClrModalModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: ClrModalModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
|
|
27070
|
-
ClrModalModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "15.2.2", ngImport: i0, type: ClrModalModule, declarations: [ClrModal, ClrModalBody,
|
|
27311
|
+
ClrModalModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "15.2.2", ngImport: i0, type: ClrModalModule, declarations: [ClrModal, ClrModalBody, ClrModalHostComponent], imports: [CommonModule, CdkTrapFocusModule, ClrIconModule], exports: [ClrModal, ClrModalBody, ClrModalHostComponent, ClrIconModule] });
|
|
27071
27312
|
ClrModalModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: ClrModalModule, imports: [CommonModule, CdkTrapFocusModule, ClrIconModule, ClrIconModule] });
|
|
27072
27313
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: ClrModalModule, decorators: [{
|
|
27073
27314
|
type: NgModule,
|
|
@@ -27089,16 +27330,29 @@ class ClrSidePanel {
|
|
|
27089
27330
|
this.element = element;
|
|
27090
27331
|
this.configuration = configuration;
|
|
27091
27332
|
this.commonStrings = commonStrings;
|
|
27092
|
-
this._open = false;
|
|
27093
27333
|
this.openChange = new EventEmitter(false);
|
|
27094
27334
|
this.skipAnimation = false;
|
|
27095
27335
|
this.staticBackdrop = false;
|
|
27336
|
+
this.closable = true;
|
|
27096
27337
|
this.preventClose = false;
|
|
27097
27338
|
this.altClose = new EventEmitter(false);
|
|
27098
27339
|
this._pinnable = false;
|
|
27099
27340
|
this._pinned = false;
|
|
27341
|
+
this._position = 'right';
|
|
27342
|
+
this.__open = false;
|
|
27100
27343
|
this._size = 'md';
|
|
27101
27344
|
}
|
|
27345
|
+
get _open() {
|
|
27346
|
+
return this.__open;
|
|
27347
|
+
}
|
|
27348
|
+
set _open(open) {
|
|
27349
|
+
if (open !== this.__open) {
|
|
27350
|
+
this.__open = open;
|
|
27351
|
+
if (this.pinned) {
|
|
27352
|
+
this.updateModalState();
|
|
27353
|
+
}
|
|
27354
|
+
}
|
|
27355
|
+
}
|
|
27102
27356
|
get size() {
|
|
27103
27357
|
return this._size;
|
|
27104
27358
|
}
|
|
@@ -27108,9 +27362,22 @@ class ClrSidePanel {
|
|
|
27108
27362
|
}
|
|
27109
27363
|
if (this._size !== value) {
|
|
27110
27364
|
this._size = value;
|
|
27111
|
-
if (this.
|
|
27112
|
-
this.
|
|
27113
|
-
|
|
27365
|
+
if (this.pinned) {
|
|
27366
|
+
this.updateModalState();
|
|
27367
|
+
}
|
|
27368
|
+
}
|
|
27369
|
+
}
|
|
27370
|
+
get position() {
|
|
27371
|
+
return this._position;
|
|
27372
|
+
}
|
|
27373
|
+
set position(position) {
|
|
27374
|
+
if (position && position !== this._position) {
|
|
27375
|
+
this._position = position;
|
|
27376
|
+
if (this._position === 'right') {
|
|
27377
|
+
this.configuration.fadeMove = 'fadeLeft';
|
|
27378
|
+
}
|
|
27379
|
+
else if (this._position === 'bottom') {
|
|
27380
|
+
this.configuration.fadeMove = 'fadeUp';
|
|
27114
27381
|
}
|
|
27115
27382
|
}
|
|
27116
27383
|
}
|
|
@@ -27118,17 +27385,9 @@ class ClrSidePanel {
|
|
|
27118
27385
|
return this._pinned;
|
|
27119
27386
|
}
|
|
27120
27387
|
set pinned(pinned) {
|
|
27121
|
-
|
|
27122
|
-
|
|
27123
|
-
|
|
27124
|
-
this.originalStopClose = this.modal.stopClose;
|
|
27125
|
-
this.modal.stopClose = true;
|
|
27126
|
-
this.displaySideBySide();
|
|
27127
|
-
}
|
|
27128
|
-
else {
|
|
27129
|
-
this.modal.stopClose = this.originalStopClose;
|
|
27130
|
-
this.displayOverlapping();
|
|
27131
|
-
}
|
|
27388
|
+
this._pinned = pinned;
|
|
27389
|
+
if (this.modal) {
|
|
27390
|
+
this.updateModalState();
|
|
27132
27391
|
}
|
|
27133
27392
|
}
|
|
27134
27393
|
get clrSidePanelBackdrop() {
|
|
@@ -27145,28 +27404,37 @@ class ClrSidePanel {
|
|
|
27145
27404
|
set clrSidePanelPinnable(pinnable) {
|
|
27146
27405
|
this._pinnable = pinnable;
|
|
27147
27406
|
}
|
|
27407
|
+
get modal() {
|
|
27408
|
+
return this._modal;
|
|
27409
|
+
}
|
|
27410
|
+
set modal(modal) {
|
|
27411
|
+
this._modal = modal;
|
|
27412
|
+
this.originalStopClose = this.modal.stopClose;
|
|
27413
|
+
this.updateModalState();
|
|
27414
|
+
}
|
|
27148
27415
|
get hostElement() {
|
|
27149
27416
|
return this.element.nativeElement.closest('.clr-modal-host') || document.body;
|
|
27150
27417
|
}
|
|
27418
|
+
get bottomPositionCssClass() {
|
|
27419
|
+
return this.position === 'bottom';
|
|
27420
|
+
}
|
|
27151
27421
|
ngOnInit() {
|
|
27152
27422
|
this.configuration.fadeMove = 'fadeLeft';
|
|
27153
|
-
|
|
27154
|
-
|
|
27155
|
-
if (changes && Object.prototype.hasOwnProperty.call(changes, '_open')) {
|
|
27156
|
-
if (changes._open.currentValue) {
|
|
27157
|
-
if (this.clrSidePanelPinnable && this.pinned) {
|
|
27158
|
-
this.displaySideBySide();
|
|
27159
|
-
}
|
|
27160
|
-
}
|
|
27161
|
-
else {
|
|
27162
|
-
if (this.clrSidePanelPinnable && this.pinned) {
|
|
27163
|
-
this.displayOverlapping();
|
|
27164
|
-
}
|
|
27165
|
-
}
|
|
27423
|
+
if (this.position === 'bottom') {
|
|
27424
|
+
this.configuration.fadeMove = 'fadeUp';
|
|
27166
27425
|
}
|
|
27167
27426
|
}
|
|
27168
27427
|
ngOnDestroy() {
|
|
27169
|
-
this.
|
|
27428
|
+
this.cleanupPinnedClasses();
|
|
27429
|
+
}
|
|
27430
|
+
handleModalOpen(open) {
|
|
27431
|
+
if (open) {
|
|
27432
|
+
this.updateModalState();
|
|
27433
|
+
}
|
|
27434
|
+
else {
|
|
27435
|
+
this.cleanupPinnedClasses();
|
|
27436
|
+
}
|
|
27437
|
+
this.openChange.emit(open);
|
|
27170
27438
|
}
|
|
27171
27439
|
open() {
|
|
27172
27440
|
this.modal.open();
|
|
@@ -27184,28 +27452,41 @@ class ClrSidePanel {
|
|
|
27184
27452
|
this.modal.close();
|
|
27185
27453
|
}
|
|
27186
27454
|
}
|
|
27187
|
-
|
|
27188
|
-
|
|
27455
|
+
updateModalState() {
|
|
27456
|
+
if (!this.modal) {
|
|
27457
|
+
return;
|
|
27458
|
+
}
|
|
27459
|
+
if (this.pinned) {
|
|
27460
|
+
this.modal.stopClose = true;
|
|
27461
|
+
this.updatePinnedClasses();
|
|
27462
|
+
}
|
|
27463
|
+
else {
|
|
27464
|
+
this.modal.stopClose = this.originalStopClose;
|
|
27465
|
+
this.cleanupPinnedClasses();
|
|
27466
|
+
}
|
|
27189
27467
|
}
|
|
27190
|
-
|
|
27191
|
-
this.hostElement.
|
|
27192
|
-
|
|
27193
|
-
|
|
27194
|
-
|
|
27468
|
+
cleanupPinnedClasses() {
|
|
27469
|
+
[this.hostElement, document.body].forEach(host => {
|
|
27470
|
+
host.classList.forEach(className => {
|
|
27471
|
+
if (className.startsWith('clr-side-panel-pinned-')) {
|
|
27472
|
+
host.classList.remove(className);
|
|
27473
|
+
}
|
|
27474
|
+
});
|
|
27195
27475
|
});
|
|
27196
27476
|
}
|
|
27477
|
+
updatePinnedClasses() {
|
|
27478
|
+
this.cleanupPinnedClasses();
|
|
27479
|
+
this.hostElement.classList.add(`clr-side-panel-pinned-${this.position}-${this.size}`);
|
|
27480
|
+
}
|
|
27197
27481
|
}
|
|
27198
27482
|
ClrSidePanel.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: ClrSidePanel, deps: [{ token: i0.ElementRef }, { token: ClrModalConfigurationService }, { token: ClrCommonStringsService }], target: i0.ɵɵFactoryTarget.Component });
|
|
27199
|
-
ClrSidePanel.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.2", type: ClrSidePanel, selector: "clr-side-panel", inputs: {
|
|
27483
|
+
ClrSidePanel.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.2", type: ClrSidePanel, selector: "clr-side-panel", inputs: { closeButtonAriaLabel: ["clrSidePanelCloseButtonAriaLabel", "closeButtonAriaLabel"], skipAnimation: ["clrSidePanelSkipAnimation", "skipAnimation"], labelledById: ["clrSidePanelLabelledById", "labelledById"], staticBackdrop: ["clrSidePanelStaticBackdrop", "staticBackdrop"], closable: ["clrSidePanelClosable", "closable"], preventClose: ["clrSidePanelPreventClose", "preventClose"], _open: ["clrSidePanelOpen", "_open"], size: ["clrSidePanelSize", "size"], position: ["clrSidePanelPosition", "position"], pinned: ["clrSidePanelPinned", "pinned"], clrSidePanelBackdrop: "clrSidePanelBackdrop", clrSidePanelPinnable: "clrSidePanelPinnable" }, outputs: { openChange: "clrSidePanelOpenChange", altClose: "clrSidePanelAlternateClose" }, host: { listeners: { "document:pointerup": "documentClick($event)" }, properties: { "class.side-panel": "true", "class.side-panel-bottom": "this.bottomPositionCssClass" } }, viewQueries: [{ propertyName: "modal", first: true, predicate: ClrModal, descendants: true }], ngImport: i0, template: "<clr-modal\n [clrModalOpen]=\"_open\"\n (clrModalOpenChange)=\"handleModalOpen($event)\"\n [clrModalCloseButtonAriaLabel]=\"closeButtonAriaLabel\"\n [clrModalSize]=\"size\"\n [clrModalSkipAnimation]=\"skipAnimation\"\n [clrModalStaticBackdrop]=\"staticBackdrop\"\n [clrModalLabelledById]=\"labelledById\"\n [clrModalPreventClose]=\"preventClose\"\n [clrModalClosable]=\"closable\"\n (clrModalAlternateClose)=\"altClose.emit($event)\"\n [clrModalOverrideScrollService]=\"true\"\n>\n <button\n type=\"button\"\n [attr.aria-label]=\"commonStrings.keys.sidePanelPin\"\n class=\"leading-button pinnable\"\n *ngIf=\"clrSidePanelPinnable\"\n (click)=\"togglePinned()\"\n >\n <cds-icon [attr.shape]=\"pinned ? 'unpin' : 'pin'\"></cds-icon>\n </button>\n <div class=\"modal-title\"><ng-content select=\".side-panel-title\"></ng-content></div>\n <div class=\"modal-body\"><ng-content select=\".side-panel-body\"></ng-content></div>\n <div class=\"modal-footer\"><ng-content select=\".side-panel-footer\"></ng-content></div>\n</clr-modal>\n", dependencies: [{ kind: "directive", type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: CdsIconCustomTag, selector: "cds-icon" }, { kind: "component", type: ClrModal, selector: "clr-modal", inputs: ["clrModalOpen", "clrModalClosable", "clrModalCloseButtonAriaLabel", "clrModalSize", "clrModalStaticBackdrop", "clrModalSkipAnimation", "clrModalPreventClose", "clrModalLabelledById", "clrModalOverrideScrollService"], outputs: ["clrModalOpenChange", "clrModalAlternateClose"] }, { kind: "directive", type: ClrModalBody, selector: ".modal-body" }] });
|
|
27200
27484
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: ClrSidePanel, decorators: [{
|
|
27201
27485
|
type: Component,
|
|
27202
27486
|
args: [{ selector: 'clr-side-panel', host: {
|
|
27203
27487
|
'[class.side-panel]': 'true',
|
|
27204
|
-
}, template: "<clr-modal\n [clrModalOpen]=\"_open\"\n (clrModalOpenChange)=\"
|
|
27205
|
-
}], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: ClrModalConfigurationService }, { type: ClrCommonStringsService }]; }, propDecorators: {
|
|
27206
|
-
type: Input,
|
|
27207
|
-
args: ['clrSidePanelOpen']
|
|
27208
|
-
}], openChange: [{
|
|
27488
|
+
}, template: "<clr-modal\n [clrModalOpen]=\"_open\"\n (clrModalOpenChange)=\"handleModalOpen($event)\"\n [clrModalCloseButtonAriaLabel]=\"closeButtonAriaLabel\"\n [clrModalSize]=\"size\"\n [clrModalSkipAnimation]=\"skipAnimation\"\n [clrModalStaticBackdrop]=\"staticBackdrop\"\n [clrModalLabelledById]=\"labelledById\"\n [clrModalPreventClose]=\"preventClose\"\n [clrModalClosable]=\"closable\"\n (clrModalAlternateClose)=\"altClose.emit($event)\"\n [clrModalOverrideScrollService]=\"true\"\n>\n <button\n type=\"button\"\n [attr.aria-label]=\"commonStrings.keys.sidePanelPin\"\n class=\"leading-button pinnable\"\n *ngIf=\"clrSidePanelPinnable\"\n (click)=\"togglePinned()\"\n >\n <cds-icon [attr.shape]=\"pinned ? 'unpin' : 'pin'\"></cds-icon>\n </button>\n <div class=\"modal-title\"><ng-content select=\".side-panel-title\"></ng-content></div>\n <div class=\"modal-body\"><ng-content select=\".side-panel-body\"></ng-content></div>\n <div class=\"modal-footer\"><ng-content select=\".side-panel-footer\"></ng-content></div>\n</clr-modal>\n" }]
|
|
27489
|
+
}], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: ClrModalConfigurationService }, { type: ClrCommonStringsService }]; }, propDecorators: { openChange: [{
|
|
27209
27490
|
type: Output,
|
|
27210
27491
|
args: ['clrSidePanelOpenChange']
|
|
27211
27492
|
}], closeButtonAriaLabel: [{
|
|
@@ -27220,22 +27501,37 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImpor
|
|
|
27220
27501
|
}], staticBackdrop: [{
|
|
27221
27502
|
type: Input,
|
|
27222
27503
|
args: ['clrSidePanelStaticBackdrop']
|
|
27504
|
+
}], closable: [{
|
|
27505
|
+
type: Input,
|
|
27506
|
+
args: ['clrSidePanelClosable']
|
|
27223
27507
|
}], preventClose: [{
|
|
27224
27508
|
type: Input,
|
|
27225
27509
|
args: ['clrSidePanelPreventClose']
|
|
27226
27510
|
}], altClose: [{
|
|
27227
27511
|
type: Output,
|
|
27228
27512
|
args: ['clrSidePanelAlternateClose']
|
|
27229
|
-
}],
|
|
27230
|
-
type:
|
|
27231
|
-
args: [
|
|
27513
|
+
}], _open: [{
|
|
27514
|
+
type: Input,
|
|
27515
|
+
args: ['clrSidePanelOpen']
|
|
27232
27516
|
}], size: [{
|
|
27233
27517
|
type: Input,
|
|
27234
27518
|
args: ['clrSidePanelSize']
|
|
27519
|
+
}], position: [{
|
|
27520
|
+
type: Input,
|
|
27521
|
+
args: ['clrSidePanelPosition']
|
|
27522
|
+
}], pinned: [{
|
|
27523
|
+
type: Input,
|
|
27524
|
+
args: ['clrSidePanelPinned']
|
|
27235
27525
|
}], clrSidePanelBackdrop: [{
|
|
27236
27526
|
type: Input
|
|
27237
27527
|
}], clrSidePanelPinnable: [{
|
|
27238
27528
|
type: Input
|
|
27529
|
+
}], modal: [{
|
|
27530
|
+
type: ViewChild,
|
|
27531
|
+
args: [ClrModal]
|
|
27532
|
+
}], bottomPositionCssClass: [{
|
|
27533
|
+
type: HostBinding,
|
|
27534
|
+
args: ['class.side-panel-bottom']
|
|
27239
27535
|
}], documentClick: [{
|
|
27240
27536
|
type: HostListener,
|
|
27241
27537
|
args: ['document:pointerup', ['$event']]
|
|
@@ -29608,10 +29904,15 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImpor
|
|
|
29608
29904
|
* The full license information can be found in LICENSE in the root directory of this project.
|
|
29609
29905
|
*/
|
|
29610
29906
|
class ClrWizardStepnavItem {
|
|
29611
|
-
constructor(navService, pageCollection, commonStrings) {
|
|
29907
|
+
constructor(navService, pageCollection, commonStrings, elementRef) {
|
|
29612
29908
|
this.navService = navService;
|
|
29613
29909
|
this.pageCollection = pageCollection;
|
|
29614
29910
|
this.commonStrings = commonStrings;
|
|
29911
|
+
this.elementRef = elementRef;
|
|
29912
|
+
/**
|
|
29913
|
+
* This is used to prevent the steps from scrolling as the user clicks on the steps.
|
|
29914
|
+
*/
|
|
29915
|
+
this.skipNextScroll = false;
|
|
29615
29916
|
}
|
|
29616
29917
|
get id() {
|
|
29617
29918
|
this.pageGuard();
|
|
@@ -29657,12 +29958,42 @@ class ClrWizardStepnavItem {
|
|
|
29657
29958
|
const allIds = this.isComplete ? [this.stepIconId, ...textIds] : textIds;
|
|
29658
29959
|
return allIds.join(' ');
|
|
29659
29960
|
}
|
|
29961
|
+
get icon() {
|
|
29962
|
+
if (this.isCurrent) {
|
|
29963
|
+
return {
|
|
29964
|
+
shape: 'dot-circle',
|
|
29965
|
+
label: this.commonStrings.keys.wizardStepCurrent || this.commonStrings.keys.timelineStepCurrent,
|
|
29966
|
+
};
|
|
29967
|
+
}
|
|
29968
|
+
else if (this.hasError) {
|
|
29969
|
+
return {
|
|
29970
|
+
shape: 'error-standard',
|
|
29971
|
+
label: this.commonStrings.keys.wizardStepError || this.commonStrings.keys.timelineStepError,
|
|
29972
|
+
};
|
|
29973
|
+
}
|
|
29974
|
+
else if (this.isComplete) {
|
|
29975
|
+
return {
|
|
29976
|
+
shape: 'success-standard',
|
|
29977
|
+
label: this.commonStrings.keys.wizardStepSuccess || this.commonStrings.keys.timelineStepSuccess,
|
|
29978
|
+
};
|
|
29979
|
+
}
|
|
29980
|
+
else {
|
|
29981
|
+
return null;
|
|
29982
|
+
}
|
|
29983
|
+
}
|
|
29984
|
+
ngOnInit() {
|
|
29985
|
+
this.subscription = this.ensureCurrentStepIsScrolledIntoView().subscribe();
|
|
29986
|
+
}
|
|
29987
|
+
ngOnDestroy() {
|
|
29988
|
+
this.subscription?.unsubscribe();
|
|
29989
|
+
}
|
|
29660
29990
|
click() {
|
|
29661
29991
|
this.pageGuard();
|
|
29662
29992
|
// if we click on our own stepnav or a disabled stepnav, we don't want to do anything
|
|
29663
29993
|
if (this.isDisabled || this.isCurrent) {
|
|
29664
29994
|
return;
|
|
29665
29995
|
}
|
|
29996
|
+
this.skipNextScroll = true;
|
|
29666
29997
|
this.navService.goTo(this.page);
|
|
29667
29998
|
}
|
|
29668
29999
|
pageGuard() {
|
|
@@ -29670,8 +30001,20 @@ class ClrWizardStepnavItem {
|
|
|
29670
30001
|
throw new Error('Wizard stepnav item is not associated with a wizard page.');
|
|
29671
30002
|
}
|
|
29672
30003
|
}
|
|
30004
|
+
ensureCurrentStepIsScrolledIntoView() {
|
|
30005
|
+
// Don't use "smooth" scrolling when the wizard is first opened to avoid a delay in scrolling the current step into view.
|
|
30006
|
+
// The current step when the wizard is opened might not be the first step. For example, the wizard can be closed and re-opened.
|
|
30007
|
+
let scrollBehavior = 'auto';
|
|
30008
|
+
return this.navService.currentPageChanged.pipe(startWith$1(this.navService.currentPage), tap$1(currentPage => {
|
|
30009
|
+
if (!this.skipNextScroll && currentPage === this.page) {
|
|
30010
|
+
this.elementRef.nativeElement.scrollIntoView({ behavior: scrollBehavior, block: 'center', inline: 'center' });
|
|
30011
|
+
}
|
|
30012
|
+
scrollBehavior = 'smooth';
|
|
30013
|
+
this.skipNextScroll = false;
|
|
30014
|
+
}));
|
|
30015
|
+
}
|
|
29673
30016
|
}
|
|
29674
|
-
ClrWizardStepnavItem.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: ClrWizardStepnavItem, deps: [{ token: WizardNavigationService }, { token: PageCollectionService }, { token: ClrCommonStringsService }], target: i0.ɵɵFactoryTarget.Component });
|
|
30017
|
+
ClrWizardStepnavItem.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: ClrWizardStepnavItem, deps: [{ token: WizardNavigationService }, { token: PageCollectionService }, { token: ClrCommonStringsService }, { token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Component });
|
|
29675
30018
|
ClrWizardStepnavItem.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.2", type: ClrWizardStepnavItem, selector: "[clr-wizard-stepnav-item]", inputs: { page: "page" }, host: { properties: { "id": "id", "attr.aria-current": "stepAriaCurrent", "attr.aria-controls": "page.id", "class.clr-nav-link": "true", "class.nav-item": "true", "class.active": "isCurrent", "class.disabled": "isDisabled", "class.no-click": "!canNavigate", "class.complete": "isComplete", "class.error": "hasError" } }, ngImport: i0, template: `
|
|
29676
30019
|
<button
|
|
29677
30020
|
type="button"
|
|
@@ -29682,18 +30025,12 @@ ClrWizardStepnavItem.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", v
|
|
|
29682
30025
|
>
|
|
29683
30026
|
<div class="clr-wizard-stepnav-link-icon">
|
|
29684
30027
|
<cds-icon
|
|
29685
|
-
*ngIf="
|
|
29686
|
-
[id]="stepIconId"
|
|
29687
|
-
shape="error-standard"
|
|
29688
|
-
role="img"
|
|
29689
|
-
[attr.aria-label]="commonStrings.keys.wizardStepError"
|
|
29690
|
-
></cds-icon>
|
|
29691
|
-
<cds-icon
|
|
29692
|
-
*ngIf="!hasError && isComplete"
|
|
30028
|
+
*ngIf="icon; let icon"
|
|
29693
30029
|
[id]="stepIconId"
|
|
29694
|
-
shape="success-standard"
|
|
29695
30030
|
role="img"
|
|
29696
|
-
|
|
30031
|
+
class="clr-wizard-stepnav-link-icon"
|
|
30032
|
+
[attr.shape]="icon.shape"
|
|
30033
|
+
[attr.aria-label]="icon.label"
|
|
29697
30034
|
></cds-icon>
|
|
29698
30035
|
</div>
|
|
29699
30036
|
|
|
@@ -29720,18 +30057,12 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImpor
|
|
|
29720
30057
|
>
|
|
29721
30058
|
<div class="clr-wizard-stepnav-link-icon">
|
|
29722
30059
|
<cds-icon
|
|
29723
|
-
*ngIf="
|
|
29724
|
-
[id]="stepIconId"
|
|
29725
|
-
shape="error-standard"
|
|
29726
|
-
role="img"
|
|
29727
|
-
[attr.aria-label]="commonStrings.keys.wizardStepError"
|
|
29728
|
-
></cds-icon>
|
|
29729
|
-
<cds-icon
|
|
29730
|
-
*ngIf="!hasError && isComplete"
|
|
30060
|
+
*ngIf="icon; let icon"
|
|
29731
30061
|
[id]="stepIconId"
|
|
29732
|
-
shape="success-standard"
|
|
29733
30062
|
role="img"
|
|
29734
|
-
|
|
30063
|
+
class="clr-wizard-stepnav-link-icon"
|
|
30064
|
+
[attr.shape]="icon.shape"
|
|
30065
|
+
[attr.aria-label]="icon.label"
|
|
29735
30066
|
></cds-icon>
|
|
29736
30067
|
</div>
|
|
29737
30068
|
|
|
@@ -29757,7 +30088,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImpor
|
|
|
29757
30088
|
'[class.error]': 'hasError',
|
|
29758
30089
|
},
|
|
29759
30090
|
}]
|
|
29760
|
-
}], ctorParameters: function () { return [{ type: WizardNavigationService }, { type: PageCollectionService }, { type: ClrCommonStringsService }]; }, propDecorators: { page: [{
|
|
30091
|
+
}], ctorParameters: function () { return [{ type: WizardNavigationService }, { type: PageCollectionService }, { type: ClrCommonStringsService }, { type: i0.ElementRef }]; }, propDecorators: { page: [{
|
|
29761
30092
|
type: Input,
|
|
29762
30093
|
args: ['page']
|
|
29763
30094
|
}] } });
|
|
@@ -30223,7 +30554,7 @@ class ClrWizard {
|
|
|
30223
30554
|
}
|
|
30224
30555
|
}
|
|
30225
30556
|
ClrWizard.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: ClrWizard, deps: [{ token: PLATFORM_ID }, { token: ClrCommonStringsService }, { token: WizardNavigationService }, { token: PageCollectionService }, { token: ButtonHubService }, { token: HeaderActionService }, { token: i0.ElementRef }, { token: i0.IterableDiffers }], target: i0.ɵɵFactoryTarget.Component });
|
|
30226
|
-
ClrWizard.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.2", type: ClrWizard, selector: "clr-wizard", inputs: { stepnavAriaLabel: ["clrWizardStepnavAriaLabel", "stepnavAriaLabel"], size: ["clrWizardSize", "size"], inPage: ["clrWizardInPage", "inPage"], inPageFillContentArea: ["clrWizardInPageFillContentArea", "inPageFillContentArea"], closable: ["clrWizardClosable", "closable"], _stopModalAnimations: ["clrWizardPreventModalAnimation", "_stopModalAnimations"], 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.wizard-in-page": "inPage", "class.wizard-in-page--fill-content-area": "inPage && inPageFillContentArea" } }, providers: [WizardNavigationService, PageCollectionService, ButtonHubService, HeaderActionService], queries: [{ propertyName: "wizardTitle", first: true, predicate: ClrWizardTitle, descendants: true }, { propertyName: "pages", predicate: ClrWizardPage, descendants: true }, { propertyName: "headerActions", predicate: ClrWizardHeaderAction }], viewQueries: [{ propertyName: "pageTitle", first: true, predicate: ["pageTitle"], descendants: true }, { propertyName: "bodyElementRef", first: true, predicate: ["body"], descendants: true }, { propertyName: "modal", first: true, predicate: ClrModal, descendants: true }], ngImport: i0, template: "<!--\n ~ Copyright (c) 2016-2025 Broadcom. All Rights Reserved.\n ~ The term \"Broadcom\" refers to Broadcom Inc. and/or its subsidiaries.\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<ng-container *ngIf=\"inPage; then wizardTemplate; else wizardModalTemplate\"></ng-container>\n\n<ng-template #wizardModalTemplate>\n <clr-modal\n [clrModalOpen]=\"_open\"\n [clrModalSize]=\"size\"\n [clrModalClosable]=\"closable\"\n [clrModalStaticBackdrop]=\"true\"\n [clrModalSkipAnimation]=\"stopModalAnimations\"\n [clrModalOverrideScrollService]=\"isInline\"\n [clrModalPreventClose]=\"true\"\n (clrModalAlternateClose)=\"modalCancel()\"\n [clrModalLabelledById]=\"wizardId\"\n >\n <ng-template #clrInternalModalContentTemplate>\n <ng-container [ngTemplateOutlet]=\"wizardTemplate\"></ng-container>\n </ng-template>\n </clr-modal>\n</ng-template>\n\n<!-- This template is tightly coupled to the modal styles. -->\n<ng-template #wizardTemplate>\n <div class=\"modal-content-wrapper\">\n <div class=\"modal-nav clr-wizard-stepnav-wrapper\" role=\"region\">\n <div class=\"clr-wizard-title\" [id]=\"wizardId\" role=\"heading\" [attr.aria-level]=\"wizardTitle.headingLevel || 1\">\n <ng-content select=\"clr-wizard-title\"></ng-content>\n </div>\n <clr-wizard-stepnav [label]=\"stepnavAriaLabel\"></clr-wizard-stepnav>\n </div>\n\n <div class=\"modal-content\">\n <div class=\"modal-header--accessible\">\n <div class=\"modal-title-wrapper\" #title cdkFocusInitial tabindex=\"-1\">\n <div\n class=\"modal-title\"\n role=\"heading\"\n [attr.aria-level]=\"navService.currentPage?.pageTitle.headingLevel || 2\"\n >\n <span tabindex=\"-1\" #pageTitle class=\"modal-title-text\">\n <ng-template [ngTemplateOutlet]=\"navService.currentPageTitle\"></ng-template>\n </span>\n
|
|
30557
|
+
ClrWizard.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.2", type: ClrWizard, selector: "clr-wizard", inputs: { stepnavAriaLabel: ["clrWizardStepnavAriaLabel", "stepnavAriaLabel"], size: ["clrWizardSize", "size"], inPage: ["clrWizardInPage", "inPage"], inPageFillContentArea: ["clrWizardInPageFillContentArea", "inPageFillContentArea"], closable: ["clrWizardClosable", "closable"], _stopModalAnimations: ["clrWizardPreventModalAnimation", "_stopModalAnimations"], 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.wizard-in-page": "inPage", "class.wizard-in-page--fill-content-area": "inPage && inPageFillContentArea" } }, providers: [WizardNavigationService, PageCollectionService, ButtonHubService, HeaderActionService], queries: [{ propertyName: "wizardTitle", first: true, predicate: ClrWizardTitle, descendants: true }, { propertyName: "pages", predicate: ClrWizardPage, descendants: true }, { propertyName: "headerActions", predicate: ClrWizardHeaderAction }], viewQueries: [{ propertyName: "pageTitle", first: true, predicate: ["pageTitle"], descendants: true }, { propertyName: "bodyElementRef", first: true, predicate: ["body"], descendants: true }, { propertyName: "modal", first: true, predicate: ClrModal, descendants: true }], ngImport: i0, template: "<!--\n ~ Copyright (c) 2016-2025 Broadcom. All Rights Reserved.\n ~ The term \"Broadcom\" refers to Broadcom Inc. and/or its subsidiaries.\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<ng-container *ngIf=\"inPage; then wizardTemplate; else wizardModalTemplate\"></ng-container>\n\n<ng-template #wizardModalTemplate>\n <clr-modal\n [clrModalOpen]=\"_open\"\n [clrModalSize]=\"size\"\n [clrModalClosable]=\"closable\"\n [clrModalStaticBackdrop]=\"true\"\n [clrModalSkipAnimation]=\"stopModalAnimations\"\n [clrModalOverrideScrollService]=\"isInline\"\n [clrModalPreventClose]=\"true\"\n (clrModalAlternateClose)=\"modalCancel()\"\n [clrModalLabelledById]=\"wizardId\"\n >\n <ng-template #clrInternalModalContentTemplate>\n <ng-container [ngTemplateOutlet]=\"wizardTemplate\"></ng-container>\n </ng-template>\n </clr-modal>\n</ng-template>\n\n<!-- This template is tightly coupled to the modal styles. -->\n<ng-template #wizardTemplate>\n <div class=\"modal-content-wrapper\">\n <div class=\"modal-nav clr-wizard-stepnav-wrapper\" role=\"region\">\n <div class=\"clr-wizard-title\" [id]=\"wizardId\" role=\"heading\" [attr.aria-level]=\"wizardTitle.headingLevel || 1\">\n <ng-content select=\"clr-wizard-title\"></ng-content>\n </div>\n <clr-wizard-stepnav [label]=\"stepnavAriaLabel\"></clr-wizard-stepnav>\n </div>\n\n <div class=\"modal-content\">\n <div class=\"modal-header--accessible\">\n <div class=\"modal-title-wrapper\" #title cdkFocusInitial tabindex=\"-1\">\n <div\n class=\"modal-title\"\n role=\"heading\"\n [attr.aria-level]=\"navService.currentPage?.pageTitle.headingLevel || 2\"\n >\n <span tabindex=\"-1\" #pageTitle class=\"modal-title-text\">\n <ng-template [ngTemplateOutlet]=\"navService.currentPageTitle\"></ng-template>\n </span>\n </div>\n </div>\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 <button\n *ngIf=\"closable && !inPage\"\n type=\"button\"\n class=\"close\"\n [attr.aria-label]=\"commonStrings.keys.close\"\n (click)=\"modalCancel()\"\n >\n <cds-icon shape=\"window-close\"></cds-icon>\n </button>\n </div>\n <div #body class=\"modal-body-wrapper\">\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>\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 </div>\n </div>\n</ng-template>\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", "clrModalOverrideScrollService"], outputs: ["clrModalOpenChange", "clrModalAlternateClose"] }, { kind: "directive", type: ClrModalBody, selector: ".modal-body" }, { kind: "directive", type: CdsIconCustomTag, selector: "cds-icon" }, { kind: "component", type: ClrWizardStepnav, selector: "clr-wizard-stepnav", inputs: ["label"] }] });
|
|
30227
30558
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: ClrWizard, decorators: [{
|
|
30228
30559
|
type: Component,
|
|
30229
30560
|
args: [{ selector: 'clr-wizard', providers: [WizardNavigationService, PageCollectionService, ButtonHubService, HeaderActionService], host: {
|
|
@@ -30233,7 +30564,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImpor
|
|
|
30233
30564
|
'[class.wizard-xl]': "size == 'xl'",
|
|
30234
30565
|
'[class.wizard-in-page]': 'inPage',
|
|
30235
30566
|
'[class.wizard-in-page--fill-content-area]': 'inPage && inPageFillContentArea',
|
|
30236
|
-
}, template: "<!--\n ~ Copyright (c) 2016-2025 Broadcom. All Rights Reserved.\n ~ The term \"Broadcom\" refers to Broadcom Inc. and/or its subsidiaries.\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<ng-container *ngIf=\"inPage; then wizardTemplate; else wizardModalTemplate\"></ng-container>\n\n<ng-template #wizardModalTemplate>\n <clr-modal\n [clrModalOpen]=\"_open\"\n [clrModalSize]=\"size\"\n [clrModalClosable]=\"closable\"\n [clrModalStaticBackdrop]=\"true\"\n [clrModalSkipAnimation]=\"stopModalAnimations\"\n [clrModalOverrideScrollService]=\"isInline\"\n [clrModalPreventClose]=\"true\"\n (clrModalAlternateClose)=\"modalCancel()\"\n [clrModalLabelledById]=\"wizardId\"\n >\n <ng-template #clrInternalModalContentTemplate>\n <ng-container [ngTemplateOutlet]=\"wizardTemplate\"></ng-container>\n </ng-template>\n </clr-modal>\n</ng-template>\n\n<!-- This template is tightly coupled to the modal styles. -->\n<ng-template #wizardTemplate>\n <div class=\"modal-content-wrapper\">\n <div class=\"modal-nav clr-wizard-stepnav-wrapper\" role=\"region\">\n <div class=\"clr-wizard-title\" [id]=\"wizardId\" role=\"heading\" [attr.aria-level]=\"wizardTitle.headingLevel || 1\">\n <ng-content select=\"clr-wizard-title\"></ng-content>\n </div>\n <clr-wizard-stepnav [label]=\"stepnavAriaLabel\"></clr-wizard-stepnav>\n </div>\n\n <div class=\"modal-content\">\n <div class=\"modal-header--accessible\">\n <div class=\"modal-title-wrapper\" #title cdkFocusInitial tabindex=\"-1\">\n <div\n class=\"modal-title\"\n role=\"heading\"\n [attr.aria-level]=\"navService.currentPage?.pageTitle.headingLevel || 2\"\n >\n <span tabindex=\"-1\" #pageTitle class=\"modal-title-text\">\n <ng-template [ngTemplateOutlet]=\"navService.currentPageTitle\"></ng-template>\n </span>\n
|
|
30567
|
+
}, template: "<!--\n ~ Copyright (c) 2016-2025 Broadcom. All Rights Reserved.\n ~ The term \"Broadcom\" refers to Broadcom Inc. and/or its subsidiaries.\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<ng-container *ngIf=\"inPage; then wizardTemplate; else wizardModalTemplate\"></ng-container>\n\n<ng-template #wizardModalTemplate>\n <clr-modal\n [clrModalOpen]=\"_open\"\n [clrModalSize]=\"size\"\n [clrModalClosable]=\"closable\"\n [clrModalStaticBackdrop]=\"true\"\n [clrModalSkipAnimation]=\"stopModalAnimations\"\n [clrModalOverrideScrollService]=\"isInline\"\n [clrModalPreventClose]=\"true\"\n (clrModalAlternateClose)=\"modalCancel()\"\n [clrModalLabelledById]=\"wizardId\"\n >\n <ng-template #clrInternalModalContentTemplate>\n <ng-container [ngTemplateOutlet]=\"wizardTemplate\"></ng-container>\n </ng-template>\n </clr-modal>\n</ng-template>\n\n<!-- This template is tightly coupled to the modal styles. -->\n<ng-template #wizardTemplate>\n <div class=\"modal-content-wrapper\">\n <div class=\"modal-nav clr-wizard-stepnav-wrapper\" role=\"region\">\n <div class=\"clr-wizard-title\" [id]=\"wizardId\" role=\"heading\" [attr.aria-level]=\"wizardTitle.headingLevel || 1\">\n <ng-content select=\"clr-wizard-title\"></ng-content>\n </div>\n <clr-wizard-stepnav [label]=\"stepnavAriaLabel\"></clr-wizard-stepnav>\n </div>\n\n <div class=\"modal-content\">\n <div class=\"modal-header--accessible\">\n <div class=\"modal-title-wrapper\" #title cdkFocusInitial tabindex=\"-1\">\n <div\n class=\"modal-title\"\n role=\"heading\"\n [attr.aria-level]=\"navService.currentPage?.pageTitle.headingLevel || 2\"\n >\n <span tabindex=\"-1\" #pageTitle class=\"modal-title-text\">\n <ng-template [ngTemplateOutlet]=\"navService.currentPageTitle\"></ng-template>\n </span>\n </div>\n </div>\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 <button\n *ngIf=\"closable && !inPage\"\n type=\"button\"\n class=\"close\"\n [attr.aria-label]=\"commonStrings.keys.close\"\n (click)=\"modalCancel()\"\n >\n <cds-icon shape=\"window-close\"></cds-icon>\n </button>\n </div>\n <div #body class=\"modal-body-wrapper\">\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>\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 </div>\n </div>\n</ng-template>\n" }]
|
|
30237
30568
|
}], ctorParameters: function () { return [{ type: undefined, decorators: [{
|
|
30238
30569
|
type: Inject,
|
|
30239
30570
|
args: [PLATFORM_ID]
|
|
@@ -30881,5 +31212,5 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImpor
|
|
|
30881
31212
|
* Generated bundle index. Do not edit.
|
|
30882
31213
|
*/
|
|
30883
31214
|
|
|
30884
|
-
export { BaseExpandableAnimation, CHANGE_KEYS, CLR_ALERT_DIRECTIVES, CLR_BUTTON_GROUP_DIRECTIVES, CLR_DATAGRID_DIRECTIVES, CLR_DATEPICKER_DIRECTIVES, CLR_DROPDOWN_DIRECTIVES, CLR_FILE_MESSAGES_TEMPLATE_CONTEXT, 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_SIDEPANEL_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, ClrBreadcrumbItem, ClrBreadcrumbs, ClrBreadcrumbsModule, 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, ClrDatagridDetail, ClrDatagridDetailBody, ClrDatagridDetailHeader, ClrDatagridFilter, ClrDatagridFooter, ClrDatagridHideableColumn, ClrDatagridItems, ClrDatagridModule, ClrDatagridPageSize, ClrDatagridPagination, ClrDatagridPlaceholder, ClrDatagridRow, ClrDatagridRowDetail, ClrDatagridSortOrder, ClrDatalist, ClrDatalistContainer, ClrDatalistInput, ClrDatalistModule, ClrDateContainer, ClrDateInput, ClrDateInputBase, ClrDateInputValidator, ClrDatepickerActions, ClrDatepickerModule, ClrDatepickerViewManager, ClrDay, ClrDaypicker, ClrDestroyService, ClrDropdown, ClrDropdownItem, ClrDropdownMenu, ClrDropdownModule, ClrDropdownTrigger, ClrEmphasisModule, ClrEndDateInput, ClrEndDateInputValidator, ClrExpandableAnimation, ClrFileError, ClrFileInfo, ClrFileInput, ClrFileInputContainer, ClrFileInputModule, ClrFileInputValidator, ClrFileInputValueAccessor, ClrFileList, ClrFileMessagesTemplate, ClrFileSuccess, 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, ClrModalConfigurationService,
|
|
31215
|
+
export { BaseExpandableAnimation, CHANGE_KEYS, CLR_ALERT_DIRECTIVES, CLR_BUTTON_GROUP_DIRECTIVES, CLR_DATAGRID_DIRECTIVES, CLR_DATEPICKER_DIRECTIVES, CLR_DROPDOWN_DIRECTIVES, CLR_FILE_MESSAGES_TEMPLATE_CONTEXT, 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_SIDEPANEL_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, ClrBreadcrumbItem, ClrBreadcrumbs, ClrBreadcrumbsModule, 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, ClrDatagridDetail, ClrDatagridDetailBody, ClrDatagridDetailHeader, ClrDatagridFilter, ClrDatagridFooter, ClrDatagridHideableColumn, ClrDatagridItems, ClrDatagridModule, ClrDatagridPageSize, ClrDatagridPagination, ClrDatagridPlaceholder, ClrDatagridRow, ClrDatagridRowDetail, ClrDatagridSortOrder, ClrDatalist, ClrDatalistContainer, ClrDatalistInput, ClrDatalistModule, ClrDateContainer, ClrDateInput, ClrDateInputBase, ClrDateInputValidator, ClrDatepickerActions, ClrDatepickerModule, ClrDatepickerViewManager, ClrDay, ClrDaypicker, ClrDestroyService, ClrDropdown, ClrDropdownItem, ClrDropdownMenu, ClrDropdownModule, ClrDropdownTrigger, ClrEmphasisModule, ClrEndDateInput, ClrEndDateInputValidator, ClrExpandableAnimation, ClrFileError, ClrFileInfo, ClrFileInput, ClrFileInputContainer, ClrFileInputModule, ClrFileInputValidator, ClrFileInputValueAccessor, ClrFileList, ClrFileMessagesTemplate, ClrFileSuccess, 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, ClrModalConfigurationService, ClrModalHostComponent, ClrModalModule, ClrMonthpicker, ClrNavLevel, ClrNavigationModule, ClrNumberInput, ClrNumberInputContainer, ClrNumberInputModule, ClrOption, ClrOptionGroup, ClrOptionItems, ClrOptionSelected, ClrOptions, ClrPassword, ClrPasswordContainer, ClrPasswordModule, ClrPopoverAnchor, ClrPopoverContent, ClrPopoverEventsService, ClrPopoverHostDirective, ClrPopoverModule, ClrPopoverPositionService, ClrPopoverToggleService, ClrProgressBar, ClrProgressBarModule, ClrRadio, ClrRadioContainer, ClrRadioModule, ClrRadioWrapper, ClrRange, ClrRangeContainer, ClrRangeModule, ClrRecursiveForOf, ClrSelect, ClrSelectContainer, ClrSelectModule, ClrSelectedState, ClrSide, ClrSidePanel, ClrSidePanelModule, ClrSignpost, ClrSignpostContent, ClrSignpostModule, ClrSignpostTitle, ClrSignpostTrigger, ClrSpinner, ClrSpinnerModule, ClrStackBlock, ClrStackContentInput, ClrStackHeader, ClrStackView, ClrStackViewCustomTags, ClrStackViewLabel, ClrStackViewModule, ClrStandaloneCdkTrapFocus, ClrStartDateInput, ClrStartDateInputValidator, ClrStepButton, ClrStepButtonType, ClrStepper, ClrStepperModule, ClrStepperPanel, ClrStopEscapePropagationDirective, ClrTab, ClrTabAction, ClrTabContent, ClrTabLink, ClrTabOverflowContent, ClrTabs, ClrTabsActions, 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, ClrWizardHeaderAction, ClrWizardModule, ClrWizardPage, ClrWizardPageButtons, ClrWizardPageHeaderActions, ClrWizardPageNavTitle, ClrWizardPageTitle, ClrWizardStepnav, ClrWizardStepnavItem, ClrWizardTitle, 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, DatagridRowDetailRenderer as ÇlrDatagridRowDetailRenderer, DatagridRowRenderer as ÇlrDatagridRowRenderer, ClrDatagridSelectionCellDirective as ÇlrDatagridSelectionCellDirective, ClrDatagridVirtualScrollDirective as ÇlrDatagridVirtualScrollDirective, DatagridWillyWonka as ÇlrDatagridWillyWonka, ExpandableOompaLoompa as ÇlrExpandableOompaLoompa, StepperOompaLoompa as ÇlrStepperOompaLoompa, StepperWillyWonka as ÇlrStepperWillyWonka, TabsWillyWonka as ÇlrTabsWillyWonka, WrappedCell as ÇlrWrappedCell, WrappedColumn as ÇlrWrappedColumn, WrappedRow as ÇlrWrappedRow };
|
|
30885
31216
|
//# sourceMappingURL=clr-angular.mjs.map
|