@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/fesm2015/clr-angular.mjs
CHANGED
|
@@ -378,6 +378,7 @@ const commonStringsDefault = {
|
|
|
378
378
|
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`,
|
|
379
379
|
// Wizard
|
|
380
380
|
wizardStep: 'Step',
|
|
381
|
+
wizardStepCurrent: 'Current',
|
|
381
382
|
wizardStepSuccess: 'Completed',
|
|
382
383
|
wizardStepError: 'Error',
|
|
383
384
|
wizardStepnavAriaLabel: 'Wizard steps',
|
|
@@ -1258,10 +1259,10 @@ class ClrStepperPanel extends ClrAccordionPanel {
|
|
|
1258
1259
|
}
|
|
1259
1260
|
}
|
|
1260
1261
|
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 });
|
|
1261
|
-
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
|
|
1262
|
+
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 });
|
|
1262
1263
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: ClrStepperPanel, decorators: [{
|
|
1263
1264
|
type: Component,
|
|
1264
|
-
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
|
|
1265
|
+
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" }]
|
|
1265
1266
|
}], ctorParameters: function () {
|
|
1266
1267
|
return [{ type: undefined, decorators: [{
|
|
1267
1268
|
type: Inject,
|
|
@@ -2636,10 +2637,18 @@ ClrButton.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15
|
|
|
2636
2637
|
[attr.id]="id"
|
|
2637
2638
|
>
|
|
2638
2639
|
<span class="spinner spinner-inline" *ngIf="loading"></span>
|
|
2639
|
-
<ng-
|
|
2640
|
+
<ng-container *ngIf="inMenu; then inMenuTemplate; else defaultTemplate"></ng-container>
|
|
2640
2641
|
</button>
|
|
2641
2642
|
</ng-template>
|
|
2642
|
-
|
|
2643
|
+
<ng-template #defaultTemplate>
|
|
2644
|
+
<ng-content></ng-content>
|
|
2645
|
+
</ng-template>
|
|
2646
|
+
<ng-template #inMenuTemplate>
|
|
2647
|
+
<span class="dropdown-item-content">
|
|
2648
|
+
<ng-container [ngTemplateOutlet]="defaultTemplate"></ng-container>
|
|
2649
|
+
</span>
|
|
2650
|
+
</ng-template>
|
|
2651
|
+
`, 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"] }] });
|
|
2643
2652
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: ClrButton, decorators: [{
|
|
2644
2653
|
type: Component,
|
|
2645
2654
|
args: [{
|
|
@@ -2656,9 +2665,17 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImpor
|
|
|
2656
2665
|
[attr.id]="id"
|
|
2657
2666
|
>
|
|
2658
2667
|
<span class="spinner spinner-inline" *ngIf="loading"></span>
|
|
2659
|
-
<ng-
|
|
2668
|
+
<ng-container *ngIf="inMenu; then inMenuTemplate; else defaultTemplate"></ng-container>
|
|
2660
2669
|
</button>
|
|
2661
2670
|
</ng-template>
|
|
2671
|
+
<ng-template #defaultTemplate>
|
|
2672
|
+
<ng-content></ng-content>
|
|
2673
|
+
</ng-template>
|
|
2674
|
+
<ng-template #inMenuTemplate>
|
|
2675
|
+
<span class="dropdown-item-content">
|
|
2676
|
+
<ng-container [ngTemplateOutlet]="defaultTemplate"></ng-container>
|
|
2677
|
+
</span>
|
|
2678
|
+
</ng-template>
|
|
2662
2679
|
`,
|
|
2663
2680
|
providers: [{ provide: LoadingListener, useExisting: ClrButton }],
|
|
2664
2681
|
}]
|
|
@@ -3154,6 +3171,11 @@ class BaseExpandableAnimation {
|
|
|
3154
3171
|
});
|
|
3155
3172
|
}
|
|
3156
3173
|
}
|
|
3174
|
+
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 });
|
|
3175
|
+
BaseExpandableAnimation.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "15.2.2", type: BaseExpandableAnimation, ngImport: i0 });
|
|
3176
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: BaseExpandableAnimation, decorators: [{
|
|
3177
|
+
type: Directive
|
|
3178
|
+
}], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: DomAdapter }, { type: i0.Renderer2 }]; } });
|
|
3157
3179
|
|
|
3158
3180
|
/*
|
|
3159
3181
|
* Copyright (c) 2016-2025 Broadcom. All Rights Reserved.
|
|
@@ -3162,8 +3184,8 @@ class BaseExpandableAnimation {
|
|
|
3162
3184
|
* The full license information can be found in LICENSE in the root directory of this project.
|
|
3163
3185
|
*/
|
|
3164
3186
|
class ClrExpandableAnimation extends BaseExpandableAnimation {
|
|
3165
|
-
constructor(
|
|
3166
|
-
super(
|
|
3187
|
+
constructor() {
|
|
3188
|
+
super(...arguments);
|
|
3167
3189
|
this.clrExpandTrigger = false;
|
|
3168
3190
|
}
|
|
3169
3191
|
get expandAnimation() {
|
|
@@ -3180,12 +3202,12 @@ class ClrExpandableAnimation extends BaseExpandableAnimation {
|
|
|
3180
3202
|
}
|
|
3181
3203
|
}
|
|
3182
3204
|
}
|
|
3183
|
-
ClrExpandableAnimation.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: ClrExpandableAnimation, deps:
|
|
3205
|
+
ClrExpandableAnimation.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: ClrExpandableAnimation, deps: null, target: i0.ɵɵFactoryTarget.Component });
|
|
3184
3206
|
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)])])] });
|
|
3185
3207
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: ClrExpandableAnimation, decorators: [{
|
|
3186
3208
|
type: Component,
|
|
3187
3209
|
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"] }]
|
|
3188
|
-
}],
|
|
3210
|
+
}], propDecorators: { clrExpandTrigger: [{
|
|
3189
3211
|
type: Input
|
|
3190
3212
|
}], expandAnimation: [{
|
|
3191
3213
|
type: HostBinding,
|
|
@@ -5307,7 +5329,13 @@ class AbstractPopover {
|
|
|
5307
5329
|
this.documentESCListener = null;
|
|
5308
5330
|
this.closeOnOutsideClickCallback = event => {
|
|
5309
5331
|
// The anchor element containing the click event origin means, the click wasn't triggered outside.
|
|
5310
|
-
if (
|
|
5332
|
+
if (event.target.shadowRoot) {
|
|
5333
|
+
const containsNode = event.composedPath().some((element) => element === this.anchorElem);
|
|
5334
|
+
if (containsNode) {
|
|
5335
|
+
return;
|
|
5336
|
+
}
|
|
5337
|
+
}
|
|
5338
|
+
else if (this.anchorElem.contains(event.target)) {
|
|
5311
5339
|
return;
|
|
5312
5340
|
}
|
|
5313
5341
|
this.toggleService.open = false;
|
|
@@ -5521,6 +5549,28 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImpor
|
|
|
5521
5549
|
args: ['clrPosition']
|
|
5522
5550
|
}] } });
|
|
5523
5551
|
|
|
5552
|
+
/*
|
|
5553
|
+
* Copyright (c) 2016-2025 Broadcom. All Rights Reserved.
|
|
5554
|
+
* The term "Broadcom" refers to Broadcom Inc. and/or its subsidiaries.
|
|
5555
|
+
* This software is released under MIT license.
|
|
5556
|
+
* The full license information can be found in LICENSE in the root directory of this project.
|
|
5557
|
+
*/
|
|
5558
|
+
function wrapHostContentInsideSpan(hostElement, renderer, wrapperClass) {
|
|
5559
|
+
if (!hostElement || !renderer) {
|
|
5560
|
+
return;
|
|
5561
|
+
}
|
|
5562
|
+
const wrapper = renderer.createElement('span');
|
|
5563
|
+
if (wrapperClass) {
|
|
5564
|
+
renderer.addClass(wrapper, wrapperClass);
|
|
5565
|
+
}
|
|
5566
|
+
// Move all existing children into the wrapper
|
|
5567
|
+
// We must loop while there are child nodes and re-append them to wrapper.
|
|
5568
|
+
while (hostElement.firstChild) {
|
|
5569
|
+
renderer.appendChild(wrapper, hostElement.firstChild);
|
|
5570
|
+
}
|
|
5571
|
+
renderer.appendChild(hostElement, wrapper);
|
|
5572
|
+
}
|
|
5573
|
+
|
|
5524
5574
|
/*
|
|
5525
5575
|
* Copyright (c) 2016-2025 Broadcom. All Rights Reserved.
|
|
5526
5576
|
* The term "Broadcom" refers to Broadcom Inc. and/or its subsidiaries.
|
|
@@ -5528,8 +5578,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImpor
|
|
|
5528
5578
|
* The full license information can be found in LICENSE in the root directory of this project.
|
|
5529
5579
|
*/
|
|
5530
5580
|
class ClrDropdownTrigger {
|
|
5531
|
-
constructor(dropdown, toggleService, el, focusHandler) {
|
|
5581
|
+
constructor(dropdown, toggleService, el, focusHandler, renderer) {
|
|
5532
5582
|
this.toggleService = toggleService;
|
|
5583
|
+
this.el = el;
|
|
5584
|
+
this.renderer = renderer;
|
|
5533
5585
|
this.isRootLevelToggle = true;
|
|
5534
5586
|
// if the containing dropdown has a parent, then this is not the root level one
|
|
5535
5587
|
if (dropdown.parent) {
|
|
@@ -5543,8 +5595,13 @@ class ClrDropdownTrigger {
|
|
|
5543
5595
|
onDropdownTriggerClick(event) {
|
|
5544
5596
|
this.toggleService.toggleWithEvent(event);
|
|
5545
5597
|
}
|
|
5598
|
+
ngAfterViewInit() {
|
|
5599
|
+
if (!this.isRootLevelToggle) {
|
|
5600
|
+
wrapHostContentInsideSpan(this.el.nativeElement, this.renderer, 'dropdown-item-content');
|
|
5601
|
+
}
|
|
5602
|
+
}
|
|
5546
5603
|
}
|
|
5547
|
-
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 });
|
|
5604
|
+
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 });
|
|
5548
5605
|
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 });
|
|
5549
5606
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: ClrDropdownTrigger, decorators: [{
|
|
5550
5607
|
type: Directive,
|
|
@@ -5560,7 +5617,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImpor
|
|
|
5560
5617
|
'[attr.aria-expanded]': 'active',
|
|
5561
5618
|
},
|
|
5562
5619
|
}]
|
|
5563
|
-
}], ctorParameters: function () { return [{ type: ClrDropdown }, { type: ClrPopoverToggleService }, { type: i0.ElementRef }, { type: DropdownFocusHandler }]; }, propDecorators: { onDropdownTriggerClick: [{
|
|
5620
|
+
}], ctorParameters: function () { return [{ type: ClrDropdown }, { type: ClrPopoverToggleService }, { type: i0.ElementRef }, { type: DropdownFocusHandler }, { type: i0.Renderer2 }]; }, propDecorators: { onDropdownTriggerClick: [{
|
|
5564
5621
|
type: HostListener,
|
|
5565
5622
|
args: ['click', ['$event']]
|
|
5566
5623
|
}] } });
|
|
@@ -5624,10 +5681,12 @@ const BASIC_FOCUSABLE_ITEM_PROVIDER = [
|
|
|
5624
5681
|
* The full license information can be found in LICENSE in the root directory of this project.
|
|
5625
5682
|
*/
|
|
5626
5683
|
class ClrDropdownItem {
|
|
5627
|
-
constructor(dropdown, _dropdownService, focusableItem) {
|
|
5684
|
+
constructor(dropdown, _dropdownService, focusableItem, el, renderer) {
|
|
5628
5685
|
this.dropdown = dropdown;
|
|
5629
5686
|
this._dropdownService = _dropdownService;
|
|
5630
5687
|
this.focusableItem = focusableItem;
|
|
5688
|
+
this.el = el;
|
|
5689
|
+
this.renderer = renderer;
|
|
5631
5690
|
}
|
|
5632
5691
|
get disabled() {
|
|
5633
5692
|
return this.focusableItem.disabled;
|
|
@@ -5645,6 +5704,9 @@ class ClrDropdownItem {
|
|
|
5645
5704
|
set dropdownItemId(value) {
|
|
5646
5705
|
this.focusableItem.id = value;
|
|
5647
5706
|
}
|
|
5707
|
+
ngAfterViewInit() {
|
|
5708
|
+
wrapHostContentInsideSpan(this.el.nativeElement, this.renderer, 'dropdown-item-content');
|
|
5709
|
+
}
|
|
5648
5710
|
onDropdownItemClick() {
|
|
5649
5711
|
// Move focus back to the root dropdown trigger.
|
|
5650
5712
|
// This is done BEFORE the dropdown is closed so that focus gets moved properly if a modal is opened.
|
|
@@ -5682,7 +5744,7 @@ class ClrDropdownItem {
|
|
|
5682
5744
|
return rootDropdown;
|
|
5683
5745
|
}
|
|
5684
5746
|
}
|
|
5685
|
-
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 });
|
|
5747
|
+
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 });
|
|
5686
5748
|
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 });
|
|
5687
5749
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: ClrDropdownItem, decorators: [{
|
|
5688
5750
|
type: Directive,
|
|
@@ -5697,7 +5759,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImpor
|
|
|
5697
5759
|
},
|
|
5698
5760
|
providers: [BASIC_FOCUSABLE_ITEM_PROVIDER],
|
|
5699
5761
|
}]
|
|
5700
|
-
}], ctorParameters: function () { return [{ type: ClrDropdown }, { type: RootDropdownService }, { type: FocusableItem }]; }, propDecorators: { disabled: [{
|
|
5762
|
+
}], ctorParameters: function () { return [{ type: ClrDropdown }, { type: RootDropdownService }, { type: FocusableItem }, { type: i0.ElementRef }, { type: i0.Renderer2 }]; }, propDecorators: { disabled: [{
|
|
5701
5763
|
type: Input,
|
|
5702
5764
|
args: ['clrDisabled']
|
|
5703
5765
|
}], dropdownItemId: [{
|
|
@@ -9062,7 +9124,7 @@ class ClrOptions {
|
|
|
9062
9124
|
}
|
|
9063
9125
|
}
|
|
9064
9126
|
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 });
|
|
9065
|
-
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: `
|
|
9127
|
+
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: `
|
|
9066
9128
|
<div *ngIf="optionSelectionService.loading" class="clr-combobox-options-loading">
|
|
9067
9129
|
<clr-spinner clrInline>
|
|
9068
9130
|
{{ commonStrings.keys.loading }}
|
|
@@ -9131,7 +9193,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImpor
|
|
|
9131
9193
|
args: ['id']
|
|
9132
9194
|
}], items: [{
|
|
9133
9195
|
type: ContentChildren,
|
|
9134
|
-
args: [ClrOption]
|
|
9196
|
+
args: [ClrOption, { descendants: true }]
|
|
9135
9197
|
}] } });
|
|
9136
9198
|
|
|
9137
9199
|
/*
|
|
@@ -9410,7 +9472,7 @@ ClrCombobox.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "
|
|
|
9410
9472
|
IF_ACTIVE_ID_PROVIDER,
|
|
9411
9473
|
FOCUS_SERVICE_PROVIDER,
|
|
9412
9474
|
COMBOBOX_FOCUS_HANDLER_PROVIDER,
|
|
9413
|
-
], 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 <
|
|
9475
|
+
], 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"] }] });
|
|
9414
9476
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: ClrCombobox, decorators: [{
|
|
9415
9477
|
type: Component,
|
|
9416
9478
|
args: [{ selector: 'clr-combobox', providers: [
|
|
@@ -9423,7 +9485,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImpor
|
|
|
9423
9485
|
'[class.aria-required]': 'true',
|
|
9424
9486
|
'[class.clr-combobox]': 'true',
|
|
9425
9487
|
'[class.clr-combobox-disabled]': 'control?.disabled',
|
|
9426
|
-
}, 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 <
|
|
9488
|
+
}, 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" }]
|
|
9427
9489
|
}], ctorParameters: function () {
|
|
9428
9490
|
return [{ type: i0.ViewContainerRef }, { type: i0.Injector }, { type: i1.NgControl, decorators: [{
|
|
9429
9491
|
type: Self
|
|
@@ -9501,6 +9563,10 @@ class ClrOptionItems {
|
|
|
9501
9563
|
this._filterField = field;
|
|
9502
9564
|
this.optionService.displayField = field;
|
|
9503
9565
|
}
|
|
9566
|
+
get hasResults() {
|
|
9567
|
+
// explicity return `undefined` instead of `false` if the answer is not known
|
|
9568
|
+
return this.filteredItems ? this.filteredItems.length : undefined;
|
|
9569
|
+
}
|
|
9504
9570
|
ngDoCheck() {
|
|
9505
9571
|
if (!this.differ) {
|
|
9506
9572
|
this.differ = this.differs.find(this.filteredItems).create(this.iterableProxy.ngForTrackBy);
|
|
@@ -9570,6 +9636,44 @@ function normalizeValue(value) {
|
|
|
9570
9636
|
.toLowerCase();
|
|
9571
9637
|
}
|
|
9572
9638
|
|
|
9639
|
+
/*
|
|
9640
|
+
* Copyright (c) 2016-2025 Broadcom. All Rights Reserved.
|
|
9641
|
+
* The term "Broadcom" refers to Broadcom Inc. and/or its subsidiaries.
|
|
9642
|
+
* This software is released under MIT license.
|
|
9643
|
+
* The full license information can be found in LICENSE in the root directory of this project.
|
|
9644
|
+
*/
|
|
9645
|
+
class ClrOptionGroup {
|
|
9646
|
+
constructor() {
|
|
9647
|
+
this.labelId = uniqueIdFactory();
|
|
9648
|
+
}
|
|
9649
|
+
}
|
|
9650
|
+
ClrOptionGroup.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: ClrOptionGroup, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
9651
|
+
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: `
|
|
9652
|
+
<span [id]="labelId" class="clr-option-group-label" role="presentation">{{ label }}</span>
|
|
9653
|
+
<ng-content></ng-content>
|
|
9654
|
+
`, isInline: true });
|
|
9655
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: ClrOptionGroup, decorators: [{
|
|
9656
|
+
type: Component,
|
|
9657
|
+
args: [{
|
|
9658
|
+
selector: 'clr-option-group',
|
|
9659
|
+
host: {
|
|
9660
|
+
'[attr.role]': '"group"',
|
|
9661
|
+
'[attr.aria-labelledby]': 'labelId',
|
|
9662
|
+
'[style.display]': 'clrOptionItems.hasResults ? undefined : "none"',
|
|
9663
|
+
},
|
|
9664
|
+
template: `
|
|
9665
|
+
<span [id]="labelId" class="clr-option-group-label" role="presentation">{{ label }}</span>
|
|
9666
|
+
<ng-content></ng-content>
|
|
9667
|
+
`,
|
|
9668
|
+
}]
|
|
9669
|
+
}], propDecorators: { label: [{
|
|
9670
|
+
type: Input,
|
|
9671
|
+
args: ['clrOptionGroupLabel']
|
|
9672
|
+
}], clrOptionItems: [{
|
|
9673
|
+
type: ContentChild,
|
|
9674
|
+
args: [ClrOptionItems]
|
|
9675
|
+
}] } });
|
|
9676
|
+
|
|
9573
9677
|
/*
|
|
9574
9678
|
* Copyright (c) 2016-2025 Broadcom. All Rights Reserved.
|
|
9575
9679
|
* The term "Broadcom" refers to Broadcom Inc. and/or its subsidiaries.
|
|
@@ -9582,7 +9686,13 @@ class ClrComboboxModule {
|
|
|
9582
9686
|
}
|
|
9583
9687
|
}
|
|
9584
9688
|
ClrComboboxModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: ClrComboboxModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
|
|
9585
|
-
ClrComboboxModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "15.2.2", ngImport: i0, type: ClrComboboxModule, declarations: [ClrCombobox,
|
|
9689
|
+
ClrComboboxModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "15.2.2", ngImport: i0, type: ClrComboboxModule, declarations: [ClrCombobox,
|
|
9690
|
+
ClrComboboxContainer,
|
|
9691
|
+
ClrOptions,
|
|
9692
|
+
ClrOption,
|
|
9693
|
+
ClrOptionGroup,
|
|
9694
|
+
ClrOptionSelected,
|
|
9695
|
+
ClrOptionItems], imports: [CommonModule,
|
|
9586
9696
|
FormsModule,
|
|
9587
9697
|
ClrIconModule,
|
|
9588
9698
|
ClrKeyFocusModule,
|
|
@@ -9594,6 +9704,7 @@ ClrComboboxModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", versi
|
|
|
9594
9704
|
ClrComboboxContainer,
|
|
9595
9705
|
ClrOptions,
|
|
9596
9706
|
ClrOption,
|
|
9707
|
+
ClrOptionGroup,
|
|
9597
9708
|
ClrOptionSelected,
|
|
9598
9709
|
ClrConditionalModule,
|
|
9599
9710
|
ClrOptionItems] });
|
|
@@ -9619,13 +9730,22 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImpor
|
|
|
9619
9730
|
ClrPopoverModuleNext,
|
|
9620
9731
|
ClrSpinnerModule,
|
|
9621
9732
|
],
|
|
9622
|
-
declarations: [
|
|
9733
|
+
declarations: [
|
|
9734
|
+
ClrCombobox,
|
|
9735
|
+
ClrComboboxContainer,
|
|
9736
|
+
ClrOptions,
|
|
9737
|
+
ClrOption,
|
|
9738
|
+
ClrOptionGroup,
|
|
9739
|
+
ClrOptionSelected,
|
|
9740
|
+
ClrOptionItems,
|
|
9741
|
+
],
|
|
9623
9742
|
exports: [
|
|
9624
9743
|
ClrCommonFormsModule,
|
|
9625
9744
|
ClrCombobox,
|
|
9626
9745
|
ClrComboboxContainer,
|
|
9627
9746
|
ClrOptions,
|
|
9628
9747
|
ClrOption,
|
|
9748
|
+
ClrOptionGroup,
|
|
9629
9749
|
ClrOptionSelected,
|
|
9630
9750
|
ClrConditionalModule,
|
|
9631
9751
|
ClrOptionItems,
|
|
@@ -10118,14 +10238,14 @@ class ClrBreadcrumbs {
|
|
|
10118
10238
|
}
|
|
10119
10239
|
}
|
|
10120
10240
|
ClrBreadcrumbs.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: ClrBreadcrumbs, deps: [{ token: ClrCommonStringsService }], target: i0.ɵɵFactoryTarget.Component });
|
|
10121
|
-
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 [
|
|
10241
|
+
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" }] });
|
|
10122
10242
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: ClrBreadcrumbs, decorators: [{
|
|
10123
10243
|
type: Component,
|
|
10124
10244
|
args: [{ selector: 'clr-breadcrumbs', host: {
|
|
10125
10245
|
class: 'clr-breadcrumb',
|
|
10126
10246
|
'[attr.aria-label]': 'commonStrings.keys.breadcrumbsLabel',
|
|
10127
10247
|
'[attr.role]': '"navigation"',
|
|
10128
|
-
}, 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 [
|
|
10248
|
+
}, 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"] }]
|
|
10129
10249
|
}], ctorParameters: function () { return [{ type: ClrCommonStringsService }]; }, propDecorators: { items: [{
|
|
10130
10250
|
type: Input
|
|
10131
10251
|
}], clrBreadcrumbItemClick: [{
|
|
@@ -14932,7 +15052,7 @@ class ClrDatepickerViewManager {
|
|
|
14932
15052
|
}
|
|
14933
15053
|
}
|
|
14934
15054
|
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 });
|
|
14935
|
-
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 <
|
|
15055
|
+
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" }] });
|
|
14936
15056
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: ClrDatepickerViewManager, decorators: [{
|
|
14937
15057
|
type: Component,
|
|
14938
15058
|
args: [{ selector: 'clr-datepicker-view-manager', providers: [DatepickerFocusService], host: {
|
|
@@ -14942,7 +15062,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImpor
|
|
|
14942
15062
|
'[attr.aria-modal]': 'true',
|
|
14943
15063
|
'[attr.aria-label]': 'commonStrings.keys.datepickerDialogLabel',
|
|
14944
15064
|
role: 'dialog',
|
|
14945
|
-
}, 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 <
|
|
15065
|
+
}, 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" }]
|
|
14946
15066
|
}], ctorParameters: function () { return [{ type: ClrCommonStringsService }, { type: ViewManagerService }, { type: DateNavigationService }, { type: DateIOService }]; } });
|
|
14947
15067
|
|
|
14948
15068
|
/*
|
|
@@ -15736,7 +15856,7 @@ class ClrFileInputContainer extends ClrAbstractContainer {
|
|
|
15736
15856
|
return this.fileInput.elementRef.nativeElement.multiple;
|
|
15737
15857
|
}
|
|
15738
15858
|
get disabled() {
|
|
15739
|
-
return this.fileInput.elementRef.nativeElement.disabled;
|
|
15859
|
+
return this.fileInput.elementRef.nativeElement.disabled || (this.control && this.control.disabled);
|
|
15740
15860
|
}
|
|
15741
15861
|
get browseButtonText() {
|
|
15742
15862
|
var _a, _b;
|
|
@@ -15821,7 +15941,7 @@ ClrFileInputContainer.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0",
|
|
|
15821
15941
|
[attr.aria-label]="fileInput?.selection?.clearFilesButtonLabel"
|
|
15822
15942
|
(click)="clearSelectedFiles()"
|
|
15823
15943
|
>
|
|
15824
|
-
<cds-icon shape="times" status="neutral"
|
|
15944
|
+
<cds-icon shape="times" status="neutral"></cds-icon>
|
|
15825
15945
|
</button>
|
|
15826
15946
|
<cds-icon
|
|
15827
15947
|
*ngIf="showInvalid"
|
|
@@ -15892,7 +16012,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImpor
|
|
|
15892
16012
|
[attr.aria-label]="fileInput?.selection?.clearFilesButtonLabel"
|
|
15893
16013
|
(click)="clearSelectedFiles()"
|
|
15894
16014
|
>
|
|
15895
|
-
<cds-icon shape="times" status="neutral"
|
|
16015
|
+
<cds-icon shape="times" status="neutral"></cds-icon>
|
|
15896
16016
|
</button>
|
|
15897
16017
|
<cds-icon
|
|
15898
16018
|
*ngIf="showInvalid"
|
|
@@ -15960,9 +16080,13 @@ class ClrFileInput extends WrappedFormControl {
|
|
|
15960
16080
|
constructor(injector, renderer, viewContainerRef, elementRef, control, commonStrings) {
|
|
15961
16081
|
super(viewContainerRef, ClrFileInputContainer, injector, control, renderer, elementRef);
|
|
15962
16082
|
this.elementRef = elementRef;
|
|
16083
|
+
this.control = control;
|
|
15963
16084
|
this.commonStrings = commonStrings;
|
|
15964
16085
|
this.selection = undefined;
|
|
15965
16086
|
}
|
|
16087
|
+
get disabled() {
|
|
16088
|
+
return this.control && this.control.disabled;
|
|
16089
|
+
}
|
|
15966
16090
|
handleChange() {
|
|
15967
16091
|
this.updateSelection();
|
|
15968
16092
|
}
|
|
@@ -15994,7 +16118,7 @@ class ClrFileInput extends WrappedFormControl {
|
|
|
15994
16118
|
}
|
|
15995
16119
|
}
|
|
15996
16120
|
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 });
|
|
15997
|
-
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 });
|
|
16121
|
+
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 });
|
|
15998
16122
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: ClrFileInput, decorators: [{
|
|
15999
16123
|
type: Directive,
|
|
16000
16124
|
args: [{
|
|
@@ -16011,7 +16135,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImpor
|
|
|
16011
16135
|
}, {
|
|
16012
16136
|
type: Optional
|
|
16013
16137
|
}] }, { type: ClrCommonStringsService }];
|
|
16014
|
-
}, propDecorators: {
|
|
16138
|
+
}, propDecorators: { disabled: [{
|
|
16139
|
+
type: HostBinding,
|
|
16140
|
+
args: ['disabled']
|
|
16141
|
+
}], handleChange: [{
|
|
16015
16142
|
type: HostListener,
|
|
16016
16143
|
args: ['change']
|
|
16017
16144
|
}] } });
|
|
@@ -16207,6 +16334,9 @@ class ClrNumberInputContainer extends ClrAbstractContainer {
|
|
|
16207
16334
|
this.focus = false;
|
|
16208
16335
|
this.subscriptions.push(focusService.focusChange.subscribe(state => (this.focus = state)));
|
|
16209
16336
|
}
|
|
16337
|
+
focusOut() {
|
|
16338
|
+
this.input.dispatchBlur();
|
|
16339
|
+
}
|
|
16210
16340
|
}
|
|
16211
16341
|
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 });
|
|
16212
16342
|
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: `
|
|
@@ -16214,7 +16344,7 @@ ClrNumberInputContainer.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0"
|
|
|
16214
16344
|
<label *ngIf="!label && addGrid()"></label>
|
|
16215
16345
|
<div class="clr-control-container" [ngClass]="controlClass()">
|
|
16216
16346
|
<div class="clr-number-input-wrapper">
|
|
16217
|
-
<div class="clr-input-group" [class.clr-focus]="focus">
|
|
16347
|
+
<div class="clr-input-group" [class.clr-focus]="focus" (focusout)="focusOut()">
|
|
16218
16348
|
<ng-content select="[clrNumberInput]"></ng-content>
|
|
16219
16349
|
<div class="clr-input-group-actions">
|
|
16220
16350
|
<button
|
|
@@ -16265,7 +16395,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImpor
|
|
|
16265
16395
|
<label *ngIf="!label && addGrid()"></label>
|
|
16266
16396
|
<div class="clr-control-container" [ngClass]="controlClass()">
|
|
16267
16397
|
<div class="clr-number-input-wrapper">
|
|
16268
|
-
<div class="clr-input-group" [class.clr-focus]="focus">
|
|
16398
|
+
<div class="clr-input-group" [class.clr-focus]="focus" (focusout)="focusOut()">
|
|
16269
16399
|
<ng-content select="[clrNumberInput]"></ng-content>
|
|
16270
16400
|
<div class="clr-input-group-actions">
|
|
16271
16401
|
<button
|
|
@@ -16359,14 +16489,21 @@ class ClrNumberInput extends WrappedFormControl {
|
|
|
16359
16489
|
}
|
|
16360
16490
|
stepUp() {
|
|
16361
16491
|
this.el.nativeElement.stepUp();
|
|
16362
|
-
this.
|
|
16492
|
+
this.dispatchStepChangeEvents();
|
|
16363
16493
|
this.control.control.markAllAsTouched();
|
|
16364
16494
|
}
|
|
16365
16495
|
stepDown() {
|
|
16366
16496
|
this.el.nativeElement.stepDown();
|
|
16367
|
-
this.
|
|
16497
|
+
this.dispatchStepChangeEvents();
|
|
16368
16498
|
this.control.control.markAllAsTouched();
|
|
16369
16499
|
}
|
|
16500
|
+
dispatchBlur() {
|
|
16501
|
+
this.el.nativeElement.dispatchEvent(new Event('blur', { bubbles: true, cancelable: true }));
|
|
16502
|
+
}
|
|
16503
|
+
dispatchStepChangeEvents() {
|
|
16504
|
+
this.el.nativeElement.dispatchEvent(new Event('input', { bubbles: true, cancelable: true }));
|
|
16505
|
+
this.el.nativeElement.dispatchEvent(new Event('change', { bubbles: true, cancelable: true }));
|
|
16506
|
+
}
|
|
16370
16507
|
}
|
|
16371
16508
|
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 });
|
|
16372
16509
|
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 });
|
|
@@ -18034,9 +18171,6 @@ class DefaultKeyNavigationStrategy {
|
|
|
18034
18171
|
* The full license information can be found in LICENSE in the root directory of this project.
|
|
18035
18172
|
*/
|
|
18036
18173
|
class ExpandedRowKeyNavigationStrategy extends DefaultKeyNavigationStrategy {
|
|
18037
|
-
constructor(utils) {
|
|
18038
|
-
super(utils);
|
|
18039
|
-
}
|
|
18040
18174
|
keyUp(currentCellCoords) {
|
|
18041
18175
|
const nextCellCoords = this.utils.createNextCellCoords(currentCellCoords);
|
|
18042
18176
|
if (currentCellCoords.y === 0) {
|
|
@@ -18202,9 +18336,6 @@ class ExpandedRowKeyNavigationStrategy extends DefaultKeyNavigationStrategy {
|
|
|
18202
18336
|
* The full license information can be found in LICENSE in the root directory of this project.
|
|
18203
18337
|
*/
|
|
18204
18338
|
class ExpandedColumnsRowKeyNavigationStrategy extends ExpandedRowKeyNavigationStrategy {
|
|
18205
|
-
constructor(utils) {
|
|
18206
|
-
super(utils);
|
|
18207
|
-
}
|
|
18208
18339
|
keyUp(currentCellCoords) {
|
|
18209
18340
|
const nextCellCoords = this.utils.createNextCellCoords(currentCellCoords);
|
|
18210
18341
|
if (currentCellCoords.y === 0) {
|
|
@@ -18360,9 +18491,22 @@ class KeyNavigationUtils {
|
|
|
18360
18491
|
};
|
|
18361
18492
|
return coordinates;
|
|
18362
18493
|
}
|
|
18494
|
+
get averageRowHeight() {
|
|
18495
|
+
const heightSum = Array.from(this.rows.values()).reduce((sum, row) => {
|
|
18496
|
+
return sum + row.clientHeight;
|
|
18497
|
+
}, 0);
|
|
18498
|
+
return Math.round(heightSum / this.rows.length);
|
|
18499
|
+
}
|
|
18363
18500
|
get itemsPerPage() {
|
|
18364
18501
|
var _a;
|
|
18365
|
-
return Math.floor(((_a = this.host) === null || _a === void 0 ? void 0 : _a.querySelector('.datagrid').clientHeight) / this.
|
|
18502
|
+
return Math.floor(((_a = this.host) === null || _a === void 0 ? void 0 : _a.querySelector('.datagrid').clientHeight) / this.averageRowHeight) - 1 || 0;
|
|
18503
|
+
}
|
|
18504
|
+
setAriaRowIndexTo(cellCoords) {
|
|
18505
|
+
let ariaRowIndex = this.rows[cellCoords.y].getAttribute('aria-rowindex');
|
|
18506
|
+
if (!ariaRowIndex) {
|
|
18507
|
+
ariaRowIndex = this.rows[cellCoords.y - 1].getAttribute('aria-rowindex');
|
|
18508
|
+
}
|
|
18509
|
+
cellCoords.ariaRowIndex = ariaRowIndex;
|
|
18366
18510
|
}
|
|
18367
18511
|
getNextItemCoordinate(e) {
|
|
18368
18512
|
const currentCellCoords = this.currentCellCoordinates;
|
|
@@ -18466,15 +18610,16 @@ function isActionableItem(el) {
|
|
|
18466
18610
|
class KeyNavigationGridController {
|
|
18467
18611
|
constructor(zone) {
|
|
18468
18612
|
this.zone = zone;
|
|
18613
|
+
this.nextCellCoordsEmitter = new EventEmitter(false);
|
|
18469
18614
|
this.skipItemFocus = false;
|
|
18470
|
-
this.
|
|
18471
|
-
this.destroy$ = new Subject();
|
|
18472
|
-
this._activeCell = null;
|
|
18615
|
+
this.preventScrollOnFocus = false;
|
|
18473
18616
|
this.config = {
|
|
18474
18617
|
keyGridRows: '[role=row]:not(.datagrid-placeholder):not([style*="display: none"])',
|
|
18475
18618
|
keyGridCells: '[role=gridcell]:not(.datagrid-hidden-column):not(.datagrid-placeholder-content), [role=columnheader]:not(.datagrid-hidden-column):not(.datagrid-placeholder-content), .datagrid-detail-caret',
|
|
18476
18619
|
keyGrid: '[role=grid]',
|
|
18477
18620
|
};
|
|
18621
|
+
this.listenersAdded = false;
|
|
18622
|
+
this.destroy$ = new Subject();
|
|
18478
18623
|
}
|
|
18479
18624
|
ngOnDestroy() {
|
|
18480
18625
|
this.destroy$.next();
|
|
@@ -18494,22 +18639,17 @@ class KeyNavigationGridController {
|
|
|
18494
18639
|
? Array.from(this.keyNavUtils.cells).find(c => c === e.target || c === e.target.closest(this.config.keyGridCells))
|
|
18495
18640
|
: null;
|
|
18496
18641
|
if (activeCell) {
|
|
18497
|
-
this.setActiveCell(activeCell
|
|
18642
|
+
this.setActiveCell(activeCell);
|
|
18643
|
+
if (!isActionableItem(e.target)) {
|
|
18644
|
+
this.focusElement(activeCell);
|
|
18645
|
+
}
|
|
18498
18646
|
}
|
|
18499
18647
|
}
|
|
18500
18648
|
});
|
|
18501
18649
|
fromEvent(this.keyNavUtils.grid, 'wheel')
|
|
18502
18650
|
.pipe(takeUntil(this.destroy$))
|
|
18503
18651
|
.subscribe(() => {
|
|
18504
|
-
this.
|
|
18505
|
-
});
|
|
18506
|
-
fromEvent(this.keyNavUtils.grid, 'focusout')
|
|
18507
|
-
.pipe(debounceTime(0), takeUntil(this.destroy$))
|
|
18508
|
-
.subscribe(() => {
|
|
18509
|
-
if (this.keyNavUtils.grid.contains(document.activeElement)) {
|
|
18510
|
-
return;
|
|
18511
|
-
}
|
|
18512
|
-
this.removeActiveCell();
|
|
18652
|
+
this.nextCellCoordsEmitter.emit(null);
|
|
18513
18653
|
});
|
|
18514
18654
|
fromEvent(this.keyNavUtils.grid, 'keydown')
|
|
18515
18655
|
.pipe(takeUntil(this.destroy$))
|
|
@@ -18528,11 +18668,19 @@ class KeyNavigationGridController {
|
|
|
18528
18668
|
e.key === Keys.PageUp ||
|
|
18529
18669
|
e.key === Keys.PageDown) {
|
|
18530
18670
|
const nextCellCoords = this.keyNavUtils.getNextItemCoordinate(e);
|
|
18671
|
+
if (nextCellCoords.y > 0 &&
|
|
18672
|
+
(e.key === Keys.ArrowUp || e.key === Keys.ArrowDown || e.key === Keys.PageUp || e.key === Keys.PageDown)) {
|
|
18673
|
+
this.keyNavUtils.setAriaRowIndexTo(nextCellCoords);
|
|
18674
|
+
this.nextCellCoordsEmitter.emit(nextCellCoords);
|
|
18675
|
+
}
|
|
18531
18676
|
const activeItem = this.keyNavUtils.rows
|
|
18532
18677
|
? Array.from(this.keyNavUtils.getCellsForRow(nextCellCoords.y))[nextCellCoords.x]
|
|
18533
18678
|
: null;
|
|
18534
18679
|
if (activeItem) {
|
|
18535
18680
|
this.setActiveCell(activeItem);
|
|
18681
|
+
this.focusElement(activeItem, {
|
|
18682
|
+
preventScroll: this.preventScrollOnFocus && !!nextCellCoords.ariaRowIndex,
|
|
18683
|
+
});
|
|
18536
18684
|
}
|
|
18537
18685
|
e.preventDefault();
|
|
18538
18686
|
}
|
|
@@ -18551,13 +18699,7 @@ class KeyNavigationGridController {
|
|
|
18551
18699
|
const firstCell = this.keyNavUtils.cells ? this.keyNavUtils.cells[0] : null;
|
|
18552
18700
|
firstCell === null || firstCell === void 0 ? void 0 : firstCell.setAttribute('tabindex', '0');
|
|
18553
18701
|
}
|
|
18554
|
-
|
|
18555
|
-
this._activeCell = null;
|
|
18556
|
-
}
|
|
18557
|
-
getActiveCell() {
|
|
18558
|
-
return this._activeCell;
|
|
18559
|
-
}
|
|
18560
|
-
setActiveCell(activeCell, { keepFocus } = { keepFocus: false }) {
|
|
18702
|
+
setActiveCell(activeCell) {
|
|
18561
18703
|
const prior = this.keyNavUtils.cells
|
|
18562
18704
|
? Array.from(this.keyNavUtils.cells).find(c => c.getAttribute('tabindex') === '0')
|
|
18563
18705
|
: null;
|
|
@@ -18565,18 +18707,20 @@ class KeyNavigationGridController {
|
|
|
18565
18707
|
prior.setAttribute('tabindex', '-1');
|
|
18566
18708
|
}
|
|
18567
18709
|
activeCell.setAttribute('tabindex', '0');
|
|
18568
|
-
|
|
18569
|
-
|
|
18570
|
-
|
|
18571
|
-
|
|
18572
|
-
elementToFocus = activeCell;
|
|
18573
|
-
}
|
|
18574
|
-
else {
|
|
18575
|
-
const tabbableElements = getTabbableItems(activeCell);
|
|
18576
|
-
elementToFocus = tabbableElements.length ? tabbableElements[0] : activeCell;
|
|
18577
|
-
}
|
|
18578
|
-
elementToFocus.focus();
|
|
18710
|
+
}
|
|
18711
|
+
focusElement(activeCell, options = { preventScroll: false }) {
|
|
18712
|
+
if (this.skipItemFocus) {
|
|
18713
|
+
return;
|
|
18579
18714
|
}
|
|
18715
|
+
let elementToFocus;
|
|
18716
|
+
if (activeCell.getAttribute('role') === 'columnheader') {
|
|
18717
|
+
elementToFocus = activeCell;
|
|
18718
|
+
}
|
|
18719
|
+
else {
|
|
18720
|
+
const tabbableElements = getTabbableItems(activeCell);
|
|
18721
|
+
elementToFocus = tabbableElements.length ? tabbableElements[0] : activeCell;
|
|
18722
|
+
}
|
|
18723
|
+
elementToFocus.focus(options);
|
|
18580
18724
|
}
|
|
18581
18725
|
}
|
|
18582
18726
|
KeyNavigationGridController.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: KeyNavigationGridController, deps: [{ token: i0.NgZone }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
@@ -18648,36 +18792,17 @@ class ClrDatagridFilter extends DatagridFilterRegistrar {
|
|
|
18648
18792
|
get active() {
|
|
18649
18793
|
return !!this.filter && this.filter.isActive();
|
|
18650
18794
|
}
|
|
18651
|
-
ngOnChanges() {
|
|
18652
|
-
setTimeout(() => {
|
|
18653
|
-
this.setToggleButtonAriaLabel();
|
|
18654
|
-
});
|
|
18655
|
-
}
|
|
18656
18795
|
ngOnDestroy() {
|
|
18657
18796
|
super.ngOnDestroy();
|
|
18658
18797
|
this.subs.forEach(sub => sub.unsubscribe());
|
|
18659
18798
|
}
|
|
18660
|
-
/**
|
|
18661
|
-
* This is not in a getter to prevent "expression has changed after it was checked" errors.
|
|
18662
|
-
* And it's more performant this way since it only runs on change.
|
|
18663
|
-
*/
|
|
18664
|
-
setToggleButtonAriaLabel() {
|
|
18665
|
-
var _a;
|
|
18666
|
-
const columnElement = (_a = this.elementRef.nativeElement) === null || _a === void 0 ? void 0 : _a.closest('clr-dg-column');
|
|
18667
|
-
const columnTitleElement = columnElement === null || columnElement === void 0 ? void 0 : columnElement.querySelector('.datagrid-column-title');
|
|
18668
|
-
const columnTitle = columnTitleElement === null || columnTitleElement === void 0 ? void 0 : columnTitleElement.textContent.trim().toLocaleLowerCase();
|
|
18669
|
-
this.toggleButtonAriaLabel = this.commonStrings.parse(this.commonStrings.keys.datagridFilterAriaLabel, {
|
|
18670
|
-
COLUMN: columnTitle || '',
|
|
18671
|
-
});
|
|
18672
|
-
}
|
|
18673
18799
|
}
|
|
18674
18800
|
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 });
|
|
18675
|
-
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,
|
|
18801
|
+
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: `
|
|
18676
18802
|
<button
|
|
18677
18803
|
class="datagrid-filter-toggle"
|
|
18678
18804
|
type="button"
|
|
18679
18805
|
#anchor
|
|
18680
|
-
[attr.aria-label]="toggleButtonAriaLabel"
|
|
18681
18806
|
[attr.aria-expanded]="ariaExpanded"
|
|
18682
18807
|
[attr.aria-controls]="popoverId"
|
|
18683
18808
|
clrPopoverAnchor
|
|
@@ -18720,7 +18845,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImpor
|
|
|
18720
18845
|
class="datagrid-filter-toggle"
|
|
18721
18846
|
type="button"
|
|
18722
18847
|
#anchor
|
|
18723
|
-
[attr.aria-label]="toggleButtonAriaLabel"
|
|
18724
18848
|
[attr.aria-expanded]="ariaExpanded"
|
|
18725
18849
|
[attr.aria-controls]="popoverId"
|
|
18726
18850
|
clrPopoverAnchor
|
|
@@ -20223,13 +20347,14 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImpor
|
|
|
20223
20347
|
* The full license information can be found in LICENSE in the root directory of this project.
|
|
20224
20348
|
*/
|
|
20225
20349
|
class ClrDatagridColumn extends DatagridFilterRegistrar {
|
|
20226
|
-
constructor(el, _sort, filters, vcr, detailService, changeDetectorRef) {
|
|
20350
|
+
constructor(el, _sort, filters, vcr, detailService, changeDetectorRef, commonStrings) {
|
|
20227
20351
|
super(filters);
|
|
20228
20352
|
this.el = el;
|
|
20229
20353
|
this._sort = _sort;
|
|
20230
20354
|
this.vcr = vcr;
|
|
20231
20355
|
this.detailService = detailService;
|
|
20232
20356
|
this.changeDetectorRef = changeDetectorRef;
|
|
20357
|
+
this.commonStrings = commonStrings;
|
|
20233
20358
|
this.sortOrderChange = new EventEmitter();
|
|
20234
20359
|
this.filterValueChange = new EventEmitter();
|
|
20235
20360
|
/**
|
|
@@ -20399,6 +20524,9 @@ class ClrDatagridColumn extends DatagridFilterRegistrar {
|
|
|
20399
20524
|
ngOnInit() {
|
|
20400
20525
|
this.wrappedInjector = new HostWrapper(WrappedColumn, this.vcr);
|
|
20401
20526
|
}
|
|
20527
|
+
ngAfterViewInit() {
|
|
20528
|
+
this.setFilterToggleAriaLabel();
|
|
20529
|
+
}
|
|
20402
20530
|
ngOnChanges(changes) {
|
|
20403
20531
|
if (changes.colType &&
|
|
20404
20532
|
changes.colType.currentValue &&
|
|
@@ -20438,6 +20566,15 @@ class ClrDatagridColumn extends DatagridFilterRegistrar {
|
|
|
20438
20566
|
}
|
|
20439
20567
|
});
|
|
20440
20568
|
}
|
|
20569
|
+
setFilterToggleAriaLabel() {
|
|
20570
|
+
var _a;
|
|
20571
|
+
const filterToggle = this.el.nativeElement.querySelector('.datagrid-filter-toggle');
|
|
20572
|
+
if (filterToggle) {
|
|
20573
|
+
filterToggle.ariaLabel = this.commonStrings.parse(this.commonStrings.keys.datagridFilterAriaLabel, {
|
|
20574
|
+
COLUMN: (_a = this === null || this === void 0 ? void 0 : this.titleContainer) === null || _a === void 0 ? void 0 : _a.nativeElement.textContent.trim().toLocaleLowerCase(),
|
|
20575
|
+
});
|
|
20576
|
+
}
|
|
20577
|
+
}
|
|
20441
20578
|
listenForSortingChanges() {
|
|
20442
20579
|
return this._sort.change.subscribe(sort => {
|
|
20443
20580
|
// Need to manually mark the component to be checked
|
|
@@ -20467,10 +20604,10 @@ class ClrDatagridColumn extends DatagridFilterRegistrar {
|
|
|
20467
20604
|
}
|
|
20468
20605
|
}
|
|
20469
20606
|
}
|
|
20470
|
-
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 });
|
|
20471
|
-
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: `
|
|
20607
|
+
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 });
|
|
20608
|
+
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: `
|
|
20472
20609
|
<div class="datagrid-column-flex">
|
|
20473
|
-
<button class="datagrid-column-title" *ngIf="sortable" (click)="sort()" type="button">
|
|
20610
|
+
<button class="datagrid-column-title" *ngIf="sortable" (click)="sort()" type="button" #titleContainer>
|
|
20474
20611
|
<ng-container *ngTemplateOutlet="columnTitle"></ng-container>
|
|
20475
20612
|
<cds-icon
|
|
20476
20613
|
*ngIf="sortDirection"
|
|
@@ -20502,7 +20639,7 @@ ClrDatagridColumn.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", vers
|
|
|
20502
20639
|
<ng-content></ng-content>
|
|
20503
20640
|
</ng-template>
|
|
20504
20641
|
|
|
20505
|
-
<span class="datagrid-column-title" *ngIf="!sortable">
|
|
20642
|
+
<span class="datagrid-column-title" *ngIf="!sortable" #titleContainer>
|
|
20506
20643
|
<ng-container *ngTemplateOutlet="columnTitle"></ng-container>
|
|
20507
20644
|
</span>
|
|
20508
20645
|
|
|
@@ -20515,7 +20652,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImpor
|
|
|
20515
20652
|
selector: 'clr-dg-column',
|
|
20516
20653
|
template: `
|
|
20517
20654
|
<div class="datagrid-column-flex">
|
|
20518
|
-
<button class="datagrid-column-title" *ngIf="sortable" (click)="sort()" type="button">
|
|
20655
|
+
<button class="datagrid-column-title" *ngIf="sortable" (click)="sort()" type="button" #titleContainer>
|
|
20519
20656
|
<ng-container *ngTemplateOutlet="columnTitle"></ng-container>
|
|
20520
20657
|
<cds-icon
|
|
20521
20658
|
*ngIf="sortDirection"
|
|
@@ -20547,7 +20684,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImpor
|
|
|
20547
20684
|
<ng-content></ng-content>
|
|
20548
20685
|
</ng-template>
|
|
20549
20686
|
|
|
20550
|
-
<span class="datagrid-column-title" *ngIf="!sortable">
|
|
20687
|
+
<span class="datagrid-column-title" *ngIf="!sortable" #titleContainer>
|
|
20551
20688
|
<ng-container *ngTemplateOutlet="columnTitle"></ng-container>
|
|
20552
20689
|
</span>
|
|
20553
20690
|
|
|
@@ -20562,7 +20699,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImpor
|
|
|
20562
20699
|
},
|
|
20563
20700
|
changeDetection: ChangeDetectionStrategy.OnPush,
|
|
20564
20701
|
}]
|
|
20565
|
-
}], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: Sort }, { type: FiltersProvider }, { type: i0.ViewContainerRef }, { type: DetailService }, { type: i0.ChangeDetectorRef }]; }, propDecorators: { filterStringPlaceholder: [{
|
|
20702
|
+
}], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: Sort }, { type: FiltersProvider }, { type: i0.ViewContainerRef }, { type: DetailService }, { type: i0.ChangeDetectorRef }, { type: ClrCommonStringsService }]; }, propDecorators: { filterStringPlaceholder: [{
|
|
20566
20703
|
type: Input,
|
|
20567
20704
|
args: ['clrFilterStringPlaceholder']
|
|
20568
20705
|
}], filterNumberMaxPlaceholder: [{
|
|
@@ -20577,6 +20714,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImpor
|
|
|
20577
20714
|
}], filterValueChange: [{
|
|
20578
20715
|
type: Output,
|
|
20579
20716
|
args: ['clrFilterValueChange']
|
|
20717
|
+
}], titleContainer: [{
|
|
20718
|
+
type: ViewChild,
|
|
20719
|
+
args: ['titleContainer', { read: ElementRef }]
|
|
20580
20720
|
}], colType: [{
|
|
20581
20721
|
type: Input,
|
|
20582
20722
|
args: ['clrDgColType']
|
|
@@ -21473,60 +21613,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImpor
|
|
|
21473
21613
|
args: ['click', ['$event']]
|
|
21474
21614
|
}] } });
|
|
21475
21615
|
|
|
21476
|
-
/*
|
|
21477
|
-
* Copyright (c) 2016-2025 Broadcom. All Rights Reserved.
|
|
21478
|
-
* The term "Broadcom" refers to Broadcom Inc. and/or its subsidiaries.
|
|
21479
|
-
* This software is released under MIT license.
|
|
21480
|
-
* The full license information can be found in LICENSE in the root directory of this project.
|
|
21481
|
-
*/
|
|
21482
|
-
class DatagridCellRenderer {
|
|
21483
|
-
constructor(el, renderer, organizer) {
|
|
21484
|
-
this.el = el;
|
|
21485
|
-
this.renderer = renderer;
|
|
21486
|
-
this.subscriptions = [];
|
|
21487
|
-
this.subscriptions.push(organizer.filterRenderSteps(DatagridRenderStep.CLEAR_WIDTHS).subscribe(() => this.clearWidth()));
|
|
21488
|
-
}
|
|
21489
|
-
ngOnDestroy() {
|
|
21490
|
-
this.subscriptions.forEach(sub => sub.unsubscribe());
|
|
21491
|
-
if (this.stateSubscription) {
|
|
21492
|
-
this.stateSubscription.unsubscribe();
|
|
21493
|
-
}
|
|
21494
|
-
}
|
|
21495
|
-
resetState(state) {
|
|
21496
|
-
this.setWidth(state);
|
|
21497
|
-
this.setHidden(state);
|
|
21498
|
-
}
|
|
21499
|
-
setWidth(state) {
|
|
21500
|
-
if (state.strictWidth) {
|
|
21501
|
-
this.renderer.addClass(this.el.nativeElement, STRICT_WIDTH_CLASS);
|
|
21502
|
-
}
|
|
21503
|
-
else {
|
|
21504
|
-
this.renderer.removeClass(this.el.nativeElement, STRICT_WIDTH_CLASS);
|
|
21505
|
-
}
|
|
21506
|
-
this.renderer.setStyle(this.el.nativeElement, 'width', state.width + 'px');
|
|
21507
|
-
}
|
|
21508
|
-
setHidden(state) {
|
|
21509
|
-
if (state.hidden) {
|
|
21510
|
-
this.renderer.addClass(this.el.nativeElement, HIDDEN_COLUMN_CLASS);
|
|
21511
|
-
}
|
|
21512
|
-
else {
|
|
21513
|
-
this.renderer.removeClass(this.el.nativeElement, HIDDEN_COLUMN_CLASS);
|
|
21514
|
-
}
|
|
21515
|
-
}
|
|
21516
|
-
clearWidth() {
|
|
21517
|
-
this.renderer.removeClass(this.el.nativeElement, STRICT_WIDTH_CLASS);
|
|
21518
|
-
this.renderer.setStyle(this.el.nativeElement, 'width', null);
|
|
21519
|
-
}
|
|
21520
|
-
}
|
|
21521
|
-
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 });
|
|
21522
|
-
DatagridCellRenderer.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "15.2.2", type: DatagridCellRenderer, selector: "clr-dg-cell", ngImport: i0 });
|
|
21523
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: DatagridCellRenderer, decorators: [{
|
|
21524
|
-
type: Directive,
|
|
21525
|
-
args: [{
|
|
21526
|
-
selector: 'clr-dg-cell',
|
|
21527
|
-
}]
|
|
21528
|
-
}], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: i0.Renderer2 }, { type: DatagridRenderOrganizer }]; } });
|
|
21529
|
-
|
|
21530
21616
|
/*
|
|
21531
21617
|
* Copyright (c) 2016-2025 Broadcom. All Rights Reserved.
|
|
21532
21618
|
* The term "Broadcom" refers to Broadcom Inc. and/or its subsidiaries.
|
|
@@ -21543,6 +21629,7 @@ class ClrDatagridRow {
|
|
|
21543
21629
|
this.detailService = detailService;
|
|
21544
21630
|
this.displayMode = displayMode;
|
|
21545
21631
|
this.vcr = vcr;
|
|
21632
|
+
this.el = el;
|
|
21546
21633
|
this.commonStrings = commonStrings;
|
|
21547
21634
|
this.items = items;
|
|
21548
21635
|
this.document = document;
|
|
@@ -21753,7 +21840,7 @@ class ClrDatagridRow {
|
|
|
21753
21840
|
selectRow(selected = !this.selected, $event) {
|
|
21754
21841
|
// The label also captures clicks that bubble up to the row event listener, causing
|
|
21755
21842
|
// this handler to run twice. This exits early to prevent toggling the checkbox twice.
|
|
21756
|
-
if (!this.selection.rowSelectionMode || $event.target.tagName === 'LABEL') {
|
|
21843
|
+
if (!this.selection.rowSelectionMode || $event.target.tagName === 'LABEL' || !this._selectable) {
|
|
21757
21844
|
return;
|
|
21758
21845
|
}
|
|
21759
21846
|
if (this.selection.selectionType === this.SELECTION_TYPE.Single) {
|
|
@@ -21792,7 +21879,7 @@ ClrDatagridRow.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version
|
|
|
21792
21879
|
DatagridIfExpandService,
|
|
21793
21880
|
{ provide: IfExpandService, useExisting: DatagridIfExpandService },
|
|
21794
21881
|
{ provide: LoadingListener, useExisting: DatagridIfExpandService },
|
|
21795
|
-
], 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
|
|
21882
|
+
], 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" }] });
|
|
21796
21883
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: ClrDatagridRow, decorators: [{
|
|
21797
21884
|
type: Component,
|
|
21798
21885
|
args: [{ selector: 'clr-dg-row', host: {
|
|
@@ -21805,7 +21892,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImpor
|
|
|
21805
21892
|
DatagridIfExpandService,
|
|
21806
21893
|
{ provide: IfExpandService, useExisting: DatagridIfExpandService },
|
|
21807
21894
|
{ provide: LoadingListener, useExisting: DatagridIfExpandService },
|
|
21808
|
-
], 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
|
|
21895
|
+
], 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" }]
|
|
21809
21896
|
}], ctorParameters: function () {
|
|
21810
21897
|
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: [{
|
|
21811
21898
|
type: Inject,
|
|
@@ -21955,6 +22042,7 @@ const defaultCdkFixedSizeVirtualScrollInputs = {
|
|
|
21955
22042
|
};
|
|
21956
22043
|
class ClrDatagridVirtualScrollDirective {
|
|
21957
22044
|
constructor(changeDetectorRef, iterableDiffers, items, ngZone, renderer2, templateRef, viewContainerRef, directionality, scrollDispatcher, viewportRuler, datagrid, columnsService, injector) {
|
|
22045
|
+
var _a;
|
|
21958
22046
|
this.changeDetectorRef = changeDetectorRef;
|
|
21959
22047
|
this.iterableDiffers = iterableDiffers;
|
|
21960
22048
|
this.items = items;
|
|
@@ -21970,9 +22058,11 @@ class ClrDatagridVirtualScrollDirective {
|
|
|
21970
22058
|
this.injector = injector;
|
|
21971
22059
|
this.renderedRangeChange = new EventEmitter();
|
|
21972
22060
|
this.persistItems = true;
|
|
22061
|
+
this.shouldUpdateAriaRowIndexes = false;
|
|
21973
22062
|
this._cdkFixedSizeVirtualScrollInputs = Object.assign({}, defaultCdkFixedSizeVirtualScrollInputs);
|
|
21974
22063
|
this.subscriptions = [];
|
|
21975
22064
|
this.topIndex = 0;
|
|
22065
|
+
// @deprecated remove the mutation observer when `datagrid-compact` class is deleted
|
|
21976
22066
|
this.mutationChanges = new MutationObserver((mutations) => {
|
|
21977
22067
|
mutations.forEach((mutation) => {
|
|
21978
22068
|
// it is possible this to be called twice because the old class is removed and the new added
|
|
@@ -21990,12 +22080,21 @@ class ClrDatagridVirtualScrollDirective {
|
|
|
21990
22080
|
this.datagridElementRef = datagrid.el;
|
|
21991
22081
|
// default
|
|
21992
22082
|
this.cdkVirtualForTemplateCacheSize = 20;
|
|
22083
|
+
const rowHeightToken = window.getComputedStyle(document.body).getPropertyValue('--clr-table-row-height');
|
|
22084
|
+
const rowHeightValue = +((_a = /calc\(([0-9]+) \* calc\(\(1rem \/ 20\) \* 1\)\)/.exec(rowHeightToken)) === null || _a === void 0 ? void 0 : _a[1]);
|
|
22085
|
+
if (rowHeightValue && this.itemSize > rowHeightValue) {
|
|
22086
|
+
this.itemSize = rowHeightValue;
|
|
22087
|
+
}
|
|
21993
22088
|
this.mutationChanges.observe(this.datagridElementRef.nativeElement, {
|
|
21994
22089
|
attributeFilter: ['class'],
|
|
21995
22090
|
attributeOldValue: true,
|
|
21996
22091
|
});
|
|
21997
22092
|
this.virtualScrollStrategy = new FixedSizeVirtualScrollStrategy(this._cdkFixedSizeVirtualScrollInputs.itemSize, this._cdkFixedSizeVirtualScrollInputs.minBufferPx, this._cdkFixedSizeVirtualScrollInputs.maxBufferPx);
|
|
21998
22093
|
}
|
|
22094
|
+
get totalContentHeight() {
|
|
22095
|
+
var _a;
|
|
22096
|
+
return ((_a = this.virtualScrollViewport) === null || _a === void 0 ? void 0 : _a._totalContentHeight) || '';
|
|
22097
|
+
}
|
|
21999
22098
|
get cdkVirtualForOf() {
|
|
22000
22099
|
return this.cdkVirtualForInputs.cdkVirtualForOf;
|
|
22001
22100
|
}
|
|
@@ -22075,12 +22174,14 @@ class ClrDatagridVirtualScrollDirective {
|
|
|
22075
22174
|
if (this.items.smart) {
|
|
22076
22175
|
this.cdkVirtualFor.cdkVirtualForOf = newItems;
|
|
22077
22176
|
}
|
|
22177
|
+
this.shouldUpdateAriaRowIndexes = true;
|
|
22078
22178
|
}), this.cdkVirtualFor.dataStream.subscribe(data => {
|
|
22079
22179
|
this.updateAriaRowCount(data.length);
|
|
22080
22180
|
}), this.virtualScrollViewport.scrolledIndexChange.subscribe(index => {
|
|
22081
22181
|
this.topIndex = index;
|
|
22082
22182
|
}), this.virtualScrollViewport.renderedRangeStream.subscribe(renderedRange => {
|
|
22083
22183
|
this.renderedRangeChange.emit(renderedRange);
|
|
22184
|
+
this.shouldUpdateAriaRowIndexes = true;
|
|
22084
22185
|
}), this.datagrid.refresh.subscribe(datagridState => {
|
|
22085
22186
|
if (datagridState.filters) {
|
|
22086
22187
|
this.scrollToIndex(0);
|
|
@@ -22092,7 +22193,10 @@ class ClrDatagridVirtualScrollDirective {
|
|
|
22092
22193
|
ngDoCheck() {
|
|
22093
22194
|
var _a;
|
|
22094
22195
|
(_a = this.cdkVirtualFor) === null || _a === void 0 ? void 0 : _a.ngDoCheck();
|
|
22095
|
-
this.
|
|
22196
|
+
if (this.shouldUpdateAriaRowIndexes) {
|
|
22197
|
+
this.updateAriaRowIndexes();
|
|
22198
|
+
this.shouldUpdateAriaRowIndexes = false;
|
|
22199
|
+
}
|
|
22096
22200
|
}
|
|
22097
22201
|
ngOnDestroy() {
|
|
22098
22202
|
var _a, _b, _c;
|
|
@@ -22145,38 +22249,17 @@ class ClrDatagridVirtualScrollDirective {
|
|
|
22145
22249
|
const rootElements = viewRef.rootNodes;
|
|
22146
22250
|
const datagridRowElement = rootElements.find(rowElement => rowElement.tagName === 'CLR-DG-ROW');
|
|
22147
22251
|
const rowRoleElement = datagridRowElement === null || datagridRowElement === void 0 ? void 0 : datagridRowElement.querySelector('[role="row"]');
|
|
22148
|
-
|
|
22149
|
-
rowRoleElement === null || rowRoleElement === void 0 ? void 0 : rowRoleElement.
|
|
22252
|
+
const newAriaRowIndex = (viewRef.context.index + 1).toString();
|
|
22253
|
+
if ((rowRoleElement === null || rowRoleElement === void 0 ? void 0 : rowRoleElement.getAttribute('aria-rowindex')) !== newAriaRowIndex) {
|
|
22254
|
+
// aria-rowindex should start with one, not zero, so we have to add one to the zero-based index
|
|
22255
|
+
rowRoleElement === null || rowRoleElement === void 0 ? void 0 : rowRoleElement.setAttribute('aria-rowindex', newAriaRowIndex);
|
|
22256
|
+
}
|
|
22150
22257
|
}
|
|
22151
22258
|
}
|
|
22152
22259
|
createVirtualScrollViewportForDatagrid(changeDetectorRef, ngZone, renderer2, directionality, scrollDispatcher, viewportRuler, datagridElementRef, virtualScrollStrategy) {
|
|
22153
|
-
const
|
|
22154
|
-
const datagridTableElement = datagridElementRef.nativeElement.querySelector('.datagrid-table');
|
|
22260
|
+
const datagridContentElement = datagridElementRef.nativeElement.querySelector('.datagrid-content');
|
|
22155
22261
|
const datagridRowsElement = datagridElementRef.nativeElement.querySelector('.datagrid-rows');
|
|
22156
|
-
const
|
|
22157
|
-
let topOffset = 0;
|
|
22158
|
-
let totalContentSize = 0;
|
|
22159
|
-
function updateDatagridElementStyles() {
|
|
22160
|
-
datagridRowsElement.style.transform = `translateY(${topOffset}px)`;
|
|
22161
|
-
datagridRowsElement.style.height = `${totalContentSize - topOffset}px`;
|
|
22162
|
-
}
|
|
22163
|
-
const virtualScrollViewport = createCdkVirtualScrollViewport(datagridDivElementRef, changeDetectorRef, ngZone, renderer2, virtualScrollStrategy, directionality, scrollDispatcher, viewportRuler, null);
|
|
22164
|
-
virtualScrollViewport._contentWrapper = {
|
|
22165
|
-
nativeElement: {
|
|
22166
|
-
style: {
|
|
22167
|
-
set transform(value) {
|
|
22168
|
-
var _a;
|
|
22169
|
-
topOffset = value === undefined ? 0 : +((_a = /translateY\(([0-9]+)px\)/.exec(value)) === null || _a === void 0 ? void 0 : _a[1]);
|
|
22170
|
-
updateDatagridElementStyles();
|
|
22171
|
-
},
|
|
22172
|
-
},
|
|
22173
|
-
},
|
|
22174
|
-
};
|
|
22175
|
-
virtualScrollViewport.setTotalContentSize = (value) => {
|
|
22176
|
-
totalContentSize = value;
|
|
22177
|
-
datagridTableElement.style.height = `${totalContentSize}px`;
|
|
22178
|
-
updateDatagridElementStyles();
|
|
22179
|
-
};
|
|
22262
|
+
const virtualScrollViewport = createCdkVirtualScrollViewport(new ElementRef(datagridContentElement), new ElementRef(datagridRowsElement), changeDetectorRef, ngZone, renderer2, virtualScrollStrategy, directionality, scrollDispatcher, viewportRuler, null);
|
|
22180
22263
|
return virtualScrollViewport;
|
|
22181
22264
|
}
|
|
22182
22265
|
}
|
|
@@ -22223,9 +22306,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImpor
|
|
|
22223
22306
|
type: Input,
|
|
22224
22307
|
args: ['clrVirtualDataRange']
|
|
22225
22308
|
}] } });
|
|
22226
|
-
function createCdkVirtualScrollViewport(datagridDivElementRef, changeDetectorRef, ngZone, renderer2, virtualScrollStrategy, directionality, scrollDispatcher, viewportRuler, scrollable) {
|
|
22309
|
+
function createCdkVirtualScrollViewport(datagridDivElementRef, contentWrapper, changeDetectorRef, ngZone, renderer2, virtualScrollStrategy, directionality, scrollDispatcher, viewportRuler, scrollable) {
|
|
22310
|
+
let viewPort;
|
|
22227
22311
|
if (+VERSION.major < 19) {
|
|
22228
|
-
|
|
22312
|
+
viewPort = new CdkVirtualScrollViewport(datagridDivElementRef, changeDetectorRef, ngZone, virtualScrollStrategy, directionality, scrollDispatcher, viewportRuler, scrollable);
|
|
22229
22313
|
}
|
|
22230
22314
|
else {
|
|
22231
22315
|
const virtualScrollViewportInjector = Injector.create({
|
|
@@ -22243,8 +22327,10 @@ function createCdkVirtualScrollViewport(datagridDivElementRef, changeDetectorRef
|
|
|
22243
22327
|
{ provide: CdkVirtualScrollViewport, useClass: CdkVirtualScrollViewport },
|
|
22244
22328
|
],
|
|
22245
22329
|
});
|
|
22246
|
-
|
|
22330
|
+
viewPort = virtualScrollViewportInjector.get(CdkVirtualScrollViewport);
|
|
22247
22331
|
}
|
|
22332
|
+
viewPort._contentWrapper = contentWrapper;
|
|
22333
|
+
return viewPort;
|
|
22248
22334
|
}
|
|
22249
22335
|
function createCdkVirtualForOfDirective(viewContainerRef, templateRef, iterableDiffers, viewRepeater, virtualScrollViewport, ngZone) {
|
|
22250
22336
|
if (+VERSION.major < 19) {
|
|
@@ -22337,6 +22423,60 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImpor
|
|
|
22337
22423
|
type: Injectable
|
|
22338
22424
|
}], ctorParameters: function () { return [{ type: FiltersProvider }, { type: Sort }, { type: Page }, { type: StateDebouncer }]; } });
|
|
22339
22425
|
|
|
22426
|
+
/*
|
|
22427
|
+
* Copyright (c) 2016-2025 Broadcom. All Rights Reserved.
|
|
22428
|
+
* The term "Broadcom" refers to Broadcom Inc. and/or its subsidiaries.
|
|
22429
|
+
* This software is released under MIT license.
|
|
22430
|
+
* The full license information can be found in LICENSE in the root directory of this project.
|
|
22431
|
+
*/
|
|
22432
|
+
class DatagridCellRenderer {
|
|
22433
|
+
constructor(el, renderer, organizer) {
|
|
22434
|
+
this.el = el;
|
|
22435
|
+
this.renderer = renderer;
|
|
22436
|
+
this.subscriptions = [];
|
|
22437
|
+
this.subscriptions.push(organizer.filterRenderSteps(DatagridRenderStep.CLEAR_WIDTHS).subscribe(() => this.clearWidth()));
|
|
22438
|
+
}
|
|
22439
|
+
ngOnDestroy() {
|
|
22440
|
+
this.subscriptions.forEach(sub => sub.unsubscribe());
|
|
22441
|
+
if (this.stateSubscription) {
|
|
22442
|
+
this.stateSubscription.unsubscribe();
|
|
22443
|
+
}
|
|
22444
|
+
}
|
|
22445
|
+
resetState(state) {
|
|
22446
|
+
this.setWidth(state);
|
|
22447
|
+
this.setHidden(state);
|
|
22448
|
+
}
|
|
22449
|
+
setWidth(state) {
|
|
22450
|
+
if (state.strictWidth) {
|
|
22451
|
+
this.renderer.addClass(this.el.nativeElement, STRICT_WIDTH_CLASS);
|
|
22452
|
+
}
|
|
22453
|
+
else {
|
|
22454
|
+
this.renderer.removeClass(this.el.nativeElement, STRICT_WIDTH_CLASS);
|
|
22455
|
+
}
|
|
22456
|
+
this.renderer.setStyle(this.el.nativeElement, 'width', state.width + 'px');
|
|
22457
|
+
}
|
|
22458
|
+
setHidden(state) {
|
|
22459
|
+
if (state.hidden) {
|
|
22460
|
+
this.renderer.addClass(this.el.nativeElement, HIDDEN_COLUMN_CLASS);
|
|
22461
|
+
}
|
|
22462
|
+
else {
|
|
22463
|
+
this.renderer.removeClass(this.el.nativeElement, HIDDEN_COLUMN_CLASS);
|
|
22464
|
+
}
|
|
22465
|
+
}
|
|
22466
|
+
clearWidth() {
|
|
22467
|
+
this.renderer.removeClass(this.el.nativeElement, STRICT_WIDTH_CLASS);
|
|
22468
|
+
this.renderer.setStyle(this.el.nativeElement, 'width', null);
|
|
22469
|
+
}
|
|
22470
|
+
}
|
|
22471
|
+
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 });
|
|
22472
|
+
DatagridCellRenderer.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "15.2.2", type: DatagridCellRenderer, selector: "clr-dg-cell", ngImport: i0 });
|
|
22473
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: DatagridCellRenderer, decorators: [{
|
|
22474
|
+
type: Directive,
|
|
22475
|
+
args: [{
|
|
22476
|
+
selector: 'clr-dg-cell',
|
|
22477
|
+
}]
|
|
22478
|
+
}], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: i0.Renderer2 }, { type: DatagridRenderOrganizer }]; } });
|
|
22479
|
+
|
|
22340
22480
|
/*
|
|
22341
22481
|
* Copyright (c) 2016-2025 Broadcom. All Rights Reserved.
|
|
22342
22482
|
* The term "Broadcom" refers to Broadcom Inc. and/or its subsidiaries.
|
|
@@ -22346,6 +22486,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImpor
|
|
|
22346
22486
|
class DatagridRowRenderer {
|
|
22347
22487
|
constructor(columnsService) {
|
|
22348
22488
|
this.columnsService = columnsService;
|
|
22489
|
+
this.expandableRows = [];
|
|
22349
22490
|
this.subscriptions = [];
|
|
22350
22491
|
}
|
|
22351
22492
|
ngAfterContentInit() {
|
|
@@ -22383,18 +22524,15 @@ class DatagridRowRenderer {
|
|
|
22383
22524
|
}
|
|
22384
22525
|
}
|
|
22385
22526
|
DatagridRowRenderer.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: DatagridRowRenderer, deps: [{ token: ColumnsService }], target: i0.ɵɵFactoryTarget.Directive });
|
|
22386
|
-
DatagridRowRenderer.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "15.2.2", type: DatagridRowRenderer, selector: "clr-dg-row
|
|
22527
|
+
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 });
|
|
22387
22528
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: DatagridRowRenderer, decorators: [{
|
|
22388
22529
|
type: Directive,
|
|
22389
22530
|
args: [{
|
|
22390
|
-
selector: 'clr-dg-row
|
|
22531
|
+
selector: 'clr-dg-row',
|
|
22391
22532
|
}]
|
|
22392
22533
|
}], ctorParameters: function () { return [{ type: ColumnsService }]; }, propDecorators: { cells: [{
|
|
22393
22534
|
type: ContentChildren,
|
|
22394
22535
|
args: [DatagridCellRenderer]
|
|
22395
|
-
}], expandableRow: [{
|
|
22396
|
-
type: ContentChild,
|
|
22397
|
-
args: [forwardRef(() => DatagridRowRenderer)]
|
|
22398
22536
|
}] } });
|
|
22399
22537
|
|
|
22400
22538
|
/*
|
|
@@ -22442,6 +22580,7 @@ class ClrDatagrid {
|
|
|
22442
22580
|
* Subscriptions to all the services and queries changes
|
|
22443
22581
|
*/
|
|
22444
22582
|
this._subscriptions = [];
|
|
22583
|
+
this._virtualScrollSubscriptions = [];
|
|
22445
22584
|
const datagridId = uniqueIdFactory();
|
|
22446
22585
|
this.selectAllId = 'clr-dg-select-all-' + datagridId;
|
|
22447
22586
|
detailService.id = datagridId;
|
|
@@ -22515,6 +22654,9 @@ class ClrDatagrid {
|
|
|
22515
22654
|
this.selection.toggleAll();
|
|
22516
22655
|
}
|
|
22517
22656
|
}
|
|
22657
|
+
get virtualScroll() {
|
|
22658
|
+
return this._virtualScroll.get(0);
|
|
22659
|
+
}
|
|
22518
22660
|
ngAfterContentInit() {
|
|
22519
22661
|
if (!this.items.smart) {
|
|
22520
22662
|
this.items.all = this.rows.map((row) => row.item);
|
|
@@ -22528,6 +22670,8 @@ class ClrDatagrid {
|
|
|
22528
22670
|
if (!this.items.smart) {
|
|
22529
22671
|
this.items.all = all;
|
|
22530
22672
|
}
|
|
22673
|
+
}), this._virtualScroll.changes.subscribe(() => {
|
|
22674
|
+
this.toggleVirtualScrollSubscriptions();
|
|
22531
22675
|
}), this.rows.changes.subscribe(() => {
|
|
22532
22676
|
// Remove any projected rows from the displayedRows container
|
|
22533
22677
|
// Necessary with Ivy off. See https://github.com/vmware/clarity/issues/4692
|
|
@@ -22541,13 +22685,18 @@ class ClrDatagrid {
|
|
|
22541
22685
|
});
|
|
22542
22686
|
this.updateDetailState();
|
|
22543
22687
|
// retain active cell when navigating with Up/Down Arrows, PageUp and PageDown buttons in virtual scroller
|
|
22544
|
-
if (this.virtualScroll) {
|
|
22545
|
-
|
|
22546
|
-
|
|
22547
|
-
|
|
22548
|
-
setTimeout(() => this.keyNavigation.setActiveCell(active));
|
|
22688
|
+
if (this.virtualScroll && this.activeCellCoords) {
|
|
22689
|
+
this.zone.runOutsideAngular(() => {
|
|
22690
|
+
const row = Array.from(this.rows).find(row => {
|
|
22691
|
+
return row.el.nativeElement.children[0].ariaRowIndex === this.activeCellCoords.ariaRowIndex;
|
|
22549
22692
|
});
|
|
22550
|
-
|
|
22693
|
+
if (!row) {
|
|
22694
|
+
return;
|
|
22695
|
+
}
|
|
22696
|
+
const activeCell = row.el.nativeElement.querySelectorAll(this.keyNavigation.config.keyGridCells)[this.activeCellCoords.x];
|
|
22697
|
+
this.keyNavigation.setActiveCell(activeCell);
|
|
22698
|
+
this.keyNavigation.focusElement(activeCell, { preventScroll: true });
|
|
22699
|
+
});
|
|
22551
22700
|
}
|
|
22552
22701
|
}));
|
|
22553
22702
|
}
|
|
@@ -22638,6 +22787,7 @@ class ClrDatagrid {
|
|
|
22638
22787
|
}
|
|
22639
22788
|
ngOnDestroy() {
|
|
22640
22789
|
this._subscriptions.forEach((sub) => sub.unsubscribe());
|
|
22790
|
+
this._virtualScrollSubscriptions.forEach((sub) => sub.unsubscribe());
|
|
22641
22791
|
}
|
|
22642
22792
|
toggleAllSelected($event) {
|
|
22643
22793
|
var _a;
|
|
@@ -22676,9 +22826,43 @@ class ClrDatagrid {
|
|
|
22676
22826
|
dataChanged() {
|
|
22677
22827
|
this.items.refresh();
|
|
22678
22828
|
}
|
|
22829
|
+
toggleVirtualScrollSubscriptions() {
|
|
22830
|
+
const hasVirtualScroll = !!this.virtualScroll;
|
|
22831
|
+
// the virtual scroll will handle the scrolling
|
|
22832
|
+
this.keyNavigation.preventScrollOnFocus = hasVirtualScroll;
|
|
22833
|
+
if (hasVirtualScroll && this._virtualScrollSubscriptions.length === 0) {
|
|
22834
|
+
this._virtualScrollSubscriptions.push(fromEvent(this.contentWrapper.nativeElement, 'scroll').subscribe(() => {
|
|
22835
|
+
if (this.datagridHeader.nativeElement.scrollLeft !== this.contentWrapper.nativeElement.scrollLeft) {
|
|
22836
|
+
this.datagridHeader.nativeElement.scrollLeft = this.contentWrapper.nativeElement.scrollLeft;
|
|
22837
|
+
}
|
|
22838
|
+
}), fromEvent(this.datagridHeader.nativeElement, 'scroll').subscribe(() => {
|
|
22839
|
+
if (this.datagridHeader.nativeElement.scrollLeft !== this.contentWrapper.nativeElement.scrollLeft) {
|
|
22840
|
+
this.contentWrapper.nativeElement.scrollLeft = this.datagridHeader.nativeElement.scrollLeft;
|
|
22841
|
+
}
|
|
22842
|
+
}), this.keyNavigation.nextCellCoordsEmitter.subscribe(cellCoords => {
|
|
22843
|
+
var _a;
|
|
22844
|
+
if (!(cellCoords === null || cellCoords === void 0 ? void 0 : cellCoords.ariaRowIndex)) {
|
|
22845
|
+
this.activeCellCoords = null;
|
|
22846
|
+
return;
|
|
22847
|
+
}
|
|
22848
|
+
if (cellCoords.ariaRowIndex === ((_a = this.activeCellCoords) === null || _a === void 0 ? void 0 : _a.ariaRowIndex)) {
|
|
22849
|
+
this.activeCellCoords = cellCoords;
|
|
22850
|
+
return;
|
|
22851
|
+
}
|
|
22852
|
+
this.activeCellCoords = cellCoords;
|
|
22853
|
+
// aria-rowindex is always + 1. Check virtual scroller updateAriaRowIndexes method.
|
|
22854
|
+
const rowIndex = Number(cellCoords.ariaRowIndex) - 1;
|
|
22855
|
+
this.virtualScroll.scrollToIndex(rowIndex);
|
|
22856
|
+
}));
|
|
22857
|
+
}
|
|
22858
|
+
else if (!hasVirtualScroll) {
|
|
22859
|
+
this._virtualScrollSubscriptions.forEach((sub) => sub.unsubscribe());
|
|
22860
|
+
this._virtualScrollSubscriptions = [];
|
|
22861
|
+
}
|
|
22862
|
+
}
|
|
22679
22863
|
}
|
|
22680
22864
|
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 });
|
|
22681
|
-
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: [
|
|
22865
|
+
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: [
|
|
22682
22866
|
Selection,
|
|
22683
22867
|
Sort,
|
|
22684
22868
|
FiltersProvider,
|
|
@@ -22694,7 +22878,7 @@ ClrDatagrid.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "
|
|
|
22694
22878
|
ColumnsService,
|
|
22695
22879
|
DisplayModeService,
|
|
22696
22880
|
KeyNavigationGridController,
|
|
22697
|
-
], 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" }] });
|
|
22881
|
+
], 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" }] });
|
|
22698
22882
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: ClrDatagrid, decorators: [{
|
|
22699
22883
|
type: Component,
|
|
22700
22884
|
args: [{ selector: 'clr-datagrid', providers: [
|
|
@@ -22716,7 +22900,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImpor
|
|
|
22716
22900
|
], host: {
|
|
22717
22901
|
'[class.datagrid-host]': 'true',
|
|
22718
22902
|
'[class.datagrid-detail-open]': 'detailService.isOpen',
|
|
22719
|
-
|
|
22903
|
+
'[class.datagrid-virtual-scroll]': '!!virtualScroll',
|
|
22904
|
+
}, 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" }]
|
|
22720
22905
|
}], ctorParameters: function () {
|
|
22721
22906
|
return [{ type: DatagridRenderOrganizer }, { type: Items }, { type: ExpandableRowsCount }, { type: Selection }, { type: RowActionService }, { type: StateProvider }, { type: DisplayModeService }, { type: i0.Renderer2 }, { type: DetailService }, { type: undefined, decorators: [{
|
|
22722
22907
|
type: Inject,
|
|
@@ -22748,8 +22933,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImpor
|
|
|
22748
22933
|
}], customSelectAll: [{
|
|
22749
22934
|
type: Output,
|
|
22750
22935
|
args: ['clrDgCustomSelectAll']
|
|
22751
|
-
}],
|
|
22752
|
-
type:
|
|
22936
|
+
}], _virtualScroll: [{
|
|
22937
|
+
type: ContentChildren,
|
|
22753
22938
|
args: [ClrDatagridVirtualScrollDirective]
|
|
22754
22939
|
}], iterator: [{
|
|
22755
22940
|
type: ContentChild,
|
|
@@ -22762,13 +22947,19 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImpor
|
|
|
22762
22947
|
args: [ClrDatagridColumn]
|
|
22763
22948
|
}], rows: [{
|
|
22764
22949
|
type: ContentChildren,
|
|
22765
|
-
args: [ClrDatagridRow]
|
|
22950
|
+
args: [ClrDatagridRow, { emitDistinctChangesOnly: false }]
|
|
22766
22951
|
}], datagrid: [{
|
|
22767
22952
|
type: ViewChild,
|
|
22768
22953
|
args: ['datagrid', { read: ElementRef }]
|
|
22769
22954
|
}], datagridTable: [{
|
|
22770
22955
|
type: ViewChild,
|
|
22771
22956
|
args: ['datagridTable', { read: ElementRef }]
|
|
22957
|
+
}], datagridHeader: [{
|
|
22958
|
+
type: ViewChild,
|
|
22959
|
+
args: ['datagridHeader', { read: ElementRef }]
|
|
22960
|
+
}], contentWrapper: [{
|
|
22961
|
+
type: ViewChild,
|
|
22962
|
+
args: ['contentWrapper', { read: ElementRef }]
|
|
22772
22963
|
}], scrollableColumns: [{
|
|
22773
22964
|
type: ViewChild,
|
|
22774
22965
|
args: ['scrollableColumns', { read: ViewContainerRef }]
|
|
@@ -23260,7 +23451,7 @@ ClrDatagridDetailHeader.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0"
|
|
|
23260
23451
|
<div class="datagrid-detail-pane-close">
|
|
23261
23452
|
<button
|
|
23262
23453
|
type="button"
|
|
23263
|
-
class="btn btn-link"
|
|
23454
|
+
class="btn btn-icon btn-link"
|
|
23264
23455
|
(click)="detailService.close()"
|
|
23265
23456
|
[attr.aria-label]="commonStrings.keys.close"
|
|
23266
23457
|
>
|
|
@@ -23282,7 +23473,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImpor
|
|
|
23282
23473
|
<div class="datagrid-detail-pane-close">
|
|
23283
23474
|
<button
|
|
23284
23475
|
type="button"
|
|
23285
|
-
class="btn btn-link"
|
|
23476
|
+
class="btn btn-icon btn-link"
|
|
23286
23477
|
(click)="detailService.close()"
|
|
23287
23478
|
[attr.aria-label]="commonStrings.keys.close"
|
|
23288
23479
|
>
|
|
@@ -23959,22 +24150,24 @@ ClrDatagridPagination.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0",
|
|
|
23959
24150
|
<span class="clr-sr-only">{{ commonStrings.keys.previousPage }}</span>
|
|
23960
24151
|
<cds-icon shape="angle" direction="left"></cds-icon>
|
|
23961
24152
|
</button>
|
|
23962
|
-
<
|
|
23963
|
-
|
|
23964
|
-
|
|
23965
|
-
|
|
23966
|
-
|
|
23967
|
-
|
|
23968
|
-
|
|
23969
|
-
|
|
23970
|
-
|
|
23971
|
-
|
|
23972
|
-
|
|
23973
|
-
|
|
23974
|
-
<
|
|
23975
|
-
|
|
24153
|
+
<div class="pagination-pages">
|
|
24154
|
+
<input
|
|
24155
|
+
*ngIf="!disableCurrentPageInput; else readOnly"
|
|
24156
|
+
#currentPageInput
|
|
24157
|
+
type="text"
|
|
24158
|
+
class="pagination-current clr-input"
|
|
24159
|
+
[size]="page.last.toString().length"
|
|
24160
|
+
[value]="page.current"
|
|
24161
|
+
(keydown.enter)="updateCurrentPage($event)"
|
|
24162
|
+
(blur)="verifyCurrentPage($event)"
|
|
24163
|
+
[attr.aria-label]="commonStrings.keys.currentPage"
|
|
24164
|
+
/>
|
|
24165
|
+
<ng-template #readOnly>
|
|
24166
|
+
<span>{{ page.current }}</span>
|
|
24167
|
+
</ng-template>
|
|
23976
24168
|
|
|
23977
|
-
|
|
24169
|
+
/ <span [attr.aria-label]="commonStrings.keys.totalPages">{{ page.last }}</span>
|
|
24170
|
+
</div>
|
|
23978
24171
|
<button
|
|
23979
24172
|
type="button"
|
|
23980
24173
|
class="pagination-next"
|
|
@@ -24059,22 +24252,24 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImpor
|
|
|
24059
24252
|
<span class="clr-sr-only">{{ commonStrings.keys.previousPage }}</span>
|
|
24060
24253
|
<cds-icon shape="angle" direction="left"></cds-icon>
|
|
24061
24254
|
</button>
|
|
24062
|
-
<
|
|
24063
|
-
|
|
24064
|
-
|
|
24065
|
-
|
|
24066
|
-
|
|
24067
|
-
|
|
24068
|
-
|
|
24069
|
-
|
|
24070
|
-
|
|
24071
|
-
|
|
24072
|
-
|
|
24073
|
-
|
|
24074
|
-
<
|
|
24075
|
-
|
|
24255
|
+
<div class="pagination-pages">
|
|
24256
|
+
<input
|
|
24257
|
+
*ngIf="!disableCurrentPageInput; else readOnly"
|
|
24258
|
+
#currentPageInput
|
|
24259
|
+
type="text"
|
|
24260
|
+
class="pagination-current clr-input"
|
|
24261
|
+
[size]="page.last.toString().length"
|
|
24262
|
+
[value]="page.current"
|
|
24263
|
+
(keydown.enter)="updateCurrentPage($event)"
|
|
24264
|
+
(blur)="verifyCurrentPage($event)"
|
|
24265
|
+
[attr.aria-label]="commonStrings.keys.currentPage"
|
|
24266
|
+
/>
|
|
24267
|
+
<ng-template #readOnly>
|
|
24268
|
+
<span>{{ page.current }}</span>
|
|
24269
|
+
</ng-template>
|
|
24076
24270
|
|
|
24077
|
-
|
|
24271
|
+
/ <span [attr.aria-label]="commonStrings.keys.totalPages">{{ page.last }}</span>
|
|
24272
|
+
</div>
|
|
24078
24273
|
<button
|
|
24079
24274
|
type="button"
|
|
24080
24275
|
class="pagination-next"
|
|
@@ -24594,20 +24789,24 @@ class DatagridMainRenderer {
|
|
|
24594
24789
|
case DatagridColumnChanges.WIDTH:
|
|
24595
24790
|
this.headers.get(columnIndex).setWidth(state);
|
|
24596
24791
|
this.rows.forEach(row => {
|
|
24597
|
-
var _a, _b;
|
|
24598
24792
|
if ((row === null || row === void 0 ? void 0 : row.cells.length) === this.columnsService.columns.length) {
|
|
24599
24793
|
row.cells.get(columnIndex).setWidth(state);
|
|
24600
|
-
|
|
24794
|
+
row.expandableRows.forEach(expandableRow => {
|
|
24795
|
+
var _a;
|
|
24796
|
+
(_a = expandableRow.cells.get(columnIndex)) === null || _a === void 0 ? void 0 : _a.setWidth(state);
|
|
24797
|
+
});
|
|
24601
24798
|
}
|
|
24602
24799
|
});
|
|
24603
24800
|
break;
|
|
24604
24801
|
case DatagridColumnChanges.HIDDEN:
|
|
24605
24802
|
this.headers.get(columnIndex).setHidden(state);
|
|
24606
24803
|
this.rows.forEach(row => {
|
|
24607
|
-
var _a, _b;
|
|
24608
24804
|
if (row.cells && row.cells.length) {
|
|
24609
24805
|
row.cells.get(columnIndex).setHidden(state);
|
|
24610
|
-
|
|
24806
|
+
row.expandableRows.forEach(expandableRow => {
|
|
24807
|
+
var _a;
|
|
24808
|
+
(_a = expandableRow.cells.get(columnIndex)) === null || _a === void 0 ? void 0 : _a.setHidden(state);
|
|
24809
|
+
});
|
|
24611
24810
|
}
|
|
24612
24811
|
});
|
|
24613
24812
|
this.updateColumnSeparatorsVisibility();
|
|
@@ -24617,9 +24816,10 @@ class DatagridMainRenderer {
|
|
|
24617
24816
|
if (state.hideable && state.hidden) {
|
|
24618
24817
|
this.headers.get(columnIndex).setHidden(state);
|
|
24619
24818
|
this.rows.forEach(row => {
|
|
24620
|
-
var _a;
|
|
24621
24819
|
row.setCellsState();
|
|
24622
|
-
|
|
24820
|
+
row.expandableRows.forEach(expandableRow => {
|
|
24821
|
+
expandableRow.setCellsState();
|
|
24822
|
+
});
|
|
24623
24823
|
});
|
|
24624
24824
|
}
|
|
24625
24825
|
break;
|
|
@@ -24671,6 +24871,32 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImpor
|
|
|
24671
24871
|
args: [DatagridRowRenderer]
|
|
24672
24872
|
}] } });
|
|
24673
24873
|
|
|
24874
|
+
/*
|
|
24875
|
+
* Copyright (c) 2016-2025 Broadcom. All Rights Reserved.
|
|
24876
|
+
* The term "Broadcom" refers to Broadcom Inc. and/or its subsidiaries.
|
|
24877
|
+
* This software is released under MIT license.
|
|
24878
|
+
* The full license information can be found in LICENSE in the root directory of this project.
|
|
24879
|
+
*/
|
|
24880
|
+
class DatagridRowDetailRenderer extends DatagridRowRenderer {
|
|
24881
|
+
constructor(parentRow, columnsService) {
|
|
24882
|
+
super(columnsService);
|
|
24883
|
+
this.parentRow = parentRow;
|
|
24884
|
+
parentRow.expandableRows.push(this);
|
|
24885
|
+
}
|
|
24886
|
+
ngOnDestroy() {
|
|
24887
|
+
this.parentRow.expandableRows = [];
|
|
24888
|
+
super.ngOnDestroy();
|
|
24889
|
+
}
|
|
24890
|
+
}
|
|
24891
|
+
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 });
|
|
24892
|
+
DatagridRowDetailRenderer.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "15.2.2", type: DatagridRowDetailRenderer, selector: "clr-dg-row-detail", usesInheritance: true, ngImport: i0 });
|
|
24893
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: DatagridRowDetailRenderer, decorators: [{
|
|
24894
|
+
type: Directive,
|
|
24895
|
+
args: [{
|
|
24896
|
+
selector: 'clr-dg-row-detail',
|
|
24897
|
+
}]
|
|
24898
|
+
}], ctorParameters: function () { return [{ type: DatagridRowRenderer }, { type: ColumnsService }]; } });
|
|
24899
|
+
|
|
24674
24900
|
/*
|
|
24675
24901
|
* Copyright (c) 2016-2025 Broadcom. All Rights Reserved.
|
|
24676
24902
|
* The term "Broadcom" refers to Broadcom Inc. and/or its subsidiaries.
|
|
@@ -24708,6 +24934,7 @@ const CLR_DATAGRID_DIRECTIVES = [
|
|
|
24708
24934
|
DatagridCellRenderer,
|
|
24709
24935
|
DatagridHeaderRenderer,
|
|
24710
24936
|
DatagridMainRenderer,
|
|
24937
|
+
DatagridRowDetailRenderer,
|
|
24711
24938
|
DatagridRowRenderer,
|
|
24712
24939
|
// Chocolate
|
|
24713
24940
|
ActionableOompaLoompa,
|
|
@@ -24755,6 +24982,7 @@ ClrDatagridModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", versi
|
|
|
24755
24982
|
DatagridCellRenderer,
|
|
24756
24983
|
DatagridHeaderRenderer,
|
|
24757
24984
|
DatagridMainRenderer,
|
|
24985
|
+
DatagridRowDetailRenderer,
|
|
24758
24986
|
DatagridRowRenderer,
|
|
24759
24987
|
// Chocolate
|
|
24760
24988
|
ActionableOompaLoompa,
|
|
@@ -24806,6 +25034,7 @@ ClrDatagridModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", versi
|
|
|
24806
25034
|
DatagridCellRenderer,
|
|
24807
25035
|
DatagridHeaderRenderer,
|
|
24808
25036
|
DatagridMainRenderer,
|
|
25037
|
+
DatagridRowDetailRenderer,
|
|
24809
25038
|
DatagridRowRenderer,
|
|
24810
25039
|
// Chocolate
|
|
24811
25040
|
ActionableOompaLoompa,
|
|
@@ -25020,7 +25249,7 @@ ClrStackBlock.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version:
|
|
|
25020
25249
|
[attr.aria-expanded]="ariaExpanded"
|
|
25021
25250
|
[attr.aria-controls]="getStackChildrenId()"
|
|
25022
25251
|
>
|
|
25023
|
-
<cds-icon shape="angle" class="stack-block-caret"
|
|
25252
|
+
<cds-icon shape="angle" class="stack-block-caret" [attr.direction]="caretDirection"></cds-icon>
|
|
25024
25253
|
<span class="clr-sr-only" *ngIf="getChangedValue">{{ commonStrings.keys.stackViewChanged }}</span>
|
|
25025
25254
|
<div class="stack-view-key">
|
|
25026
25255
|
<!-- This structure changed to fix #3567 and the a11y request was to move away from dl's -->
|
|
@@ -25063,7 +25292,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImpor
|
|
|
25063
25292
|
[attr.aria-expanded]="ariaExpanded"
|
|
25064
25293
|
[attr.aria-controls]="getStackChildrenId()"
|
|
25065
25294
|
>
|
|
25066
|
-
<cds-icon shape="angle" class="stack-block-caret"
|
|
25295
|
+
<cds-icon shape="angle" class="stack-block-caret" [attr.direction]="caretDirection"></cds-icon>
|
|
25067
25296
|
<span class="clr-sr-only" *ngIf="getChangedValue">{{ commonStrings.keys.stackViewChanged }}</span>
|
|
25068
25297
|
<div class="stack-view-key">
|
|
25069
25298
|
<!-- This structure changed to fix #3567 and the a11y request was to move away from dl's -->
|
|
@@ -26655,10 +26884,10 @@ class ClrAlert {
|
|
|
26655
26884
|
}
|
|
26656
26885
|
}
|
|
26657
26886
|
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 });
|
|
26658
|
-
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=\"
|
|
26887
|
+
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" }] });
|
|
26659
26888
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: ClrAlert, decorators: [{
|
|
26660
26889
|
type: Component,
|
|
26661
|
-
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=\"
|
|
26890
|
+
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" }]
|
|
26662
26891
|
}], ctorParameters: function () {
|
|
26663
26892
|
return [{ type: AlertIconAndTypesService }, { type: i0.ChangeDetectorRef }, { type: MultiAlertService, decorators: [{
|
|
26664
26893
|
type: Optional
|
|
@@ -27112,7 +27341,7 @@ class ClrModal {
|
|
|
27112
27341
|
}
|
|
27113
27342
|
}
|
|
27114
27343
|
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 });
|
|
27115
|
-
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
|
|
27344
|
+
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: [
|
|
27116
27345
|
trigger('fadeMove', [
|
|
27117
27346
|
transition('* => fadeDown', [
|
|
27118
27347
|
style({ opacity: 0, transform: 'translate(0, -25%)' }),
|
|
@@ -27123,6 +27352,8 @@ ClrModal.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.
|
|
|
27123
27352
|
]),
|
|
27124
27353
|
transition('* => fadeLeft', [style({ opacity: 0, transform: 'translate(25%, 0)' }), animate('0.2s ease-in-out')]),
|
|
27125
27354
|
transition('fadeLeft => *', [animate('0.2s ease-in-out', style({ opacity: 0, transform: 'translate(25%, 0)' }))]),
|
|
27355
|
+
transition('* => fadeUp', [style({ opacity: 0, transform: 'translate(0, 50%)' }), animate('0.2s ease-in-out')]),
|
|
27356
|
+
transition('fadeUp => *', [animate('0.2s ease-in-out', style({ opacity: 0, transform: 'translate(0, 50%)' }))]),
|
|
27126
27357
|
]),
|
|
27127
27358
|
trigger('fade', [
|
|
27128
27359
|
transition('void => *', [style({ opacity: 0 }), animate('0.2s ease-in-out', style({ opacity: 0.85 }))]),
|
|
@@ -27142,12 +27373,14 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImpor
|
|
|
27142
27373
|
]),
|
|
27143
27374
|
transition('* => fadeLeft', [style({ opacity: 0, transform: 'translate(25%, 0)' }), animate('0.2s ease-in-out')]),
|
|
27144
27375
|
transition('fadeLeft => *', [animate('0.2s ease-in-out', style({ opacity: 0, transform: 'translate(25%, 0)' }))]),
|
|
27376
|
+
transition('* => fadeUp', [style({ opacity: 0, transform: 'translate(0, 50%)' }), animate('0.2s ease-in-out')]),
|
|
27377
|
+
transition('fadeUp => *', [animate('0.2s ease-in-out', style({ opacity: 0, transform: 'translate(0, 50%)' }))]),
|
|
27145
27378
|
]),
|
|
27146
27379
|
trigger('fade', [
|
|
27147
27380
|
transition('void => *', [style({ opacity: 0 }), animate('0.2s ease-in-out', style({ opacity: 0.85 }))]),
|
|
27148
27381
|
transition('* => void', [animate('0.2s ease-in-out', style({ opacity: 0 }))]),
|
|
27149
27382
|
]),
|
|
27150
|
-
], 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
|
|
27383
|
+
], 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"] }]
|
|
27151
27384
|
}], ctorParameters: function () { return [{ type: ScrollingService }, { type: ClrCommonStringsService }, { type: ModalStackService }, { type: ClrModalConfigurationService }]; }, propDecorators: { title: [{
|
|
27152
27385
|
type: ViewChild,
|
|
27153
27386
|
args: ['title']
|
|
@@ -27264,15 +27497,24 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImpor
|
|
|
27264
27497
|
* This software is released under MIT license.
|
|
27265
27498
|
* The full license information can be found in LICENSE in the root directory of this project.
|
|
27266
27499
|
*/
|
|
27267
|
-
class
|
|
27500
|
+
class ClrModalHostComponent {
|
|
27268
27501
|
}
|
|
27269
|
-
|
|
27270
|
-
|
|
27271
|
-
|
|
27272
|
-
|
|
27502
|
+
ClrModalHostComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: ClrModalHostComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
27503
|
+
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: `
|
|
27504
|
+
<div class="clr-modal-host-scrollable">
|
|
27505
|
+
<ng-content></ng-content>
|
|
27506
|
+
</div>
|
|
27507
|
+
`, isInline: true });
|
|
27508
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: ClrModalHostComponent, decorators: [{
|
|
27509
|
+
type: Component,
|
|
27273
27510
|
args: [{
|
|
27274
27511
|
selector: '[clrModalHost]',
|
|
27275
27512
|
host: { '[class.clr-modal-host]': 'true' },
|
|
27513
|
+
template: `
|
|
27514
|
+
<div class="clr-modal-host-scrollable">
|
|
27515
|
+
<ng-content></ng-content>
|
|
27516
|
+
</div>
|
|
27517
|
+
`,
|
|
27276
27518
|
}]
|
|
27277
27519
|
}] });
|
|
27278
27520
|
|
|
@@ -27282,14 +27524,14 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImpor
|
|
|
27282
27524
|
* This software is released under MIT license.
|
|
27283
27525
|
* The full license information can be found in LICENSE in the root directory of this project.
|
|
27284
27526
|
*/
|
|
27285
|
-
const CLR_MODAL_DIRECTIVES = [ClrModal, ClrModalBody,
|
|
27527
|
+
const CLR_MODAL_DIRECTIVES = [ClrModal, ClrModalBody, ClrModalHostComponent];
|
|
27286
27528
|
class ClrModalModule {
|
|
27287
27529
|
constructor() {
|
|
27288
27530
|
ClarityIcons.addIcons(windowCloseIcon);
|
|
27289
27531
|
}
|
|
27290
27532
|
}
|
|
27291
27533
|
ClrModalModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: ClrModalModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
|
|
27292
|
-
ClrModalModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "15.2.2", ngImport: i0, type: ClrModalModule, declarations: [ClrModal, ClrModalBody,
|
|
27534
|
+
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] });
|
|
27293
27535
|
ClrModalModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: ClrModalModule, imports: [CommonModule, CdkTrapFocusModule, ClrIconModule, ClrIconModule] });
|
|
27294
27536
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: ClrModalModule, decorators: [{
|
|
27295
27537
|
type: NgModule,
|
|
@@ -27311,16 +27553,29 @@ class ClrSidePanel {
|
|
|
27311
27553
|
this.element = element;
|
|
27312
27554
|
this.configuration = configuration;
|
|
27313
27555
|
this.commonStrings = commonStrings;
|
|
27314
|
-
this._open = false;
|
|
27315
27556
|
this.openChange = new EventEmitter(false);
|
|
27316
27557
|
this.skipAnimation = false;
|
|
27317
27558
|
this.staticBackdrop = false;
|
|
27559
|
+
this.closable = true;
|
|
27318
27560
|
this.preventClose = false;
|
|
27319
27561
|
this.altClose = new EventEmitter(false);
|
|
27320
27562
|
this._pinnable = false;
|
|
27321
27563
|
this._pinned = false;
|
|
27564
|
+
this._position = 'right';
|
|
27565
|
+
this.__open = false;
|
|
27322
27566
|
this._size = 'md';
|
|
27323
27567
|
}
|
|
27568
|
+
get _open() {
|
|
27569
|
+
return this.__open;
|
|
27570
|
+
}
|
|
27571
|
+
set _open(open) {
|
|
27572
|
+
if (open !== this.__open) {
|
|
27573
|
+
this.__open = open;
|
|
27574
|
+
if (this.pinned) {
|
|
27575
|
+
this.updateModalState();
|
|
27576
|
+
}
|
|
27577
|
+
}
|
|
27578
|
+
}
|
|
27324
27579
|
get size() {
|
|
27325
27580
|
return this._size;
|
|
27326
27581
|
}
|
|
@@ -27330,9 +27585,22 @@ class ClrSidePanel {
|
|
|
27330
27585
|
}
|
|
27331
27586
|
if (this._size !== value) {
|
|
27332
27587
|
this._size = value;
|
|
27333
|
-
if (this.
|
|
27334
|
-
this.
|
|
27335
|
-
|
|
27588
|
+
if (this.pinned) {
|
|
27589
|
+
this.updateModalState();
|
|
27590
|
+
}
|
|
27591
|
+
}
|
|
27592
|
+
}
|
|
27593
|
+
get position() {
|
|
27594
|
+
return this._position;
|
|
27595
|
+
}
|
|
27596
|
+
set position(position) {
|
|
27597
|
+
if (position && position !== this._position) {
|
|
27598
|
+
this._position = position;
|
|
27599
|
+
if (this._position === 'right') {
|
|
27600
|
+
this.configuration.fadeMove = 'fadeLeft';
|
|
27601
|
+
}
|
|
27602
|
+
else if (this._position === 'bottom') {
|
|
27603
|
+
this.configuration.fadeMove = 'fadeUp';
|
|
27336
27604
|
}
|
|
27337
27605
|
}
|
|
27338
27606
|
}
|
|
@@ -27340,17 +27608,9 @@ class ClrSidePanel {
|
|
|
27340
27608
|
return this._pinned;
|
|
27341
27609
|
}
|
|
27342
27610
|
set pinned(pinned) {
|
|
27343
|
-
|
|
27344
|
-
|
|
27345
|
-
|
|
27346
|
-
this.originalStopClose = this.modal.stopClose;
|
|
27347
|
-
this.modal.stopClose = true;
|
|
27348
|
-
this.displaySideBySide();
|
|
27349
|
-
}
|
|
27350
|
-
else {
|
|
27351
|
-
this.modal.stopClose = this.originalStopClose;
|
|
27352
|
-
this.displayOverlapping();
|
|
27353
|
-
}
|
|
27611
|
+
this._pinned = pinned;
|
|
27612
|
+
if (this.modal) {
|
|
27613
|
+
this.updateModalState();
|
|
27354
27614
|
}
|
|
27355
27615
|
}
|
|
27356
27616
|
get clrSidePanelBackdrop() {
|
|
@@ -27367,28 +27627,37 @@ class ClrSidePanel {
|
|
|
27367
27627
|
set clrSidePanelPinnable(pinnable) {
|
|
27368
27628
|
this._pinnable = pinnable;
|
|
27369
27629
|
}
|
|
27630
|
+
get modal() {
|
|
27631
|
+
return this._modal;
|
|
27632
|
+
}
|
|
27633
|
+
set modal(modal) {
|
|
27634
|
+
this._modal = modal;
|
|
27635
|
+
this.originalStopClose = this.modal.stopClose;
|
|
27636
|
+
this.updateModalState();
|
|
27637
|
+
}
|
|
27370
27638
|
get hostElement() {
|
|
27371
27639
|
return this.element.nativeElement.closest('.clr-modal-host') || document.body;
|
|
27372
27640
|
}
|
|
27641
|
+
get bottomPositionCssClass() {
|
|
27642
|
+
return this.position === 'bottom';
|
|
27643
|
+
}
|
|
27373
27644
|
ngOnInit() {
|
|
27374
27645
|
this.configuration.fadeMove = 'fadeLeft';
|
|
27375
|
-
|
|
27376
|
-
|
|
27377
|
-
if (changes && Object.prototype.hasOwnProperty.call(changes, '_open')) {
|
|
27378
|
-
if (changes._open.currentValue) {
|
|
27379
|
-
if (this.clrSidePanelPinnable && this.pinned) {
|
|
27380
|
-
this.displaySideBySide();
|
|
27381
|
-
}
|
|
27382
|
-
}
|
|
27383
|
-
else {
|
|
27384
|
-
if (this.clrSidePanelPinnable && this.pinned) {
|
|
27385
|
-
this.displayOverlapping();
|
|
27386
|
-
}
|
|
27387
|
-
}
|
|
27646
|
+
if (this.position === 'bottom') {
|
|
27647
|
+
this.configuration.fadeMove = 'fadeUp';
|
|
27388
27648
|
}
|
|
27389
27649
|
}
|
|
27390
27650
|
ngOnDestroy() {
|
|
27391
|
-
this.
|
|
27651
|
+
this.cleanupPinnedClasses();
|
|
27652
|
+
}
|
|
27653
|
+
handleModalOpen(open) {
|
|
27654
|
+
if (open) {
|
|
27655
|
+
this.updateModalState();
|
|
27656
|
+
}
|
|
27657
|
+
else {
|
|
27658
|
+
this.cleanupPinnedClasses();
|
|
27659
|
+
}
|
|
27660
|
+
this.openChange.emit(open);
|
|
27392
27661
|
}
|
|
27393
27662
|
open() {
|
|
27394
27663
|
this.modal.open();
|
|
@@ -27406,28 +27675,41 @@ class ClrSidePanel {
|
|
|
27406
27675
|
this.modal.close();
|
|
27407
27676
|
}
|
|
27408
27677
|
}
|
|
27409
|
-
|
|
27410
|
-
|
|
27678
|
+
updateModalState() {
|
|
27679
|
+
if (!this.modal) {
|
|
27680
|
+
return;
|
|
27681
|
+
}
|
|
27682
|
+
if (this.pinned) {
|
|
27683
|
+
this.modal.stopClose = true;
|
|
27684
|
+
this.updatePinnedClasses();
|
|
27685
|
+
}
|
|
27686
|
+
else {
|
|
27687
|
+
this.modal.stopClose = this.originalStopClose;
|
|
27688
|
+
this.cleanupPinnedClasses();
|
|
27689
|
+
}
|
|
27411
27690
|
}
|
|
27412
|
-
|
|
27413
|
-
this.hostElement.
|
|
27414
|
-
|
|
27415
|
-
|
|
27416
|
-
|
|
27691
|
+
cleanupPinnedClasses() {
|
|
27692
|
+
[this.hostElement, document.body].forEach(host => {
|
|
27693
|
+
host.classList.forEach(className => {
|
|
27694
|
+
if (className.startsWith('clr-side-panel-pinned-')) {
|
|
27695
|
+
host.classList.remove(className);
|
|
27696
|
+
}
|
|
27697
|
+
});
|
|
27417
27698
|
});
|
|
27418
27699
|
}
|
|
27700
|
+
updatePinnedClasses() {
|
|
27701
|
+
this.cleanupPinnedClasses();
|
|
27702
|
+
this.hostElement.classList.add(`clr-side-panel-pinned-${this.position}-${this.size}`);
|
|
27703
|
+
}
|
|
27419
27704
|
}
|
|
27420
27705
|
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 });
|
|
27421
|
-
ClrSidePanel.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.2", type: ClrSidePanel, selector: "clr-side-panel", inputs: {
|
|
27706
|
+
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" }] });
|
|
27422
27707
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: ClrSidePanel, decorators: [{
|
|
27423
27708
|
type: Component,
|
|
27424
27709
|
args: [{ selector: 'clr-side-panel', host: {
|
|
27425
27710
|
'[class.side-panel]': 'true',
|
|
27426
|
-
}, template: "<clr-modal\n [clrModalOpen]=\"_open\"\n (clrModalOpenChange)=\"
|
|
27427
|
-
}], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: ClrModalConfigurationService }, { type: ClrCommonStringsService }]; }, propDecorators: {
|
|
27428
|
-
type: Input,
|
|
27429
|
-
args: ['clrSidePanelOpen']
|
|
27430
|
-
}], openChange: [{
|
|
27711
|
+
}, 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" }]
|
|
27712
|
+
}], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: ClrModalConfigurationService }, { type: ClrCommonStringsService }]; }, propDecorators: { openChange: [{
|
|
27431
27713
|
type: Output,
|
|
27432
27714
|
args: ['clrSidePanelOpenChange']
|
|
27433
27715
|
}], closeButtonAriaLabel: [{
|
|
@@ -27442,22 +27724,37 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImpor
|
|
|
27442
27724
|
}], staticBackdrop: [{
|
|
27443
27725
|
type: Input,
|
|
27444
27726
|
args: ['clrSidePanelStaticBackdrop']
|
|
27727
|
+
}], closable: [{
|
|
27728
|
+
type: Input,
|
|
27729
|
+
args: ['clrSidePanelClosable']
|
|
27445
27730
|
}], preventClose: [{
|
|
27446
27731
|
type: Input,
|
|
27447
27732
|
args: ['clrSidePanelPreventClose']
|
|
27448
27733
|
}], altClose: [{
|
|
27449
27734
|
type: Output,
|
|
27450
27735
|
args: ['clrSidePanelAlternateClose']
|
|
27451
|
-
}],
|
|
27452
|
-
type:
|
|
27453
|
-
args: [
|
|
27736
|
+
}], _open: [{
|
|
27737
|
+
type: Input,
|
|
27738
|
+
args: ['clrSidePanelOpen']
|
|
27454
27739
|
}], size: [{
|
|
27455
27740
|
type: Input,
|
|
27456
27741
|
args: ['clrSidePanelSize']
|
|
27742
|
+
}], position: [{
|
|
27743
|
+
type: Input,
|
|
27744
|
+
args: ['clrSidePanelPosition']
|
|
27745
|
+
}], pinned: [{
|
|
27746
|
+
type: Input,
|
|
27747
|
+
args: ['clrSidePanelPinned']
|
|
27457
27748
|
}], clrSidePanelBackdrop: [{
|
|
27458
27749
|
type: Input
|
|
27459
27750
|
}], clrSidePanelPinnable: [{
|
|
27460
27751
|
type: Input
|
|
27752
|
+
}], modal: [{
|
|
27753
|
+
type: ViewChild,
|
|
27754
|
+
args: [ClrModal]
|
|
27755
|
+
}], bottomPositionCssClass: [{
|
|
27756
|
+
type: HostBinding,
|
|
27757
|
+
args: ['class.side-panel-bottom']
|
|
27461
27758
|
}], documentClick: [{
|
|
27462
27759
|
type: HostListener,
|
|
27463
27760
|
args: ['document:pointerup', ['$event']]
|
|
@@ -29832,10 +30129,15 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImpor
|
|
|
29832
30129
|
* The full license information can be found in LICENSE in the root directory of this project.
|
|
29833
30130
|
*/
|
|
29834
30131
|
class ClrWizardStepnavItem {
|
|
29835
|
-
constructor(navService, pageCollection, commonStrings) {
|
|
30132
|
+
constructor(navService, pageCollection, commonStrings, elementRef) {
|
|
29836
30133
|
this.navService = navService;
|
|
29837
30134
|
this.pageCollection = pageCollection;
|
|
29838
30135
|
this.commonStrings = commonStrings;
|
|
30136
|
+
this.elementRef = elementRef;
|
|
30137
|
+
/**
|
|
30138
|
+
* This is used to prevent the steps from scrolling as the user clicks on the steps.
|
|
30139
|
+
*/
|
|
30140
|
+
this.skipNextScroll = false;
|
|
29839
30141
|
}
|
|
29840
30142
|
get id() {
|
|
29841
30143
|
this.pageGuard();
|
|
@@ -29881,12 +30183,43 @@ class ClrWizardStepnavItem {
|
|
|
29881
30183
|
const allIds = this.isComplete ? [this.stepIconId, ...textIds] : textIds;
|
|
29882
30184
|
return allIds.join(' ');
|
|
29883
30185
|
}
|
|
30186
|
+
get icon() {
|
|
30187
|
+
if (this.isCurrent) {
|
|
30188
|
+
return {
|
|
30189
|
+
shape: 'dot-circle',
|
|
30190
|
+
label: this.commonStrings.keys.wizardStepCurrent || this.commonStrings.keys.timelineStepCurrent,
|
|
30191
|
+
};
|
|
30192
|
+
}
|
|
30193
|
+
else if (this.hasError) {
|
|
30194
|
+
return {
|
|
30195
|
+
shape: 'error-standard',
|
|
30196
|
+
label: this.commonStrings.keys.wizardStepError || this.commonStrings.keys.timelineStepError,
|
|
30197
|
+
};
|
|
30198
|
+
}
|
|
30199
|
+
else if (this.isComplete) {
|
|
30200
|
+
return {
|
|
30201
|
+
shape: 'success-standard',
|
|
30202
|
+
label: this.commonStrings.keys.wizardStepSuccess || this.commonStrings.keys.timelineStepSuccess,
|
|
30203
|
+
};
|
|
30204
|
+
}
|
|
30205
|
+
else {
|
|
30206
|
+
return null;
|
|
30207
|
+
}
|
|
30208
|
+
}
|
|
30209
|
+
ngOnInit() {
|
|
30210
|
+
this.subscription = this.ensureCurrentStepIsScrolledIntoView().subscribe();
|
|
30211
|
+
}
|
|
30212
|
+
ngOnDestroy() {
|
|
30213
|
+
var _a;
|
|
30214
|
+
(_a = this.subscription) === null || _a === void 0 ? void 0 : _a.unsubscribe();
|
|
30215
|
+
}
|
|
29884
30216
|
click() {
|
|
29885
30217
|
this.pageGuard();
|
|
29886
30218
|
// if we click on our own stepnav or a disabled stepnav, we don't want to do anything
|
|
29887
30219
|
if (this.isDisabled || this.isCurrent) {
|
|
29888
30220
|
return;
|
|
29889
30221
|
}
|
|
30222
|
+
this.skipNextScroll = true;
|
|
29890
30223
|
this.navService.goTo(this.page);
|
|
29891
30224
|
}
|
|
29892
30225
|
pageGuard() {
|
|
@@ -29894,8 +30227,20 @@ class ClrWizardStepnavItem {
|
|
|
29894
30227
|
throw new Error('Wizard stepnav item is not associated with a wizard page.');
|
|
29895
30228
|
}
|
|
29896
30229
|
}
|
|
30230
|
+
ensureCurrentStepIsScrolledIntoView() {
|
|
30231
|
+
// Don't use "smooth" scrolling when the wizard is first opened to avoid a delay in scrolling the current step into view.
|
|
30232
|
+
// The current step when the wizard is opened might not be the first step. For example, the wizard can be closed and re-opened.
|
|
30233
|
+
let scrollBehavior = 'auto';
|
|
30234
|
+
return this.navService.currentPageChanged.pipe(startWith$1(this.navService.currentPage), tap$1(currentPage => {
|
|
30235
|
+
if (!this.skipNextScroll && currentPage === this.page) {
|
|
30236
|
+
this.elementRef.nativeElement.scrollIntoView({ behavior: scrollBehavior, block: 'center', inline: 'center' });
|
|
30237
|
+
}
|
|
30238
|
+
scrollBehavior = 'smooth';
|
|
30239
|
+
this.skipNextScroll = false;
|
|
30240
|
+
}));
|
|
30241
|
+
}
|
|
29897
30242
|
}
|
|
29898
|
-
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 });
|
|
30243
|
+
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 });
|
|
29899
30244
|
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: `
|
|
29900
30245
|
<button
|
|
29901
30246
|
type="button"
|
|
@@ -29906,18 +30251,12 @@ ClrWizardStepnavItem.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", v
|
|
|
29906
30251
|
>
|
|
29907
30252
|
<div class="clr-wizard-stepnav-link-icon">
|
|
29908
30253
|
<cds-icon
|
|
29909
|
-
*ngIf="
|
|
29910
|
-
[id]="stepIconId"
|
|
29911
|
-
shape="error-standard"
|
|
29912
|
-
role="img"
|
|
29913
|
-
[attr.aria-label]="commonStrings.keys.wizardStepError"
|
|
29914
|
-
></cds-icon>
|
|
29915
|
-
<cds-icon
|
|
29916
|
-
*ngIf="!hasError && isComplete"
|
|
30254
|
+
*ngIf="icon; let icon"
|
|
29917
30255
|
[id]="stepIconId"
|
|
29918
|
-
shape="success-standard"
|
|
29919
30256
|
role="img"
|
|
29920
|
-
|
|
30257
|
+
class="clr-wizard-stepnav-link-icon"
|
|
30258
|
+
[attr.shape]="icon.shape"
|
|
30259
|
+
[attr.aria-label]="icon.label"
|
|
29921
30260
|
></cds-icon>
|
|
29922
30261
|
</div>
|
|
29923
30262
|
|
|
@@ -29944,18 +30283,12 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImpor
|
|
|
29944
30283
|
>
|
|
29945
30284
|
<div class="clr-wizard-stepnav-link-icon">
|
|
29946
30285
|
<cds-icon
|
|
29947
|
-
*ngIf="
|
|
29948
|
-
[id]="stepIconId"
|
|
29949
|
-
shape="error-standard"
|
|
29950
|
-
role="img"
|
|
29951
|
-
[attr.aria-label]="commonStrings.keys.wizardStepError"
|
|
29952
|
-
></cds-icon>
|
|
29953
|
-
<cds-icon
|
|
29954
|
-
*ngIf="!hasError && isComplete"
|
|
30286
|
+
*ngIf="icon; let icon"
|
|
29955
30287
|
[id]="stepIconId"
|
|
29956
|
-
shape="success-standard"
|
|
29957
30288
|
role="img"
|
|
29958
|
-
|
|
30289
|
+
class="clr-wizard-stepnav-link-icon"
|
|
30290
|
+
[attr.shape]="icon.shape"
|
|
30291
|
+
[attr.aria-label]="icon.label"
|
|
29959
30292
|
></cds-icon>
|
|
29960
30293
|
</div>
|
|
29961
30294
|
|
|
@@ -29981,7 +30314,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImpor
|
|
|
29981
30314
|
'[class.error]': 'hasError',
|
|
29982
30315
|
},
|
|
29983
30316
|
}]
|
|
29984
|
-
}], ctorParameters: function () { return [{ type: WizardNavigationService }, { type: PageCollectionService }, { type: ClrCommonStringsService }]; }, propDecorators: { page: [{
|
|
30317
|
+
}], ctorParameters: function () { return [{ type: WizardNavigationService }, { type: PageCollectionService }, { type: ClrCommonStringsService }, { type: i0.ElementRef }]; }, propDecorators: { page: [{
|
|
29985
30318
|
type: Input,
|
|
29986
30319
|
args: ['page']
|
|
29987
30320
|
}] } });
|
|
@@ -30450,7 +30783,7 @@ class ClrWizard {
|
|
|
30450
30783
|
}
|
|
30451
30784
|
}
|
|
30452
30785
|
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 });
|
|
30453
|
-
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
|
|
30786
|
+
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"] }] });
|
|
30454
30787
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: ClrWizard, decorators: [{
|
|
30455
30788
|
type: Component,
|
|
30456
30789
|
args: [{ selector: 'clr-wizard', providers: [WizardNavigationService, PageCollectionService, ButtonHubService, HeaderActionService], host: {
|
|
@@ -30460,7 +30793,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImpor
|
|
|
30460
30793
|
'[class.wizard-xl]': "size == 'xl'",
|
|
30461
30794
|
'[class.wizard-in-page]': 'inPage',
|
|
30462
30795
|
'[class.wizard-in-page--fill-content-area]': 'inPage && inPageFillContentArea',
|
|
30463
|
-
}, 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
|
|
30796
|
+
}, 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" }]
|
|
30464
30797
|
}], ctorParameters: function () {
|
|
30465
30798
|
return [{ type: undefined, decorators: [{
|
|
30466
30799
|
type: Inject,
|
|
@@ -31061,5 +31394,5 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImpor
|
|
|
31061
31394
|
* Generated bundle index. Do not edit.
|
|
31062
31395
|
*/
|
|
31063
31396
|
|
|
31064
|
-
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,
|
|
31397
|
+
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 };
|
|
31065
31398
|
//# sourceMappingURL=clr-angular.mjs.map
|