@natec/mef-dev-ui-kit 20.1.13 → 20.1.15
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.
|
@@ -4450,7 +4450,7 @@ class MDCard {
|
|
|
4450
4450
|
this.appearance = config?.appearance || 'outlined';
|
|
4451
4451
|
}
|
|
4452
4452
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.6", ngImport: i0, type: MDCard, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
4453
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.3.6", type: MDCard, isStandalone: true, selector: "md-card", inputs: { appearance: "appearance" }, host: { properties: { "class.mdc-card-outlined": "appearance === \"outlined\"", "class.mdc-card--outlined": "appearance === \"outlined\"", "class.mdc-card-filled": "appearance === \"filled\"", "class.mdc-card--filled": "appearance === \"filled\"" }, classAttribute: "mdc-card mdc-card" }, exportAs: ["mdCard"], ngImport: i0, template: "<ng-content></ng-content>", styles: ["div.jqxInGridLink{cursor:pointer;color:#00f;margin:2px;text-decoration:underline}div.jqxInGridLink :hover{color:#8a2be2}.pink-text{color:pink!important}.red-text{color:red!important}.turquoise-text{color:#03a796!important}.blue-text{color:#00f!important}.mdc-card{display:flex;flex-direction:column;box-sizing:border-box;position:relative;border-style:solid;border-width:0;background-color:#fdf1f2;border-color:#fdf1f2;border-radius:5px;box-shadow:none;padding:20px;font-family:Montserrat}.mdc-card:after{position:absolute;top:0;left:0;width:100%;height:100%;border:solid 1px transparent;content:\"\";display:block;pointer-events:none;box-sizing:border-box;border-radius:5px}.mdc-card-outlined{background-color:#
|
|
4453
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.3.6", type: MDCard, isStandalone: true, selector: "md-card", inputs: { appearance: "appearance" }, host: { properties: { "class.mdc-card-outlined": "appearance === \"outlined\"", "class.mdc-card--outlined": "appearance === \"outlined\"", "class.mdc-card-filled": "appearance === \"filled\"", "class.mdc-card--filled": "appearance === \"filled\"" }, classAttribute: "mdc-card mdc-card" }, exportAs: ["mdCard"], ngImport: i0, template: "<ng-content></ng-content>", styles: ["div.jqxInGridLink{cursor:pointer;color:#00f;margin:2px;text-decoration:underline}div.jqxInGridLink :hover{color:#8a2be2}.pink-text{color:pink!important}.red-text{color:red!important}.turquoise-text{color:#03a796!important}.blue-text{color:#00f!important}.mdc-card{display:flex;flex-direction:column;box-sizing:border-box;position:relative;border-style:solid;border-width:0;background-color:#fdf1f2;border-color:#fdf1f2;border-radius:5px;box-shadow:none;padding:20px;font-family:Montserrat}.mdc-card:after{position:absolute;top:0;left:0;width:100%;height:100%;border:solid 1px transparent;content:\"\";display:block;pointer-events:none;box-sizing:border-box;border-radius:5px}.mdc-card-outlined{background-color:#f3f3f3;border-radius:5px}.mdc-card-outlined:after{border:none}.mdc-card-filled{background-color:#e3e2e6;border-radius:5px;box-shadow:none}.mdc-card__media{position:relative;box-sizing:border-box;background-repeat:no-repeat;background-position:center;background-size:cover}.mdc-card__media:before{display:block;content:\"\"}.mdc-card__media:first-child{border-top-left-radius:inherit;border-top-right-radius:inherit}.mdc-card__media:last-child{border-bottom-left-radius:inherit;border-bottom-right-radius:inherit}.mdc-card-actions{display:flex;flex-direction:row;align-items:center;box-sizing:border-box;min-height:52px}.mdc-card-title{line-height:1.75rem;font-size:1.375rem;letter-spacing:0;font-weight:700}.mdc-card-subtitle{color:#201a1b;line-height:1.5rem;font-size:1rem;letter-spacing:.009rem;font-weight:500}.mdc-card-title,.mdc-card-subtitle{display:block;margin:0}.mdc-card-avatar~.mdc-card-header-text .mdc-card-title,.mdc-card-avatar~.mdc-card-header-text .mdc-card-subtitle{padding:16px 16px 0}.mdc-card-content{display:block}.mdc-card-title-group{display:flex;justify-content:space-between;width:100%}.mdc-card-avatar{height:40px;width:40px;border-radius:50%;flex-shrink:0;margin-bottom:16px;object-fit:cover}.mdc-card-avatar~.mdc-card-header-text .mdc-card-subtitle,.mdc-card-avatar~.mdc-card-header-text .mdc-card-title{line-height:normal}.mdc-card-sm-image{width:80px;height:80px}.mdc-card-md-image{width:112px;height:112px}.mdc-card-lg-image{width:152px;height:152px}.mdc-card-xl-image{width:240px;height:240px}.mdc-card-subtitle~.mdc-card-title,.mdc-card-title~.mdc-card-subtitle,.mdc-card-header .mdc-card-header-text .mdc-card-title,.mdc-card-header .mdc-card-header-text .mdc-card-subtitle,.mdc-card-title-group .mdc-card-title,.mdc-card-title-group .mdc-card-subtitle{padding-top:0}.mdc-card-content>:last-child:not(.mdc-card-footer){margin-bottom:0}.mdc-card-actions-align-end{justify-content:flex-end}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
|
|
4454
4454
|
}
|
|
4455
4455
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.6", ngImport: i0, type: MDCard, decorators: [{
|
|
4456
4456
|
type: Component,
|
|
@@ -4460,7 +4460,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.6", ngImpor
|
|
|
4460
4460
|
'[class.mdc-card--outlined]': 'appearance === "outlined"',
|
|
4461
4461
|
'[class.mdc-card-filled]': 'appearance === "filled"',
|
|
4462
4462
|
'[class.mdc-card--filled]': 'appearance === "filled"',
|
|
4463
|
-
}, exportAs: 'mdCard', encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, template: "<ng-content></ng-content>", styles: ["div.jqxInGridLink{cursor:pointer;color:#00f;margin:2px;text-decoration:underline}div.jqxInGridLink :hover{color:#8a2be2}.pink-text{color:pink!important}.red-text{color:red!important}.turquoise-text{color:#03a796!important}.blue-text{color:#00f!important}.mdc-card{display:flex;flex-direction:column;box-sizing:border-box;position:relative;border-style:solid;border-width:0;background-color:#fdf1f2;border-color:#fdf1f2;border-radius:5px;box-shadow:none;padding:20px;font-family:Montserrat}.mdc-card:after{position:absolute;top:0;left:0;width:100%;height:100%;border:solid 1px transparent;content:\"\";display:block;pointer-events:none;box-sizing:border-box;border-radius:5px}.mdc-card-outlined{background-color:#
|
|
4463
|
+
}, exportAs: 'mdCard', encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, template: "<ng-content></ng-content>", styles: ["div.jqxInGridLink{cursor:pointer;color:#00f;margin:2px;text-decoration:underline}div.jqxInGridLink :hover{color:#8a2be2}.pink-text{color:pink!important}.red-text{color:red!important}.turquoise-text{color:#03a796!important}.blue-text{color:#00f!important}.mdc-card{display:flex;flex-direction:column;box-sizing:border-box;position:relative;border-style:solid;border-width:0;background-color:#fdf1f2;border-color:#fdf1f2;border-radius:5px;box-shadow:none;padding:20px;font-family:Montserrat}.mdc-card:after{position:absolute;top:0;left:0;width:100%;height:100%;border:solid 1px transparent;content:\"\";display:block;pointer-events:none;box-sizing:border-box;border-radius:5px}.mdc-card-outlined{background-color:#f3f3f3;border-radius:5px}.mdc-card-outlined:after{border:none}.mdc-card-filled{background-color:#e3e2e6;border-radius:5px;box-shadow:none}.mdc-card__media{position:relative;box-sizing:border-box;background-repeat:no-repeat;background-position:center;background-size:cover}.mdc-card__media:before{display:block;content:\"\"}.mdc-card__media:first-child{border-top-left-radius:inherit;border-top-right-radius:inherit}.mdc-card__media:last-child{border-bottom-left-radius:inherit;border-bottom-right-radius:inherit}.mdc-card-actions{display:flex;flex-direction:row;align-items:center;box-sizing:border-box;min-height:52px}.mdc-card-title{line-height:1.75rem;font-size:1.375rem;letter-spacing:0;font-weight:700}.mdc-card-subtitle{color:#201a1b;line-height:1.5rem;font-size:1rem;letter-spacing:.009rem;font-weight:500}.mdc-card-title,.mdc-card-subtitle{display:block;margin:0}.mdc-card-avatar~.mdc-card-header-text .mdc-card-title,.mdc-card-avatar~.mdc-card-header-text .mdc-card-subtitle{padding:16px 16px 0}.mdc-card-content{display:block}.mdc-card-title-group{display:flex;justify-content:space-between;width:100%}.mdc-card-avatar{height:40px;width:40px;border-radius:50%;flex-shrink:0;margin-bottom:16px;object-fit:cover}.mdc-card-avatar~.mdc-card-header-text .mdc-card-subtitle,.mdc-card-avatar~.mdc-card-header-text .mdc-card-title{line-height:normal}.mdc-card-sm-image{width:80px;height:80px}.mdc-card-md-image{width:112px;height:112px}.mdc-card-lg-image{width:152px;height:152px}.mdc-card-xl-image{width:240px;height:240px}.mdc-card-subtitle~.mdc-card-title,.mdc-card-title~.mdc-card-subtitle,.mdc-card-header .mdc-card-header-text .mdc-card-title,.mdc-card-header .mdc-card-header-text .mdc-card-subtitle,.mdc-card-title-group .mdc-card-title,.mdc-card-title-group .mdc-card-subtitle{padding-top:0}.mdc-card-content>:last-child:not(.mdc-card-footer){margin-bottom:0}.mdc-card-actions-align-end{justify-content:flex-end}\n"] }]
|
|
4464
4464
|
}], ctorParameters: () => [], propDecorators: { appearance: [{
|
|
4465
4465
|
type: Input
|
|
4466
4466
|
}] } });
|
|
@@ -14446,9 +14446,1040 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.6", ngImpor
|
|
|
14446
14446
|
}]
|
|
14447
14447
|
}] });
|
|
14448
14448
|
|
|
14449
|
+
/**
|
|
14450
|
+
* Directive for cell template in view mode.
|
|
14451
|
+
*
|
|
14452
|
+
* @example
|
|
14453
|
+
* ```html
|
|
14454
|
+
* <ng-template mdCardsGridCellTemplate let-value="value" let-row="row">
|
|
14455
|
+
* <span>{{value}}</span>
|
|
14456
|
+
* </ng-template>
|
|
14457
|
+
* ```
|
|
14458
|
+
*/
|
|
14459
|
+
class MDCardsGridCellTemplateDirective {
|
|
14460
|
+
static ngTemplateContextGuard(dir, ctx) {
|
|
14461
|
+
return true;
|
|
14462
|
+
}
|
|
14463
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.6", ngImport: i0, type: MDCardsGridCellTemplateDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });
|
|
14464
|
+
static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "20.3.6", type: MDCardsGridCellTemplateDirective, isStandalone: true, selector: "[mdCardsGridCellTemplate]", ngImport: i0 });
|
|
14465
|
+
}
|
|
14466
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.6", ngImport: i0, type: MDCardsGridCellTemplateDirective, decorators: [{
|
|
14467
|
+
type: Directive,
|
|
14468
|
+
args: [{
|
|
14469
|
+
selector: '[mdCardsGridCellTemplate]',
|
|
14470
|
+
standalone: true,
|
|
14471
|
+
}]
|
|
14472
|
+
}] });
|
|
14473
|
+
/**
|
|
14474
|
+
* Directive for header template.
|
|
14475
|
+
*
|
|
14476
|
+
* @example
|
|
14477
|
+
* ```html
|
|
14478
|
+
* <ng-template mdCardsGridHeaderTemplate let-column="column" let-sortFn="sortFn">
|
|
14479
|
+
* <span (click)="sortFn()">{{column.name}}</span>
|
|
14480
|
+
* </ng-template>
|
|
14481
|
+
* ```
|
|
14482
|
+
*/
|
|
14483
|
+
class MDCardsGridHeaderTemplateDirective {
|
|
14484
|
+
static ngTemplateContextGuard(dir, ctx) {
|
|
14485
|
+
return true;
|
|
14486
|
+
}
|
|
14487
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.6", ngImport: i0, type: MDCardsGridHeaderTemplateDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });
|
|
14488
|
+
static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "20.3.6", type: MDCardsGridHeaderTemplateDirective, isStandalone: true, selector: "[mdCardsGridHeaderTemplate]", ngImport: i0 });
|
|
14489
|
+
}
|
|
14490
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.6", ngImport: i0, type: MDCardsGridHeaderTemplateDirective, decorators: [{
|
|
14491
|
+
type: Directive,
|
|
14492
|
+
args: [{
|
|
14493
|
+
selector: '[mdCardsGridHeaderTemplate]',
|
|
14494
|
+
standalone: true,
|
|
14495
|
+
}]
|
|
14496
|
+
}] });
|
|
14497
|
+
/**
|
|
14498
|
+
* Directive for edit mode template.
|
|
14499
|
+
*
|
|
14500
|
+
* @example
|
|
14501
|
+
* ```html
|
|
14502
|
+
* <ng-template mdCardsGridEditTemplate let-row="row" let-saveFn="saveFn" let-cancelFn="cancelFn">
|
|
14503
|
+
* <input [(ngModel)]="row.name" />
|
|
14504
|
+
* </ng-template>
|
|
14505
|
+
* ```
|
|
14506
|
+
*/
|
|
14507
|
+
class MDCardsGridEditTemplateDirective {
|
|
14508
|
+
static ngTemplateContextGuard(dir, ctx) {
|
|
14509
|
+
return true;
|
|
14510
|
+
}
|
|
14511
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.6", ngImport: i0, type: MDCardsGridEditTemplateDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });
|
|
14512
|
+
static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "20.3.6", type: MDCardsGridEditTemplateDirective, isStandalone: true, selector: "[mdCardsGridEditTemplate]", ngImport: i0 });
|
|
14513
|
+
}
|
|
14514
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.6", ngImport: i0, type: MDCardsGridEditTemplateDirective, decorators: [{
|
|
14515
|
+
type: Directive,
|
|
14516
|
+
args: [{
|
|
14517
|
+
selector: '[mdCardsGridEditTemplate]',
|
|
14518
|
+
standalone: true,
|
|
14519
|
+
}]
|
|
14520
|
+
}] });
|
|
14521
|
+
/**
|
|
14522
|
+
* Column definition directive for md-cards-grid.
|
|
14523
|
+
*
|
|
14524
|
+
* @example
|
|
14525
|
+
* ```html
|
|
14526
|
+
* <md-cards-grid-column name="Name" prop="name" [sortable]="true" [width]="200">
|
|
14527
|
+
* <ng-template mdCardsGridCellTemplate let-value="value">
|
|
14528
|
+
* <span>{{value}}</span>
|
|
14529
|
+
* </ng-template>
|
|
14530
|
+
* <ng-template mdCardsGridEditTemplate let-row="row">
|
|
14531
|
+
* <input [(ngModel)]="row.name" />
|
|
14532
|
+
* </ng-template>
|
|
14533
|
+
* </md-cards-grid-column>
|
|
14534
|
+
* ```
|
|
14535
|
+
*/
|
|
14536
|
+
class MDCardsGridColumnDirective {
|
|
14537
|
+
/** Display name for the header */
|
|
14538
|
+
name;
|
|
14539
|
+
/** Property path to get value from row */
|
|
14540
|
+
prop;
|
|
14541
|
+
/** Column width in pixels */
|
|
14542
|
+
width;
|
|
14543
|
+
/** Minimum column width */
|
|
14544
|
+
minWidth;
|
|
14545
|
+
/** Maximum column width */
|
|
14546
|
+
maxWidth;
|
|
14547
|
+
/** Flex grow factor */
|
|
14548
|
+
flexGrow;
|
|
14549
|
+
/** Whether column is sortable */
|
|
14550
|
+
sortable;
|
|
14551
|
+
/** Whether column is resizeable (can be dragged to change width) */
|
|
14552
|
+
resizeable;
|
|
14553
|
+
/** Custom sort comparator */
|
|
14554
|
+
comparator;
|
|
14555
|
+
/** Pipe to transform value */
|
|
14556
|
+
pipe;
|
|
14557
|
+
/** CSS class for header */
|
|
14558
|
+
headerClass;
|
|
14559
|
+
/** CSS class for cell */
|
|
14560
|
+
cellClass;
|
|
14561
|
+
// Cell template via input
|
|
14562
|
+
_cellTemplateInput;
|
|
14563
|
+
// Cell template via content child
|
|
14564
|
+
_cellTemplateQuery;
|
|
14565
|
+
get cellTemplate() {
|
|
14566
|
+
return this._cellTemplateInput || this._cellTemplateQuery;
|
|
14567
|
+
}
|
|
14568
|
+
// Header template via input
|
|
14569
|
+
_headerTemplateInput;
|
|
14570
|
+
// Header template via content child
|
|
14571
|
+
_headerTemplateQuery;
|
|
14572
|
+
get headerTemplate() {
|
|
14573
|
+
return this._headerTemplateInput || this._headerTemplateQuery;
|
|
14574
|
+
}
|
|
14575
|
+
// Edit template via input
|
|
14576
|
+
_editTemplateInput;
|
|
14577
|
+
// Edit template via content child
|
|
14578
|
+
_editTemplateQuery;
|
|
14579
|
+
get editTemplate() {
|
|
14580
|
+
return this._editTemplateInput || this._editTemplateQuery;
|
|
14581
|
+
}
|
|
14582
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.6", ngImport: i0, type: MDCardsGridColumnDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });
|
|
14583
|
+
static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "16.1.0", version: "20.3.6", type: MDCardsGridColumnDirective, isStandalone: true, selector: "md-cards-grid-column", inputs: { name: "name", prop: "prop", width: ["width", "width", numberAttribute], minWidth: ["minWidth", "minWidth", numberAttribute], maxWidth: ["maxWidth", "maxWidth", numberAttribute], flexGrow: ["flexGrow", "flexGrow", numberAttribute], sortable: ["sortable", "sortable", booleanAttribute], resizeable: ["resizeable", "resizeable", booleanAttribute], comparator: "comparator", pipe: "pipe", headerClass: "headerClass", cellClass: "cellClass", _cellTemplateInput: ["cellTemplate", "_cellTemplateInput"], _headerTemplateInput: ["headerTemplate", "_headerTemplateInput"], _editTemplateInput: ["editTemplate", "_editTemplateInput"] }, queries: [{ propertyName: "_cellTemplateQuery", first: true, predicate: MDCardsGridCellTemplateDirective, descendants: true, read: TemplateRef, static: true }, { propertyName: "_headerTemplateQuery", first: true, predicate: MDCardsGridHeaderTemplateDirective, descendants: true, read: TemplateRef, static: true }, { propertyName: "_editTemplateQuery", first: true, predicate: MDCardsGridEditTemplateDirective, descendants: true, read: TemplateRef, static: true }], ngImport: i0 });
|
|
14584
|
+
}
|
|
14585
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.6", ngImport: i0, type: MDCardsGridColumnDirective, decorators: [{
|
|
14586
|
+
type: Directive,
|
|
14587
|
+
args: [{
|
|
14588
|
+
selector: 'md-cards-grid-column',
|
|
14589
|
+
standalone: true,
|
|
14590
|
+
}]
|
|
14591
|
+
}], propDecorators: { name: [{
|
|
14592
|
+
type: Input
|
|
14593
|
+
}], prop: [{
|
|
14594
|
+
type: Input
|
|
14595
|
+
}], width: [{
|
|
14596
|
+
type: Input,
|
|
14597
|
+
args: [{ transform: numberAttribute }]
|
|
14598
|
+
}], minWidth: [{
|
|
14599
|
+
type: Input,
|
|
14600
|
+
args: [{ transform: numberAttribute }]
|
|
14601
|
+
}], maxWidth: [{
|
|
14602
|
+
type: Input,
|
|
14603
|
+
args: [{ transform: numberAttribute }]
|
|
14604
|
+
}], flexGrow: [{
|
|
14605
|
+
type: Input,
|
|
14606
|
+
args: [{ transform: numberAttribute }]
|
|
14607
|
+
}], sortable: [{
|
|
14608
|
+
type: Input,
|
|
14609
|
+
args: [{ transform: booleanAttribute }]
|
|
14610
|
+
}], resizeable: [{
|
|
14611
|
+
type: Input,
|
|
14612
|
+
args: [{ transform: booleanAttribute }]
|
|
14613
|
+
}], comparator: [{
|
|
14614
|
+
type: Input
|
|
14615
|
+
}], pipe: [{
|
|
14616
|
+
type: Input
|
|
14617
|
+
}], headerClass: [{
|
|
14618
|
+
type: Input
|
|
14619
|
+
}], cellClass: [{
|
|
14620
|
+
type: Input
|
|
14621
|
+
}], _cellTemplateInput: [{
|
|
14622
|
+
type: Input,
|
|
14623
|
+
args: ['cellTemplate']
|
|
14624
|
+
}], _cellTemplateQuery: [{
|
|
14625
|
+
type: ContentChild,
|
|
14626
|
+
args: [MDCardsGridCellTemplateDirective, { read: TemplateRef, static: true }]
|
|
14627
|
+
}], _headerTemplateInput: [{
|
|
14628
|
+
type: Input,
|
|
14629
|
+
args: ['headerTemplate']
|
|
14630
|
+
}], _headerTemplateQuery: [{
|
|
14631
|
+
type: ContentChild,
|
|
14632
|
+
args: [MDCardsGridHeaderTemplateDirective, { read: TemplateRef, static: true }]
|
|
14633
|
+
}], _editTemplateInput: [{
|
|
14634
|
+
type: Input,
|
|
14635
|
+
args: ['editTemplate']
|
|
14636
|
+
}], _editTemplateQuery: [{
|
|
14637
|
+
type: ContentChild,
|
|
14638
|
+
args: [MDCardsGridEditTemplateDirective, { read: TemplateRef, static: true }]
|
|
14639
|
+
}] } });
|
|
14640
|
+
|
|
14641
|
+
/**
|
|
14642
|
+
* Sort direction enum
|
|
14643
|
+
*/
|
|
14644
|
+
var SortDirection;
|
|
14645
|
+
(function (SortDirection) {
|
|
14646
|
+
SortDirection["asc"] = "asc";
|
|
14647
|
+
SortDirection["desc"] = "desc";
|
|
14648
|
+
})(SortDirection || (SortDirection = {}));
|
|
14649
|
+
/**
|
|
14650
|
+
* Sort type - single or multi column sorting
|
|
14651
|
+
*/
|
|
14652
|
+
var SortType;
|
|
14653
|
+
(function (SortType) {
|
|
14654
|
+
SortType["single"] = "single";
|
|
14655
|
+
SortType["multi"] = "multi";
|
|
14656
|
+
})(SortType || (SortType = {}));
|
|
14657
|
+
/**
|
|
14658
|
+
* Overflow mode for the grid when columns exceed container width
|
|
14659
|
+
* - 'scroll': Enable horizontal scrolling (default)
|
|
14660
|
+
* - 'shrink': Shrink columns to fit, respecting minWidth constraints
|
|
14661
|
+
*/
|
|
14662
|
+
var OverflowMode;
|
|
14663
|
+
(function (OverflowMode) {
|
|
14664
|
+
OverflowMode["scroll"] = "scroll";
|
|
14665
|
+
OverflowMode["shrink"] = "shrink";
|
|
14666
|
+
})(OverflowMode || (OverflowMode = {}));
|
|
14667
|
+
|
|
14668
|
+
let columnIdCounter = 0;
|
|
14669
|
+
/**
|
|
14670
|
+
* Generate unique column ID
|
|
14671
|
+
*/
|
|
14672
|
+
function generateColumnId() {
|
|
14673
|
+
return `cards-grid-col-${columnIdCounter++}`;
|
|
14674
|
+
}
|
|
14675
|
+
/**
|
|
14676
|
+
* Get value from object by property path (supports nested paths like 'user.name')
|
|
14677
|
+
*/
|
|
14678
|
+
function getValueByPath(obj, path) {
|
|
14679
|
+
if (!path)
|
|
14680
|
+
return obj;
|
|
14681
|
+
const parts = path.split('.');
|
|
14682
|
+
let value = obj;
|
|
14683
|
+
for (const part of parts) {
|
|
14684
|
+
if (value == null)
|
|
14685
|
+
return undefined;
|
|
14686
|
+
value = value[part];
|
|
14687
|
+
}
|
|
14688
|
+
return value;
|
|
14689
|
+
}
|
|
14690
|
+
/**
|
|
14691
|
+
* Create value getter function for column
|
|
14692
|
+
*/
|
|
14693
|
+
function createValueGetter(prop) {
|
|
14694
|
+
if (!prop) {
|
|
14695
|
+
return () => undefined;
|
|
14696
|
+
}
|
|
14697
|
+
return (row) => getValueByPath(row, prop);
|
|
14698
|
+
}
|
|
14699
|
+
/**
|
|
14700
|
+
* Convert column definition to internal format with defaults
|
|
14701
|
+
*/
|
|
14702
|
+
function toInternalColumn(column, defaultWidth = 150) {
|
|
14703
|
+
const name = column.name || (column.prop ? formatPropAsName(column.prop) : '');
|
|
14704
|
+
return {
|
|
14705
|
+
...column,
|
|
14706
|
+
$$id: column.$$id || generateColumnId(),
|
|
14707
|
+
name,
|
|
14708
|
+
width: column.width ?? defaultWidth,
|
|
14709
|
+
$$valueGetter: createValueGetter(column.prop),
|
|
14710
|
+
};
|
|
14711
|
+
}
|
|
14712
|
+
/**
|
|
14713
|
+
* Format property name as display name
|
|
14714
|
+
* e.g., 'firstName' -> 'First Name', 'user_name' -> 'User Name'
|
|
14715
|
+
*/
|
|
14716
|
+
function formatPropAsName(prop) {
|
|
14717
|
+
// Handle nested paths - use last part
|
|
14718
|
+
const parts = prop.split('.');
|
|
14719
|
+
const lastPart = parts[parts.length - 1];
|
|
14720
|
+
// Convert camelCase or snake_case to Title Case
|
|
14721
|
+
return lastPart
|
|
14722
|
+
.replace(/_/g, ' ')
|
|
14723
|
+
.replace(/([a-z])([A-Z])/g, '$1 $2')
|
|
14724
|
+
.replace(/\b\w/g, char => char.toUpperCase());
|
|
14725
|
+
}
|
|
14726
|
+
/**
|
|
14727
|
+
* Group rows by a property
|
|
14728
|
+
*/
|
|
14729
|
+
function groupRowsByProperty(rows, groupBy) {
|
|
14730
|
+
const groups = new Map();
|
|
14731
|
+
for (const row of rows) {
|
|
14732
|
+
const key = typeof groupBy === 'function'
|
|
14733
|
+
? groupBy(row)
|
|
14734
|
+
: row[groupBy];
|
|
14735
|
+
if (!groups.has(key)) {
|
|
14736
|
+
groups.set(key, []);
|
|
14737
|
+
}
|
|
14738
|
+
groups.get(key).push(row);
|
|
14739
|
+
}
|
|
14740
|
+
return Array.from(groups.entries()).map(([key, value]) => ({ key, value }));
|
|
14741
|
+
}
|
|
14742
|
+
/**
|
|
14743
|
+
* Sort rows by sort configuration
|
|
14744
|
+
*/
|
|
14745
|
+
function sortRows(rows, sorts, columns) {
|
|
14746
|
+
if (!sorts || sorts.length === 0) {
|
|
14747
|
+
return rows;
|
|
14748
|
+
}
|
|
14749
|
+
const sorted = [...rows];
|
|
14750
|
+
sorted.sort((a, b) => {
|
|
14751
|
+
for (const sort of sorts) {
|
|
14752
|
+
const column = columns.find(c => c.prop === sort.prop);
|
|
14753
|
+
if (!column)
|
|
14754
|
+
continue;
|
|
14755
|
+
const valueA = column.$$valueGetter(a);
|
|
14756
|
+
const valueB = column.$$valueGetter(b);
|
|
14757
|
+
let result;
|
|
14758
|
+
if (column.comparator) {
|
|
14759
|
+
result = column.comparator(valueA, valueB, a, b, sort.dir);
|
|
14760
|
+
}
|
|
14761
|
+
else {
|
|
14762
|
+
result = defaultComparator(valueA, valueB);
|
|
14763
|
+
}
|
|
14764
|
+
if (result !== 0) {
|
|
14765
|
+
return sort.dir === SortDirection.desc ? -result : result;
|
|
14766
|
+
}
|
|
14767
|
+
}
|
|
14768
|
+
return 0;
|
|
14769
|
+
});
|
|
14770
|
+
return sorted;
|
|
14771
|
+
}
|
|
14772
|
+
/**
|
|
14773
|
+
* Default comparator for sorting
|
|
14774
|
+
*/
|
|
14775
|
+
function defaultComparator(valueA, valueB) {
|
|
14776
|
+
if (valueA == null && valueB == null)
|
|
14777
|
+
return 0;
|
|
14778
|
+
if (valueA == null)
|
|
14779
|
+
return -1;
|
|
14780
|
+
if (valueB == null)
|
|
14781
|
+
return 1;
|
|
14782
|
+
if (typeof valueA === 'string' && typeof valueB === 'string') {
|
|
14783
|
+
return valueA.localeCompare(valueB);
|
|
14784
|
+
}
|
|
14785
|
+
if (valueA < valueB)
|
|
14786
|
+
return -1;
|
|
14787
|
+
if (valueA > valueB)
|
|
14788
|
+
return 1;
|
|
14789
|
+
return 0;
|
|
14790
|
+
}
|
|
14791
|
+
/**
|
|
14792
|
+
* Get next sort direction
|
|
14793
|
+
*/
|
|
14794
|
+
function nextSortDirection(currentDir, enableClearing = false) {
|
|
14795
|
+
if (!currentDir) {
|
|
14796
|
+
return SortDirection.asc;
|
|
14797
|
+
}
|
|
14798
|
+
if (currentDir === SortDirection.asc) {
|
|
14799
|
+
return SortDirection.desc;
|
|
14800
|
+
}
|
|
14801
|
+
if (enableClearing) {
|
|
14802
|
+
return undefined;
|
|
14803
|
+
}
|
|
14804
|
+
return SortDirection.asc;
|
|
14805
|
+
}
|
|
14806
|
+
/**
|
|
14807
|
+
* Deep clone an object
|
|
14808
|
+
*/
|
|
14809
|
+
function deepClone(obj) {
|
|
14810
|
+
if (obj === null || typeof obj !== 'object') {
|
|
14811
|
+
return obj;
|
|
14812
|
+
}
|
|
14813
|
+
if (Array.isArray(obj)) {
|
|
14814
|
+
return obj.map(item => deepClone(item));
|
|
14815
|
+
}
|
|
14816
|
+
const cloned = {};
|
|
14817
|
+
for (const key in obj) {
|
|
14818
|
+
if (Object.prototype.hasOwnProperty.call(obj, key)) {
|
|
14819
|
+
cloned[key] = deepClone(obj[key]);
|
|
14820
|
+
}
|
|
14821
|
+
}
|
|
14822
|
+
return cloned;
|
|
14823
|
+
}
|
|
14824
|
+
/**
|
|
14825
|
+
* Calculate column widths based on container width and column definitions
|
|
14826
|
+
*/
|
|
14827
|
+
function calculateColumnWidths(columns, containerWidth) {
|
|
14828
|
+
const totalFixedWidth = columns
|
|
14829
|
+
.filter(c => c.width && !c.flexGrow)
|
|
14830
|
+
.reduce((sum, c) => sum + c.width, 0);
|
|
14831
|
+
const flexColumns = columns.filter(c => c.flexGrow);
|
|
14832
|
+
const totalFlexGrow = flexColumns.reduce((sum, c) => sum + (c.flexGrow || 0), 0);
|
|
14833
|
+
const remainingWidth = Math.max(0, containerWidth - totalFixedWidth);
|
|
14834
|
+
return columns.map(column => {
|
|
14835
|
+
if (column.flexGrow && totalFlexGrow > 0) {
|
|
14836
|
+
const flexWidth = (column.flexGrow / totalFlexGrow) * remainingWidth;
|
|
14837
|
+
let width = Math.floor(flexWidth);
|
|
14838
|
+
if (column.minWidth && width < column.minWidth) {
|
|
14839
|
+
width = column.minWidth;
|
|
14840
|
+
}
|
|
14841
|
+
if (column.maxWidth && width > column.maxWidth) {
|
|
14842
|
+
width = column.maxWidth;
|
|
14843
|
+
}
|
|
14844
|
+
return { ...column, width };
|
|
14845
|
+
}
|
|
14846
|
+
return column;
|
|
14847
|
+
});
|
|
14848
|
+
}
|
|
14849
|
+
|
|
14850
|
+
/**
|
|
14851
|
+
* MD Cards Grid Component
|
|
14852
|
+
*
|
|
14853
|
+
* A horizontal cards grid with table-like header and edit mode support.
|
|
14854
|
+
* Similar API to ngx-datatable but displays data as cards/tiles.
|
|
14855
|
+
*
|
|
14856
|
+
* @example
|
|
14857
|
+
* ```html
|
|
14858
|
+
* <md-cards-grid
|
|
14859
|
+
* [rows]="data"
|
|
14860
|
+
* [groupRowsBy]="'category'"
|
|
14861
|
+
* [(editingRow)]="currentEditingRow"
|
|
14862
|
+
* [sorts]="sorts"
|
|
14863
|
+
* (sort)="onSort($event)"
|
|
14864
|
+
* (rowEditSave)="onSave($event)">
|
|
14865
|
+
*
|
|
14866
|
+
* <md-cards-grid-column name="Name" prop="name" [sortable]="true">
|
|
14867
|
+
* <ng-template mdCardsGridCellTemplate let-value="value">
|
|
14868
|
+
* <span>{{value}}</span>
|
|
14869
|
+
* </ng-template>
|
|
14870
|
+
* <ng-template mdCardsGridEditTemplate let-row="row">
|
|
14871
|
+
* <input [(ngModel)]="row.name" />
|
|
14872
|
+
* </ng-template>
|
|
14873
|
+
* </md-cards-grid-column>
|
|
14874
|
+
*
|
|
14875
|
+
* </md-cards-grid>
|
|
14876
|
+
* ```
|
|
14877
|
+
*/
|
|
14878
|
+
class MDCardsGridComponent {
|
|
14879
|
+
_cdr = inject(ChangeDetectorRef);
|
|
14880
|
+
_columnsSubscription;
|
|
14881
|
+
/** Host binding for shrink mode class */
|
|
14882
|
+
get isShrinkMode() {
|
|
14883
|
+
return this.overflowMode === OverflowMode.shrink;
|
|
14884
|
+
}
|
|
14885
|
+
// ═══════════════════════════════════════════════════════════════════════════
|
|
14886
|
+
// DATA INPUTS
|
|
14887
|
+
// ═══════════════════════════════════════════════════════════════════════════
|
|
14888
|
+
/** Data rows to display */
|
|
14889
|
+
rows = [];
|
|
14890
|
+
/** Columns definition (alternative to content projection) */
|
|
14891
|
+
columns = [];
|
|
14892
|
+
/** Property to group rows by */
|
|
14893
|
+
groupRowsBy;
|
|
14894
|
+
/** Custom template for group header */
|
|
14895
|
+
groupHeaderTemplate;
|
|
14896
|
+
/** Custom template for row actions (edit/save/cancel buttons) */
|
|
14897
|
+
rowActionsTemplate;
|
|
14898
|
+
// ═══════════════════════════════════════════════════════════════════════════
|
|
14899
|
+
// DISPLAY OPTIONS
|
|
14900
|
+
// ═══════════════════════════════════════════════════════════════════════════
|
|
14901
|
+
/** Height of the header in pixels (0 = no header) */
|
|
14902
|
+
headerHeight = 46;
|
|
14903
|
+
/** Height of each card/row */
|
|
14904
|
+
cardHeight = 'auto';
|
|
14905
|
+
/** Gap between cards in pixels */
|
|
14906
|
+
gap = 5;
|
|
14907
|
+
/** Default column width */
|
|
14908
|
+
defaultColumnWidth = 150;
|
|
14909
|
+
/** Show row actions column */
|
|
14910
|
+
showRowActions = true;
|
|
14911
|
+
/**
|
|
14912
|
+
* Overflow mode when columns exceed container width:
|
|
14913
|
+
* - 'scroll': Enable horizontal scrolling (default)
|
|
14914
|
+
* - 'shrink': Shrink columns to fit, respecting minWidth constraints
|
|
14915
|
+
*/
|
|
14916
|
+
overflowMode = OverflowMode.scroll;
|
|
14917
|
+
// ═══════════════════════════════════════════════════════════════════════════
|
|
14918
|
+
// COLUMN RESIZE
|
|
14919
|
+
// ═══════════════════════════════════════════════════════════════════════════
|
|
14920
|
+
/** Enable column resize by dragging header borders */
|
|
14921
|
+
enableColumnResize = false;
|
|
14922
|
+
/** Default minimum column width when resizing */
|
|
14923
|
+
defaultMinColumnWidth = 50;
|
|
14924
|
+
/** Default maximum column width when resizing */
|
|
14925
|
+
defaultMaxColumnWidth = 500;
|
|
14926
|
+
/** Column resize event */
|
|
14927
|
+
columnResize = new EventEmitter();
|
|
14928
|
+
// ═══════════════════════════════════════════════════════════════════════════
|
|
14929
|
+
// SORTING
|
|
14930
|
+
// ═══════════════════════════════════════════════════════════════════════════
|
|
14931
|
+
/** Current sort configuration */
|
|
14932
|
+
sorts = [];
|
|
14933
|
+
/** Sort type: single or multi */
|
|
14934
|
+
sortType = SortType.single;
|
|
14935
|
+
/** Enable external sorting (don't sort internally) */
|
|
14936
|
+
externalSorting = false;
|
|
14937
|
+
/** Enable clearing sort state (asc -> desc -> none) */
|
|
14938
|
+
enableClearingSortState = false;
|
|
14939
|
+
/** Icon class for ascending sort */
|
|
14940
|
+
sortAscendingIcon;
|
|
14941
|
+
/** Icon class for descending sort */
|
|
14942
|
+
sortDescendingIcon;
|
|
14943
|
+
/** Icon class for unsorted state */
|
|
14944
|
+
sortUnsetIcon;
|
|
14945
|
+
/** Sort event */
|
|
14946
|
+
sort = new EventEmitter();
|
|
14947
|
+
// ═══════════════════════════════════════════════════════════════════════════
|
|
14948
|
+
// PAGINATION
|
|
14949
|
+
// ═══════════════════════════════════════════════════════════════════════════
|
|
14950
|
+
/** Page size (items per page) */
|
|
14951
|
+
limit = 10;
|
|
14952
|
+
/** Current page offset (0-indexed) */
|
|
14953
|
+
offset = 0;
|
|
14954
|
+
/** Total count for external paging */
|
|
14955
|
+
count;
|
|
14956
|
+
/** Enable external paging */
|
|
14957
|
+
externalPaging = false;
|
|
14958
|
+
/** Show footer with pagination */
|
|
14959
|
+
showFooter = true;
|
|
14960
|
+
/** Footer height in pixels */
|
|
14961
|
+
footerHeight = 40;
|
|
14962
|
+
/** Page event */
|
|
14963
|
+
page = new EventEmitter();
|
|
14964
|
+
// ═══════════════════════════════════════════════════════════════════════════
|
|
14965
|
+
// EDIT MODE
|
|
14966
|
+
// ═══════════════════════════════════════════════════════════════════════════
|
|
14967
|
+
/** Currently editing row (two-way binding) */
|
|
14968
|
+
editingRow = null;
|
|
14969
|
+
editingRowChange = new EventEmitter();
|
|
14970
|
+
/** Event when row edit starts */
|
|
14971
|
+
rowEditStart = new EventEmitter();
|
|
14972
|
+
/** Event when row edit is saved */
|
|
14973
|
+
rowEditSave = new EventEmitter();
|
|
14974
|
+
/** Event when row edit is cancelled */
|
|
14975
|
+
rowEditCancel = new EventEmitter();
|
|
14976
|
+
// ═══════════════════════════════════════════════════════════════════════════
|
|
14977
|
+
// INTERNAL STATE
|
|
14978
|
+
// ═══════════════════════════════════════════════════════════════════════════
|
|
14979
|
+
/** Columns from ContentChildren */
|
|
14980
|
+
_columnDirectives;
|
|
14981
|
+
/** Internal columns with defaults applied */
|
|
14982
|
+
_internalColumns = [];
|
|
14983
|
+
/** Processed rows (sorted, paginated) */
|
|
14984
|
+
_displayRows = [];
|
|
14985
|
+
/** Grouped rows (if grouping enabled) */
|
|
14986
|
+
_groupedRows = null;
|
|
14987
|
+
/** Original row data before editing (for cancel) */
|
|
14988
|
+
_originalEditRow = null;
|
|
14989
|
+
/** Editing row copy (mutable) */
|
|
14990
|
+
_editingRowCopy = null;
|
|
14991
|
+
/** Map of editing row index */
|
|
14992
|
+
_editingRowIndex = -1;
|
|
14993
|
+
/** Currently resizing column */
|
|
14994
|
+
_resizingColumn = null;
|
|
14995
|
+
/** Start X position for resize */
|
|
14996
|
+
_resizeStartX = 0;
|
|
14997
|
+
/** Start width for resize */
|
|
14998
|
+
_resizeStartWidth = 0;
|
|
14999
|
+
// ═══════════════════════════════════════════════════════════════════════════
|
|
15000
|
+
// LIFECYCLE
|
|
15001
|
+
// ═══════════════════════════════════════════════════════════════════════════
|
|
15002
|
+
ngAfterContentInit() {
|
|
15003
|
+
this._updateColumns();
|
|
15004
|
+
this._columnsSubscription = this._columnDirectives.changes.subscribe(() => {
|
|
15005
|
+
this._updateColumns();
|
|
15006
|
+
this._cdr.markForCheck();
|
|
15007
|
+
});
|
|
15008
|
+
}
|
|
15009
|
+
ngOnChanges(changes) {
|
|
15010
|
+
if (changes['rows'] || changes['sorts'] || changes['limit'] || changes['offset']) {
|
|
15011
|
+
this._processRows();
|
|
15012
|
+
}
|
|
15013
|
+
if (changes['columns']) {
|
|
15014
|
+
this._updateColumnsFromInput();
|
|
15015
|
+
}
|
|
15016
|
+
if (changes['editingRow']) {
|
|
15017
|
+
this._handleEditingRowChange();
|
|
15018
|
+
}
|
|
15019
|
+
if (changes['groupRowsBy']) {
|
|
15020
|
+
this._processRows();
|
|
15021
|
+
}
|
|
15022
|
+
}
|
|
15023
|
+
ngOnDestroy() {
|
|
15024
|
+
this._columnsSubscription?.unsubscribe();
|
|
15025
|
+
}
|
|
15026
|
+
editRow(rowOrIndex) {
|
|
15027
|
+
const index = typeof rowOrIndex === 'number' ? rowOrIndex : this._displayRows.indexOf(rowOrIndex);
|
|
15028
|
+
const row = typeof rowOrIndex === 'number' ? this._displayRows[rowOrIndex] : rowOrIndex;
|
|
15029
|
+
if (index < 0 || !row)
|
|
15030
|
+
return;
|
|
15031
|
+
// Cancel any current edit
|
|
15032
|
+
if (this._editingRowCopy) {
|
|
15033
|
+
this.cancelEdit();
|
|
15034
|
+
}
|
|
15035
|
+
this._originalEditRow = row;
|
|
15036
|
+
this._editingRowCopy = deepClone(row);
|
|
15037
|
+
this._editingRowIndex = index;
|
|
15038
|
+
this.editingRow = row;
|
|
15039
|
+
this.editingRowChange.emit(row);
|
|
15040
|
+
this.rowEditStart.emit({ row, rowIndex: index });
|
|
15041
|
+
this._cdr.markForCheck();
|
|
15042
|
+
}
|
|
15043
|
+
saveRow(row) {
|
|
15044
|
+
if (!this._editingRowCopy || this._editingRowIndex < 0)
|
|
15045
|
+
return;
|
|
15046
|
+
const savedRow = row || this._editingRowCopy;
|
|
15047
|
+
const originalRow = this._originalEditRow;
|
|
15048
|
+
const rowIndex = this._editingRowIndex;
|
|
15049
|
+
// Update the original row in the rows array
|
|
15050
|
+
const rowsIndex = this.rows.indexOf(originalRow);
|
|
15051
|
+
if (rowsIndex >= 0) {
|
|
15052
|
+
Object.assign(this.rows[rowsIndex], savedRow);
|
|
15053
|
+
}
|
|
15054
|
+
this.rowEditSave.emit({
|
|
15055
|
+
row: savedRow,
|
|
15056
|
+
rowIndex,
|
|
15057
|
+
originalRow,
|
|
15058
|
+
});
|
|
15059
|
+
this._clearEditState();
|
|
15060
|
+
this._processRows();
|
|
15061
|
+
this._cdr.markForCheck();
|
|
15062
|
+
}
|
|
15063
|
+
cancelEdit(row) {
|
|
15064
|
+
if (!this._editingRowCopy)
|
|
15065
|
+
return;
|
|
15066
|
+
this.rowEditCancel.emit({
|
|
15067
|
+
row: this._originalEditRow,
|
|
15068
|
+
rowIndex: this._editingRowIndex,
|
|
15069
|
+
});
|
|
15070
|
+
this._clearEditState();
|
|
15071
|
+
this._cdr.markForCheck();
|
|
15072
|
+
}
|
|
15073
|
+
/**
|
|
15074
|
+
* Check if a row is currently being edited
|
|
15075
|
+
*/
|
|
15076
|
+
isEditing(row) {
|
|
15077
|
+
return this._originalEditRow === row;
|
|
15078
|
+
}
|
|
15079
|
+
/**
|
|
15080
|
+
* Get the editing copy of the row (for template use)
|
|
15081
|
+
*/
|
|
15082
|
+
getEditingCopy(row) {
|
|
15083
|
+
if (this._originalEditRow === row) {
|
|
15084
|
+
return this._editingRowCopy;
|
|
15085
|
+
}
|
|
15086
|
+
return null;
|
|
15087
|
+
}
|
|
15088
|
+
// ═══════════════════════════════════════════════════════════════════════════
|
|
15089
|
+
// SORTING METHODS
|
|
15090
|
+
// ═══════════════════════════════════════════════════════════════════════════
|
|
15091
|
+
/**
|
|
15092
|
+
* Handle column sort click
|
|
15093
|
+
*/
|
|
15094
|
+
onColumnSort(column) {
|
|
15095
|
+
if (!column.sortable)
|
|
15096
|
+
return;
|
|
15097
|
+
const currentSort = this.sorts.find(s => s.prop === column.prop);
|
|
15098
|
+
const currentDir = currentSort?.dir;
|
|
15099
|
+
const newDir = nextSortDirection(currentDir, this.enableClearingSortState);
|
|
15100
|
+
let newSorts;
|
|
15101
|
+
if (this.sortType === SortType.single) {
|
|
15102
|
+
newSorts = newDir ? [{ prop: column.prop, dir: newDir }] : [];
|
|
15103
|
+
}
|
|
15104
|
+
else {
|
|
15105
|
+
newSorts = this.sorts.filter(s => s.prop !== column.prop);
|
|
15106
|
+
if (newDir) {
|
|
15107
|
+
newSorts.push({ prop: column.prop, dir: newDir });
|
|
15108
|
+
}
|
|
15109
|
+
}
|
|
15110
|
+
this.sort.emit({
|
|
15111
|
+
sorts: newSorts,
|
|
15112
|
+
column,
|
|
15113
|
+
prevValue: currentDir,
|
|
15114
|
+
newValue: newDir,
|
|
15115
|
+
});
|
|
15116
|
+
if (!this.externalSorting) {
|
|
15117
|
+
this.sorts = newSorts;
|
|
15118
|
+
this._processRows();
|
|
15119
|
+
}
|
|
15120
|
+
}
|
|
15121
|
+
/**
|
|
15122
|
+
* Get current sort direction for a column
|
|
15123
|
+
*/
|
|
15124
|
+
getSortDir(column) {
|
|
15125
|
+
return this.sorts.find(s => s.prop === column.prop)?.dir;
|
|
15126
|
+
}
|
|
15127
|
+
/**
|
|
15128
|
+
* Get sort icon class for a column
|
|
15129
|
+
*/
|
|
15130
|
+
getSortClass(column) {
|
|
15131
|
+
if (!column.sortable)
|
|
15132
|
+
return '';
|
|
15133
|
+
const dir = this.getSortDir(column);
|
|
15134
|
+
if (dir === SortDirection.asc) {
|
|
15135
|
+
return this.sortAscendingIcon || 'md-cards-grid-sort-asc';
|
|
15136
|
+
}
|
|
15137
|
+
if (dir === SortDirection.desc) {
|
|
15138
|
+
return this.sortDescendingIcon || 'md-cards-grid-sort-desc';
|
|
15139
|
+
}
|
|
15140
|
+
return ``;
|
|
15141
|
+
}
|
|
15142
|
+
// ═══════════════════════════════════════════════════════════════════════════
|
|
15143
|
+
// COLUMN RESIZE METHODS
|
|
15144
|
+
// ═══════════════════════════════════════════════════════════════════════════
|
|
15145
|
+
/**
|
|
15146
|
+
* Check if a column can be resized
|
|
15147
|
+
*/
|
|
15148
|
+
isColumnResizeable(column) {
|
|
15149
|
+
if (!this.enableColumnResize)
|
|
15150
|
+
return false;
|
|
15151
|
+
// If column.resizeable is explicitly set, use that; otherwise default to true when enableColumnResize is on
|
|
15152
|
+
return column.resizeable !== false;
|
|
15153
|
+
}
|
|
15154
|
+
/**
|
|
15155
|
+
* Start column resize on mousedown
|
|
15156
|
+
*/
|
|
15157
|
+
onResizeStart(event, column) {
|
|
15158
|
+
if (!this.isColumnResizeable(column))
|
|
15159
|
+
return;
|
|
15160
|
+
event.preventDefault();
|
|
15161
|
+
event.stopPropagation();
|
|
15162
|
+
this._resizingColumn = column;
|
|
15163
|
+
this._resizeStartX = event.clientX;
|
|
15164
|
+
this._resizeStartWidth = column.width;
|
|
15165
|
+
// Add document listeners
|
|
15166
|
+
document.addEventListener('mousemove', this._onResizeMove);
|
|
15167
|
+
document.addEventListener('mouseup', this._onResizeEnd);
|
|
15168
|
+
// Add resizing class to body to prevent text selection
|
|
15169
|
+
document.body.classList.add('md-cards-grid-resizing');
|
|
15170
|
+
}
|
|
15171
|
+
/**
|
|
15172
|
+
* Handle mouse move during resize
|
|
15173
|
+
*/
|
|
15174
|
+
_onResizeMove = (event) => {
|
|
15175
|
+
if (!this._resizingColumn)
|
|
15176
|
+
return;
|
|
15177
|
+
const deltaX = event.clientX - this._resizeStartX;
|
|
15178
|
+
let newWidth = this._resizeStartWidth + deltaX;
|
|
15179
|
+
// Apply min/max constraints
|
|
15180
|
+
const minWidth = this._resizingColumn.minWidth ?? this.defaultMinColumnWidth;
|
|
15181
|
+
const maxWidth = this._resizingColumn.maxWidth ?? this.defaultMaxColumnWidth;
|
|
15182
|
+
newWidth = Math.max(minWidth, Math.min(maxWidth, newWidth));
|
|
15183
|
+
// Update column width
|
|
15184
|
+
this._resizingColumn.width = newWidth;
|
|
15185
|
+
this._cdr.markForCheck();
|
|
15186
|
+
};
|
|
15187
|
+
/**
|
|
15188
|
+
* End column resize on mouseup
|
|
15189
|
+
*/
|
|
15190
|
+
_onResizeEnd = (event) => {
|
|
15191
|
+
if (!this._resizingColumn)
|
|
15192
|
+
return;
|
|
15193
|
+
// Remove document listeners
|
|
15194
|
+
document.removeEventListener('mousemove', this._onResizeMove);
|
|
15195
|
+
document.removeEventListener('mouseup', this._onResizeEnd);
|
|
15196
|
+
// Remove resizing class
|
|
15197
|
+
document.body.classList.remove('md-cards-grid-resizing');
|
|
15198
|
+
// Emit resize event
|
|
15199
|
+
const prevWidth = this._resizeStartWidth;
|
|
15200
|
+
const newWidth = this._resizingColumn.width;
|
|
15201
|
+
if (prevWidth !== newWidth) {
|
|
15202
|
+
this.columnResize.emit({
|
|
15203
|
+
column: this._resizingColumn,
|
|
15204
|
+
prevWidth,
|
|
15205
|
+
newWidth,
|
|
15206
|
+
});
|
|
15207
|
+
}
|
|
15208
|
+
this._resizingColumn = null;
|
|
15209
|
+
this._cdr.markForCheck();
|
|
15210
|
+
};
|
|
15211
|
+
// ═══════════════════════════════════════════════════════════════════════════
|
|
15212
|
+
// PAGINATION METHODS
|
|
15213
|
+
// ═══════════════════════════════════════════════════════════════════════════
|
|
15214
|
+
/**
|
|
15215
|
+
* Navigate to a page
|
|
15216
|
+
*/
|
|
15217
|
+
setPage(offset) {
|
|
15218
|
+
const totalCount = this.count ?? this.rows.length;
|
|
15219
|
+
const maxOffset = Math.max(0, Math.ceil(totalCount / this.limit) - 1);
|
|
15220
|
+
const newOffset = Math.max(0, Math.min(offset, maxOffset));
|
|
15221
|
+
if (newOffset !== this.offset) {
|
|
15222
|
+
this.offset = newOffset;
|
|
15223
|
+
this.page.emit({
|
|
15224
|
+
offset: newOffset,
|
|
15225
|
+
limit: this.limit,
|
|
15226
|
+
count: totalCount,
|
|
15227
|
+
pageSize: this.limit,
|
|
15228
|
+
});
|
|
15229
|
+
if (!this.externalPaging) {
|
|
15230
|
+
this._processRows();
|
|
15231
|
+
}
|
|
15232
|
+
}
|
|
15233
|
+
}
|
|
15234
|
+
/**
|
|
15235
|
+
* Get total pages count
|
|
15236
|
+
*/
|
|
15237
|
+
get totalPages() {
|
|
15238
|
+
const totalCount = this.count ?? this.rows.length;
|
|
15239
|
+
return Math.ceil(totalCount / this.limit);
|
|
15240
|
+
}
|
|
15241
|
+
/**
|
|
15242
|
+
* Get current page (1-indexed for display)
|
|
15243
|
+
*/
|
|
15244
|
+
get currentPage() {
|
|
15245
|
+
return this.offset + 1;
|
|
15246
|
+
}
|
|
15247
|
+
// ═══════════════════════════════════════════════════════════════════════════
|
|
15248
|
+
// TEMPLATE HELPERS
|
|
15249
|
+
// ═══════════════════════════════════════════════════════════════════════════
|
|
15250
|
+
/**
|
|
15251
|
+
* Get cell value for display
|
|
15252
|
+
*/
|
|
15253
|
+
getCellValue(row, column) {
|
|
15254
|
+
const value = column.$$valueGetter(row);
|
|
15255
|
+
if (column.pipe) {
|
|
15256
|
+
return column.pipe.transform(value);
|
|
15257
|
+
}
|
|
15258
|
+
return value;
|
|
15259
|
+
}
|
|
15260
|
+
/**
|
|
15261
|
+
* Get row to use in template (editing copy if editing, otherwise original)
|
|
15262
|
+
*/
|
|
15263
|
+
getTemplateRow(row) {
|
|
15264
|
+
if (this._originalEditRow === row && this._editingRowCopy) {
|
|
15265
|
+
return this._editingRowCopy;
|
|
15266
|
+
}
|
|
15267
|
+
return row;
|
|
15268
|
+
}
|
|
15269
|
+
/**
|
|
15270
|
+
* Track by function for rows
|
|
15271
|
+
*/
|
|
15272
|
+
trackByRow = (index, row) => {
|
|
15273
|
+
return row;
|
|
15274
|
+
};
|
|
15275
|
+
/**
|
|
15276
|
+
* Track by function for columns
|
|
15277
|
+
*/
|
|
15278
|
+
trackByColumn = (index, column) => {
|
|
15279
|
+
return column.$$id;
|
|
15280
|
+
};
|
|
15281
|
+
/**
|
|
15282
|
+
* Track by function for groups
|
|
15283
|
+
*/
|
|
15284
|
+
trackByGroup = (index, group) => {
|
|
15285
|
+
return group.key;
|
|
15286
|
+
};
|
|
15287
|
+
// ═══════════════════════════════════════════════════════════════════════════
|
|
15288
|
+
// PRIVATE METHODS
|
|
15289
|
+
// ═══════════════════════════════════════════════════════════════════════════
|
|
15290
|
+
_updateColumns() {
|
|
15291
|
+
if (this._columnDirectives && this._columnDirectives.length > 0) {
|
|
15292
|
+
this._internalColumns = this._columnDirectives.map(col => toInternalColumn(col, this.defaultColumnWidth));
|
|
15293
|
+
}
|
|
15294
|
+
else if (this.columns.length > 0) {
|
|
15295
|
+
this._updateColumnsFromInput();
|
|
15296
|
+
}
|
|
15297
|
+
this._cdr.markForCheck();
|
|
15298
|
+
}
|
|
15299
|
+
_updateColumnsFromInput() {
|
|
15300
|
+
this._internalColumns = this.columns.map(col => toInternalColumn(col, this.defaultColumnWidth));
|
|
15301
|
+
}
|
|
15302
|
+
_processRows() {
|
|
15303
|
+
let processed = [...this.rows];
|
|
15304
|
+
// Sort (if internal sorting)
|
|
15305
|
+
if (!this.externalSorting && this.sorts.length > 0) {
|
|
15306
|
+
processed = sortRows(processed, this.sorts, this._internalColumns);
|
|
15307
|
+
}
|
|
15308
|
+
// Paginate (if internal paging)
|
|
15309
|
+
if (!this.externalPaging) {
|
|
15310
|
+
const start = this.offset * this.limit;
|
|
15311
|
+
const end = start + this.limit;
|
|
15312
|
+
processed = processed.slice(start, end);
|
|
15313
|
+
}
|
|
15314
|
+
this._displayRows = processed;
|
|
15315
|
+
// Group if needed
|
|
15316
|
+
if (this.groupRowsBy) {
|
|
15317
|
+
this._groupedRows = groupRowsByProperty(this._displayRows, this.groupRowsBy);
|
|
15318
|
+
}
|
|
15319
|
+
else {
|
|
15320
|
+
this._groupedRows = null;
|
|
15321
|
+
}
|
|
15322
|
+
this._cdr.markForCheck();
|
|
15323
|
+
}
|
|
15324
|
+
_handleEditingRowChange() {
|
|
15325
|
+
if (this.editingRow && this._originalEditRow !== this.editingRow) {
|
|
15326
|
+
// External change - start editing this row
|
|
15327
|
+
const index = this._displayRows.indexOf(this.editingRow);
|
|
15328
|
+
if (index >= 0) {
|
|
15329
|
+
this._originalEditRow = this.editingRow;
|
|
15330
|
+
this._editingRowCopy = deepClone(this.editingRow);
|
|
15331
|
+
this._editingRowIndex = index;
|
|
15332
|
+
}
|
|
15333
|
+
}
|
|
15334
|
+
else if (!this.editingRow && this._originalEditRow) {
|
|
15335
|
+
// External clear
|
|
15336
|
+
this._clearEditState();
|
|
15337
|
+
}
|
|
15338
|
+
}
|
|
15339
|
+
_clearEditState() {
|
|
15340
|
+
this._originalEditRow = null;
|
|
15341
|
+
this._editingRowCopy = null;
|
|
15342
|
+
this._editingRowIndex = -1;
|
|
15343
|
+
this.editingRow = null;
|
|
15344
|
+
this.editingRowChange.emit(null);
|
|
15345
|
+
}
|
|
15346
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.6", ngImport: i0, type: MDCardsGridComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
15347
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.6", type: MDCardsGridComponent, isStandalone: true, selector: "md-cards-grid", inputs: { rows: "rows", columns: "columns", groupRowsBy: "groupRowsBy", groupHeaderTemplate: "groupHeaderTemplate", rowActionsTemplate: "rowActionsTemplate", headerHeight: ["headerHeight", "headerHeight", numberAttribute], cardHeight: "cardHeight", gap: ["gap", "gap", numberAttribute], defaultColumnWidth: ["defaultColumnWidth", "defaultColumnWidth", numberAttribute], showRowActions: ["showRowActions", "showRowActions", booleanAttribute], overflowMode: "overflowMode", enableColumnResize: ["enableColumnResize", "enableColumnResize", booleanAttribute], defaultMinColumnWidth: ["defaultMinColumnWidth", "defaultMinColumnWidth", numberAttribute], defaultMaxColumnWidth: ["defaultMaxColumnWidth", "defaultMaxColumnWidth", numberAttribute], sorts: "sorts", sortType: "sortType", externalSorting: ["externalSorting", "externalSorting", booleanAttribute], enableClearingSortState: ["enableClearingSortState", "enableClearingSortState", booleanAttribute], sortAscendingIcon: "sortAscendingIcon", sortDescendingIcon: "sortDescendingIcon", sortUnsetIcon: "sortUnsetIcon", limit: ["limit", "limit", numberAttribute], offset: ["offset", "offset", numberAttribute], count: ["count", "count", numberAttribute], externalPaging: ["externalPaging", "externalPaging", booleanAttribute], showFooter: ["showFooter", "showFooter", booleanAttribute], footerHeight: ["footerHeight", "footerHeight", numberAttribute], editingRow: "editingRow" }, outputs: { columnResize: "columnResize", sort: "sort", page: "page", editingRowChange: "editingRowChange", rowEditStart: "rowEditStart", rowEditSave: "rowEditSave", rowEditCancel: "rowEditCancel" }, host: { properties: { "class.md-cards-grid-shrink-mode": "this.isShrinkMode" }, classAttribute: "md-cards-grid" }, queries: [{ propertyName: "_columnDirectives", predicate: MDCardsGridColumnDirective }], exportAs: ["mdCardsGrid"], usesOnChanges: true, ngImport: i0, template: "<!-- Scrollable container for header and body -->\r\n<div class=\"md-cards-grid-scroll-container\">\r\n<!-- Header -->\r\n@if (headerHeight > 0) {\r\n<div\r\n class=\"md-cards-grid-header\"\r\n role=\"row\"\r\n [style.height.px]=\"headerHeight\"\r\n>\r\n <div class=\"md-cards-grid-header-inner\">\r\n @for (column of _internalColumns; track trackByColumn($index, column)) {\r\n <div\r\n class=\"md-cards-grid-header-cell\"\r\n role=\"columnheader\"\r\n [class.sortable]=\"column.sortable\"\r\n [class.resizeable]=\"isColumnResizeable(column)\"\r\n [class.sort-active]=\"getSortDir(column)\"\r\n [class.sort-asc]=\"getSortDir(column) === 'asc'\"\r\n [class.sort-desc]=\"getSortDir(column) === 'desc'\"\r\n [style.width.px]=\"column.width\"\r\n [style.min-width.px]=\"column.minWidth\"\r\n [style.max-width.px]=\"column.maxWidth\"\r\n [style.flex-grow]=\"column.flexGrow\"\r\n [attr.title]=\"column.name\"\r\n (click)=\"onColumnSort(column)\"\r\n (keydown.enter)=\"onColumnSort(column)\"\r\n [attr.tabindex]=\"column.sortable ? 0 : -1\"\r\n >\r\n <!-- Custom header template -->\r\n @if (column.headerTemplate) {\r\n <ng-template\r\n [ngTemplateOutlet]=\"column.headerTemplate\"\r\n [ngTemplateOutletContext]=\"{\r\n column: column,\r\n sortDir: getSortDir(column),\r\n sortFn: onColumnSort.bind(this, column)\r\n }\"\r\n />\r\n } @else {\r\n <!-- Default header -->\r\n <span class=\"md-cards-grid-header-cell-label\">{{ column.name }}</span>\r\n @if (column.sortable) {\r\n <span class=\"md-cards-grid-sort-icon\" [ngClass]=\"getSortClass(column)\"></span>\r\n }\r\n }\r\n\r\n <!-- Resize handle -->\r\n @if (isColumnResizeable(column)) {\r\n <span\r\n class=\"md-cards-grid-resize-handle\"\r\n (mousedown)=\"onResizeStart($event, column)\"\r\n ></span>\r\n }\r\n </div>\r\n }\r\n\r\n <!-- Actions header cell -->\r\n @if (showRowActions) {\r\n <div class=\"md-cards-grid-header-cell md-cards-grid-actions-cell\">\r\n <span class=\"md-cards-grid-header-cell-label\"></span>\r\n </div>\r\n }\r\n </div>\r\n</div>\r\n}\r\n\r\n<!-- Body -->\r\n<div class=\"md-cards-grid-body\" [style.gap.px]=\"gap\">\r\n <!-- Grouped rows -->\r\n @if (_groupedRows) {\r\n @for (group of _groupedRows; track trackByGroup($index, group)) {\r\n <div class=\"md-cards-grid-group\">\r\n <!-- Group header -->\r\n <div class=\"md-cards-grid-group-header\">\r\n @if (groupHeaderTemplate) {\r\n <ng-template\r\n [ngTemplateOutlet]=\"groupHeaderTemplate\"\r\n [ngTemplateOutletContext]=\"{ group: group }\"\r\n />\r\n } @else {\r\n <span class=\"md-cards-grid-group-title\">{{ group.key }}</span>\r\n }\r\n </div>\r\n\r\n <!-- Group rows -->\r\n <div class=\"md-cards-grid-group-rows\" [style.gap.px]=\"gap\">\r\n @for (row of group.value; track trackByRow($index, row); let rowIndex = $index) {\r\n <ng-container\r\n *ngTemplateOutlet=\"rowTemplate; context: { row: row, rowIndex: rowIndex, group: group.key }\"\r\n />\r\n }\r\n </div>\r\n </div>\r\n }\r\n } @else {\r\n <!-- Non-grouped rows -->\r\n @for (row of _displayRows; track trackByRow($index, row); let rowIndex = $index) {\r\n <ng-container\r\n *ngTemplateOutlet=\"rowTemplate; context: { row: row, rowIndex: rowIndex, group: null }\"\r\n />\r\n }\r\n }\r\n</div>\r\n</div><!-- End scroll container -->\r\n\r\n<!-- Row template -->\r\n<ng-template #rowTemplate let-row=\"row\" let-rowIndex=\"rowIndex\" let-group=\"group\">\r\n <div\r\n class=\"md-cards-grid-card\"\r\n [class.md-cards-grid-card-editing]=\"isEditing(row)\"\r\n [class.md-cards-grid-card-fixed-height]=\"cardHeight !== 'auto'\"\r\n [style.height]=\"cardHeight === 'auto' ? null : cardHeight + 'px'\"\r\n role=\"row\"\r\n >\r\n @for (column of _internalColumns; track trackByColumn($index, column)) {\r\n <div\r\n class=\"md-cards-grid-cell\"\r\n [style.width.px]=\"column.width\"\r\n [style.min-width.px]=\"column.minWidth\"\r\n [style.max-width.px]=\"column.maxWidth\"\r\n [style.flex-grow]=\"column.flexGrow\"\r\n role=\"cell\"\r\n >\r\n <!-- Edit mode -->\r\n @if (isEditing(row) && column.editTemplate) {\r\n <ng-template\r\n [ngTemplateOutlet]=\"column.editTemplate\"\r\n [ngTemplateOutletContext]=\"{\r\n row: getTemplateRow(row),\r\n originalRow: row,\r\n value: getCellValue(getTemplateRow(row), column),\r\n column: column,\r\n rowIndex: rowIndex,\r\n saveFn: saveRow.bind(this),\r\n cancelFn: cancelEdit.bind(this)\r\n }\"\r\n />\r\n }\r\n <!-- View mode with custom template -->\r\n @else if (column.cellTemplate) {\r\n <ng-template\r\n [ngTemplateOutlet]=\"column.cellTemplate\"\r\n [ngTemplateOutletContext]=\"{\r\n row: row,\r\n value: getCellValue(row, column),\r\n column: column,\r\n rowIndex: rowIndex,\r\n isEditing: isEditing(row),\r\n group: group\r\n }\"\r\n />\r\n }\r\n <!-- Default view mode -->\r\n @else {\r\n <span class=\"md-cards-grid-cell-value\">{{ getCellValue(row, column) }}</span>\r\n }\r\n </div>\r\n }\r\n\r\n <!-- Row actions -->\r\n @if (showRowActions) {\r\n <div class=\"md-cards-grid-cell md-cards-grid-actions-cell\">\r\n @if (rowActionsTemplate) {\r\n <ng-template\r\n [ngTemplateOutlet]=\"rowActionsTemplate\"\r\n [ngTemplateOutletContext]=\"{\r\n row: row,\r\n rowIndex: rowIndex,\r\n isEditing: isEditing(row),\r\n editFn: editRow.bind(this, row),\r\n saveFn: saveRow.bind(this),\r\n cancelFn: cancelEdit.bind(this)\r\n }\"\r\n />\r\n } @else {\r\n <!-- Default actions -->\r\n @if (isEditing(row)) {\r\n <button\r\n type=\"button\"\r\n class=\"md-cards-grid-action-btn md-cards-grid-action-save\"\r\n (click)=\"saveRow()\"\r\n title=\"Save\"\r\n >\r\n <span class=\"md-cards-grid-icon-save\"></span>\r\n </button>\r\n <button\r\n type=\"button\"\r\n class=\"md-cards-grid-action-btn md-cards-grid-action-cancel\"\r\n (click)=\"cancelEdit()\"\r\n title=\"Cancel\"\r\n >\r\n <span class=\"md-cards-grid-icon-cancel\"></span>\r\n </button>\r\n } @else {\r\n <button\r\n type=\"button\"\r\n class=\"md-cards-grid-action-btn md-cards-grid-action-edit\"\r\n (click)=\"editRow(row)\"\r\n title=\"Edit\"\r\n >\r\n <span class=\"md-cards-grid-icon-edit\"></span>\r\n </button>\r\n }\r\n }\r\n </div>\r\n }\r\n </div>\r\n</ng-template>\r\n\r\n<!-- Footer / Pagination -->\r\n@if (showFooter && totalPages > 1) {\r\n<div\r\n class=\"md-cards-grid-footer\"\r\n [style.height.px]=\"footerHeight\"\r\n>\r\n <div class=\"md-cards-grid-pager\">\r\n <button\r\n type=\"button\"\r\n class=\"md-cards-grid-pager-btn\"\r\n [disabled]=\"offset === 0\"\r\n (click)=\"setPage(0)\"\r\n title=\"First page\"\r\n >\r\n <span class=\"md-cards-grid-icon-first\"></span>\r\n </button>\r\n <button\r\n type=\"button\"\r\n class=\"md-cards-grid-pager-btn\"\r\n [disabled]=\"offset === 0\"\r\n (click)=\"setPage(offset - 1)\"\r\n title=\"Previous page\"\r\n >\r\n <span class=\"md-cards-grid-icon-prev\"></span>\r\n </button>\r\n\r\n <span class=\"md-cards-grid-pager-info\">\r\n {{ currentPage }} / {{ totalPages }}\r\n </span>\r\n\r\n <button\r\n type=\"button\"\r\n class=\"md-cards-grid-pager-btn\"\r\n [disabled]=\"offset >= totalPages - 1\"\r\n (click)=\"setPage(offset + 1)\"\r\n title=\"Next page\"\r\n >\r\n <span class=\"md-cards-grid-icon-next\"></span>\r\n </button>\r\n <button\r\n type=\"button\"\r\n class=\"md-cards-grid-pager-btn\"\r\n [disabled]=\"offset >= totalPages - 1\"\r\n (click)=\"setPage(totalPages - 1)\"\r\n title=\"Last page\"\r\n >\r\n <span class=\"md-cards-grid-icon-last\"></span>\r\n </button>\r\n </div>\r\n</div>\r\n}\r\n", styles: ["div.jqxInGridLink{cursor:pointer;color:#00f;margin:2px;text-decoration:underline}div.jqxInGridLink :hover{color:#8a2be2}.pink-text{color:pink!important}.red-text{color:red!important}.turquoise-text{color:#03a796!important}.blue-text{color:#00f!important}.md-cards-grid{display:block;width:100%;font-family:Open Sans,Arial,sans-serif;font-size:13px;background:transparent;border:0;border-radius:0}.md-cards-grid *,.md-cards-grid *:before,.md-cards-grid *:after{box-sizing:border-box}.md-cards-grid-scroll-container{width:100%;overflow-x:auto;overflow-y:hidden}.md-cards-grid-scroll-container::-webkit-scrollbar{height:6px}.md-cards-grid-scroll-container::-webkit-scrollbar-track{background:#f3f3f3;border-radius:3px}.md-cards-grid-scroll-container::-webkit-scrollbar-thumb{background:#929292;border-radius:3px}.md-cards-grid-scroll-container::-webkit-scrollbar-thumb:hover{background:#4d4d4d}.md-cards-grid-shrink-mode .md-cards-grid-scroll-container{overflow-x:hidden}.md-cards-grid-shrink-mode .md-cards-grid-header-inner,.md-cards-grid-shrink-mode .md-cards-grid-card{min-width:0}.md-cards-grid-shrink-mode .md-cards-grid-header-cell,.md-cards-grid-shrink-mode .md-cards-grid-cell{flex-shrink:1}.md-cards-grid-header{display:block;background:transparent;margin:0;padding:0;border:0}.md-cards-grid-header-inner{display:flex;align-items:center;height:100%;min-width:fit-content}.md-cards-grid-header-cell{display:flex;align-items:center;flex-shrink:0;height:100%;padding:14px 16px;background:#fff;font-family:Montserrat,Arial,sans-serif;font-size:14px;font-weight:300;color:#4d4d4d;text-transform:uppercase;letter-spacing:.5px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;-webkit-user-select:none;user-select:none}.md-cards-grid-header-cell:not(:first-child){border-left:2px solid #EAEAEA}.md-cards-grid-header-cell.sortable{cursor:pointer;transition:background-color .2s ease}.md-cards-grid-header-cell.sortable:hover{background:#f3f3f3}.md-cards-grid-header-cell.sortable:focus{outline:0;outline-offset:0}.md-cards-grid-header-cell.sort-active{color:#0185cf}.md-cards-grid-header-cell.resizeable{position:relative}.md-cards-grid-header-cell-label{flex:1;overflow:hidden;text-overflow:ellipsis}.md-cards-grid-sort-icon{display:inline-flex;align-items:center;justify-content:center;width:16px;height:16px;margin-left:2px;color:#929292;transition:color .2s ease}.md-cards-grid-sort-icon:before{font-family:datatable;font-size:12px}.md-cards-grid-sort-icon.md-cards-grid-sort-asc,.md-cards-grid-sort-icon.md-cards-grid-sort-desc{color:#6d5cae}.md-cards-grid-sort-icon.md-cards-grid-sort-asc:after,.md-cards-grid-sort-icon.md-cards-grid-sort-desc:after{content:\"\";display:block;width:0;height:0;border-left:4px solid transparent;border-right:4px solid transparent}.md-cards-grid-sort-icon.md-cards-grid-sort-asc:after{border-bottom:5px solid currentColor}.md-cards-grid-sort-icon.md-cards-grid-sort-desc:after{border-top:5px solid currentColor}.md-cards-grid-resize-handle{position:absolute;top:0;right:-8px;bottom:0;width:10px;cursor:col-resize;z-index:1}.md-cards-grid-resize-handle:after{content:\"\";position:absolute;top:25%;right:2px;bottom:25%;width:3px;background:transparent;border-radius:1px;transition:background-color .2s ease}.md-cards-grid-resize-handle:hover:after{background:#6d5cae}.md-cards-grid-header-cell:last-of-type:not(.md-cards-grid-actions-cell) .md-cards-grid-resize-handle{right:0}.md-cards-grid-header-cell:has(+.md-cards-grid-actions-cell) .md-cards-grid-resize-handle{right:0}body.md-cards-grid-resizing{cursor:col-resize!important;-webkit-user-select:none!important;user-select:none!important}body.md-cards-grid-resizing *{cursor:col-resize!important}.md-cards-grid-body{display:flex;flex-direction:column;padding:12px 0 0;width:fit-content;min-width:fit-content;background:transparent}.md-cards-grid-group{margin-bottom:12px}.md-cards-grid-group:last-child{margin-bottom:0}.md-cards-grid-group-header{display:flex;align-items:center;padding:10px 14px;margin-bottom:12px;background:#eaeaea;border-radius:0;font-size:13px;font-weight:600;color:#000}.md-cards-grid-group-title{flex:1}.md-cards-grid-group-rows{display:flex;flex-direction:column;width:fit-content;gap:5px}.md-cards-grid-card{display:inline-flex;align-items:stretch;width:fit-content;min-width:fit-content;background:#fff;border:0;border-radius:0;box-shadow:none;transition:all .2s ease}.md-cards-grid-card:hover{background:#fbfbfb;box-shadow:0 2px 8px #0000001f;transform:translateY(-1px)}.md-cards-grid-card.md-cards-grid-card-editing{background:#cf01061a;border:0;box-shadow:none}.md-cards-grid-card.md-cards-grid-card-fixed-height,.md-cards-grid-card.md-cards-grid-card-fixed-height .md-cards-grid-cell{overflow:hidden}.md-cards-grid-card.md-cards-grid-card-fixed-height .md-cards-grid-cell-value{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.md-cards-grid-cell{display:flex;align-items:center;flex-shrink:0;padding:14px 16px;font-size:14px;color:#000;border:0;overflow:hidden;min-width:0}.md-cards-grid-cell:last-child{border-right:none}.md-cards-grid-cell-value{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;min-width:0;line-height:1.4}.md-cards-grid-actions-cell{display:flex;align-items:center;justify-content:flex-end;gap:6px;min-width:90px;width:auto!important;flex-grow:0!important;flex-shrink:0!important;padding:inherit;border:0}.md-cards-grid-header-cell.md-cards-grid-actions-cell{border-left:none;border-right:none}.md-cards-grid-action-btn{display:inline-flex;align-items:center;justify-content:center;width:32px;height:32px;padding:0;border:none;border-radius:4px;background:transparent;color:#4d4d4d;cursor:pointer;transition:all .2s ease}.md-cards-grid-action-btn:hover{transform:scale(1.1)}.md-cards-grid-action-btn:focus{outline:2px solid #6d5cae;outline-offset:1px}.md-cards-grid-action-btn:active{transform:scale(.95)}.md-cards-grid-action-edit{color:#6d5cae}.md-cards-grid-action-edit:hover{background:#e9e7f3;color:#564790}.md-cards-grid-action-save{color:#28b446}.md-cards-grid-action-save:hover{background:#dff4e3;color:#1f8a36}.md-cards-grid-action-cancel{color:#cf0106}.md-cards-grid-action-cancel:hover{background:#f8d9da;color:#9c0105}.md-cards-grid-icon-edit,.md-cards-grid-icon-save,.md-cards-grid-icon-cancel{display:inline-block;width:18px;height:18px;position:relative}.md-cards-grid-icon-edit:before,.md-cards-grid-icon-edit:after{content:\"\";position:absolute}.md-cards-grid-icon-edit:before{width:10px;height:10px;border:2px solid currentColor;border-radius:1px;transform:rotate(45deg);top:1px;left:1px}.md-cards-grid-icon-edit:after{width:0;height:0;border-left:3px solid transparent;border-right:3px solid transparent;border-top:5px solid currentColor;bottom:0;left:0;transform:rotate(-45deg)}.md-cards-grid-icon-save:before{content:\"\";position:absolute;width:6px;height:10px;border-right:2px solid currentColor;border-bottom:2px solid currentColor;transform:rotate(45deg);top:1px;left:5px}.md-cards-grid-icon-cancel:before,.md-cards-grid-icon-cancel:after{content:\"\";position:absolute;width:14px;height:2px;background:currentColor;top:50%;left:50%}.md-cards-grid-icon-cancel:before{transform:translate(-50%,-50%) rotate(45deg)}.md-cards-grid-icon-cancel:after{transform:translate(-50%,-50%) rotate(-45deg)}.md-cards-grid-footer{display:flex;align-items:center;justify-content:flex-end;padding:12px 0 0;background:transparent;border-top:0;font-size:12px;color:#4d4d4d}.md-cards-grid-pager{display:flex;align-items:center;gap:4px}.md-cards-grid-pager-btn{display:inline-flex;align-items:center;justify-content:center;width:28px;height:28px;padding:0;border:1px solid #EAEAEA;border-radius:4px;background:#fff;color:#4d4d4d;cursor:pointer;transition:background-color .15s ease,border-color .15s ease}.md-cards-grid-pager-btn:hover:not(:disabled){background:#f3f3f3;border-color:#929292}.md-cards-grid-pager-btn:disabled{opacity:.4;cursor:not-allowed}.md-cards-grid-pager-btn:focus{outline:2px solid #6d5cae;outline-offset:1px}.md-cards-grid-pager-info{padding:0 12px;font-weight:500}.md-cards-grid-icon-first,.md-cards-grid-icon-prev,.md-cards-grid-icon-next,.md-cards-grid-icon-last{display:inline-block;width:12px;height:12px;position:relative}.md-cards-grid-icon-first:before,.md-cards-grid-icon-prev:before,.md-cards-grid-icon-next:before,.md-cards-grid-icon-last:before{content:\"\";position:absolute;width:6px;height:6px;border-right:2px solid currentColor;border-bottom:2px solid currentColor;top:50%;left:50%}.md-cards-grid-icon-prev:before{transform:translate(-25%,-50%) rotate(135deg)}.md-cards-grid-icon-next:before{transform:translate(-75%,-50%) rotate(-45deg)}.md-cards-grid-icon-first:before{transform:translate(-10%,-50%) rotate(135deg)}.md-cards-grid-icon-first:after{content:\"\";position:absolute;width:2px;height:10px;background:currentColor;top:50%;left:2px;transform:translateY(-50%)}.md-cards-grid-icon-last:before{transform:translate(-90%,-50%) rotate(-45deg)}.md-cards-grid-icon-last:after{content:\"\";position:absolute;width:2px;height:10px;background:currentColor;top:50%;right:2px;transform:translateY(-50%)}@media (max-width: 767px){.md-cards-grid{font-size:12px}.md-cards-grid-header{display:none}.md-cards-grid-body{padding:8px}.md-cards-grid-card{flex-direction:column}.md-cards-grid-cell{padding:10px 12px;border-right:none;border-bottom:1px solid #EAEAEA}.md-cards-grid-cell:last-child{border-bottom:none}.md-cards-grid-actions-cell{border-left:none;border-top:1px solid #EAEAEA;justify-content:center;background:#f3f3f3}.md-cards-grid-footer{flex-direction:column;gap:10px;padding:12px}}.md-cards-grid.grey .md-cards-grid-header-cell,.md-cards-grid.grey .md-cards-grid-card{background:#f3f3f3}.md-cards-grid.grey .md-cards-grid-card:hover{background:#efefef}.md-cards-grid.grey .md-cards-grid-card.md-cards-grid-card-editing{background:#cf01061a}.md-cards-grid.zebra .md-cards-grid-card:nth-child(odd){background:#fff}.md-cards-grid.zebra .md-cards-grid-card:nth-child(2n){background:#f3f3f3}.md-cards-grid.zebra .md-cards-grid-card:hover{background:#e4e4e4}.md-cards-grid.zebra .md-cards-grid-card.md-cards-grid-card-editing{background:#cf01061a}.md-cards-grid.zebra .md-cards-grid-group-rows .md-cards-grid-card:nth-child(odd){background:#fff}.md-cards-grid.zebra .md-cards-grid-group-rows .md-cards-grid-card:nth-child(2n){background:#f3f3f3}.md-cards-grid.zebra .md-cards-grid-group-rows .md-cards-grid-card:hover{background:#e4e4e4}.md-cards-grid.zebra .md-cards-grid-group-rows .md-cards-grid-card.md-cards-grid-card-editing{background:#cf01061a}.md-cards-grid.zebra.grey .md-cards-grid-card:nth-child(odd){background:#f3f3f3}.md-cards-grid.zebra.grey .md-cards-grid-card:nth-child(2n){background:#efefef}.md-cards-grid.zebra.grey .md-cards-grid-card:hover{background:#d6d6d6}.md-cards-grid.zebra.grey .md-cards-grid-card.md-cards-grid-card-editing{background:#cf01061a}.md-cards-grid.zebra.grey .md-cards-grid-group-rows .md-cards-grid-card:nth-child(odd){background:#f3f3f3}.md-cards-grid.zebra.grey .md-cards-grid-group-rows .md-cards-grid-card:nth-child(2n){background:#efefef}.md-cards-grid.zebra.grey .md-cards-grid-group-rows .md-cards-grid-card:hover{background:#d6d6d6}.md-cards-grid.zebra.grey .md-cards-grid-group-rows .md-cards-grid-card.md-cards-grid-card-editing{background:#cf01061a}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
|
|
15348
|
+
}
|
|
15349
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.6", ngImport: i0, type: MDCardsGridComponent, decorators: [{
|
|
15350
|
+
type: Component,
|
|
15351
|
+
args: [{ selector: 'md-cards-grid', host: {
|
|
15352
|
+
class: 'md-cards-grid',
|
|
15353
|
+
}, exportAs: 'mdCardsGrid', encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, standalone: true, imports: [CommonModule], template: "<!-- Scrollable container for header and body -->\r\n<div class=\"md-cards-grid-scroll-container\">\r\n<!-- Header -->\r\n@if (headerHeight > 0) {\r\n<div\r\n class=\"md-cards-grid-header\"\r\n role=\"row\"\r\n [style.height.px]=\"headerHeight\"\r\n>\r\n <div class=\"md-cards-grid-header-inner\">\r\n @for (column of _internalColumns; track trackByColumn($index, column)) {\r\n <div\r\n class=\"md-cards-grid-header-cell\"\r\n role=\"columnheader\"\r\n [class.sortable]=\"column.sortable\"\r\n [class.resizeable]=\"isColumnResizeable(column)\"\r\n [class.sort-active]=\"getSortDir(column)\"\r\n [class.sort-asc]=\"getSortDir(column) === 'asc'\"\r\n [class.sort-desc]=\"getSortDir(column) === 'desc'\"\r\n [style.width.px]=\"column.width\"\r\n [style.min-width.px]=\"column.minWidth\"\r\n [style.max-width.px]=\"column.maxWidth\"\r\n [style.flex-grow]=\"column.flexGrow\"\r\n [attr.title]=\"column.name\"\r\n (click)=\"onColumnSort(column)\"\r\n (keydown.enter)=\"onColumnSort(column)\"\r\n [attr.tabindex]=\"column.sortable ? 0 : -1\"\r\n >\r\n <!-- Custom header template -->\r\n @if (column.headerTemplate) {\r\n <ng-template\r\n [ngTemplateOutlet]=\"column.headerTemplate\"\r\n [ngTemplateOutletContext]=\"{\r\n column: column,\r\n sortDir: getSortDir(column),\r\n sortFn: onColumnSort.bind(this, column)\r\n }\"\r\n />\r\n } @else {\r\n <!-- Default header -->\r\n <span class=\"md-cards-grid-header-cell-label\">{{ column.name }}</span>\r\n @if (column.sortable) {\r\n <span class=\"md-cards-grid-sort-icon\" [ngClass]=\"getSortClass(column)\"></span>\r\n }\r\n }\r\n\r\n <!-- Resize handle -->\r\n @if (isColumnResizeable(column)) {\r\n <span\r\n class=\"md-cards-grid-resize-handle\"\r\n (mousedown)=\"onResizeStart($event, column)\"\r\n ></span>\r\n }\r\n </div>\r\n }\r\n\r\n <!-- Actions header cell -->\r\n @if (showRowActions) {\r\n <div class=\"md-cards-grid-header-cell md-cards-grid-actions-cell\">\r\n <span class=\"md-cards-grid-header-cell-label\"></span>\r\n </div>\r\n }\r\n </div>\r\n</div>\r\n}\r\n\r\n<!-- Body -->\r\n<div class=\"md-cards-grid-body\" [style.gap.px]=\"gap\">\r\n <!-- Grouped rows -->\r\n @if (_groupedRows) {\r\n @for (group of _groupedRows; track trackByGroup($index, group)) {\r\n <div class=\"md-cards-grid-group\">\r\n <!-- Group header -->\r\n <div class=\"md-cards-grid-group-header\">\r\n @if (groupHeaderTemplate) {\r\n <ng-template\r\n [ngTemplateOutlet]=\"groupHeaderTemplate\"\r\n [ngTemplateOutletContext]=\"{ group: group }\"\r\n />\r\n } @else {\r\n <span class=\"md-cards-grid-group-title\">{{ group.key }}</span>\r\n }\r\n </div>\r\n\r\n <!-- Group rows -->\r\n <div class=\"md-cards-grid-group-rows\" [style.gap.px]=\"gap\">\r\n @for (row of group.value; track trackByRow($index, row); let rowIndex = $index) {\r\n <ng-container\r\n *ngTemplateOutlet=\"rowTemplate; context: { row: row, rowIndex: rowIndex, group: group.key }\"\r\n />\r\n }\r\n </div>\r\n </div>\r\n }\r\n } @else {\r\n <!-- Non-grouped rows -->\r\n @for (row of _displayRows; track trackByRow($index, row); let rowIndex = $index) {\r\n <ng-container\r\n *ngTemplateOutlet=\"rowTemplate; context: { row: row, rowIndex: rowIndex, group: null }\"\r\n />\r\n }\r\n }\r\n</div>\r\n</div><!-- End scroll container -->\r\n\r\n<!-- Row template -->\r\n<ng-template #rowTemplate let-row=\"row\" let-rowIndex=\"rowIndex\" let-group=\"group\">\r\n <div\r\n class=\"md-cards-grid-card\"\r\n [class.md-cards-grid-card-editing]=\"isEditing(row)\"\r\n [class.md-cards-grid-card-fixed-height]=\"cardHeight !== 'auto'\"\r\n [style.height]=\"cardHeight === 'auto' ? null : cardHeight + 'px'\"\r\n role=\"row\"\r\n >\r\n @for (column of _internalColumns; track trackByColumn($index, column)) {\r\n <div\r\n class=\"md-cards-grid-cell\"\r\n [style.width.px]=\"column.width\"\r\n [style.min-width.px]=\"column.minWidth\"\r\n [style.max-width.px]=\"column.maxWidth\"\r\n [style.flex-grow]=\"column.flexGrow\"\r\n role=\"cell\"\r\n >\r\n <!-- Edit mode -->\r\n @if (isEditing(row) && column.editTemplate) {\r\n <ng-template\r\n [ngTemplateOutlet]=\"column.editTemplate\"\r\n [ngTemplateOutletContext]=\"{\r\n row: getTemplateRow(row),\r\n originalRow: row,\r\n value: getCellValue(getTemplateRow(row), column),\r\n column: column,\r\n rowIndex: rowIndex,\r\n saveFn: saveRow.bind(this),\r\n cancelFn: cancelEdit.bind(this)\r\n }\"\r\n />\r\n }\r\n <!-- View mode with custom template -->\r\n @else if (column.cellTemplate) {\r\n <ng-template\r\n [ngTemplateOutlet]=\"column.cellTemplate\"\r\n [ngTemplateOutletContext]=\"{\r\n row: row,\r\n value: getCellValue(row, column),\r\n column: column,\r\n rowIndex: rowIndex,\r\n isEditing: isEditing(row),\r\n group: group\r\n }\"\r\n />\r\n }\r\n <!-- Default view mode -->\r\n @else {\r\n <span class=\"md-cards-grid-cell-value\">{{ getCellValue(row, column) }}</span>\r\n }\r\n </div>\r\n }\r\n\r\n <!-- Row actions -->\r\n @if (showRowActions) {\r\n <div class=\"md-cards-grid-cell md-cards-grid-actions-cell\">\r\n @if (rowActionsTemplate) {\r\n <ng-template\r\n [ngTemplateOutlet]=\"rowActionsTemplate\"\r\n [ngTemplateOutletContext]=\"{\r\n row: row,\r\n rowIndex: rowIndex,\r\n isEditing: isEditing(row),\r\n editFn: editRow.bind(this, row),\r\n saveFn: saveRow.bind(this),\r\n cancelFn: cancelEdit.bind(this)\r\n }\"\r\n />\r\n } @else {\r\n <!-- Default actions -->\r\n @if (isEditing(row)) {\r\n <button\r\n type=\"button\"\r\n class=\"md-cards-grid-action-btn md-cards-grid-action-save\"\r\n (click)=\"saveRow()\"\r\n title=\"Save\"\r\n >\r\n <span class=\"md-cards-grid-icon-save\"></span>\r\n </button>\r\n <button\r\n type=\"button\"\r\n class=\"md-cards-grid-action-btn md-cards-grid-action-cancel\"\r\n (click)=\"cancelEdit()\"\r\n title=\"Cancel\"\r\n >\r\n <span class=\"md-cards-grid-icon-cancel\"></span>\r\n </button>\r\n } @else {\r\n <button\r\n type=\"button\"\r\n class=\"md-cards-grid-action-btn md-cards-grid-action-edit\"\r\n (click)=\"editRow(row)\"\r\n title=\"Edit\"\r\n >\r\n <span class=\"md-cards-grid-icon-edit\"></span>\r\n </button>\r\n }\r\n }\r\n </div>\r\n }\r\n </div>\r\n</ng-template>\r\n\r\n<!-- Footer / Pagination -->\r\n@if (showFooter && totalPages > 1) {\r\n<div\r\n class=\"md-cards-grid-footer\"\r\n [style.height.px]=\"footerHeight\"\r\n>\r\n <div class=\"md-cards-grid-pager\">\r\n <button\r\n type=\"button\"\r\n class=\"md-cards-grid-pager-btn\"\r\n [disabled]=\"offset === 0\"\r\n (click)=\"setPage(0)\"\r\n title=\"First page\"\r\n >\r\n <span class=\"md-cards-grid-icon-first\"></span>\r\n </button>\r\n <button\r\n type=\"button\"\r\n class=\"md-cards-grid-pager-btn\"\r\n [disabled]=\"offset === 0\"\r\n (click)=\"setPage(offset - 1)\"\r\n title=\"Previous page\"\r\n >\r\n <span class=\"md-cards-grid-icon-prev\"></span>\r\n </button>\r\n\r\n <span class=\"md-cards-grid-pager-info\">\r\n {{ currentPage }} / {{ totalPages }}\r\n </span>\r\n\r\n <button\r\n type=\"button\"\r\n class=\"md-cards-grid-pager-btn\"\r\n [disabled]=\"offset >= totalPages - 1\"\r\n (click)=\"setPage(offset + 1)\"\r\n title=\"Next page\"\r\n >\r\n <span class=\"md-cards-grid-icon-next\"></span>\r\n </button>\r\n <button\r\n type=\"button\"\r\n class=\"md-cards-grid-pager-btn\"\r\n [disabled]=\"offset >= totalPages - 1\"\r\n (click)=\"setPage(totalPages - 1)\"\r\n title=\"Last page\"\r\n >\r\n <span class=\"md-cards-grid-icon-last\"></span>\r\n </button>\r\n </div>\r\n</div>\r\n}\r\n", styles: ["div.jqxInGridLink{cursor:pointer;color:#00f;margin:2px;text-decoration:underline}div.jqxInGridLink :hover{color:#8a2be2}.pink-text{color:pink!important}.red-text{color:red!important}.turquoise-text{color:#03a796!important}.blue-text{color:#00f!important}.md-cards-grid{display:block;width:100%;font-family:Open Sans,Arial,sans-serif;font-size:13px;background:transparent;border:0;border-radius:0}.md-cards-grid *,.md-cards-grid *:before,.md-cards-grid *:after{box-sizing:border-box}.md-cards-grid-scroll-container{width:100%;overflow-x:auto;overflow-y:hidden}.md-cards-grid-scroll-container::-webkit-scrollbar{height:6px}.md-cards-grid-scroll-container::-webkit-scrollbar-track{background:#f3f3f3;border-radius:3px}.md-cards-grid-scroll-container::-webkit-scrollbar-thumb{background:#929292;border-radius:3px}.md-cards-grid-scroll-container::-webkit-scrollbar-thumb:hover{background:#4d4d4d}.md-cards-grid-shrink-mode .md-cards-grid-scroll-container{overflow-x:hidden}.md-cards-grid-shrink-mode .md-cards-grid-header-inner,.md-cards-grid-shrink-mode .md-cards-grid-card{min-width:0}.md-cards-grid-shrink-mode .md-cards-grid-header-cell,.md-cards-grid-shrink-mode .md-cards-grid-cell{flex-shrink:1}.md-cards-grid-header{display:block;background:transparent;margin:0;padding:0;border:0}.md-cards-grid-header-inner{display:flex;align-items:center;height:100%;min-width:fit-content}.md-cards-grid-header-cell{display:flex;align-items:center;flex-shrink:0;height:100%;padding:14px 16px;background:#fff;font-family:Montserrat,Arial,sans-serif;font-size:14px;font-weight:300;color:#4d4d4d;text-transform:uppercase;letter-spacing:.5px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;-webkit-user-select:none;user-select:none}.md-cards-grid-header-cell:not(:first-child){border-left:2px solid #EAEAEA}.md-cards-grid-header-cell.sortable{cursor:pointer;transition:background-color .2s ease}.md-cards-grid-header-cell.sortable:hover{background:#f3f3f3}.md-cards-grid-header-cell.sortable:focus{outline:0;outline-offset:0}.md-cards-grid-header-cell.sort-active{color:#0185cf}.md-cards-grid-header-cell.resizeable{position:relative}.md-cards-grid-header-cell-label{flex:1;overflow:hidden;text-overflow:ellipsis}.md-cards-grid-sort-icon{display:inline-flex;align-items:center;justify-content:center;width:16px;height:16px;margin-left:2px;color:#929292;transition:color .2s ease}.md-cards-grid-sort-icon:before{font-family:datatable;font-size:12px}.md-cards-grid-sort-icon.md-cards-grid-sort-asc,.md-cards-grid-sort-icon.md-cards-grid-sort-desc{color:#6d5cae}.md-cards-grid-sort-icon.md-cards-grid-sort-asc:after,.md-cards-grid-sort-icon.md-cards-grid-sort-desc:after{content:\"\";display:block;width:0;height:0;border-left:4px solid transparent;border-right:4px solid transparent}.md-cards-grid-sort-icon.md-cards-grid-sort-asc:after{border-bottom:5px solid currentColor}.md-cards-grid-sort-icon.md-cards-grid-sort-desc:after{border-top:5px solid currentColor}.md-cards-grid-resize-handle{position:absolute;top:0;right:-8px;bottom:0;width:10px;cursor:col-resize;z-index:1}.md-cards-grid-resize-handle:after{content:\"\";position:absolute;top:25%;right:2px;bottom:25%;width:3px;background:transparent;border-radius:1px;transition:background-color .2s ease}.md-cards-grid-resize-handle:hover:after{background:#6d5cae}.md-cards-grid-header-cell:last-of-type:not(.md-cards-grid-actions-cell) .md-cards-grid-resize-handle{right:0}.md-cards-grid-header-cell:has(+.md-cards-grid-actions-cell) .md-cards-grid-resize-handle{right:0}body.md-cards-grid-resizing{cursor:col-resize!important;-webkit-user-select:none!important;user-select:none!important}body.md-cards-grid-resizing *{cursor:col-resize!important}.md-cards-grid-body{display:flex;flex-direction:column;padding:12px 0 0;width:fit-content;min-width:fit-content;background:transparent}.md-cards-grid-group{margin-bottom:12px}.md-cards-grid-group:last-child{margin-bottom:0}.md-cards-grid-group-header{display:flex;align-items:center;padding:10px 14px;margin-bottom:12px;background:#eaeaea;border-radius:0;font-size:13px;font-weight:600;color:#000}.md-cards-grid-group-title{flex:1}.md-cards-grid-group-rows{display:flex;flex-direction:column;width:fit-content;gap:5px}.md-cards-grid-card{display:inline-flex;align-items:stretch;width:fit-content;min-width:fit-content;background:#fff;border:0;border-radius:0;box-shadow:none;transition:all .2s ease}.md-cards-grid-card:hover{background:#fbfbfb;box-shadow:0 2px 8px #0000001f;transform:translateY(-1px)}.md-cards-grid-card.md-cards-grid-card-editing{background:#cf01061a;border:0;box-shadow:none}.md-cards-grid-card.md-cards-grid-card-fixed-height,.md-cards-grid-card.md-cards-grid-card-fixed-height .md-cards-grid-cell{overflow:hidden}.md-cards-grid-card.md-cards-grid-card-fixed-height .md-cards-grid-cell-value{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.md-cards-grid-cell{display:flex;align-items:center;flex-shrink:0;padding:14px 16px;font-size:14px;color:#000;border:0;overflow:hidden;min-width:0}.md-cards-grid-cell:last-child{border-right:none}.md-cards-grid-cell-value{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;min-width:0;line-height:1.4}.md-cards-grid-actions-cell{display:flex;align-items:center;justify-content:flex-end;gap:6px;min-width:90px;width:auto!important;flex-grow:0!important;flex-shrink:0!important;padding:inherit;border:0}.md-cards-grid-header-cell.md-cards-grid-actions-cell{border-left:none;border-right:none}.md-cards-grid-action-btn{display:inline-flex;align-items:center;justify-content:center;width:32px;height:32px;padding:0;border:none;border-radius:4px;background:transparent;color:#4d4d4d;cursor:pointer;transition:all .2s ease}.md-cards-grid-action-btn:hover{transform:scale(1.1)}.md-cards-grid-action-btn:focus{outline:2px solid #6d5cae;outline-offset:1px}.md-cards-grid-action-btn:active{transform:scale(.95)}.md-cards-grid-action-edit{color:#6d5cae}.md-cards-grid-action-edit:hover{background:#e9e7f3;color:#564790}.md-cards-grid-action-save{color:#28b446}.md-cards-grid-action-save:hover{background:#dff4e3;color:#1f8a36}.md-cards-grid-action-cancel{color:#cf0106}.md-cards-grid-action-cancel:hover{background:#f8d9da;color:#9c0105}.md-cards-grid-icon-edit,.md-cards-grid-icon-save,.md-cards-grid-icon-cancel{display:inline-block;width:18px;height:18px;position:relative}.md-cards-grid-icon-edit:before,.md-cards-grid-icon-edit:after{content:\"\";position:absolute}.md-cards-grid-icon-edit:before{width:10px;height:10px;border:2px solid currentColor;border-radius:1px;transform:rotate(45deg);top:1px;left:1px}.md-cards-grid-icon-edit:after{width:0;height:0;border-left:3px solid transparent;border-right:3px solid transparent;border-top:5px solid currentColor;bottom:0;left:0;transform:rotate(-45deg)}.md-cards-grid-icon-save:before{content:\"\";position:absolute;width:6px;height:10px;border-right:2px solid currentColor;border-bottom:2px solid currentColor;transform:rotate(45deg);top:1px;left:5px}.md-cards-grid-icon-cancel:before,.md-cards-grid-icon-cancel:after{content:\"\";position:absolute;width:14px;height:2px;background:currentColor;top:50%;left:50%}.md-cards-grid-icon-cancel:before{transform:translate(-50%,-50%) rotate(45deg)}.md-cards-grid-icon-cancel:after{transform:translate(-50%,-50%) rotate(-45deg)}.md-cards-grid-footer{display:flex;align-items:center;justify-content:flex-end;padding:12px 0 0;background:transparent;border-top:0;font-size:12px;color:#4d4d4d}.md-cards-grid-pager{display:flex;align-items:center;gap:4px}.md-cards-grid-pager-btn{display:inline-flex;align-items:center;justify-content:center;width:28px;height:28px;padding:0;border:1px solid #EAEAEA;border-radius:4px;background:#fff;color:#4d4d4d;cursor:pointer;transition:background-color .15s ease,border-color .15s ease}.md-cards-grid-pager-btn:hover:not(:disabled){background:#f3f3f3;border-color:#929292}.md-cards-grid-pager-btn:disabled{opacity:.4;cursor:not-allowed}.md-cards-grid-pager-btn:focus{outline:2px solid #6d5cae;outline-offset:1px}.md-cards-grid-pager-info{padding:0 12px;font-weight:500}.md-cards-grid-icon-first,.md-cards-grid-icon-prev,.md-cards-grid-icon-next,.md-cards-grid-icon-last{display:inline-block;width:12px;height:12px;position:relative}.md-cards-grid-icon-first:before,.md-cards-grid-icon-prev:before,.md-cards-grid-icon-next:before,.md-cards-grid-icon-last:before{content:\"\";position:absolute;width:6px;height:6px;border-right:2px solid currentColor;border-bottom:2px solid currentColor;top:50%;left:50%}.md-cards-grid-icon-prev:before{transform:translate(-25%,-50%) rotate(135deg)}.md-cards-grid-icon-next:before{transform:translate(-75%,-50%) rotate(-45deg)}.md-cards-grid-icon-first:before{transform:translate(-10%,-50%) rotate(135deg)}.md-cards-grid-icon-first:after{content:\"\";position:absolute;width:2px;height:10px;background:currentColor;top:50%;left:2px;transform:translateY(-50%)}.md-cards-grid-icon-last:before{transform:translate(-90%,-50%) rotate(-45deg)}.md-cards-grid-icon-last:after{content:\"\";position:absolute;width:2px;height:10px;background:currentColor;top:50%;right:2px;transform:translateY(-50%)}@media (max-width: 767px){.md-cards-grid{font-size:12px}.md-cards-grid-header{display:none}.md-cards-grid-body{padding:8px}.md-cards-grid-card{flex-direction:column}.md-cards-grid-cell{padding:10px 12px;border-right:none;border-bottom:1px solid #EAEAEA}.md-cards-grid-cell:last-child{border-bottom:none}.md-cards-grid-actions-cell{border-left:none;border-top:1px solid #EAEAEA;justify-content:center;background:#f3f3f3}.md-cards-grid-footer{flex-direction:column;gap:10px;padding:12px}}.md-cards-grid.grey .md-cards-grid-header-cell,.md-cards-grid.grey .md-cards-grid-card{background:#f3f3f3}.md-cards-grid.grey .md-cards-grid-card:hover{background:#efefef}.md-cards-grid.grey .md-cards-grid-card.md-cards-grid-card-editing{background:#cf01061a}.md-cards-grid.zebra .md-cards-grid-card:nth-child(odd){background:#fff}.md-cards-grid.zebra .md-cards-grid-card:nth-child(2n){background:#f3f3f3}.md-cards-grid.zebra .md-cards-grid-card:hover{background:#e4e4e4}.md-cards-grid.zebra .md-cards-grid-card.md-cards-grid-card-editing{background:#cf01061a}.md-cards-grid.zebra .md-cards-grid-group-rows .md-cards-grid-card:nth-child(odd){background:#fff}.md-cards-grid.zebra .md-cards-grid-group-rows .md-cards-grid-card:nth-child(2n){background:#f3f3f3}.md-cards-grid.zebra .md-cards-grid-group-rows .md-cards-grid-card:hover{background:#e4e4e4}.md-cards-grid.zebra .md-cards-grid-group-rows .md-cards-grid-card.md-cards-grid-card-editing{background:#cf01061a}.md-cards-grid.zebra.grey .md-cards-grid-card:nth-child(odd){background:#f3f3f3}.md-cards-grid.zebra.grey .md-cards-grid-card:nth-child(2n){background:#efefef}.md-cards-grid.zebra.grey .md-cards-grid-card:hover{background:#d6d6d6}.md-cards-grid.zebra.grey .md-cards-grid-card.md-cards-grid-card-editing{background:#cf01061a}.md-cards-grid.zebra.grey .md-cards-grid-group-rows .md-cards-grid-card:nth-child(odd){background:#f3f3f3}.md-cards-grid.zebra.grey .md-cards-grid-group-rows .md-cards-grid-card:nth-child(2n){background:#efefef}.md-cards-grid.zebra.grey .md-cards-grid-group-rows .md-cards-grid-card:hover{background:#d6d6d6}.md-cards-grid.zebra.grey .md-cards-grid-group-rows .md-cards-grid-card.md-cards-grid-card-editing{background:#cf01061a}\n"] }]
|
|
15354
|
+
}], propDecorators: { isShrinkMode: [{
|
|
15355
|
+
type: HostBinding,
|
|
15356
|
+
args: ['class.md-cards-grid-shrink-mode']
|
|
15357
|
+
}], rows: [{
|
|
15358
|
+
type: Input
|
|
15359
|
+
}], columns: [{
|
|
15360
|
+
type: Input
|
|
15361
|
+
}], groupRowsBy: [{
|
|
15362
|
+
type: Input
|
|
15363
|
+
}], groupHeaderTemplate: [{
|
|
15364
|
+
type: Input
|
|
15365
|
+
}], rowActionsTemplate: [{
|
|
15366
|
+
type: Input
|
|
15367
|
+
}], headerHeight: [{
|
|
15368
|
+
type: Input,
|
|
15369
|
+
args: [{ transform: numberAttribute }]
|
|
15370
|
+
}], cardHeight: [{
|
|
15371
|
+
type: Input
|
|
15372
|
+
}], gap: [{
|
|
15373
|
+
type: Input,
|
|
15374
|
+
args: [{ transform: numberAttribute }]
|
|
15375
|
+
}], defaultColumnWidth: [{
|
|
15376
|
+
type: Input,
|
|
15377
|
+
args: [{ transform: numberAttribute }]
|
|
15378
|
+
}], showRowActions: [{
|
|
15379
|
+
type: Input,
|
|
15380
|
+
args: [{ transform: booleanAttribute }]
|
|
15381
|
+
}], overflowMode: [{
|
|
15382
|
+
type: Input
|
|
15383
|
+
}], enableColumnResize: [{
|
|
15384
|
+
type: Input,
|
|
15385
|
+
args: [{ transform: booleanAttribute }]
|
|
15386
|
+
}], defaultMinColumnWidth: [{
|
|
15387
|
+
type: Input,
|
|
15388
|
+
args: [{ transform: numberAttribute }]
|
|
15389
|
+
}], defaultMaxColumnWidth: [{
|
|
15390
|
+
type: Input,
|
|
15391
|
+
args: [{ transform: numberAttribute }]
|
|
15392
|
+
}], columnResize: [{
|
|
15393
|
+
type: Output
|
|
15394
|
+
}], sorts: [{
|
|
15395
|
+
type: Input
|
|
15396
|
+
}], sortType: [{
|
|
15397
|
+
type: Input
|
|
15398
|
+
}], externalSorting: [{
|
|
15399
|
+
type: Input,
|
|
15400
|
+
args: [{ transform: booleanAttribute }]
|
|
15401
|
+
}], enableClearingSortState: [{
|
|
15402
|
+
type: Input,
|
|
15403
|
+
args: [{ transform: booleanAttribute }]
|
|
15404
|
+
}], sortAscendingIcon: [{
|
|
15405
|
+
type: Input
|
|
15406
|
+
}], sortDescendingIcon: [{
|
|
15407
|
+
type: Input
|
|
15408
|
+
}], sortUnsetIcon: [{
|
|
15409
|
+
type: Input
|
|
15410
|
+
}], sort: [{
|
|
15411
|
+
type: Output
|
|
15412
|
+
}], limit: [{
|
|
15413
|
+
type: Input,
|
|
15414
|
+
args: [{ transform: numberAttribute }]
|
|
15415
|
+
}], offset: [{
|
|
15416
|
+
type: Input,
|
|
15417
|
+
args: [{ transform: numberAttribute }]
|
|
15418
|
+
}], count: [{
|
|
15419
|
+
type: Input,
|
|
15420
|
+
args: [{ transform: numberAttribute }]
|
|
15421
|
+
}], externalPaging: [{
|
|
15422
|
+
type: Input,
|
|
15423
|
+
args: [{ transform: booleanAttribute }]
|
|
15424
|
+
}], showFooter: [{
|
|
15425
|
+
type: Input,
|
|
15426
|
+
args: [{ transform: booleanAttribute }]
|
|
15427
|
+
}], footerHeight: [{
|
|
15428
|
+
type: Input,
|
|
15429
|
+
args: [{ transform: numberAttribute }]
|
|
15430
|
+
}], page: [{
|
|
15431
|
+
type: Output
|
|
15432
|
+
}], editingRow: [{
|
|
15433
|
+
type: Input
|
|
15434
|
+
}], editingRowChange: [{
|
|
15435
|
+
type: Output
|
|
15436
|
+
}], rowEditStart: [{
|
|
15437
|
+
type: Output
|
|
15438
|
+
}], rowEditSave: [{
|
|
15439
|
+
type: Output
|
|
15440
|
+
}], rowEditCancel: [{
|
|
15441
|
+
type: Output
|
|
15442
|
+
}], _columnDirectives: [{
|
|
15443
|
+
type: ContentChildren,
|
|
15444
|
+
args: [MDCardsGridColumnDirective]
|
|
15445
|
+
}] } });
|
|
15446
|
+
|
|
15447
|
+
const DECLARATIONS = [
|
|
15448
|
+
MDCardsGridComponent,
|
|
15449
|
+
MDCardsGridColumnDirective,
|
|
15450
|
+
MDCardsGridCellTemplateDirective,
|
|
15451
|
+
MDCardsGridHeaderTemplateDirective,
|
|
15452
|
+
MDCardsGridEditTemplateDirective,
|
|
15453
|
+
];
|
|
15454
|
+
class MDCardsGridModule {
|
|
15455
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.6", ngImport: i0, type: MDCardsGridModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
|
|
15456
|
+
static ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "20.3.6", ngImport: i0, type: MDCardsGridModule, imports: [CommonModule, MDCardsGridComponent,
|
|
15457
|
+
MDCardsGridColumnDirective,
|
|
15458
|
+
MDCardsGridCellTemplateDirective,
|
|
15459
|
+
MDCardsGridHeaderTemplateDirective,
|
|
15460
|
+
MDCardsGridEditTemplateDirective], exports: [MDCardsGridComponent,
|
|
15461
|
+
MDCardsGridColumnDirective,
|
|
15462
|
+
MDCardsGridCellTemplateDirective,
|
|
15463
|
+
MDCardsGridHeaderTemplateDirective,
|
|
15464
|
+
MDCardsGridEditTemplateDirective] });
|
|
15465
|
+
static ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "20.3.6", ngImport: i0, type: MDCardsGridModule, imports: [CommonModule, MDCardsGridComponent] });
|
|
15466
|
+
}
|
|
15467
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.6", ngImport: i0, type: MDCardsGridModule, decorators: [{
|
|
15468
|
+
type: NgModule,
|
|
15469
|
+
args: [{
|
|
15470
|
+
imports: [
|
|
15471
|
+
CommonModule,
|
|
15472
|
+
...DECLARATIONS,
|
|
15473
|
+
],
|
|
15474
|
+
exports: DECLARATIONS,
|
|
15475
|
+
}]
|
|
15476
|
+
}] });
|
|
15477
|
+
|
|
15478
|
+
// Components
|
|
15479
|
+
|
|
14449
15480
|
/**
|
|
14450
15481
|
* Generated bundle index. Do not edit.
|
|
14451
15482
|
*/
|
|
14452
15483
|
|
|
14453
|
-
export { ACCORDION, CARD_CONFIG, CardSimpleComponent, CentralPageComponent, CentralPageRowComponent, CollapseComponent, CollapseSetComponent, DIALOG_DATA, DIALOG_DEFAULT_OPTIONS, DIALOG_SCROLL_STRATEGY, DialogState, EXPANSION_PANEL_DEFAULT_OPTIONS, ErrorStateMatcher, ExpansionPanelActionRow, ExpansionPanelDescription, ExpansionPanelTitle, FillComponent, FilteredFieldContainerComponent, FilteredFieldItemComponent, FilteredFieldService, FiltredItemModel, INK_BAR_POSITIONER, INK_BAR_POSITIONER_FACTORY, InkBar, MDAccordion, MDAutocomplete, MDAutocompleteModule, MDAutocompleteOrigin, MDAutocompleteSelectedEvent, MDAutocompleteTrigger, MDCard, MDCardActions, MDCardAvatar, MDCardContent, MDCardFooter, MDCardHeader, MDCardImage, MDCardLgImage, MDCardMdImage, MDCardModule, MDCardSmImage, MDCardSubtitle, MDCardTitle, MDCardTitleGroup, MDCardXlImage, MDCheckBox, MDCheckBoxModule, MDCheckboxChange, MDChip, MDChipAvatar, MDChipEdit, MDChipEditInput, MDChipGrid, MDChipGridChange, MDChipInput, MDChipListbox, MDChipListboxChange, MDChipOption, MDChipRemove, MDChipRow, MDChipSelectionChange, MDChipSet, MDChipTrailingIcon, MDChipsModule, MDCollapseModule, MDContextMenuTrigger, MDDialog, MDDialogActions, MDDialogClose, MDDialogContainer, MDDialogContent, MDDialogTitle, MDExpansionPanel, MDExpansionPanelContent, MDExpansionPanelHeader, MDHeaderCardComponent, MDHeaderCardModule, MDHeaderCardSetComponent, MDMenu, MDMenuContent, MDMenuItem, MDMenuModule, MDMenuTrigger, MDModalModule, MDOption, MDOptionGroup, MDOptionModule, MDOptionSelectionChange, MDPseudoCheckboxModule, MDRadioButton, MDRadioGroup, MDRadioModule, MDSelect, MDSelectModule, MDSelectTrigger, MDStep, MDStepContent, MDStepExecutorModule, MDStepFooter, MDStepHeader, MDStepLabel, MDStepper, MDStepperIcon, MDStepperNext, MDStepperPrevious, MDSwitch, MDSwitchModule, MDTab, MDTabBody, MDTabChangeEvent, MDTabContent, MDTabGroup, MDTabHeader, MDTabLabel, MDTabLabelWrapper, MDTabsModule, MD_AUTOCOMPLETE_DEFAULT_OPTIONS, MD_AUTOCOMPLETE_SCROLL_STRATEGY, MD_AUTOCOMPLETE_VALUE_ACCESSOR, MD_CHIP, MD_CHIPS_DEFAULT_OPTIONS, MD_CHIP_AVATAR, MD_CHIP_EDIT, MD_CHIP_LISTBOX_CONTROL_VALUE_ACCESSOR, MD_CHIP_REMOVE, MD_CHIP_TRAILING_ICON, MD_EXPANSION_PANEL, MD_MENU_CONTENT, MD_MENU_DEFAULT_OPTIONS, MD_MENU_PANEL, MD_MENU_SCROLL_STRATEGY, MD_OPTION_PARENT_COMPONENT, MD_RADIO_GROUP, MD_SELECT_TRIGGER, MD_TAB, MD_TAB_LABEL, MENU_PANEL_TOP_PADDING, ManagePageComponent, MefDevCardModule, MefDevCollapseModule, MefDevDialogConfig, MefDevDialogRef, MefDevDropDownMenuModule, MefDevFilteredFieldModule, MefDevModalModule, MefDevOptionComponent, MefDevPageLayoutsModule, MefDevProgressComponent, MefDevProgressModule, MefDevSelectComponent, MefDevSelectModule, MefDevStepExecutorModule, MefDevSwitchComponent, MefDevSwitchModule, MefDevTabBodyComponent, MefDevTabComponent, MefDevTabLabelDirective, MefDevTabSetComponent, MefDevTabsInkBarDirective, MefDevTabsModule, MefDevTabsNavComponent, MefdevDropdownMenuComponent, MefdevExecutorPageComponent, OptionPipe, PaginatedTabHeader, ProgressConfig, PseudoCheckbox, RADIO_GROUP_CONTROL_VALUE_ACCESSOR, RadioChange, RightFilterComponent, STEPPER_INTL_PROVIDER, STEPPER_INTL_PROVIDER_FACTORY, SelectChange, ShowOnDirtyErrorStateMatcher, SlideRightComponent, SlideUpComponent, StageComponent, StepExecutorComponent, StepperErrorStateMatcher, StepperIntl, TABS_CONFIG, TAB_CONTENT, TAB_GROUP, TabBodyPortal, TabChangeEvent, TablePageComponent, TransitionCheckState, _ErrorStateTracker, _closeDialogVia, _countGroupLabelsBeforeOption, _getOptionScrollPosition, components, getMDAutocompleteMissingPanelError, getMDSelectDynamicMultipleError, getMDSelectNonArrayValueError, getMDSelectNonFunctionValueError, mefDevCardComponents, mefDevCollapseModuleComponents };
|
|
15484
|
+
export { ACCORDION, CARD_CONFIG, CardSimpleComponent, CentralPageComponent, CentralPageRowComponent, CollapseComponent, CollapseSetComponent, DIALOG_DATA, DIALOG_DEFAULT_OPTIONS, DIALOG_SCROLL_STRATEGY, DialogState, EXPANSION_PANEL_DEFAULT_OPTIONS, ErrorStateMatcher, ExpansionPanelActionRow, ExpansionPanelDescription, ExpansionPanelTitle, FillComponent, FilteredFieldContainerComponent, FilteredFieldItemComponent, FilteredFieldService, FiltredItemModel, INK_BAR_POSITIONER, INK_BAR_POSITIONER_FACTORY, InkBar, MDAccordion, MDAutocomplete, MDAutocompleteModule, MDAutocompleteOrigin, MDAutocompleteSelectedEvent, MDAutocompleteTrigger, MDCard, MDCardActions, MDCardAvatar, MDCardContent, MDCardFooter, MDCardHeader, MDCardImage, MDCardLgImage, MDCardMdImage, MDCardModule, MDCardSmImage, MDCardSubtitle, MDCardTitle, MDCardTitleGroup, MDCardXlImage, MDCardsGridCellTemplateDirective, MDCardsGridColumnDirective, MDCardsGridComponent, MDCardsGridEditTemplateDirective, MDCardsGridHeaderTemplateDirective, MDCardsGridModule, MDCheckBox, MDCheckBoxModule, MDCheckboxChange, MDChip, MDChipAvatar, MDChipEdit, MDChipEditInput, MDChipGrid, MDChipGridChange, MDChipInput, MDChipListbox, MDChipListboxChange, MDChipOption, MDChipRemove, MDChipRow, MDChipSelectionChange, MDChipSet, MDChipTrailingIcon, MDChipsModule, MDCollapseModule, MDContextMenuTrigger, MDDialog, MDDialogActions, MDDialogClose, MDDialogContainer, MDDialogContent, MDDialogTitle, MDExpansionPanel, MDExpansionPanelContent, MDExpansionPanelHeader, MDHeaderCardComponent, MDHeaderCardModule, MDHeaderCardSetComponent, MDMenu, MDMenuContent, MDMenuItem, MDMenuModule, MDMenuTrigger, MDModalModule, MDOption, MDOptionGroup, MDOptionModule, MDOptionSelectionChange, MDPseudoCheckboxModule, MDRadioButton, MDRadioGroup, MDRadioModule, MDSelect, MDSelectModule, MDSelectTrigger, MDStep, MDStepContent, MDStepExecutorModule, MDStepFooter, MDStepHeader, MDStepLabel, MDStepper, MDStepperIcon, MDStepperNext, MDStepperPrevious, MDSwitch, MDSwitchModule, MDTab, MDTabBody, MDTabChangeEvent, MDTabContent, MDTabGroup, MDTabHeader, MDTabLabel, MDTabLabelWrapper, MDTabsModule, MD_AUTOCOMPLETE_DEFAULT_OPTIONS, MD_AUTOCOMPLETE_SCROLL_STRATEGY, MD_AUTOCOMPLETE_VALUE_ACCESSOR, MD_CHIP, MD_CHIPS_DEFAULT_OPTIONS, MD_CHIP_AVATAR, MD_CHIP_EDIT, MD_CHIP_LISTBOX_CONTROL_VALUE_ACCESSOR, MD_CHIP_REMOVE, MD_CHIP_TRAILING_ICON, MD_EXPANSION_PANEL, MD_MENU_CONTENT, MD_MENU_DEFAULT_OPTIONS, MD_MENU_PANEL, MD_MENU_SCROLL_STRATEGY, MD_OPTION_PARENT_COMPONENT, MD_RADIO_GROUP, MD_SELECT_TRIGGER, MD_TAB, MD_TAB_LABEL, MENU_PANEL_TOP_PADDING, ManagePageComponent, MefDevCardModule, MefDevCollapseModule, MefDevDialogConfig, MefDevDialogRef, MefDevDropDownMenuModule, MefDevFilteredFieldModule, MefDevModalModule, MefDevOptionComponent, MefDevPageLayoutsModule, MefDevProgressComponent, MefDevProgressModule, MefDevSelectComponent, MefDevSelectModule, MefDevStepExecutorModule, MefDevSwitchComponent, MefDevSwitchModule, MefDevTabBodyComponent, MefDevTabComponent, MefDevTabLabelDirective, MefDevTabSetComponent, MefDevTabsInkBarDirective, MefDevTabsModule, MefDevTabsNavComponent, MefdevDropdownMenuComponent, MefdevExecutorPageComponent, OptionPipe, OverflowMode, PaginatedTabHeader, ProgressConfig, PseudoCheckbox, RADIO_GROUP_CONTROL_VALUE_ACCESSOR, RadioChange, RightFilterComponent, STEPPER_INTL_PROVIDER, STEPPER_INTL_PROVIDER_FACTORY, SelectChange, ShowOnDirtyErrorStateMatcher, SlideRightComponent, SlideUpComponent, SortDirection, SortType, StageComponent, StepExecutorComponent, StepperErrorStateMatcher, StepperIntl, TABS_CONFIG, TAB_CONTENT, TAB_GROUP, TabBodyPortal, TabChangeEvent, TablePageComponent, TransitionCheckState, _ErrorStateTracker, _closeDialogVia, _countGroupLabelsBeforeOption, _getOptionScrollPosition, components, deepClone, getMDAutocompleteMissingPanelError, getMDSelectDynamicMultipleError, getMDSelectNonArrayValueError, getMDSelectNonFunctionValueError, groupRowsByProperty, mefDevCardComponents, mefDevCollapseModuleComponents, sortRows };
|
|
14454
15485
|
//# sourceMappingURL=natec-mef-dev-ui-kit.mjs.map
|