@colijnit/corecomponents_v12 12.0.16 → 12.0.19

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.
Files changed (140) hide show
  1. package/bundles/colijnit-corecomponents_v12.umd.js +741 -247
  2. package/bundles/colijnit-corecomponents_v12.umd.js.map +1 -1
  3. package/colijnit-corecomponents_v12.d.ts +9 -8
  4. package/colijnit-corecomponents_v12.metadata.json +1 -1
  5. package/esm2015/colijnit-corecomponents_v12.js +10 -9
  6. package/esm2015/lib/components/base/base-input.component.js +29 -9
  7. package/esm2015/lib/components/carousel-3d/carousel-3d.component.js +313 -0
  8. package/esm2015/lib/components/carousel-3d/carousel-3d.module.js +19 -0
  9. package/esm2015/lib/components/carousel-3d/carouselItem.js +54 -0
  10. package/esm2015/lib/components/co-dialog/co-dialog.module.js +1 -3
  11. package/esm2015/lib/components/co-kanban/co-kanban.component.js +2 -5
  12. package/esm2015/lib/components/drop-down-list/drop-down-list.component.js +30 -8
  13. package/esm2015/lib/components/drop-down-list/drop-down.module.js +9 -7
  14. package/esm2015/lib/components/form/form.component.js +3 -22
  15. package/esm2015/lib/components/form/form.module.js +4 -4
  16. package/esm2015/lib/components/input-checkbox/input-checkbox.component.js +15 -5
  17. package/esm2015/lib/components/input-checkbox-multi-select/input-checkbox-multi-select.component.js +6 -14
  18. package/esm2015/lib/components/input-combo-box/input-combo-box.component.js +24 -29
  19. package/esm2015/lib/components/input-date-picker/input-date-picker.component.js +10 -7
  20. package/esm2015/lib/components/input-listbox/input-listbox.component.js +27 -6
  21. package/esm2015/lib/components/input-number-picker/input-number-picker.component.js +9 -9
  22. package/esm2015/lib/components/input-radio-button/input-radio-button.component.js +13 -5
  23. package/esm2015/lib/components/input-text/input-text.component.js +22 -81
  24. package/esm2015/lib/components/input-text/input-text.module.js +16 -13
  25. package/esm2015/lib/components/input-textarea/input-textarea.component.js +62 -0
  26. package/esm2015/lib/components/input-textarea/input-textarea.module.js +23 -0
  27. package/esm2015/lib/components/multi-select-list/multi-select-list.component.js +37 -9
  28. package/esm2015/lib/components/multi-select-list/multi-select-list.module.js +9 -7
  29. package/esm2015/lib/components/validation-error/validation-error.component.js +23 -0
  30. package/esm2015/lib/components/validation-error/validation-error.module.js +19 -0
  31. package/esm2015/public-api.js +6 -1
  32. package/fesm2015/colijnit-corecomponents_v12.js +761 -268
  33. package/fesm2015/colijnit-corecomponents_v12.js.map +1 -1
  34. package/lib/components/base/base-input.component.d.ts +7 -2
  35. package/lib/components/button/style/_layout.scss +0 -1
  36. package/lib/components/button/style/_theme.scss +2 -3
  37. package/lib/components/button-drop-down/style/_layout.scss +0 -2
  38. package/lib/components/button-drop-down/style/_theme.scss +0 -2
  39. package/lib/components/button-drop-down/style/material.scss +1 -0
  40. package/lib/components/carousel-3d/carousel-3d.component.d.ts +55 -0
  41. package/lib/components/carousel-3d/carousel-3d.module.d.ts +2 -0
  42. package/lib/components/carousel-3d/carouselItem.d.ts +13 -0
  43. package/lib/components/carousel-3d/style/_layout.scss +62 -0
  44. package/lib/components/carousel-3d/style/_material-definition.scss +6 -0
  45. package/lib/components/carousel-3d/style/_theme.scss +4 -0
  46. package/lib/components/carousel-3d/style/material.scss +5 -0
  47. package/lib/components/co-dialog/style/_layout.scss +0 -3
  48. package/lib/components/co-dialog/style/_theme.scss +0 -3
  49. package/lib/components/co-dialog/style/material.scss +1 -0
  50. package/lib/components/co-kanban/style/_layout.scss +0 -3
  51. package/lib/components/co-kanban/style/_theme.scss +0 -4
  52. package/lib/components/co-kanban/style/material.scss +1 -0
  53. package/lib/components/co-rich-text-editor/style/_layout.scss +0 -2
  54. package/lib/components/co-rich-text-editor/style/_theme.scss +0 -2
  55. package/lib/components/co-rich-text-editor/style/material.scss +1 -0
  56. package/lib/components/collapsible/style/_layout.scss +0 -3
  57. package/lib/components/collapsible/style/_theme.scss +0 -4
  58. package/lib/components/collapsible/style/material.scss +1 -0
  59. package/lib/components/drop-down-list/drop-down-list.component.d.ts +12 -2
  60. package/lib/components/drop-down-list/style/_layout.scss +8 -3
  61. package/lib/components/drop-down-list/style/_theme.scss +0 -2
  62. package/lib/components/drop-down-list/style/material.scss +2 -0
  63. package/lib/components/form/form.component.d.ts +2 -3
  64. package/lib/components/grid/style/_layout.scss +0 -2
  65. package/lib/components/grid/style/_theme.scss +0 -2
  66. package/lib/components/grid/style/material.scss +1 -0
  67. package/lib/components/input-checkbox/input-checkbox.component.d.ts +9 -2
  68. package/lib/components/input-checkbox/style/_layout.scss +0 -2
  69. package/lib/components/input-checkbox/style/_theme.scss +0 -2
  70. package/lib/components/input-checkbox/style/material.scss +1 -0
  71. package/lib/components/input-checkbox-multi-select/input-checkbox-multi-select.component.d.ts +4 -6
  72. package/lib/components/input-checkbox-multi-select/style/_layout.scss +0 -2
  73. package/lib/components/input-checkbox-multi-select/style/_theme.scss +0 -2
  74. package/lib/components/input-checkbox-multi-select/style/material.scss +1 -0
  75. package/lib/components/input-combo-box/input-combo-box.component.d.ts +6 -7
  76. package/lib/components/input-combo-box/style/_layout.scss +10 -3
  77. package/lib/components/input-combo-box/style/_material-definition.scss +0 -7
  78. package/lib/components/input-combo-box/style/_theme.scss +0 -2
  79. package/lib/components/input-combo-box/style/material.scss +9 -0
  80. package/lib/components/input-date-picker/input-date-picker.component.d.ts +4 -3
  81. package/lib/components/input-date-picker/style/_layout.scss +4 -3
  82. package/lib/components/input-date-picker/style/_theme.scss +0 -2
  83. package/lib/components/input-date-picker/style/material.scss +2 -0
  84. package/lib/components/input-listbox/input-listbox.component.d.ts +12 -1
  85. package/lib/components/input-listbox/style/_layout.scss +2 -2
  86. package/lib/components/input-listbox/style/_theme.scss +0 -2
  87. package/lib/components/input-listbox/style/material.scss +2 -0
  88. package/lib/components/input-number-picker/input-number-picker.component.d.ts +5 -5
  89. package/lib/components/input-number-picker/style/_layout.scss +0 -2
  90. package/lib/components/input-number-picker/style/_theme.scss +0 -2
  91. package/lib/components/input-number-picker/style/material.scss +1 -0
  92. package/lib/components/input-radio-button/input-radio-button.component.d.ts +7 -2
  93. package/lib/components/input-radio-button/style/_layout.scss +0 -2
  94. package/lib/components/input-radio-button/style/_theme.scss +0 -2
  95. package/lib/components/input-radio-button/style/material.scss +1 -0
  96. package/lib/components/input-search/style/_layout.scss +0 -3
  97. package/lib/components/input-search/style/_theme.scss +0 -4
  98. package/lib/components/input-search/style/material.scss +1 -0
  99. package/lib/components/input-text/input-text.component.d.ts +6 -30
  100. package/lib/components/input-text/style/_layout.scss +14 -3
  101. package/lib/components/input-text/style/_material-definition.scss +4 -3
  102. package/lib/components/input-text/style/_theme.scss +0 -2
  103. package/lib/components/input-text/style/material.scss +3 -0
  104. package/lib/components/input-textarea/input-textarea.component.d.ts +18 -0
  105. package/lib/components/input-textarea/input-textarea.module.d.ts +2 -0
  106. package/lib/components/input-textarea/style/_layout.scss +20 -0
  107. package/lib/components/input-textarea/style/_material-definition.scss +4 -0
  108. package/lib/components/input-textarea/style/_theme.scss +8 -0
  109. package/lib/components/input-textarea/style/material.scss +7 -0
  110. package/lib/components/multi-select-list/multi-select-list.component.d.ts +13 -2
  111. package/lib/components/multi-select-list/style/_layout.scss +10 -3
  112. package/lib/components/multi-select-list/style/_theme.scss +0 -2
  113. package/lib/components/multi-select-list/style/material.scss +2 -0
  114. package/lib/components/pivot/style/_layout.scss +0 -2
  115. package/lib/components/pivot/style/_theme.scss +0 -2
  116. package/lib/components/pivot/style/material.scss +1 -0
  117. package/lib/components/simple-grid/style/_layout.scss +0 -2
  118. package/lib/components/simple-grid/style/_theme.scss +0 -2
  119. package/lib/components/simple-grid/style/material.scss +1 -0
  120. package/lib/components/validation-error/style/_layout.scss +37 -0
  121. package/lib/components/validation-error/style/_material-definition.scss +9 -0
  122. package/lib/components/validation-error/style/_theme.scss +21 -0
  123. package/lib/components/validation-error/style/material.scss +5 -0
  124. package/lib/components/validation-error/validation-error.component.d.ts +4 -0
  125. package/lib/components/validation-error/validation-error.module.d.ts +2 -0
  126. package/lib/style/_input.mixins.scss +70 -281
  127. package/lib/style/_variables.scss +2 -0
  128. package/package.json +5 -2
  129. package/public-api.d.ts +5 -0
  130. package/esm2015/lib/core/enum/float-label-type.enum.js +0 -7
  131. package/esm2015/lib/core/enum/input-text-type.enum.js +0 -6
  132. package/esm2015/lib/core/model/numerical-range.js +0 -14
  133. package/lib/components/drop-down-list/drop-down-list.component.scss +0 -0
  134. package/lib/core/enum/float-label-type.enum.d.ts +0 -5
  135. package/lib/core/enum/input-text-type.enum.d.ts +0 -4
  136. package/lib/core/model/numerical-range.d.ts +0 -7
  137. package/lib/style/_extendables.scss +0 -32
  138. package/lib/style/_responsiveness.mixins.scss +0 -64
  139. package/lib/style/_responsiveness.scss +0 -4
  140. package/lib/style/_transition.mixins.scss +0 -21
@@ -1,4 +1,4 @@
1
- import { Injectable, Component, Input, HostBinding, NgModule, Optional, SkipSelf, InjectionToken, Directive, ElementRef, NgZone, Inject, EventEmitter, ChangeDetectionStrategy, ViewEncapsulation, Output, HostListener, Pipe, ViewChild, ChangeDetectorRef, forwardRef, NO_ERRORS_SCHEMA, ViewContainerRef, Injector, ComponentFactoryResolver, ApplicationRef, ContentChild, TemplateRef, ContentChildren } from '@angular/core';
1
+ import { Injectable, Component, Input, HostBinding, NgModule, Optional, SkipSelf, InjectionToken, Directive, ElementRef, NgZone, Inject, EventEmitter, ChangeDetectionStrategy, ViewEncapsulation, Output, HostListener, Pipe, ViewChild, ChangeDetectorRef, ComponentFactoryResolver, ViewContainerRef, forwardRef, NO_ERRORS_SCHEMA, Injector, ApplicationRef, ContentChild, TemplateRef, ContentChildren } from '@angular/core';
2
2
  import { CommonModule } from '@angular/common';
3
3
  import { HttpClientModule } from '@angular/common/http';
4
4
  import { DomSanitizer } from '@angular/platform-browser';
@@ -7,7 +7,6 @@ import { auditTime } from 'rxjs/operators';
7
7
  import { __decorate, __awaiter } from 'tslib';
8
8
  import { DropDownButtonModule } from '@syncfusion/ej2-angular-splitbuttons';
9
9
  import { trigger, state, style, transition, animate } from '@angular/animations';
10
- import { BrowserAnimationsModule } from '@angular/platform-browser/animations';
11
10
  import { DialogModule } from '@syncfusion/ej2-angular-popups';
12
11
  import { KanbanModule } from '@syncfusion/ej2-angular-kanban';
13
12
  import { DayService, WeekService, WorkWeekService, MonthService, AgendaService, MonthAgendaService, TimelineViewsService, TimelineMonthService, ScheduleModule } from '@syncfusion/ej2-angular-schedule';
@@ -18,12 +17,15 @@ import { CheckBoxSelectionService, DropDownListModule, MultiSelectModule, MultiS
18
17
  import { RowDDService, GridModule, PageService, SortService, FilterService, GroupService, ReorderService, ResizeService, ExcelExportService, PdfExportService, EditService, ToolbarService, ColumnChooserService, ColumnMenuService, ContextMenuService } from '@syncfusion/ej2-angular-grids';
19
18
  import { enableRipple } from '@syncfusion/ej2-base';
20
19
  import { DatePickerModule } from '@syncfusion/ej2-angular-calendars';
21
- import { TextBoxComponent, TextBoxAllModule, NumericTextBoxModule } from '@syncfusion/ej2-angular-inputs';
20
+ import { TextBoxAllModule, NumericTextBoxModule } from '@syncfusion/ej2-angular-inputs';
22
21
  import { GroupingBarService, GroupingService, ToolbarService as ToolbarService$1, ConditionalFormattingService, FieldListService, NumberFormattingService, PivotViewModule } from '@syncfusion/ej2-angular-pivotview';
23
22
  import { OverlayConfig, Overlay } from '@angular/cdk/overlay';
24
23
  import { ComponentPortal } from '@angular/cdk/portal';
25
24
  import { ToolbarService as ToolbarService$2, LinkService, ImageService, HtmlEditorService, RichTextEditorModule } from '@syncfusion/ej2-angular-richtexteditor';
26
25
  import { moveItemInArray, DragDropModule } from '@angular/cdk/drag-drop';
26
+ import { PlaneBufferGeometry, Mesh, Vector2, Vector3, PlaneGeometry, MeshPhongMaterial, SpotLight, PerspectiveCamera, Scene, Color, AmbientLight, Fog, WebGLRenderer, Box3 } from 'three';
27
+ import { CSS3DObject, CSS3DRenderer } from 'three/examples/jsm/renderers/CSS3DRenderer';
28
+ import * as TWEEN from '@tweenjs/tween.js';
27
29
 
28
30
  // @returns true iff given value equals null or equals undefined
29
31
  function isNill(value) {
@@ -2232,7 +2234,6 @@ CoDialogModule.decorators = [
2232
2234
  { type: NgModule, args: [{
2233
2235
  imports: [
2234
2236
  CommonModule,
2235
- BrowserAnimationsModule,
2236
2237
  IconModule
2237
2238
  ],
2238
2239
  declarations: [CoDialogComponent],
@@ -2332,10 +2333,7 @@ class CoKanbanComponent {
2332
2333
  }
2333
2334
  ngAfterViewInit() {
2334
2335
  if (this.columns) {
2335
- setTimeout(() => {
2336
- this.kanban.columns = this.columns;
2337
- this.kanban.refreshHeader();
2338
- }, 1000);
2336
+ this.kanban.columns = this.columns;
2339
2337
  }
2340
2338
  }
2341
2339
  dialogOpen(args) {
@@ -2770,17 +2768,36 @@ function maxStringLengthValidator(length) {
2770
2768
  };
2771
2769
  }
2772
2770
 
2771
+ class ValidationErrorComponent {
2772
+ showClass() {
2773
+ return true;
2774
+ }
2775
+ }
2776
+ ValidationErrorComponent.decorators = [
2777
+ { type: Component, args: [{
2778
+ selector: "co-validation-error",
2779
+ template: `
2780
+ <div class="validation-error-content">
2781
+ <div class="validation-error-message" [textContent]="error"></div>
2782
+ </div>
2783
+ `,
2784
+ animations: [],
2785
+ encapsulation: ViewEncapsulation.None
2786
+ },] }
2787
+ ];
2788
+ ValidationErrorComponent.propDecorators = {
2789
+ error: [{ type: Input }],
2790
+ showClass: [{ type: HostBinding, args: ['class.co-validation-error',] }]
2791
+ };
2792
+
2773
2793
  /**
2774
2794
  * Abstract base class for all concrete form input components that contain a native <input> element. Provides common data and functionality, such as
2775
2795
  * adding self as a control to the parent form.
2776
2796
  */
2777
2797
  class BaseInputComponent {
2778
- constructor(changeDetector, formUserChangeListener,
2779
- // @Optional() protected speechInput?: SpeechInputService,
2780
- ngZoneWrapper,
2781
- // @Optional() protected tooltipManager?: AppTooltipDynamicManagerService,
2782
- elementRef) {
2798
+ constructor(changeDetector, componentFactoryResolver, formUserChangeListener, ngZoneWrapper, elementRef) {
2783
2799
  this.changeDetector = changeDetector;
2800
+ this.componentFactoryResolver = componentFactoryResolver;
2784
2801
  this.formUserChangeListener = formUserChangeListener;
2785
2802
  this.ngZoneWrapper = ngZoneWrapper;
2786
2803
  this.elementRef = elementRef;
@@ -2830,6 +2847,7 @@ class BaseInputComponent {
2830
2847
  }
2831
2848
  set model(value) {
2832
2849
  this._model = value;
2850
+ this._clearErrorComponent();
2833
2851
  }
2834
2852
  get model() {
2835
2853
  return this._model;
@@ -2940,7 +2958,6 @@ class BaseInputComponent {
2940
2958
  return this._myFormInputInstance;
2941
2959
  }
2942
2960
  get formSubmitted() {
2943
- return true;
2944
2961
  return this.formComponent && this.formComponent.submitted;
2945
2962
  }
2946
2963
  get hasNoLabel() {
@@ -2982,6 +2999,16 @@ class BaseInputComponent {
2982
2999
  get isDestroyed() {
2983
3000
  return this._destroyed;
2984
3001
  }
3002
+ showValidationError(error) {
3003
+ if (this.validationErrorContainer) {
3004
+ if (this._errorValidationComponent) {
3005
+ this._clearErrorComponent();
3006
+ }
3007
+ const componentFactory = this.componentFactoryResolver.resolveComponentFactory(ValidationErrorComponent);
3008
+ this._errorValidationComponent = this.validationErrorContainer.createComponent(componentFactory);
3009
+ this._errorValidationComponent.instance.error = error;
3010
+ }
3011
+ }
2985
3012
  ngOnInit() {
2986
3013
  this._modelChangeSub = this.modelChange.subscribe((val) => {
2987
3014
  this.model = val;
@@ -3005,6 +3032,7 @@ class BaseInputComponent {
3005
3032
  }
3006
3033
  ngOnDestroy() {
3007
3034
  this._destroyed = true;
3035
+ this._clearErrorComponent();
3008
3036
  // if (this.tooltipManager && this.elementRef) {
3009
3037
  // this.tooltipManager.destroyErrorTooltipOfElement(this.elementRef.nativeElement);
3010
3038
  // }
@@ -3173,6 +3201,15 @@ class BaseInputComponent {
3173
3201
  this.control.updateValueAndValidity();
3174
3202
  }
3175
3203
  }
3204
+ _clearErrorComponent() {
3205
+ if (this.validationErrorContainer) {
3206
+ this.validationErrorContainer.clear();
3207
+ if (this._errorValidationComponent) {
3208
+ this._errorValidationComponent.destroy();
3209
+ this._errorValidationComponent = undefined;
3210
+ }
3211
+ }
3212
+ }
3176
3213
  // whether this.ngModel.control has safe access
3177
3214
  _controlExists() {
3178
3215
  return this.ngModel && !!this.control;
@@ -3241,11 +3278,13 @@ BaseInputComponent.decorators = [
3241
3278
  ];
3242
3279
  BaseInputComponent.ctorParameters = () => [
3243
3280
  { type: ChangeDetectorRef },
3281
+ { type: ComponentFactoryResolver },
3244
3282
  { type: FormInputUserModelChangeListenerService, decorators: [{ type: Optional }] },
3245
3283
  { type: NgZoneWrapperService, decorators: [{ type: Optional }] },
3246
3284
  { type: ElementRef, decorators: [{ type: Optional }] }
3247
3285
  ];
3248
3286
  BaseInputComponent.propDecorators = {
3287
+ validationErrorContainer: [{ type: ViewChild, args: ["validationError", { read: ViewContainerRef },] }],
3249
3288
  model: [{ type: Input }],
3250
3289
  label: [{ type: Input }],
3251
3290
  noValidation: [{ type: Input }],
@@ -3276,7 +3315,7 @@ BaseInputComponent.propDecorators = {
3276
3315
  userModelChange: [{ type: Output }],
3277
3316
  hiddenChange: [{ type: Output }],
3278
3317
  _ngModel: [{ type: ViewChild, args: [NgModel, { static: true },] }],
3279
- focused: [{ type: HostBinding, args: ["class.focused",] }],
3318
+ focused: [{ type: HostBinding, args: ["class.cc-input-focused",] }],
3280
3319
  formInput: [{ type: HostBinding, args: ["class.form-input",] }],
3281
3320
  customWidth: [{ type: Input }, { type: HostBinding, args: ["class.custom-width",] }],
3282
3321
  noTriangleGraphic: [{ type: Input }],
@@ -3328,78 +3367,6 @@ __decorate([
3328
3367
  InputBoolean()
3329
3368
  ], BaseInputComponent.prototype, "noFormGroupControl", void 0);
3330
3369
 
3331
- class DropDownListComponent extends BaseInputComponent {
3332
- constructor() {
3333
- super(...arguments);
3334
- /**
3335
- * In the form { text: 'name', value: 'id' }
3336
- * Where 'text' is showing in the dropdown and 'id' used for the model binding
3337
- */
3338
- this.fields = {};
3339
- }
3340
- showClass() {
3341
- return true;
3342
- }
3343
- handleValueChanged(value) {
3344
- if (value !== this.model) {
3345
- this.modelChange.next(value);
3346
- }
3347
- }
3348
- }
3349
- DropDownListComponent.decorators = [
3350
- { type: Component, args: [{
3351
- selector: "co-drop-down-list",
3352
- template: `
3353
- <ejs-dropdownlist
3354
- [dataSource]="collection"
3355
- [value]="model"
3356
- [fields]="fields"
3357
- [placeholder]="placeHolder"
3358
- [cssClass]="'co-drop-down-list'"
3359
- [readonly]="readonly"
3360
- [itemTemplate]="itemTemplate"
3361
- [headerTemplate]="headerTemplate"
3362
- [valueTemplate]="valueTemplate"
3363
- (valueChange)="handleValueChanged($event)"
3364
- >
3365
- </ejs-dropdownlist>
3366
- `,
3367
- providers: [
3368
- CheckBoxSelectionService,
3369
- {
3370
- provide: COMPONENT_INTERFACE_NAME,
3371
- useExisting: forwardRef(() => DropDownListComponent)
3372
- }
3373
- ],
3374
- changeDetection: ChangeDetectionStrategy.OnPush,
3375
- encapsulation: ViewEncapsulation.None
3376
- },] }
3377
- ];
3378
- DropDownListComponent.propDecorators = {
3379
- collection: [{ type: Input }],
3380
- fields: [{ type: Input }],
3381
- placeHolder: [{ type: Input }],
3382
- itemTemplate: [{ type: Input }],
3383
- headerTemplate: [{ type: Input }],
3384
- valueTemplate: [{ type: Input }],
3385
- showClass: [{ type: HostBinding, args: ["class.co-drop-down-list",] }]
3386
- };
3387
-
3388
- class DropDownModule {
3389
- }
3390
- DropDownModule.decorators = [
3391
- { type: NgModule, args: [{
3392
- imports: [
3393
- BaseModule,
3394
- CommonModule,
3395
- DropDownListModule,
3396
- MultiSelectModule
3397
- ],
3398
- declarations: [DropDownListComponent],
3399
- exports: [DropDownListComponent]
3400
- },] }
3401
- ];
3402
-
3403
3370
  // Represents a positional model
3404
3371
  class ElementPosition {
3405
3372
  constructor(top, right, bottom, left) {
@@ -3639,33 +3606,15 @@ class FormComponent {
3639
3606
  for (const errorKey in this.formGroup.controls[controlKey].errors) {
3640
3607
  if (this.formGroup.controls[controlKey].errors.hasOwnProperty(errorKey)) {
3641
3608
  const error = this.formGroup.controls[controlKey].errors[errorKey];
3642
- const errorText = this._getValidationErrorText(error);
3643
- const controlElement = comp.elementRef.nativeElement;
3644
3609
  if (controlKey === key) {
3645
- // this._tooltipService.spawnErrorTooltip(controlElement, errorText, this.keepInView ? this.keepInView : undefined);
3610
+ comp.showValidationError(error);
3646
3611
  }
3647
- comp.redErrorBackground = true;
3648
3612
  }
3649
3613
  }
3650
3614
  }
3651
3615
  }
3652
3616
  }
3653
3617
  }
3654
- _getValidationErrorText(validationError) {
3655
- return "";
3656
- if (StringUtils.IsString(validationError)) {
3657
- // return this._dictionary.get(validationError);
3658
- }
3659
- else if (validationError.message) {
3660
- if (validationError.placeholder) {
3661
- // see e.g. maxStringLengthValidator, where we return this {message: string, placeholder: string} object shape as validation error obj
3662
- // return this._dictionary.get(validationError.message, true, validationError.placeholder);
3663
- }
3664
- else {
3665
- // return this._dictionary.get(validationError.message);
3666
- }
3667
- }
3668
- }
3669
3618
  _setFirstInvalidElementOnMaster() {
3670
3619
  const elements = Array.from(this._componentMap);
3671
3620
  const len = elements.length;
@@ -3701,6 +3650,98 @@ FormComponent.propDecorators = {
3701
3650
  onEnterKey: [{ type: HostListener, args: ['keyup.enter', ['$event'],] }]
3702
3651
  };
3703
3652
 
3653
+ class DropDownListComponent extends BaseInputComponent {
3654
+ constructor(formComponent, changeDetector, componentFactoryResolver, formUserChangeListener, ngZoneWrapper, elementRef) {
3655
+ super(changeDetector, componentFactoryResolver, formUserChangeListener, ngZoneWrapper, elementRef);
3656
+ this.formComponent = formComponent;
3657
+ this.changeDetector = changeDetector;
3658
+ this.componentFactoryResolver = componentFactoryResolver;
3659
+ this.formUserChangeListener = formUserChangeListener;
3660
+ this.ngZoneWrapper = ngZoneWrapper;
3661
+ this.elementRef = elementRef;
3662
+ /**
3663
+ * In the form { text: 'name', value: 'id' }
3664
+ * Where 'text' is showing in the dropdown and 'id' used for the model binding
3665
+ */
3666
+ this.fields = {};
3667
+ super._markAsOnPush();
3668
+ }
3669
+ showClass() {
3670
+ return true;
3671
+ }
3672
+ handleValueChanged(value) {
3673
+ if (value !== this.model) {
3674
+ this.modelChange.next(value);
3675
+ }
3676
+ }
3677
+ }
3678
+ DropDownListComponent.decorators = [
3679
+ { type: Component, args: [{
3680
+ selector: "co-drop-down-list",
3681
+ template: `
3682
+ <ejs-dropdownlist
3683
+ [dataSource]="collection"
3684
+ [value]="model"
3685
+ [fields]="fields"
3686
+ [placeholder]="placeholder"
3687
+ [readonly]="readonly"
3688
+ [itemTemplate]="itemTemplate"
3689
+ [headerTemplate]="headerTemplate"
3690
+ [valueTemplate]="valueTemplate"
3691
+ [ngModel]="model"
3692
+ (ngModelChange)="modelChange.emit($event)"
3693
+ (valueChange)="handleValueChanged($event)"
3694
+ showClearButton="true"
3695
+ floatLabelType="Auto"
3696
+ >
3697
+ </ejs-dropdownlist>
3698
+ <div class="required-indicator"></div>
3699
+ <ng-template #validationError></ng-template>
3700
+ `,
3701
+ providers: [
3702
+ CheckBoxSelectionService,
3703
+ {
3704
+ provide: COMPONENT_INTERFACE_NAME,
3705
+ useExisting: forwardRef(() => DropDownListComponent)
3706
+ }
3707
+ ],
3708
+ encapsulation: ViewEncapsulation.None
3709
+ },] }
3710
+ ];
3711
+ DropDownListComponent.ctorParameters = () => [
3712
+ { type: FormComponent, decorators: [{ type: Optional }] },
3713
+ { type: ChangeDetectorRef },
3714
+ { type: ComponentFactoryResolver },
3715
+ { type: FormInputUserModelChangeListenerService },
3716
+ { type: NgZoneWrapperService },
3717
+ { type: ElementRef }
3718
+ ];
3719
+ DropDownListComponent.propDecorators = {
3720
+ collection: [{ type: Input }],
3721
+ fields: [{ type: Input }],
3722
+ placeholder: [{ type: Input }],
3723
+ itemTemplate: [{ type: Input }],
3724
+ headerTemplate: [{ type: Input }],
3725
+ valueTemplate: [{ type: Input }],
3726
+ showClass: [{ type: HostBinding, args: ["class.co-drop-down-list",] }]
3727
+ };
3728
+
3729
+ class DropDownModule {
3730
+ }
3731
+ DropDownModule.decorators = [
3732
+ { type: NgModule, args: [{
3733
+ imports: [
3734
+ BaseModule,
3735
+ CommonModule,
3736
+ DropDownListModule,
3737
+ MultiSelectModule,
3738
+ FormsModule
3739
+ ],
3740
+ declarations: [DropDownListComponent],
3741
+ exports: [DropDownListComponent]
3742
+ },] }
3743
+ ];
3744
+
3704
3745
  class FormModule {
3705
3746
  }
3706
3747
  FormModule.decorators = [
@@ -4077,9 +4118,15 @@ CoGridModule.decorators = [
4077
4118
  ];
4078
4119
 
4079
4120
  class InputCheckboxComponent extends BaseInputComponent {
4080
- constructor(formComponent, changeDetector, formUserChangeListener, ngZoneWrapper) {
4081
- super(changeDetector, formUserChangeListener, ngZoneWrapper);
4121
+ constructor(formComponent, iconCacheService, changeDetector, componentFactoryResolver, formUserChangeListener, ngZoneWrapper, elementRef) {
4122
+ super(changeDetector, componentFactoryResolver, formUserChangeListener, ngZoneWrapper, elementRef);
4082
4123
  this.formComponent = formComponent;
4124
+ this.iconCacheService = iconCacheService;
4125
+ this.changeDetector = changeDetector;
4126
+ this.componentFactoryResolver = componentFactoryResolver;
4127
+ this.formUserChangeListener = formUserChangeListener;
4128
+ this.ngZoneWrapper = ngZoneWrapper;
4129
+ this.elementRef = elementRef;
4083
4130
  this.modelChange = new EventEmitter();
4084
4131
  }
4085
4132
  showClass() {
@@ -4116,9 +4163,12 @@ InputCheckboxComponent.decorators = [
4116
4163
  ];
4117
4164
  InputCheckboxComponent.ctorParameters = () => [
4118
4165
  { type: FormComponent, decorators: [{ type: Optional }] },
4166
+ { type: IconCacheService },
4119
4167
  { type: ChangeDetectorRef },
4168
+ { type: ComponentFactoryResolver },
4120
4169
  { type: FormInputUserModelChangeListenerService },
4121
- { type: NgZoneWrapperService }
4170
+ { type: NgZoneWrapperService },
4171
+ { type: ElementRef }
4122
4172
  ];
4123
4173
  InputCheckboxComponent.propDecorators = {
4124
4174
  name: [{ type: Input }],
@@ -4174,10 +4224,11 @@ AppendPipeModule.decorators = [
4174
4224
  ];
4175
4225
 
4176
4226
  class InputCheckboxMultiSelectComponent extends BaseInputComponent {
4177
- constructor(formComponent, changeDetector, formUserChangeListener, ngZoneWrapper, elementRef) {
4178
- super(changeDetector, formUserChangeListener, ngZoneWrapper, elementRef);
4227
+ constructor(formComponent, changeDetector, componentFactoryResolver, formUserChangeListener, ngZoneWrapper, elementRef) {
4228
+ super(changeDetector, componentFactoryResolver, formUserChangeListener, ngZoneWrapper, elementRef);
4179
4229
  this.formComponent = formComponent;
4180
4230
  this.changeDetector = changeDetector;
4231
+ this.componentFactoryResolver = componentFactoryResolver;
4181
4232
  this.formUserChangeListener = formUserChangeListener;
4182
4233
  this.ngZoneWrapper = ngZoneWrapper;
4183
4234
  this.elementRef = elementRef;
@@ -4186,16 +4237,6 @@ class InputCheckboxMultiSelectComponent extends BaseInputComponent {
4186
4237
  showClass() {
4187
4238
  return true;
4188
4239
  }
4189
- ngOnDestroy() {
4190
- this.elementRef = undefined;
4191
- super.ngOnDestroy();
4192
- }
4193
- ngOnInit() {
4194
- super.ngOnInit();
4195
- }
4196
- ngAfterViewInit() {
4197
- super.ngAfterViewInit();
4198
- }
4199
4240
  }
4200
4241
  InputCheckboxMultiSelectComponent.decorators = [
4201
4242
  { type: Component, args: [{
@@ -4222,6 +4263,7 @@ InputCheckboxMultiSelectComponent.decorators = [
4222
4263
  InputCheckboxMultiSelectComponent.ctorParameters = () => [
4223
4264
  { type: FormComponent, decorators: [{ type: Optional }] },
4224
4265
  { type: ChangeDetectorRef },
4266
+ { type: ComponentFactoryResolver },
4225
4267
  { type: FormInputUserModelChangeListenerService },
4226
4268
  { type: NgZoneWrapperService },
4227
4269
  { type: ElementRef }
@@ -4253,29 +4295,21 @@ InputCheckboxMultiSelectModule.decorators = [
4253
4295
  ];
4254
4296
 
4255
4297
  class InputComboBoxComponent extends BaseInputComponent {
4256
- constructor(formComponent, changeDetector, formUserChangeListener, ngZoneWrapper, elementRef) {
4257
- super(changeDetector, formUserChangeListener, ngZoneWrapper, elementRef);
4298
+ constructor(formComponent, changeDetector, componentFactoryResolver, formUserChangeListener, ngZoneWrapper, elementRef) {
4299
+ super(changeDetector, componentFactoryResolver, formUserChangeListener, ngZoneWrapper, elementRef);
4258
4300
  this.formComponent = formComponent;
4259
4301
  this.changeDetector = changeDetector;
4302
+ this.componentFactoryResolver = componentFactoryResolver;
4260
4303
  this.formUserChangeListener = formUserChangeListener;
4261
4304
  this.ngZoneWrapper = ngZoneWrapper;
4262
4305
  this.elementRef = elementRef;
4263
4306
  this.shopPopup = true;
4307
+ this.customHeight = true;
4264
4308
  super._markAsOnPush();
4265
4309
  }
4266
4310
  showClass() {
4267
4311
  return true;
4268
4312
  }
4269
- ngOnDestroy() {
4270
- this.elementRef = undefined;
4271
- super.ngOnDestroy();
4272
- }
4273
- ngOnInit() {
4274
- super.ngOnInit();
4275
- }
4276
- ngAfterViewInit() {
4277
- super.ngAfterViewInit();
4278
- }
4279
4313
  onFocus() {
4280
4314
  if (this.shopPopup && this.model === undefined) {
4281
4315
  this.combo.showPopup();
@@ -4286,41 +4320,44 @@ InputComboBoxComponent.decorators = [
4286
4320
  { type: Component, args: [{
4287
4321
  selector: "co-input-combo-box",
4288
4322
  template: `
4289
- <ejs-combobox #combo [dataSource]="source"
4290
- [fields]="fields"
4291
- [placeholder]="placeholder"
4292
- [autofill]="true"
4293
- [ngModel]="model"
4294
- (ngModelChange)="modelChange.emit($event)"
4295
- (focus)="onFocus()"
4296
- showClearButton="true"
4297
- floatLabelType="Auto"
4298
- >
4299
- </ejs-combobox>
4300
- `,
4323
+ <ejs-combobox #combo [dataSource]="collection"
4324
+ [fields]="fields"
4325
+ [placeholder]="placeholder"
4326
+ [autofill]="true"
4327
+ [ngModel]="model"
4328
+ (ngModelChange)="modelChange.emit($event)"
4329
+ (focus)="onFocus()"
4330
+ showClearButton="true"
4331
+ floatLabelType="Auto"
4332
+ >
4333
+ </ejs-combobox>
4334
+ <div class="required-indicator"></div>
4335
+ <ng-template #validationError></ng-template>
4336
+ `,
4301
4337
  providers: [{
4302
4338
  provide: COMPONENT_INTERFACE_NAME,
4303
4339
  useExisting: forwardRef(() => InputComboBoxComponent)
4304
4340
  }],
4305
- changeDetection: ChangeDetectionStrategy.OnPush,
4306
4341
  encapsulation: ViewEncapsulation.None
4307
4342
  },] }
4308
4343
  ];
4309
4344
  InputComboBoxComponent.ctorParameters = () => [
4310
4345
  { type: FormComponent, decorators: [{ type: Optional }] },
4311
4346
  { type: ChangeDetectorRef },
4347
+ { type: ComponentFactoryResolver },
4312
4348
  { type: FormInputUserModelChangeListenerService },
4313
4349
  { type: NgZoneWrapperService },
4314
4350
  { type: ElementRef }
4315
4351
  ];
4316
4352
  InputComboBoxComponent.propDecorators = {
4317
4353
  combo: [{ type: ViewChild, args: ["combo",] }],
4318
- source: [{ type: Input }],
4354
+ collection: [{ type: Input }],
4319
4355
  fields: [{ type: Input }],
4320
4356
  selected: [{ type: Input }],
4321
4357
  placeholder: [{ type: Input }],
4322
4358
  shopPopup: [{ type: Input }],
4323
- showClass: [{ type: HostBinding, args: ["class.co-input-combo-box",] }]
4359
+ showClass: [{ type: HostBinding, args: ["class.co-input-combo-box",] }],
4360
+ customHeight: [{ type: HostBinding, args: ["class.custom-height",] }]
4324
4361
  };
4325
4362
 
4326
4363
  class InputComboBoxModule {
@@ -4341,11 +4378,12 @@ InputComboBoxModule.decorators = [
4341
4378
  ];
4342
4379
 
4343
4380
  class InputDatePickerComponent extends BaseInputComponent {
4344
- constructor(iconCacheService, formComponent, changeDetector, formUserChangeListener, ngZoneWrapper, elementRef) {
4345
- super(changeDetector, formUserChangeListener, ngZoneWrapper, elementRef);
4346
- this.iconCacheService = iconCacheService;
4381
+ constructor(formComponent, iconCacheService, changeDetector, componentFactoryResolver, formUserChangeListener, ngZoneWrapper, elementRef) {
4382
+ super(changeDetector, componentFactoryResolver, formUserChangeListener, ngZoneWrapper, elementRef);
4347
4383
  this.formComponent = formComponent;
4384
+ this.iconCacheService = iconCacheService;
4348
4385
  this.changeDetector = changeDetector;
4386
+ this.componentFactoryResolver = componentFactoryResolver;
4349
4387
  this.formUserChangeListener = formUserChangeListener;
4350
4388
  this.ngZoneWrapper = ngZoneWrapper;
4351
4389
  this.elementRef = elementRef;
@@ -4400,18 +4438,20 @@ InputDatePickerComponent.decorators = [
4400
4438
  [ngModel]="model"
4401
4439
  (ngModelChange)="modelChange.emit($event)"
4402
4440
  ></ejs-datepicker>
4441
+ <div class="required-indicator"></div>
4442
+ <ng-template #validationError></ng-template>
4403
4443
  `,
4404
4444
  providers: [{
4405
4445
  provide: COMPONENT_INTERFACE_NAME, useExisting: forwardRef(() => InputDatePickerComponent)
4406
4446
  }],
4407
- changeDetection: ChangeDetectionStrategy.OnPush,
4408
4447
  encapsulation: ViewEncapsulation.None
4409
4448
  },] }
4410
4449
  ];
4411
4450
  InputDatePickerComponent.ctorParameters = () => [
4412
- { type: IconCacheService },
4413
4451
  { type: FormComponent, decorators: [{ type: Optional }] },
4452
+ { type: IconCacheService },
4414
4453
  { type: ChangeDetectorRef },
4454
+ { type: ComponentFactoryResolver },
4415
4455
  { type: FormInputUserModelChangeListenerService },
4416
4456
  { type: NgZoneWrapperService },
4417
4457
  { type: ElementRef }
@@ -4735,132 +4775,65 @@ const NUMBER_INPUTS_KEY_DOWN_WHITE_LIST = [
4735
4775
  KeyboardCode.NumpadNine
4736
4776
  ];
4737
4777
 
4738
- var InputTextType;
4739
- (function (InputTextType) {
4740
- InputTextType["Text"] = "text";
4741
- InputTextType["Email"] = "email";
4742
- })(InputTextType || (InputTextType = {}));
4743
-
4744
- var FloatLabelTypeEnum;
4745
- (function (FloatLabelTypeEnum) {
4746
- FloatLabelTypeEnum["Never"] = "Never";
4747
- FloatLabelTypeEnum["Always"] = "Always";
4748
- FloatLabelTypeEnum["Auto"] = "Auto";
4749
- })(FloatLabelTypeEnum || (FloatLabelTypeEnum = {}));
4750
-
4751
4778
  class InputTextComponent extends BaseInputComponent {
4752
- constructor(formComponent, changeDetector, formUserChangeListener, ngZoneWrapper, elementRef) {
4753
- super(changeDetector, formUserChangeListener, ngZoneWrapper, elementRef);
4779
+ constructor(formComponent, changeDetector, componentFactoryResolver, formUserChangeListener, ngZoneWrapper, elementRef) {
4780
+ super(changeDetector, componentFactoryResolver, formUserChangeListener, ngZoneWrapper, elementRef);
4754
4781
  this.formComponent = formComponent;
4755
4782
  this.changeDetector = changeDetector;
4783
+ this.componentFactoryResolver = componentFactoryResolver;
4756
4784
  this.formUserChangeListener = formUserChangeListener;
4757
4785
  this.ngZoneWrapper = ngZoneWrapper;
4758
4786
  this.elementRef = elementRef;
4759
- this.floatLabelType = FloatLabelTypeEnum.Auto;
4787
+ this.Icons = CoreComponentsIcon;
4760
4788
  this.placeholder = "";
4761
4789
  this.type = "text";
4762
4790
  this.showClearButton = undefined;
4763
- this.alwaysShowClearIcon = false;
4764
- this.alwaysShowClearIconOnFocus = false;
4765
- this.noEmailValidation = false;
4766
- this.extraIconOnFocusOnly = false;
4767
- this.inputType = InputTextType.Text;
4768
- this.blur = new EventEmitter();
4769
- this.inputClick = new EventEmitter();
4770
- this.extraIconClick = new EventEmitter();
4771
- this.clearIconClick = new EventEmitter();
4772
- this.validEmailClick = false;
4773
- this.Icons = CoreComponentsIcon;
4791
+ this.hasOwnLabel = true;
4774
4792
  super._markAsOnPush();
4775
4793
  }
4776
4794
  showClass() {
4777
4795
  return true;
4778
4796
  }
4779
- ngOnDestroy() {
4780
- this.elementRef = undefined;
4781
- super.ngOnDestroy();
4782
- }
4783
- ngOnInit() {
4784
- super.ngOnInit();
4785
- }
4786
- ngAfterViewInit() {
4787
- if (this.textBox) {
4788
- this.changeDetector.detectChanges();
4789
- }
4790
- super.ngAfterViewInit();
4791
- }
4792
- setSelectionRange(range) {
4793
- if (range && this.input) {
4794
- this.input.setSelectionRange(range.lowerBound, range.upperBound);
4795
- }
4796
- }
4797
4797
  }
4798
4798
  InputTextComponent.decorators = [
4799
4799
  { type: Component, args: [{
4800
- selector: "co-input-text, co-input-email, co-input-wizard",
4800
+ selector: "co-input-text",
4801
4801
  template: `
4802
- <ejs-textbox [floatLabelType]="floatLabelType"
4803
- [placeholder]="placeholder"
4804
- [type]="type"
4805
- [readonly]="readonly"
4806
- [ngModel]="model"
4807
- [cssClass]="cssClass"
4808
- (ngModelChange)="modelChange.emit($event)"
4809
- [showClearButton]="showClearButton"
4810
- (blur)="this.blur.emit()"
4811
- (input)="this.inputClick.emit()"
4812
- ></ejs-textbox>
4813
- <ng-content></ng-content>
4802
+ <label [textContent]="placeholder"></label>
4803
+ <input [type]="type"
4804
+ [ngModel]="model"
4805
+ [readonly]="readonly"
4806
+ [required]="required"
4807
+ (ngModelChange)="modelChange.emit($event)"
4808
+ (focus)="focused = true"
4809
+ (blur)="focused = false"
4810
+ >
4811
+ <div class="required-indicator"></div>
4812
+ <ng-template #validationError></ng-template>
4814
4813
  `,
4815
4814
  providers: [{
4816
4815
  provide: COMPONENT_INTERFACE_NAME,
4817
4816
  useExisting: forwardRef(() => InputTextComponent)
4818
4817
  }],
4819
- changeDetection: ChangeDetectionStrategy.OnPush,
4820
4818
  encapsulation: ViewEncapsulation.None
4821
4819
  },] }
4822
4820
  ];
4823
4821
  InputTextComponent.ctorParameters = () => [
4824
4822
  { type: FormComponent, decorators: [{ type: Optional }] },
4825
4823
  { type: ChangeDetectorRef },
4824
+ { type: ComponentFactoryResolver },
4826
4825
  { type: FormInputUserModelChangeListenerService },
4827
4826
  { type: NgZoneWrapperService },
4828
4827
  { type: ElementRef }
4829
4828
  ];
4830
4829
  InputTextComponent.propDecorators = {
4831
- textBox: [{ type: ViewChild, args: [TextBoxComponent,] }],
4832
- floatLabelType: [{ type: Input }],
4833
4830
  placeholder: [{ type: Input }],
4834
4831
  type: [{ type: Input }],
4835
4832
  showClearButton: [{ type: Input }],
4836
- cssClass: [{ type: Input }],
4837
- alwaysShowClearIcon: [{ type: Input }],
4838
- alwaysShowClearIconOnFocus: [{ type: Input }],
4839
- noEmailValidation: [{ type: Input }],
4840
- extraIcon: [{ type: Input }],
4841
- extraIconOnFocusOnly: [{ type: Input }],
4842
4833
  keyDownWhiteList: [{ type: Input }],
4843
- extraIconClass: [{ type: Input }],
4844
- inputType: [{ type: Input }],
4845
- ngModelOptions: [{ type: Input }],
4846
- blur: [{ type: Output }],
4847
- inputClick: [{ type: Output }],
4848
- extraIconClick: [{ type: Output }],
4849
- clearIconClick: [{ type: Output }],
4850
- showClass: [{ type: HostBinding, args: ["class.co-input-text",] }]
4851
- };
4852
- __decorate([
4853
- InputBoolean()
4854
- ], InputTextComponent.prototype, "alwaysShowClearIcon", void 0);
4855
- __decorate([
4856
- InputBoolean()
4857
- ], InputTextComponent.prototype, "alwaysShowClearIconOnFocus", void 0);
4858
- __decorate([
4859
- InputBoolean()
4860
- ], InputTextComponent.prototype, "noEmailValidation", void 0);
4861
- __decorate([
4862
- InputBoolean()
4863
- ], InputTextComponent.prototype, "extraIconOnFocusOnly", void 0);
4834
+ showClass: [{ type: HostBinding, args: ["class.co-input-text",] }],
4835
+ hasOwnLabel: [{ type: HostBinding, args: ["class.has-own-label",] }]
4836
+ };
4864
4837
 
4865
4838
  // Input values for 'buttonShowMode' of NumberPickerComponent.
4866
4839
  var InputNumberPickerButtonShowMode;
@@ -4872,12 +4845,12 @@ var InputNumberPickerButtonShowMode;
4872
4845
 
4873
4846
  // A component that lets users pick a number by increasing and decreasing it with buttons, or by typing.
4874
4847
  class InputNumberPickerComponent extends BaseInputComponent {
4875
- constructor(iconCacheService, _ngZone, changeDetector, formUserChangeListener) {
4876
- super(changeDetector, formUserChangeListener);
4848
+ constructor(formComponent, iconCacheService, _ngZone, componentFactoryResolver, changeDetector, formUserChangeListener) {
4849
+ super(changeDetector, componentFactoryResolver, formUserChangeListener);
4850
+ this.formComponent = formComponent;
4877
4851
  this.iconCacheService = iconCacheService;
4878
4852
  this._ngZone = _ngZone;
4879
- this.floatLabelType = FloatLabelTypeEnum.Never;
4880
- this.cssClass = "e-outline";
4853
+ this.componentFactoryResolver = componentFactoryResolver;
4881
4854
  this.minusIcon = CoreComponentsIcon.MinusSimple;
4882
4855
  this.plusIcon = CoreComponentsIcon.PlusSimple;
4883
4856
  // Whether to show buttons 'always', 'onFocusOnly', or 'never'
@@ -5113,14 +5086,14 @@ InputNumberPickerComponent.decorators = [
5113
5086
  },] }
5114
5087
  ];
5115
5088
  InputNumberPickerComponent.ctorParameters = () => [
5089
+ { type: FormComponent, decorators: [{ type: Optional }] },
5116
5090
  { type: IconCacheService, decorators: [{ type: Inject, args: [IconCacheService,] }] },
5117
5091
  { type: NgZone },
5092
+ { type: ComponentFactoryResolver },
5118
5093
  { type: ChangeDetectorRef },
5119
5094
  { type: FormInputUserModelChangeListenerService }
5120
5095
  ];
5121
5096
  InputNumberPickerComponent.propDecorators = {
5122
- floatLabelType: [{ type: Input }],
5123
- cssClass: [{ type: Input }],
5124
5097
  model: [{ type: Input }],
5125
5098
  min: [{ type: Input }],
5126
5099
  step: [{ type: Input }],
@@ -5141,6 +5114,22 @@ __decorate([
5141
5114
  InputBoolean()
5142
5115
  ], InputNumberPickerComponent.prototype, "noValidation", void 0);
5143
5116
 
5117
+ class ValidationErrorModule {
5118
+ }
5119
+ ValidationErrorModule.decorators = [
5120
+ { type: NgModule, args: [{
5121
+ imports: [
5122
+ CommonModule
5123
+ ],
5124
+ declarations: [
5125
+ ValidationErrorComponent
5126
+ ],
5127
+ exports: [
5128
+ ValidationErrorComponent
5129
+ ]
5130
+ },] }
5131
+ ];
5132
+
5144
5133
  class InputTextModule {
5145
5134
  }
5146
5135
  InputTextModule.decorators = [
@@ -5152,13 +5141,15 @@ InputTextModule.decorators = [
5152
5141
  IconModule,
5153
5142
  AppendPipeModule,
5154
5143
  TextBoxAllModule,
5155
- NumericTextBoxModule
5144
+ NumericTextBoxModule,
5145
+ ValidationErrorModule
5156
5146
  ],
5157
- schemas: [
5158
- NO_ERRORS_SCHEMA
5147
+ declarations: [
5148
+ InputTextComponent
5159
5149
  ],
5160
- declarations: [InputTextComponent],
5161
- exports: [InputTextComponent]
5150
+ exports: [
5151
+ InputTextComponent
5152
+ ]
5162
5153
  },] }
5163
5154
  ];
5164
5155
 
@@ -5178,9 +5169,15 @@ InputNumberPickerModule.decorators = [
5178
5169
  ];
5179
5170
 
5180
5171
  class InputRadioButtonComponent extends BaseInputComponent {
5181
- constructor(formComponent, changeDetector, formUserChangeListener, ngZoneWrapper) {
5182
- super(changeDetector, formUserChangeListener, ngZoneWrapper);
5172
+ constructor(formComponent, changeDetector, componentFactoryResolver, formUserChangeListener, ngZoneWrapper, elementRef) {
5173
+ super(changeDetector, componentFactoryResolver, formUserChangeListener, ngZoneWrapper, elementRef);
5183
5174
  this.formComponent = formComponent;
5175
+ this.changeDetector = changeDetector;
5176
+ this.componentFactoryResolver = componentFactoryResolver;
5177
+ this.formUserChangeListener = formUserChangeListener;
5178
+ this.ngZoneWrapper = ngZoneWrapper;
5179
+ this.elementRef = elementRef;
5180
+ super._markAsOnPush();
5184
5181
  }
5185
5182
  showClass() {
5186
5183
  return true;
@@ -5212,8 +5209,10 @@ InputRadioButtonComponent.decorators = [
5212
5209
  InputRadioButtonComponent.ctorParameters = () => [
5213
5210
  { type: FormComponent, decorators: [{ type: Optional }] },
5214
5211
  { type: ChangeDetectorRef },
5212
+ { type: ComponentFactoryResolver },
5215
5213
  { type: FormInputUserModelChangeListenerService },
5216
- { type: NgZoneWrapperService }
5214
+ { type: NgZoneWrapperService },
5215
+ { type: ElementRef }
5217
5216
  ];
5218
5217
  InputRadioButtonComponent.propDecorators = {
5219
5218
  value: [{ type: Input }],
@@ -5239,9 +5238,89 @@ InputRadioButtonModule.decorators = [
5239
5238
  },] }
5240
5239
  ];
5241
5240
 
5241
+ class InputTextareaComponent extends BaseInputComponent {
5242
+ constructor(formComponent, changeDetector, componentFactoryResolver, formUserChangeListener, ngZoneWrapper, elementRef) {
5243
+ super(changeDetector, componentFactoryResolver, formUserChangeListener, ngZoneWrapper, elementRef);
5244
+ this.formComponent = formComponent;
5245
+ this.changeDetector = changeDetector;
5246
+ this.componentFactoryResolver = componentFactoryResolver;
5247
+ this.formUserChangeListener = formUserChangeListener;
5248
+ this.ngZoneWrapper = ngZoneWrapper;
5249
+ this.elementRef = elementRef;
5250
+ this.placeholder = "";
5251
+ this.hasOwnLabel = true;
5252
+ this.customHeight = true;
5253
+ super._markAsOnPush();
5254
+ }
5255
+ showClass() {
5256
+ return true;
5257
+ }
5258
+ }
5259
+ InputTextareaComponent.decorators = [
5260
+ { type: Component, args: [{
5261
+ selector: "co-input-textarea",
5262
+ template: `
5263
+ <label [textContent]="placeholder"></label>
5264
+ <textarea type="textarea"
5265
+ [ngModel]="model"
5266
+ [readonly]="readonly"
5267
+ [required]="required"
5268
+ (ngModelChange)="modelChange.emit($event)"
5269
+ (focus)="focused = true"
5270
+ (blur)="focused = false"
5271
+ ></textarea>
5272
+ <div class="required-indicator"></div>
5273
+ <ng-template #validationError></ng-template>
5274
+ `,
5275
+ providers: [{
5276
+ provide: COMPONENT_INTERFACE_NAME,
5277
+ useExisting: forwardRef(() => InputTextareaComponent)
5278
+ }],
5279
+ encapsulation: ViewEncapsulation.None
5280
+ },] }
5281
+ ];
5282
+ InputTextareaComponent.ctorParameters = () => [
5283
+ { type: FormComponent, decorators: [{ type: Optional }] },
5284
+ { type: ChangeDetectorRef },
5285
+ { type: ComponentFactoryResolver },
5286
+ { type: FormInputUserModelChangeListenerService },
5287
+ { type: NgZoneWrapperService },
5288
+ { type: ElementRef }
5289
+ ];
5290
+ InputTextareaComponent.propDecorators = {
5291
+ placeholder: [{ type: Input }],
5292
+ showClass: [{ type: HostBinding, args: ["class.co-input-textarea",] }],
5293
+ hasOwnLabel: [{ type: HostBinding, args: ["class.has-own-label",] }],
5294
+ customHeight: [{ type: HostBinding, args: ['class.custom-height',] }]
5295
+ };
5296
+
5297
+ class InputTextareaModule {
5298
+ }
5299
+ InputTextareaModule.decorators = [
5300
+ { type: NgModule, args: [{
5301
+ imports: [
5302
+ CommonModule,
5303
+ FormsModule,
5304
+ ValidationErrorModule
5305
+ ],
5306
+ declarations: [
5307
+ InputTextareaComponent
5308
+ ],
5309
+ exports: [
5310
+ InputTextareaComponent
5311
+ ]
5312
+ },] }
5313
+ ];
5314
+
5242
5315
  class MultiSelectListComponent extends BaseInputComponent {
5243
- constructor() {
5244
- super(...arguments);
5316
+ constructor(formComponent, changeDetector, componentFactoryResolver, formUserChangeListener, ngZoneWrapper, elementRef) {
5317
+ super(changeDetector, componentFactoryResolver, formUserChangeListener, ngZoneWrapper, elementRef);
5318
+ this.formComponent = formComponent;
5319
+ this.changeDetector = changeDetector;
5320
+ this.componentFactoryResolver = componentFactoryResolver;
5321
+ this.formUserChangeListener = formUserChangeListener;
5322
+ this.ngZoneWrapper = ngZoneWrapper;
5323
+ this.elementRef = elementRef;
5245
5324
  /**
5246
5325
  * In the form { text: 'name', value: 'id' }
5247
5326
  * Where 'text' is showing in the dropdown and 'id' used for the model binding
@@ -5249,6 +5328,7 @@ class MultiSelectListComponent extends BaseInputComponent {
5249
5328
  this.fields = {};
5250
5329
  this.showSelectAll = true;
5251
5330
  this.mode = "Default";
5331
+ super._markAsOnPush();
5252
5332
  }
5253
5333
  set showCheckbox(value) {
5254
5334
  if (value) {
@@ -5258,6 +5338,14 @@ class MultiSelectListComponent extends BaseInputComponent {
5258
5338
  showClass() {
5259
5339
  return true;
5260
5340
  }
5341
+ handleModelChange(val) {
5342
+ if (Array.isArray(val)) {
5343
+ if (val.length < 1) {
5344
+ val = undefined;
5345
+ }
5346
+ }
5347
+ this.modelChange.next(val);
5348
+ }
5261
5349
  }
5262
5350
  MultiSelectListComponent.decorators = [
5263
5351
  { type: Component, args: [{
@@ -5265,10 +5353,9 @@ MultiSelectListComponent.decorators = [
5265
5353
  template: `
5266
5354
  <ejs-multiselect
5267
5355
  [dataSource]="collection"
5268
- [placeholder]="placeHolder"
5356
+ [placeholder]="placeholder"
5269
5357
  [value]="model"
5270
5358
  [mode]="mode"
5271
- [cssClass]="'co-multi-select-list'"
5272
5359
  [fields]="fields"
5273
5360
  [readonly]="readonly"
5274
5361
  [itemTemplate]="itemTemplate"
@@ -5277,8 +5364,12 @@ MultiSelectListComponent.decorators = [
5277
5364
  [footerTemplate]="footerTemplate"
5278
5365
  [selectAllText]="'Select All'"
5279
5366
  [showSelectAll]=showSelectAll
5280
- (valueChange)="modelChange.emit($event)"
5367
+ [ngModel]="model"
5368
+ (ngModelChange)="handleModelChange($event)"
5369
+ (valueChange)="handleModelChange($event)"
5281
5370
  ></ejs-multiselect>
5371
+ <div class="required-indicator"></div>
5372
+ <ng-template #validationError></ng-template>
5282
5373
  `,
5283
5374
  providers: [
5284
5375
  CheckBoxSelectionService,
@@ -5287,14 +5378,21 @@ MultiSelectListComponent.decorators = [
5287
5378
  useExisting: forwardRef(() => MultiSelectListComponent)
5288
5379
  }
5289
5380
  ],
5290
- changeDetection: ChangeDetectionStrategy.OnPush,
5291
5381
  encapsulation: ViewEncapsulation.None
5292
5382
  },] }
5293
5383
  ];
5384
+ MultiSelectListComponent.ctorParameters = () => [
5385
+ { type: FormComponent, decorators: [{ type: Optional }] },
5386
+ { type: ChangeDetectorRef },
5387
+ { type: ComponentFactoryResolver },
5388
+ { type: FormInputUserModelChangeListenerService },
5389
+ { type: NgZoneWrapperService },
5390
+ { type: ElementRef }
5391
+ ];
5294
5392
  MultiSelectListComponent.propDecorators = {
5295
5393
  collection: [{ type: Input }],
5296
5394
  fields: [{ type: Input }],
5297
- placeHolder: [{ type: Input }],
5395
+ placeholder: [{ type: Input }],
5298
5396
  itemTemplate: [{ type: Input }],
5299
5397
  headerTemplate: [{ type: Input }],
5300
5398
  valueTemplate: [{ type: Input }],
@@ -5311,7 +5409,8 @@ MultiSelectListModule.decorators = [
5311
5409
  imports: [
5312
5410
  BaseModule,
5313
5411
  CommonModule,
5314
- MultiSelectModule
5412
+ MultiSelectModule,
5413
+ FormsModule
5315
5414
  ],
5316
5415
  declarations: [MultiSelectListComponent],
5317
5416
  exports: [MultiSelectListComponent]
@@ -6731,13 +6830,21 @@ CoRichTextEditorModule.decorators = [
6731
6830
 
6732
6831
  ListBoxComponent.Inject(CheckBoxSelection);
6733
6832
  class InputListboxComponent extends BaseInputComponent {
6734
- constructor() {
6735
- super(...arguments);
6833
+ constructor(formComponent, changeDetector, componentFactoryResolver, formUserChangeListener, ngZoneWrapper, elementRef) {
6834
+ super(changeDetector, componentFactoryResolver, formUserChangeListener, ngZoneWrapper, elementRef);
6835
+ this.formComponent = formComponent;
6836
+ this.changeDetector = changeDetector;
6837
+ this.componentFactoryResolver = componentFactoryResolver;
6838
+ this.formUserChangeListener = formUserChangeListener;
6839
+ this.ngZoneWrapper = ngZoneWrapper;
6840
+ this.elementRef = elementRef;
6736
6841
  // public set model(value: string[] | number[]) {
6737
6842
  // this._model = value;
6738
6843
  // }
6739
6844
  this.collection = [];
6845
+ this.customHeight = true;
6740
6846
  this.selectionSettings = { mode: 'Multiple' };
6847
+ super._markAsOnPush();
6741
6848
  }
6742
6849
  set singleSelect(value) {
6743
6850
  if (value) {
@@ -6772,14 +6879,23 @@ InputListboxComponent.decorators = [
6772
6879
  (ngModelChange)="modelChange.emit($event)"
6773
6880
  ></ejs-listbox>
6774
6881
  </div>
6882
+ <div class="required-indicator"></div>
6883
+ <ng-template #validationError></ng-template>
6775
6884
  `,
6776
6885
  providers: [{
6777
6886
  provide: COMPONENT_INTERFACE_NAME, useExisting: forwardRef(() => InputListboxComponent)
6778
6887
  }],
6779
- changeDetection: ChangeDetectionStrategy.OnPush,
6780
6888
  encapsulation: ViewEncapsulation.None
6781
6889
  },] }
6782
6890
  ];
6891
+ InputListboxComponent.ctorParameters = () => [
6892
+ { type: FormComponent, decorators: [{ type: Optional }] },
6893
+ { type: ChangeDetectorRef },
6894
+ { type: ComponentFactoryResolver },
6895
+ { type: FormInputUserModelChangeListenerService },
6896
+ { type: NgZoneWrapperService },
6897
+ { type: ElementRef }
6898
+ ];
6783
6899
  InputListboxComponent.propDecorators = {
6784
6900
  placeholder: [{ type: Input }],
6785
6901
  value: [{ type: Input }],
@@ -6788,7 +6904,8 @@ InputListboxComponent.propDecorators = {
6788
6904
  singleSelect: [{ type: Input }],
6789
6905
  showCheckbox: [{ type: Input }],
6790
6906
  showSelectAll: [{ type: Input }],
6791
- showClass: [{ type: HostBinding, args: ['class.co-input-listbox',] }]
6907
+ showClass: [{ type: HostBinding, args: ['class.co-input-listbox',] }],
6908
+ customHeight: [{ type: HostBinding, args: ['class.custom-height',] }]
6792
6909
  };
6793
6910
 
6794
6911
  enableRipple(true);
@@ -6973,6 +7090,382 @@ SimpleGridModule.decorators = [
6973
7090
  },] }
6974
7091
  ];
6975
7092
 
7093
+ class CarouselItem {
7094
+ constructor(options, index, onClick) {
7095
+ var _a, _b;
7096
+ this._options = options || {};
7097
+ this.index = index;
7098
+ const width = ((_a = this._options.tileSize) === null || _a === void 0 ? void 0 : _a.x) || 0;
7099
+ const height = ((_b = this._options.tileSize) === null || _b === void 0 ? void 0 : _b.y) || 0;
7100
+ this._element = document.createElement('div');
7101
+ // this._element.style.backgroundColor = this._options.tileBackgroundColor;
7102
+ this._element.style.width = width + "px";
7103
+ this._element.style.height = height + "px";
7104
+ this._element.addEventListener("click", () => {
7105
+ if (onClick) {
7106
+ onClick(this.index);
7107
+ }
7108
+ }, false);
7109
+ this.object = new CSS3DObject(this._element);
7110
+ const geometry = new PlaneBufferGeometry(width, height);
7111
+ this.mesh = new Mesh(geometry, options.tileMaterial);
7112
+ this.mesh.castShadow = true;
7113
+ }
7114
+ setPosition(position) {
7115
+ if (this.mesh) {
7116
+ this.mesh.position.copy(position);
7117
+ }
7118
+ if (this.object) {
7119
+ this.object.position.copy(position);
7120
+ }
7121
+ }
7122
+ setContent(content) {
7123
+ if (this._element) {
7124
+ // remove any exising tile content before setting new content
7125
+ while (this._element.lastElementChild) {
7126
+ this._element.removeChild(this._element.lastElementChild);
7127
+ }
7128
+ try {
7129
+ this._element.appendChild(content);
7130
+ }
7131
+ catch (err) {
7132
+ }
7133
+ }
7134
+ }
7135
+ setVisible(visible) {
7136
+ if (this.mesh) {
7137
+ this.mesh.visible = visible;
7138
+ }
7139
+ if (this.object) {
7140
+ this.object.visible = visible;
7141
+ }
7142
+ }
7143
+ }
7144
+
7145
+ class Carousel3dComponent {
7146
+ constructor() {
7147
+ this.cameraHeight = 50;
7148
+ this.shadow = false;
7149
+ this.selectedIndex = 0;
7150
+ this.indexSelected = new EventEmitter();
7151
+ this._cameraZoom = 0;
7152
+ this._backgroundColor = 0xffffff;
7153
+ this._ambientLight = true;
7154
+ this._tileSize = new Vector2();
7155
+ this._tileMargin = 20;
7156
+ this._targetPositions = [];
7157
+ this._tileElements = [];
7158
+ this._tileOffset = 0;
7159
+ this._tiles3D = [];
7160
+ this._planeColor = 0xffffff;
7161
+ this._planeHeight = -46;
7162
+ this._spotLightPosition = new Vector3(0, 250, -200);
7163
+ this._fullCircle = false;
7164
+ this._initialized = false;
7165
+ this._elementsCreated = false;
7166
+ this.canNavigateLeft = false;
7167
+ this.canNavigateRight = false;
7168
+ }
7169
+ set children(children) {
7170
+ this._elementsCreated = false;
7171
+ this._tileElements = children.toArray();
7172
+ this._buildCarousel();
7173
+ }
7174
+ showClass() {
7175
+ return true;
7176
+ }
7177
+ ngAfterViewInit() {
7178
+ this._buildCarousel();
7179
+ }
7180
+ ngOnDestroy() {
7181
+ this.canvasContainer = undefined;
7182
+ this.carouselWrapper = undefined;
7183
+ this._clearScenes();
7184
+ }
7185
+ handleButtonLeftClick() {
7186
+ this._tileOffset -= 1;
7187
+ this._rotate(400);
7188
+ }
7189
+ handleButtonRightClick() {
7190
+ this._tileOffset += 1;
7191
+ this._rotate(400);
7192
+ }
7193
+ _buildCarousel() {
7194
+ if (!this._initialized) {
7195
+ this._init();
7196
+ }
7197
+ if (this._initialized && !this._elementsCreated) {
7198
+ this._createTiles();
7199
+ }
7200
+ this._checkNavigationButtons();
7201
+ }
7202
+ _init() {
7203
+ if (!this.canvasContainer || !this.canvasContainer.nativeElement) {
7204
+ return;
7205
+ }
7206
+ this._initCamera();
7207
+ this._initScene();
7208
+ this._initRenderer();
7209
+ if (this.shadow) {
7210
+ const geometry = new PlaneGeometry(10000, 10000);
7211
+ const material = new MeshPhongMaterial({ color: this._planeColor, shininess: 100 });
7212
+ const plane = new Mesh(geometry, material);
7213
+ plane.receiveShadow = true;
7214
+ plane.rotation.x = -Math.PI / 2;
7215
+ plane.position.y = this._planeHeight;
7216
+ this._scene.add(plane);
7217
+ const spotLight = new SpotLight(0xffffff, 0.5);
7218
+ spotLight.position.copy(this._spotLightPosition);
7219
+ spotLight.castShadow = true;
7220
+ spotLight.shadow.mapSize.width = 512;
7221
+ spotLight.shadow.mapSize.height = 512;
7222
+ spotLight.shadow.camera.near = 50;
7223
+ spotLight.shadow.camera.far = 1200;
7224
+ spotLight.shadow.camera.fov = 30;
7225
+ spotLight.penumbra = 1;
7226
+ this._scene.add(spotLight);
7227
+ }
7228
+ this.carouselWrapper.nativeElement.appendChild(this._rendererCss.domElement);
7229
+ this.canvasContainer.nativeElement.appendChild(this.carouselWrapper.nativeElement);
7230
+ this.canvasContainer.nativeElement.appendChild(this._renderer.domElement);
7231
+ this._render();
7232
+ this._animate();
7233
+ window.addEventListener("resize", () => {
7234
+ this._resizeCanvasToDisplaySize();
7235
+ }, false);
7236
+ this._initialized = true;
7237
+ }
7238
+ _initCamera() {
7239
+ this._camera = new PerspectiveCamera(50, this.canvasContainer.nativeElement.clientWidth / this.canvasContainer.nativeElement.clientHeight, 1, 10000);
7240
+ this._camera.position.z = 600 - this._cameraZoom;
7241
+ this._camera.position.y = this.cameraHeight;
7242
+ this._camera.lookAt(new Vector3());
7243
+ }
7244
+ _initScene() {
7245
+ this._sceneCss = new Scene();
7246
+ this._scene = new Scene();
7247
+ this._scene.background = new Color(this._backgroundColor);
7248
+ if (this._ambientLight) {
7249
+ const light = new AmbientLight(0xaaaaaa); // soft white light
7250
+ this._scene.add(light);
7251
+ this._scene.fog = new Fog(this._backgroundColor, 70, 2500);
7252
+ }
7253
+ }
7254
+ _initRenderer() {
7255
+ this._rendererCss = new CSS3DRenderer();
7256
+ this._rendererCss.setSize(this.canvasContainer.nativeElement.clientWidth, this.canvasContainer.nativeElement.clientHeight);
7257
+ this._rendererCss.domElement.style.position = "absolute";
7258
+ this._renderer = new WebGLRenderer({ antialias: true });
7259
+ this._renderer.setPixelRatio(window.devicePixelRatio);
7260
+ this._renderer.setSize(this.canvasContainer.nativeElement.clientWidth, this.canvasContainer.nativeElement.clientHeight);
7261
+ this._renderer.shadowMap.enabled = true;
7262
+ }
7263
+ _disposeObject(obj) {
7264
+ if (obj instanceof Mesh) {
7265
+ if (obj.geometry) {
7266
+ obj.geometry.dispose();
7267
+ }
7268
+ if (obj.material) {
7269
+ Array.isArray(obj.material) ? obj.material.map(m => m.dispose()) : obj.material.dispose();
7270
+ }
7271
+ obj = undefined;
7272
+ }
7273
+ else {
7274
+ obj.element = undefined;
7275
+ obj = undefined;
7276
+ }
7277
+ }
7278
+ _clearScenes() {
7279
+ const meshes = this._tiles3D.map(t => t.mesh);
7280
+ const cssObjs = this._tiles3D.map(t => t.object);
7281
+ this._scene.remove(...meshes);
7282
+ meshes.map(m => this._disposeObject(m));
7283
+ meshes.length = 0;
7284
+ this._sceneCss.remove(...cssObjs);
7285
+ cssObjs.map(o => this._disposeObject(o));
7286
+ cssObjs.length = 0;
7287
+ this._tiles3D.length = 0;
7288
+ this._targetPositions.length = 0;
7289
+ }
7290
+ _createTiles() {
7291
+ this._clearScenes();
7292
+ this._tileSize.x = this.tileWidth;
7293
+ this._tileSize.y = this.tileHeight;
7294
+ const tileWidth = this._tileSize.x + this._tileMargin;
7295
+ const numItems = Math.max(this._tileElements.length, 20);
7296
+ this._fullCircle = this._tileElements.length >= 20;
7297
+ let angleTileDeg = 360 / numItems;
7298
+ const circumference = numItems * tileWidth;
7299
+ const radius = circumference / (Math.PI * 2);
7300
+ const y = this.shadow ? 75 : 45;
7301
+ const len = numItems;
7302
+ let angleDeg = 90;
7303
+ const position = new Vector3();
7304
+ for (var i = 0; i < len; i++) {
7305
+ const angle = angleDeg * (Math.PI / 180); // Radians
7306
+ const x = radius * Math.cos(angle);
7307
+ const z = -radius + radius * Math.sin(angle);
7308
+ position.set(x, y, z);
7309
+ this._targetPositions.push(position.clone());
7310
+ if (i < this._tileElements.length) {
7311
+ const tile = new CarouselItem({ tileSize: this._tileSize }, i, (idx) => this._rotateTo(idx));
7312
+ tile.setPosition(position);
7313
+ tile.setContent(this._tileElements[i].nativeElement);
7314
+ this._scene.add(tile.mesh);
7315
+ this._sceneCss.add(tile.object);
7316
+ this._tiles3D.push(tile);
7317
+ }
7318
+ angleDeg = angleDeg - angleTileDeg; // CW instead of CCW
7319
+ }
7320
+ this._adjustCameraZoom();
7321
+ this._tileOffset = this.selectedIndex;
7322
+ this._rotate(0);
7323
+ this._render();
7324
+ }
7325
+ _adjustCameraZoom() {
7326
+ if (this._tiles3D.length === 0) {
7327
+ return;
7328
+ }
7329
+ const object = this._tiles3D[0].mesh;
7330
+ // offset = offset || 1.15;
7331
+ // get bounding box of object - this will be used to setup controls and camera
7332
+ const boundingBox = new Box3();
7333
+ boundingBox.setFromObject(object);
7334
+ const center = new Vector3();
7335
+ boundingBox.getCenter(center);
7336
+ const size = new Vector3();
7337
+ boundingBox.getSize(size);
7338
+ // get the max side of the bounding box (fits to width OR height as needed )
7339
+ const maxDim = Math.max(size.x, size.y, size.z);
7340
+ const fov = this._camera.fov * (Math.PI / 180);
7341
+ // let cameraZ = Math.abs(maxDim / 4 * Math.tan(fov * 200));
7342
+ let cameraZ = Math.abs((maxDim / 2) / Math.tan(fov / 2));
7343
+ // cameraZ *= offset; // zoom out a little so that objects don't fill the screen
7344
+ this._camera.position.z = cameraZ;
7345
+ this._camera.lookAt(center);
7346
+ }
7347
+ _checkNavigationButtons() {
7348
+ const currentIdx = this._getSelectedIndex();
7349
+ this.canNavigateLeft = (currentIdx > 0) || this._fullCircle;
7350
+ this.canNavigateRight = (currentIdx < this._tileElements.length - 1) || this._fullCircle;
7351
+ }
7352
+ _animate() {
7353
+ TWEEN.update();
7354
+ setTimeout(() => {
7355
+ this._renderer.setAnimationLoop(() => this._animate());
7356
+ }, 200);
7357
+ }
7358
+ _getSelectedIndex() {
7359
+ return Math.max(0, Math.min(this.selectedIndex, this._tileElements.length - 1));
7360
+ }
7361
+ _rotate(duration) {
7362
+ TWEEN.removeAll();
7363
+ for (let i = 0; i < this._tiles3D.length; i++) {
7364
+ const tile = this._tiles3D[i];
7365
+ if (Math.abs(this._tileOffset) > this._targetPositions.length) { // full circle
7366
+ this._tileOffset = this._tileOffset > 0 ? 1 : -1;
7367
+ }
7368
+ let positionIdx = i - this._tileOffset;
7369
+ if (positionIdx > this._targetPositions.length - 1) {
7370
+ positionIdx = positionIdx - this._targetPositions.length;
7371
+ }
7372
+ else if (positionIdx < 0) {
7373
+ positionIdx = this._targetPositions.length + positionIdx;
7374
+ }
7375
+ const target = this._targetPositions[positionIdx];
7376
+ new TWEEN.Tween(tile.object.position)
7377
+ .to(target, duration)
7378
+ .easing(TWEEN.Easing.Quartic.Out)
7379
+ .start();
7380
+ new TWEEN.Tween(tile.mesh.position)
7381
+ .to(target, duration)
7382
+ .easing(TWEEN.Easing.Quartic.Out)
7383
+ .start();
7384
+ }
7385
+ new TWEEN.Tween()
7386
+ .to({}, duration * 2)
7387
+ .onUpdate(() => {
7388
+ this._render();
7389
+ })
7390
+ .start();
7391
+ this.selectedIndex = this._tileOffset;
7392
+ this._checkNavigationButtons();
7393
+ this.indexSelected.next(this._getSelectedIndex());
7394
+ }
7395
+ _rotateTo(index) {
7396
+ const current = this._getSelectedIndex();
7397
+ this._tileOffset += index - current;
7398
+ this._rotate(800);
7399
+ }
7400
+ _resizeCanvasToDisplaySize() {
7401
+ this._camera.aspect = this.canvasContainer.nativeElement.clientWidth / this.canvasContainer.nativeElement.clientHeight;
7402
+ this._camera.updateProjectionMatrix();
7403
+ this._rendererCss.setSize(this.canvasContainer.nativeElement.clientWidth, this.canvasContainer.nativeElement.clientHeight);
7404
+ this._renderer.setSize(this.canvasContainer.nativeElement.clientWidth, this.canvasContainer.nativeElement.clientHeight);
7405
+ this._render();
7406
+ }
7407
+ _render() {
7408
+ this._rendererCss.render(this._sceneCss, this._camera);
7409
+ this._renderer.render(this._scene, this._camera);
7410
+ }
7411
+ }
7412
+ Carousel3dComponent.decorators = [
7413
+ { type: Component, args: [{
7414
+ selector: "co-carousel-3d",
7415
+ template: `
7416
+ <div class="carousel-3d-canvas-wrapper" #canvasContainer>
7417
+ <div class="carousel-wrapper" #carouselWrapper>
7418
+ <div class="carousel-navigate-button left">
7419
+ <div class="carousel-navigate-button-wrapper" *ngIf="canNavigateLeft" (click)="handleButtonLeftClick()">
7420
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 256 512">
7421
+ <path
7422
+ d="M31.7 239l136-136c9.4-9.4 24.6-9.4 33.9 0l22.6 22.6c9.4 9.4 9.4 24.6 0 33.9L127.9 256l96.4 96.4c9.4 9.4 9.4 24.6 0 33.9L201.7 409c-9.4 9.4-24.6 9.4-33.9 0l-136-136c-9.5-9.4-9.5-24.6-.1-34z"></path>
7423
+ </svg>
7424
+ </div>
7425
+ </div>
7426
+ <div class="carousel-navigate-button right">
7427
+ <div class="carousel-navigate-button-wrapper" *ngIf="canNavigateRight" (click)="handleButtonRightClick()">
7428
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 256 512">
7429
+ <path
7430
+ d="M224.3 273l-136 136c-9.4 9.4-24.6 9.4-33.9 0l-22.6-22.6c-9.4-9.4-9.4-24.6 0-33.9l96.4-96.4-96.4-96.4c-9.4-9.4-9.4-24.6 0-33.9L54.3 103c9.4-9.4 24.6-9.4 33.9 0l136 136c9.5 9.4 9.5 24.6.1 34z"></path>
7431
+ </svg>
7432
+ </div>
7433
+ </div>
7434
+ </div>
7435
+ </div>
7436
+ `,
7437
+ encapsulation: ViewEncapsulation.None
7438
+ },] }
7439
+ ];
7440
+ Carousel3dComponent.propDecorators = {
7441
+ canvasContainer: [{ type: ViewChild, args: ["canvasContainer", { read: ElementRef },] }],
7442
+ carouselWrapper: [{ type: ViewChild, args: ["carouselWrapper", { read: ElementRef },] }],
7443
+ children: [{ type: ContentChildren, args: ["carouselItem", { read: ElementRef, descendants: true },] }],
7444
+ tileWidth: [{ type: Input }],
7445
+ tileHeight: [{ type: Input }],
7446
+ cameraHeight: [{ type: Input }],
7447
+ shadow: [{ type: Input }],
7448
+ selectedIndex: [{ type: Input }],
7449
+ indexSelected: [{ type: Output }],
7450
+ showClass: [{ type: HostBinding, args: ["class.co-carousel-3d",] }]
7451
+ };
7452
+
7453
+ class Carousel3dModule {
7454
+ }
7455
+ Carousel3dModule.decorators = [
7456
+ { type: NgModule, args: [{
7457
+ imports: [
7458
+ CommonModule
7459
+ ],
7460
+ declarations: [
7461
+ Carousel3dComponent
7462
+ ],
7463
+ exports: [
7464
+ Carousel3dComponent
7465
+ ]
7466
+ },] }
7467
+ ];
7468
+
6976
7469
  /*
6977
7470
  * Public API Surface of corecomponents
6978
7471
  */
@@ -6981,5 +7474,5 @@ SimpleGridModule.decorators = [
6981
7474
  * Generated bundle index. Do not edit.
6982
7475
  */
6983
7476
 
6984
- export { ArticleTileComponent, ArticleTileModule, ButtonComponent, ButtonDropDownComponent, ButtonDropDownModule, ButtonModule, COMPONENT_INTERFACE_NAME, CoDialogComponent, CoDialogModule, CoDialogPromptComponent, CoDialogPromptModule, CoGridComponent, CoGridModule, CoKanbanComponent, CoKanbanModule, CoPivotComponent, CoPivotModule, CoRichTextEditorComponent, CoRichTextEditorModule, CoScheduleComponent, CoScheduleModule, CoSidebarComponent, CoSidebarModule, CoToggleComponent, CoToggleModule, CollapsibleComponent, CollapsibleModule, ColumnAlign, CoreComponentsIcon, DropDownListComponent, DropDownModule, FormComponent, FormModule, IconCacheService, IconComponent, IconModule, ImageComponent, ImageModule, InputCheckboxComponent, InputCheckboxModule, InputCheckboxMultiSelectComponent, InputCheckboxMultiSelectModule, InputComboBoxComponent, InputComboBoxModule, InputDatePickerComponent, InputDatePickerModule, InputListboxComponent, InputListboxModule, InputNumberPickerComponent, InputNumberPickerModule, InputRadioButtonComponent, InputRadioButtonModule, InputTextComponent, InputTextModule, LevelIndicatorComponent, LevelIndicatorModule, MultiSelectListComponent, MultiSelectListModule, PopupButtonsComponent, PopupMessageDisplayComponent, PopupModule, PopupWindowShellComponent, PromptService, SimpleGridColumnDirective, SimpleGridComponent, SimpleGridModule, TextInputPopupComponent, TileComponent, TileModule, RippleModule as ɵa, MD_RIPPLE_GLOBAL_OPTIONS as ɵb, CoRippleDirective as ɵc, CoViewportRulerService as ɵd, CoScrollDispatcherService as ɵe, CoScrollableDirective as ɵf, StopClickModule as ɵg, StopClickDirective as ɵh, PriceDisplayPipeModule as ɵi, PriceDisplayPipe as ɵj, InputBoolean as ɵk, BaseModule as ɵl, FormInputUserModelChangeListenerService as ɵm, NgZoneWrapperService as ɵn, BaseInputComponent as ɵo, FormMasterService as ɵp, BaseSelectionGridComponent as ɵq, BaseInlineEditGridComponent as ɵr, BaseToolbarGridComponent as ɵs, BaseGridComponent as ɵt, AppendPipeModule as ɵu, AppendPipe as ɵv, PopupShowerService as ɵw };
7477
+ export { ArticleTileComponent, ArticleTileModule, ButtonComponent, ButtonDropDownComponent, ButtonDropDownModule, ButtonModule, COMPONENT_INTERFACE_NAME, Carousel3dComponent, Carousel3dModule, CoDialogComponent, CoDialogModule, CoDialogPromptComponent, CoDialogPromptModule, CoGridComponent, CoGridModule, CoKanbanComponent, CoKanbanModule, CoPivotComponent, CoPivotModule, CoRichTextEditorComponent, CoRichTextEditorModule, CoScheduleComponent, CoScheduleModule, CoSidebarComponent, CoSidebarModule, CoToggleComponent, CoToggleModule, CollapsibleComponent, CollapsibleModule, ColumnAlign, CoreComponentsIcon, DropDownListComponent, DropDownModule, FormComponent, FormMasterService, FormModule, IconCacheService, IconComponent, IconModule, ImageComponent, ImageModule, InputCheckboxComponent, InputCheckboxModule, InputCheckboxMultiSelectComponent, InputCheckboxMultiSelectModule, InputComboBoxComponent, InputComboBoxModule, InputDatePickerComponent, InputDatePickerModule, InputListboxComponent, InputListboxModule, InputNumberPickerComponent, InputNumberPickerModule, InputRadioButtonComponent, InputRadioButtonModule, InputTextComponent, InputTextModule, InputTextareaComponent, InputTextareaModule, LevelIndicatorComponent, LevelIndicatorModule, MultiSelectListComponent, MultiSelectListModule, PopupButtonsComponent, PopupMessageDisplayComponent, PopupModule, PopupWindowShellComponent, PromptService, SimpleGridColumnDirective, SimpleGridComponent, SimpleGridModule, TextInputPopupComponent, TileComponent, TileModule, RippleModule as ɵa, MD_RIPPLE_GLOBAL_OPTIONS as ɵb, CoRippleDirective as ɵc, CoViewportRulerService as ɵd, CoScrollDispatcherService as ɵe, CoScrollableDirective as ɵf, StopClickModule as ɵg, StopClickDirective as ɵh, PriceDisplayPipeModule as ɵi, PriceDisplayPipe as ɵj, InputBoolean as ɵk, BaseModule as ɵl, FormInputUserModelChangeListenerService as ɵm, NgZoneWrapperService as ɵn, BaseInputComponent as ɵo, BaseSelectionGridComponent as ɵp, BaseInlineEditGridComponent as ɵq, BaseToolbarGridComponent as ɵr, BaseGridComponent as ɵs, AppendPipeModule as ɵt, AppendPipe as ɵu, ValidationErrorModule as ɵv, ValidationErrorComponent as ɵw, PopupShowerService as ɵx };
6985
7478
  //# sourceMappingURL=colijnit-corecomponents_v12.js.map