@coolon/angular-ui-powerups 2.0.0-alpha.1 → 2.0.0-alpha.10

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 (152) hide show
  1. package/CHANGELOG.md +68 -0
  2. package/assets/form.scss +33 -0
  3. package/bundles/coolon-angular-ui-powerups.umd.js +418 -233
  4. package/bundles/coolon-angular-ui-powerups.umd.js.map +1 -1
  5. package/bundles/coolon-angular-ui-powerups.umd.min.js +2 -2
  6. package/bundles/coolon-angular-ui-powerups.umd.min.js.map +1 -1
  7. package/coolon-angular-ui-powerups.d.ts +55 -54
  8. package/coolon-angular-ui-powerups.metadata.json +1 -1
  9. package/esm2015/coolon-angular-ui-powerups.js +53 -52
  10. package/esm2015/coolon-angular-ui-powerups.js.map +1 -1
  11. package/esm2015/coolon-angular-ui-powerups.metadata.json +1 -1
  12. package/esm2015/lib/angular-ui-powerups.module.ngfactory.js.map +1 -1
  13. package/esm2015/lib/components/card-container/card-container.component.js +1 -1
  14. package/esm2015/lib/components/card-container/card-container.component.metadata.json +1 -1
  15. package/esm2015/lib/components/components.module.js +29 -12
  16. package/esm2015/lib/components/components.module.js.map +1 -1
  17. package/esm2015/lib/components/components.module.metadata.json +1 -1
  18. package/esm2015/lib/components/components.module.ngfactory.js.map +1 -1
  19. package/esm2015/lib/components/forms/abstract-input.component.js +14 -2
  20. package/esm2015/lib/components/forms/abstract-input.component.js.map +1 -1
  21. package/esm2015/lib/components/forms/abstract-input.component.metadata.json +1 -1
  22. package/esm2015/lib/components/forms/abstract-list-input.component.js +37 -5
  23. package/esm2015/lib/components/forms/abstract-list-input.component.js.map +1 -1
  24. package/esm2015/lib/components/forms/abstract-list-input.component.metadata.json +1 -1
  25. package/esm2015/lib/components/forms/abstract-value-input.component.js +35 -6
  26. package/esm2015/lib/components/forms/abstract-value-input.component.js.map +1 -1
  27. package/esm2015/lib/components/forms/abstract-value-input.component.metadata.json +1 -1
  28. package/esm2015/lib/components/forms/autocomplete-input/autocomplete-input.component.js +64 -0
  29. package/esm2015/lib/components/forms/autocomplete-input/autocomplete-input.component.js.map +1 -0
  30. package/esm2015/lib/components/forms/autocomplete-input/autocomplete-input.component.metadata.json +1 -0
  31. package/esm2015/lib/components/forms/autocomplete-input/autocomplete-input.component.ngfactory.js.map +1 -0
  32. package/esm2015/lib/components/forms/autocomplete-input/autocomplete-input.component.scss.shim.ngstyle.js.map +1 -0
  33. package/esm2015/lib/components/forms/checkbox-input/checkbox-input.component.js +4 -7
  34. package/esm2015/lib/components/forms/checkbox-input/checkbox-input.component.js.map +1 -1
  35. package/esm2015/lib/components/forms/checkbox-input/checkbox-input.component.metadata.json +1 -1
  36. package/esm2015/lib/components/forms/multiple-select-input/multiple-select-input.component.js +8 -5
  37. package/esm2015/lib/components/forms/multiple-select-input/multiple-select-input.component.js.map +1 -1
  38. package/esm2015/lib/components/forms/multiple-select-input/multiple-select-input.component.metadata.json +1 -1
  39. package/esm2015/lib/components/forms/number-input/number-input.component.js +4 -7
  40. package/esm2015/lib/components/forms/number-input/number-input.component.js.map +1 -1
  41. package/esm2015/lib/components/forms/number-input/number-input.component.metadata.json +1 -1
  42. package/esm2015/lib/components/forms/password-input/password-input.component.js +5 -8
  43. package/esm2015/lib/components/forms/password-input/password-input.component.js.map +1 -1
  44. package/esm2015/lib/components/forms/password-input/password-input.component.metadata.json +1 -1
  45. package/esm2015/lib/components/forms/select-input/select-input.component.js +8 -5
  46. package/esm2015/lib/components/forms/select-input/select-input.component.js.map +1 -1
  47. package/esm2015/lib/components/forms/select-input/select-input.component.metadata.json +1 -1
  48. package/esm2015/lib/components/forms/string-input/string-input.component.js +2 -6
  49. package/esm2015/lib/components/forms/string-input/string-input.component.js.map +1 -1
  50. package/esm2015/lib/components/forms/string-input/string-input.component.metadata.json +1 -1
  51. package/esm2015/lib/components/forms/text-input/text-input.component.js +4 -7
  52. package/esm2015/lib/components/forms/text-input/text-input.component.js.map +1 -1
  53. package/esm2015/lib/components/forms/text-input/text-input.component.metadata.json +1 -1
  54. package/esm2015/lib/components/index.js +2 -1
  55. package/esm2015/lib/components/index.js.map +1 -1
  56. package/esm2015/lib/components/index.metadata.json +1 -1
  57. package/esm2015/lib/components/table/cell-editors.js.map +1 -1
  58. package/esm2015/lib/components/table/{cell-protal-ref.js → cell-portal-ref.js} +7 -3
  59. package/esm2015/lib/components/table/cell-portal-ref.js.map +1 -0
  60. package/esm2015/lib/components/table/{cell-protal-ref.metadata.json → cell-portal-ref.metadata.json} +1 -1
  61. package/esm2015/lib/components/table/column-model.js +27 -11
  62. package/esm2015/lib/components/table/column-model.js.map +1 -1
  63. package/esm2015/lib/components/table/column-model.metadata.json +1 -1
  64. package/esm2015/lib/components/table/table-cell-renderer/table-cell-renderer.component.js +1 -1
  65. package/esm2015/lib/components/table/table-cell-renderer/table-cell-renderer.component.js.map +1 -1
  66. package/esm2015/lib/components/table/table-header-cell-renderer/table-header-cell-renderer.component.js +1 -1
  67. package/esm2015/lib/components/table/table-header-cell-renderer/table-header-cell-renderer.component.js.map +1 -1
  68. package/esm2015/lib/components/table/table-model.js +8 -5
  69. package/esm2015/lib/components/table/table-model.js.map +1 -1
  70. package/esm2015/lib/components/table/table-model.metadata.json +1 -1
  71. package/esm2015/lib/components/table/table.component.js +1 -2
  72. package/esm2015/lib/components/table/table.component.js.map +1 -1
  73. package/esm2015/lib/components/table/table.component.metadata.json +1 -1
  74. package/esm2015/lib/components/table/table.component.scss.shim.ngstyle.js.map +1 -0
  75. package/esm2015/lib/interaction/interaction.module.ngfactory.js.map +1 -1
  76. package/esm2015/lib/place/place.module.ngfactory.js.map +1 -1
  77. package/esm5/coolon-angular-ui-powerups.js +53 -52
  78. package/esm5/coolon-angular-ui-powerups.js.map +1 -1
  79. package/esm5/lib/angular-ui-powerups.module.ngfactory.js.map +1 -1
  80. package/esm5/lib/components/card-container/card-container.component.js +1 -1
  81. package/esm5/lib/components/components.module.js +29 -12
  82. package/esm5/lib/components/components.module.js.map +1 -1
  83. package/esm5/lib/components/components.module.ngfactory.js.map +1 -1
  84. package/esm5/lib/components/forms/abstract-input.component.js +22 -2
  85. package/esm5/lib/components/forms/abstract-input.component.js.map +1 -1
  86. package/esm5/lib/components/forms/abstract-list-input.component.js +42 -5
  87. package/esm5/lib/components/forms/abstract-list-input.component.js.map +1 -1
  88. package/esm5/lib/components/forms/abstract-value-input.component.js +40 -6
  89. package/esm5/lib/components/forms/abstract-value-input.component.js.map +1 -1
  90. package/esm5/lib/components/forms/autocomplete-input/autocomplete-input.component.js +67 -0
  91. package/esm5/lib/components/forms/autocomplete-input/autocomplete-input.component.js.map +1 -0
  92. package/esm5/lib/components/forms/autocomplete-input/autocomplete-input.component.ngfactory.js.map +1 -0
  93. package/esm5/lib/components/forms/autocomplete-input/autocomplete-input.component.scss.shim.ngstyle.js.map +1 -0
  94. package/esm5/lib/components/forms/checkbox-input/checkbox-input.component.js +4 -7
  95. package/esm5/lib/components/forms/checkbox-input/checkbox-input.component.js.map +1 -1
  96. package/esm5/lib/components/forms/multiple-select-input/multiple-select-input.component.js +8 -5
  97. package/esm5/lib/components/forms/multiple-select-input/multiple-select-input.component.js.map +1 -1
  98. package/esm5/lib/components/forms/number-input/number-input.component.js +4 -7
  99. package/esm5/lib/components/forms/number-input/number-input.component.js.map +1 -1
  100. package/esm5/lib/components/forms/password-input/password-input.component.js +5 -8
  101. package/esm5/lib/components/forms/password-input/password-input.component.js.map +1 -1
  102. package/esm5/lib/components/forms/select-input/select-input.component.js +8 -5
  103. package/esm5/lib/components/forms/select-input/select-input.component.js.map +1 -1
  104. package/esm5/lib/components/forms/string-input/string-input.component.js +2 -6
  105. package/esm5/lib/components/forms/string-input/string-input.component.js.map +1 -1
  106. package/esm5/lib/components/forms/text-input/text-input.component.js +4 -7
  107. package/esm5/lib/components/forms/text-input/text-input.component.js.map +1 -1
  108. package/esm5/lib/components/index.js +2 -1
  109. package/esm5/lib/components/index.js.map +1 -1
  110. package/esm5/lib/components/table/cell-editors.js.map +1 -1
  111. package/esm5/lib/components/table/{cell-protal-ref.js → cell-portal-ref.js} +7 -3
  112. package/esm5/lib/components/table/cell-portal-ref.js.map +1 -0
  113. package/esm5/lib/components/table/column-model.js +27 -11
  114. package/esm5/lib/components/table/column-model.js.map +1 -1
  115. package/esm5/lib/components/table/table-cell-renderer/table-cell-renderer.component.js +1 -1
  116. package/esm5/lib/components/table/table-cell-renderer/table-cell-renderer.component.js.map +1 -1
  117. package/esm5/lib/components/table/table-header-cell-renderer/table-header-cell-renderer.component.js +1 -1
  118. package/esm5/lib/components/table/table-header-cell-renderer/table-header-cell-renderer.component.js.map +1 -1
  119. package/esm5/lib/components/table/table-model.js +8 -5
  120. package/esm5/lib/components/table/table-model.js.map +1 -1
  121. package/esm5/lib/components/table/table.component.js +1 -2
  122. package/esm5/lib/components/table/table.component.js.map +1 -1
  123. package/esm5/lib/components/table/table.component.scss.shim.ngstyle.js.map +1 -0
  124. package/esm5/lib/interaction/interaction.module.ngfactory.js.map +1 -1
  125. package/esm5/lib/place/place.module.ngfactory.js.map +1 -1
  126. package/fesm2015/coolon-angular-ui-powerups.js +320 -157
  127. package/fesm2015/coolon-angular-ui-powerups.js.map +1 -1
  128. package/fesm5/coolon-angular-ui-powerups.js +351 -167
  129. package/fesm5/coolon-angular-ui-powerups.js.map +1 -1
  130. package/lib/components/forms/abstract-input.component.d.ts +4 -1
  131. package/lib/components/forms/abstract-list-input.component.d.ts +8 -2
  132. package/lib/components/forms/abstract-value-input.component.d.ts +7 -2
  133. package/lib/components/forms/autocomplete-input/autocomplete-input.component.d.ts +22 -0
  134. package/lib/components/forms/checkbox-input/checkbox-input.component.d.ts +0 -2
  135. package/lib/components/forms/multiple-select-input/multiple-select-input.component.d.ts +8 -2
  136. package/lib/components/forms/number-input/number-input.component.d.ts +0 -2
  137. package/lib/components/forms/password-input/password-input.component.d.ts +0 -2
  138. package/lib/components/forms/select-input/select-input.component.d.ts +8 -2
  139. package/lib/components/forms/string-input/string-input.component.d.ts +1 -2
  140. package/lib/components/forms/text-input/text-input.component.d.ts +0 -2
  141. package/lib/components/index.d.ts +2 -1
  142. package/lib/components/table/cell-editors.d.ts +3 -3
  143. package/lib/components/table/{cell-protal-ref.d.ts → cell-portal-ref.d.ts} +4 -4
  144. package/lib/components/table/column-model.d.ts +15 -7
  145. package/lib/components/table/table-cell-renderer/table-cell-renderer.component.d.ts +1 -1
  146. package/lib/components/table/table-header-cell-renderer/table-header-cell-renderer.component.d.ts +1 -1
  147. package/lib/components/table/table-model.d.ts +10 -2
  148. package/package.json +2 -2
  149. package/esm2015/lib/components/table/cell-protal-ref.js.map +0 -1
  150. package/esm2015/lib/components/table/table.component.scss.ngstyle.js.map +0 -1
  151. package/esm5/lib/components/table/cell-protal-ref.js.map +0 -1
  152. package/esm5/lib/components/table/table.component.scss.ngstyle.js.map +0 -1
@@ -1,6 +1,6 @@
1
1
  import { __decorate, __metadata, __param, __awaiter } from 'tslib';
2
2
  import { DOCUMENT, CommonModule, Location } from '@angular/common';
3
- import { ElementRef, Inject, Input, HostListener, Directive, NgZone, ɵɵdefineInjectable, ɵɵinject, Injectable, NgModule, ContentChild, TemplateRef, Component, Self, HostBinding, EventEmitter, Output, ChangeDetectorRef, ContentChildren, QueryList, ViewEncapsulation, ViewContainerRef, InjectionToken, Injector, ComponentFactoryResolver, ViewChild, ViewChildren, Optional, SkipSelf } from '@angular/core';
3
+ import { ElementRef, Inject, Input, HostListener, Directive, NgZone, ɵɵdefineInjectable, ɵɵinject, Injectable, NgModule, ContentChild, TemplateRef, Component, Self, HostBinding, EventEmitter, Output, ChangeDetectorRef, ContentChildren, QueryList, ViewContainerRef, InjectionToken, Injector, ComponentFactoryResolver, ViewChild, ViewChildren, Optional, SkipSelf } from '@angular/core';
4
4
  import { FormsModule } from '@angular/forms';
5
5
  import { MatFormFieldModule } from '@angular/material/form-field';
6
6
  import { MatInputModule } from '@angular/material/input';
@@ -9,18 +9,19 @@ import { MatTabsModule, MatTabGroup, MAT_TABS_CONFIG } from '@angular/material/t
9
9
  import { BrowserAnimationsModule } from '@angular/platform-browser/animations';
10
10
  import { ComponentPortal, TemplatePortal, PortalModule } from '@angular/cdk/portal';
11
11
  import { CdkScrollableModule } from '@angular/cdk/scrolling';
12
+ import { MatAutocompleteModule } from '@angular/material/autocomplete';
12
13
  import { MatButtonModule } from '@angular/material/button';
13
14
  import { MatCheckboxModule } from '@angular/material/checkbox';
14
15
  import { MatIconModule } from '@angular/material/icon';
15
16
  import { MatTableModule } from '@angular/material/table';
16
- import { GarbageCollector, DelegatingValueModel, assert, UnaryCommand, lang, Dsl, Logger, TrackExternal, Command, FocusManager, Form, ListModel, StoreInListModel, ValueModel, StoreInValueModel, MutableValueModel, MultipleSelectionModel, MutableListModel, DirtyTrackingForm, DelegatingCommand, Deferred, Trace, Guard, DebugContext, Binding, Functions } from '@coolon/pectin';
17
+ import { MatTooltipModule } from '@angular/material/tooltip';
18
+ import { FaIconLibrary, FontAwesomeModule } from '@fortawesome/angular-fontawesome';
19
+ import { fas } from '@fortawesome/free-solid-svg-icons';
20
+ import { GarbageCollector, DelegatingValueModel, assert, UnaryCommand, lang, Dsl, Logger, TrackExternal, Command, FocusManager, Form, Guard, MutableListModel, MutableValueModel, ListModel, StoreInListModel, ValueModel, StoreInValueModel, MultipleSelectionModel, DirtyTrackingForm, DelegatingCommand, Deferred, Trace, DebugContext, Binding, Functions } from '@coolon/pectin';
21
+ import ___default, { isEqual, isNil } from 'lodash';
17
22
  import { assert as assert$1, Opts, lang as lang$1, Klass } from '@coolon/typescript-utilities';
18
23
  import { Memoize } from '@typescript-plus/fast-memoize-decorator/dist/src';
19
- import ___default, { isEqual, isNil } from 'lodash';
20
24
  import produce from 'immer';
21
- import { FaIconLibrary, FontAwesomeModule } from '@fortawesome/angular-fontawesome';
22
- import { fas } from '@fortawesome/free-solid-svg-icons';
23
- import { MatTooltipModule } from '@angular/material/tooltip';
24
25
  import { FlexModule, GridModule } from '@angular/flex-layout';
25
26
  import { MatDialogModule, MatDialog, MatDialogConfig, MAT_DIALOG_DEFAULT_OPTIONS } from '@angular/material/dialog';
26
27
  import { RouterModule, UrlSegment, Router, UrlSerializer, NavigationStart, NavigationEnd, NavigationError, NavigationCancel, RouterOutlet } from '@angular/router';
@@ -369,7 +370,7 @@ CardContainerComponent = __decorate([
369
370
  Component({
370
371
  selector: 'aup-card-container',
371
372
  template: "<div class=\"card-container\">\n <ng-content></ng-content>\n\n <div class=\"add-card-container\" *ngIf=\"addCardCommand.enabled.value\" [pectinCommand]=\"addCardCommand\">\n <aup-icon icon=\"mat:add\"></aup-icon>\n </div>\n\n <div class=\"add-card-template\" *ngIf=\"addCardTemplate\">\n <ng-container [ngTemplateOutlet]=\"addCardTemplate\"></ng-container>\n </div>\n\n</div>\n",
372
- styles: [":root{--aup-default-padding:var(--default-padding, 18px);--aup-default-background:white}.router-outlet-container>*{position:absolute;top:0;left:0;bottom:0;right:0}[no-tab-header]>mat-tab-header{display:none}[full-height-tabs] .mat-tab-body-wrapper,mat-tab-group.full-height-tabs .mat-tab-body-wrapper{flex:1}[full-height-tabs] .mat-tab-body-wrapper .mat-tab-body-content,[full-height-tabs] .mat-tab-body-wrapper mat-tab-body,mat-tab-group.full-height-tabs .mat-tab-body-wrapper .mat-tab-body-content,mat-tab-group.full-height-tabs .mat-tab-body-wrapper mat-tab-body{display:flex;flex-direction:column;justify-content:stretch}.dialog-interaction-context{max-width:95vw!important;max-height:95vh!important}.dialog-interaction-context mat-dialog-container{max-width:95vw!important;max-height:95vh!important;padding:0}.aup-popup-interaction-panel{background:var(--aup-default-background,#fff);box-shadow:0 2px 1px -1px rgba(0,0,0,.2),0 1px 1px 0 rgba(0,0,0,.14),0 1px 3px 0 rgba(0,0,0,.12);transition:box-shadow 280ms cubic-bezier(.4,0,.2,1)}.aup-input-activity{padding:calc(var(--aup-default-padding)/2)}.aup-input-component{display:block}.aup-input-component input,.aup-input-component mat-form-field{width:100%}.aup-input-component input mat-hint.faux-error,.aup-input-component mat-form-field mat-hint.faux-error{color:#f44336}aup-table-cell-renderer>.aup-input-component .mat-form-field-flex{padding-top:0}aup-table-cell-renderer>.aup-input-component .mat-form-field-infix{width:0}aup-table-cell-renderer>.aup-input-component .mat-form-field-label-wrapper{display:none}aup-table{--default-column-gap:var(--column-gap, 24px);--resolved-row-hover-background-color:var(--row-hover-background-color, rgba(0, 0, 0, 0.05))}aup-table .mat-table td.mat-cell:first-of-type,aup-table .mat-table td.mat-footer-cell:first-of-type,aup-table .mat-table th.mat-header-cell:first-of-type{padding-left:0}aup-table .mat-table tr.enable-hover:hover{background-color:var(--resolved-row-hover-background-color)}aup-table .mat-table td.enable-cursor{cursor:pointer}aup-table aup-table-cell-renderer,aup-table aup-table-header-cell-renderer{display:flex;flex-direction:column;align-items:stretch;justify-content:center;height:100%;min-height:47px}aup-table aup-table-cell-renderer.first-column,aup-table aup-table-cell-renderer:not(.first-column),aup-table aup-table-header-cell-renderer.first-column,aup-table aup-table-header-cell-renderer:not(.first-column){padding-left:var(--default-column-gap)}aup-table aup-table-cell-renderer.fillCell{justify-content:stretch;padding-left:0!important}aup-table aup-table-cell-renderer.padChild>:first-child{padding-left:var(--default-column-gap);flex:1}:host{--resolved-card-gap:var(--card-gap, 16px);--resolved-card-width:var(--card-width, 300px);--resolved-card-height:var(--card-height, auto);--resolved-card-min-height:var(--card-min-height, auto);--resolved-card-background:var(--card-background, #fcfcfb);flex:1;display:block;background:var(--resolved-card-background)}.card-container{display:-ms-grid;display:grid;grid-template-columns:repeat(auto-fill,var(--resolved-card-width));grid-template-rows:repeat(auto-fit,minmax(0,var(--resolved-card-height)));grid-gap:var(--resolved-card-gap);box-sizing:border-box;padding:var(--resolved-card-gap);min-height:calc(var(--resolved-card-height) + 2 * var(--resolved-card-gap));min-width:calc(var(--resolved-card-width) + 2 * var(--resolved-card-gap));width:calc((var(--resolved-card-width) + var(--resolved-card-gap)) * 2 + var(--grid-gap));max-width:100%}.add-card-container{width:var(--resolved-card-width);height:var(--resolved-card-height);min-height:var(--resolved-card-min-height);display:flex;flex-direction:column;align-items:center;justify-content:center;box-sizing:border-box;border:2px dashed rgba(0,0,0,.1);border-radius:6px;font-weight:300;cursor:pointer;color:rgba(0,0,0,.54);background-color:rgba(255,255,255,.8);transition:280ms cubic-bezier(.4,0,.2,1)}.add-card-container mat-icon{font-size:200%}.add-card-container:hover{transition:280ms cubic-bezier(.4,0,.2,1);border-color:transparent;background-color:#fff;color:rgba(0,0,0,.54)}.add-card-container:hover:hover{box-shadow:0 2px 4px -1px rgba(0,0,0,.2),0 4px 5px 0 rgba(0,0,0,.14),0 1px 10px 0 rgba(0,0,0,.12)}.add-card-template-container{width:var(--resolved-card-width);height:var(--resolved-card-height);display:flex;flex-direction:column;align-items:stretch;justify-content:stretch}"]
373
+ styles: [":root{--aup-default-padding:var(--default-padding, 18px);--aup-default-background:white}.router-outlet-container>*{position:absolute;top:0;left:0;bottom:0;right:0}[no-tab-header]>mat-tab-header{display:none}[full-height-tabs] .mat-tab-body-wrapper,mat-tab-group.full-height-tabs .mat-tab-body-wrapper{flex:1}[full-height-tabs] .mat-tab-body-wrapper .mat-tab-body-content,[full-height-tabs] .mat-tab-body-wrapper mat-tab-body,mat-tab-group.full-height-tabs .mat-tab-body-wrapper .mat-tab-body-content,mat-tab-group.full-height-tabs .mat-tab-body-wrapper mat-tab-body{display:flex;flex-direction:column;justify-content:stretch}.dialog-interaction-context{max-width:95vw!important;max-height:95vh!important}.dialog-interaction-context mat-dialog-container{max-width:95vw!important;max-height:95vh!important;padding:0}.aup-popup-interaction-panel{background:var(--aup-default-background,#fff);box-shadow:0 2px 1px -1px rgba(0,0,0,.2),0 1px 1px 0 rgba(0,0,0,.14),0 1px 3px 0 rgba(0,0,0,.12);transition:box-shadow 280ms cubic-bezier(.4,0,.2,1)}.aup-input-activity{padding:calc(var(--aup-default-padding)/2)}.aup-input-component{display:block}.aup-input-component input,.aup-input-component mat-form-field{width:100%}.aup-input-component input mat-hint.faux-error,.aup-input-component mat-form-field mat-hint.faux-error{color:#f44336}.aup-input-component.dense mat-form-field .mat-form-field-infix{border-top:none}.aup-input-component.dense mat-form-field .mat-form-field-flex{padding-top:0}.aup-input-component.dense mat-form-field .mat-form-field-wrapper{padding-bottom:0;border-bottom:0}.aup-input-component.dense mat-form-field .mat-form-field-underline{bottom:0}.aup-input-component.dense mat-form-field.mat-form-field-can-float.mat-form-field-should-float .mat-form-field-label-wrapper{display:none}.aup-input-component.dense mat-form-field.mat-form-field-appearance-standard.mat-form-field-has-label .mat-select:not(.mat-select-empty) .mat-select-arrow-wrapper{transform:translateY(0)}aup-table-cell-renderer>.aup-input-component .mat-form-field-flex{padding-top:0}aup-table-cell-renderer>.aup-input-component .mat-form-field-infix{width:0}aup-table-cell-renderer>.aup-input-component .mat-form-field-label-wrapper{display:none}aup-table{--default-column-gap:var(--column-gap, 24px);--resolved-row-hover-background-color:var(--row-hover-background-color, rgba(0, 0, 0, 0.05))}aup-table .mat-table td.mat-cell:first-of-type,aup-table .mat-table td.mat-footer-cell:first-of-type,aup-table .mat-table th.mat-header-cell:first-of-type{padding-left:0}aup-table .mat-table tr.enable-hover:hover{background-color:var(--resolved-row-hover-background-color)}aup-table .mat-table td.enable-cursor{cursor:pointer}aup-table aup-table-cell-renderer,aup-table aup-table-header-cell-renderer{display:flex;flex-direction:column;align-items:stretch;justify-content:center;height:100%;min-height:47px}aup-table aup-table-cell-renderer.first-column,aup-table aup-table-cell-renderer:not(.first-column),aup-table aup-table-header-cell-renderer.first-column,aup-table aup-table-header-cell-renderer:not(.first-column){padding-left:var(--default-column-gap)}aup-table aup-table-cell-renderer.fillCell{justify-content:stretch;padding-left:0!important}aup-table aup-table-cell-renderer.padChild>:first-child{padding-left:var(--default-column-gap);flex:1}:host{--resolved-card-gap:var(--card-gap, 16px);--resolved-card-width:var(--card-width, 300px);--resolved-card-height:var(--card-height, auto);--resolved-card-min-height:var(--card-min-height, auto);--resolved-card-background:var(--card-background, #fcfcfb);flex:1;display:block;background:var(--resolved-card-background)}.card-container{display:-ms-grid;display:grid;grid-template-columns:repeat(auto-fill,var(--resolved-card-width));grid-template-rows:repeat(auto-fit,minmax(0,var(--resolved-card-height)));grid-gap:var(--resolved-card-gap);box-sizing:border-box;padding:var(--resolved-card-gap);min-height:calc(var(--resolved-card-height) + 2 * var(--resolved-card-gap));min-width:calc(var(--resolved-card-width) + 2 * var(--resolved-card-gap));width:calc((var(--resolved-card-width) + var(--resolved-card-gap)) * 2 + var(--grid-gap));max-width:100%}.add-card-container{width:var(--resolved-card-width);height:var(--resolved-card-height);min-height:var(--resolved-card-min-height);display:flex;flex-direction:column;align-items:center;justify-content:center;box-sizing:border-box;border:2px dashed rgba(0,0,0,.1);border-radius:6px;font-weight:300;cursor:pointer;color:rgba(0,0,0,.54);background-color:rgba(255,255,255,.8);transition:280ms cubic-bezier(.4,0,.2,1)}.add-card-container mat-icon{font-size:200%}.add-card-container:hover{transition:280ms cubic-bezier(.4,0,.2,1);border-color:transparent;background-color:#fff;color:rgba(0,0,0,.54)}.add-card-container:hover:hover{box-shadow:0 2px 4px -1px rgba(0,0,0,.2),0 4px 5px 0 rgba(0,0,0,.14),0 1px 10px 0 rgba(0,0,0,.12)}.add-card-template-container{width:var(--resolved-card-width);height:var(--resolved-card-height);display:flex;flex-direction:column;align-items:stretch;justify-content:stretch}"]
373
374
  }),
374
375
  __metadata("design:paramtypes", [])
375
376
  ], CardContainerComponent);
@@ -467,6 +468,7 @@ FocusableComponent = __decorate([
467
468
  let AbstractInputComponent = class AbstractInputComponent extends DisposableComponent {
468
469
  constructor() {
469
470
  super();
471
+ this.dense = false;
470
472
  // TODO: fix this.
471
473
  // tslint:disable-next-line:no-output-native
472
474
  this.focus = new EventEmitter();
@@ -528,15 +530,21 @@ let AbstractInputComponent = class AbstractInputComponent extends DisposableComp
528
530
  get focusContext() {
529
531
  return this.inputModel.focusContext;
530
532
  }
533
+ get floatLabel() {
534
+ return this.dense ? 'never' : this.userFloatLabel;
535
+ }
536
+ get showHint() {
537
+ return this.dense ? false : !!this.hint;
538
+ }
531
539
  };
532
540
  __decorate([
533
541
  Input(),
534
542
  __metadata("design:type", String)
535
543
  ], AbstractInputComponent.prototype, "label", void 0);
536
544
  __decorate([
537
- Input(),
545
+ Input('floatLabel'),
538
546
  __metadata("design:type", String)
539
- ], AbstractInputComponent.prototype, "floatLabel", void 0);
547
+ ], AbstractInputComponent.prototype, "userFloatLabel", void 0);
540
548
  __decorate([
541
549
  Input(),
542
550
  __metadata("design:type", String)
@@ -545,6 +553,11 @@ __decorate([
545
553
  Input(),
546
554
  __metadata("design:type", String)
547
555
  ], AbstractInputComponent.prototype, "placeholder", void 0);
556
+ __decorate([
557
+ HostBinding('class.dense'),
558
+ Input(),
559
+ __metadata("design:type", Object)
560
+ ], AbstractInputComponent.prototype, "dense", void 0);
548
561
  __decorate([
549
562
  Input('command.focus'),
550
563
  __metadata("design:type", Command)
@@ -610,7 +623,7 @@ AbstractInputComponent = __decorate([
610
623
 
611
624
  let AbstractListInputComponent = class AbstractListInputComponent extends AbstractInputComponent {
612
625
  constructor() {
613
- super(...arguments);
626
+ super();
614
627
  /**
615
628
  * A backing model for all our @Input() valueModel properties which should be defined as follows.
616
629
  *
@@ -623,10 +636,42 @@ let AbstractListInputComponent = class AbstractListInputComponent extends Abstra
623
636
  */
624
637
  // We have to register it as a disposable so it ditches any listeners when we're disposed.
625
638
  this.inputModel = this.registerDisposable(new Form.DelegatingListModel());
639
+ this.setValueIsInitialising = new Guard();
640
+ this.valueChange = new EventEmitter();
641
+ const { when } = Dsl.disposeWith(this);
642
+ when(this.inputModel).changes(value => this.valueChange.emit(value), {
643
+ initialValue: 'ignore',
644
+ unless: this.setValueIsInitialising
645
+ });
646
+ }
647
+ set value(value) {
648
+ if (!this.listHolder) {
649
+ this.setValueIsInitialising.whileTrue(() => {
650
+ this.listHolder = new MutableListModel(value);
651
+ this.listModel = this.listHolder;
652
+ });
653
+ }
654
+ else {
655
+ this.listHolder.value = value;
656
+ }
626
657
  }
627
658
  };
659
+ __decorate([
660
+ Input(), TrackExternal({ delegateTo: 'inputModel' }),
661
+ __metadata("design:type", Object)
662
+ ], AbstractListInputComponent.prototype, "listModel", void 0);
663
+ __decorate([
664
+ Input(),
665
+ __metadata("design:type", Array),
666
+ __metadata("design:paramtypes", [Array])
667
+ ], AbstractListInputComponent.prototype, "value", null);
668
+ __decorate([
669
+ Output(),
670
+ __metadata("design:type", Object)
671
+ ], AbstractListInputComponent.prototype, "valueChange", void 0);
628
672
  AbstractListInputComponent = __decorate([
629
- Component({ template: '' })
673
+ Component({ template: '' }),
674
+ __metadata("design:paramtypes", [])
630
675
  ], AbstractListInputComponent);
631
676
 
632
677
  let AbstractValueInputComponent = class AbstractValueInputComponent extends AbstractInputComponent {
@@ -644,31 +689,116 @@ let AbstractValueInputComponent = class AbstractValueInputComponent extends Abst
644
689
  */
645
690
  // We have to register it as a disposable so it ditches any listeners when we're disposed.
646
691
  this.inputModel = this.registerDisposable(new Form.DelegatingValueModel());
647
- this.inputModel.onTransactionStart(tx => {
648
- tx.onRootTransactionFinalised(() => {
649
- console.log({ changed: tx.hasChanged() });
650
- });
692
+ this.setValueInProgress = new Guard();
693
+ this.valueChange = new EventEmitter();
694
+ const { when } = Dsl.disposeWith(this);
695
+ when(this.inputModel).changes(value => this.valueChange.emit(value), {
696
+ initialValue: 'ignore',
697
+ unless: this.setValueInProgress
698
+ });
699
+ }
700
+ set value(value) {
701
+ // we never fire events during an external set value operation. This allows
702
+ // the component to behave when used in the conventional angular
703
+ // fashion, i.e. [(value)]="..."
704
+ this.setValueInProgress.whileTrue(() => {
705
+ if (!this.valueHolder) {
706
+ this.valueHolder = new MutableValueModel(value);
707
+ this.valueModel = this.valueHolder;
708
+ }
709
+ else {
710
+ this.valueHolder.value = value;
711
+ }
651
712
  });
652
713
  }
653
714
  };
715
+ __decorate([
716
+ Input(), TrackExternal({ delegateTo: 'inputModel' }),
717
+ __metadata("design:type", Object)
718
+ ], AbstractValueInputComponent.prototype, "valueModel", void 0);
719
+ __decorate([
720
+ Input(),
721
+ __metadata("design:type", Object),
722
+ __metadata("design:paramtypes", [Object])
723
+ ], AbstractValueInputComponent.prototype, "value", null);
724
+ __decorate([
725
+ Output(),
726
+ __metadata("design:type", Object)
727
+ ], AbstractValueInputComponent.prototype, "valueChange", void 0);
654
728
  AbstractValueInputComponent = __decorate([
655
729
  Component({ template: '' }),
656
730
  __metadata("design:paramtypes", [])
657
731
  ], AbstractValueInputComponent);
658
732
 
733
+ /**
734
+ * Using templates (not only supported for nil values:
735
+ * <aup-autocomplete-input [valueModel]="myModel" [options]="myOptions">
736
+ * <ng-template #nilOptionTemplate let-option>{{option.thePropertyYouWant}}</ng-template>
737
+ * </aup-autocomplete-input>
738
+ */
739
+ let AutocompleteInputComponent = class AutocompleteInputComponent extends AbstractValueInputComponent {
740
+ constructor() {
741
+ super();
742
+ this.filterValue = new MutableValueModel();
743
+ this.optionLabelFormat = (option) => (option && this.optionLabel) ? option[this.optionLabel] : option;
744
+ const { chain, valueOf, before, when, after, observe, switchOn } = Dsl.disposeWith(this);
745
+ const lowerCaseFilterValue = chain(this.filterValue)
746
+ .map(v => ___default.isString(v) ? v.toLowerCase() : '');
747
+ this.filteredOptions = chain(this.optionsModel)
748
+ .select(option => {
749
+ return ___default.isEmpty(this.filterValue.value) || this.optionLabelFormat(option).toString().toLowerCase().includes(lowerCaseFilterValue.value);
750
+ }, { dependsOn: lowerCaseFilterValue });
751
+ }
752
+ ngOnInit() {
753
+ }
754
+ updateFilter($event) {
755
+ this.filterValue.value = $event;
756
+ }
757
+ };
758
+ __decorate([
759
+ Input(), TrackExternal(),
760
+ __metadata("design:type", ListModel)
761
+ ], AutocompleteInputComponent.prototype, "optionsModel", void 0);
762
+ __decorate([
763
+ Input(), StoreInListModel('optionsModel'),
764
+ __metadata("design:type", Array)
765
+ ], AutocompleteInputComponent.prototype, "options", void 0);
766
+ __decorate([
767
+ Input(),
768
+ __metadata("design:type", Object)
769
+ ], AutocompleteInputComponent.prototype, "optionLabel", void 0);
770
+ __decorate([
771
+ Input(),
772
+ __metadata("design:type", Boolean)
773
+ ], AutocompleteInputComponent.prototype, "allowNil", void 0);
774
+ __decorate([
775
+ ContentChild('nilOptionTemplate'),
776
+ __metadata("design:type", TemplateRef)
777
+ ], AutocompleteInputComponent.prototype, "nilOptionTemplateRef", void 0);
778
+ __decorate([
779
+ Input(),
780
+ __metadata("design:type", Function)
781
+ ], AutocompleteInputComponent.prototype, "optionLabelFormat", void 0);
782
+ AutocompleteInputComponent = __decorate([
783
+ Component({
784
+ selector: 'aup-autocomplete-input',
785
+ template: "<mat-form-field appearance=\"standard\" [floatLabel]=\"floatLabel\">\n <mat-label *ngIf=\"label\">{{label}}</mat-label>\n <input type=\"string\"\n matInput\n [matAutocomplete]=\"autocomplete\"\n placeholder=\"{{placeholder}}\"\n [ngModel]=\"optionLabelFormat(valueModel.value)\"\n (ngModelChange)=\"updateFilter($event)\"\n [disabled]=\"!enabled.value\"\n (keydown.enter)=\"notifyEnterKey()\"\n (keydown.escape)=\"notifyEscapeKey()\"\n [pectinFocusBinding]=\"focusContext\"\n [errorStateMatcher]=\"errorStateMatcher\"\n >\n <mat-autocomplete #autocomplete [displayWith]=\"optionLabelFormat\" [autoActiveFirstOption]=\"true\">\n <mat-option *ngFor=\"let option of filteredOptions.value; let i = index\"\n [value]=\"option\"\n >{{optionLabelFormat(option)}}</mat-option>\n <mat-option *ngIf=\"allowNil\">{{placeholder}}</mat-option>\n </mat-autocomplete>\n\n <mat-hint *ngIf=\"showHint\">{{hint}}</mat-hint>\n <mat-error *ngIf=\"hasErrors\">{{firstError}}</mat-error>\n</mat-form-field>\n",
786
+ styles: [":host{display:inline-block}mat-form-field{width:100%}"]
787
+ }),
788
+ __metadata("design:paramtypes", [])
789
+ ], AutocompleteInputComponent);
790
+
659
791
  let CheckboxInputComponent = class CheckboxInputComponent extends AbstractValueInputComponent {
660
792
  constructor() {
661
793
  super();
794
+ // @Input() @TrackExternal({ delegateTo: 'inputModel' })
795
+ // valueModel: Form.ValueModelBase<boolean> | IMutableValueModel<boolean>;
662
796
  this.color = 'accent';
663
797
  this.labelPosition = 'after';
664
798
  }
665
799
  ngOnInit() {
666
800
  }
667
801
  };
668
- __decorate([
669
- Input(), TrackExternal({ delegateTo: 'inputModel' }),
670
- __metadata("design:type", Object)
671
- ], CheckboxInputComponent.prototype, "valueModel", void 0);
672
802
  __decorate([
673
803
  Input(),
674
804
  __metadata("design:type", String)
@@ -680,25 +810,75 @@ __decorate([
680
810
  CheckboxInputComponent = __decorate([
681
811
  Component({
682
812
  selector: 'aup-checkbox-input',
683
- template: "<!-- TODO: add focus binding -->\n<mat-checkbox\n [(ngModel)]=\"valueModel.value\"\n [color]=\"color\"\n [labelPosition]=\"labelPosition\"\n [disabled]=\"!isEnabled()\"\n>{{label}}</mat-checkbox>\n<mat-hint *ngIf=\"hint\">{{hint}}</mat-hint>\n<mat-error *ngIf=\"hasErrors\">{{firstError}}</mat-error>\n",
684
- styles: [":host{display:inline-flex;flex-direction:column;margin-top:24px;margin-bottom:16px}mat-error,mat-hint{margin-top:4px;margin-left:24px;font-size:12px;font-weight:400;line-height:13.5px}"]
813
+ template: "<!-- TODO: add focus binding -->\n<mat-checkbox\n [(ngModel)]=\"valueModel.value\"\n [color]=\"color\"\n [labelPosition]=\"labelPosition\"\n [disabled]=\"!isEnabled()\"\n>{{label}}</mat-checkbox>\n<mat-hint *ngIf=\"showHint\">{{hint}}</mat-hint>\n<mat-error *ngIf=\"hasErrors\">{{firstError}}</mat-error>\n",
814
+ styles: [":host{display:inline-flex;flex-direction:column;padding:24px 0 16px}:host.dense{padding:6px 0 2px}mat-error,mat-hint{margin-top:4px;margin-left:24px;font-size:12px;font-weight:400;line-height:13.5px}"]
685
815
  }),
686
816
  __metadata("design:paramtypes", [])
687
817
  ], CheckboxInputComponent);
688
818
 
819
+ /**
820
+ * Using templates:
821
+ * <aup-multiple-select-input [valueModel]="myModel" [options]="myOptions">
822
+ * <ng-template #optionTemplate let-option>{{option.thePropertyYouWant}}</ng-template>
823
+ * <ng-template #nilOptionTemplateRef let-option>{{option.thePropertyYouWant}}</ng-template>
824
+ * </aup-multiple-select_input>
825
+ */
826
+ let MultipleSelectInputComponent = class MultipleSelectInputComponent extends AbstractListInputComponent {
827
+ constructor() {
828
+ super();
829
+ this.optionLabelFormat = (option) => (option && this.optionLabel) ? option[this.optionLabel] : option;
830
+ }
831
+ ngOnInit() {
832
+ }
833
+ };
834
+ __decorate([
835
+ Input(), TrackExternal(),
836
+ __metadata("design:type", ListModel)
837
+ ], MultipleSelectInputComponent.prototype, "optionsModel", void 0);
838
+ __decorate([
839
+ Input(), StoreInListModel('optionsModel'),
840
+ __metadata("design:type", Array)
841
+ ], MultipleSelectInputComponent.prototype, "options", void 0);
842
+ __decorate([
843
+ Input(),
844
+ __metadata("design:type", Object)
845
+ ], MultipleSelectInputComponent.prototype, "optionLabel", void 0);
846
+ __decorate([
847
+ Input(),
848
+ __metadata("design:type", Boolean)
849
+ ], MultipleSelectInputComponent.prototype, "allowNil", void 0);
850
+ __decorate([
851
+ ContentChild('optionTemplate'),
852
+ __metadata("design:type", TemplateRef)
853
+ ], MultipleSelectInputComponent.prototype, "optionTemplateRef", void 0);
854
+ __decorate([
855
+ ContentChild('nilOptionTemplate'),
856
+ __metadata("design:type", TemplateRef)
857
+ ], MultipleSelectInputComponent.prototype, "nilOptionTemplateRef", void 0);
858
+ __decorate([
859
+ Input(),
860
+ __metadata("design:type", Function)
861
+ ], MultipleSelectInputComponent.prototype, "optionLabelFormat", void 0);
862
+ MultipleSelectInputComponent = __decorate([
863
+ Component({
864
+ selector: 'aup-multiple-select-input',
865
+ template: "<mat-form-field appearance=\"standard\" [floatLabel]=\"floatLabel\">\n <mat-label *ngIf=\"label\">{{label}}</mat-label>\n <mat-select placeholder=\"{{placeholder}}\"\n multiple\n [(ngModel)]=\"listModel.value\"\n [disabled]=\"!enabled.value\"\n (keydown.enter)=\"notifyEnterKey()\"\n (keydown.escape)=\"notifyEscapeKey()\"\n [pectinFocusBinding]=\"focusContext\"\n [errorStateMatcher]=\"errorStateMatcher\"\n >\n <mat-option *ngIf=\"allowNil\">{{placeholder}}</mat-option>\n <mat-option *ngFor=\"let option of optionsModel.value; let i = index\" [value]=\"option\">\n <ng-container *ngIf=\"!optionTemplateRef\">{{optionLabelFormat(option)}}</ng-container>\n <ng-container *ngIf=\"optionTemplateRef\"\n [ngTemplateOutlet]=\"optionTemplateRef\"\n [ngTemplateOutletContext]=\"{ $implicit: option, index: i }\"\n >\n </ng-container>\n </mat-option>\n </mat-select>\n <mat-hint *ngIf=\"showHint\">{{hint}}</mat-hint>\n <mat-error *ngIf=\"hasErrors\">{{firstError}}</mat-error>\n</mat-form-field>\n",
866
+ styles: [":host{display:inline-block}mat-form-field{width:100%}"]
867
+ }),
868
+ __metadata("design:paramtypes", [])
869
+ ], MultipleSelectInputComponent);
870
+
689
871
  let NumberInputComponent = class NumberInputComponent extends AbstractValueInputComponent {
690
872
  constructor() {
691
873
  super();
874
+ // @Input() @TrackExternal({ delegateTo: 'inputModel' })
875
+ // valueModel: Form.ValueModelBase<number> | IMutableValueModel<number>;
692
876
  this.min = Number.MIN_SAFE_INTEGER;
693
877
  this.max = Number.MAX_SAFE_INTEGER;
694
878
  }
695
879
  ngOnInit() {
696
880
  }
697
881
  };
698
- __decorate([
699
- Input(), TrackExternal({ delegateTo: 'inputModel' }),
700
- __metadata("design:type", Object)
701
- ], NumberInputComponent.prototype, "valueModel", void 0);
702
882
  __decorate([
703
883
  Input(),
704
884
  __metadata("design:type", Object)
@@ -710,32 +890,37 @@ __decorate([
710
890
  NumberInputComponent = __decorate([
711
891
  Component({
712
892
  selector: 'aup-number-input',
713
- template: "<mat-form-field appearance=\"standard\" [floatLabel]=\"floatLabel\">\n <mat-label *ngIf=\"label\">{{label}}</mat-label>\n <input type=\"number\"\n matInput\n placeholder=\"{{placeholder}}\"\n [(ngModel)]=\"valueModel.value\"\n [disabled]=\"!enabled.value\"\n (keydown.enter)=\"notifyEnterKey()\"\n (keydown.escape)=\"notifyEscapeKey()\"\n [pectinFocusBinding]=\"focusContext\"\n [errorStateMatcher]=\"errorStateMatcher\"\n [min]=\"min\"\n [max]=\"max\"\n >\n <mat-hint *ngIf=\"hint\">{{hint}}</mat-hint>\n <mat-error *ngIf=\"hasErrors\">{{firstError}}</mat-error>\n</mat-form-field>\n",
714
- styles: [":host{display:block}input,mat-form-field{width:100%}input mat-hint.faux-error,mat-form-field mat-hint.faux-error{color:#f44336}:host-context(aup-table-cell-renderer) mat-form-field div.mat-form-field-infix{width:auto}"]
893
+ template: "<mat-form-field appearance=\"standard\" [floatLabel]=\"floatLabel\">\n <mat-label *ngIf=\"label\">{{label}}</mat-label>\n <input type=\"number\"\n matInput\n placeholder=\"{{placeholder}}\"\n [(ngModel)]=\"valueModel.value\"\n [disabled]=\"!enabled.value\"\n (keydown.enter)=\"notifyEnterKey()\"\n (keydown.escape)=\"notifyEscapeKey()\"\n [pectinFocusBinding]=\"focusContext\"\n [errorStateMatcher]=\"errorStateMatcher\"\n [min]=\"min\"\n [max]=\"max\"\n >\n <mat-hint *ngIf=\"hint && !dense\" >{{hint}}</mat-hint>\n <mat-error *ngIf=\"hasErrors\">{{firstError}}</mat-error>\n</mat-form-field>\n",
894
+ styles: [""]
715
895
  }),
716
896
  __metadata("design:paramtypes", [])
717
897
  ], NumberInputComponent);
718
898
 
719
899
  let PasswordInputComponent = class PasswordInputComponent extends AbstractValueInputComponent {
900
+ // @Input() @TrackExternal({ delegateTo: 'inputModel' })
901
+ // valueModel: Form.ValueModelBase<string> | IMutableValueModel<string>;
720
902
  constructor() {
721
903
  super();
722
904
  }
723
905
  ngOnInit() {
724
906
  }
725
907
  };
726
- __decorate([
727
- Input(), TrackExternal({ delegateTo: 'inputModel' }),
728
- __metadata("design:type", Object)
729
- ], PasswordInputComponent.prototype, "valueModel", void 0);
730
908
  PasswordInputComponent = __decorate([
731
909
  Component({
732
910
  selector: 'aup-password-input',
733
- template: "<mat-form-field appearance=\"standard\" [floatLabel]=\"floatLabel\">\n <mat-label *ngIf=\"label\">{{label}}</mat-label>\n <input type=\"password\"\n matInput\n placeholder=\"{{placeholder}}\"\n [(ngModel)]=\"valueModel.value\"\n [disabled]=\"!enabled.value\"\n (keydown.enter)=\"notifyEnterKey()\"\n (keydown.escape)=\"notifyEscapeKey()\"\n [pectinFocusBinding]=\"focusContext\"\n [errorStateMatcher]=\"errorStateMatcher\"\n >\n <mat-hint *ngIf=\"hint\">{{hint}}</mat-hint>\n <mat-error *ngIf=\"hasErrors\">{{firstError}}</mat-error>\n</mat-form-field>\n\n",
734
- styles: [":host{display:block}input,mat-form-field{width:100%}input mat-hint.faux-error,mat-form-field mat-hint.faux-error{color:#f44336}:host-context(aup-table-cell-renderer) mat-form-field div.mat-form-field-infix{width:auto}"]
911
+ template: "<mat-form-field appearance=\"standard\" [floatLabel]=\"floatLabel\">\n <mat-label *ngIf=\"label\">{{label}}</mat-label>\n <input type=\"password\"\n matInput\n placeholder=\"{{placeholder}}\"\n [(ngModel)]=\"valueModel.value\"\n [disabled]=\"!enabled.value\"\n (keydown.enter)=\"notifyEnterKey()\"\n (keydown.escape)=\"notifyEscapeKey()\"\n [pectinFocusBinding]=\"focusContext\"\n [errorStateMatcher]=\"errorStateMatcher\"\n >\n <mat-hint *ngIf=\"showHint\">{{hint}}</mat-hint>\n <mat-error *ngIf=\"hasErrors\">{{firstError}}</mat-error>\n</mat-form-field>\n\n",
912
+ styles: [""]
735
913
  }),
736
914
  __metadata("design:paramtypes", [])
737
915
  ], PasswordInputComponent);
738
916
 
917
+ /**
918
+ * Using templates:
919
+ * <aup-select-input [valueModel]="myModel" [options]="myOptions">
920
+ * <ng-template #optionTemplate let-option>{{option.thePropertyYouWant}}</ng-template>
921
+ * <ng-template #nilOptionTemplateRef let-option>{{option.thePropertyYouWant}}</ng-template>
922
+ * </aup-select_input>
923
+ */
739
924
  let SelectInputComponent = class SelectInputComponent extends AbstractValueInputComponent {
740
925
  constructor() {
741
926
  super();
@@ -744,10 +929,6 @@ let SelectInputComponent = class SelectInputComponent extends AbstractValueInput
744
929
  ngOnInit() {
745
930
  }
746
931
  };
747
- __decorate([
748
- Input(), TrackExternal({ delegateTo: 'inputModel' }),
749
- __metadata("design:type", Object)
750
- ], SelectInputComponent.prototype, "valueModel", void 0);
751
932
  __decorate([
752
933
  Input(), TrackExternal(),
753
934
  __metadata("design:type", ListModel)
@@ -779,7 +960,7 @@ __decorate([
779
960
  SelectInputComponent = __decorate([
780
961
  Component({
781
962
  selector: 'aup-select-input',
782
- template: "<mat-form-field appearance=\"standard\" [floatLabel]=\"floatLabel\">\n <mat-label *ngIf=\"label\">{{label}}</mat-label>\n <mat-select placeholder=\"{{placeholder}}\"\n [(ngModel)]=\"valueModel.value\"\n [disabled]=\"!enabled.value\"\n (keydown.enter)=\"notifyEnterKey()\"\n (keydown.escape)=\"notifyEscapeKey()\"\n [pectinFocusBinding]=\"focusContext\"\n [errorStateMatcher]=\"errorStateMatcher\"\n >\n <mat-option *ngIf=\"allowNil\">{{placeholder}}</mat-option>\n <mat-option *ngFor=\"let option of optionsModel.value; let i = index\" [value]=\"option\">\n <ng-container *ngIf=\"!optionTemplateRef\">{{optionLabelFormat(option)}}</ng-container>\n <ng-container *ngIf=\"optionTemplateRef\"\n [ngTemplateOutlet]=\"optionTemplateRef\"\n [ngTemplateOutletContext]=\"{ $implicit: option, index: i }\"\n >\n </ng-container>\n </mat-option>\n </mat-select>\n <mat-hint *ngIf=\"hint\">{{hint}}</mat-hint>\n <mat-error *ngIf=\"hasErrors\">{{firstError}}</mat-error>\n</mat-form-field>\n",
963
+ template: "<mat-form-field appearance=\"standard\" [floatLabel]=\"floatLabel\">\n <mat-label *ngIf=\"label\">{{label}}</mat-label>\n <mat-select placeholder=\"{{placeholder}}\"\n [(ngModel)]=\"valueModel.value\"\n [disabled]=\"!enabled.value\"\n (keydown.enter)=\"notifyEnterKey()\"\n (keydown.escape)=\"notifyEscapeKey()\"\n [pectinFocusBinding]=\"focusContext\"\n [errorStateMatcher]=\"errorStateMatcher\"\n >\n <mat-option *ngIf=\"allowNil\">{{placeholder}}</mat-option>\n <mat-option *ngFor=\"let option of optionsModel.value; let i = index\" [value]=\"option\">\n <ng-container *ngIf=\"!optionTemplateRef\">{{optionLabelFormat(option)}}</ng-container>\n <ng-container *ngIf=\"optionTemplateRef\"\n [ngTemplateOutlet]=\"optionTemplateRef\"\n [ngTemplateOutletContext]=\"{ $implicit: option, index: i }\"\n >\n </ng-container>\n </mat-option>\n </mat-select>\n <mat-hint *ngIf=\"showHint\">{{hint}}</mat-hint>\n <mat-error *ngIf=\"hasErrors\">{{firstError}}</mat-error>\n</mat-form-field>\n",
783
964
  styles: [":host{display:inline-block}mat-form-field{width:100%}"]
784
965
  }),
785
966
  __metadata("design:paramtypes", [])
@@ -797,10 +978,6 @@ let StringInputComponent = class StringInputComponent extends AbstractValueInput
797
978
  ngOnInit() {
798
979
  }
799
980
  };
800
- __decorate([
801
- Input(), TrackExternal({ delegateTo: 'inputModel' }),
802
- __metadata("design:type", Object)
803
- ], StringInputComponent.prototype, "valueModel", void 0);
804
981
  __decorate([
805
982
  Input(), TrackExternal({ defaultValue: false }),
806
983
  __metadata("design:type", ValueModel)
@@ -812,8 +989,8 @@ __decorate([
812
989
  StringInputComponent = __decorate([
813
990
  Component({
814
991
  selector: 'aup-string-input',
815
- template: "<mat-form-field appearance=\"standard\" [floatLabel]=\"floatLabel\">\n <mat-label *ngIf=\"label\">{{label}}</mat-label>\n <input matInput\n placeholder=\"{{placeholder}}\"\n [(ngModel)]=\"valueModel.value\"\n [disabled]=\"!enabled.value\"\n (keydown.enter)=\"notifyEnterKey()\"\n (keydown.escape)=\"notifyEscapeKey()\"\n [pectinFocusBinding]=\"focusContext\"\n [errorStateMatcher]=\"errorStateMatcher\"\n >\n <mat-hint *ngIf=\"hint\">{{hint}}</mat-hint>\n <mat-error *ngIf=\"hasErrors\">{{firstError}}</mat-error>\n <button mat-button mat-icon-button matSuffix *ngIf=\"enableClear\" [pectinCommand]=\"clearCommand\">\n <aup-icon icon=\"mat:close\"></aup-icon>\n </button>\n</mat-form-field>\n\n",
816
- styles: [":host{display:block}input,mat-form-field{width:100%}input mat-hint.faux-error,mat-form-field mat-hint.faux-error{color:#f44336}:host-context(aup-table-cell-renderer) mat-form-field div.mat-form-field-infix{width:auto}button[disabled]{visibility:hidden}"]
992
+ template: "<mat-form-field appearance=\"standard\" [floatLabel]=\"floatLabel\">\n <mat-label *ngIf=\"label\">{{label}}</mat-label>\n <input matInput\n placeholder=\"{{placeholder}}\"\n [(ngModel)]=\"valueModel.value\"\n [disabled]=\"!enabled.value\"\n (keydown.enter)=\"notifyEnterKey()\"\n (keydown.escape)=\"notifyEscapeKey()\"\n [pectinFocusBinding]=\"focusContext\"\n [errorStateMatcher]=\"errorStateMatcher\"\n >\n <mat-hint *ngIf=\"showHint\">{{hint}}</mat-hint>\n <mat-error *ngIf=\"hasErrors\">{{firstError}}</mat-error>\n <button mat-button mat-icon-button matSuffix *ngIf=\"enableClear\" [pectinCommand]=\"clearCommand\">\n <aup-icon icon=\"mat:close\"></aup-icon>\n </button>\n</mat-form-field>\n\n",
993
+ styles: ["button[disabled]{visibility:hidden}"]
817
994
  }),
818
995
  __metadata("design:paramtypes", [])
819
996
  ], StringInputComponent);
@@ -821,16 +998,14 @@ StringInputComponent = __decorate([
821
998
  let TextInputComponent = class TextInputComponent extends AbstractValueInputComponent {
822
999
  constructor() {
823
1000
  super();
1001
+ // @Input() @TrackExternal({ delegateTo: 'inputModel' })
1002
+ // valueModel: Form.ValueModelBase<string> | IMutableValueModel<string>;
824
1003
  this.rows = 2;
825
1004
  // const { chain, valueOf, before, when, after, observe, switchOn } = Dsl.disposeWith(this);
826
1005
  }
827
1006
  ngOnInit() {
828
1007
  }
829
1008
  };
830
- __decorate([
831
- Input(), TrackExternal({ delegateTo: 'inputModel' }),
832
- __metadata("design:type", Object)
833
- ], TextInputComponent.prototype, "valueModel", void 0);
834
1009
  __decorate([
835
1010
  Input(),
836
1011
  __metadata("design:type", Object)
@@ -842,12 +1017,47 @@ __decorate([
842
1017
  TextInputComponent = __decorate([
843
1018
  Component({
844
1019
  selector: 'aup-text-input',
845
- template: "<mat-form-field appearance=\"standard\" [floatLabel]=\"floatLabel\">\n <mat-label *ngIf=\"label\">{{label}}</mat-label>\n <textarea matInput\n placeholder=\"{{placeholder}}\"\n [(ngModel)]=\"valueModel.value\"\n [disabled]=\"!enabled.value\"\n (keydown.enter)=\"notifyEnterKey()\"\n (keydown.escape)=\"notifyEscapeKey()\"\n [pectinFocusBinding]=\"focusContext\"\n [errorStateMatcher]=\"errorStateMatcher\"\n [rows]=\"rows\"\n [cols]=\"cols\"\n >\n </textarea>\n <mat-hint *ngIf=\"hint\">{{hint}}</mat-hint>\n <mat-error *ngIf=\"hasErrors\">{{firstError}}</mat-error>\n</mat-form-field>\n\n",
846
- styles: [":host{display:block}input,mat-form-field{width:100%}input mat-hint.faux-error,mat-form-field mat-hint.faux-error{color:#f44336}:host-context(aup-table-cell-renderer) mat-form-field div.mat-form-field-infix{width:auto}button[disabled]{visibility:hidden}textarea{overflow:auto}"]
1020
+ template: "<mat-form-field appearance=\"standard\" [floatLabel]=\"floatLabel\">\n <mat-label *ngIf=\"label\">{{label}}</mat-label>\n <textarea matInput\n placeholder=\"{{placeholder}}\"\n [(ngModel)]=\"valueModel.value\"\n [disabled]=\"!enabled.value\"\n (keydown.enter)=\"notifyEnterKey()\"\n (keydown.escape)=\"notifyEscapeKey()\"\n [pectinFocusBinding]=\"focusContext\"\n [errorStateMatcher]=\"errorStateMatcher\"\n [rows]=\"rows\"\n [cols]=\"cols\"\n >\n </textarea>\n <mat-hint *ngIf=\"showHint\">{{hint}}</mat-hint>\n <mat-error *ngIf=\"hasErrors\">{{firstError}}</mat-error>\n</mat-form-field>\n\n",
1021
+ styles: ["button[disabled]{visibility:hidden}textarea{overflow:auto}"]
847
1022
  }),
848
1023
  __metadata("design:paramtypes", [])
849
1024
  ], TextInputComponent);
850
1025
 
1026
+ let IconComponent = class IconComponent {
1027
+ set icon(iconName) {
1028
+ this._icon = iconName;
1029
+ if (!iconName) {
1030
+ this.errorMessage = 'icon is nil';
1031
+ this.prefix = undefined;
1032
+ return;
1033
+ }
1034
+ const colonIndex = iconName.indexOf(':');
1035
+ if (colonIndex > 0) {
1036
+ this.prefix = this.icon.slice(0, colonIndex);
1037
+ this.suffix = this.icon.slice(colonIndex + 1);
1038
+ }
1039
+ if (this.prefix) {
1040
+ this.errorMessage = `Unknown icon "${iconName}"`;
1041
+ }
1042
+ this.errorMessage = `Unknown icon prefix "${this.prefix}"`;
1043
+ }
1044
+ get icon() {
1045
+ return this._icon;
1046
+ }
1047
+ };
1048
+ __decorate([
1049
+ Input(),
1050
+ __metadata("design:type", String),
1051
+ __metadata("design:paramtypes", [String])
1052
+ ], IconComponent.prototype, "icon", null);
1053
+ IconComponent = __decorate([
1054
+ Component({
1055
+ selector: 'aup-icon',
1056
+ template: "<ng-container [ngSwitch]=\"prefix\">\n\n <mat-icon *ngSwitchCase=\"'svg'\"\n [svgIcon]=\"suffix\"\n class=\"svgIcon\">\n </mat-icon>\n\n <mat-icon *ngSwitchCase=\"'mat'\">\n {{suffix}}\n </mat-icon>\n\n <div *ngSwitchCase=\"'fab'\"\n class=\"faIconWrapper\">\n <fa-icon [icon]=\"suffix\">\n </fa-icon>\n </div>\n\n <mat-icon *ngSwitchDefault\n [matTooltip]=\"errorMessage\">\n bug_report\n </mat-icon>\n\n</ng-container>\n\n",
1057
+ styles: [":host{display:inline-flex;width:24px}fa-icon{vertical-align:middle}.faIconWrapper{text-align:center;width:24px;height:24px}.svgIcon{width:24px;height:24px}:host(.mat-chip-remove) mat-icon{font-size:18px}mat-icon{width:inherit;height:inherit}"]
1058
+ })
1059
+ ], IconComponent);
1060
+
851
1061
  let NoopComponent = class NoopComponent {
852
1062
  constructor() {
853
1063
  }
@@ -1032,6 +1242,7 @@ class CellHeaderPortalRef extends CellPortalRef {
1032
1242
  assert$1.isTruthy(host);
1033
1243
  host[HEADER_CELL_RENDERER_PORTAL] = new ComponentPortal(this.componentType);
1034
1244
  }
1245
+ // @Trace()
1035
1246
  onPortalAttached(host, portalComponent) {
1036
1247
  this.initialiseHeader(portalComponent, host.column);
1037
1248
  }
@@ -1047,13 +1258,15 @@ class ComponentCellRendererPortalRef extends CellRendererPortalRef {
1047
1258
  initialiseHost(host, columnModel) {
1048
1259
  host[CELL_RENDERER_PORTAL] = new ComponentPortal(this.componentType);
1049
1260
  }
1261
+ // @Trace()
1050
1262
  onPortalAttached(host, portalComponent) {
1051
1263
  host[PORTAL_RENDERER_COMPONENT] = portalComponent;
1052
- this.updateComponent(portalComponent, host.getRowData());
1264
+ this.updateComponent(portalComponent, host.getRowData(), true);
1053
1265
  }
1266
+ // @Trace()
1054
1267
  pushState(host) {
1055
1268
  if (host[PORTAL_RENDERER_COMPONENT]) {
1056
- this.updateComponent(host[PORTAL_RENDERER_COMPONENT], host.getRowData());
1269
+ this.updateComponent(host[PORTAL_RENDERER_COMPONENT], host.getRowData(), false);
1057
1270
  }
1058
1271
  }
1059
1272
  }
@@ -1090,6 +1303,7 @@ class TemplateCellRendererPortalRef extends CellRendererPortalRef {
1090
1303
  onPortalAttached(host, portalComponent) {
1091
1304
  // don't care
1092
1305
  }
1306
+ // @Trace()
1093
1307
  pushState(host) {
1094
1308
  host[CELL_RENDERER_PORTAL] = this.createPortal(host.getRowData());
1095
1309
  host.fillCell = this.fillCell;
@@ -1346,21 +1560,34 @@ __decorate([
1346
1560
  __metadata("design:returntype", Object)
1347
1561
  ], ColumnModel.prototype, "getColumnTextProperties", null);
1348
1562
  class PropertyColumnModel extends ColumnModel {
1349
- constructor(property, defaults) {
1350
- super(property.toString(), defaults);
1563
+ constructor(id, property, defaults) {
1564
+ super(id, defaults);
1351
1565
  this.property = property;
1352
1566
  this._format = (value) => value;
1353
1567
  this.cellRenderer(DefaultCellRendererComponent);
1354
1568
  }
1355
- cellRenderer(componentType) {
1356
- this.configureCellRenderer(new ComponentCellRendererPortalRef(componentType, (component, rowData) => {
1569
+ cellRenderer(componentType, onComponentInitOrOptions) {
1570
+ this.configureCellRenderer(new ComponentCellRendererPortalRef(componentType, (component, rowData, firstTime) => {
1571
+ if (firstTime) {
1572
+ if (___default.isFunction(onComponentInitOrOptions)) {
1573
+ onComponentInitOrOptions(component);
1574
+ }
1575
+ else {
1576
+ if (___default.isFunction(onComponentInitOrOptions === null || onComponentInitOrOptions === void 0 ? void 0 : onComponentInitOrOptions.onComponentInit)) {
1577
+ onComponentInitOrOptions.onComponentInit(component);
1578
+ }
1579
+ }
1580
+ }
1357
1581
  component.value = this._format(rowData.row[this.property]);
1582
+ if (!___default.isFunction(onComponentInitOrOptions) && ___default.isFunction(onComponentInitOrOptions === null || onComponentInitOrOptions === void 0 ? void 0 : onComponentInitOrOptions.onRowUpdate)) {
1583
+ onComponentInitOrOptions.onRowUpdate(component, rowData.row);
1584
+ }
1358
1585
  }));
1359
1586
  return this;
1360
1587
  }
1361
- cellEditor(editor, validatorsOrInitialiser, initialiseComponent) {
1588
+ cellEditor(editor, validatorsOrInitialiser, onComponentInit) {
1362
1589
  const validators = Array.isArray(validatorsOrInitialiser) ? validatorsOrInitialiser : undefined;
1363
- const initialiser = ___default.isFunction(validatorsOrInitialiser) ? validatorsOrInitialiser : initialiseComponent;
1590
+ const initialiser = ___default.isFunction(validatorsOrInitialiser) ? validatorsOrInitialiser : onComponentInit;
1364
1591
  this.configureCellEditor(new CellEditorPortalRef(editor, (component, editSession) => {
1365
1592
  const formValueModel = editSession.form.pluck(this.property);
1366
1593
  if (validators) {
@@ -1383,8 +1610,8 @@ class PropertyColumnModel extends ColumnModel {
1383
1610
  }
1384
1611
  }
1385
1612
  class ListPropertyColumnModel extends ColumnModel {
1386
- constructor(property, defaults) {
1387
- super(property.toString(), defaults);
1613
+ constructor(id, property, defaults) {
1614
+ super(id, defaults);
1388
1615
  this.property = property;
1389
1616
  this._format = (value) => value.map(v => v === null || v === void 0 ? void 0 : v.toString()).join(', ');
1390
1617
  this.cellRenderer(DefaultCellRendererComponent);
@@ -1425,8 +1652,11 @@ class CustomValueColumnModel extends ColumnModel {
1425
1652
  this.getValue = getValue;
1426
1653
  this.cellRenderer(DefaultCellRendererComponent);
1427
1654
  }
1428
- cellRenderer(componentType) {
1429
- this.configureCellRenderer(new ComponentCellRendererPortalRef(componentType, (component, rowData) => {
1655
+ cellRenderer(componentType, onComponentInit) {
1656
+ this.configureCellRenderer(new ComponentCellRendererPortalRef(componentType, (component, rowData, firstTime) => {
1657
+ if (firstTime && ___default.isFunction(onComponentInit)) {
1658
+ onComponentInit(component);
1659
+ }
1430
1660
  component.value = this.getValue(rowData.row);
1431
1661
  }));
1432
1662
  return this;
@@ -1600,7 +1830,7 @@ let TableModel = TableModel_1 = class TableModel {
1600
1830
  this.dataSource = chain(this.sourceOfTruth).replaceAll(this.rowsBeingEdited);
1601
1831
  this.firstEditableColumn = chain(this.columns).select(c => c.hasEditorPortal()).first();
1602
1832
  this.hasColumnsWithRowSelectionExplicitlyEnabled = chain(this._columns).findIndex(column => column.isRowSelectionExplicitlyEnabled()).isGreaterThanOrEqualTo(0);
1603
- this.addRowClass("enable-hover", () => this.isRowSelectionEnabled());
1833
+ this.addRowClass('enable-hover', () => this.isRowSelectionEnabled());
1604
1834
  }
1605
1835
  static fromList(sourceOfTruth, builder) {
1606
1836
  const model = new TableModel_1(sourceOfTruth);
@@ -1618,11 +1848,11 @@ let TableModel = TableModel_1 = class TableModel {
1618
1848
  get columns() {
1619
1849
  return this._columns.readonly;
1620
1850
  }
1621
- pluck(property) {
1622
- return this.addColumn(new PropertyColumnModel(property, this));
1851
+ pluck(property, options) {
1852
+ return this.addColumn(new PropertyColumnModel((options === null || options === void 0 ? void 0 : options.columnId) || property.toString(), property, this));
1623
1853
  }
1624
- pluckList(property) {
1625
- return this.addColumn(new ListPropertyColumnModel(property, this));
1854
+ pluckList(property, options) {
1855
+ return this.addColumn(new ListPropertyColumnModel((options === null || options === void 0 ? void 0 : options.columnId) || property.toString(), property, this));
1626
1856
  }
1627
1857
  addSelectionColumn(selectionModel) {
1628
1858
  assert.isNil(this.selectionColumnModel);
@@ -1636,6 +1866,9 @@ let TableModel = TableModel_1 = class TableModel {
1636
1866
  addCustomColumn(columnId, dataAccessor) {
1637
1867
  return this.addColumn(new CustomValueColumnModel(columnId, this, dataAccessor));
1638
1868
  }
1869
+ addComponentColumn(columnId, component, onInit) {
1870
+ return this.addColumn(new CustomValueColumnModel(columnId, this, row => row)).cellRenderer(component, onInit);
1871
+ }
1639
1872
  addTemplateColumn(columnId) {
1640
1873
  return this.addColumn(new CustomTemplateColumnModel(columnId, this));
1641
1874
  }
@@ -1784,7 +2017,6 @@ TableComponent = __decorate([
1784
2017
  Component({
1785
2018
  selector: 'aup-table',
1786
2019
  template: "<table mat-table [dataSource]=\"tableModel.dataSource.value\" [trackBy]=\"tableModel.getTrackByFunction()\">\n\n <ng-container *ngFor=\"let column of columns.value; index as index; first as first; last as last\" matColumnDef=\"{{column.columnId}}\">\n <th mat-header-cell *matHeaderCellDef>\n <aup-table-header-cell-renderer [column]=\"column\"\n [attr.column-index]=\"index\"\n [attr.column-id]=\"column.columnId\"\n [class.first-column]=\"first\"\n [class.last-column]=\"last\"\n ></aup-table-header-cell-renderer>\n </th>\n <td mat-cell *matCellDef=\"let row\" (click)=\"onCellClicked(column, row)\" [class.enable-cursor]=\"tableModel.isRowSelectionEnabledFor(column)\">\n <aup-table-cell-renderer [column]=\"column\"\n [row]=\"row\"\n [tableModel]=\"tableModel\"\n [editSession]=\"tableModel.getEditSessionFor(row)\"\n [attr.column-index]=\"index\"\n [attr.column-id]=\"column.columnId\"\n [class.first-column]=\"first\"\n [class.last-column]=\"last\"\n ></aup-table-cell-renderer>\n </td>\n </ng-container>\n\n <tr mat-header-row *matHeaderRowDef=\"columnIds.value\"></tr>\n <tr mat-row *matRowDef=\"let row; columns: columnIds.value;\"\n [ngClass]=\"tableModel.getRowClasses(row)\"\n ></tr>\n\n</table>\n",
1787
- encapsulation: ViewEncapsulation.None,
1788
2020
  styles: [":host{display:flex;flex-direction:column;align-items:stretch}:host table{flex:1}"]
1789
2021
  }),
1790
2022
  __metadata("design:paramtypes", [])
@@ -2041,90 +2273,6 @@ VerticalFocusContainerComponent = __decorate([
2041
2273
  __metadata("design:paramtypes", [FocusManager])
2042
2274
  ], VerticalFocusContainerComponent);
2043
2275
 
2044
- let MultipleSelectInputComponent = class MultipleSelectInputComponent extends AbstractListInputComponent {
2045
- constructor() {
2046
- super();
2047
- this.optionLabelFormat = (option) => (option && this.optionLabel) ? option[this.optionLabel] : option;
2048
- }
2049
- ngOnInit() {
2050
- }
2051
- };
2052
- __decorate([
2053
- Input(), TrackExternal({ delegateTo: 'inputModel' }),
2054
- __metadata("design:type", Object)
2055
- ], MultipleSelectInputComponent.prototype, "listModel", void 0);
2056
- __decorate([
2057
- Input(), TrackExternal(),
2058
- __metadata("design:type", ListModel)
2059
- ], MultipleSelectInputComponent.prototype, "optionsModel", void 0);
2060
- __decorate([
2061
- Input(), StoreInListModel('optionsModel'),
2062
- __metadata("design:type", Array)
2063
- ], MultipleSelectInputComponent.prototype, "options", void 0);
2064
- __decorate([
2065
- Input(),
2066
- __metadata("design:type", Object)
2067
- ], MultipleSelectInputComponent.prototype, "optionLabel", void 0);
2068
- __decorate([
2069
- Input(),
2070
- __metadata("design:type", Boolean)
2071
- ], MultipleSelectInputComponent.prototype, "allowNil", void 0);
2072
- __decorate([
2073
- ContentChild('optionTemplate'),
2074
- __metadata("design:type", TemplateRef)
2075
- ], MultipleSelectInputComponent.prototype, "optionTemplateRef", void 0);
2076
- __decorate([
2077
- ContentChild('nilOptionTemplate'),
2078
- __metadata("design:type", TemplateRef)
2079
- ], MultipleSelectInputComponent.prototype, "nilOptionTemplateRef", void 0);
2080
- __decorate([
2081
- Input(),
2082
- __metadata("design:type", Function)
2083
- ], MultipleSelectInputComponent.prototype, "optionLabelFormat", void 0);
2084
- MultipleSelectInputComponent = __decorate([
2085
- Component({
2086
- selector: 'aup-multiple-select-input',
2087
- template: "<mat-form-field appearance=\"standard\" [floatLabel]=\"floatLabel\">\n <mat-label *ngIf=\"label\">{{label}}</mat-label>\n <mat-select placeholder=\"{{placeholder}}\"\n multiple\n [(ngModel)]=\"listModel.value\"\n [disabled]=\"!enabled.value\"\n (keydown.enter)=\"notifyEnterKey()\"\n (keydown.escape)=\"notifyEscapeKey()\"\n [pectinFocusBinding]=\"focusContext\"\n [errorStateMatcher]=\"errorStateMatcher\"\n >\n <mat-option *ngIf=\"allowNil\">{{placeholder}}</mat-option>\n <mat-option *ngFor=\"let option of optionsModel.value; let i = index\" [value]=\"option\">\n <ng-container *ngIf=\"!optionTemplateRef\">{{optionLabelFormat(option)}}</ng-container>\n <ng-container *ngIf=\"optionTemplateRef\"\n [ngTemplateOutlet]=\"optionTemplateRef\"\n [ngTemplateOutletContext]=\"{ $implicit: option, index: i }\"\n >\n </ng-container>\n </mat-option>\n </mat-select>\n <mat-hint *ngIf=\"hint\">{{hint}}</mat-hint>\n <mat-error *ngIf=\"hasErrors\">{{firstError}}</mat-error>\n</mat-form-field>\n",
2088
- styles: [":host{display:inline-block}mat-form-field{width:100%}"]
2089
- }),
2090
- __metadata("design:paramtypes", [])
2091
- ], MultipleSelectInputComponent);
2092
-
2093
- let IconComponent = class IconComponent {
2094
- set icon(iconName) {
2095
- this._icon = iconName;
2096
- if (!iconName) {
2097
- this.errorMessage = 'icon is nil';
2098
- this.prefix = undefined;
2099
- return;
2100
- }
2101
- const colonIndex = iconName.indexOf(':');
2102
- if (colonIndex > 0) {
2103
- this.prefix = this.icon.slice(0, colonIndex);
2104
- this.suffix = this.icon.slice(colonIndex + 1);
2105
- }
2106
- if (this.prefix) {
2107
- this.errorMessage = `Unknown icon "${iconName}"`;
2108
- }
2109
- this.errorMessage = `Unknown icon prefix "${this.prefix}"`;
2110
- }
2111
- get icon() {
2112
- return this._icon;
2113
- }
2114
- };
2115
- __decorate([
2116
- Input(),
2117
- __metadata("design:type", String),
2118
- __metadata("design:paramtypes", [String])
2119
- ], IconComponent.prototype, "icon", null);
2120
- IconComponent = __decorate([
2121
- Component({
2122
- selector: 'aup-icon',
2123
- template: "<ng-container [ngSwitch]=\"prefix\">\n\n <mat-icon *ngSwitchCase=\"'svg'\"\n [svgIcon]=\"suffix\"\n class=\"svgIcon\">\n </mat-icon>\n\n <mat-icon *ngSwitchCase=\"'mat'\">\n {{suffix}}\n </mat-icon>\n\n <div *ngSwitchCase=\"'fab'\"\n class=\"faIconWrapper\">\n <fa-icon [icon]=\"suffix\">\n </fa-icon>\n </div>\n\n <mat-icon *ngSwitchDefault\n [matTooltip]=\"errorMessage\">\n bug_report\n </mat-icon>\n\n</ng-container>\n\n",
2124
- styles: [":host{display:inline-flex;width:24px}fa-icon{vertical-align:middle}.faIconWrapper{text-align:center;width:24px;height:24px}.svgIcon{width:24px;height:24px}:host(.mat-chip-remove) mat-icon{font-size:18px}mat-icon{width:inherit;height:inherit}"]
2125
- })
2126
- ], IconComponent);
2127
-
2128
2276
  let ComponentsModule = class ComponentsModule {
2129
2277
  constructor(faIconLibrary) {
2130
2278
  faIconLibrary.addIconPacks(fas);
@@ -2144,6 +2292,8 @@ ComponentsModule = __decorate([
2144
2292
  TextInputComponent,
2145
2293
  PasswordInputComponent,
2146
2294
  SelectInputComponent,
2295
+ MultipleSelectInputComponent,
2296
+ AutocompleteInputComponent,
2147
2297
  CheckboxInputComponent,
2148
2298
  ScrollContainerComponent,
2149
2299
  NoopComponent,
@@ -2163,7 +2313,6 @@ ComponentsModule = __decorate([
2163
2313
  SelectHeaderCellRendererComponent,
2164
2314
  DefaultHeaderCellRendererComponent,
2165
2315
  TableHeaderCellRendererComponent,
2166
- MultipleSelectInputComponent,
2167
2316
  IconComponent,
2168
2317
  SectionHeaderComponent
2169
2318
  ],
@@ -2183,7 +2332,8 @@ ComponentsModule = __decorate([
2183
2332
  PortalModule,
2184
2333
  CdkScrollableModule,
2185
2334
  FontAwesomeModule,
2186
- MatTooltipModule
2335
+ MatTooltipModule,
2336
+ MatAutocompleteModule
2187
2337
  ],
2188
2338
  exports: [
2189
2339
  NumberInputComponent,
@@ -2192,6 +2342,8 @@ ComponentsModule = __decorate([
2192
2342
  PasswordInputComponent,
2193
2343
  CheckboxInputComponent,
2194
2344
  SelectInputComponent,
2345
+ MultipleSelectInputComponent,
2346
+ AutocompleteInputComponent,
2195
2347
  ScrollContainerComponent,
2196
2348
  NoopComponent,
2197
2349
  SwitchCaseComponent,
@@ -2204,12 +2356,23 @@ ComponentsModule = __decorate([
2204
2356
  TableComponent,
2205
2357
  EditRowControls,
2206
2358
  ColumnTemplateDirective,
2207
- MultipleSelectInputComponent,
2208
2359
  IconComponent,
2209
2360
  SectionHeaderComponent
2210
2361
  ],
2211
2362
  providers: [
2212
- FocusBindingFactory,
2363
+ FocusBindingFactory
2364
+ // {
2365
+ // provide: CELL_EDITOR_REGISTRATION, useValue: {
2366
+ // type: 'string',
2367
+ // editorClass: StringInputComponent
2368
+ // }, multi: true
2369
+ // },
2370
+ // {
2371
+ // provide: CELL_EDITOR_REGISTRATION, useValue: {
2372
+ // type: 'number',
2373
+ // editorClass: NumberInputComponent
2374
+ // }, multi: true
2375
+ // }
2213
2376
  ]
2214
2377
  }),
2215
2378
  __metadata("design:paramtypes", [FaIconLibrary])
@@ -6039,5 +6202,5 @@ function VisitParameterList(options) {
6039
6202
  * Generated bundle index. Do not edit.
6040
6203
  */
6041
6204
 
6042
- export { ACTIVITY_DATA, AUP_PLACE_CONFIG, AbstractInputActivity, AbstractInputComponent, AbstractInteractionContext, AbstractListInputComponent, AbstractPlaceNavigationComponent, AbstractPopStateNavigation, AbstractValueInputComponent, Activity, ActivityActionsComponent, ActivityContainerComponent, ActivityOutletComponent, ActivityRef, AddItemInteractionContextComponent, AlertDialogComponent, AngularUiPowerupsModule, Bounds, BusyOverlayComponent, CELL_EDITOR_PORTAL, CELL_RENDERER_PORTAL, CardContainerComponent, CellEditorPortalRef, CellHeaderPortalRef, CellPortalRef, CellRendererPortalRef, CheckboxInputComponent, ColumnModel, ColumnTemplateDirective, CommandDirective, ComponentCellRendererPortalRef, ComponentsModule, ConfirmThenDialogComponent, ConfirmationDialogComponent, ConsolidatedParameterMap, CustomTemplateColumnModel, CustomValueColumnModel, DEFINITION_META_DATA_KEY, DIALOG_INTERACTION_SERVICE_DEFAULTS, DefaultCellRendererComponent, DefaultHeaderCellRendererComponent, DialogInteractionContext, DialogInteractionContextFactory, Dimension, DirectivesModule, DisposableComponent, EditRowControls, EditSession, EditorControlColumnModel, EmptyStateComponent, EventCleanUpSession, FocusBinding, FocusBindingDirective, FocusBindingFactory, FocusContainerComponent, FocusableComponent, Formatter, HEADER_CELL_RENDERER_PORTAL, IconComponent, InPlaceInteractionContextComponent, InteractionContextTriggerFor, InteractionModule, InteractionService, InteractionServiceRoutingAdapter, LEFT_RIGHT_PLACE_ANIMATION, ListPlaceNavComponent, ListPropertyColumnModel, ModalInteractionContextFactory, MultipleSelectInputComponent, Navigating, NavigatingDuringInteraction, NavigationContext, NavigationSession, NoopAuthGuard, NoopComponent, NumberInputComponent, PORTAL_EDITOR_COMPONENT, PORTAL_RENDERER_COMPONENT, ParameterDefinition, PasswordInputComponent, Place, PlaceComponent, PlaceComponentDeactivationHandler, PlaceDefinition, PlaceGuard, PlaceHistory, PlaceModule, PlaceOutletComponent, PlaceRouter, Point, PopStateDuringInteractionNavigation, PopStateNavigation, PopupInteractionContextComponent, PropertyColumnModel, ROUTE_PARAMETER_LIST_KEY, RemoveLastInteractionFromUrlNavigationSession, ResizeAwareComponent, RouteId, ScrollContainerComponent, SectionHeaderComponent, SelectCellRendererComponent, SelectHeaderCellRendererComponent, SelectInputActivity, SelectInputComponent, SelectionColumnModel, SidePlaceNavigationComponent, StringInputActivity, StringInputComponent, SwitchCaseComponent, SwitchCaseDefaultDirective, SwitchCaseOption, SwitchCaseWhenDirective, SynchroniseInteractionContextIdsWithRoute, TabbedPlaceNavigationComponent, TableCellRendererComponent, TableComponent, TableHeaderCellRendererComponent, TableModel, TemplateCellRendererPortalRef, TextInputComponent, UrlService, UrlSnapshot, VerticalFocusContainerComponent, Visit, VisitParameter, VisitParameterList, VisitSanitiser, WaitUntilLeavingInteractionTransitionCancelled, WaitUntilLinkTriggeredNavigationInteractionCancellationEventsFinish, WaitUntilPopStateDuringCanDeactivateInteractionFinishes, leftRightPlaceAnimation, slideDownOnEnterAnimation, slideRightOnEnterAnimation, ɵ0, DirectivesModule as ɵa, CommandDirective as ɵb, EditRowControls as ɵba, ColumnTemplateDirective as ɵbb, DefaultCellRendererComponent as ɵbc, TableCellRendererComponent as ɵbd, SelectCellRendererComponent as ɵbe, SelectHeaderCellRendererComponent as ɵbf, DefaultHeaderCellRendererComponent as ɵbg, TableHeaderCellRendererComponent as ɵbh, MultipleSelectInputComponent as ɵbi, IconComponent as ɵbj, SectionHeaderComponent as ɵbk, PlaceModule as ɵbl, ComponentsModule as ɵbm, EmptyStateComponent as ɵbn, BusyOverlayComponent as ɵbo, PlaceOutletComponent as ɵbp, leftRightPlaceAnimation as ɵbq, LEFT_RIGHT_PLACE_ANIMATION as ɵbr, AUP_PLACE_CONFIG as ɵbs, PlaceRouter as ɵbu, InteractionService as ɵbv, ModalInteractionContextFactory as ɵbw, UrlService as ɵbx, PlaceHistory as ɵby, TabbedPlaceNavigationComponent as ɵbz, FocusBindingDirective as ɵc, AbstractPlaceNavigationComponent as ɵca, ListPlaceNavComponent as ɵcb, SidePlaceNavigationComponent as ɵcc, InteractionModule as ɵcd, ActivityContainerComponent as ɵce, AbstractInteractionContext as ɵcf, ActivityOutletComponent as ɵcg, ConfirmationDialogComponent as ɵch, ACTIVITY_DATA as ɵci, Activity as ɵcj, ConfirmThenDialogComponent as ɵcl, AlertDialogComponent as ɵcm, InPlaceInteractionContextComponent as ɵco, AddItemInteractionContextComponent as ɵcp, ActivityActionsComponent as ɵcq, PopupInteractionContextComponent as ɵcr, StringInputActivity as ɵcs, AbstractInputActivity as ɵct, SelectInputActivity as ɵcu, InteractionContextTriggerFor as ɵcv, DisposableComponent as ɵd, FocusBindingFactory as ɵe, ComponentsModule as ɵf, AbstractInputComponent as ɵg, AbstractValueInputComponent as ɵh, AbstractListInputComponent as ɵi, NumberInputComponent as ɵj, StringInputComponent as ɵk, TextInputComponent as ɵl, PasswordInputComponent as ɵm, SelectInputComponent as ɵn, CheckboxInputComponent as ɵo, ScrollContainerComponent as ɵp, NoopComponent as ɵq, SwitchCaseOption as ɵr, SwitchCaseWhenDirective as ɵs, SwitchCaseDefaultDirective as ɵt, SwitchCaseComponent as ɵu, FocusContainerComponent as ɵv, VerticalFocusContainerComponent as ɵw, FocusableComponent as ɵx, CardContainerComponent as ɵy, TableComponent as ɵz };
6205
+ export { ACTIVITY_DATA, AUP_PLACE_CONFIG, AbstractInputActivity, AbstractInputComponent, AbstractInteractionContext, AbstractListInputComponent, AbstractPlaceNavigationComponent, AbstractPopStateNavigation, AbstractValueInputComponent, Activity, ActivityActionsComponent, ActivityContainerComponent, ActivityOutletComponent, ActivityRef, AddItemInteractionContextComponent, AlertDialogComponent, AngularUiPowerupsModule, AutocompleteInputComponent, Bounds, BusyOverlayComponent, CELL_EDITOR_PORTAL, CELL_RENDERER_PORTAL, CardContainerComponent, CellEditorPortalRef, CellHeaderPortalRef, CellPortalRef, CellRendererPortalRef, CheckboxInputComponent, ColumnModel, ColumnTemplateDirective, CommandDirective, ComponentCellRendererPortalRef, ComponentsModule, ConfirmThenDialogComponent, ConfirmationDialogComponent, ConsolidatedParameterMap, CustomTemplateColumnModel, CustomValueColumnModel, DEFINITION_META_DATA_KEY, DIALOG_INTERACTION_SERVICE_DEFAULTS, DefaultCellRendererComponent, DefaultHeaderCellRendererComponent, DialogInteractionContext, DialogInteractionContextFactory, Dimension, DirectivesModule, DisposableComponent, EditRowControls, EditSession, EditorControlColumnModel, EmptyStateComponent, EventCleanUpSession, FocusBinding, FocusBindingDirective, FocusBindingFactory, FocusContainerComponent, FocusableComponent, Formatter, HEADER_CELL_RENDERER_PORTAL, IconComponent, InPlaceInteractionContextComponent, InteractionContextTriggerFor, InteractionModule, InteractionService, InteractionServiceRoutingAdapter, LEFT_RIGHT_PLACE_ANIMATION, ListPlaceNavComponent, ListPropertyColumnModel, ModalInteractionContextFactory, MultipleSelectInputComponent, Navigating, NavigatingDuringInteraction, NavigationContext, NavigationSession, NoopAuthGuard, NoopComponent, NumberInputComponent, PORTAL_EDITOR_COMPONENT, PORTAL_RENDERER_COMPONENT, ParameterDefinition, PasswordInputComponent, Place, PlaceComponent, PlaceComponentDeactivationHandler, PlaceDefinition, PlaceGuard, PlaceHistory, PlaceModule, PlaceOutletComponent, PlaceRouter, Point, PopStateDuringInteractionNavigation, PopStateNavigation, PopupInteractionContextComponent, PropertyColumnModel, ROUTE_PARAMETER_LIST_KEY, RemoveLastInteractionFromUrlNavigationSession, ResizeAwareComponent, RouteId, ScrollContainerComponent, SectionHeaderComponent, SelectCellRendererComponent, SelectHeaderCellRendererComponent, SelectInputActivity, SelectInputComponent, SelectionColumnModel, SidePlaceNavigationComponent, StringInputActivity, StringInputComponent, SwitchCaseComponent, SwitchCaseDefaultDirective, SwitchCaseOption, SwitchCaseWhenDirective, SynchroniseInteractionContextIdsWithRoute, TabbedPlaceNavigationComponent, TableCellRendererComponent, TableComponent, TableHeaderCellRendererComponent, TableModel, TemplateCellRendererPortalRef, TextInputComponent, UrlService, UrlSnapshot, VerticalFocusContainerComponent, Visit, VisitParameter, VisitParameterList, VisitSanitiser, WaitUntilLeavingInteractionTransitionCancelled, WaitUntilLinkTriggeredNavigationInteractionCancellationEventsFinish, WaitUntilPopStateDuringCanDeactivateInteractionFinishes, leftRightPlaceAnimation, slideDownOnEnterAnimation, slideRightOnEnterAnimation, ɵ0, DirectivesModule as ɵa, CommandDirective as ɵb, CardContainerComponent as ɵba, TableComponent as ɵbb, EditRowControls as ɵbc, ColumnTemplateDirective as ɵbd, DefaultCellRendererComponent as ɵbe, TableCellRendererComponent as ɵbf, SelectCellRendererComponent as ɵbg, SelectHeaderCellRendererComponent as ɵbh, DefaultHeaderCellRendererComponent as ɵbi, TableHeaderCellRendererComponent as ɵbj, IconComponent as ɵbk, SectionHeaderComponent as ɵbl, PlaceModule as ɵbm, ComponentsModule as ɵbn, EmptyStateComponent as ɵbo, BusyOverlayComponent as ɵbp, PlaceOutletComponent as ɵbq, leftRightPlaceAnimation as ɵbr, LEFT_RIGHT_PLACE_ANIMATION as ɵbs, AUP_PLACE_CONFIG as ɵbt, PlaceRouter as ɵbv, InteractionService as ɵbw, ModalInteractionContextFactory as ɵbx, UrlService as ɵby, PlaceHistory as ɵbz, FocusBindingDirective as ɵc, TabbedPlaceNavigationComponent as ɵca, AbstractPlaceNavigationComponent as ɵcb, ListPlaceNavComponent as ɵcc, SidePlaceNavigationComponent as ɵcd, InteractionModule as ɵce, ActivityContainerComponent as ɵcf, AbstractInteractionContext as ɵcg, ActivityOutletComponent as ɵch, ConfirmationDialogComponent as ɵci, ACTIVITY_DATA as ɵcj, Activity as ɵck, ConfirmThenDialogComponent as ɵcm, AlertDialogComponent as ɵcn, InPlaceInteractionContextComponent as ɵcp, AddItemInteractionContextComponent as ɵcq, ActivityActionsComponent as ɵcr, PopupInteractionContextComponent as ɵcs, StringInputActivity as ɵct, AbstractInputActivity as ɵcu, SelectInputActivity as ɵcv, InteractionContextTriggerFor as ɵcw, DisposableComponent as ɵd, FocusBindingFactory as ɵe, ComponentsModule as ɵf, AbstractInputComponent as ɵg, AbstractValueInputComponent as ɵh, AbstractListInputComponent as ɵi, NumberInputComponent as ɵj, StringInputComponent as ɵk, TextInputComponent as ɵl, PasswordInputComponent as ɵm, SelectInputComponent as ɵn, MultipleSelectInputComponent as ɵo, AutocompleteInputComponent as ɵp, CheckboxInputComponent as ɵq, ScrollContainerComponent as ɵr, NoopComponent as ɵs, SwitchCaseOption as ɵt, SwitchCaseWhenDirective as ɵu, SwitchCaseDefaultDirective as ɵv, SwitchCaseComponent as ɵw, FocusContainerComponent as ɵx, VerticalFocusContainerComponent as ɵy, FocusableComponent as ɵz };
6043
6206
  //# sourceMappingURL=coolon-angular-ui-powerups.js.map