@colijnit/corecomponents_v12 12.0.15 → 12.0.18

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 (182) hide show
  1. package/bundles/colijnit-corecomponents_v12.umd.js +1099 -277
  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 +40 -20
  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.component.js +46 -48
  11. package/esm2015/lib/components/co-dialog/co-dialog.module.js +7 -4
  12. package/esm2015/lib/components/co-dialog-prompt/co-dialog-prompt.component.js +6 -6
  13. package/esm2015/lib/components/co-kanban/co-kanban.component.js +8 -7
  14. package/esm2015/lib/components/co-rich-text-editor/co-rich-text-editor.component.js +2 -2
  15. package/esm2015/lib/components/collapsible/collapsible.component.js +58 -0
  16. package/esm2015/lib/components/collapsible/collapsible.module.js +17 -0
  17. package/esm2015/lib/components/drop-down-list/drop-down-list.component.js +30 -8
  18. package/esm2015/lib/components/drop-down-list/drop-down.module.js +4 -2
  19. package/esm2015/lib/components/form/form.component.js +2 -21
  20. package/esm2015/lib/components/form/form.module.js +4 -4
  21. package/esm2015/lib/components/grid/base/base-grid.component.js +1 -1
  22. package/esm2015/lib/components/grid/base/base-selection-grid.component.js +1 -1
  23. package/esm2015/lib/components/grid/co-grid.component.js +2 -2
  24. package/esm2015/lib/components/input-checkbox/input-checkbox.component.js +15 -5
  25. package/esm2015/lib/components/input-checkbox-multi-select/input-checkbox-multi-select.component.js +6 -14
  26. package/esm2015/lib/components/input-combo-box/input-combo-box.component.js +24 -29
  27. package/esm2015/lib/components/input-date-picker/input-date-picker.component.js +10 -7
  28. package/esm2015/lib/components/input-listbox/input-listbox.component.js +87 -0
  29. package/esm2015/lib/components/input-listbox/input-listbox.module.js +25 -0
  30. package/esm2015/lib/components/input-number-picker/input-number-picker.component.js +55 -30
  31. package/esm2015/lib/components/input-number-picker/input-number-picker.module.js +5 -3
  32. package/esm2015/lib/components/input-radio-button/input-radio-button.component.js +13 -5
  33. package/esm2015/lib/components/input-text/input-text.component.js +22 -81
  34. package/esm2015/lib/components/input-text/input-text.module.js +16 -13
  35. package/esm2015/lib/components/input-textarea/input-textarea.component.js +62 -0
  36. package/esm2015/lib/components/input-textarea/input-textarea.module.js +23 -0
  37. package/esm2015/lib/components/multi-select-list/multi-select-list.component.js +37 -9
  38. package/esm2015/lib/components/multi-select-list/multi-select-list.module.js +4 -2
  39. package/esm2015/lib/components/pivot/co-pivot.component.js +2 -2
  40. package/esm2015/lib/components/simple-grid/simple-grid-column.directive.js +36 -0
  41. package/esm2015/lib/components/simple-grid/simple-grid.component.js +112 -0
  42. package/esm2015/lib/components/simple-grid/simple-grid.module.js +24 -0
  43. package/esm2015/lib/components/validation-error/validation-error.component.js +23 -0
  44. package/esm2015/lib/components/validation-error/validation-error.module.js +19 -0
  45. package/esm2015/public-api.js +13 -1
  46. package/fesm2015/colijnit-corecomponents_v12.js +1176 -337
  47. package/fesm2015/colijnit-corecomponents_v12.js.map +1 -1
  48. package/lib/components/base/base-input.component.d.ts +14 -9
  49. package/lib/components/button/style/_co-ripple.scss +69 -0
  50. package/lib/components/button/style/_layout.scss +7 -4
  51. package/lib/components/button/style/_material-definition.scss +1 -0
  52. package/lib/components/button/style/_theme.scss +2 -27
  53. package/lib/components/button/style/material.scss +18 -0
  54. package/lib/components/button-drop-down/style/_layout.scss +0 -2
  55. package/lib/components/button-drop-down/style/_theme.scss +0 -2
  56. package/lib/components/button-drop-down/style/material.scss +1 -0
  57. package/lib/components/carousel-3d/carousel-3d.component.d.ts +55 -0
  58. package/lib/components/carousel-3d/carousel-3d.module.d.ts +2 -0
  59. package/lib/components/carousel-3d/carouselItem.d.ts +13 -0
  60. package/lib/components/carousel-3d/style/_layout.scss +62 -0
  61. package/lib/components/carousel-3d/style/_material-definition.scss +6 -0
  62. package/lib/components/carousel-3d/style/_theme.scss +4 -0
  63. package/lib/components/carousel-3d/style/material.scss +5 -0
  64. package/lib/components/co-dialog/co-dialog.component.d.ts +6 -13
  65. package/lib/components/co-dialog/style/_layout.scss +44 -0
  66. package/lib/components/co-dialog/style/_material-definition.scss +23 -0
  67. package/lib/components/co-dialog/style/_theme.scss +24 -0
  68. package/lib/components/co-dialog/style/material.scss +5 -0
  69. package/lib/components/co-dialog-prompt/co-dialog-prompt.component.d.ts +2 -2
  70. package/lib/components/co-kanban/co-kanban.component.d.ts +1 -0
  71. package/lib/components/co-kanban/style/_layout.scss +48 -0
  72. package/lib/components/co-kanban/style/_material-definition.scss +25 -0
  73. package/lib/components/co-kanban/style/_theme.scss +3 -0
  74. package/lib/components/co-kanban/style/material.scss +14 -0
  75. package/lib/components/co-rich-text-editor/co-rich-text-editor.component.d.ts +1 -1
  76. package/lib/components/co-rich-text-editor/style/_layout.scss +0 -2
  77. package/lib/components/co-rich-text-editor/style/_theme.scss +0 -2
  78. package/lib/components/co-rich-text-editor/style/material.scss +1 -0
  79. package/lib/components/co-toggle/co-toggle.component.scss +1 -0
  80. package/lib/components/collapsible/collapsible.component.d.ts +16 -0
  81. package/lib/components/collapsible/collapsible.module.d.ts +2 -0
  82. package/lib/components/collapsible/style/_layout.scss +50 -0
  83. package/lib/components/collapsible/style/_material-definition.scss +9 -0
  84. package/lib/components/collapsible/style/_theme.scss +5 -0
  85. package/lib/components/collapsible/style/material.scss +5 -0
  86. package/lib/components/drop-down-list/drop-down-list.component.d.ts +12 -2
  87. package/lib/components/drop-down-list/style/_layout.scss +8 -3
  88. package/lib/components/drop-down-list/style/_theme.scss +0 -2
  89. package/lib/components/drop-down-list/style/material.scss +2 -0
  90. package/lib/components/form/form.component.d.ts +0 -1
  91. package/lib/components/grid/base/base-selection-grid.component.d.ts +1 -2
  92. package/lib/components/grid/co-grid.component.d.ts +1 -1
  93. package/lib/components/grid/style/_layout.scss +0 -2
  94. package/lib/components/grid/style/_theme.scss +0 -2
  95. package/lib/components/grid/style/material.scss +1 -0
  96. package/lib/components/input-checkbox/input-checkbox.component.d.ts +9 -2
  97. package/lib/components/input-checkbox/style/_layout.scss +0 -2
  98. package/lib/components/input-checkbox/style/_theme.scss +0 -2
  99. package/lib/components/input-checkbox/style/material.scss +1 -0
  100. package/lib/components/input-checkbox-multi-select/input-checkbox-multi-select.component.d.ts +4 -6
  101. package/lib/components/input-checkbox-multi-select/style/_layout.scss +0 -2
  102. package/lib/components/input-checkbox-multi-select/style/_theme.scss +0 -2
  103. package/lib/components/input-checkbox-multi-select/style/material.scss +1 -0
  104. package/lib/components/input-combo-box/input-combo-box.component.d.ts +6 -7
  105. package/lib/components/input-combo-box/style/_layout.scss +10 -3
  106. package/lib/components/input-combo-box/style/_material-definition.scss +0 -7
  107. package/lib/components/input-combo-box/style/_theme.scss +0 -2
  108. package/lib/components/input-combo-box/style/material.scss +9 -0
  109. package/lib/components/input-date-picker/input-date-picker.component.d.ts +4 -3
  110. package/lib/components/input-date-picker/style/_layout.scss +4 -3
  111. package/lib/components/input-date-picker/style/_theme.scss +0 -2
  112. package/lib/components/input-date-picker/style/material.scss +2 -0
  113. package/lib/components/input-listbox/input-listbox.component.d.ts +25 -0
  114. package/lib/components/input-listbox/input-listbox.module.d.ts +2 -0
  115. package/lib/components/input-listbox/style/_layout.scss +22 -0
  116. package/lib/components/input-listbox/style/_material-definition.scss +10 -0
  117. package/lib/components/input-listbox/style/_theme.scss +12 -0
  118. package/lib/components/input-listbox/style/material.scss +6 -0
  119. package/lib/components/input-number-picker/input-number-picker.component.d.ts +9 -5
  120. package/lib/components/input-number-picker/style/_layout.scss +41 -0
  121. package/lib/components/input-number-picker/style/_material-definition.scss +17 -0
  122. package/lib/components/input-number-picker/style/_theme.scss +20 -0
  123. package/lib/components/input-number-picker/style/material.scss +5 -0
  124. package/lib/components/input-radio-button/input-radio-button.component.d.ts +7 -2
  125. package/lib/components/input-radio-button/style/_layout.scss +0 -2
  126. package/lib/components/input-radio-button/style/_theme.scss +0 -2
  127. package/lib/components/input-radio-button/style/material.scss +1 -0
  128. package/lib/components/input-search/style/_layout.scss +39 -0
  129. package/lib/components/input-search/style/_material-definition.scss +6 -0
  130. package/lib/components/input-search/style/_theme.scss +6 -0
  131. package/lib/components/input-search/style/material.scss +5 -0
  132. package/lib/components/input-text/input-text.component.d.ts +6 -30
  133. package/lib/components/input-text/style/_layout.scss +14 -3
  134. package/lib/components/input-text/style/_material-definition.scss +4 -3
  135. package/lib/components/input-text/style/_theme.scss +0 -2
  136. package/lib/components/input-text/style/material.scss +3 -0
  137. package/lib/components/input-textarea/input-textarea.component.d.ts +18 -0
  138. package/lib/components/input-textarea/input-textarea.module.d.ts +2 -0
  139. package/lib/components/input-textarea/style/_layout.scss +20 -0
  140. package/lib/components/input-textarea/style/_material-definition.scss +4 -0
  141. package/lib/components/input-textarea/style/_theme.scss +8 -0
  142. package/lib/components/input-textarea/style/material.scss +7 -0
  143. package/lib/components/multi-select-list/multi-select-list.component.d.ts +13 -2
  144. package/lib/components/multi-select-list/style/_layout.scss +10 -3
  145. package/lib/components/multi-select-list/style/_theme.scss +0 -2
  146. package/lib/components/multi-select-list/style/material.scss +2 -0
  147. package/lib/components/pivot/co-pivot.component.d.ts +2 -2
  148. package/lib/components/pivot/style/_layout.scss +0 -2
  149. package/lib/components/pivot/style/_theme.scss +0 -2
  150. package/lib/components/pivot/style/material.scss +1 -0
  151. package/lib/components/simple-grid/simple-grid-column.directive.d.ts +18 -0
  152. package/lib/components/simple-grid/simple-grid.component.d.ts +26 -0
  153. package/lib/components/simple-grid/simple-grid.module.d.ts +2 -0
  154. package/lib/components/simple-grid/style/_layout.scss +78 -0
  155. package/lib/components/simple-grid/style/_material-definition.scss +16 -0
  156. package/lib/components/simple-grid/style/_theme.scss +15 -0
  157. package/lib/components/simple-grid/style/material.scss +5 -0
  158. package/lib/components/validation-error/style/_layout.scss +37 -0
  159. package/lib/components/validation-error/style/_material-definition.scss +9 -0
  160. package/lib/components/validation-error/style/_theme.scss +21 -0
  161. package/lib/components/validation-error/style/material.scss +5 -0
  162. package/lib/components/validation-error/validation-error.component.d.ts +4 -0
  163. package/lib/components/validation-error/validation-error.module.d.ts +2 -0
  164. package/lib/style/_input.mixins.scss +70 -281
  165. package/lib/style/_variables.scss +2 -0
  166. package/lib/style/material2/_core.scss +3 -3
  167. package/lib/style/material2/_material2-scss-barrel.scss +10 -10
  168. package/package.json +5 -2
  169. package/public-api.d.ts +12 -0
  170. package/esm2015/lib/core/enum/float-label-type.enum.js +0 -7
  171. package/esm2015/lib/core/enum/input-text-type.enum.js +0 -6
  172. package/esm2015/lib/core/model/numerical-range.js +0 -14
  173. package/lib/components/co-dialog/co-dialog.component.scss +0 -0
  174. package/lib/components/drop-down-list/drop-down-list.component.scss +0 -0
  175. package/lib/components/input-number-picker/input-number-picker.component.scss +0 -49
  176. package/lib/core/enum/float-label-type.enum.d.ts +0 -5
  177. package/lib/core/enum/input-text-type.enum.d.ts +0 -4
  178. package/lib/core/model/numerical-range.d.ts +0 -7
  179. package/lib/style/_extendables.scss +0 -32
  180. package/lib/style/_responsiveness.mixins.scss +0 -64
  181. package/lib/style/_responsiveness.scss +0 -4
  182. 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 } 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';
@@ -6,21 +6,27 @@ import { Subject, merge, fromEvent } from 'rxjs';
6
6
  import { auditTime } from 'rxjs/operators';
7
7
  import { __decorate, __awaiter } from 'tslib';
8
8
  import { DropDownButtonModule } from '@syncfusion/ej2-angular-splitbuttons';
9
+ import { trigger, state, style, transition, animate } from '@angular/animations';
10
+ import { BrowserAnimationsModule } from '@angular/platform-browser/animations';
9
11
  import { DialogModule } from '@syncfusion/ej2-angular-popups';
10
12
  import { KanbanModule } from '@syncfusion/ej2-angular-kanban';
11
13
  import { DayService, WeekService, WorkWeekService, MonthService, AgendaService, MonthAgendaService, TimelineViewsService, TimelineMonthService, ScheduleModule } from '@syncfusion/ej2-angular-schedule';
12
14
  import { SidebarModule } from '@syncfusion/ej2-angular-navigations';
13
15
  import { SwitchModule, CheckBoxModule, RadioButtonModule } from '@syncfusion/ej2-angular-buttons';
14
16
  import { FormsModule, NgModel, FormGroup } from '@angular/forms';
15
- import { CheckBoxSelectionService, DropDownListModule, MultiSelectModule, MultiSelectAllModule, ComboBoxAllModule } from '@syncfusion/ej2-angular-dropdowns';
17
+ import { CheckBoxSelectionService, DropDownListModule, MultiSelectModule, MultiSelectAllModule, ComboBoxAllModule, ListBoxComponent, CheckBoxSelection, ListBoxModule } from '@syncfusion/ej2-angular-dropdowns';
16
18
  import { RowDDService, GridModule, PageService, SortService, FilterService, GroupService, ReorderService, ResizeService, ExcelExportService, PdfExportService, EditService, ToolbarService, ColumnChooserService, ColumnMenuService, ContextMenuService } from '@syncfusion/ej2-angular-grids';
17
19
  import { enableRipple } from '@syncfusion/ej2-base';
18
20
  import { DatePickerModule } from '@syncfusion/ej2-angular-calendars';
19
- import { TextBoxComponent, TextBoxAllModule, NumericTextBoxModule } from '@syncfusion/ej2-angular-inputs';
21
+ import { TextBoxAllModule, NumericTextBoxModule } from '@syncfusion/ej2-angular-inputs';
20
22
  import { GroupingBarService, GroupingService, ToolbarService as ToolbarService$1, ConditionalFormattingService, FieldListService, NumberFormattingService, PivotViewModule } from '@syncfusion/ej2-angular-pivotview';
21
23
  import { OverlayConfig, Overlay } from '@angular/cdk/overlay';
22
24
  import { ComponentPortal } from '@angular/cdk/portal';
23
25
  import { ToolbarService as ToolbarService$2, LinkService, ImageService, HtmlEditorService, RichTextEditorModule } from '@syncfusion/ej2-angular-richtexteditor';
26
+ import { moveItemInArray, DragDropModule } from '@angular/cdk/drag-drop';
27
+ import { PlaneBufferGeometry, Mesh, Vector2, Vector3, PlaneGeometry, MeshPhongMaterial, SpotLight, PerspectiveCamera, Scene, Color, AmbientLight, Fog, WebGLRenderer, Box3 } from 'three';
28
+ import { CSS3DObject, CSS3DRenderer } from 'three/examples/jsm/renderers/CSS3DRenderer';
29
+ import * as TWEEN from '@tweenjs/tween.js';
24
30
 
25
31
  // @returns true iff given value equals null or equals undefined
26
32
  function isNill(value) {
@@ -2161,70 +2167,66 @@ ButtonDropDownModule.decorators = [
2161
2167
 
2162
2168
  class CoDialogComponent {
2163
2169
  constructor() {
2164
- this.targetElement = null;
2170
+ this.icons = CoreComponentsIcon;
2165
2171
  this.showCloseIcon = true;
2166
- this.width = "50%";
2167
- this.visible = false;
2168
- this.position = { X: 'center', Y: 'center' };
2169
- this.modal = true;
2172
+ this.modal = false;
2173
+ this.animation = true;
2170
2174
  this.closeClick = new EventEmitter();
2171
2175
  this.overlayClick = new EventEmitter();
2172
- this.onOverlayClick = () => {
2173
- this.coDialog.hide();
2174
- this.overlayClick.emit();
2175
- };
2176
- this.onCloseClick = () => {
2177
- this.coDialog.hide();
2178
- this.closeClick.emit();
2179
- };
2180
2176
  }
2181
- open() {
2182
- this.coDialog.show();
2177
+ showClass() {
2178
+ return true;
2183
2179
  }
2184
- close() {
2185
- this.coDialog.hide();
2180
+ handleOverlayClick(event) {
2181
+ if (!this.modal) {
2182
+ this.overlayClick.next(event);
2183
+ }
2186
2184
  }
2187
2185
  }
2188
2186
  CoDialogComponent.decorators = [
2189
2187
  { type: Component, args: [{
2190
2188
  selector: 'co-dialog',
2191
2189
  template: `
2192
- <ejs-dialog #template
2193
- [showCloseIcon]='showCloseIcon'
2194
- [target]='targetElement'
2195
- [width]='width'
2196
- [position]="position"
2197
- [isModal]="modal"
2198
- [visible]="visible"
2199
- (overlayClick)="onOverlayClick()"
2200
- (close)="onCloseClick()"
2201
- >
2202
- <ng-template #footerTemplate>
2203
- <ng-content select="[footer]"></ng-content>
2204
- </ng-template>
2205
- <ng-template #content>
2206
- <ng-content></ng-content>
2207
- </ng-template>
2208
- <ng-template #header>
2209
- <ng-content select="[header]"></ng-content>
2210
- </ng-template>
2211
- </ejs-dialog>
2190
+ <div class="co-dialog-overlay" (click)="handleOverlayClick($event)" [@showHideOverlay]="animation"></div>
2191
+ <div class="co-dialog-wrapper" [@showHideDialog]="animation">
2192
+ <div class="dialog-header">
2193
+ <ng-content select="[header]"></ng-content>
2194
+ <div class="dialog-close-button" *ngIf="showCloseIcon" (click)="closeClick.emit($event)">
2195
+ <co-icon [icon]="icons.Cancel"></co-icon>
2196
+ </div>
2197
+ </div>
2198
+ <div class="dialog-content">
2199
+ <ng-content></ng-content>
2200
+ </div>
2201
+ <div class="dialog-footer">
2202
+ <ng-content select="[footer]"></ng-content>
2203
+ </div>
2204
+ </div>
2212
2205
  `,
2213
- encapsulation: ViewEncapsulation.None,
2214
- styles: [""]
2206
+ animations: [
2207
+ trigger('showHideOverlay', [
2208
+ state('*', style({ opacity: 1 })),
2209
+ state('void', style({ opacity: 0 })),
2210
+ transition('void => *', animate(200)),
2211
+ transition('* => void', animate('200ms 200ms'))
2212
+ ]),
2213
+ trigger('showHideDialog', [
2214
+ state('*', style({ opacity: 1 })),
2215
+ state('void', style({ opacity: 0 })),
2216
+ transition('void => *', animate('200ms 200ms')),
2217
+ transition('* => void', animate(200))
2218
+ ])
2219
+ ],
2220
+ encapsulation: ViewEncapsulation.None
2215
2221
  },] }
2216
2222
  ];
2217
- CoDialogComponent.ctorParameters = () => [];
2218
2223
  CoDialogComponent.propDecorators = {
2219
- coDialog: [{ type: ViewChild, args: ['template',] }],
2220
- targetElement: [{ type: Input }],
2221
2224
  showCloseIcon: [{ type: Input }],
2222
- width: [{ type: Input }],
2223
- visible: [{ type: Input }],
2224
- position: [{ type: Input }],
2225
2225
  modal: [{ type: Input }],
2226
+ animation: [{ type: Input }],
2226
2227
  closeClick: [{ type: Output }],
2227
- overlayClick: [{ type: Output }]
2228
+ overlayClick: [{ type: Output }],
2229
+ showClass: [{ type: HostBinding, args: ["class.co-dialog",] }]
2228
2230
  };
2229
2231
 
2230
2232
  class CoDialogModule {
@@ -2232,10 +2234,11 @@ class CoDialogModule {
2232
2234
  CoDialogModule.decorators = [
2233
2235
  { type: NgModule, args: [{
2234
2236
  imports: [
2235
- DialogModule
2237
+ CommonModule,
2238
+ BrowserAnimationsModule,
2239
+ IconModule
2236
2240
  ],
2237
2241
  declarations: [CoDialogComponent],
2238
- providers: [],
2239
2242
  exports: [CoDialogComponent]
2240
2243
  },] }
2241
2244
  ];
@@ -2273,11 +2276,11 @@ CoDialogPromptComponent.decorators = [
2273
2276
  selector: 'co-dialog-prompt',
2274
2277
  template: `
2275
2278
  <div #coDialogPromptRootContainer class='co-dialog-prompt-root-container'></div>
2276
- <ejs-dialog #coDialogPrompt
2277
- [buttons]="buttons"
2279
+ <ejs-dialog #coDialogPrompt
2280
+ [buttons]="buttons"
2278
2281
  [header]="header"
2279
- [content]="content"
2280
- [showCloseIcon]="showCloseIcon"
2282
+ [content]="content"
2283
+ [showCloseIcon]="showCloseIcon"
2281
2284
  [target]="target"
2282
2285
  [visible]="visible"
2283
2286
  [width]="width"
@@ -2325,14 +2328,14 @@ class CoKanbanComponent {
2325
2328
  this.dragStartEvent = new EventEmitter();
2326
2329
  this.dragStopEvent = new EventEmitter();
2327
2330
  }
2331
+ showClass() {
2332
+ return true;
2333
+ }
2328
2334
  ngOnInit() {
2329
2335
  }
2330
2336
  ngAfterViewInit() {
2331
2337
  if (this.columns) {
2332
- setTimeout(() => {
2333
- this.kanban.columns = this.columns;
2334
- this.kanban.refreshHeader();
2335
- }, 1000);
2338
+ this.kanban.columns = this.columns;
2336
2339
  }
2337
2340
  }
2338
2341
  dialogOpen(args) {
@@ -2394,7 +2397,8 @@ CoKanbanComponent.propDecorators = {
2394
2397
  cardClickEvent: [{ type: Output }],
2395
2398
  cardDoubleClickEvent: [{ type: Output }],
2396
2399
  dragStartEvent: [{ type: Output }],
2397
- dragStopEvent: [{ type: Output }]
2400
+ dragStopEvent: [{ type: Output }],
2401
+ showClass: [{ type: HostBinding, args: ["class.co-kanban",] }]
2398
2402
  };
2399
2403
  __decorate([
2400
2404
  InputBoolean()
@@ -2609,6 +2613,76 @@ CoToggleModule.decorators = [
2609
2613
  },] }
2610
2614
  ];
2611
2615
 
2616
+ class CollapsibleComponent {
2617
+ constructor(_elementRef) {
2618
+ this._elementRef = _elementRef;
2619
+ this.expandButtonLast = false;
2620
+ this.expanded = false;
2621
+ this.expandedChange = new EventEmitter();
2622
+ }
2623
+ showClass() {
2624
+ return true;
2625
+ }
2626
+ onHostClick(event) {
2627
+ }
2628
+ ngOnDestroy() {
2629
+ this._elementRef = undefined;
2630
+ }
2631
+ focus() {
2632
+ this._elementRef.nativeElement.focus();
2633
+ }
2634
+ changeExpanded() {
2635
+ this.expanded = !this.expanded;
2636
+ this.expandedChange.next(this.expanded);
2637
+ }
2638
+ }
2639
+ CollapsibleComponent.decorators = [
2640
+ { type: Component, args: [{
2641
+ selector: "co-collapsible",
2642
+ template: `
2643
+ <div class="collapsible-header" [class.end]="expandButtonLast" (click)="changeExpanded()">
2644
+ <div class="expand-icon-wrapper" [class.expanded]="expanded" *ngIf="!expandButtonLast">
2645
+ <co-icon class="expand-icon" [iconData]="iconData"></co-icon>
2646
+ </div>
2647
+ <div class="collapsible-title" [textContent]="headerTitle"></div>
2648
+ <div class="expand-icon-wrapper" [class.expanded]="expanded" *ngIf="expandButtonLast">
2649
+ <co-icon class="expand-icon" [iconData]="iconData"></co-icon>
2650
+ </div>
2651
+ </div>
2652
+ <div class="collapsible-content" *ngIf="expanded">
2653
+ <ng-content></ng-content>
2654
+ </div>
2655
+ `,
2656
+ changeDetection: ChangeDetectionStrategy.OnPush,
2657
+ encapsulation: ViewEncapsulation.None
2658
+ },] }
2659
+ ];
2660
+ CollapsibleComponent.ctorParameters = () => [
2661
+ { type: ElementRef }
2662
+ ];
2663
+ CollapsibleComponent.propDecorators = {
2664
+ headerTitle: [{ type: Input }],
2665
+ iconData: [{ type: Input }],
2666
+ expandButtonLast: [{ type: Input }],
2667
+ expanded: [{ type: Input }],
2668
+ expandedChange: [{ type: Output }],
2669
+ showClass: [{ type: HostBinding, args: ["class.co-collapsible",] }],
2670
+ onHostClick: [{ type: HostListener, args: ["click", ["$event"],] }]
2671
+ };
2672
+
2673
+ class CollapsibleModule {
2674
+ }
2675
+ CollapsibleModule.decorators = [
2676
+ { type: NgModule, args: [{
2677
+ imports: [
2678
+ CommonModule,
2679
+ IconModule
2680
+ ],
2681
+ declarations: [CollapsibleComponent],
2682
+ exports: [CollapsibleComponent]
2683
+ },] }
2684
+ ];
2685
+
2612
2686
  class FormInputUserModelChangeListenerService {
2613
2687
  constructor() {
2614
2688
  // Signal from input-field to change-listener user. Emits (or: should be emitted) each time the end-user has changed the state of a form input's model. Emits model as value.
@@ -2696,17 +2770,36 @@ function maxStringLengthValidator(length) {
2696
2770
  };
2697
2771
  }
2698
2772
 
2773
+ class ValidationErrorComponent {
2774
+ showClass() {
2775
+ return true;
2776
+ }
2777
+ }
2778
+ ValidationErrorComponent.decorators = [
2779
+ { type: Component, args: [{
2780
+ selector: "co-validation-error",
2781
+ template: `
2782
+ <div class="validation-error-content">
2783
+ <div class="validation-error-message" [textContent]="error"></div>
2784
+ </div>
2785
+ `,
2786
+ animations: [],
2787
+ encapsulation: ViewEncapsulation.None
2788
+ },] }
2789
+ ];
2790
+ ValidationErrorComponent.propDecorators = {
2791
+ error: [{ type: Input }],
2792
+ showClass: [{ type: HostBinding, args: ['class.co-validation-error',] }]
2793
+ };
2794
+
2699
2795
  /**
2700
2796
  * Abstract base class for all concrete form input components that contain a native <input> element. Provides common data and functionality, such as
2701
2797
  * adding self as a control to the parent form.
2702
2798
  */
2703
2799
  class BaseInputComponent {
2704
- constructor(changeDetector, formUserChangeListener,
2705
- // @Optional() protected speechInput?: SpeechInputService,
2706
- ngZoneWrapper,
2707
- // @Optional() protected tooltipManager?: AppTooltipDynamicManagerService,
2708
- elementRef) {
2800
+ constructor(changeDetector, componentFactoryResolver, formUserChangeListener, ngZoneWrapper, elementRef) {
2709
2801
  this.changeDetector = changeDetector;
2802
+ this.componentFactoryResolver = componentFactoryResolver;
2710
2803
  this.formUserChangeListener = formUserChangeListener;
2711
2804
  this.ngZoneWrapper = ngZoneWrapper;
2712
2805
  this.elementRef = elementRef;
@@ -2756,6 +2849,7 @@ class BaseInputComponent {
2756
2849
  }
2757
2850
  set model(value) {
2758
2851
  this._model = value;
2852
+ this._clearErrorComponent();
2759
2853
  }
2760
2854
  get model() {
2761
2855
  return this._model;
@@ -2866,7 +2960,6 @@ class BaseInputComponent {
2866
2960
  return this._myFormInputInstance;
2867
2961
  }
2868
2962
  get formSubmitted() {
2869
- return true;
2870
2963
  return this.formComponent && this.formComponent.submitted;
2871
2964
  }
2872
2965
  get hasNoLabel() {
@@ -2908,6 +3001,16 @@ class BaseInputComponent {
2908
3001
  get isDestroyed() {
2909
3002
  return this._destroyed;
2910
3003
  }
3004
+ showValidationError(error) {
3005
+ if (this.validationErrorContainer) {
3006
+ if (this._errorValidationComponent) {
3007
+ this._clearErrorComponent();
3008
+ }
3009
+ const componentFactory = this.componentFactoryResolver.resolveComponentFactory(ValidationErrorComponent);
3010
+ this._errorValidationComponent = this.validationErrorContainer.createComponent(componentFactory);
3011
+ this._errorValidationComponent.instance.error = error;
3012
+ }
3013
+ }
2911
3014
  ngOnInit() {
2912
3015
  this._modelChangeSub = this.modelChange.subscribe((val) => {
2913
3016
  this.model = val;
@@ -2931,6 +3034,7 @@ class BaseInputComponent {
2931
3034
  }
2932
3035
  ngOnDestroy() {
2933
3036
  this._destroyed = true;
3037
+ this._clearErrorComponent();
2934
3038
  // if (this.tooltipManager && this.elementRef) {
2935
3039
  // this.tooltipManager.destroyErrorTooltipOfElement(this.elementRef.nativeElement);
2936
3040
  // }
@@ -3099,6 +3203,15 @@ class BaseInputComponent {
3099
3203
  this.control.updateValueAndValidity();
3100
3204
  }
3101
3205
  }
3206
+ _clearErrorComponent() {
3207
+ if (this.validationErrorContainer) {
3208
+ this.validationErrorContainer.clear();
3209
+ if (this._errorValidationComponent) {
3210
+ this._errorValidationComponent.destroy();
3211
+ this._errorValidationComponent = undefined;
3212
+ }
3213
+ }
3214
+ }
3102
3215
  // whether this.ngModel.control has safe access
3103
3216
  _controlExists() {
3104
3217
  return this.ngModel && !!this.control;
@@ -3167,11 +3280,13 @@ BaseInputComponent.decorators = [
3167
3280
  ];
3168
3281
  BaseInputComponent.ctorParameters = () => [
3169
3282
  { type: ChangeDetectorRef },
3283
+ { type: ComponentFactoryResolver },
3170
3284
  { type: FormInputUserModelChangeListenerService, decorators: [{ type: Optional }] },
3171
3285
  { type: NgZoneWrapperService, decorators: [{ type: Optional }] },
3172
3286
  { type: ElementRef, decorators: [{ type: Optional }] }
3173
3287
  ];
3174
3288
  BaseInputComponent.propDecorators = {
3289
+ validationErrorContainer: [{ type: ViewChild, args: ["validationError", { read: ViewContainerRef },] }],
3175
3290
  model: [{ type: Input }],
3176
3291
  label: [{ type: Input }],
3177
3292
  noValidation: [{ type: Input }],
@@ -3202,7 +3317,7 @@ BaseInputComponent.propDecorators = {
3202
3317
  userModelChange: [{ type: Output }],
3203
3318
  hiddenChange: [{ type: Output }],
3204
3319
  _ngModel: [{ type: ViewChild, args: [NgModel, { static: true },] }],
3205
- focused: [{ type: HostBinding, args: ["class.focused",] }],
3320
+ focused: [{ type: HostBinding, args: ["class.cc-input-focused",] }],
3206
3321
  formInput: [{ type: HostBinding, args: ["class.form-input",] }],
3207
3322
  customWidth: [{ type: Input }, { type: HostBinding, args: ["class.custom-width",] }],
3208
3323
  noTriangleGraphic: [{ type: Input }],
@@ -3254,78 +3369,6 @@ __decorate([
3254
3369
  InputBoolean()
3255
3370
  ], BaseInputComponent.prototype, "noFormGroupControl", void 0);
3256
3371
 
3257
- class DropDownListComponent extends BaseInputComponent {
3258
- constructor() {
3259
- super(...arguments);
3260
- /**
3261
- * In the form { text: 'name', value: 'id' }
3262
- * Where 'text' is showing in the dropdown and 'id' used for the model binding
3263
- */
3264
- this.fields = {};
3265
- }
3266
- showClass() {
3267
- return true;
3268
- }
3269
- handleValueChanged(value) {
3270
- if (value !== this.model) {
3271
- this.modelChange.next(value);
3272
- }
3273
- }
3274
- }
3275
- DropDownListComponent.decorators = [
3276
- { type: Component, args: [{
3277
- selector: "co-drop-down-list",
3278
- template: `
3279
- <ejs-dropdownlist
3280
- [dataSource]="collection"
3281
- [value]="model"
3282
- [fields]="fields"
3283
- [placeholder]="placeHolder"
3284
- [cssClass]="'co-drop-down-list'"
3285
- [readonly]="readonly"
3286
- [itemTemplate]="itemTemplate"
3287
- [headerTemplate]="headerTemplate"
3288
- [valueTemplate]="valueTemplate"
3289
- (valueChange)="handleValueChanged($event)"
3290
- >
3291
- </ejs-dropdownlist>
3292
- `,
3293
- providers: [
3294
- CheckBoxSelectionService,
3295
- {
3296
- provide: COMPONENT_INTERFACE_NAME,
3297
- useExisting: forwardRef(() => DropDownListComponent)
3298
- }
3299
- ],
3300
- changeDetection: ChangeDetectionStrategy.OnPush,
3301
- encapsulation: ViewEncapsulation.None
3302
- },] }
3303
- ];
3304
- DropDownListComponent.propDecorators = {
3305
- collection: [{ type: Input }],
3306
- fields: [{ type: Input }],
3307
- placeHolder: [{ type: Input }],
3308
- itemTemplate: [{ type: Input }],
3309
- headerTemplate: [{ type: Input }],
3310
- valueTemplate: [{ type: Input }],
3311
- showClass: [{ type: HostBinding, args: ["class.co-drop-down-list",] }]
3312
- };
3313
-
3314
- class DropDownModule {
3315
- }
3316
- DropDownModule.decorators = [
3317
- { type: NgModule, args: [{
3318
- imports: [
3319
- BaseModule,
3320
- CommonModule,
3321
- DropDownListModule,
3322
- MultiSelectModule
3323
- ],
3324
- declarations: [DropDownListComponent],
3325
- exports: [DropDownListComponent]
3326
- },] }
3327
- ];
3328
-
3329
3372
  // Represents a positional model
3330
3373
  class ElementPosition {
3331
3374
  constructor(top, right, bottom, left) {
@@ -3565,33 +3608,15 @@ class FormComponent {
3565
3608
  for (const errorKey in this.formGroup.controls[controlKey].errors) {
3566
3609
  if (this.formGroup.controls[controlKey].errors.hasOwnProperty(errorKey)) {
3567
3610
  const error = this.formGroup.controls[controlKey].errors[errorKey];
3568
- const errorText = this._getValidationErrorText(error);
3569
- const controlElement = comp.elementRef.nativeElement;
3570
3611
  if (controlKey === key) {
3571
- // this._tooltipService.spawnErrorTooltip(controlElement, errorText, this.keepInView ? this.keepInView : undefined);
3612
+ comp.showValidationError(error);
3572
3613
  }
3573
- comp.redErrorBackground = true;
3574
3614
  }
3575
3615
  }
3576
3616
  }
3577
3617
  }
3578
3618
  }
3579
3619
  }
3580
- _getValidationErrorText(validationError) {
3581
- return "";
3582
- if (StringUtils.IsString(validationError)) {
3583
- // return this._dictionary.get(validationError);
3584
- }
3585
- else if (validationError.message) {
3586
- if (validationError.placeholder) {
3587
- // see e.g. maxStringLengthValidator, where we return this {message: string, placeholder: string} object shape as validation error obj
3588
- // return this._dictionary.get(validationError.message, true, validationError.placeholder);
3589
- }
3590
- else {
3591
- // return this._dictionary.get(validationError.message);
3592
- }
3593
- }
3594
- }
3595
3620
  _setFirstInvalidElementOnMaster() {
3596
3621
  const elements = Array.from(this._componentMap);
3597
3622
  const len = elements.length;
@@ -3627,6 +3652,98 @@ FormComponent.propDecorators = {
3627
3652
  onEnterKey: [{ type: HostListener, args: ['keyup.enter', ['$event'],] }]
3628
3653
  };
3629
3654
 
3655
+ class DropDownListComponent extends BaseInputComponent {
3656
+ constructor(formComponent, changeDetector, componentFactoryResolver, formUserChangeListener, ngZoneWrapper, elementRef) {
3657
+ super(changeDetector, componentFactoryResolver, formUserChangeListener, ngZoneWrapper, elementRef);
3658
+ this.formComponent = formComponent;
3659
+ this.changeDetector = changeDetector;
3660
+ this.componentFactoryResolver = componentFactoryResolver;
3661
+ this.formUserChangeListener = formUserChangeListener;
3662
+ this.ngZoneWrapper = ngZoneWrapper;
3663
+ this.elementRef = elementRef;
3664
+ /**
3665
+ * In the form { text: 'name', value: 'id' }
3666
+ * Where 'text' is showing in the dropdown and 'id' used for the model binding
3667
+ */
3668
+ this.fields = {};
3669
+ super._markAsOnPush();
3670
+ }
3671
+ showClass() {
3672
+ return true;
3673
+ }
3674
+ handleValueChanged(value) {
3675
+ if (value !== this.model) {
3676
+ this.modelChange.next(value);
3677
+ }
3678
+ }
3679
+ }
3680
+ DropDownListComponent.decorators = [
3681
+ { type: Component, args: [{
3682
+ selector: "co-drop-down-list",
3683
+ template: `
3684
+ <ejs-dropdownlist
3685
+ [dataSource]="collection"
3686
+ [value]="model"
3687
+ [fields]="fields"
3688
+ [placeholder]="placeholder"
3689
+ [readonly]="readonly"
3690
+ [itemTemplate]="itemTemplate"
3691
+ [headerTemplate]="headerTemplate"
3692
+ [valueTemplate]="valueTemplate"
3693
+ [ngModel]="model"
3694
+ (ngModelChange)="modelChange.emit($event)"
3695
+ (valueChange)="handleValueChanged($event)"
3696
+ showClearButton="true"
3697
+ floatLabelType="Auto"
3698
+ >
3699
+ </ejs-dropdownlist>
3700
+ <div class="required-indicator"></div>
3701
+ <ng-template #validationError></ng-template>
3702
+ `,
3703
+ providers: [
3704
+ CheckBoxSelectionService,
3705
+ {
3706
+ provide: COMPONENT_INTERFACE_NAME,
3707
+ useExisting: forwardRef(() => DropDownListComponent)
3708
+ }
3709
+ ],
3710
+ encapsulation: ViewEncapsulation.None
3711
+ },] }
3712
+ ];
3713
+ DropDownListComponent.ctorParameters = () => [
3714
+ { type: FormComponent, decorators: [{ type: Optional }] },
3715
+ { type: ChangeDetectorRef },
3716
+ { type: ComponentFactoryResolver },
3717
+ { type: FormInputUserModelChangeListenerService },
3718
+ { type: NgZoneWrapperService },
3719
+ { type: ElementRef }
3720
+ ];
3721
+ DropDownListComponent.propDecorators = {
3722
+ collection: [{ type: Input }],
3723
+ fields: [{ type: Input }],
3724
+ placeholder: [{ type: Input }],
3725
+ itemTemplate: [{ type: Input }],
3726
+ headerTemplate: [{ type: Input }],
3727
+ valueTemplate: [{ type: Input }],
3728
+ showClass: [{ type: HostBinding, args: ["class.co-drop-down-list",] }]
3729
+ };
3730
+
3731
+ class DropDownModule {
3732
+ }
3733
+ DropDownModule.decorators = [
3734
+ { type: NgModule, args: [{
3735
+ imports: [
3736
+ BaseModule,
3737
+ CommonModule,
3738
+ DropDownListModule,
3739
+ MultiSelectModule,
3740
+ FormsModule
3741
+ ],
3742
+ declarations: [DropDownListComponent],
3743
+ exports: [DropDownListComponent]
3744
+ },] }
3745
+ ];
3746
+
3630
3747
  class FormModule {
3631
3748
  }
3632
3749
  FormModule.decorators = [
@@ -4003,9 +4120,15 @@ CoGridModule.decorators = [
4003
4120
  ];
4004
4121
 
4005
4122
  class InputCheckboxComponent extends BaseInputComponent {
4006
- constructor(formComponent, changeDetector, formUserChangeListener, ngZoneWrapper) {
4007
- super(changeDetector, formUserChangeListener, ngZoneWrapper);
4123
+ constructor(formComponent, iconCacheService, changeDetector, componentFactoryResolver, formUserChangeListener, ngZoneWrapper, elementRef) {
4124
+ super(changeDetector, componentFactoryResolver, formUserChangeListener, ngZoneWrapper, elementRef);
4008
4125
  this.formComponent = formComponent;
4126
+ this.iconCacheService = iconCacheService;
4127
+ this.changeDetector = changeDetector;
4128
+ this.componentFactoryResolver = componentFactoryResolver;
4129
+ this.formUserChangeListener = formUserChangeListener;
4130
+ this.ngZoneWrapper = ngZoneWrapper;
4131
+ this.elementRef = elementRef;
4009
4132
  this.modelChange = new EventEmitter();
4010
4133
  }
4011
4134
  showClass() {
@@ -4042,9 +4165,12 @@ InputCheckboxComponent.decorators = [
4042
4165
  ];
4043
4166
  InputCheckboxComponent.ctorParameters = () => [
4044
4167
  { type: FormComponent, decorators: [{ type: Optional }] },
4168
+ { type: IconCacheService },
4045
4169
  { type: ChangeDetectorRef },
4170
+ { type: ComponentFactoryResolver },
4046
4171
  { type: FormInputUserModelChangeListenerService },
4047
- { type: NgZoneWrapperService }
4172
+ { type: NgZoneWrapperService },
4173
+ { type: ElementRef }
4048
4174
  ];
4049
4175
  InputCheckboxComponent.propDecorators = {
4050
4176
  name: [{ type: Input }],
@@ -4100,10 +4226,11 @@ AppendPipeModule.decorators = [
4100
4226
  ];
4101
4227
 
4102
4228
  class InputCheckboxMultiSelectComponent extends BaseInputComponent {
4103
- constructor(formComponent, changeDetector, formUserChangeListener, ngZoneWrapper, elementRef) {
4104
- super(changeDetector, formUserChangeListener, ngZoneWrapper, elementRef);
4229
+ constructor(formComponent, changeDetector, componentFactoryResolver, formUserChangeListener, ngZoneWrapper, elementRef) {
4230
+ super(changeDetector, componentFactoryResolver, formUserChangeListener, ngZoneWrapper, elementRef);
4105
4231
  this.formComponent = formComponent;
4106
4232
  this.changeDetector = changeDetector;
4233
+ this.componentFactoryResolver = componentFactoryResolver;
4107
4234
  this.formUserChangeListener = formUserChangeListener;
4108
4235
  this.ngZoneWrapper = ngZoneWrapper;
4109
4236
  this.elementRef = elementRef;
@@ -4112,16 +4239,6 @@ class InputCheckboxMultiSelectComponent extends BaseInputComponent {
4112
4239
  showClass() {
4113
4240
  return true;
4114
4241
  }
4115
- ngOnDestroy() {
4116
- this.elementRef = undefined;
4117
- super.ngOnDestroy();
4118
- }
4119
- ngOnInit() {
4120
- super.ngOnInit();
4121
- }
4122
- ngAfterViewInit() {
4123
- super.ngAfterViewInit();
4124
- }
4125
4242
  }
4126
4243
  InputCheckboxMultiSelectComponent.decorators = [
4127
4244
  { type: Component, args: [{
@@ -4148,6 +4265,7 @@ InputCheckboxMultiSelectComponent.decorators = [
4148
4265
  InputCheckboxMultiSelectComponent.ctorParameters = () => [
4149
4266
  { type: FormComponent, decorators: [{ type: Optional }] },
4150
4267
  { type: ChangeDetectorRef },
4268
+ { type: ComponentFactoryResolver },
4151
4269
  { type: FormInputUserModelChangeListenerService },
4152
4270
  { type: NgZoneWrapperService },
4153
4271
  { type: ElementRef }
@@ -4179,29 +4297,21 @@ InputCheckboxMultiSelectModule.decorators = [
4179
4297
  ];
4180
4298
 
4181
4299
  class InputComboBoxComponent extends BaseInputComponent {
4182
- constructor(formComponent, changeDetector, formUserChangeListener, ngZoneWrapper, elementRef) {
4183
- super(changeDetector, formUserChangeListener, ngZoneWrapper, elementRef);
4300
+ constructor(formComponent, changeDetector, componentFactoryResolver, formUserChangeListener, ngZoneWrapper, elementRef) {
4301
+ super(changeDetector, componentFactoryResolver, formUserChangeListener, ngZoneWrapper, elementRef);
4184
4302
  this.formComponent = formComponent;
4185
4303
  this.changeDetector = changeDetector;
4304
+ this.componentFactoryResolver = componentFactoryResolver;
4186
4305
  this.formUserChangeListener = formUserChangeListener;
4187
4306
  this.ngZoneWrapper = ngZoneWrapper;
4188
4307
  this.elementRef = elementRef;
4189
4308
  this.shopPopup = true;
4309
+ this.customHeight = true;
4190
4310
  super._markAsOnPush();
4191
4311
  }
4192
4312
  showClass() {
4193
4313
  return true;
4194
4314
  }
4195
- ngOnDestroy() {
4196
- this.elementRef = undefined;
4197
- super.ngOnDestroy();
4198
- }
4199
- ngOnInit() {
4200
- super.ngOnInit();
4201
- }
4202
- ngAfterViewInit() {
4203
- super.ngAfterViewInit();
4204
- }
4205
4315
  onFocus() {
4206
4316
  if (this.shopPopup && this.model === undefined) {
4207
4317
  this.combo.showPopup();
@@ -4212,41 +4322,44 @@ InputComboBoxComponent.decorators = [
4212
4322
  { type: Component, args: [{
4213
4323
  selector: "co-input-combo-box",
4214
4324
  template: `
4215
- <ejs-combobox #combo [dataSource]="source"
4216
- [fields]="fields"
4217
- [placeholder]="placeholder"
4218
- [autofill]="true"
4219
- [ngModel]="model"
4220
- (ngModelChange)="modelChange.emit($event)"
4221
- (focus)="onFocus()"
4222
- showClearButton="true"
4223
- floatLabelType="Auto"
4224
- >
4225
- </ejs-combobox>
4226
- `,
4325
+ <ejs-combobox #combo [dataSource]="collection"
4326
+ [fields]="fields"
4327
+ [placeholder]="placeholder"
4328
+ [autofill]="true"
4329
+ [ngModel]="model"
4330
+ (ngModelChange)="modelChange.emit($event)"
4331
+ (focus)="onFocus()"
4332
+ showClearButton="true"
4333
+ floatLabelType="Auto"
4334
+ >
4335
+ </ejs-combobox>
4336
+ <div class="required-indicator"></div>
4337
+ <ng-template #validationError></ng-template>
4338
+ `,
4227
4339
  providers: [{
4228
4340
  provide: COMPONENT_INTERFACE_NAME,
4229
4341
  useExisting: forwardRef(() => InputComboBoxComponent)
4230
4342
  }],
4231
- changeDetection: ChangeDetectionStrategy.OnPush,
4232
4343
  encapsulation: ViewEncapsulation.None
4233
4344
  },] }
4234
4345
  ];
4235
4346
  InputComboBoxComponent.ctorParameters = () => [
4236
4347
  { type: FormComponent, decorators: [{ type: Optional }] },
4237
4348
  { type: ChangeDetectorRef },
4349
+ { type: ComponentFactoryResolver },
4238
4350
  { type: FormInputUserModelChangeListenerService },
4239
4351
  { type: NgZoneWrapperService },
4240
4352
  { type: ElementRef }
4241
4353
  ];
4242
4354
  InputComboBoxComponent.propDecorators = {
4243
4355
  combo: [{ type: ViewChild, args: ["combo",] }],
4244
- source: [{ type: Input }],
4356
+ collection: [{ type: Input }],
4245
4357
  fields: [{ type: Input }],
4246
4358
  selected: [{ type: Input }],
4247
4359
  placeholder: [{ type: Input }],
4248
4360
  shopPopup: [{ type: Input }],
4249
- showClass: [{ type: HostBinding, args: ["class.co-input-combo-box",] }]
4361
+ showClass: [{ type: HostBinding, args: ["class.co-input-combo-box",] }],
4362
+ customHeight: [{ type: HostBinding, args: ["class.custom-height",] }]
4250
4363
  };
4251
4364
 
4252
4365
  class InputComboBoxModule {
@@ -4267,11 +4380,12 @@ InputComboBoxModule.decorators = [
4267
4380
  ];
4268
4381
 
4269
4382
  class InputDatePickerComponent extends BaseInputComponent {
4270
- constructor(iconCacheService, formComponent, changeDetector, formUserChangeListener, ngZoneWrapper, elementRef) {
4271
- super(changeDetector, formUserChangeListener, ngZoneWrapper, elementRef);
4272
- this.iconCacheService = iconCacheService;
4383
+ constructor(formComponent, iconCacheService, changeDetector, componentFactoryResolver, formUserChangeListener, ngZoneWrapper, elementRef) {
4384
+ super(changeDetector, componentFactoryResolver, formUserChangeListener, ngZoneWrapper, elementRef);
4273
4385
  this.formComponent = formComponent;
4386
+ this.iconCacheService = iconCacheService;
4274
4387
  this.changeDetector = changeDetector;
4388
+ this.componentFactoryResolver = componentFactoryResolver;
4275
4389
  this.formUserChangeListener = formUserChangeListener;
4276
4390
  this.ngZoneWrapper = ngZoneWrapper;
4277
4391
  this.elementRef = elementRef;
@@ -4326,18 +4440,20 @@ InputDatePickerComponent.decorators = [
4326
4440
  [ngModel]="model"
4327
4441
  (ngModelChange)="modelChange.emit($event)"
4328
4442
  ></ejs-datepicker>
4443
+ <div class="required-indicator"></div>
4444
+ <ng-template #validationError></ng-template>
4329
4445
  `,
4330
4446
  providers: [{
4331
4447
  provide: COMPONENT_INTERFACE_NAME, useExisting: forwardRef(() => InputDatePickerComponent)
4332
4448
  }],
4333
- changeDetection: ChangeDetectionStrategy.OnPush,
4334
4449
  encapsulation: ViewEncapsulation.None
4335
4450
  },] }
4336
4451
  ];
4337
4452
  InputDatePickerComponent.ctorParameters = () => [
4338
- { type: IconCacheService },
4339
4453
  { type: FormComponent, decorators: [{ type: Optional }] },
4454
+ { type: IconCacheService },
4340
4455
  { type: ChangeDetectorRef },
4456
+ { type: ComponentFactoryResolver },
4341
4457
  { type: FormInputUserModelChangeListenerService },
4342
4458
  { type: NgZoneWrapperService },
4343
4459
  { type: ElementRef }
@@ -4661,132 +4777,65 @@ const NUMBER_INPUTS_KEY_DOWN_WHITE_LIST = [
4661
4777
  KeyboardCode.NumpadNine
4662
4778
  ];
4663
4779
 
4664
- var InputTextType;
4665
- (function (InputTextType) {
4666
- InputTextType["Text"] = "text";
4667
- InputTextType["Email"] = "email";
4668
- })(InputTextType || (InputTextType = {}));
4669
-
4670
- var FloatLabelTypeEnum;
4671
- (function (FloatLabelTypeEnum) {
4672
- FloatLabelTypeEnum["Never"] = "Never";
4673
- FloatLabelTypeEnum["Always"] = "Always";
4674
- FloatLabelTypeEnum["Auto"] = "Auto";
4675
- })(FloatLabelTypeEnum || (FloatLabelTypeEnum = {}));
4676
-
4677
4780
  class InputTextComponent extends BaseInputComponent {
4678
- constructor(formComponent, changeDetector, formUserChangeListener, ngZoneWrapper, elementRef) {
4679
- super(changeDetector, formUserChangeListener, ngZoneWrapper, elementRef);
4781
+ constructor(formComponent, changeDetector, componentFactoryResolver, formUserChangeListener, ngZoneWrapper, elementRef) {
4782
+ super(changeDetector, componentFactoryResolver, formUserChangeListener, ngZoneWrapper, elementRef);
4680
4783
  this.formComponent = formComponent;
4681
4784
  this.changeDetector = changeDetector;
4785
+ this.componentFactoryResolver = componentFactoryResolver;
4682
4786
  this.formUserChangeListener = formUserChangeListener;
4683
4787
  this.ngZoneWrapper = ngZoneWrapper;
4684
4788
  this.elementRef = elementRef;
4685
- this.floatLabelType = FloatLabelTypeEnum.Auto;
4789
+ this.Icons = CoreComponentsIcon;
4686
4790
  this.placeholder = "";
4687
4791
  this.type = "text";
4688
4792
  this.showClearButton = undefined;
4689
- this.alwaysShowClearIcon = false;
4690
- this.alwaysShowClearIconOnFocus = false;
4691
- this.noEmailValidation = false;
4692
- this.extraIconOnFocusOnly = false;
4693
- this.inputType = InputTextType.Text;
4694
- this.blur = new EventEmitter();
4695
- this.inputClick = new EventEmitter();
4696
- this.extraIconClick = new EventEmitter();
4697
- this.clearIconClick = new EventEmitter();
4698
- this.validEmailClick = false;
4699
- this.Icons = CoreComponentsIcon;
4793
+ this.hasOwnLabel = true;
4700
4794
  super._markAsOnPush();
4701
4795
  }
4702
4796
  showClass() {
4703
4797
  return true;
4704
4798
  }
4705
- ngOnDestroy() {
4706
- this.elementRef = undefined;
4707
- super.ngOnDestroy();
4708
- }
4709
- ngOnInit() {
4710
- super.ngOnInit();
4711
- }
4712
- ngAfterViewInit() {
4713
- if (this.textBox) {
4714
- this.changeDetector.detectChanges();
4715
- }
4716
- super.ngAfterViewInit();
4717
- }
4718
- setSelectionRange(range) {
4719
- if (range && this.input) {
4720
- this.input.setSelectionRange(range.lowerBound, range.upperBound);
4721
- }
4722
- }
4723
4799
  }
4724
4800
  InputTextComponent.decorators = [
4725
4801
  { type: Component, args: [{
4726
- selector: "co-input-text, co-input-email, co-input-wizard",
4802
+ selector: "co-input-text",
4727
4803
  template: `
4728
- <ejs-textbox [floatLabelType]="floatLabelType"
4729
- [placeholder]="placeholder"
4730
- [type]="type"
4731
- [readonly]="readonly"
4732
- [ngModel]="model"
4733
- [cssClass]="cssClass"
4734
- (ngModelChange)="modelChange.emit($event)"
4735
- [showClearButton]="showClearButton"
4736
- (blur)="this.blur.emit()"
4737
- (input)="this.inputClick.emit()"
4738
- ></ejs-textbox>
4739
- <ng-content></ng-content>
4804
+ <label [textContent]="placeholder"></label>
4805
+ <input [type]="type"
4806
+ [ngModel]="model"
4807
+ [readonly]="readonly"
4808
+ [required]="required"
4809
+ (ngModelChange)="modelChange.emit($event)"
4810
+ (focus)="focused = true"
4811
+ (blur)="focused = false"
4812
+ >
4813
+ <div class="required-indicator"></div>
4814
+ <ng-template #validationError></ng-template>
4740
4815
  `,
4741
4816
  providers: [{
4742
4817
  provide: COMPONENT_INTERFACE_NAME,
4743
4818
  useExisting: forwardRef(() => InputTextComponent)
4744
4819
  }],
4745
- changeDetection: ChangeDetectionStrategy.OnPush,
4746
4820
  encapsulation: ViewEncapsulation.None
4747
4821
  },] }
4748
4822
  ];
4749
4823
  InputTextComponent.ctorParameters = () => [
4750
4824
  { type: FormComponent, decorators: [{ type: Optional }] },
4751
4825
  { type: ChangeDetectorRef },
4826
+ { type: ComponentFactoryResolver },
4752
4827
  { type: FormInputUserModelChangeListenerService },
4753
4828
  { type: NgZoneWrapperService },
4754
4829
  { type: ElementRef }
4755
4830
  ];
4756
4831
  InputTextComponent.propDecorators = {
4757
- textBox: [{ type: ViewChild, args: [TextBoxComponent,] }],
4758
- floatLabelType: [{ type: Input }],
4759
4832
  placeholder: [{ type: Input }],
4760
4833
  type: [{ type: Input }],
4761
4834
  showClearButton: [{ type: Input }],
4762
- cssClass: [{ type: Input }],
4763
- alwaysShowClearIcon: [{ type: Input }],
4764
- alwaysShowClearIconOnFocus: [{ type: Input }],
4765
- noEmailValidation: [{ type: Input }],
4766
- extraIcon: [{ type: Input }],
4767
- extraIconOnFocusOnly: [{ type: Input }],
4768
4835
  keyDownWhiteList: [{ type: Input }],
4769
- extraIconClass: [{ type: Input }],
4770
- inputType: [{ type: Input }],
4771
- ngModelOptions: [{ type: Input }],
4772
- blur: [{ type: Output }],
4773
- inputClick: [{ type: Output }],
4774
- extraIconClick: [{ type: Output }],
4775
- clearIconClick: [{ type: Output }],
4776
- showClass: [{ type: HostBinding, args: ["class.co-input-text",] }]
4777
- };
4778
- __decorate([
4779
- InputBoolean()
4780
- ], InputTextComponent.prototype, "alwaysShowClearIcon", void 0);
4781
- __decorate([
4782
- InputBoolean()
4783
- ], InputTextComponent.prototype, "alwaysShowClearIconOnFocus", void 0);
4784
- __decorate([
4785
- InputBoolean()
4786
- ], InputTextComponent.prototype, "noEmailValidation", void 0);
4787
- __decorate([
4788
- InputBoolean()
4789
- ], InputTextComponent.prototype, "extraIconOnFocusOnly", void 0);
4836
+ showClass: [{ type: HostBinding, args: ["class.co-input-text",] }],
4837
+ hasOwnLabel: [{ type: HostBinding, args: ["class.has-own-label",] }]
4838
+ };
4790
4839
 
4791
4840
  // Input values for 'buttonShowMode' of NumberPickerComponent.
4792
4841
  var InputNumberPickerButtonShowMode;
@@ -4798,12 +4847,12 @@ var InputNumberPickerButtonShowMode;
4798
4847
 
4799
4848
  // A component that lets users pick a number by increasing and decreasing it with buttons, or by typing.
4800
4849
  class InputNumberPickerComponent extends BaseInputComponent {
4801
- constructor(iconCacheService, _ngZone, changeDetector, formUserChangeListener) {
4802
- super(changeDetector, formUserChangeListener);
4850
+ constructor(formComponent, iconCacheService, _ngZone, componentFactoryResolver, changeDetector, formUserChangeListener) {
4851
+ super(changeDetector, componentFactoryResolver, formUserChangeListener);
4852
+ this.formComponent = formComponent;
4803
4853
  this.iconCacheService = iconCacheService;
4804
4854
  this._ngZone = _ngZone;
4805
- this.floatLabelType = FloatLabelTypeEnum.Never;
4806
- this.cssClass = "e-outline";
4855
+ this.componentFactoryResolver = componentFactoryResolver;
4807
4856
  this.minusIcon = CoreComponentsIcon.MinusSimple;
4808
4857
  this.plusIcon = CoreComponentsIcon.PlusSimple;
4809
4858
  // Whether to show buttons 'always', 'onFocusOnly', or 'never'
@@ -4814,6 +4863,8 @@ class InputNumberPickerComponent extends BaseInputComponent {
4814
4863
  this.modelChange = new EventEmitter();
4815
4864
  this.myKeyDownWhiteList = NUMBER_INPUTS_KEY_DOWN_WHITE_LIST;
4816
4865
  this.numberLogic = new BoundsConstrainedNumberValue();
4866
+ this.minSelected = false;
4867
+ this.plusSelected = false;
4817
4868
  this._numberInputHasFocus = false;
4818
4869
  this._delayBeforeStartAutoCountMs = 666;
4819
4870
  // the 'speed gears' for auto counting
@@ -4862,6 +4913,9 @@ class InputNumberPickerComponent extends BaseInputComponent {
4862
4913
  get hasLabel() {
4863
4914
  return !!this.label;
4864
4915
  }
4916
+ showClass() {
4917
+ return true;
4918
+ }
4865
4919
  ngOnInit() {
4866
4920
  this.numberLogic.init(true);
4867
4921
  this._updateButtonsShowState();
@@ -4885,6 +4939,12 @@ class InputNumberPickerComponent extends BaseInputComponent {
4885
4939
  }, this._msDoStep);
4886
4940
  });
4887
4941
  }
4942
+ handleKeyDown(event) {
4943
+ // event.preventDefault();
4944
+ if (this.myKeyDownWhiteList.find((k) => k === event.keyCode) === undefined) {
4945
+ return false;
4946
+ }
4947
+ }
4888
4948
  // Note: recursive through setTimeout().
4889
4949
  doDecrementAuto() {
4890
4950
  this._mayAutoCount = true;
@@ -4899,6 +4959,8 @@ class InputNumberPickerComponent extends BaseInputComponent {
4899
4959
  });
4900
4960
  }
4901
4961
  stopAutoCounting() {
4962
+ this.minSelected = false;
4963
+ this.plusSelected = false;
4902
4964
  this._mayAutoCount = false;
4903
4965
  this._stepFactor = this._stepFactors[0];
4904
4966
  }
@@ -4913,6 +4975,11 @@ class InputNumberPickerComponent extends BaseInputComponent {
4913
4975
  this.numberLogic.decrement(steps);
4914
4976
  }
4915
4977
  onPlusMouseDown(event) {
4978
+ if (this.readonly) {
4979
+ event.preventDefault();
4980
+ return;
4981
+ }
4982
+ this.plusSelected = true;
4916
4983
  this._markedAsUserTouched = true;
4917
4984
  // keeps focus on input text instead of button
4918
4985
  event.preventDefault();
@@ -4927,6 +4994,11 @@ class InputNumberPickerComponent extends BaseInputComponent {
4927
4994
  }, this._delayBeforeStartAutoCountMs);
4928
4995
  }
4929
4996
  onMinusMouseDown(event) {
4997
+ if (this.readonly) {
4998
+ event.preventDefault();
4999
+ return;
5000
+ }
5001
+ this.minSelected = true;
4930
5002
  this._markedAsUserTouched = true;
4931
5003
  // keeps focus on input text instead of button
4932
5004
  event.preventDefault();
@@ -4987,42 +5059,43 @@ InputNumberPickerComponent.decorators = [
4987
5059
  { type: Component, args: [{
4988
5060
  selector: 'co-input-number-picker',
4989
5061
  template: `
4990
- <co-button *ngIf="showButtons" class="plus-operator" [iconData]="iconCacheService.getIcon(plusIcon)" (mousedown)="onPlusMouseDown($event)"
4991
- (mouseup)="stopAutoCounting()" (mouseleave)="stopAutoCounting()"></co-button>
4992
- <co-input-text
4993
- [floatLabelType]="floatLabelType"
4994
- [readonly]="readonly"
4995
- [disabled]="disabled"
4996
- [required]="required"
4997
- [noValidation]="noValidation"
4998
- [model]="numberLogic.valueAsSting"
4999
- [cssClass]="cssClass"
5000
- [ngModelOptions]="ngModelOptions"
5001
- [keyDownWhiteList]="myKeyDownWhiteList"
5002
- (focus)="onNumberInputFocus()"
5003
- (blur)="onNumberInputBlur()"
5004
- ></co-input-text>
5005
-
5006
- <co-button *ngIf="showButtons" class="minus-operator" [iconData]="iconCacheService.getIcon(minusIcon)" (mousedown)="onMinusMouseDown($event)"
5007
- (mouseup)="stopAutoCounting()" (mouseleave)="stopAutoCounting()"></co-button>
5062
+ <div class="button-wrapper">
5063
+ <co-button *ngIf="showButtons" class="minus-operator circle" [class.select]="minSelected"
5064
+ [disabled]="readonly"
5065
+ [iconData]="iconCacheService.getIcon(minusIcon)"
5066
+ (mousedown)="onMinusMouseDown($event)"
5067
+ (mouseup)="stopAutoCounting()" (mouseleave)="stopAutoCounting()"></co-button>
5068
+ </div>
5069
+ <input type="text"
5070
+ [ngModel]="numberLogic.valueAsSting"
5071
+ [readonly]="readonly"
5072
+ [disabled]="disabled"
5073
+ [required]="required"
5074
+ (keydown)="handleKeyDown($event)"/>
5075
+ <div class="button-wrapper">
5076
+ <co-button *ngIf="showButtons" class="plus-operator circle" [class.select]="plusSelected"
5077
+ [disabled]="readonly"
5078
+ [iconData]="iconCacheService.getIcon(plusIcon)"
5079
+ (mousedown)="onPlusMouseDown($event)"
5080
+ (mouseup)="stopAutoCounting()" (mouseleave)="stopAutoCounting()"></co-button>
5081
+ </div>
5008
5082
  `,
5009
- encapsulation: ViewEncapsulation.None,
5010
5083
  providers: [{
5011
5084
  provide: COMPONENT_INTERFACE_NAME, useExisting: forwardRef(() => InputNumberPickerComponent)
5012
5085
  }],
5013
5086
  changeDetection: ChangeDetectionStrategy.OnPush,
5014
- styles: ["@font-face{font-family:iOneOpenSans;font-style:normal;font-weight:400;src:url(data:application/font-woff2;charset=utf-8;base64,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) format(\"woff2\")}@font-face{font-family:iOneOpenSans;font-style:normal;font-weight:700;src:url(data:application/font-woff2;charset=utf-8;base64,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) format(\"woff2\")}:host{position:relative;display:flex;flex-direction:column;align-items:center!important;justify-content:center!important}:host.horizontal{display:flex;flex-direction:row-reverse}:host.show-buttons-on-focus-only co-button{position:relative;z-index:20;position:absolute!important;margin-left:auto}:host.show-buttons-on-focus-only co-button.plus-operator{top:-38px}:host.show-buttons-on-focus-only co-button.minus-operator{bottom:-38px}:host.has-label input-text ::ng-deep input{position:relative;bottom:2px;text-align:left}:host co-input-text{width:60px}:host co-button{font-size:22px;margin:5px;height:26px;padding:0}\n"]
5087
+ encapsulation: ViewEncapsulation.None
5015
5088
  },] }
5016
5089
  ];
5017
5090
  InputNumberPickerComponent.ctorParameters = () => [
5091
+ { type: FormComponent, decorators: [{ type: Optional }] },
5018
5092
  { type: IconCacheService, decorators: [{ type: Inject, args: [IconCacheService,] }] },
5019
5093
  { type: NgZone },
5094
+ { type: ComponentFactoryResolver },
5020
5095
  { type: ChangeDetectorRef },
5021
5096
  { type: FormInputUserModelChangeListenerService }
5022
5097
  ];
5023
5098
  InputNumberPickerComponent.propDecorators = {
5024
- floatLabelType: [{ type: Input }],
5025
- cssClass: [{ type: Input }],
5026
5099
  model: [{ type: Input }],
5027
5100
  min: [{ type: Input }],
5028
5101
  step: [{ type: Input }],
@@ -5036,12 +5109,29 @@ InputNumberPickerComponent.propDecorators = {
5036
5109
  modelChange: [{ type: Output }],
5037
5110
  inputTextComp: [{ type: ViewChild, args: [InputTextComponent, { static: true },] }],
5038
5111
  showButtonsOnFocusOnly: [{ type: HostBinding, args: ["class.show-buttons-on-focus-only",] }],
5039
- hasLabel: [{ type: HostBinding, args: ["class.has-label",] }]
5112
+ hasLabel: [{ type: HostBinding, args: ["class.has-label",] }],
5113
+ showClass: [{ type: HostBinding, args: ['class.co-input-number-picker',] }]
5040
5114
  };
5041
5115
  __decorate([
5042
5116
  InputBoolean()
5043
5117
  ], InputNumberPickerComponent.prototype, "noValidation", void 0);
5044
5118
 
5119
+ class ValidationErrorModule {
5120
+ }
5121
+ ValidationErrorModule.decorators = [
5122
+ { type: NgModule, args: [{
5123
+ imports: [
5124
+ CommonModule
5125
+ ],
5126
+ declarations: [
5127
+ ValidationErrorComponent
5128
+ ],
5129
+ exports: [
5130
+ ValidationErrorComponent
5131
+ ]
5132
+ },] }
5133
+ ];
5134
+
5045
5135
  class InputTextModule {
5046
5136
  }
5047
5137
  InputTextModule.decorators = [
@@ -5053,13 +5143,15 @@ InputTextModule.decorators = [
5053
5143
  IconModule,
5054
5144
  AppendPipeModule,
5055
5145
  TextBoxAllModule,
5056
- NumericTextBoxModule
5146
+ NumericTextBoxModule,
5147
+ ValidationErrorModule
5057
5148
  ],
5058
- schemas: [
5059
- NO_ERRORS_SCHEMA
5149
+ declarations: [
5150
+ InputTextComponent
5060
5151
  ],
5061
- declarations: [InputTextComponent],
5062
- exports: [InputTextComponent]
5152
+ exports: [
5153
+ InputTextComponent
5154
+ ]
5063
5155
  },] }
5064
5156
  ];
5065
5157
 
@@ -5069,6 +5161,7 @@ InputNumberPickerModule.decorators = [
5069
5161
  { type: NgModule, args: [{
5070
5162
  imports: [
5071
5163
  CommonModule,
5164
+ FormsModule,
5072
5165
  ButtonModule,
5073
5166
  InputTextModule
5074
5167
  ],
@@ -5078,9 +5171,15 @@ InputNumberPickerModule.decorators = [
5078
5171
  ];
5079
5172
 
5080
5173
  class InputRadioButtonComponent extends BaseInputComponent {
5081
- constructor(formComponent, changeDetector, formUserChangeListener, ngZoneWrapper) {
5082
- super(changeDetector, formUserChangeListener, ngZoneWrapper);
5174
+ constructor(formComponent, changeDetector, componentFactoryResolver, formUserChangeListener, ngZoneWrapper, elementRef) {
5175
+ super(changeDetector, componentFactoryResolver, formUserChangeListener, ngZoneWrapper, elementRef);
5083
5176
  this.formComponent = formComponent;
5177
+ this.changeDetector = changeDetector;
5178
+ this.componentFactoryResolver = componentFactoryResolver;
5179
+ this.formUserChangeListener = formUserChangeListener;
5180
+ this.ngZoneWrapper = ngZoneWrapper;
5181
+ this.elementRef = elementRef;
5182
+ super._markAsOnPush();
5084
5183
  }
5085
5184
  showClass() {
5086
5185
  return true;
@@ -5112,8 +5211,10 @@ InputRadioButtonComponent.decorators = [
5112
5211
  InputRadioButtonComponent.ctorParameters = () => [
5113
5212
  { type: FormComponent, decorators: [{ type: Optional }] },
5114
5213
  { type: ChangeDetectorRef },
5214
+ { type: ComponentFactoryResolver },
5115
5215
  { type: FormInputUserModelChangeListenerService },
5116
- { type: NgZoneWrapperService }
5216
+ { type: NgZoneWrapperService },
5217
+ { type: ElementRef }
5117
5218
  ];
5118
5219
  InputRadioButtonComponent.propDecorators = {
5119
5220
  value: [{ type: Input }],
@@ -5139,9 +5240,89 @@ InputRadioButtonModule.decorators = [
5139
5240
  },] }
5140
5241
  ];
5141
5242
 
5243
+ class InputTextareaComponent extends BaseInputComponent {
5244
+ constructor(formComponent, changeDetector, componentFactoryResolver, formUserChangeListener, ngZoneWrapper, elementRef) {
5245
+ super(changeDetector, componentFactoryResolver, formUserChangeListener, ngZoneWrapper, elementRef);
5246
+ this.formComponent = formComponent;
5247
+ this.changeDetector = changeDetector;
5248
+ this.componentFactoryResolver = componentFactoryResolver;
5249
+ this.formUserChangeListener = formUserChangeListener;
5250
+ this.ngZoneWrapper = ngZoneWrapper;
5251
+ this.elementRef = elementRef;
5252
+ this.placeholder = "";
5253
+ this.hasOwnLabel = true;
5254
+ this.customHeight = true;
5255
+ super._markAsOnPush();
5256
+ }
5257
+ showClass() {
5258
+ return true;
5259
+ }
5260
+ }
5261
+ InputTextareaComponent.decorators = [
5262
+ { type: Component, args: [{
5263
+ selector: "co-input-textarea",
5264
+ template: `
5265
+ <label [textContent]="placeholder"></label>
5266
+ <textarea type="textarea"
5267
+ [ngModel]="model"
5268
+ [readonly]="readonly"
5269
+ [required]="required"
5270
+ (ngModelChange)="modelChange.emit($event)"
5271
+ (focus)="focused = true"
5272
+ (blur)="focused = false"
5273
+ ></textarea>
5274
+ <div class="required-indicator"></div>
5275
+ <ng-template #validationError></ng-template>
5276
+ `,
5277
+ providers: [{
5278
+ provide: COMPONENT_INTERFACE_NAME,
5279
+ useExisting: forwardRef(() => InputTextareaComponent)
5280
+ }],
5281
+ encapsulation: ViewEncapsulation.None
5282
+ },] }
5283
+ ];
5284
+ InputTextareaComponent.ctorParameters = () => [
5285
+ { type: FormComponent, decorators: [{ type: Optional }] },
5286
+ { type: ChangeDetectorRef },
5287
+ { type: ComponentFactoryResolver },
5288
+ { type: FormInputUserModelChangeListenerService },
5289
+ { type: NgZoneWrapperService },
5290
+ { type: ElementRef }
5291
+ ];
5292
+ InputTextareaComponent.propDecorators = {
5293
+ placeholder: [{ type: Input }],
5294
+ showClass: [{ type: HostBinding, args: ["class.co-input-textarea",] }],
5295
+ hasOwnLabel: [{ type: HostBinding, args: ["class.has-own-label",] }],
5296
+ customHeight: [{ type: HostBinding, args: ['class.custom-height',] }]
5297
+ };
5298
+
5299
+ class InputTextareaModule {
5300
+ }
5301
+ InputTextareaModule.decorators = [
5302
+ { type: NgModule, args: [{
5303
+ imports: [
5304
+ CommonModule,
5305
+ FormsModule,
5306
+ ValidationErrorModule
5307
+ ],
5308
+ declarations: [
5309
+ InputTextareaComponent
5310
+ ],
5311
+ exports: [
5312
+ InputTextareaComponent
5313
+ ]
5314
+ },] }
5315
+ ];
5316
+
5142
5317
  class MultiSelectListComponent extends BaseInputComponent {
5143
- constructor() {
5144
- super(...arguments);
5318
+ constructor(formComponent, changeDetector, componentFactoryResolver, formUserChangeListener, ngZoneWrapper, elementRef) {
5319
+ super(changeDetector, componentFactoryResolver, formUserChangeListener, ngZoneWrapper, elementRef);
5320
+ this.formComponent = formComponent;
5321
+ this.changeDetector = changeDetector;
5322
+ this.componentFactoryResolver = componentFactoryResolver;
5323
+ this.formUserChangeListener = formUserChangeListener;
5324
+ this.ngZoneWrapper = ngZoneWrapper;
5325
+ this.elementRef = elementRef;
5145
5326
  /**
5146
5327
  * In the form { text: 'name', value: 'id' }
5147
5328
  * Where 'text' is showing in the dropdown and 'id' used for the model binding
@@ -5149,6 +5330,7 @@ class MultiSelectListComponent extends BaseInputComponent {
5149
5330
  this.fields = {};
5150
5331
  this.showSelectAll = true;
5151
5332
  this.mode = "Default";
5333
+ super._markAsOnPush();
5152
5334
  }
5153
5335
  set showCheckbox(value) {
5154
5336
  if (value) {
@@ -5158,6 +5340,14 @@ class MultiSelectListComponent extends BaseInputComponent {
5158
5340
  showClass() {
5159
5341
  return true;
5160
5342
  }
5343
+ handleModelChange(val) {
5344
+ if (Array.isArray(val)) {
5345
+ if (val.length < 1) {
5346
+ val = undefined;
5347
+ }
5348
+ }
5349
+ this.modelChange.next(val);
5350
+ }
5161
5351
  }
5162
5352
  MultiSelectListComponent.decorators = [
5163
5353
  { type: Component, args: [{
@@ -5165,10 +5355,9 @@ MultiSelectListComponent.decorators = [
5165
5355
  template: `
5166
5356
  <ejs-multiselect
5167
5357
  [dataSource]="collection"
5168
- [placeholder]="placeHolder"
5358
+ [placeholder]="placeholder"
5169
5359
  [value]="model"
5170
5360
  [mode]="mode"
5171
- [cssClass]="'co-multi-select-list'"
5172
5361
  [fields]="fields"
5173
5362
  [readonly]="readonly"
5174
5363
  [itemTemplate]="itemTemplate"
@@ -5177,8 +5366,12 @@ MultiSelectListComponent.decorators = [
5177
5366
  [footerTemplate]="footerTemplate"
5178
5367
  [selectAllText]="'Select All'"
5179
5368
  [showSelectAll]=showSelectAll
5180
- (valueChange)="modelChange.emit($event)"
5369
+ [ngModel]="model"
5370
+ (ngModelChange)="handleModelChange($event)"
5371
+ (valueChange)="handleModelChange($event)"
5181
5372
  ></ejs-multiselect>
5373
+ <div class="required-indicator"></div>
5374
+ <ng-template #validationError></ng-template>
5182
5375
  `,
5183
5376
  providers: [
5184
5377
  CheckBoxSelectionService,
@@ -5187,14 +5380,21 @@ MultiSelectListComponent.decorators = [
5187
5380
  useExisting: forwardRef(() => MultiSelectListComponent)
5188
5381
  }
5189
5382
  ],
5190
- changeDetection: ChangeDetectionStrategy.OnPush,
5191
5383
  encapsulation: ViewEncapsulation.None
5192
5384
  },] }
5193
5385
  ];
5386
+ MultiSelectListComponent.ctorParameters = () => [
5387
+ { type: FormComponent, decorators: [{ type: Optional }] },
5388
+ { type: ChangeDetectorRef },
5389
+ { type: ComponentFactoryResolver },
5390
+ { type: FormInputUserModelChangeListenerService },
5391
+ { type: NgZoneWrapperService },
5392
+ { type: ElementRef }
5393
+ ];
5194
5394
  MultiSelectListComponent.propDecorators = {
5195
5395
  collection: [{ type: Input }],
5196
5396
  fields: [{ type: Input }],
5197
- placeHolder: [{ type: Input }],
5397
+ placeholder: [{ type: Input }],
5198
5398
  itemTemplate: [{ type: Input }],
5199
5399
  headerTemplate: [{ type: Input }],
5200
5400
  valueTemplate: [{ type: Input }],
@@ -5211,7 +5411,8 @@ MultiSelectListModule.decorators = [
5211
5411
  imports: [
5212
5412
  BaseModule,
5213
5413
  CommonModule,
5214
- MultiSelectModule
5414
+ MultiSelectModule,
5415
+ FormsModule
5215
5416
  ],
5216
5417
  declarations: [MultiSelectListComponent],
5217
5418
  exports: [MultiSelectListComponent]
@@ -6629,6 +6830,644 @@ CoRichTextEditorModule.decorators = [
6629
6830
  },] }
6630
6831
  ];
6631
6832
 
6833
+ ListBoxComponent.Inject(CheckBoxSelection);
6834
+ class InputListboxComponent extends BaseInputComponent {
6835
+ constructor(formComponent, changeDetector, componentFactoryResolver, formUserChangeListener, ngZoneWrapper, elementRef) {
6836
+ super(changeDetector, componentFactoryResolver, formUserChangeListener, ngZoneWrapper, elementRef);
6837
+ this.formComponent = formComponent;
6838
+ this.changeDetector = changeDetector;
6839
+ this.componentFactoryResolver = componentFactoryResolver;
6840
+ this.formUserChangeListener = formUserChangeListener;
6841
+ this.ngZoneWrapper = ngZoneWrapper;
6842
+ this.elementRef = elementRef;
6843
+ // public set model(value: string[] | number[]) {
6844
+ // this._model = value;
6845
+ // }
6846
+ this.collection = [];
6847
+ this.customHeight = true;
6848
+ this.selectionSettings = { mode: 'Multiple' };
6849
+ super._markAsOnPush();
6850
+ }
6851
+ set singleSelect(value) {
6852
+ if (value) {
6853
+ this.selectionSettings.mode = 'Single';
6854
+ }
6855
+ }
6856
+ set showCheckbox(value) {
6857
+ if (value) {
6858
+ this.selectionSettings.showCheckbox = true;
6859
+ }
6860
+ }
6861
+ set showSelectAll(value) {
6862
+ if (value) {
6863
+ this.selectionSettings.showSelectAll = true;
6864
+ }
6865
+ }
6866
+ showClass() {
6867
+ return true;
6868
+ }
6869
+ }
6870
+ InputListboxComponent.decorators = [
6871
+ { type: Component, args: [{
6872
+ selector: 'co-input-listbox',
6873
+ template: `
6874
+ <div class="co-input-listbox-header" [textContent]="placeholder"></div>
6875
+ <div class="co-input-listbox-content">
6876
+ <ejs-listbox
6877
+ [ngModel]="value"
6878
+ [dataSource]="collection"
6879
+ [fields]="fields"
6880
+ [selectionSettings]="selectionSettings"
6881
+ (ngModelChange)="modelChange.emit($event)"
6882
+ ></ejs-listbox>
6883
+ </div>
6884
+ <div class="required-indicator"></div>
6885
+ <ng-template #validationError></ng-template>
6886
+ `,
6887
+ providers: [{
6888
+ provide: COMPONENT_INTERFACE_NAME, useExisting: forwardRef(() => InputListboxComponent)
6889
+ }],
6890
+ encapsulation: ViewEncapsulation.None
6891
+ },] }
6892
+ ];
6893
+ InputListboxComponent.ctorParameters = () => [
6894
+ { type: FormComponent, decorators: [{ type: Optional }] },
6895
+ { type: ChangeDetectorRef },
6896
+ { type: ComponentFactoryResolver },
6897
+ { type: FormInputUserModelChangeListenerService },
6898
+ { type: NgZoneWrapperService },
6899
+ { type: ElementRef }
6900
+ ];
6901
+ InputListboxComponent.propDecorators = {
6902
+ placeholder: [{ type: Input }],
6903
+ value: [{ type: Input }],
6904
+ collection: [{ type: Input }],
6905
+ fields: [{ type: Input }],
6906
+ singleSelect: [{ type: Input }],
6907
+ showCheckbox: [{ type: Input }],
6908
+ showSelectAll: [{ type: Input }],
6909
+ showClass: [{ type: HostBinding, args: ['class.co-input-listbox',] }],
6910
+ customHeight: [{ type: HostBinding, args: ['class.custom-height',] }]
6911
+ };
6912
+
6913
+ enableRipple(true);
6914
+ class InputListboxModule {
6915
+ }
6916
+ InputListboxModule.decorators = [
6917
+ { type: NgModule, args: [{
6918
+ imports: [
6919
+ CommonModule,
6920
+ FormsModule,
6921
+ ListBoxModule
6922
+ ],
6923
+ declarations: [
6924
+ InputListboxComponent
6925
+ ],
6926
+ exports: [
6927
+ InputListboxComponent
6928
+ ]
6929
+ },] }
6930
+ ];
6931
+
6932
+ var ColumnAlign;
6933
+ (function (ColumnAlign) {
6934
+ ColumnAlign["Left"] = "left-align";
6935
+ ColumnAlign["Center"] = "center-align";
6936
+ ColumnAlign["Right"] = "right-align";
6937
+ })(ColumnAlign || (ColumnAlign = {}));
6938
+ class SimpleGridColumnDirective {
6939
+ constructor() {
6940
+ this.resizable = true;
6941
+ }
6942
+ set template(template) {
6943
+ if (template) {
6944
+ this._template = template;
6945
+ }
6946
+ }
6947
+ get template() {
6948
+ return this._template;
6949
+ }
6950
+ }
6951
+ SimpleGridColumnDirective._MinManualResizeWidthPx = 50;
6952
+ SimpleGridColumnDirective.decorators = [
6953
+ { type: Directive, args: [{
6954
+ selector: "co-simple-grid-column"
6955
+ },] }
6956
+ ];
6957
+ SimpleGridColumnDirective.propDecorators = {
6958
+ template: [{ type: ContentChild, args: [TemplateRef,] }],
6959
+ headerText: [{ type: Input }],
6960
+ field: [{ type: Input }],
6961
+ textAlign: [{ type: Input }],
6962
+ format: [{ type: Input }],
6963
+ resizable: [{ type: Input }],
6964
+ width: [{ type: Input }]
6965
+ };
6966
+
6967
+ class SimpleGridComponent {
6968
+ constructor() {
6969
+ this.defaultTextAlign = ColumnAlign.Left;
6970
+ this.data = [];
6971
+ this.dragDropEnabled = false;
6972
+ /**
6973
+ * Should component emit drag and drop actions instead of handle
6974
+ * (update collection) by itself
6975
+ */
6976
+ this.emitDragDrop = false;
6977
+ this.onDrop = new EventEmitter();
6978
+ this.columns = [];
6979
+ }
6980
+ set content(columnComponents) {
6981
+ this.columns = columnComponents.toArray();
6982
+ }
6983
+ showClass() {
6984
+ return true;
6985
+ }
6986
+ handleMouseMove(event) {
6987
+ if (event.buttons === 1 && this._columnForResize) {
6988
+ if (!this._columnForResize.width) {
6989
+ const rect = event.target.parentElement.getBoundingClientRect();
6990
+ this._columnForResize.width = rect.width;
6991
+ }
6992
+ this._columnForResize.width += event.movementX;
6993
+ }
6994
+ }
6995
+ handleMouseUp(event) {
6996
+ this._columnForResize = undefined;
6997
+ }
6998
+ handleSizerMouseDown(event, column) {
6999
+ this._columnForResize = column;
7000
+ }
7001
+ handleCanDragDrop(drag, drop) {
7002
+ return true;
7003
+ }
7004
+ handleDrop(event) {
7005
+ try {
7006
+ const from = event.previousIndex;
7007
+ const to = event.currentIndex;
7008
+ if (from === to) {
7009
+ return;
7010
+ }
7011
+ if (this.emitDragDrop) {
7012
+ this.onDrop.next({ from: from, to: to });
7013
+ }
7014
+ else {
7015
+ moveItemInArray(this.data, from, to);
7016
+ }
7017
+ }
7018
+ catch (e) {
7019
+ console.error(e);
7020
+ }
7021
+ }
7022
+ }
7023
+ SimpleGridComponent.decorators = [
7024
+ { type: Component, args: [{
7025
+ selector: "co-simple-grid",
7026
+ template: `
7027
+ <div class="simple-grid-column-header-wrapper">
7028
+ <div class="simple-grid-column-header" *ngFor="let column of columns; let index = index"
7029
+ [style.min-width.px]="column.width" [style.max-width.px]="column.width">
7030
+ <div class="simple-grid-column-header-label" [ngClass]="column.textAlign ? column.textAlign : defaultTextAlign"
7031
+ [textContent]="column.headerText"
7032
+ ></div>
7033
+ <div *ngIf="column.resizable" class="simple-grid-column-sizer"
7034
+ (mousedown)="handleSizerMouseDown($event, column)"
7035
+ ></div>
7036
+ </div>
7037
+ </div>
7038
+ <div cdkDropListGroup class="drop-list-group">
7039
+ <div #dropList cdkDropList cdkDropListOrientation="vertical"
7040
+ class="simple-grid-drag-drop-list"
7041
+ [cdkDropListDisabled]="!dragDropEnabled"
7042
+ [cdkDropListData]="data"
7043
+ [cdkDropListEnterPredicate]="handleCanDragDrop"
7044
+ (cdkDropListDropped)="handleDrop($event)"
7045
+ >
7046
+ <div class="simple-grid-row" *ngFor="let row of data" cdkDrag>
7047
+ <div class="simple-grid-column-cell" *ngFor="let column of columns"
7048
+ [style.min-width.px]="column.width" [style.max-width.px]="column.width">
7049
+ <div class="simple-grid-column-cell-value" [ngClass]="column.textAlign ? column.textAlign : defaultTextAlign">
7050
+ <ng-container *ngIf="column.template">
7051
+ <ng-container [ngTemplateOutlet]="column.template" [ngTemplateOutletContext]="{value: row[column.field], row: row}"></ng-container>
7052
+ </ng-container>
7053
+ <div *ngIf="!column.template" [textContent]="row[column.field]"></div>
7054
+ </div>
7055
+ <div *ngIf="column.resizable" class="simple-grid-column-sizer-placeholder"></div>
7056
+ </div>
7057
+ </div>
7058
+ </div>
7059
+ </div>
7060
+ `,
7061
+ changeDetection: ChangeDetectionStrategy.OnPush,
7062
+ encapsulation: ViewEncapsulation.None
7063
+ },] }
7064
+ ];
7065
+ SimpleGridComponent.propDecorators = {
7066
+ content: [{ type: ContentChildren, args: [SimpleGridColumnDirective,] }],
7067
+ data: [{ type: Input }],
7068
+ dragDropEnabled: [{ type: Input }],
7069
+ emitDragDrop: [{ type: Input }],
7070
+ onDrop: [{ type: Output }],
7071
+ showClass: [{ type: HostBinding, args: ["class.co-simple-grid",] }],
7072
+ handleMouseMove: [{ type: HostListener, args: ['document:mousemove', ['$event'],] }],
7073
+ handleMouseUp: [{ type: HostListener, args: ['document:mouseup', ['$event'],] }]
7074
+ };
7075
+
7076
+ class SimpleGridModule {
7077
+ }
7078
+ SimpleGridModule.decorators = [
7079
+ { type: NgModule, args: [{
7080
+ imports: [
7081
+ CommonModule,
7082
+ DragDropModule
7083
+ ],
7084
+ declarations: [
7085
+ SimpleGridComponent,
7086
+ SimpleGridColumnDirective
7087
+ ],
7088
+ exports: [
7089
+ SimpleGridComponent,
7090
+ SimpleGridColumnDirective
7091
+ ]
7092
+ },] }
7093
+ ];
7094
+
7095
+ class CarouselItem {
7096
+ constructor(options, index, onClick) {
7097
+ var _a, _b;
7098
+ this._options = options || {};
7099
+ this.index = index;
7100
+ const width = ((_a = this._options.tileSize) === null || _a === void 0 ? void 0 : _a.x) || 0;
7101
+ const height = ((_b = this._options.tileSize) === null || _b === void 0 ? void 0 : _b.y) || 0;
7102
+ this._element = document.createElement('div');
7103
+ // this._element.style.backgroundColor = this._options.tileBackgroundColor;
7104
+ this._element.style.width = width + "px";
7105
+ this._element.style.height = height + "px";
7106
+ this._element.addEventListener("click", () => {
7107
+ if (onClick) {
7108
+ onClick(this.index);
7109
+ }
7110
+ }, false);
7111
+ this.object = new CSS3DObject(this._element);
7112
+ const geometry = new PlaneBufferGeometry(width, height);
7113
+ this.mesh = new Mesh(geometry, options.tileMaterial);
7114
+ this.mesh.castShadow = true;
7115
+ }
7116
+ setPosition(position) {
7117
+ if (this.mesh) {
7118
+ this.mesh.position.copy(position);
7119
+ }
7120
+ if (this.object) {
7121
+ this.object.position.copy(position);
7122
+ }
7123
+ }
7124
+ setContent(content) {
7125
+ if (this._element) {
7126
+ // remove any exising tile content before setting new content
7127
+ while (this._element.lastElementChild) {
7128
+ this._element.removeChild(this._element.lastElementChild);
7129
+ }
7130
+ try {
7131
+ this._element.appendChild(content);
7132
+ }
7133
+ catch (err) {
7134
+ }
7135
+ }
7136
+ }
7137
+ setVisible(visible) {
7138
+ if (this.mesh) {
7139
+ this.mesh.visible = visible;
7140
+ }
7141
+ if (this.object) {
7142
+ this.object.visible = visible;
7143
+ }
7144
+ }
7145
+ }
7146
+
7147
+ class Carousel3dComponent {
7148
+ constructor() {
7149
+ this.cameraHeight = 50;
7150
+ this.shadow = false;
7151
+ this.selectedIndex = 0;
7152
+ this.indexSelected = new EventEmitter();
7153
+ this._cameraZoom = 0;
7154
+ this._backgroundColor = 0xffffff;
7155
+ this._ambientLight = true;
7156
+ this._tileSize = new Vector2();
7157
+ this._tileMargin = 20;
7158
+ this._targetPositions = [];
7159
+ this._tileElements = [];
7160
+ this._tileOffset = 0;
7161
+ this._tiles3D = [];
7162
+ this._planeColor = 0xffffff;
7163
+ this._planeHeight = -46;
7164
+ this._spotLightPosition = new Vector3(0, 250, -200);
7165
+ this._fullCircle = false;
7166
+ this._initialized = false;
7167
+ this._elementsCreated = false;
7168
+ this.canNavigateLeft = false;
7169
+ this.canNavigateRight = false;
7170
+ }
7171
+ set children(children) {
7172
+ this._elementsCreated = false;
7173
+ this._tileElements = children.toArray();
7174
+ this._buildCarousel();
7175
+ }
7176
+ showClass() {
7177
+ return true;
7178
+ }
7179
+ ngAfterViewInit() {
7180
+ this._buildCarousel();
7181
+ }
7182
+ ngOnDestroy() {
7183
+ this.canvasContainer = undefined;
7184
+ this.carouselWrapper = undefined;
7185
+ this._clearScenes();
7186
+ }
7187
+ handleButtonLeftClick() {
7188
+ this._tileOffset -= 1;
7189
+ this._rotate(400);
7190
+ }
7191
+ handleButtonRightClick() {
7192
+ this._tileOffset += 1;
7193
+ this._rotate(400);
7194
+ }
7195
+ _buildCarousel() {
7196
+ if (!this._initialized) {
7197
+ this._init();
7198
+ }
7199
+ if (this._initialized && !this._elementsCreated) {
7200
+ this._createTiles();
7201
+ }
7202
+ this._checkNavigationButtons();
7203
+ }
7204
+ _init() {
7205
+ if (!this.canvasContainer || !this.canvasContainer.nativeElement) {
7206
+ return;
7207
+ }
7208
+ this._initCamera();
7209
+ this._initScene();
7210
+ this._initRenderer();
7211
+ if (this.shadow) {
7212
+ const geometry = new PlaneGeometry(10000, 10000);
7213
+ const material = new MeshPhongMaterial({ color: this._planeColor, shininess: 100 });
7214
+ const plane = new Mesh(geometry, material);
7215
+ plane.receiveShadow = true;
7216
+ plane.rotation.x = -Math.PI / 2;
7217
+ plane.position.y = this._planeHeight;
7218
+ this._scene.add(plane);
7219
+ const spotLight = new SpotLight(0xffffff, 0.5);
7220
+ spotLight.position.copy(this._spotLightPosition);
7221
+ spotLight.castShadow = true;
7222
+ spotLight.shadow.mapSize.width = 512;
7223
+ spotLight.shadow.mapSize.height = 512;
7224
+ spotLight.shadow.camera.near = 50;
7225
+ spotLight.shadow.camera.far = 1200;
7226
+ spotLight.shadow.camera.fov = 30;
7227
+ spotLight.penumbra = 1;
7228
+ this._scene.add(spotLight);
7229
+ }
7230
+ this.carouselWrapper.nativeElement.appendChild(this._rendererCss.domElement);
7231
+ this.canvasContainer.nativeElement.appendChild(this.carouselWrapper.nativeElement);
7232
+ this.canvasContainer.nativeElement.appendChild(this._renderer.domElement);
7233
+ this._render();
7234
+ this._animate();
7235
+ window.addEventListener("resize", () => {
7236
+ this._resizeCanvasToDisplaySize();
7237
+ }, false);
7238
+ this._initialized = true;
7239
+ }
7240
+ _initCamera() {
7241
+ this._camera = new PerspectiveCamera(50, this.canvasContainer.nativeElement.clientWidth / this.canvasContainer.nativeElement.clientHeight, 1, 10000);
7242
+ this._camera.position.z = 600 - this._cameraZoom;
7243
+ this._camera.position.y = this.cameraHeight;
7244
+ this._camera.lookAt(new Vector3());
7245
+ }
7246
+ _initScene() {
7247
+ this._sceneCss = new Scene();
7248
+ this._scene = new Scene();
7249
+ this._scene.background = new Color(this._backgroundColor);
7250
+ if (this._ambientLight) {
7251
+ const light = new AmbientLight(0xaaaaaa); // soft white light
7252
+ this._scene.add(light);
7253
+ this._scene.fog = new Fog(this._backgroundColor, 70, 2500);
7254
+ }
7255
+ }
7256
+ _initRenderer() {
7257
+ this._rendererCss = new CSS3DRenderer();
7258
+ this._rendererCss.setSize(this.canvasContainer.nativeElement.clientWidth, this.canvasContainer.nativeElement.clientHeight);
7259
+ this._rendererCss.domElement.style.position = "absolute";
7260
+ this._renderer = new WebGLRenderer({ antialias: true });
7261
+ this._renderer.setPixelRatio(window.devicePixelRatio);
7262
+ this._renderer.setSize(this.canvasContainer.nativeElement.clientWidth, this.canvasContainer.nativeElement.clientHeight);
7263
+ this._renderer.shadowMap.enabled = true;
7264
+ }
7265
+ _disposeObject(obj) {
7266
+ if (obj instanceof Mesh) {
7267
+ if (obj.geometry) {
7268
+ obj.geometry.dispose();
7269
+ }
7270
+ if (obj.material) {
7271
+ Array.isArray(obj.material) ? obj.material.map(m => m.dispose()) : obj.material.dispose();
7272
+ }
7273
+ obj = undefined;
7274
+ }
7275
+ else {
7276
+ obj.element = undefined;
7277
+ obj = undefined;
7278
+ }
7279
+ }
7280
+ _clearScenes() {
7281
+ const meshes = this._tiles3D.map(t => t.mesh);
7282
+ const cssObjs = this._tiles3D.map(t => t.object);
7283
+ this._scene.remove(...meshes);
7284
+ meshes.map(m => this._disposeObject(m));
7285
+ meshes.length = 0;
7286
+ this._sceneCss.remove(...cssObjs);
7287
+ cssObjs.map(o => this._disposeObject(o));
7288
+ cssObjs.length = 0;
7289
+ this._tiles3D.length = 0;
7290
+ this._targetPositions.length = 0;
7291
+ }
7292
+ _createTiles() {
7293
+ this._clearScenes();
7294
+ this._tileSize.x = this.tileWidth;
7295
+ this._tileSize.y = this.tileHeight;
7296
+ const tileWidth = this._tileSize.x + this._tileMargin;
7297
+ const numItems = Math.max(this._tileElements.length, 20);
7298
+ this._fullCircle = this._tileElements.length >= 20;
7299
+ let angleTileDeg = 360 / numItems;
7300
+ const circumference = numItems * tileWidth;
7301
+ const radius = circumference / (Math.PI * 2);
7302
+ const y = this.shadow ? 75 : 45;
7303
+ const len = numItems;
7304
+ let angleDeg = 90;
7305
+ const position = new Vector3();
7306
+ for (var i = 0; i < len; i++) {
7307
+ const angle = angleDeg * (Math.PI / 180); // Radians
7308
+ const x = radius * Math.cos(angle);
7309
+ const z = -radius + radius * Math.sin(angle);
7310
+ position.set(x, y, z);
7311
+ this._targetPositions.push(position.clone());
7312
+ if (i < this._tileElements.length) {
7313
+ const tile = new CarouselItem({ tileSize: this._tileSize }, i, (idx) => this._rotateTo(idx));
7314
+ tile.setPosition(position);
7315
+ tile.setContent(this._tileElements[i].nativeElement);
7316
+ this._scene.add(tile.mesh);
7317
+ this._sceneCss.add(tile.object);
7318
+ this._tiles3D.push(tile);
7319
+ }
7320
+ angleDeg = angleDeg - angleTileDeg; // CW instead of CCW
7321
+ }
7322
+ this._adjustCameraZoom();
7323
+ this._tileOffset = this.selectedIndex;
7324
+ this._rotate(0);
7325
+ this._render();
7326
+ }
7327
+ _adjustCameraZoom() {
7328
+ if (this._tiles3D.length === 0) {
7329
+ return;
7330
+ }
7331
+ const object = this._tiles3D[0].mesh;
7332
+ // offset = offset || 1.15;
7333
+ // get bounding box of object - this will be used to setup controls and camera
7334
+ const boundingBox = new Box3();
7335
+ boundingBox.setFromObject(object);
7336
+ const center = new Vector3();
7337
+ boundingBox.getCenter(center);
7338
+ const size = new Vector3();
7339
+ boundingBox.getSize(size);
7340
+ // get the max side of the bounding box (fits to width OR height as needed )
7341
+ const maxDim = Math.max(size.x, size.y, size.z);
7342
+ const fov = this._camera.fov * (Math.PI / 180);
7343
+ // let cameraZ = Math.abs(maxDim / 4 * Math.tan(fov * 200));
7344
+ let cameraZ = Math.abs((maxDim / 2) / Math.tan(fov / 2));
7345
+ // cameraZ *= offset; // zoom out a little so that objects don't fill the screen
7346
+ this._camera.position.z = cameraZ;
7347
+ this._camera.lookAt(center);
7348
+ }
7349
+ _checkNavigationButtons() {
7350
+ const currentIdx = this._getSelectedIndex();
7351
+ this.canNavigateLeft = (currentIdx > 0) || this._fullCircle;
7352
+ this.canNavigateRight = (currentIdx < this._tileElements.length - 1) || this._fullCircle;
7353
+ }
7354
+ _animate() {
7355
+ TWEEN.update();
7356
+ setTimeout(() => {
7357
+ this._renderer.setAnimationLoop(() => this._animate());
7358
+ }, 200);
7359
+ }
7360
+ _getSelectedIndex() {
7361
+ return Math.max(0, Math.min(this.selectedIndex, this._tileElements.length - 1));
7362
+ }
7363
+ _rotate(duration) {
7364
+ TWEEN.removeAll();
7365
+ for (let i = 0; i < this._tiles3D.length; i++) {
7366
+ const tile = this._tiles3D[i];
7367
+ if (Math.abs(this._tileOffset) > this._targetPositions.length) { // full circle
7368
+ this._tileOffset = this._tileOffset > 0 ? 1 : -1;
7369
+ }
7370
+ let positionIdx = i - this._tileOffset;
7371
+ if (positionIdx > this._targetPositions.length - 1) {
7372
+ positionIdx = positionIdx - this._targetPositions.length;
7373
+ }
7374
+ else if (positionIdx < 0) {
7375
+ positionIdx = this._targetPositions.length + positionIdx;
7376
+ }
7377
+ const target = this._targetPositions[positionIdx];
7378
+ new TWEEN.Tween(tile.object.position)
7379
+ .to(target, duration)
7380
+ .easing(TWEEN.Easing.Quartic.Out)
7381
+ .start();
7382
+ new TWEEN.Tween(tile.mesh.position)
7383
+ .to(target, duration)
7384
+ .easing(TWEEN.Easing.Quartic.Out)
7385
+ .start();
7386
+ }
7387
+ new TWEEN.Tween()
7388
+ .to({}, duration * 2)
7389
+ .onUpdate(() => {
7390
+ this._render();
7391
+ })
7392
+ .start();
7393
+ this.selectedIndex = this._tileOffset;
7394
+ this._checkNavigationButtons();
7395
+ this.indexSelected.next(this._getSelectedIndex());
7396
+ }
7397
+ _rotateTo(index) {
7398
+ const current = this._getSelectedIndex();
7399
+ this._tileOffset += index - current;
7400
+ this._rotate(800);
7401
+ }
7402
+ _resizeCanvasToDisplaySize() {
7403
+ this._camera.aspect = this.canvasContainer.nativeElement.clientWidth / this.canvasContainer.nativeElement.clientHeight;
7404
+ this._camera.updateProjectionMatrix();
7405
+ this._rendererCss.setSize(this.canvasContainer.nativeElement.clientWidth, this.canvasContainer.nativeElement.clientHeight);
7406
+ this._renderer.setSize(this.canvasContainer.nativeElement.clientWidth, this.canvasContainer.nativeElement.clientHeight);
7407
+ this._render();
7408
+ }
7409
+ _render() {
7410
+ this._rendererCss.render(this._sceneCss, this._camera);
7411
+ this._renderer.render(this._scene, this._camera);
7412
+ }
7413
+ }
7414
+ Carousel3dComponent.decorators = [
7415
+ { type: Component, args: [{
7416
+ selector: "co-carousel-3d",
7417
+ template: `
7418
+ <div class="carousel-3d-canvas-wrapper" #canvasContainer>
7419
+ <div class="carousel-wrapper" #carouselWrapper>
7420
+ <div class="carousel-navigate-button left">
7421
+ <div class="carousel-navigate-button-wrapper" *ngIf="canNavigateLeft" (click)="handleButtonLeftClick()">
7422
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 256 512">
7423
+ <path
7424
+ 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>
7425
+ </svg>
7426
+ </div>
7427
+ </div>
7428
+ <div class="carousel-navigate-button right">
7429
+ <div class="carousel-navigate-button-wrapper" *ngIf="canNavigateRight" (click)="handleButtonRightClick()">
7430
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 256 512">
7431
+ <path
7432
+ 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>
7433
+ </svg>
7434
+ </div>
7435
+ </div>
7436
+ </div>
7437
+ </div>
7438
+ `,
7439
+ encapsulation: ViewEncapsulation.None
7440
+ },] }
7441
+ ];
7442
+ Carousel3dComponent.propDecorators = {
7443
+ canvasContainer: [{ type: ViewChild, args: ["canvasContainer", { read: ElementRef },] }],
7444
+ carouselWrapper: [{ type: ViewChild, args: ["carouselWrapper", { read: ElementRef },] }],
7445
+ children: [{ type: ContentChildren, args: ["carouselItem", { read: ElementRef, descendants: true },] }],
7446
+ tileWidth: [{ type: Input }],
7447
+ tileHeight: [{ type: Input }],
7448
+ cameraHeight: [{ type: Input }],
7449
+ shadow: [{ type: Input }],
7450
+ selectedIndex: [{ type: Input }],
7451
+ indexSelected: [{ type: Output }],
7452
+ showClass: [{ type: HostBinding, args: ["class.co-carousel-3d",] }]
7453
+ };
7454
+
7455
+ class Carousel3dModule {
7456
+ }
7457
+ Carousel3dModule.decorators = [
7458
+ { type: NgModule, args: [{
7459
+ imports: [
7460
+ CommonModule
7461
+ ],
7462
+ declarations: [
7463
+ Carousel3dComponent
7464
+ ],
7465
+ exports: [
7466
+ Carousel3dComponent
7467
+ ]
7468
+ },] }
7469
+ ];
7470
+
6632
7471
  /*
6633
7472
  * Public API Surface of corecomponents
6634
7473
  */
@@ -6637,5 +7476,5 @@ CoRichTextEditorModule.decorators = [
6637
7476
  * Generated bundle index. Do not edit.
6638
7477
  */
6639
7478
 
6640
- 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, CoreComponentsIcon, DropDownListComponent, DropDownModule, FormComponent, FormModule, IconCacheService, IconComponent, IconModule, ImageComponent, ImageModule, InputCheckboxComponent, InputCheckboxModule, InputCheckboxMultiSelectComponent, InputCheckboxMultiSelectModule, InputComboBoxComponent, InputComboBoxModule, InputDatePickerComponent, InputDatePickerModule, InputNumberPickerComponent, InputNumberPickerModule, InputRadioButtonComponent, InputRadioButtonModule, InputTextComponent, InputTextModule, LevelIndicatorComponent, LevelIndicatorModule, MultiSelectListComponent, MultiSelectListModule, PopupButtonsComponent, PopupMessageDisplayComponent, PopupModule, PopupWindowShellComponent, PromptService, 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 };
7479
+ 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 };
6641
7480
  //# sourceMappingURL=colijnit-corecomponents_v12.js.map