@colijnit/corecomponents_v12 12.1.9 → 12.2.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/bundles/colijnit-corecomponents_v12.umd.js +52 -14
- package/bundles/colijnit-corecomponents_v12.umd.js.map +1 -1
- package/colijnit-corecomponents_v12.metadata.json +1 -1
- package/esm2015/lib/components/base/base-input.component.js +7 -2
- package/esm2015/lib/components/filter-item/filter-item.component.js +12 -2
- package/esm2015/lib/components/input-date-range-picker/input-date-range-picker.component.js +7 -1
- package/esm2015/lib/components/input-search/input-search.component.js +2 -2
- package/esm2015/lib/components/input-text/input-text.component.js +7 -2
- package/esm2015/lib/components/list-of-values/list-of-values-popup.component.js +25 -8
- package/esm2015/lib/components/list-of-values/list-of-values.component.js +18 -15
- package/fesm2015/colijnit-corecomponents_v12.js +70 -24
- package/fesm2015/colijnit-corecomponents_v12.js.map +1 -1
- package/lib/components/base/base-input.component.d.ts +1 -0
- package/lib/components/grid-toolbar/style/_material-definition.scss +1 -1
- package/lib/components/input-text/style/_layout.scss +9 -0
- package/lib/components/input-text/style/_material-definition.scss +1 -1
- package/lib/components/list-of-values/list-of-values-popup.component.d.ts +3 -0
- package/lib/components/list-of-values/list-of-values.component.d.ts +0 -1
- package/lib/components/list-of-values/style/_layout.scss +22 -7
- package/lib/components/list-of-values/style/_material-definition.scss +0 -10
- package/lib/style/_variables.scss +1 -0
- package/package.json +1 -1
|
@@ -2263,6 +2263,7 @@
|
|
|
2263
2263
|
this.customWidth = false;
|
|
2264
2264
|
this.customHeight = false;
|
|
2265
2265
|
this.noTriangleGraphic = false;
|
|
2266
|
+
this.keepFocussed = false;
|
|
2266
2267
|
this.halfWidth = false;
|
|
2267
2268
|
this.fullWidth = false;
|
|
2268
2269
|
this.excludeUserModelChange = false;
|
|
@@ -2755,7 +2756,7 @@
|
|
|
2755
2756
|
BaseInputComponent.prototype.doBlur = function (event) {
|
|
2756
2757
|
var _this = this;
|
|
2757
2758
|
setTimeout(function () {
|
|
2758
|
-
if (_this.keepFocus) {
|
|
2759
|
+
if (_this.keepFocus || _this.keepFocussed) {
|
|
2759
2760
|
if (event) {
|
|
2760
2761
|
event.preventDefault;
|
|
2761
2762
|
}
|
|
@@ -3125,6 +3126,7 @@
|
|
|
3125
3126
|
customWidth: [{ type: i0.Input }, { type: i0.HostBinding, args: ["class.custom-width",] }],
|
|
3126
3127
|
customHeight: [{ type: i0.Input }, { type: i0.HostBinding, args: ['class.custom-height',] }],
|
|
3127
3128
|
noTriangleGraphic: [{ type: i0.Input }],
|
|
3129
|
+
keepFocussed: [{ type: i0.Input }],
|
|
3128
3130
|
halfWidth: [{ type: i0.Input }, { type: i0.HostBinding, args: ["class.half-width",] }],
|
|
3129
3131
|
fullWidth: [{ type: i0.Input }, { type: i0.HostBinding, args: ["class.full-width-important",] }],
|
|
3130
3132
|
excludeUserModelChange: [{ type: i0.Input }],
|
|
@@ -3164,6 +3166,9 @@
|
|
|
3164
3166
|
__decorate([
|
|
3165
3167
|
InputBoolean()
|
|
3166
3168
|
], BaseInputComponent.prototype, "noTriangleGraphic", void 0);
|
|
3169
|
+
__decorate([
|
|
3170
|
+
InputBoolean()
|
|
3171
|
+
], BaseInputComponent.prototype, "keepFocussed", void 0);
|
|
3167
3172
|
__decorate([
|
|
3168
3173
|
InputBoolean()
|
|
3169
3174
|
], BaseInputComponent.prototype, "halfWidth", void 0);
|
|
@@ -6256,7 +6261,7 @@
|
|
|
6256
6261
|
InputTextComponent.decorators = [
|
|
6257
6262
|
{ type: i0.Component, args: [{
|
|
6258
6263
|
selector: 'co-input-text',
|
|
6259
|
-
template: "\n <div class=\"input-text-wrapper\" overlayParent #parentForOverlay=\"overlayParent\">\n <co-icon *ngIf=\"leftIcon || leftIconData\" class=\"input-text-left-icon\" [icon]=\"leftIcon\" [iconData]=\"leftIconData\"\n (click)=\"handleLeftIconClick($event)\" (mousedown)=\"handleLeftIconMouseDown($event)\"\n (mouseup)=\"handleLeftIconMouseUp($event)\"></co-icon>\n <div *ngIf=\"leftIcon || leftIconData\" class=\"spacer left-icon\"></div>\n <div class=\"input-wrapper\">\n <label *ngIf=\"showPlaceholderOnFocus || (!showPlaceholderOnFocus && !hasValue && !focused)\"\n [textContent]=\"placeholder\"></label>\n <input #input\n [
|
|
6264
|
+
template: "\n <div class=\"input-text-wrapper\" overlayParent #parentForOverlay=\"overlayParent\">\n <co-icon *ngIf=\"leftIcon || leftIconData\" class=\"input-text-left-icon\" [icon]=\"leftIcon\" [iconData]=\"leftIconData\"\n (click)=\"handleLeftIconClick($event)\" (mousedown)=\"handleLeftIconMouseDown($event)\"\n (mouseup)=\"handleLeftIconMouseUp($event)\"></co-icon>\n <div *ngIf=\"leftIcon || leftIconData\" class=\"spacer left-icon\"></div>\n <div class=\"input-wrapper\">\n <label *ngIf=\"showPlaceholderOnFocus || (!showPlaceholderOnFocus && !hasValue && !focused)\"\n [textContent]=\"placeholder\"></label>\n <input #input\n [class.input-input-hidden]=\"useContent\"\n [ngClass]=\"align\"\n [type]=\"digitsOnly ? 'number' : type\"\n [pattern]=\"type === 'date' ? pattern : undefined\"\n [ngModel]=\"model\"\n [min]=\"(type === 'number' || type === 'date') && this.min ? this.min : undefined\"\n [max]=\"(type === 'number' || type === 'date') && this.max ? this.max : undefined\"\n [readonly]=\"readonly\"\n [required]=\"required\"\n (ngModelChange)=\"modelChange.emit($event)\"\n (keydown)=\"digitsOnly ? excludeNonDigitChars($event) : true\"\n >\n <ng-container *ngIf=\"useContent\">\n <div class=\"input-content-wrapper\">\n <ng-content></ng-content>\n </div>\n </ng-container>\n <co-icon [class.show]=\"showClearButton && hasValue && focused && !readonly\" class=\"input-text-clear-button\" [icon]=\"icons.CrossSkinny\" (click)=\"clearInput($event)\"></co-icon>\n <div class=\"required-indicator\"></div>\n </div>\n <div *ngIf=\"rightIcon || rightIconData\" class=\"spacer right-icon\"></div>\n <co-icon *ngIf=\"rightIcon || rightIconData\" class=\"input-text-right-icon\" [icon]=\"rightIcon\" [iconData]=\"rightIconData\"\n (click)=\"handleRightIconClick($event)\" (mousedown)=\"handleRightIconMouseDown($event)\" (mouseup)=\"handleRightIconMouseUp($event)\"></co-icon>\n </div>\n <!--\n <co-commit-buttons *ngIf=\"showSaveCancel && focused && canSaveOrCancel\"\n [committing]=\"committing\"\n [commitFinished]=\"commitFinished\"\n (commitClick)=\"commitClick($event)\"\n (cancelClick)=\"cancelClick($event)\"\n >\n </co-commit-buttons>\n -->\n ",
|
|
6260
6265
|
providers: [
|
|
6261
6266
|
OverlayService, {
|
|
6262
6267
|
provide: SCREEN_CONFIG_ADAPTER_COMPONENT_INTERFACE_NAME,
|
|
@@ -7219,12 +7224,18 @@
|
|
|
7219
7224
|
var day = this.model[0].toLocaleString("default", { day: "2-digit" });
|
|
7220
7225
|
this.firstDateAsString = year + "-" + month + "-" + day;
|
|
7221
7226
|
}
|
|
7227
|
+
else {
|
|
7228
|
+
this.firstDateAsString = "";
|
|
7229
|
+
}
|
|
7222
7230
|
if (this.model[1]) {
|
|
7223
7231
|
var year = this.model[1].toLocaleString("default", { year: "numeric" });
|
|
7224
7232
|
var month = this.model[1].toLocaleString("default", { month: "2-digit" });
|
|
7225
7233
|
var day = this.model[1].toLocaleString("default", { day: "2-digit" });
|
|
7226
7234
|
this.secondDateAsString = year + "-" + month + "-" + day;
|
|
7227
7235
|
}
|
|
7236
|
+
else {
|
|
7237
|
+
this.secondDateAsString = "";
|
|
7238
|
+
}
|
|
7228
7239
|
};
|
|
7229
7240
|
return InputDateRangePickerComponent;
|
|
7230
7241
|
}(BaseInputDatePickerDirective));
|
|
@@ -10876,12 +10887,14 @@
|
|
|
10876
10887
|
];
|
|
10877
10888
|
|
|
10878
10889
|
var ListOfValuesPopupComponent = /** @class */ (function () {
|
|
10879
|
-
function ListOfValuesPopupComponent() {
|
|
10890
|
+
function ListOfValuesPopupComponent(_elementRef) {
|
|
10891
|
+
this._elementRef = _elementRef;
|
|
10880
10892
|
this.multiselect = false;
|
|
10881
10893
|
this.displayField = 'description';
|
|
10882
10894
|
this.searchDisabled = false;
|
|
10883
10895
|
this.modelChange = new i0.EventEmitter();
|
|
10884
10896
|
this.closePopup = new i0.EventEmitter();
|
|
10897
|
+
this.keyDown = new i0.EventEmitter();
|
|
10885
10898
|
this.viewModels = [];
|
|
10886
10899
|
this.viewModelsMain = [];
|
|
10887
10900
|
this._collection = [];
|
|
@@ -10967,8 +10980,14 @@
|
|
|
10967
10980
|
case KeyboardKey.SpaceBar:
|
|
10968
10981
|
if (this.highLightModel) {
|
|
10969
10982
|
this.selectViewModel(this.highLightModel, false);
|
|
10970
|
-
return false;
|
|
10971
10983
|
}
|
|
10984
|
+
else {
|
|
10985
|
+
this.keyDown.next(event);
|
|
10986
|
+
}
|
|
10987
|
+
return false;
|
|
10988
|
+
default:
|
|
10989
|
+
this.keyDown.next(event);
|
|
10990
|
+
return true;
|
|
10972
10991
|
}
|
|
10973
10992
|
}
|
|
10974
10993
|
};
|
|
@@ -11041,6 +11060,9 @@
|
|
|
11041
11060
|
if (!this.multiselect) {
|
|
11042
11061
|
this.selectViewModel(nextModel, false);
|
|
11043
11062
|
}
|
|
11063
|
+
else {
|
|
11064
|
+
this._scrollIntoView();
|
|
11065
|
+
}
|
|
11044
11066
|
};
|
|
11045
11067
|
ListOfValuesPopupComponent.prototype._prepareViewModelsMain = function () {
|
|
11046
11068
|
var _this = this;
|
|
@@ -11069,7 +11091,8 @@
|
|
|
11069
11091
|
return;
|
|
11070
11092
|
}
|
|
11071
11093
|
var offsetHeight = activeItem.offsetHeight, offsetTop = activeItem.offsetTop;
|
|
11072
|
-
var parentOffsetHeight = scrollParent.offsetHeight, scrollTop = scrollParent.scrollTop;
|
|
11094
|
+
var parentOffsetHeight = scrollParent.offsetHeight, scrollTop = scrollParent.scrollTop, parentOffsetTop = scrollParent.offsetTop;
|
|
11095
|
+
offsetTop = offsetTop - parentOffsetTop;
|
|
11073
11096
|
var isAbove = offsetTop < scrollTop;
|
|
11074
11097
|
var isBelow = offsetTop + offsetHeight > scrollTop + parentOffsetHeight;
|
|
11075
11098
|
if (isAbove) {
|
|
@@ -11084,10 +11107,13 @@
|
|
|
11084
11107
|
ListOfValuesPopupComponent.decorators = [
|
|
11085
11108
|
{ type: i0.Component, args: [{
|
|
11086
11109
|
selector: 'co-list-of-values-popup',
|
|
11087
|
-
template: "\n <div class=\"lov-options\" [overlay]=\"parentForOverlay\" [inheritWidth]=\"true\" [ngClass]=\"customCssClass\" id=\"lov-popup\"\n
|
|
11110
|
+
template: "\n <div class=\"lov-options\" [overlay]=\"parentForOverlay\" [inheritWidth]=\"true\" [ngClass]=\"customCssClass\" id=\"lov-popup\"\n role=\"listbox\" [tabindex]=\"-1\"\n (clickOutside)=\"closePopup.emit($event)\">\n <co-input-search *ngIf=\"multiselect\"\n tabindex=\"-1\"\n [(model)]=\"searchTerm\"\n [placeholder]=\"searchPlaceholder\"\n (keydown)=\"handleInputKeyDown($event)\"\n (modelChange)=\"filterViewModels()\"></co-input-search>\n <ul class=\"dropdown-list\" #dropDownList>\n <li #lovItem *ngFor=\"let viewModel of viewModels; let index = index\" [class.selected]=\"viewModel === highLightModel\"\n (click)=\"selectViewModel(viewModel, !multiselect)\" role=\"option\">\n <ng-container *ngIf=\"!multiselect\">\n <span class=\"lov-options-text\" [textContent]=\"viewModel.model[displayField]\"></span>\n </ng-container>\n <ng-container *ngIf=\"multiselect\">\n <co-input-checkbox [model]=\"viewModel.checked\" (modelChange)=\"selectViewModel(viewModel, false)\"></co-input-checkbox>\n <span class=\"lov-options-text\" [textContent]=\"viewModel.model[displayField]\"></span>\n </ng-container>\n </li>\n </ul>\n </div>\n ",
|
|
11088
11111
|
encapsulation: i0.ViewEncapsulation.None
|
|
11089
11112
|
},] }
|
|
11090
11113
|
];
|
|
11114
|
+
ListOfValuesPopupComponent.ctorParameters = function () { return [
|
|
11115
|
+
{ type: i0.ElementRef }
|
|
11116
|
+
]; };
|
|
11091
11117
|
ListOfValuesPopupComponent.propDecorators = {
|
|
11092
11118
|
lovItems: [{ type: i0.ViewChildren, args: ['lovItem', { read: i0.ElementRef },] }],
|
|
11093
11119
|
dropDownList: [{ type: i0.ViewChild, args: ['dropDownList', { read: i0.ElementRef },] }],
|
|
@@ -11102,6 +11128,7 @@
|
|
|
11102
11128
|
collection: [{ type: i0.Input }],
|
|
11103
11129
|
modelChange: [{ type: i0.Output }],
|
|
11104
11130
|
closePopup: [{ type: i0.Output }],
|
|
11131
|
+
keyDown: [{ type: i0.Output }],
|
|
11105
11132
|
showClass: [{ type: i0.HostBinding, args: ['class.co-list-of-values-popup',] }]
|
|
11106
11133
|
};
|
|
11107
11134
|
|
|
@@ -11113,7 +11140,6 @@
|
|
|
11113
11140
|
_this.multiselect = false;
|
|
11114
11141
|
_this.displayField = 'description';
|
|
11115
11142
|
_this.searchDisabled = false;
|
|
11116
|
-
_this.closeAfterOptionChosen = true;
|
|
11117
11143
|
_this.isSelectOpen = false;
|
|
11118
11144
|
_this.state = 'default';
|
|
11119
11145
|
_this.selectedModels = [];
|
|
@@ -11152,6 +11178,9 @@
|
|
|
11152
11178
|
if (this._lovPopupComponentRef) {
|
|
11153
11179
|
this._lovPopupComponentRef.instance.searchTerm = model;
|
|
11154
11180
|
}
|
|
11181
|
+
if (!this.selectedModel && model) {
|
|
11182
|
+
this.openPopup();
|
|
11183
|
+
}
|
|
11155
11184
|
this.selectedModel = model;
|
|
11156
11185
|
};
|
|
11157
11186
|
ListOfValuesComponent.prototype.handleInputKeyDown = function (event) {
|
|
@@ -11210,8 +11239,10 @@
|
|
|
11210
11239
|
collection: this.collection
|
|
11211
11240
|
}, {
|
|
11212
11241
|
modelChange: function (value) { return _this.optionChosen(value); },
|
|
11213
|
-
closePopup: function () { return _this.closePopup(); }
|
|
11242
|
+
closePopup: function () { return _this.closePopup(); },
|
|
11243
|
+
keyDown: function (event) { return _this.handleInputKeyDown(event); }
|
|
11214
11244
|
});
|
|
11245
|
+
this.keepFocussed = true;
|
|
11215
11246
|
};
|
|
11216
11247
|
ListOfValuesComponent.prototype.removeOptionFromModel = function (chip) {
|
|
11217
11248
|
if (this.multiselect) {
|
|
@@ -11228,15 +11259,13 @@
|
|
|
11228
11259
|
}
|
|
11229
11260
|
else {
|
|
11230
11261
|
this.selectedModel = option[this.displayField];
|
|
11231
|
-
if (this.closeAfterOptionChosen) {
|
|
11232
|
-
this.toggleSelect();
|
|
11233
|
-
}
|
|
11234
11262
|
}
|
|
11235
11263
|
}
|
|
11236
11264
|
this.model = option;
|
|
11237
11265
|
this.modelChange.emit(this.model);
|
|
11238
11266
|
};
|
|
11239
11267
|
ListOfValuesComponent.prototype.closePopup = function () {
|
|
11268
|
+
this.keepFocussed = false;
|
|
11240
11269
|
this.isSelectOpen = false;
|
|
11241
11270
|
this.overlayService.removeComponent(this._lovPopupComponentRef);
|
|
11242
11271
|
this._lovPopupComponentRef = undefined;
|
|
@@ -11282,7 +11311,7 @@
|
|
|
11282
11311
|
ListOfValuesComponent.decorators = [
|
|
11283
11312
|
{ type: i0.Component, args: [{
|
|
11284
11313
|
selector: 'co-list-of-values',
|
|
11285
|
-
template: "\n <co-input-text aria-haspopup=\"listbox\" [attr.aria-expanded]=\"isSelectOpen\" aria-controls=\"lov-popup\" role=\"combobox\"\n class=\"no-focus-line\"\n overlayParent\n #parentForOverlay=\"overlayParent\" type=\"text\" [id]=\"label\"\n [model]=\"multiselect ? selectedModels : selectedModel\"\n [placeholder]=\"label\"\n [readonly]=\"readonly\"\n [disabled]=\"disabled\"\n [required]=\"required\"\n [noClickFocus]=\"false\"\n [leftIconData]=\"leftIconData\"\n [rightIcon]=\"isSelectOpen ? icons.ChevronUpRegular : icons.ChevronDownRegular\"\n [showClearButton]=\"true\"\n [useContent]=\"multiselect\"\n (modelChange)=\"handleInputModelChange($event)\"\n (click)=\"openPopup()\"\n (rightIconClick)=\"toggleSelect()\"\n (keydown)=\"handleInputKeyDown($event)\"\n (clearIconClick)=\"clearModel($event)\"\n (blur)=\"checkModel()\"\n >\n
|
|
11314
|
+
template: "\n <co-input-text aria-haspopup=\"listbox\" [attr.aria-expanded]=\"isSelectOpen\" aria-controls=\"lov-popup\" role=\"combobox\"\n class=\"no-focus-line\"\n overlayParent\n #parentForOverlay=\"overlayParent\" type=\"text\" [id]=\"label\"\n [model]=\"multiselect ? selectedModels : selectedModel\"\n [placeholder]=\"label\"\n [readonly]=\"readonly\"\n [disabled]=\"disabled\"\n [required]=\"required\"\n [noClickFocus]=\"false\"\n [leftIconData]=\"leftIconData\"\n [rightIcon]=\"isSelectOpen ? icons.ChevronUpRegular : icons.ChevronDownRegular\"\n [showClearButton]=\"true\"\n [useContent]=\"multiselect\"\n [customHeight]=\"multiselect\"\n [keepFocussed]=\"keepFocussed\"\n (modelChange)=\"handleInputModelChange($event)\"\n (click)=\"openPopup()\"\n (rightIconClick)=\"toggleSelect()\"\n (keydown)=\"handleInputKeyDown($event)\"\n (clearIconClick)=\"clearModel($event)\"\n (blur)=\"checkModel()\"\n >\n <ng-container *ngIf=\"multiselect\">\n <div class=\"multiselect-chips-wrapper\">\n <div class=\"chips\" *ngFor=\"let chip of model\">\n <span class=\"chips-description\" [textContent]=\"chip[displayField]\"></span>\n <co-icon class=\"remove-chip-icon\" [icon]=\"icons.CrossSkinny\" (click)=\"removeOptionFromModel(chip)\"></co-icon>\n </div>\n </div>\n </ng-container>\n </co-input-text>\n ",
|
|
11286
11315
|
providers: [
|
|
11287
11316
|
OverlayService
|
|
11288
11317
|
],
|
|
@@ -11300,7 +11329,6 @@
|
|
|
11300
11329
|
label: [{ type: i0.Input }],
|
|
11301
11330
|
customCssClass: [{ type: i0.Input }],
|
|
11302
11331
|
searchDisabled: [{ type: i0.Input }],
|
|
11303
|
-
closeAfterOptionChosen: [{ type: i0.Input }],
|
|
11304
11332
|
showClass: [{ type: i0.HostBinding, args: ['class.co-list-of-values',] }]
|
|
11305
11333
|
};
|
|
11306
11334
|
|
|
@@ -11618,7 +11646,9 @@
|
|
|
11618
11646
|
FilterItemComponent.prototype.ngOnInit = function () {
|
|
11619
11647
|
this.setToInitialLimit();
|
|
11620
11648
|
this.showButton = this.valueSelected();
|
|
11621
|
-
this.checkBoxToTextModel
|
|
11649
|
+
if (this.checkBoxToTextModel === undefined || this.checkBoxToTextModel === null) {
|
|
11650
|
+
this.checkBoxToTextModel = false;
|
|
11651
|
+
}
|
|
11622
11652
|
};
|
|
11623
11653
|
FilterItemComponent.prototype.setToInitialLimit = function () {
|
|
11624
11654
|
this.limitTo = this.initialLimit;
|
|
@@ -11664,21 +11694,27 @@
|
|
|
11664
11694
|
this._createModelForSelectListWithNumberOutput();
|
|
11665
11695
|
break;
|
|
11666
11696
|
case this.modes.Slider:
|
|
11697
|
+
this.showButton = true;
|
|
11667
11698
|
this._createModelForSliderMode();
|
|
11668
11699
|
break;
|
|
11669
11700
|
case this.modes.CheckboxToText:
|
|
11701
|
+
this.showButton = true;
|
|
11670
11702
|
this._createModelForCheckboxToText();
|
|
11671
11703
|
break;
|
|
11672
11704
|
case this.modes.CheckboxToSimpleText:
|
|
11705
|
+
this.showButton = true;
|
|
11673
11706
|
this._createModelForCheckboxToSimpleText();
|
|
11674
11707
|
break;
|
|
11675
11708
|
case this.modes.CheckboxToBinary:
|
|
11709
|
+
this.showButton = true;
|
|
11676
11710
|
this._createModelForCheckboxToBinary();
|
|
11677
11711
|
break;
|
|
11678
11712
|
case this.modes.DateRangeField:
|
|
11713
|
+
this.showButton = true;
|
|
11679
11714
|
this._createModelForDateRange(model);
|
|
11680
11715
|
break;
|
|
11681
11716
|
case this.modes.TextField:
|
|
11717
|
+
this.showButton = true;
|
|
11682
11718
|
this._model = (typeof this._model === 'string' && this._model.length === 0) ? undefined : this._model;
|
|
11683
11719
|
break;
|
|
11684
11720
|
}
|
|
@@ -11775,6 +11811,8 @@
|
|
|
11775
11811
|
case this.modes.DateRangeField:
|
|
11776
11812
|
this._readModelForDateRangeField(newModel);
|
|
11777
11813
|
break;
|
|
11814
|
+
default:
|
|
11815
|
+
this._model = newModel;
|
|
11778
11816
|
}
|
|
11779
11817
|
};
|
|
11780
11818
|
/////////////////////////////////////////////////////////////
|