@coolon/angular-ui-powerups 2.0.0-alpha.3 → 2.0.0-alpha.31

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 (269) hide show
  1. package/CHANGELOG.md +191 -0
  2. package/assets/commands.scss +3 -0
  3. package/assets/form.scss +5 -4
  4. package/assets/icons.scss +30 -0
  5. package/assets/styles.scss +2 -0
  6. package/bundles/coolon-angular-ui-powerups.umd.js +1170 -326
  7. package/bundles/coolon-angular-ui-powerups.umd.js.map +1 -1
  8. package/bundles/coolon-angular-ui-powerups.umd.min.js +2 -2
  9. package/bundles/coolon-angular-ui-powerups.umd.min.js.map +1 -1
  10. package/coolon-angular-ui-powerups.d.ts +64 -54
  11. package/coolon-angular-ui-powerups.metadata.json +1 -1
  12. package/esm2015/coolon-angular-ui-powerups.js +62 -52
  13. package/esm2015/coolon-angular-ui-powerups.js.map +1 -1
  14. package/esm2015/coolon-angular-ui-powerups.metadata.json +1 -1
  15. package/esm2015/lib/angular-ui-powerups.module.ngfactory.js.map +1 -1
  16. package/esm2015/lib/components/card-container/card-container.component.js +1 -1
  17. package/esm2015/lib/components/card-container/card-container.component.metadata.json +1 -1
  18. package/esm2015/lib/components/commands/command-bar.component.js +51 -0
  19. package/esm2015/lib/components/commands/command-bar.component.js.map +1 -0
  20. package/esm2015/lib/components/commands/command-bar.component.metadata.json +1 -0
  21. package/esm2015/lib/components/commands/command-bar.component.ngfactory.js.map +1 -0
  22. package/esm2015/lib/components/commands/command-container.js +20 -0
  23. package/esm2015/lib/components/commands/command-container.js.map +1 -0
  24. package/esm2015/lib/components/commands/command-container.metadata.json +1 -0
  25. package/esm2015/lib/components/commands/command-face/command-face.component.js +91 -0
  26. package/esm2015/lib/components/commands/command-face/command-face.component.js.map +1 -0
  27. package/esm2015/lib/components/commands/command-face/command-face.component.metadata.json +1 -0
  28. package/esm2015/lib/components/commands/command-face/command-face.component.ngfactory.js.map +1 -0
  29. package/esm2015/lib/components/commands/command-face/command-face.component.scss.ngstyle.js.map +1 -0
  30. package/esm2015/lib/components/commands/command-face.js +74 -0
  31. package/esm2015/lib/components/commands/command-face.js.map +1 -0
  32. package/esm2015/lib/components/commands/command-face.metadata.json +1 -0
  33. package/esm2015/lib/components/commands/command.component.js +38 -0
  34. package/esm2015/lib/components/commands/command.component.js.map +1 -0
  35. package/esm2015/lib/components/commands/command.component.metadata.json +1 -0
  36. package/esm2015/lib/components/commands/command.component.ngfactory.js.map +1 -0
  37. package/esm2015/lib/components/commands/popup-menu/abstract-popup-menu.component.js +57 -0
  38. package/esm2015/lib/components/commands/popup-menu/abstract-popup-menu.component.js.map +1 -0
  39. package/esm2015/lib/components/commands/popup-menu/abstract-popup-menu.component.metadata.json +1 -0
  40. package/esm2015/lib/components/commands/popup-menu/abstract-popup-menu.component.ngfactory.js.map +1 -0
  41. package/esm2015/lib/components/commands/popup-menu/more-menu.component.js +40 -0
  42. package/esm2015/lib/components/commands/popup-menu/more-menu.component.js.map +1 -0
  43. package/esm2015/lib/components/commands/popup-menu/more-menu.component.metadata.json +1 -0
  44. package/esm2015/lib/components/commands/popup-menu/more-menu.component.ngfactory.js.map +1 -0
  45. package/esm2015/lib/components/commands/popup-menu/popup-menu.component.js +49 -0
  46. package/esm2015/lib/components/commands/popup-menu/popup-menu.component.js.map +1 -0
  47. package/esm2015/lib/components/commands/popup-menu/popup-menu.component.metadata.json +1 -0
  48. package/esm2015/lib/components/commands/popup-menu/popup-menu.component.ngfactory.js.map +1 -0
  49. package/esm2015/lib/components/commands/popup-menu-renderer/popup-menu-renderer.component.js +62 -0
  50. package/esm2015/lib/components/commands/popup-menu-renderer/popup-menu-renderer.component.js.map +1 -0
  51. package/esm2015/lib/components/commands/popup-menu-renderer/popup-menu-renderer.component.metadata.json +1 -0
  52. package/esm2015/lib/components/commands/popup-menu-renderer/popup-menu-renderer.component.ngfactory.js.map +1 -0
  53. package/esm2015/lib/components/commands/popup-menu-renderer/popup-menu-renderer.component.scss.shim.ngstyle.js.map +1 -0
  54. package/esm2015/lib/components/components.module.js +58 -14
  55. package/esm2015/lib/components/components.module.js.map +1 -1
  56. package/esm2015/lib/components/components.module.metadata.json +1 -1
  57. package/esm2015/lib/components/components.module.ngfactory.js.map +1 -1
  58. package/esm2015/lib/components/forms/abstract-input.component.js +12 -4
  59. package/esm2015/lib/components/forms/abstract-input.component.js.map +1 -1
  60. package/esm2015/lib/components/forms/abstract-input.component.metadata.json +1 -1
  61. package/esm2015/lib/components/forms/abstract-list-input.component.js +51 -6
  62. package/esm2015/lib/components/forms/abstract-list-input.component.js.map +1 -1
  63. package/esm2015/lib/components/forms/abstract-list-input.component.metadata.json +1 -1
  64. package/esm2015/lib/components/forms/abstract-value-input.component.js +47 -3
  65. package/esm2015/lib/components/forms/abstract-value-input.component.js.map +1 -1
  66. package/esm2015/lib/components/forms/abstract-value-input.component.metadata.json +1 -1
  67. package/esm2015/lib/components/forms/autocomplete-input/autocomplete-input.component.js +70 -0
  68. package/esm2015/lib/components/forms/autocomplete-input/autocomplete-input.component.js.map +1 -0
  69. package/esm2015/lib/components/forms/autocomplete-input/autocomplete-input.component.metadata.json +1 -0
  70. package/esm2015/lib/components/forms/autocomplete-input/autocomplete-input.component.ngfactory.js.map +1 -0
  71. package/esm2015/lib/components/forms/autocomplete-input/autocomplete-input.component.scss.shim.ngstyle.js.map +1 -0
  72. package/esm2015/lib/components/forms/checkbox-input/checkbox-input.component.js +3 -6
  73. package/esm2015/lib/components/forms/checkbox-input/checkbox-input.component.js.map +1 -1
  74. package/esm2015/lib/components/forms/checkbox-input/checkbox-input.component.metadata.json +1 -1
  75. package/esm2015/lib/components/forms/multiple-select-input/multiple-select-input.component.js +8 -13
  76. package/esm2015/lib/components/forms/multiple-select-input/multiple-select-input.component.js.map +1 -1
  77. package/esm2015/lib/components/forms/multiple-select-input/multiple-select-input.component.metadata.json +1 -1
  78. package/esm2015/lib/components/forms/number-input/number-input.component.js +3 -6
  79. package/esm2015/lib/components/forms/number-input/number-input.component.js.map +1 -1
  80. package/esm2015/lib/components/forms/number-input/number-input.component.metadata.json +1 -1
  81. package/esm2015/lib/components/forms/password-input/password-input.component.js +4 -7
  82. package/esm2015/lib/components/forms/password-input/password-input.component.js.map +1 -1
  83. package/esm2015/lib/components/forms/password-input/password-input.component.metadata.json +1 -1
  84. package/esm2015/lib/components/forms/select-input/select-input.component.js +2 -5
  85. package/esm2015/lib/components/forms/select-input/select-input.component.js.map +1 -1
  86. package/esm2015/lib/components/forms/select-input/select-input.component.metadata.json +1 -1
  87. package/esm2015/lib/components/forms/string-input/string-input.component.js +3 -7
  88. package/esm2015/lib/components/forms/string-input/string-input.component.js.map +1 -1
  89. package/esm2015/lib/components/forms/string-input/string-input.component.metadata.json +1 -1
  90. package/esm2015/lib/components/forms/text-input/text-input.component.js +3 -6
  91. package/esm2015/lib/components/forms/text-input/text-input.component.js.map +1 -1
  92. package/esm2015/lib/components/forms/text-input/text-input.component.metadata.json +1 -1
  93. package/esm2015/lib/components/icon/icon.component.js +17 -4
  94. package/esm2015/lib/components/icon/icon.component.js.map +1 -1
  95. package/esm2015/lib/components/icon/icon.component.metadata.json +1 -1
  96. package/esm2015/lib/components/index.js +12 -1
  97. package/esm2015/lib/components/index.js.map +1 -1
  98. package/esm2015/lib/components/index.metadata.json +1 -1
  99. package/esm2015/lib/components/table/cell-editors.js.map +1 -1
  100. package/esm2015/lib/components/table/{cell-protal-ref.js → cell-portal-ref.js} +7 -3
  101. package/esm2015/lib/components/table/cell-portal-ref.js.map +1 -0
  102. package/esm2015/lib/components/table/{cell-protal-ref.metadata.json → cell-portal-ref.metadata.json} +1 -1
  103. package/esm2015/lib/components/table/column-model.js +66 -11
  104. package/esm2015/lib/components/table/column-model.js.map +1 -1
  105. package/esm2015/lib/components/table/column-model.metadata.json +1 -1
  106. package/esm2015/lib/components/table/mutable-cell-renderer.js +1 -0
  107. package/esm2015/lib/components/table/mutable-cell-renderer.js.map +1 -0
  108. package/esm2015/lib/components/table/mutable-cell-renderer.metadata.json +1 -0
  109. package/esm2015/lib/components/table/table-cell-renderer/table-cell-renderer.component.js +1 -1
  110. package/esm2015/lib/components/table/table-cell-renderer/table-cell-renderer.component.js.map +1 -1
  111. package/esm2015/lib/components/table/table-header-cell-renderer/table-header-cell-renderer.component.js +1 -1
  112. package/esm2015/lib/components/table/table-header-cell-renderer/table-header-cell-renderer.component.js.map +1 -1
  113. package/esm2015/lib/components/table/table-model.js +11 -10
  114. package/esm2015/lib/components/table/table-model.js.map +1 -1
  115. package/esm2015/lib/components/table/table-model.metadata.json +1 -1
  116. package/esm2015/lib/components/table/table-row-menu/table-row-menu.component.js +82 -0
  117. package/esm2015/lib/components/table/table-row-menu/table-row-menu.component.js.map +1 -0
  118. package/esm2015/lib/components/table/table-row-menu/table-row-menu.component.metadata.json +1 -0
  119. package/esm2015/lib/components/table/table-row-menu/table-row-menu.component.ngfactory.js.map +1 -0
  120. package/esm2015/lib/components/table/table.component.js +1 -1
  121. package/esm2015/lib/components/table/table.component.js.map +1 -1
  122. package/esm2015/lib/components/table/table.component.metadata.json +1 -1
  123. package/esm2015/lib/interaction/components/activity-container/activity-container.component.js +16 -8
  124. package/esm2015/lib/interaction/components/activity-container/activity-container.component.js.map +1 -1
  125. package/esm2015/lib/interaction/components/activity-container/activity-container.component.metadata.json +1 -1
  126. package/esm2015/lib/interaction/components/activity-container/activity-outlet/activity-outlet.component.js +16 -2
  127. package/esm2015/lib/interaction/components/activity-container/activity-outlet/activity-outlet.component.js.map +1 -1
  128. package/esm2015/lib/interaction/components/activity-container/activity-outlet/activity-outlet.component.metadata.json +1 -1
  129. package/esm2015/lib/interaction/interaction.module.ngfactory.js.map +1 -1
  130. package/esm2015/lib/place/place-component.js +1 -1
  131. package/esm2015/lib/place/place-component.js.map +1 -1
  132. package/esm2015/lib/place/place-router.js +2 -8
  133. package/esm2015/lib/place/place-router.js.map +1 -1
  134. package/esm2015/lib/place/place-router.metadata.json +1 -1
  135. package/esm2015/lib/place/place.module.ngfactory.js.map +1 -1
  136. package/esm2015/lib/place/route/parameter-decorators.js +2 -3
  137. package/esm2015/lib/place/route/parameter-decorators.js.map +1 -1
  138. package/esm2015/lib/place/route/parameter-decorators.metadata.json +1 -1
  139. package/esm5/coolon-angular-ui-powerups.js +62 -52
  140. package/esm5/coolon-angular-ui-powerups.js.map +1 -1
  141. package/esm5/lib/angular-ui-powerups.module.ngfactory.js.map +1 -1
  142. package/esm5/lib/components/card-container/card-container.component.js +1 -1
  143. package/esm5/lib/components/commands/command-bar.component.js +31 -0
  144. package/esm5/lib/components/commands/command-bar.component.js.map +1 -0
  145. package/esm5/lib/components/commands/command-bar.component.ngfactory.js.map +1 -0
  146. package/esm5/lib/components/commands/command-container.js +30 -0
  147. package/esm5/lib/components/commands/command-container.js.map +1 -0
  148. package/esm5/lib/components/commands/command-face/command-face.component.js +122 -0
  149. package/esm5/lib/components/commands/command-face/command-face.component.js.map +1 -0
  150. package/esm5/lib/components/commands/command-face/command-face.component.ngfactory.js.map +1 -0
  151. package/esm5/lib/components/commands/command-face/command-face.component.scss.ngstyle.js.map +1 -0
  152. package/esm5/lib/components/commands/command-face.js +103 -0
  153. package/esm5/lib/components/commands/command-face.js.map +1 -0
  154. package/esm5/lib/components/commands/command.component.js +41 -0
  155. package/esm5/lib/components/commands/command.component.js.map +1 -0
  156. package/esm5/lib/components/commands/command.component.ngfactory.js.map +1 -0
  157. package/esm5/lib/components/commands/popup-menu/abstract-popup-menu.component.js +64 -0
  158. package/esm5/lib/components/commands/popup-menu/abstract-popup-menu.component.js.map +1 -0
  159. package/esm5/lib/components/commands/popup-menu/abstract-popup-menu.component.ngfactory.js.map +1 -0
  160. package/esm5/lib/components/commands/popup-menu/more-menu.component.js +35 -0
  161. package/esm5/lib/components/commands/popup-menu/more-menu.component.js.map +1 -0
  162. package/esm5/lib/components/commands/popup-menu/more-menu.component.ngfactory.js.map +1 -0
  163. package/esm5/lib/components/commands/popup-menu/popup-menu.component.js +45 -0
  164. package/esm5/lib/components/commands/popup-menu/popup-menu.component.js.map +1 -0
  165. package/esm5/lib/components/commands/popup-menu/popup-menu.component.ngfactory.js.map +1 -0
  166. package/esm5/lib/components/commands/popup-menu-renderer/popup-menu-renderer.component.js +66 -0
  167. package/esm5/lib/components/commands/popup-menu-renderer/popup-menu-renderer.component.js.map +1 -0
  168. package/esm5/lib/components/commands/popup-menu-renderer/popup-menu-renderer.component.ngfactory.js.map +1 -0
  169. package/esm5/lib/components/commands/popup-menu-renderer/popup-menu-renderer.component.scss.shim.ngstyle.js.map +1 -0
  170. package/esm5/lib/components/components.module.js +58 -14
  171. package/esm5/lib/components/components.module.js.map +1 -1
  172. package/esm5/lib/components/components.module.ngfactory.js.map +1 -1
  173. package/esm5/lib/components/forms/abstract-input.component.js +12 -4
  174. package/esm5/lib/components/forms/abstract-input.component.js.map +1 -1
  175. package/esm5/lib/components/forms/abstract-list-input.component.js +56 -6
  176. package/esm5/lib/components/forms/abstract-list-input.component.js.map +1 -1
  177. package/esm5/lib/components/forms/abstract-value-input.component.js +52 -3
  178. package/esm5/lib/components/forms/abstract-value-input.component.js.map +1 -1
  179. package/esm5/lib/components/forms/autocomplete-input/autocomplete-input.component.js +73 -0
  180. package/esm5/lib/components/forms/autocomplete-input/autocomplete-input.component.js.map +1 -0
  181. package/esm5/lib/components/forms/autocomplete-input/autocomplete-input.component.ngfactory.js.map +1 -0
  182. package/esm5/lib/components/forms/autocomplete-input/autocomplete-input.component.scss.shim.ngstyle.js.map +1 -0
  183. package/esm5/lib/components/forms/checkbox-input/checkbox-input.component.js +3 -6
  184. package/esm5/lib/components/forms/checkbox-input/checkbox-input.component.js.map +1 -1
  185. package/esm5/lib/components/forms/multiple-select-input/multiple-select-input.component.js +8 -13
  186. package/esm5/lib/components/forms/multiple-select-input/multiple-select-input.component.js.map +1 -1
  187. package/esm5/lib/components/forms/number-input/number-input.component.js +3 -6
  188. package/esm5/lib/components/forms/number-input/number-input.component.js.map +1 -1
  189. package/esm5/lib/components/forms/password-input/password-input.component.js +4 -7
  190. package/esm5/lib/components/forms/password-input/password-input.component.js.map +1 -1
  191. package/esm5/lib/components/forms/select-input/select-input.component.js +2 -5
  192. package/esm5/lib/components/forms/select-input/select-input.component.js.map +1 -1
  193. package/esm5/lib/components/forms/string-input/string-input.component.js +3 -7
  194. package/esm5/lib/components/forms/string-input/string-input.component.js.map +1 -1
  195. package/esm5/lib/components/forms/text-input/text-input.component.js +3 -6
  196. package/esm5/lib/components/forms/text-input/text-input.component.js.map +1 -1
  197. package/esm5/lib/components/icon/icon.component.js +15 -3
  198. package/esm5/lib/components/icon/icon.component.js.map +1 -1
  199. package/esm5/lib/components/index.js +12 -1
  200. package/esm5/lib/components/index.js.map +1 -1
  201. package/esm5/lib/components/table/cell-editors.js.map +1 -1
  202. package/esm5/lib/components/table/{cell-protal-ref.js → cell-portal-ref.js} +7 -3
  203. package/esm5/lib/components/table/cell-portal-ref.js.map +1 -0
  204. package/esm5/lib/components/table/column-model.js +67 -11
  205. package/esm5/lib/components/table/column-model.js.map +1 -1
  206. package/esm5/lib/components/table/mutable-cell-renderer.js +1 -0
  207. package/esm5/lib/components/table/mutable-cell-renderer.js.map +1 -0
  208. package/esm5/lib/components/table/table-cell-renderer/table-cell-renderer.component.js +1 -1
  209. package/esm5/lib/components/table/table-cell-renderer/table-cell-renderer.component.js.map +1 -1
  210. package/esm5/lib/components/table/table-header-cell-renderer/table-header-cell-renderer.component.js +1 -1
  211. package/esm5/lib/components/table/table-header-cell-renderer/table-header-cell-renderer.component.js.map +1 -1
  212. package/esm5/lib/components/table/table-model.js +11 -11
  213. package/esm5/lib/components/table/table-model.js.map +1 -1
  214. package/esm5/lib/components/table/table-row-menu/table-row-menu.component.js +66 -0
  215. package/esm5/lib/components/table/table-row-menu/table-row-menu.component.js.map +1 -0
  216. package/esm5/lib/components/table/table-row-menu/table-row-menu.component.ngfactory.js.map +1 -0
  217. package/esm5/lib/components/table/table.component.js +1 -1
  218. package/esm5/lib/components/table/table.component.js.map +1 -1
  219. package/esm5/lib/interaction/components/activity-container/activity-container.component.js +16 -8
  220. package/esm5/lib/interaction/components/activity-container/activity-container.component.js.map +1 -1
  221. package/esm5/lib/interaction/components/activity-container/activity-outlet/activity-outlet.component.js +20 -2
  222. package/esm5/lib/interaction/components/activity-container/activity-outlet/activity-outlet.component.js.map +1 -1
  223. package/esm5/lib/interaction/interaction.module.ngfactory.js.map +1 -1
  224. package/esm5/lib/place/place-component.js +1 -1
  225. package/esm5/lib/place/place-component.js.map +1 -1
  226. package/esm5/lib/place/place-router.js +2 -8
  227. package/esm5/lib/place/place-router.js.map +1 -1
  228. package/esm5/lib/place/place.module.ngfactory.js.map +1 -1
  229. package/esm5/lib/place/route/parameter-decorators.js +2 -3
  230. package/esm5/lib/place/route/parameter-decorators.js.map +1 -1
  231. package/fesm2015/coolon-angular-ui-powerups.js +1016 -241
  232. package/fesm2015/coolon-angular-ui-powerups.js.map +1 -1
  233. package/fesm5/coolon-angular-ui-powerups.js +1085 -257
  234. package/fesm5/coolon-angular-ui-powerups.js.map +1 -1
  235. package/lib/components/commands/command-bar.component.d.ts +10 -0
  236. package/lib/components/commands/command-container.d.ts +15 -0
  237. package/lib/components/commands/command-face/command-face.component.d.ts +29 -0
  238. package/lib/components/commands/command-face.d.ts +24 -0
  239. package/lib/components/commands/command.component.d.ts +15 -0
  240. package/lib/components/commands/popup-menu/abstract-popup-menu.component.d.ts +18 -0
  241. package/lib/components/commands/popup-menu/more-menu.component.d.ts +9 -0
  242. package/lib/components/commands/popup-menu/popup-menu.component.d.ts +14 -0
  243. package/lib/components/commands/popup-menu-renderer/popup-menu-renderer.component.d.ts +21 -0
  244. package/lib/components/forms/abstract-input.component.d.ts +8 -2
  245. package/lib/components/forms/abstract-list-input.component.d.ts +10 -3
  246. package/lib/components/forms/abstract-value-input.component.d.ts +9 -3
  247. package/lib/components/forms/autocomplete-input/autocomplete-input.component.d.ts +25 -0
  248. package/lib/components/forms/checkbox-input/checkbox-input.component.d.ts +0 -2
  249. package/lib/components/forms/multiple-select-input/multiple-select-input.component.d.ts +8 -4
  250. package/lib/components/forms/number-input/number-input.component.d.ts +0 -2
  251. package/lib/components/forms/password-input/password-input.component.d.ts +0 -2
  252. package/lib/components/forms/select-input/select-input.component.d.ts +2 -2
  253. package/lib/components/forms/string-input/string-input.component.d.ts +1 -2
  254. package/lib/components/forms/text-input/text-input.component.d.ts +0 -2
  255. package/lib/components/icon/icon.component.d.ts +15 -0
  256. package/lib/components/index.d.ts +13 -1
  257. package/lib/components/table/cell-editors.d.ts +3 -3
  258. package/lib/components/table/{cell-protal-ref.d.ts → cell-portal-ref.d.ts} +4 -4
  259. package/lib/components/table/column-model.d.ts +18 -12
  260. package/lib/components/table/mutable-cell-renderer.d.ts +6 -0
  261. package/lib/components/table/table-cell-renderer/table-cell-renderer.component.d.ts +1 -1
  262. package/lib/components/table/table-header-cell-renderer/table-header-cell-renderer.component.d.ts +1 -1
  263. package/lib/components/table/table-model.d.ts +12 -4
  264. package/lib/components/table/table-row-menu/table-row-menu.component.d.ts +25 -0
  265. package/lib/interaction/components/activity-container/activity-container.component.d.ts +3 -1
  266. package/lib/interaction/components/activity-container/activity-outlet/activity-outlet.component.d.ts +3 -0
  267. package/package.json +4 -4
  268. package/esm2015/lib/components/table/cell-protal-ref.js.map +0 -1
  269. package/esm5/lib/components/table/cell-protal-ref.js.map +0 -1
@@ -1,6 +1,6 @@
1
1
  import { __extends, __decorate, __metadata, __param, __assign, __awaiter, __generator, __spread } 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, 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, forwardRef, Optional, HostBinding, ViewEncapsulation, EventEmitter, Output, ViewChild, ChangeDetectorRef, Self, ContentChildren, QueryList, ViewContainerRef, InjectionToken, Injector, ComponentFactoryResolver, ViewChildren, 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,21 @@ 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';
16
+ import { MatMenu, MatMenuTrigger, _MatMenuDirectivesModule, MatMenuModule } from '@angular/material/menu';
15
17
  import { MatTableModule } from '@angular/material/table';
16
- import { DelegatingValueModel, assert, UnaryCommand, lang, Dsl, GarbageCollector, 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 { assert as assert$1, Opts, lang as lang$1, Klass } from '@coolon/typescript-utilities';
18
+ import { MatTooltipModule } from '@angular/material/tooltip';
19
+ import { FaIconLibrary, FontAwesomeModule } from '@fortawesome/angular-fontawesome';
20
+ import { fas } from '@fortawesome/free-solid-svg-icons';
21
+ import { DelegatingValueModel, assert, UnaryCommand, lang, Dsl, GarbageCollector, Logger, TrackExternal, Command, MutableListModel, Disposable, MutableValueModel, StoreInValueModel, ListModel, FocusManager, EventListenerList, Form, Guard, Binding, DebugContext, StoreInListModel, ValueModel, MultipleSelectionModel, DirtyTrackingForm, DelegatingCommand, Deferred, Functions } from '@coolon/pectin';
18
22
  import { Memoize } from '@typescript-plus/fast-memoize-decorator/dist/src';
19
23
  import ___default, { isEqual, isNil } from 'lodash';
24
+ import { Enum } from 'typescript-string-enums';
25
+ import { assert as assert$1, Opts, lang as lang$1, Klass } from '@coolon/typescript-utilities';
20
26
  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
27
  import { FlexModule, GridModule } from '@angular/flex-layout';
25
28
  import { MatDialogModule, MatDialog, MatDialogConfig, MAT_DIALOG_DEFAULT_OPTIONS } from '@angular/material/dialog';
26
29
  import { RouterModule, UrlSegment, Router, UrlSerializer, NavigationStart, NavigationEnd, NavigationError, NavigationCancel, RouterOutlet } from '@angular/router';
@@ -406,13 +409,501 @@ var CardContainerComponent = /** @class */ (function (_super) {
406
409
  Component({
407
410
  selector: 'aup-card-container',
408
411
  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",
409
- 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-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}"]
412
+ styles: [":root{--aup-default-padding:var(--default-padding, 18px);--aup-default-background:white;--command-face-icon-gap:8px;--aup-icon-width:24px;--aup-fa-icon-width:18px}.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}aup-icon{--fa-icon-offset:calc((var(--aup-icon-width) - var(--aup-fa-icon-width)) / 2);position:relative}aup-icon fa-icon .svg-inline--fa{position:absolute;top:var(--fa-icon-offset);left:var(--fa-icon-offset);width:var(--aup-fa-icon-width)!important;height:var(--aup-fa-icon-width)!important}.mat-menu-panel aup-icon .svg-inline--fa{opacity:.54}: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}"]
410
413
  }),
411
414
  __metadata("design:paramtypes", [])
412
415
  ], CardContainerComponent);
413
416
  return CardContainerComponent;
414
417
  }(DisposableComponent));
415
418
 
419
+ var CommandFace;
420
+ (function (CommandFace) {
421
+ var Position;
422
+ (function (Position) {
423
+ Position["START"] = "start";
424
+ Position["END"] = "end";
425
+ })(Position = CommandFace.Position || (CommandFace.Position = {}));
426
+ var Adapter = /** @class */ (function () {
427
+ function Adapter(face) {
428
+ this.face = face;
429
+ }
430
+ Object.defineProperty(Adapter.prototype, "text", {
431
+ get: function () {
432
+ return ___default.isFunction(this.face.text) ? this.face.text() : undefined;
433
+ },
434
+ enumerable: true,
435
+ configurable: true
436
+ });
437
+ Object.defineProperty(Adapter.prototype, "icon", {
438
+ get: function () {
439
+ return ___default.isFunction(this.face.icon) ? this.face.icon() : undefined;
440
+ },
441
+ enumerable: true,
442
+ configurable: true
443
+ });
444
+ Object.defineProperty(Adapter.prototype, "iconPosition", {
445
+ get: function () {
446
+ return ___default.isFunction(this.face.iconPosition) ? this.face.iconPosition() : undefined;
447
+ },
448
+ enumerable: true,
449
+ configurable: true
450
+ });
451
+ Object.defineProperty(Adapter.prototype, "tooltip", {
452
+ get: function () {
453
+ return ___default.isFunction(this.face.tooltip) ? this.face.tooltip() : undefined;
454
+ },
455
+ enumerable: true,
456
+ configurable: true
457
+ });
458
+ Object.defineProperty(Adapter.prototype, "iconPositionStart", {
459
+ get: function () {
460
+ return this.iconPosition === CommandFace.Position.START;
461
+ },
462
+ enumerable: true,
463
+ configurable: true
464
+ });
465
+ Object.defineProperty(Adapter.prototype, "iconPositionEnd", {
466
+ get: function () {
467
+ return this.iconPosition === CommandFace.Position.END;
468
+ },
469
+ enumerable: true,
470
+ configurable: true
471
+ });
472
+ Object.defineProperty(Adapter.prototype, "destructive", {
473
+ get: function () {
474
+ return ___default.isFunction(this.face.destructive) ? this.face.destructive() : false;
475
+ },
476
+ enumerable: true,
477
+ configurable: true
478
+ });
479
+ __decorate([
480
+ Memoize(),
481
+ __metadata("design:type", Object),
482
+ __metadata("design:paramtypes", [])
483
+ ], Adapter.prototype, "text", null);
484
+ __decorate([
485
+ Memoize(),
486
+ __metadata("design:type", Object),
487
+ __metadata("design:paramtypes", [])
488
+ ], Adapter.prototype, "icon", null);
489
+ __decorate([
490
+ Memoize(),
491
+ __metadata("design:type", Object),
492
+ __metadata("design:paramtypes", [])
493
+ ], Adapter.prototype, "iconPosition", null);
494
+ __decorate([
495
+ Memoize(),
496
+ __metadata("design:type", Object),
497
+ __metadata("design:paramtypes", [])
498
+ ], Adapter.prototype, "tooltip", null);
499
+ __decorate([
500
+ Memoize(),
501
+ __metadata("design:type", Boolean),
502
+ __metadata("design:paramtypes", [])
503
+ ], Adapter.prototype, "iconPositionStart", null);
504
+ __decorate([
505
+ Memoize(),
506
+ __metadata("design:type", Boolean),
507
+ __metadata("design:paramtypes", [])
508
+ ], Adapter.prototype, "iconPositionEnd", null);
509
+ __decorate([
510
+ Memoize(),
511
+ __metadata("design:type", Boolean),
512
+ __metadata("design:paramtypes", [])
513
+ ], Adapter.prototype, "destructive", null);
514
+ return Adapter;
515
+ }());
516
+ CommandFace.Adapter = Adapter;
517
+ })(CommandFace || (CommandFace = {}));
518
+
519
+ var CommandContainer = /** @class */ (function (_super) {
520
+ __extends(CommandContainer, _super);
521
+ function CommandContainer() {
522
+ var _this = _super.call(this) || this;
523
+ _this._commandRegistrations = new MutableListModel();
524
+ return _this;
525
+ }
526
+ Object.defineProperty(CommandContainer.prototype, "commandRegistrations", {
527
+ get: function () {
528
+ return this._commandRegistrations.readonly;
529
+ },
530
+ enumerable: true,
531
+ configurable: true
532
+ });
533
+ CommandContainer.prototype.registerCommand = function (command, face) {
534
+ var _this = this;
535
+ var registration = { command: command, faceAdapter: new CommandFace.Adapter(face) };
536
+ this._commandRegistrations.push(registration);
537
+ return Disposable.disposableThatRuns(function () { return _this._commandRegistrations.remove(registration); });
538
+ };
539
+ CommandContainer.prototype.getDefaultIconPosition = function () {
540
+ return CommandFace.Position.START;
541
+ };
542
+ return CommandContainer;
543
+ }(GarbageCollector));
544
+
545
+ /**
546
+ *
547
+ */
548
+ var CommandBarComponent = /** @class */ (function (_super) {
549
+ __extends(CommandBarComponent, _super);
550
+ function CommandBarComponent() {
551
+ return _super.call(this) || this;
552
+ }
553
+ CommandBarComponent_1 = CommandBarComponent;
554
+ CommandBarComponent.prototype.ngOnInit = function () {
555
+ };
556
+ CommandBarComponent.prototype.getButtonColor = function (registration) {
557
+ return registration.faceAdapter.destructive ? 'warn' : undefined;
558
+ };
559
+ var CommandBarComponent_1;
560
+ CommandBarComponent = CommandBarComponent_1 = __decorate([
561
+ Component({
562
+ selector: 'aup-command-bar',
563
+ template: "\n <ng-container *ngFor=\"let registration of commandRegistrations.value\">\n <button *ngIf=\"registration.faceAdapter.icon && !registration.faceAdapter.text\"\n mat-icon-button\n [color]=\"getButtonColor(registration)\"\n [pectinCommand]=\"registration.command\"\n [matTooltip]=\"registration.faceAdapter.tooltip\"\n >\n <aup-command-face [face]=\"registration.faceAdapter.face\"></aup-command-face>\n </button>\n <button *ngIf=\"registration.faceAdapter.text\"\n [color]=\"getButtonColor(registration)\"\n mat-button\n [pectinCommand]=\"registration.command\"\n [matTooltip]=\"registration.tooltip\"\n >\n <aup-command-face [face]=\"registration.faceAdapter.face\"></aup-command-face>\n </button>\n </ng-container>\n ",
564
+ providers: [{ provide: CommandContainer, useExisting: forwardRef(function () { return CommandBarComponent_1; }) }],
565
+ styles: [":host {\n display: inline-flex;\n flex-direction: row;\n align-items: center;\n }"]
566
+ }),
567
+ __metadata("design:paramtypes", [])
568
+ ], CommandBarComponent);
569
+ return CommandBarComponent;
570
+ }(CommandContainer));
571
+
572
+ /**
573
+ *
574
+ */
575
+ var CommandFaceComponent = /** @class */ (function (_super) {
576
+ __extends(CommandFaceComponent, _super);
577
+ function CommandFaceComponent(commandContainer) {
578
+ var _this = _super.call(this) || this;
579
+ _this.commandContainer = commandContainer;
580
+ _this.faceModel = new MutableValueModel();
581
+ _this.ignoreIcon = false;
582
+ _this.ignoreText = false;
583
+ _this.includeMissingIconInLayout = false;
584
+ var _a = Dsl.disposeWith(_this), chain = _a.chain, valueOf = _a.valueOf, before = _a.before, when = _a.when, after = _a.after, observe = _a.observe, switchOn = _a.switchOn;
585
+ // overkill /c: when all you have is a hammer...
586
+ var faceAdapter = chain(_this.faceModel).map(function (face) { return new CommandFace.Adapter(face); });
587
+ _this.iconModel = faceAdapter.pluck('icon');
588
+ _this.textModel = faceAdapter.pluck('text');
589
+ _this.positionModel = faceAdapter.pluck('iconPosition');
590
+ _this.destructiveModel = faceAdapter.pluck('destructive');
591
+ return _this;
592
+ }
593
+ Object.defineProperty(CommandFaceComponent.prototype, "requiresMissingIconInLayout", {
594
+ get: function () {
595
+ return this.includeMissingIconInLayout && !this.iconModel.value;
596
+ },
597
+ enumerable: true,
598
+ configurable: true
599
+ });
600
+ CommandFaceComponent.prototype.ngOnInit = function () {
601
+ };
602
+ Object.defineProperty(CommandFaceComponent.prototype, "iconPosition", {
603
+ get: function () {
604
+ var _a, _b, _c;
605
+ return (_c = (_a = this.positionModel.value) !== null && _a !== void 0 ? _a : (_b = this.commandContainer) === null || _b === void 0 ? void 0 : _b.getDefaultIconPosition()) !== null && _c !== void 0 ? _c : CommandFace.Position.START;
606
+ },
607
+ enumerable: true,
608
+ configurable: true
609
+ });
610
+ Object.defineProperty(CommandFaceComponent.prototype, "shouldIncludeIcon", {
611
+ get: function () {
612
+ return (!this.ignoreIcon && this.iconModel.value) || this.includeMissingIconInLayout;
613
+ },
614
+ enumerable: true,
615
+ configurable: true
616
+ });
617
+ Object.defineProperty(CommandFaceComponent.prototype, "iconStart", {
618
+ get: function () {
619
+ return this.shouldIncludeIcon && this.iconPosition === CommandFace.Position.START;
620
+ },
621
+ enumerable: true,
622
+ configurable: true
623
+ });
624
+ Object.defineProperty(CommandFaceComponent.prototype, "iconEnd", {
625
+ get: function () {
626
+ return this.shouldIncludeIcon && this.iconPosition === CommandFace.Position.END;
627
+ },
628
+ enumerable: true,
629
+ configurable: true
630
+ });
631
+ Object.defineProperty(CommandFaceComponent.prototype, "text", {
632
+ get: function () {
633
+ return this.ignoreText ? undefined : this.textModel.value;
634
+ },
635
+ enumerable: true,
636
+ configurable: true
637
+ });
638
+ Object.defineProperty(CommandFaceComponent.prototype, "destructive", {
639
+ get: function () {
640
+ return this.destructiveModel.value;
641
+ },
642
+ enumerable: true,
643
+ configurable: true
644
+ });
645
+ CommandFaceComponent.ctorParameters = function () { return [
646
+ { type: CommandContainer, decorators: [{ type: Optional }] }
647
+ ]; };
648
+ __decorate([
649
+ Input('face'), StoreInValueModel('faceModel'),
650
+ __metadata("design:type", Object)
651
+ ], CommandFaceComponent.prototype, "_rawFace", void 0);
652
+ __decorate([
653
+ Input(),
654
+ __metadata("design:type", Object)
655
+ ], CommandFaceComponent.prototype, "ignoreIcon", void 0);
656
+ __decorate([
657
+ Input(),
658
+ __metadata("design:type", Object)
659
+ ], CommandFaceComponent.prototype, "ignoreText", void 0);
660
+ __decorate([
661
+ Input(),
662
+ __metadata("design:type", Object)
663
+ ], CommandFaceComponent.prototype, "includeMissingIconInLayout", void 0);
664
+ __decorate([
665
+ HostBinding('class.hide-icon'),
666
+ __metadata("design:type", Object),
667
+ __metadata("design:paramtypes", [])
668
+ ], CommandFaceComponent.prototype, "requiresMissingIconInLayout", null);
669
+ __decorate([
670
+ HostBinding('class.destructive'),
671
+ __metadata("design:type", Boolean),
672
+ __metadata("design:paramtypes", [])
673
+ ], CommandFaceComponent.prototype, "destructive", null);
674
+ CommandFaceComponent = __decorate([
675
+ Component({
676
+ selector: 'aup-command-face',
677
+ template: "<aup-icon *ngIf=\"iconStart\" [icon]=\"iconModel.value\"></aup-icon>\n<span *ngIf=\"this.text\">{{this.text}}</span>\n<aup-icon *ngIf=\"iconEnd\" [icon]=\"iconModel.value\"></aup-icon>\n",
678
+ encapsulation: ViewEncapsulation.None,
679
+ styles: ["aup-command-face{--icon-gap:var(--command-face-icon-gap);display:inline-flex;flex-direction:row;align-items:center}aup-command-face *+*{margin-left:var(--icon-gap)}aup-command-face.hide-icon aup-icon{visibility:hidden}"]
680
+ }),
681
+ __param(0, Optional()),
682
+ __metadata("design:paramtypes", [CommandContainer])
683
+ ], CommandFaceComponent);
684
+ return CommandFaceComponent;
685
+ }(DisposableComponent));
686
+
687
+ /**
688
+ *
689
+ */
690
+ var CommandComponent = /** @class */ (function (_super) {
691
+ __extends(CommandComponent, _super);
692
+ function CommandComponent(commandContainer) {
693
+ var _this = _super.call(this) || this;
694
+ _this.commandContainer = commandContainer;
695
+ return _this;
696
+ }
697
+ CommandComponent.prototype.ngOnInit = function () {
698
+ this.registerDisposable(this.commandContainer.registerCommand(this.command, this.face));
699
+ };
700
+ CommandComponent.ctorParameters = function () { return [
701
+ { type: CommandContainer }
702
+ ]; };
703
+ __decorate([
704
+ Input(), TrackExternal(),
705
+ __metadata("design:type", Command)
706
+ ], CommandComponent.prototype, "command", void 0);
707
+ __decorate([
708
+ Input(),
709
+ __metadata("design:type", Object)
710
+ ], CommandComponent.prototype, "face", void 0);
711
+ CommandComponent = __decorate([
712
+ Component({
713
+ selector: 'aup-command',
714
+ template: ""
715
+ }),
716
+ __metadata("design:paramtypes", [CommandContainer])
717
+ ], CommandComponent);
718
+ return CommandComponent;
719
+ }(DisposableComponent));
720
+
721
+ /**
722
+ *
723
+ */
724
+ var PopupMenuRendererComponent = /** @class */ (function (_super) {
725
+ __extends(PopupMenuRendererComponent, _super);
726
+ function PopupMenuRendererComponent() {
727
+ var _this = _super.call(this) || this;
728
+ _this.xPosition = 'after';
729
+ _this.yPosition = 'below';
730
+ _this.commandExecuted = new EventEmitter();
731
+ var _a = Dsl.disposeWith(_this), chain = _a.chain, valueOf = _a.valueOf, before = _a.before, when = _a.when, after = _a.after, observe = _a.observe, switchOn = _a.switchOn;
732
+ var registrations = chain(_this.commandRegistrations);
733
+ var iconCount = registrations.select(function (r) { return !!r.faceAdapter.icon; }).count();
734
+ _this.hasMixedIcons = valueOf.all(iconCount.isGreaterThan(0), iconCount.doesNotEqual(registrations.length)).areTruthy();
735
+ return _this;
736
+ }
737
+ PopupMenuRendererComponent.prototype.ngOnInit = function () {
738
+ };
739
+ PopupMenuRendererComponent.prototype.getPopupMenuCommandFor = function (item) {
740
+ var _this = this;
741
+ var when = Dsl.disposeWith(this).when;
742
+ when(item.command.busy).becomesFalsey(function () {
743
+ _this.commandExecuted.emit();
744
+ });
745
+ return item.command;
746
+ };
747
+ PopupMenuRendererComponent.prototype.getButtonColor = function (registration) {
748
+ return registration.faceAdapter.destructive ? 'warn' : undefined;
749
+ };
750
+ __decorate([
751
+ Input(), TrackExternal(),
752
+ __metadata("design:type", ListModel)
753
+ ], PopupMenuRendererComponent.prototype, "commandRegistrations", void 0);
754
+ __decorate([
755
+ Input(),
756
+ __metadata("design:type", String)
757
+ ], PopupMenuRendererComponent.prototype, "xPosition", void 0);
758
+ __decorate([
759
+ Input(),
760
+ __metadata("design:type", String)
761
+ ], PopupMenuRendererComponent.prototype, "yPosition", void 0);
762
+ __decorate([
763
+ Output(),
764
+ __metadata("design:type", Object)
765
+ ], PopupMenuRendererComponent.prototype, "commandExecuted", void 0);
766
+ __decorate([
767
+ ViewChild(MatMenu),
768
+ __metadata("design:type", MatMenu)
769
+ ], PopupMenuRendererComponent.prototype, "matMenu", void 0);
770
+ PopupMenuRendererComponent = __decorate([
771
+ Component({
772
+ selector: 'aup-popup-menu-renderer',
773
+ template: "<mat-menu [xPosition]=\"xPosition\" [yPosition]=\"yPosition\" >\n <button *ngFor=\"let registration of commandRegistrations.value\"\n mat-menu-item\n [pectinCommand]=\"getPopupMenuCommandFor(registration)\"\n >\n <aup-command-face [face]=\"registration.faceAdapter.face\" [includeMissingIconInLayout]=\"hasMixedIcons.value\"></aup-command-face>\n </button>\n</mat-menu>\n",
774
+ styles: [":host{display:inline-flex;flex-direction:row;align-items:center}"]
775
+ }),
776
+ __metadata("design:paramtypes", [])
777
+ ], PopupMenuRendererComponent);
778
+ return PopupMenuRendererComponent;
779
+ }(DisposableComponent));
780
+
781
+ /**
782
+ *
783
+ */
784
+ var AbstractPopupMenuComponent = /** @class */ (function (_super) {
785
+ __extends(AbstractPopupMenuComponent, _super);
786
+ function AbstractPopupMenuComponent(cdr) {
787
+ var _this = _super.call(this) || this;
788
+ _this.cdr = cdr;
789
+ _this.xPosition = 'after';
790
+ _this.yPosition = 'below';
791
+ return _this;
792
+ }
793
+ AbstractPopupMenuComponent.prototype.ngAfterViewInit = function () {
794
+ this.cdr.detectChanges();
795
+ };
796
+ Object.defineProperty(AbstractPopupMenuComponent.prototype, "matMenuComponent", {
797
+ get: function () {
798
+ var _a;
799
+ return (_a = this.popupMenu) === null || _a === void 0 ? void 0 : _a.matMenu;
800
+ },
801
+ enumerable: true,
802
+ configurable: true
803
+ });
804
+ AbstractPopupMenuComponent.prototype.closeMenu = function () {
805
+ this.menuTrigger.closeMenu();
806
+ };
807
+ AbstractPopupMenuComponent.prototype.getButtonColor = function (registration) {
808
+ return registration.faceAdapter.destructive ? 'warn' : undefined;
809
+ };
810
+ AbstractPopupMenuComponent.ctorParameters = function () { return [
811
+ { type: ChangeDetectorRef }
812
+ ]; };
813
+ __decorate([
814
+ Input(),
815
+ __metadata("design:type", String)
816
+ ], AbstractPopupMenuComponent.prototype, "xPosition", void 0);
817
+ __decorate([
818
+ Input(),
819
+ __metadata("design:type", String)
820
+ ], AbstractPopupMenuComponent.prototype, "yPosition", void 0);
821
+ __decorate([
822
+ ViewChild(PopupMenuRendererComponent),
823
+ __metadata("design:type", PopupMenuRendererComponent)
824
+ ], AbstractPopupMenuComponent.prototype, "popupMenu", void 0);
825
+ __decorate([
826
+ ViewChild(MatMenuTrigger),
827
+ __metadata("design:type", MatMenuTrigger)
828
+ ], AbstractPopupMenuComponent.prototype, "menuTrigger", void 0);
829
+ AbstractPopupMenuComponent = __decorate([
830
+ Component({
831
+ selector: 'aup-abstract-popup-menu',
832
+ template: ''
833
+ }),
834
+ __metadata("design:paramtypes", [ChangeDetectorRef])
835
+ ], AbstractPopupMenuComponent);
836
+ return AbstractPopupMenuComponent;
837
+ }(CommandContainer));
838
+
839
+ /**
840
+ *
841
+ */
842
+ var PopupMenuComponent = /** @class */ (function (_super) {
843
+ __extends(PopupMenuComponent, _super);
844
+ function PopupMenuComponent(cdr) {
845
+ var _this = _super.call(this, cdr) || this;
846
+ _this.faceModel = new MutableValueModel();
847
+ var _a = Dsl.disposeWith(_this), chain = _a.chain, valueOf = _a.valueOf, before = _a.before, when = _a.when, after = _a.after, observe = _a.observe, switchOn = _a.switchOn;
848
+ var faceAdapterModel = chain(_this.faceModel).map(function (face) { return new CommandFace.Adapter(face); });
849
+ _this.faceTooltipModel = faceAdapterModel.pluck('tooltip');
850
+ return _this;
851
+ }
852
+ PopupMenuComponent_1 = PopupMenuComponent;
853
+ PopupMenuComponent.prototype.getTooltip = function () {
854
+ return this.faceTooltipModel.value;
855
+ };
856
+ PopupMenuComponent.prototype.ngOnInit = function () {
857
+ };
858
+ var PopupMenuComponent_1;
859
+ PopupMenuComponent.ctorParameters = function () { return [
860
+ { type: ChangeDetectorRef }
861
+ ]; };
862
+ __decorate([
863
+ Input(), StoreInValueModel('faceModel'),
864
+ __metadata("design:type", Object)
865
+ ], PopupMenuComponent.prototype, "face", void 0);
866
+ PopupMenuComponent = PopupMenuComponent_1 = __decorate([
867
+ Component({
868
+ selector: 'aup-popup-menu',
869
+ template: "\n <!-- we can only render the button after th popup menu has initialised and rendered it's menu component -->\n <button *ngIf=\"matMenuComponent\" mat-icon-button [matMenuTriggerFor]=\"matMenuComponent\" [matTooltip]=\"getTooltip()\">\n <aup-command-face [face]=\"face\"></aup-command-face>\n </button>\n <aup-popup-menu-renderer [commandRegistrations]=\"commandRegistrations\" [yPosition]=\"yPosition\"\n [xPosition]=\"xPosition\"\n (commandExecuted)=\"closeMenu()\"></aup-popup-menu-renderer>\n ",
870
+ providers: [{ provide: CommandContainer, useExisting: forwardRef(function () { return PopupMenuComponent_1; }) }]
871
+ }),
872
+ __metadata("design:paramtypes", [ChangeDetectorRef])
873
+ ], PopupMenuComponent);
874
+ return PopupMenuComponent;
875
+ }(AbstractPopupMenuComponent));
876
+
877
+ /**
878
+ *
879
+ */
880
+ var MoreMenuComponent = /** @class */ (function (_super) {
881
+ __extends(MoreMenuComponent, _super);
882
+ function MoreMenuComponent(cdr) {
883
+ var _this = _super.call(this, cdr) || this;
884
+ _this.xPosition = "before"; // this should be the default unless overriden by the user.
885
+ return _this;
886
+ }
887
+ MoreMenuComponent_1 = MoreMenuComponent;
888
+ var MoreMenuComponent_1;
889
+ MoreMenuComponent.ctorParameters = function () { return [
890
+ { type: ChangeDetectorRef }
891
+ ]; };
892
+ __decorate([
893
+ Input(),
894
+ __metadata("design:type", String)
895
+ ], MoreMenuComponent.prototype, "tooltip", void 0);
896
+ MoreMenuComponent = MoreMenuComponent_1 = __decorate([
897
+ Component({
898
+ selector: 'aup-more-menu',
899
+ template: "\n <!-- we can only render the button after th popup menu has initialised and rendered it's menu component -->\n <button *ngIf=\"matMenuComponent\" mat-icon-button [matMenuTriggerFor]=\"matMenuComponent\" [matTooltip]=\"tooltip\">\n <mat-icon>more_vert</mat-icon>\n </button>\n <aup-popup-menu-renderer [commandRegistrations]=\"commandRegistrations\"\n [xPosition]=\"xPosition\"\n [yPosition]=\"yPosition\"\n (commandExecuted)=\"closeMenu()\"></aup-popup-menu-renderer>\n ",
900
+ providers: [{ provide: CommandContainer, useExisting: forwardRef(function () { return MoreMenuComponent_1; }) }]
901
+ }),
902
+ __metadata("design:paramtypes", [ChangeDetectorRef])
903
+ ], MoreMenuComponent);
904
+ return MoreMenuComponent;
905
+ }(AbstractPopupMenuComponent));
906
+
416
907
  var FocusContainerComponent = /** @class */ (function (_super) {
417
908
  __extends(FocusContainerComponent, _super);
418
909
  function FocusContainerComponent(focusManager) {
@@ -521,6 +1012,7 @@ var AbstractInputComponent = /** @class */ (function (_super) {
521
1012
  __extends(AbstractInputComponent, _super);
522
1013
  function AbstractInputComponent() {
523
1014
  var _this = _super.call(this) || this;
1015
+ _this.onValueEditedListeners = new EventListenerList();
524
1016
  _this.dense = false;
525
1017
  // TODO: fix this.
526
1018
  // tslint:disable-next-line:no-output-native
@@ -571,7 +1063,7 @@ var AbstractInputComponent = /** @class */ (function (_super) {
571
1063
  };
572
1064
  Object.defineProperty(AbstractInputComponent.prototype, "enabled", {
573
1065
  get: function () {
574
- return this.inputModel.enabled;
1066
+ return this.formValueModel.enabled;
575
1067
  },
576
1068
  enumerable: true,
577
1069
  configurable: true
@@ -581,7 +1073,7 @@ var AbstractInputComponent = /** @class */ (function (_super) {
581
1073
  };
582
1074
  Object.defineProperty(AbstractInputComponent.prototype, "errorList", {
583
1075
  get: function () {
584
- return this.inputModel.errorList;
1076
+ return this.formValueModel.errorList;
585
1077
  },
586
1078
  enumerable: true,
587
1079
  configurable: true
@@ -595,7 +1087,7 @@ var AbstractInputComponent = /** @class */ (function (_super) {
595
1087
  });
596
1088
  Object.defineProperty(AbstractInputComponent.prototype, "focusContext", {
597
1089
  get: function () {
598
- return this.inputModel.focusContext;
1090
+ return this.formValueModel.focusContext;
599
1091
  },
600
1092
  enumerable: true,
601
1093
  configurable: true
@@ -614,6 +1106,13 @@ var AbstractInputComponent = /** @class */ (function (_super) {
614
1106
  enumerable: true,
615
1107
  configurable: true
616
1108
  });
1109
+ /**
1110
+ * Invokes the callback when this components value is changed by a user edit.
1111
+ * @param callback
1112
+ */
1113
+ AbstractInputComponent.prototype.onValueEdited = function (callback) {
1114
+ return this.onValueEditedListeners.add(callback);
1115
+ };
617
1116
  __decorate([
618
1117
  Input(),
619
1118
  __metadata("design:type", String)
@@ -703,7 +1202,7 @@ var AbstractInputComponent = /** @class */ (function (_super) {
703
1202
  var AbstractListInputComponent = /** @class */ (function (_super) {
704
1203
  __extends(AbstractListInputComponent, _super);
705
1204
  function AbstractListInputComponent() {
706
- var _this = _super !== null && _super.apply(this, arguments) || this;
1205
+ var _this = _super.call(this) || this;
707
1206
  /**
708
1207
  * A backing model for all our @Input() valueModel properties which should be defined as follows.
709
1208
  *
@@ -715,11 +1214,61 @@ var AbstractListInputComponent = /** @class */ (function (_super) {
715
1214
  * gets told it's an Object and can't scan for a base type annotated with @DelegateUsing(..).
716
1215
  */
717
1216
  // We have to register it as a disposable so it ditches any listeners when we're disposed.
718
- _this.inputModel = _this.registerDisposable(new Form.DelegatingListModel());
1217
+ _this.formValueModel = _this.registerDisposable(new Form.DelegatingListModel());
1218
+ _this.componentListModel = new MutableListModel();
1219
+ _this.setValueIsInProgress = new Guard();
1220
+ _this.valueChange = new EventEmitter();
1221
+ var _a = Dsl.disposeWith(_this), when = _a.when, valueOf = _a.valueOf, chain = _a.chain;
1222
+ var binding = new Binding.Identity(_this.formValueModel, _this.componentListModel).writeRight();
1223
+ var inExternalChange = valueOf.any(_this.setValueIsInProgress, chain(binding.direction).equals(Binding.Direction.RIGHT)).areTruthy();
1224
+ when(_this.componentListModel).changes(function (is, was) {
1225
+ _this.valueChange.emit(is);
1226
+ _this.onValueEditedListeners.fire(function (l) { return l(is, was); });
1227
+ }, {
1228
+ initialValue: 'ignore',
1229
+ // we never fire events during an external changes to the value. This allows
1230
+ // the component to behave when used in the conventional angular
1231
+ // fashion, i.e. [(value)]="..."
1232
+ unless: inExternalChange
1233
+ });
1234
+ DebugContext.tag(_this.formValueModel, _this.constructor.name + ".formValueModel");
719
1235
  return _this;
720
1236
  }
1237
+ Object.defineProperty(AbstractListInputComponent.prototype, "value", {
1238
+ // We add support for simple direct display of values by allowing components to be used
1239
+ // by `component.value = ...` This use of the component without a value model in tables
1240
+ // and the like.
1241
+ set: function (value) {
1242
+ var _this = this;
1243
+ this.setValueIsInProgress.whileTrue(function () {
1244
+ if (!_this.listHolder) {
1245
+ _this.listHolder = new MutableListModel(value);
1246
+ _this.listModel = _this.listHolder;
1247
+ }
1248
+ else {
1249
+ _this.listHolder.value = value;
1250
+ }
1251
+ });
1252
+ },
1253
+ enumerable: true,
1254
+ configurable: true
1255
+ });
1256
+ __decorate([
1257
+ Input(), TrackExternal({ delegateTo: 'formValueModel' }),
1258
+ __metadata("design:type", Object)
1259
+ ], AbstractListInputComponent.prototype, "listModel", void 0);
1260
+ __decorate([
1261
+ Input(),
1262
+ __metadata("design:type", Array),
1263
+ __metadata("design:paramtypes", [Array])
1264
+ ], AbstractListInputComponent.prototype, "value", null);
1265
+ __decorate([
1266
+ Output(),
1267
+ __metadata("design:type", Object)
1268
+ ], AbstractListInputComponent.prototype, "valueChange", void 0);
721
1269
  AbstractListInputComponent = __decorate([
722
- Component({ template: '' })
1270
+ Component({ template: '' }),
1271
+ __metadata("design:paramtypes", [])
723
1272
  ], AbstractListInputComponent);
724
1273
  return AbstractListInputComponent;
725
1274
  }(AbstractInputComponent));
@@ -739,9 +1288,58 @@ var AbstractValueInputComponent = /** @class */ (function (_super) {
739
1288
  * gets told it's an Object and can't scan for a base type annotated with @DelegateUsing(..).
740
1289
  */
741
1290
  // We have to register it as a disposable so it ditches any listeners when we're disposed.
742
- _this.inputModel = _this.registerDisposable(new Form.DelegatingValueModel());
1291
+ _this.formValueModel = _this.registerDisposable(new Form.DelegatingValueModel());
1292
+ _this.setValueInProgress = new Guard();
1293
+ _this.componentValueModel = new MutableValueModel();
1294
+ _this.valueChange = new EventEmitter();
1295
+ var _a = Dsl.disposeWith(_this), when = _a.when, chain = _a.chain, valueOf = _a.valueOf;
1296
+ var binding = new Binding.Identity(_this.formValueModel, _this.componentValueModel).writeRight();
1297
+ var inExternalChange = valueOf.any(_this.setValueInProgress, chain(binding.direction).equals(Binding.Direction.RIGHT)).areTruthy();
1298
+ when(_this.componentValueModel).changes(function (is, was) {
1299
+ _this.valueChange.emit(is);
1300
+ _this.onValueEditedListeners.fire(function (l) { return l(is, was); });
1301
+ }, {
1302
+ initialValue: 'ignore',
1303
+ // we never fire events during an external set value operation. This allows
1304
+ // the component to behave when used in the conventional angular
1305
+ // fashion, i.e. [(value)]="..."
1306
+ unless: inExternalChange
1307
+ });
1308
+ DebugContext.tag(_this.formValueModel, _this.constructor.name + ".formValueModel");
743
1309
  return _this;
744
1310
  }
1311
+ Object.defineProperty(AbstractValueInputComponent.prototype, "value", {
1312
+ // We add support for simple direct display of values by allowing components to be used
1313
+ // by `component.value = ...` This use of the component without a value model in tables
1314
+ // and the like.
1315
+ set: function (value) {
1316
+ var _this = this;
1317
+ this.setValueInProgress.whileTrue(function () {
1318
+ if (!_this.plainValueHolder) {
1319
+ _this.plainValueHolder = new MutableValueModel(value);
1320
+ _this.valueModel = _this.plainValueHolder;
1321
+ }
1322
+ else {
1323
+ _this.plainValueHolder.value = value;
1324
+ }
1325
+ });
1326
+ },
1327
+ enumerable: true,
1328
+ configurable: true
1329
+ });
1330
+ __decorate([
1331
+ Input(), TrackExternal({ delegateTo: 'formValueModel' }),
1332
+ __metadata("design:type", Object)
1333
+ ], AbstractValueInputComponent.prototype, "valueModel", void 0);
1334
+ __decorate([
1335
+ Input(),
1336
+ __metadata("design:type", Object),
1337
+ __metadata("design:paramtypes", [Object])
1338
+ ], AbstractValueInputComponent.prototype, "value", null);
1339
+ __decorate([
1340
+ Output(),
1341
+ __metadata("design:type", Object)
1342
+ ], AbstractValueInputComponent.prototype, "valueChange", void 0);
745
1343
  AbstractValueInputComponent = __decorate([
746
1344
  Component({ template: '' }),
747
1345
  __metadata("design:paramtypes", [])
@@ -749,20 +1347,85 @@ var AbstractValueInputComponent = /** @class */ (function (_super) {
749
1347
  return AbstractValueInputComponent;
750
1348
  }(AbstractInputComponent));
751
1349
 
1350
+ /**
1351
+ * Using templates (not only supported for nil values:
1352
+ * <aup-autocomplete-input [valueModel]="myModel" [options]="myOptions">
1353
+ * <ng-template #nilOptionTemplate let-option>{{option.thePropertyYouWant}}</ng-template>
1354
+ * </aup-autocomplete-input>
1355
+ */
1356
+ var AutocompleteInputComponent = /** @class */ (function (_super) {
1357
+ __extends(AutocompleteInputComponent, _super);
1358
+ function AutocompleteInputComponent() {
1359
+ var _this = _super.call(this) || this;
1360
+ _this.filterValue = new MutableValueModel();
1361
+ _this.optionLabelFormat = function (option) { return (option && _this.optionLabel) ? option[_this.optionLabel] : option; };
1362
+ var _a = Dsl.disposeWith(_this), chain = _a.chain, valueOf = _a.valueOf, before = _a.before, when = _a.when, after = _a.after, observe = _a.observe, switchOn = _a.switchOn;
1363
+ var lowerCaseFilterValue = chain(_this.filterValue)
1364
+ .map(function (v) { return ___default.isString(v) ? v.toLowerCase() : ''; });
1365
+ _this.filteredOptions = chain(_this.optionsModel)
1366
+ .select(function (option) {
1367
+ return ___default.isEmpty(_this.filterValue.value) || _this.optionLabelFormat(option).toString().toLowerCase().includes(lowerCaseFilterValue.value);
1368
+ }, { dependsOn: lowerCaseFilterValue });
1369
+ return _this;
1370
+ }
1371
+ AutocompleteInputComponent.prototype.ngOnInit = function () {
1372
+ };
1373
+ AutocompleteInputComponent.prototype.formatOption = function (option) {
1374
+ return this.optionLabelFormat(option);
1375
+ };
1376
+ AutocompleteInputComponent.prototype.updateFilter = function ($event) {
1377
+ this.filterValue.value = $event;
1378
+ };
1379
+ AutocompleteInputComponent.prototype.onSelect = function ($event) {
1380
+ this.valueModel.value = $event.option.value;
1381
+ };
1382
+ __decorate([
1383
+ Input(), TrackExternal(),
1384
+ __metadata("design:type", ListModel)
1385
+ ], AutocompleteInputComponent.prototype, "optionsModel", void 0);
1386
+ __decorate([
1387
+ Input(), StoreInListModel('optionsModel'),
1388
+ __metadata("design:type", Array)
1389
+ ], AutocompleteInputComponent.prototype, "options", void 0);
1390
+ __decorate([
1391
+ Input(),
1392
+ __metadata("design:type", Object)
1393
+ ], AutocompleteInputComponent.prototype, "optionLabel", void 0);
1394
+ __decorate([
1395
+ Input(),
1396
+ __metadata("design:type", Boolean)
1397
+ ], AutocompleteInputComponent.prototype, "allowNil", void 0);
1398
+ __decorate([
1399
+ ContentChild('nilOptionTemplate'),
1400
+ __metadata("design:type", TemplateRef)
1401
+ ], AutocompleteInputComponent.prototype, "nilOptionTemplateRef", void 0);
1402
+ __decorate([
1403
+ Input(),
1404
+ __metadata("design:type", Function)
1405
+ ], AutocompleteInputComponent.prototype, "optionLabelFormat", void 0);
1406
+ AutocompleteInputComponent = __decorate([
1407
+ Component({
1408
+ selector: 'aup-autocomplete-input',
1409
+ 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]=\"componentValueModel.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\" (optionSelected)=\"onSelect($event)\">\n <mat-option *ngFor=\"let option of filteredOptions.value; let i = index\"\n [value]=\"option\"\n >{{formatOption(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",
1410
+ styles: [":host{display:inline-block}mat-form-field{width:100%}"]
1411
+ }),
1412
+ __metadata("design:paramtypes", [])
1413
+ ], AutocompleteInputComponent);
1414
+ return AutocompleteInputComponent;
1415
+ }(AbstractValueInputComponent));
1416
+
752
1417
  var CheckboxInputComponent = /** @class */ (function (_super) {
753
1418
  __extends(CheckboxInputComponent, _super);
754
1419
  function CheckboxInputComponent() {
755
1420
  var _this = _super.call(this) || this;
1421
+ // @Input() @TrackExternal({ delegateTo: 'inputModel' })
1422
+ // valueModel: Form.ValueModelBase<boolean> | IMutableValueModel<boolean>;
756
1423
  _this.color = 'accent';
757
1424
  _this.labelPosition = 'after';
758
1425
  return _this;
759
1426
  }
760
1427
  CheckboxInputComponent.prototype.ngOnInit = function () {
761
1428
  };
762
- __decorate([
763
- Input(), TrackExternal({ delegateTo: 'inputModel' }),
764
- __metadata("design:type", Object)
765
- ], CheckboxInputComponent.prototype, "valueModel", void 0);
766
1429
  __decorate([
767
1430
  Input(),
768
1431
  __metadata("design:type", String)
@@ -774,7 +1437,7 @@ var CheckboxInputComponent = /** @class */ (function (_super) {
774
1437
  CheckboxInputComponent = __decorate([
775
1438
  Component({
776
1439
  selector: 'aup-checkbox-input',
777
- 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",
1440
+ template: "<!-- TODO: add focus binding -->\n<mat-checkbox\n [(ngModel)]=\"componentValueModel.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",
778
1441
  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}"]
779
1442
  }),
780
1443
  __metadata("design:paramtypes", [])
@@ -782,20 +1445,65 @@ var CheckboxInputComponent = /** @class */ (function (_super) {
782
1445
  return CheckboxInputComponent;
783
1446
  }(AbstractValueInputComponent));
784
1447
 
1448
+ /**
1449
+ * Using templates:
1450
+ * <aup-multiple-select-input [valueModel]="myModel" [options]="myOptions">
1451
+ * <ng-template #optionTemplate let-option>{{option.thePropertyYouWant}}</ng-template>
1452
+ * <ng-template #nilOptionTemplate let-option>{{option.thePropertyYouWant}}</ng-template>
1453
+ * </aup-multiple-select_input>
1454
+ */
1455
+ var MultipleSelectInputComponent = /** @class */ (function (_super) {
1456
+ __extends(MultipleSelectInputComponent, _super);
1457
+ function MultipleSelectInputComponent() {
1458
+ var _this = _super.call(this) || this;
1459
+ _this.optionLabelFormat = function (option) { return (option && _this.optionLabel) ? option[_this.optionLabel] : option; };
1460
+ return _this;
1461
+ }
1462
+ MultipleSelectInputComponent.prototype.ngOnInit = function () {
1463
+ };
1464
+ __decorate([
1465
+ Input(), TrackExternal(),
1466
+ __metadata("design:type", ListModel)
1467
+ ], MultipleSelectInputComponent.prototype, "optionsModel", void 0);
1468
+ __decorate([
1469
+ Input(), StoreInListModel('optionsModel'),
1470
+ __metadata("design:type", Array)
1471
+ ], MultipleSelectInputComponent.prototype, "options", void 0);
1472
+ __decorate([
1473
+ Input(),
1474
+ __metadata("design:type", Object)
1475
+ ], MultipleSelectInputComponent.prototype, "optionLabel", void 0);
1476
+ __decorate([
1477
+ ContentChild('optionTemplate'),
1478
+ __metadata("design:type", TemplateRef)
1479
+ ], MultipleSelectInputComponent.prototype, "optionTemplateRef", void 0);
1480
+ __decorate([
1481
+ Input(),
1482
+ __metadata("design:type", Function)
1483
+ ], MultipleSelectInputComponent.prototype, "optionLabelFormat", void 0);
1484
+ MultipleSelectInputComponent = __decorate([
1485
+ Component({
1486
+ selector: 'aup-multiple-select-input',
1487
+ 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)]=\"componentListModel.value\"\n [disabled]=\"!enabled.value\"\n (keydown.enter)=\"notifyEnterKey()\"\n (keydown.escape)=\"notifyEscapeKey()\"\n [pectinFocusBinding]=\"focusContext\"\n [errorStateMatcher]=\"errorStateMatcher\"\n >\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",
1488
+ styles: [":host{display:inline-block}mat-form-field{width:100%}"]
1489
+ }),
1490
+ __metadata("design:paramtypes", [])
1491
+ ], MultipleSelectInputComponent);
1492
+ return MultipleSelectInputComponent;
1493
+ }(AbstractListInputComponent));
1494
+
785
1495
  var NumberInputComponent = /** @class */ (function (_super) {
786
1496
  __extends(NumberInputComponent, _super);
787
1497
  function NumberInputComponent() {
788
1498
  var _this = _super.call(this) || this;
1499
+ // @Input() @TrackExternal({ delegateTo: 'inputModel' })
1500
+ // valueModel: Form.ValueModelBase<number> | IMutableValueModel<number>;
789
1501
  _this.min = Number.MIN_SAFE_INTEGER;
790
1502
  _this.max = Number.MAX_SAFE_INTEGER;
791
1503
  return _this;
792
1504
  }
793
1505
  NumberInputComponent.prototype.ngOnInit = function () {
794
1506
  };
795
- __decorate([
796
- Input(), TrackExternal({ delegateTo: 'inputModel' }),
797
- __metadata("design:type", Object)
798
- ], NumberInputComponent.prototype, "valueModel", void 0);
799
1507
  __decorate([
800
1508
  Input(),
801
1509
  __metadata("design:type", Object)
@@ -807,7 +1515,7 @@ var NumberInputComponent = /** @class */ (function (_super) {
807
1515
  NumberInputComponent = __decorate([
808
1516
  Component({
809
1517
  selector: 'aup-number-input',
810
- 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",
1518
+ 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)]=\"componentValueModel.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",
811
1519
  styles: [""]
812
1520
  }),
813
1521
  __metadata("design:paramtypes", [])
@@ -817,19 +1525,17 @@ var NumberInputComponent = /** @class */ (function (_super) {
817
1525
 
818
1526
  var PasswordInputComponent = /** @class */ (function (_super) {
819
1527
  __extends(PasswordInputComponent, _super);
1528
+ // @Input() @TrackExternal({ delegateTo: 'inputModel' })
1529
+ // valueModel: Form.ValueModelBase<string> | IMutableValueModel<string>;
820
1530
  function PasswordInputComponent() {
821
1531
  return _super.call(this) || this;
822
1532
  }
823
1533
  PasswordInputComponent.prototype.ngOnInit = function () {
824
1534
  };
825
- __decorate([
826
- Input(), TrackExternal({ delegateTo: 'inputModel' }),
827
- __metadata("design:type", Object)
828
- ], PasswordInputComponent.prototype, "valueModel", void 0);
829
1535
  PasswordInputComponent = __decorate([
830
1536
  Component({
831
1537
  selector: 'aup-password-input',
832
- 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",
1538
+ 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)]=\"componentValueModel.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",
833
1539
  styles: [""]
834
1540
  }),
835
1541
  __metadata("design:paramtypes", [])
@@ -841,6 +1547,7 @@ var PasswordInputComponent = /** @class */ (function (_super) {
841
1547
  * Using templates:
842
1548
  * <aup-select-input [valueModel]="myModel" [options]="myOptions">
843
1549
  * <ng-template #optionTemplate let-option>{{option.thePropertyYouWant}}</ng-template>
1550
+ * <ng-template #nilOptionTemplate let-option>{{option.thePropertyYouWant}}</ng-template>
844
1551
  * </aup-select_input>
845
1552
  */
846
1553
  var SelectInputComponent = /** @class */ (function (_super) {
@@ -852,10 +1559,6 @@ var SelectInputComponent = /** @class */ (function (_super) {
852
1559
  }
853
1560
  SelectInputComponent.prototype.ngOnInit = function () {
854
1561
  };
855
- __decorate([
856
- Input(), TrackExternal({ delegateTo: 'inputModel' }),
857
- __metadata("design:type", Object)
858
- ], SelectInputComponent.prototype, "valueModel", void 0);
859
1562
  __decorate([
860
1563
  Input(), TrackExternal(),
861
1564
  __metadata("design:type", ListModel)
@@ -887,7 +1590,7 @@ var SelectInputComponent = /** @class */ (function (_super) {
887
1590
  SelectInputComponent = __decorate([
888
1591
  Component({
889
1592
  selector: 'aup-select-input',
890
- 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",
1593
+ template: "<mat-form-field appearance=\"standard\" [floatLabel]=\"floatLabel\">\n <mat-label *ngIf=\"label\">{{label}}</mat-label>\n <mat-select placeholder=\"{{placeholder}}\"\n [(ngModel)]=\"componentValueModel.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\">\n <ng-container *ngIf=\"!nilOptionTemplateRef\">{{placeholder}}</ng-container>\n <ng-container *ngIf=\"nilOptionTemplateRef\" [ngTemplateOutlet]=\"nilOptionTemplateRef\"></ng-container>\n </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",
891
1594
  styles: [":host{display:inline-block}mat-form-field{width:100%}"]
892
1595
  }),
893
1596
  __metadata("design:paramtypes", [])
@@ -901,17 +1604,13 @@ var StringInputComponent = /** @class */ (function (_super) {
901
1604
  var _this = _super.call(this) || this;
902
1605
  var _a = Dsl.disposeWith(_this), chain = _a.chain, valueOf = _a.valueOf, before = _a.before, when = _a.when, after = _a.after, observe = _a.observe, switchOn = _a.switchOn;
903
1606
  _this.clearCommand = Command.create(function () {
904
- _this.valueModel.value = null;
1607
+ _this.componentValueModel.value = null;
905
1608
  });
906
- _this.clearCommand.disableWhile(chain.stringValue(_this.valueModel).isBlank());
1609
+ _this.clearCommand.disableWhile(chain.stringValue(_this.componentValueModel).isBlank());
907
1610
  return _this;
908
1611
  }
909
1612
  StringInputComponent.prototype.ngOnInit = function () {
910
1613
  };
911
- __decorate([
912
- Input(), TrackExternal({ delegateTo: 'inputModel' }),
913
- __metadata("design:type", Object)
914
- ], StringInputComponent.prototype, "valueModel", void 0);
915
1614
  __decorate([
916
1615
  Input(), TrackExternal({ defaultValue: false }),
917
1616
  __metadata("design:type", ValueModel)
@@ -923,7 +1622,7 @@ var StringInputComponent = /** @class */ (function (_super) {
923
1622
  StringInputComponent = __decorate([
924
1623
  Component({
925
1624
  selector: 'aup-string-input',
926
- 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",
1625
+ template: "<mat-form-field appearance=\"standard\" [floatLabel]=\"floatLabel\">\n <mat-label *ngIf=\"label\">{{label}}</mat-label>\n <input matInput\n placeholder=\"{{placeholder}}\"\n [(ngModel)]=\"componentValueModel.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",
927
1626
  styles: ["button[disabled]{visibility:hidden}"]
928
1627
  }),
929
1628
  __metadata("design:paramtypes", [])
@@ -935,16 +1634,14 @@ var TextInputComponent = /** @class */ (function (_super) {
935
1634
  __extends(TextInputComponent, _super);
936
1635
  function TextInputComponent() {
937
1636
  var _this = _super.call(this) || this;
1637
+ // @Input() @TrackExternal({ delegateTo: 'inputModel' })
1638
+ // valueModel: Form.ValueModelBase<string> | IMutableValueModel<string>;
938
1639
  _this.rows = 2;
939
1640
  return _this;
940
1641
  // const { chain, valueOf, before, when, after, observe, switchOn } = Dsl.disposeWith(this);
941
1642
  }
942
1643
  TextInputComponent.prototype.ngOnInit = function () {
943
1644
  };
944
- __decorate([
945
- Input(), TrackExternal({ delegateTo: 'inputModel' }),
946
- __metadata("design:type", Object)
947
- ], TextInputComponent.prototype, "valueModel", void 0);
948
1645
  __decorate([
949
1646
  Input(),
950
1647
  __metadata("design:type", Object)
@@ -956,7 +1653,7 @@ var TextInputComponent = /** @class */ (function (_super) {
956
1653
  TextInputComponent = __decorate([
957
1654
  Component({
958
1655
  selector: 'aup-text-input',
959
- 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",
1656
+ template: "<mat-form-field appearance=\"standard\" [floatLabel]=\"floatLabel\">\n <mat-label *ngIf=\"label\">{{label}}</mat-label>\n <textarea matInput\n placeholder=\"{{placeholder}}\"\n [(ngModel)]=\"componentValueModel.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",
960
1657
  styles: ["button[disabled]{visibility:hidden}textarea{overflow:auto}"]
961
1658
  }),
962
1659
  __metadata("design:paramtypes", [])
@@ -964,6 +1661,59 @@ var TextInputComponent = /** @class */ (function (_super) {
964
1661
  return TextInputComponent;
965
1662
  }(AbstractValueInputComponent));
966
1663
 
1664
+ var IconComponent = /** @class */ (function () {
1665
+ function IconComponent() {
1666
+ this.allowedPrefixes = Enum.values(IconComponent_1.IconPrefix).map(function (p) { return p + ":"; });
1667
+ this.iconPrefix = IconComponent_1.IconPrefix;
1668
+ }
1669
+ IconComponent_1 = IconComponent;
1670
+ Object.defineProperty(IconComponent.prototype, "icon", {
1671
+ get: function () {
1672
+ return this._icon;
1673
+ },
1674
+ set: function (iconName) {
1675
+ this._icon = iconName;
1676
+ if (!iconName) {
1677
+ this.errorMessage = 'icon is nil';
1678
+ this.prefix = undefined;
1679
+ return;
1680
+ }
1681
+ var colonIndex = iconName.indexOf(':');
1682
+ if (colonIndex > 0) {
1683
+ this.prefix = this.icon.slice(0, colonIndex);
1684
+ this.suffix = this.icon.slice(colonIndex + 1);
1685
+ }
1686
+ if (this.prefix) {
1687
+ this.errorMessage = "Unknown icon \"" + iconName + "\"";
1688
+ }
1689
+ this.errorMessage = "Unknown icon prefix, expected one of [" + this.allowedPrefixes.join(',') + "] got \"" + this.prefix + ":\"";
1690
+ },
1691
+ enumerable: true,
1692
+ configurable: true
1693
+ });
1694
+ var IconComponent_1;
1695
+ __decorate([
1696
+ Input(),
1697
+ __metadata("design:type", String),
1698
+ __metadata("design:paramtypes", [String])
1699
+ ], IconComponent.prototype, "icon", null);
1700
+ IconComponent = IconComponent_1 = __decorate([
1701
+ Component({
1702
+ selector: 'aup-icon',
1703
+ template: "<ng-container [ngSwitch]=\"prefix\">\n\n <mat-icon *ngSwitchCase=\"iconPrefix.SVG\"\n [svgIcon]=\"suffix\"\n class=\"svgIcon\">\n </mat-icon>\n\n <mat-icon *ngSwitchCase=\"iconPrefix.MATERIAL\">\n {{suffix}}\n </mat-icon>\n\n <div *ngSwitchCase=\"iconPrefix.FONT_AWESOME\"\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",
1704
+ 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}"]
1705
+ })
1706
+ ], IconComponent);
1707
+ return IconComponent;
1708
+ }());
1709
+ (function (IconComponent) {
1710
+ IconComponent.IconPrefix = Enum({
1711
+ SVG: 'svg',
1712
+ FONT_AWESOME: 'fa',
1713
+ MATERIAL: 'mat'
1714
+ });
1715
+ })(IconComponent || (IconComponent = {}));
1716
+
967
1717
  var NoopComponent = /** @class */ (function () {
968
1718
  function NoopComponent() {
969
1719
  }
@@ -1174,6 +1924,7 @@ var CellHeaderPortalRef = /** @class */ (function (_super) {
1174
1924
  assert$1.isTruthy(host);
1175
1925
  host[HEADER_CELL_RENDERER_PORTAL] = new ComponentPortal(this.componentType);
1176
1926
  };
1927
+ // @Trace()
1177
1928
  CellHeaderPortalRef.prototype.onPortalAttached = function (host, portalComponent) {
1178
1929
  this.initialiseHeader(portalComponent, host.column);
1179
1930
  };
@@ -1197,13 +1948,15 @@ var ComponentCellRendererPortalRef = /** @class */ (function (_super) {
1197
1948
  ComponentCellRendererPortalRef.prototype.initialiseHost = function (host, columnModel) {
1198
1949
  host[CELL_RENDERER_PORTAL] = new ComponentPortal(this.componentType);
1199
1950
  };
1951
+ // @Trace()
1200
1952
  ComponentCellRendererPortalRef.prototype.onPortalAttached = function (host, portalComponent) {
1201
1953
  host[PORTAL_RENDERER_COMPONENT] = portalComponent;
1202
- this.updateComponent(portalComponent, host.getRowData());
1954
+ this.updateComponent(portalComponent, host.getRowData(), true);
1203
1955
  };
1956
+ // @Trace()
1204
1957
  ComponentCellRendererPortalRef.prototype.pushState = function (host) {
1205
1958
  if (host[PORTAL_RENDERER_COMPONENT]) {
1206
- this.updateComponent(host[PORTAL_RENDERER_COMPONENT], host.getRowData());
1959
+ this.updateComponent(host[PORTAL_RENDERER_COMPONENT], host.getRowData(), false);
1207
1960
  }
1208
1961
  };
1209
1962
  return ComponentCellRendererPortalRef;
@@ -1245,6 +1998,7 @@ var TemplateCellRendererPortalRef = /** @class */ (function (_super) {
1245
1998
  TemplateCellRendererPortalRef.prototype.onPortalAttached = function (host, portalComponent) {
1246
1999
  // don't care
1247
2000
  };
2001
+ // @Trace()
1248
2002
  TemplateCellRendererPortalRef.prototype.pushState = function (host) {
1249
2003
  host[CELL_RENDERER_PORTAL] = this.createPortal(host.getRowData());
1250
2004
  host.fillCell = this.fillCell;
@@ -1436,6 +2190,7 @@ var SelectHeaderCellRendererComponent = /** @class */ (function (_super) {
1436
2190
  var noop = function () {
1437
2191
  };
1438
2192
  var ɵ0 = noop;
2193
+ var CELL_RENDERER_COMPONENT_ROW_CACHE = Symbol("aup-cell-renderer:row-data-cache");
1439
2194
  var ColumnModel = /** @class */ (function () {
1440
2195
  function ColumnModel(columnId, defaults) {
1441
2196
  this.columnId = columnId;
@@ -1526,24 +2281,66 @@ var ColumnModel = /** @class */ (function () {
1526
2281
  }());
1527
2282
  var PropertyColumnModel = /** @class */ (function (_super) {
1528
2283
  __extends(PropertyColumnModel, _super);
1529
- function PropertyColumnModel(property, defaults) {
1530
- var _this = _super.call(this, property.toString(), defaults) || this;
2284
+ function PropertyColumnModel(id, property, defaults) {
2285
+ var _this = _super.call(this, id, defaults) || this;
1531
2286
  _this.property = property;
1532
2287
  _this._format = function (value) { return value; };
1533
2288
  _this.cellRenderer(DefaultCellRendererComponent);
1534
2289
  return _this;
1535
2290
  }
1536
- PropertyColumnModel.prototype.cellRenderer = function (componentType) {
2291
+ PropertyColumnModel.prototype.cellRenderer = function (componentType, onComponentInitOrOptions) {
1537
2292
  var _this = this;
1538
- this.configureCellRenderer(new ComponentCellRendererPortalRef(componentType, function (component, rowData) {
2293
+ this.configureCellRenderer(new ComponentCellRendererPortalRef(componentType, function (component, rowData, firstTime) {
2294
+ if (firstTime) {
2295
+ if (___default.isFunction(onComponentInitOrOptions)) {
2296
+ onComponentInitOrOptions(component);
2297
+ }
2298
+ else {
2299
+ if (___default.isFunction(onComponentInitOrOptions === null || onComponentInitOrOptions === void 0 ? void 0 : onComponentInitOrOptions.onComponentInit)) {
2300
+ onComponentInitOrOptions.onComponentInit(component);
2301
+ }
2302
+ }
2303
+ }
1539
2304
  component.value = _this._format(rowData.row[_this.property]);
2305
+ if (!___default.isFunction(onComponentInitOrOptions) && ___default.isFunction(onComponentInitOrOptions === null || onComponentInitOrOptions === void 0 ? void 0 : onComponentInitOrOptions.onRowUpdate)) {
2306
+ onComponentInitOrOptions.onRowUpdate(component, rowData.row);
2307
+ }
2308
+ }));
2309
+ return this;
2310
+ };
2311
+ PropertyColumnModel.prototype.mutableCellRenderer = function (componentType, options) {
2312
+ var _this = this;
2313
+ this.configureCellRenderer(new ComponentCellRendererPortalRef(componentType, function (component, rowData, firstTime) {
2314
+ // keep a local copy most recent row value so it's available to teh
2315
+ // edit callback without having to add/remove subscribers all the time.
2316
+ component[CELL_RENDERER_COMPONENT_ROW_CACHE] = rowData.row;
2317
+ var disableEditCallback = false;
2318
+ if (firstTime) {
2319
+ if (___default.isFunction(options === null || options === void 0 ? void 0 : options.onComponentInit)) {
2320
+ options.onComponentInit(component);
2321
+ }
2322
+ // install our edit callback
2323
+ component.onValueEdited(function (is, was) {
2324
+ if (!disableEditCallback) {
2325
+ options.onValueEdit(component[CELL_RENDERER_COMPONENT_ROW_CACHE], is, was);
2326
+ }
2327
+ });
2328
+ }
2329
+ // now push the value the component and disable the callback just incase the component misbehaves
2330
+ // and fires a value change during the operation.
2331
+ disableEditCallback = true;
2332
+ component.value = rowData.row[_this.property];
2333
+ disableEditCallback = false;
2334
+ if (!___default.isFunction(options) && ___default.isFunction(options === null || options === void 0 ? void 0 : options.onRowUpdate)) {
2335
+ options.onRowUpdate(component, rowData.row);
2336
+ }
1540
2337
  }));
1541
2338
  return this;
1542
2339
  };
1543
- PropertyColumnModel.prototype.cellEditor = function (editor, validatorsOrInitialiser, initialiseComponent) {
2340
+ PropertyColumnModel.prototype.cellEditor = function (editor, validatorsOrInitialiser, onComponentInit) {
1544
2341
  var _this = this;
1545
2342
  var validators = Array.isArray(validatorsOrInitialiser) ? validatorsOrInitialiser : undefined;
1546
- var initialiser = ___default.isFunction(validatorsOrInitialiser) ? validatorsOrInitialiser : initialiseComponent;
2343
+ var initialiser = ___default.isFunction(validatorsOrInitialiser) ? validatorsOrInitialiser : onComponentInit;
1547
2344
  this.configureCellEditor(new CellEditorPortalRef(editor, function (component, editSession) {
1548
2345
  var formValueModel = editSession.form.pluck(_this.property);
1549
2346
  if (validators) {
@@ -1568,8 +2365,8 @@ var PropertyColumnModel = /** @class */ (function (_super) {
1568
2365
  }(ColumnModel));
1569
2366
  var ListPropertyColumnModel = /** @class */ (function (_super) {
1570
2367
  __extends(ListPropertyColumnModel, _super);
1571
- function ListPropertyColumnModel(property, defaults) {
1572
- var _this = _super.call(this, property.toString(), defaults) || this;
2368
+ function ListPropertyColumnModel(id, property, defaults) {
2369
+ var _this = _super.call(this, id, defaults) || this;
1573
2370
  _this.property = property;
1574
2371
  _this._format = function (value) { return value.map(function (v) { return v === null || v === void 0 ? void 0 : v.toString(); }).join(', '); };
1575
2372
  _this.cellRenderer(DefaultCellRendererComponent);
@@ -1616,10 +2413,23 @@ var CustomValueColumnModel = /** @class */ (function (_super) {
1616
2413
  _this.cellRenderer(DefaultCellRendererComponent);
1617
2414
  return _this;
1618
2415
  }
1619
- CustomValueColumnModel.prototype.cellRenderer = function (componentType) {
2416
+ CustomValueColumnModel.prototype.cellRenderer = function (componentType, onComponentInitOrOptions) {
1620
2417
  var _this = this;
1621
- this.configureCellRenderer(new ComponentCellRendererPortalRef(componentType, function (component, rowData) {
2418
+ this.configureCellRenderer(new ComponentCellRendererPortalRef(componentType, function (component, rowData, firstTime) {
2419
+ if (firstTime) {
2420
+ if (___default.isFunction(onComponentInitOrOptions)) {
2421
+ onComponentInitOrOptions(component);
2422
+ }
2423
+ else {
2424
+ if (___default.isFunction(onComponentInitOrOptions === null || onComponentInitOrOptions === void 0 ? void 0 : onComponentInitOrOptions.onComponentInit)) {
2425
+ onComponentInitOrOptions.onComponentInit(component);
2426
+ }
2427
+ }
2428
+ }
1622
2429
  component.value = _this.getValue(rowData.row);
2430
+ if (!___default.isFunction(onComponentInitOrOptions) && ___default.isFunction(onComponentInitOrOptions === null || onComponentInitOrOptions === void 0 ? void 0 : onComponentInitOrOptions.onRowUpdate)) {
2431
+ onComponentInitOrOptions.onRowUpdate(component, rowData.row);
2432
+ }
1623
2433
  }));
1624
2434
  return this;
1625
2435
  };
@@ -1792,6 +2602,9 @@ var TableModel = /** @class */ (function () {
1792
2602
  this._editorSessions = new MutableListModel();
1793
2603
  this.rowClassNamePredicates = [];
1794
2604
  this._createForm = function (row) { return new DirtyTrackingForm(); };
2605
+ this.trackBy = function (index, item) {
2606
+ return _this.identityOf ? _this.identityOf(item) : index;
2607
+ };
1795
2608
  this.identityOf = sourceOfTruth.identityOf;
1796
2609
  var _a = Dsl.disposeWith(this._garbage), chain = _a.chain, valueOf = _a.valueOf, before = _a.before, when = _a.when, after = _a.after, observe = _a.observe, switchOn = _a.switchOn;
1797
2610
  this._columnsById = chain(this._columns).indexBy('columnId');
@@ -1803,7 +2616,7 @@ var TableModel = /** @class */ (function () {
1803
2616
  this.dataSource = chain(this.sourceOfTruth).replaceAll(this.rowsBeingEdited);
1804
2617
  this.firstEditableColumn = chain(this.columns).select(function (c) { return c.hasEditorPortal(); }).first();
1805
2618
  this.hasColumnsWithRowSelectionExplicitlyEnabled = chain(this._columns).findIndex(function (column) { return column.isRowSelectionExplicitlyEnabled(); }).isGreaterThanOrEqualTo(0);
1806
- this.addRowClass("enable-hover", function () { return _this.isRowSelectionEnabled(); });
2619
+ this.addRowClass('enable-hover', function () { return _this.isRowSelectionEnabled(); });
1807
2620
  }
1808
2621
  TableModel_1 = TableModel;
1809
2622
  TableModel.fromList = function (sourceOfTruth, builder) {
@@ -1818,12 +2631,6 @@ var TableModel = /** @class */ (function () {
1818
2631
  enumerable: true,
1819
2632
  configurable: true
1820
2633
  });
1821
- TableModel.prototype.getTrackByFunction = function () {
1822
- var _this = this;
1823
- return function (index, item) {
1824
- return _this.identityOf ? _this.identityOf(item) : index;
1825
- };
1826
- };
1827
2634
  Object.defineProperty(TableModel.prototype, "columns", {
1828
2635
  get: function () {
1829
2636
  return this._columns.readonly;
@@ -1831,11 +2638,11 @@ var TableModel = /** @class */ (function () {
1831
2638
  enumerable: true,
1832
2639
  configurable: true
1833
2640
  });
1834
- TableModel.prototype.pluck = function (property) {
1835
- return this.addColumn(new PropertyColumnModel(property, this));
2641
+ TableModel.prototype.pluck = function (property, options) {
2642
+ return this.addColumn(new PropertyColumnModel((options === null || options === void 0 ? void 0 : options.columnId) || property.toString(), property, this));
1836
2643
  };
1837
- TableModel.prototype.pluckList = function (property) {
1838
- return this.addColumn(new ListPropertyColumnModel(property, this));
2644
+ TableModel.prototype.pluckList = function (property, options) {
2645
+ return this.addColumn(new ListPropertyColumnModel((options === null || options === void 0 ? void 0 : options.columnId) || property.toString(), property, this));
1839
2646
  };
1840
2647
  TableModel.prototype.addSelectionColumn = function (selectionModel) {
1841
2648
  assert.isNil(this.selectionColumnModel);
@@ -1849,6 +2656,9 @@ var TableModel = /** @class */ (function () {
1849
2656
  TableModel.prototype.addCustomColumn = function (columnId, dataAccessor) {
1850
2657
  return this.addColumn(new CustomValueColumnModel(columnId, this, dataAccessor));
1851
2658
  };
2659
+ TableModel.prototype.addComponentColumn = function (columnId, component, onComponentInitOrOptions) {
2660
+ return this.addColumn(new CustomValueColumnModel(columnId, this, function (row) { return row; })).cellRenderer(component, onComponentInitOrOptions);
2661
+ };
1852
2662
  TableModel.prototype.addTemplateColumn = function (columnId) {
1853
2663
  return this.addColumn(new CustomTemplateColumnModel(columnId, this));
1854
2664
  };
@@ -2000,7 +2810,7 @@ var TableComponent = /** @class */ (function (_super) {
2000
2810
  TableComponent = __decorate([
2001
2811
  Component({
2002
2812
  selector: 'aup-table',
2003
- 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",
2813
+ template: "<table mat-table [dataSource]=\"tableModel.dataSource.value\" [trackBy]=\"tableModel.trackBy\">\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; let i = index\"\n [ngClass]=\"tableModel.getRowClasses(row)\" [attr.trackBy]=\"tableModel.trackBy(i, row)\"\n ></tr>\n\n</table>\n",
2004
2814
  styles: [":host{display:flex;flex-direction:column;align-items:stretch}:host table{flex:1}"]
2005
2815
  }),
2006
2816
  __metadata("design:paramtypes", [])
@@ -2183,6 +2993,65 @@ var TableHeaderCellRendererComponent = /** @class */ (function () {
2183
2993
  return TableHeaderCellRendererComponent;
2184
2994
  }());
2185
2995
 
2996
+ var MenuItemData = /** @class */ (function (_super) {
2997
+ __extends(MenuItemData, _super);
2998
+ function MenuItemData(factory, face) {
2999
+ var _this = _super.call(this, face) || this;
3000
+ _this.factory = factory;
3001
+ return _this;
3002
+ }
3003
+ return MenuItemData;
3004
+ }(CommandFace.Adapter));
3005
+ /**
3006
+ *
3007
+ */
3008
+ var TableRowMenuComponent = /** @class */ (function (_super) {
3009
+ __extends(TableRowMenuComponent, _super);
3010
+ function TableRowMenuComponent() {
3011
+ var _this = _super.call(this) || this;
3012
+ _this.actions = [];
3013
+ _this.moreActions = [];
3014
+ return _this;
3015
+ }
3016
+ TableRowMenuComponent.prototype.registerAction = function (commandFactory, properties) {
3017
+ this.actions.push(new MenuItemData(commandFactory, properties));
3018
+ };
3019
+ TableRowMenuComponent.prototype.registerMoreAction = function (commandFactory, properties) {
3020
+ this.moreActions.push(new MenuItemData(commandFactory, properties));
3021
+ };
3022
+ TableRowMenuComponent.prototype.ngOnInit = function () {
3023
+ };
3024
+ TableRowMenuComponent.prototype.createMoreMenuCommand = function (item, value) {
3025
+ var _this = this;
3026
+ var when = Dsl.disposeWith(this).when;
3027
+ var command = item.factory.create(value);
3028
+ when(command.busy).becomesFalsey(function () {
3029
+ _this.closeMoreMenu();
3030
+ });
3031
+ return command;
3032
+ };
3033
+ TableRowMenuComponent.prototype.closeMoreMenu = function () {
3034
+ this.menu.closeMenu();
3035
+ };
3036
+ __decorate([
3037
+ Input(),
3038
+ __metadata("design:type", Object)
3039
+ ], TableRowMenuComponent.prototype, "value", void 0);
3040
+ __decorate([
3041
+ ViewChild(MatMenuTrigger),
3042
+ __metadata("design:type", MatMenuTrigger)
3043
+ ], TableRowMenuComponent.prototype, "menu", void 0);
3044
+ TableRowMenuComponent = __decorate([
3045
+ Component({
3046
+ selector: 'aup-table-row-menu',
3047
+ template: "\n <button mat-icon-button *ngFor=\"let action of actions\" [pectinCommand]=\"action.factory.create(value)\">\n <aup-icon [icon]=\"action.icon\"></aup-icon>\n </button>\n <ng-container *ngIf=\"moreActions.length > 0\">\n <button #trigger mat-icon-button [matMenuTriggerFor]=\"menu\">\n <aup-icon icon=\"mat:more_vert\"></aup-icon>\n </button>\n <mat-menu #menu=\"matMenu\" xPosition=\"before\" matTooltip=\"More options...\">\n <button *ngFor=\"let action of moreActions\"\n mat-menu-item\n [pectinCommand]=\"createMoreMenuCommand(action, value)\"\n >\n <aup-icon *ngIf=\"action.icon && action.iconPositionStart\" [icon]=\"action.icon\"></aup-icon>\n {{action.text}}\n <aup-icon *ngIf=\"action.icon && action.iconPositionEnd\" [icon]=\"action.icon\"></aup-icon>\n </button>\n </mat-menu>\n </ng-container>\n ",
3048
+ styles: [":host {\n display: inline-flex;\n flex-direction: row;\n align-items: center;\n }"]
3049
+ }),
3050
+ __metadata("design:paramtypes", [])
3051
+ ], TableRowMenuComponent);
3052
+ return TableRowMenuComponent;
3053
+ }(DisposableComponent));
3054
+
2186
3055
  var VerticalFocusContainerComponent = /** @class */ (function (_super) {
2187
3056
  __extends(VerticalFocusContainerComponent, _super);
2188
3057
  function VerticalFocusContainerComponent(focusManager) {
@@ -2268,100 +3137,6 @@ var VerticalFocusContainerComponent = /** @class */ (function (_super) {
2268
3137
  return VerticalFocusContainerComponent;
2269
3138
  }(FocusContainerComponent));
2270
3139
 
2271
- var MultipleSelectInputComponent = /** @class */ (function (_super) {
2272
- __extends(MultipleSelectInputComponent, _super);
2273
- function MultipleSelectInputComponent() {
2274
- var _this = _super.call(this) || this;
2275
- _this.optionLabelFormat = function (option) { return (option && _this.optionLabel) ? option[_this.optionLabel] : option; };
2276
- return _this;
2277
- }
2278
- MultipleSelectInputComponent.prototype.ngOnInit = function () {
2279
- };
2280
- __decorate([
2281
- Input(), TrackExternal({ delegateTo: 'inputModel' }),
2282
- __metadata("design:type", Object)
2283
- ], MultipleSelectInputComponent.prototype, "listModel", void 0);
2284
- __decorate([
2285
- Input(), TrackExternal(),
2286
- __metadata("design:type", ListModel)
2287
- ], MultipleSelectInputComponent.prototype, "optionsModel", void 0);
2288
- __decorate([
2289
- Input(), StoreInListModel('optionsModel'),
2290
- __metadata("design:type", Array)
2291
- ], MultipleSelectInputComponent.prototype, "options", void 0);
2292
- __decorate([
2293
- Input(),
2294
- __metadata("design:type", Object)
2295
- ], MultipleSelectInputComponent.prototype, "optionLabel", void 0);
2296
- __decorate([
2297
- Input(),
2298
- __metadata("design:type", Boolean)
2299
- ], MultipleSelectInputComponent.prototype, "allowNil", void 0);
2300
- __decorate([
2301
- ContentChild('optionTemplate'),
2302
- __metadata("design:type", TemplateRef)
2303
- ], MultipleSelectInputComponent.prototype, "optionTemplateRef", void 0);
2304
- __decorate([
2305
- ContentChild('nilOptionTemplate'),
2306
- __metadata("design:type", TemplateRef)
2307
- ], MultipleSelectInputComponent.prototype, "nilOptionTemplateRef", void 0);
2308
- __decorate([
2309
- Input(),
2310
- __metadata("design:type", Function)
2311
- ], MultipleSelectInputComponent.prototype, "optionLabelFormat", void 0);
2312
- MultipleSelectInputComponent = __decorate([
2313
- Component({
2314
- selector: 'aup-multiple-select-input',
2315
- 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",
2316
- styles: [":host{display:inline-block}mat-form-field{width:100%}"]
2317
- }),
2318
- __metadata("design:paramtypes", [])
2319
- ], MultipleSelectInputComponent);
2320
- return MultipleSelectInputComponent;
2321
- }(AbstractListInputComponent));
2322
-
2323
- var IconComponent = /** @class */ (function () {
2324
- function IconComponent() {
2325
- }
2326
- Object.defineProperty(IconComponent.prototype, "icon", {
2327
- get: function () {
2328
- return this._icon;
2329
- },
2330
- set: function (iconName) {
2331
- this._icon = iconName;
2332
- if (!iconName) {
2333
- this.errorMessage = 'icon is nil';
2334
- this.prefix = undefined;
2335
- return;
2336
- }
2337
- var colonIndex = iconName.indexOf(':');
2338
- if (colonIndex > 0) {
2339
- this.prefix = this.icon.slice(0, colonIndex);
2340
- this.suffix = this.icon.slice(colonIndex + 1);
2341
- }
2342
- if (this.prefix) {
2343
- this.errorMessage = "Unknown icon \"" + iconName + "\"";
2344
- }
2345
- this.errorMessage = "Unknown icon prefix \"" + this.prefix + "\"";
2346
- },
2347
- enumerable: true,
2348
- configurable: true
2349
- });
2350
- __decorate([
2351
- Input(),
2352
- __metadata("design:type", String),
2353
- __metadata("design:paramtypes", [String])
2354
- ], IconComponent.prototype, "icon", null);
2355
- IconComponent = __decorate([
2356
- Component({
2357
- selector: 'aup-icon',
2358
- 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",
2359
- 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}"]
2360
- })
2361
- ], IconComponent);
2362
- return IconComponent;
2363
- }());
2364
-
2365
3140
  var ComponentsModule = /** @class */ (function () {
2366
3141
  function ComponentsModule(faIconLibrary) {
2367
3142
  faIconLibrary.addIconPacks(fas);
@@ -2380,6 +3155,8 @@ var ComponentsModule = /** @class */ (function () {
2380
3155
  TextInputComponent,
2381
3156
  PasswordInputComponent,
2382
3157
  SelectInputComponent,
3158
+ MultipleSelectInputComponent,
3159
+ AutocompleteInputComponent,
2383
3160
  CheckboxInputComponent,
2384
3161
  ScrollContainerComponent,
2385
3162
  NoopComponent,
@@ -2399,9 +3176,16 @@ var ComponentsModule = /** @class */ (function () {
2399
3176
  SelectHeaderCellRendererComponent,
2400
3177
  DefaultHeaderCellRendererComponent,
2401
3178
  TableHeaderCellRendererComponent,
2402
- MultipleSelectInputComponent,
2403
3179
  IconComponent,
2404
- SectionHeaderComponent
3180
+ SectionHeaderComponent,
3181
+ TableRowMenuComponent,
3182
+ CommandBarComponent,
3183
+ CommandComponent,
3184
+ PopupMenuComponent,
3185
+ CommandFaceComponent,
3186
+ AbstractPopupMenuComponent,
3187
+ PopupMenuRendererComponent,
3188
+ MoreMenuComponent
2405
3189
  ],
2406
3190
  imports: [
2407
3191
  CommonModule,
@@ -2419,7 +3203,10 @@ var ComponentsModule = /** @class */ (function () {
2419
3203
  PortalModule,
2420
3204
  CdkScrollableModule,
2421
3205
  FontAwesomeModule,
2422
- MatTooltipModule
3206
+ MatTooltipModule,
3207
+ MatAutocompleteModule,
3208
+ _MatMenuDirectivesModule,
3209
+ MatMenuModule
2423
3210
  ],
2424
3211
  exports: [
2425
3212
  NumberInputComponent,
@@ -2428,6 +3215,8 @@ var ComponentsModule = /** @class */ (function () {
2428
3215
  PasswordInputComponent,
2429
3216
  CheckboxInputComponent,
2430
3217
  SelectInputComponent,
3218
+ MultipleSelectInputComponent,
3219
+ AutocompleteInputComponent,
2431
3220
  ScrollContainerComponent,
2432
3221
  NoopComponent,
2433
3222
  SwitchCaseComponent,
@@ -2440,12 +3229,31 @@ var ComponentsModule = /** @class */ (function () {
2440
3229
  TableComponent,
2441
3230
  EditRowControls,
2442
3231
  ColumnTemplateDirective,
2443
- MultipleSelectInputComponent,
2444
3232
  IconComponent,
2445
- SectionHeaderComponent
3233
+ SectionHeaderComponent,
3234
+ TableRowMenuComponent,
3235
+ CommandBarComponent,
3236
+ CommandComponent,
3237
+ AbstractPopupMenuComponent,
3238
+ PopupMenuComponent,
3239
+ CommandFaceComponent,
3240
+ PopupMenuRendererComponent,
3241
+ MoreMenuComponent
2446
3242
  ],
2447
3243
  providers: [
2448
- FocusBindingFactory,
3244
+ FocusBindingFactory
3245
+ // {
3246
+ // provide: CELL_EDITOR_REGISTRATION, useValue: {
3247
+ // type: 'string',
3248
+ // editorClass: StringInputComponent
3249
+ // }, multi: true
3250
+ // },
3251
+ // {
3252
+ // provide: CELL_EDITOR_REGISTRATION, useValue: {
3253
+ // type: 'number',
3254
+ // editorClass: NumberInputComponent
3255
+ // }, multi: true
3256
+ // }
2449
3257
  ]
2450
3258
  }),
2451
3259
  __metadata("design:paramtypes", [FaIconLibrary])
@@ -2775,6 +3583,7 @@ var ActivityOutletComponent = /** @class */ (function () {
2775
3583
  this.componentFactoryResolver = componentFactoryResolver;
2776
3584
  this.viewContainerRef = viewContainerRef;
2777
3585
  this.injector = injector;
3586
+ this._disableAnimation = false;
2778
3587
  }
2779
3588
  Object.defineProperty(ActivityOutletComponent.prototype, "activityRef", {
2780
3589
  get: function () {
@@ -2782,7 +3591,7 @@ var ActivityOutletComponent = /** @class */ (function () {
2782
3591
  },
2783
3592
  set: function (activityRef) {
2784
3593
  if (this.activityRef && !this.activityRef.isComplete()) {
2785
- lang$1.illegalState("changing activity before previous one has completed");
3594
+ lang$1.illegalState('changing activity before previous one has completed');
2786
3595
  }
2787
3596
  this._activityRef = activityRef;
2788
3597
  this.loadActivity(activityRef);
@@ -2791,6 +3600,17 @@ var ActivityOutletComponent = /** @class */ (function () {
2791
3600
  configurable: true
2792
3601
  });
2793
3602
  ;
3603
+ Object.defineProperty(ActivityOutletComponent.prototype, "disableAnimation", {
3604
+ get: function () {
3605
+ return this._disableAnimation;
3606
+ },
3607
+ set: function (value) {
3608
+ // console.log({disableAnimation: value});
3609
+ this._disableAnimation = value;
3610
+ },
3611
+ enumerable: true,
3612
+ configurable: true
3613
+ });
2794
3614
  ActivityOutletComponent.prototype.ngOnInit = function () {
2795
3615
  };
2796
3616
  ActivityOutletComponent.prototype.loadActivity = function (activityRef) {
@@ -2827,6 +3647,12 @@ var ActivityOutletComponent = /** @class */ (function () {
2827
3647
  __metadata("design:type", ActivityRef),
2828
3648
  __metadata("design:paramtypes", [ActivityRef])
2829
3649
  ], ActivityOutletComponent.prototype, "activityRef", null);
3650
+ __decorate([
3651
+ Input(),
3652
+ HostBinding('@.disabled'),
3653
+ __metadata("design:type", Boolean),
3654
+ __metadata("design:paramtypes", [Boolean])
3655
+ ], ActivityOutletComponent.prototype, "disableAnimation", null);
2830
3656
  ActivityOutletComponent = __decorate([
2831
3657
  Component({
2832
3658
  selector: 'aup-activity-outlet',
@@ -2847,6 +3673,11 @@ var ActivityContainerComponent = /** @class */ (function (_super) {
2847
3673
  _this.dynamicHeight = false;
2848
3674
  _this.activityTabs = [];
2849
3675
  _this.garbage = new GarbageCollector();
3676
+ // We have issues where angular is triggering a leave animation when an
3677
+ // activity is replaced by another, but is not running the enter animation
3678
+ // when it is scrolled back into view. So we track the tab changes and
3679
+ // disable all animations inside the tab while we're animating.
3680
+ _this.inTabChange = new MutableValueModel(false);
2850
3681
  return _this;
2851
3682
  }
2852
3683
  ActivityContainerComponent.prototype.ngOnInit = function () {
@@ -2884,6 +3715,7 @@ var ActivityContainerComponent = /** @class */ (function (_super) {
2884
3715
  ActivityContainerComponent.prototype.registerDisposable = function (disposable) {
2885
3716
  return this.garbage.registerDisposable(disposable);
2886
3717
  };
3718
+ // @Trace()
2887
3719
  ActivityContainerComponent.prototype.dispose = function () {
2888
3720
  // TODO: think about auto cancelling any outstanding activity on dispose.
2889
3721
  // See NavigationState.Navigating for a use-case.
@@ -2985,20 +3817,24 @@ var ActivityContainerComponent = /** @class */ (function (_super) {
2985
3817
  return index;
2986
3818
  };
2987
3819
  ;
3820
+ // @Trace()
2988
3821
  ActivityContainerComponent.prototype.onAnimationFinished = function () {
2989
3822
  if (this.onAnimationFinishedJob) {
2990
3823
  this.onAnimationFinishedJob();
2991
3824
  this.onAnimationFinishedJob = undefined;
2992
3825
  }
3826
+ this.inTabChange.value = false;
2993
3827
  };
2994
3828
  /**
2995
3829
  * Synchronises the selected tab index.
2996
3830
  */
3831
+ // @Trace()
2997
3832
  ActivityContainerComponent.prototype.synchroniseSelectedTabIndex = function () {
2998
3833
  var _this = this;
2999
3834
  var previousIndex = this.tabs.selectedIndex;
3000
3835
  var newIndex = this.getActiveActivityCount() - 1;
3001
3836
  if (previousIndex !== newIndex) {
3837
+ this.inTabChange.value = true;
3002
3838
  this.tabs.selectedIndex = newIndex;
3003
3839
  this.onAnimationFinishedJob = function () {
3004
3840
  _this.getSelectedOutlet().component.onActivityReady();
@@ -3010,6 +3846,10 @@ var ActivityContainerComponent = /** @class */ (function (_super) {
3010
3846
  return this.activityOutlets.toArray()[this.tabs.selectedIndex];
3011
3847
  };
3012
3848
  // @Trace()
3849
+ ActivityContainerComponent.prototype.getSelectedTabIndex = function () {
3850
+ return this.tabs.selectedIndex;
3851
+ };
3852
+ // @Trace()
3013
3853
  ActivityContainerComponent.prototype.triggerTabSynchronisation = function () {
3014
3854
  var _this = this;
3015
3855
  if (this.syncSelectedTabTimeout) {
@@ -3032,16 +3872,10 @@ var ActivityContainerComponent = /** @class */ (function (_super) {
3032
3872
  ViewChildren(ActivityOutletComponent),
3033
3873
  __metadata("design:type", QueryList)
3034
3874
  ], ActivityContainerComponent.prototype, "activityOutlets", void 0);
3035
- __decorate([
3036
- Trace(),
3037
- __metadata("design:type", Function),
3038
- __metadata("design:paramtypes", []),
3039
- __metadata("design:returntype", void 0)
3040
- ], ActivityContainerComponent.prototype, "dispose", null);
3041
3875
  ActivityContainerComponent = __decorate([
3042
3876
  Component({
3043
3877
  selector: 'aup-activity-container',
3044
- template: "<mat-tab-group #tabs no-tab-header\n [dynamicHeight]=\"dynamicHeight\"\n [class.full-height-tabs]=\"!dynamicHeight\">\n <mat-tab *ngFor=\"let tab of activityTabs; trackBy: activityIndex\" >\n <aup-activity-outlet [nestedInteractionContext]=\"this\" [activityRef]=\"tab\"></aup-activity-outlet>\n </mat-tab>\n</mat-tab-group>\n",
3878
+ template: "<mat-tab-group #tabs no-tab-header\n [dynamicHeight]=\"dynamicHeight\"\n [class.full-height-tabs]=\"!dynamicHeight\">\n <mat-tab *ngFor=\"let tab of activityTabs; let i = index; trackBy: activityIndex\">\n <aup-activity-outlet [nestedInteractionContext]=\"this\"\n [activityRef]=\"tab\"\n [disableAnimation]=\"inTabChange.value || i !== getSelectedTabIndex()\"></aup-activity-outlet>\n </mat-tab>\n</mat-tab-group>\n",
3045
3879
  styles: [":host{display:flex;flex-direction:column}mat-tab-group{flex:1}"]
3046
3880
  }),
3047
3881
  __metadata("design:paramtypes", [])
@@ -4121,7 +4955,7 @@ var PlaceComponent = /** @class */ (function (_super) {
4121
4955
  assert.isNil(this.visitModel.value);
4122
4956
  var when = Dsl.disposeWith(this).when;
4123
4957
  this.visitModel.value = visit;
4124
- DebugContext.get(this.visitModel).tag(this.placeDefinition.component.name + ".visitModel");
4958
+ DebugContext.getOrCreate(this.visitModel).tag(this.placeDefinition.component.name + ".visitModel");
4125
4959
  this.placeDefinition.getVisitParameterDefs().forEach(function (parameterDef) { return _this.installBinding(parameterDef); });
4126
4960
  when.valueOf(this.visitModel).changes(function (current, previous) {
4127
4961
  notifyVisitChanged(current, previous);
@@ -5269,75 +6103,6 @@ var UrlService = /** @class */ (function () {
5269
6103
  return UrlService;
5270
6104
  }());
5271
6105
 
5272
- var Visit = /** @class */ (function () {
5273
- function Visit(placeDefinition, visitParameters) {
5274
- if (visitParameters === void 0) { visitParameters = {}; }
5275
- this.placeDefinition = placeDefinition;
5276
- this.visitParameters = visitParameters;
5277
- }
5278
- // @Trace()
5279
- Visit.prototype.getRouteId = function () {
5280
- return this.placeDefinition.getRouteIdFrom(this);
5281
- };
5282
- // @Trace()
5283
- Visit.prototype.hasRouteId = function () {
5284
- return !isNil(this.getRouteId());
5285
- };
5286
- /**
5287
- * Returns the value of the place parameter with the specified name. The parameter
5288
- * name is taken from the `as` option, e.g. {as: 'aCustomName'} otherwise it is the
5289
- * same as the the ValueModel property name.
5290
- * @param parameterName the field name of the property model or the `as` option if specified.
5291
- */
5292
- Visit.prototype.getParameter = function (parameterName) {
5293
- return this.visitParameters[parameterName];
5294
- };
5295
- // @Trace()
5296
- Visit.prototype.hasParameter = function (parameterName) {
5297
- return Object.keys(this.visitParameters).includes(parameterName);
5298
- };
5299
- Visit.prototype.replace = function (parameter, value) {
5300
- var _a;
5301
- return new Visit(this.placeDefinition, __assign(__assign({}, this.visitParameters), (_a = {}, _a[parameter.name] = value, _a)));
5302
- };
5303
- Visit.prototype.mergeRouteParameters = function (routeParams) {
5304
- var _this = this;
5305
- // todo: whitelist parameters.
5306
- var routeParameterKeys = Object.keys(routeParams);
5307
- var params = {};
5308
- this.placeDefinition.getVisitParameterDefs().forEach(function (def) {
5309
- if (def.isRouteId || def.isRouteParameter) {
5310
- if (routeParameterKeys.includes(def.name)) {
5311
- params[def.name] = routeParams[def.name];
5312
- }
5313
- }
5314
- else {
5315
- // copy non route params as is, but only if they already exist otherwise we'll inject nil values and break the
5316
- // defaults and remember sanitisation process.
5317
- var value = _this.getParameter(def.name);
5318
- if (_this.hasParameter(def.name)) {
5319
- params[def.name] = value;
5320
- }
5321
- }
5322
- });
5323
- return new Visit(this.placeDefinition, params);
5324
- };
5325
- Visit.prototype.hasRoutingChangedFrom = function (other) {
5326
- var samePlace = other.placeDefinition === this.placeDefinition;
5327
- var sameRouteParameters = isEqual(this.placeDefinition.getFormattedRouteParameters(this, true), this.placeDefinition.getFormattedRouteParameters(other, true));
5328
- return !samePlace || !sameRouteParameters;
5329
- };
5330
- Visit.prototype.hasChangedFrom = function (other) {
5331
- var sameNonRouteParameters = isEqual(this.placeDefinition.getNonRouteParameters(this), this.placeDefinition.getNonRouteParameters(other));
5332
- return !sameNonRouteParameters || this.hasRoutingChangedFrom(other);
5333
- };
5334
- Visit.prototype.toDebugString = function () {
5335
- var _this = this;
5336
- return Object.keys(this.visitParameters).map(function (k) { return k + "=" + _this.visitParameters[k]; }).join(",");
5337
- };
5338
- return Visit;
5339
- }());
5340
-
5341
6106
  var PlaceRouter = /** @class */ (function (_super) {
5342
6107
  __extends(PlaceRouter, _super);
5343
6108
  function PlaceRouter(angularRouter, angularLocation, interactionService, urlService, placeHistory) {
@@ -5533,6 +6298,7 @@ var PlaceRouter = /** @class */ (function (_super) {
5533
6298
  enumerable: true,
5534
6299
  configurable: true
5535
6300
  });
6301
+ // @Trace()
5536
6302
  PlaceRouter.prototype.pushVisitChangesToRoute = function (previous, next) {
5537
6303
  return __awaiter(this, void 0, void 0, function () {
5538
6304
  var _this = this;
@@ -5633,12 +6399,6 @@ var PlaceRouter = /** @class */ (function (_super) {
5633
6399
  { type: PlaceHistory }
5634
6400
  ]; };
5635
6401
  PlaceRouter.ɵprov = ɵɵdefineInjectable({ factory: function PlaceRouter_Factory() { return new PlaceRouter(ɵɵinject(Router), ɵɵinject(Location), ɵɵinject(InteractionService), ɵɵinject(UrlService), ɵɵinject(PlaceHistory)); }, token: PlaceRouter, providedIn: "root" });
5636
- __decorate([
5637
- Trace(),
5638
- __metadata("design:type", Function),
5639
- __metadata("design:paramtypes", [Visit, Visit]),
5640
- __metadata("design:returntype", Promise)
5641
- ], PlaceRouter.prototype, "pushVisitChangesToRoute", null);
5642
6402
  PlaceRouter = __decorate([
5643
6403
  Injectable({
5644
6404
  providedIn: 'root'
@@ -5652,6 +6412,75 @@ var PlaceRouter = /** @class */ (function (_super) {
5652
6412
  return PlaceRouter;
5653
6413
  }(GarbageCollector));
5654
6414
 
6415
+ var Visit = /** @class */ (function () {
6416
+ function Visit(placeDefinition, visitParameters) {
6417
+ if (visitParameters === void 0) { visitParameters = {}; }
6418
+ this.placeDefinition = placeDefinition;
6419
+ this.visitParameters = visitParameters;
6420
+ }
6421
+ // @Trace()
6422
+ Visit.prototype.getRouteId = function () {
6423
+ return this.placeDefinition.getRouteIdFrom(this);
6424
+ };
6425
+ // @Trace()
6426
+ Visit.prototype.hasRouteId = function () {
6427
+ return !isNil(this.getRouteId());
6428
+ };
6429
+ /**
6430
+ * Returns the value of the place parameter with the specified name. The parameter
6431
+ * name is taken from the `as` option, e.g. {as: 'aCustomName'} otherwise it is the
6432
+ * same as the the ValueModel property name.
6433
+ * @param parameterName the field name of the property model or the `as` option if specified.
6434
+ */
6435
+ Visit.prototype.getParameter = function (parameterName) {
6436
+ return this.visitParameters[parameterName];
6437
+ };
6438
+ // @Trace()
6439
+ Visit.prototype.hasParameter = function (parameterName) {
6440
+ return Object.keys(this.visitParameters).includes(parameterName);
6441
+ };
6442
+ Visit.prototype.replace = function (parameter, value) {
6443
+ var _a;
6444
+ return new Visit(this.placeDefinition, __assign(__assign({}, this.visitParameters), (_a = {}, _a[parameter.name] = value, _a)));
6445
+ };
6446
+ Visit.prototype.mergeRouteParameters = function (routeParams) {
6447
+ var _this = this;
6448
+ // todo: whitelist parameters.
6449
+ var routeParameterKeys = Object.keys(routeParams);
6450
+ var params = {};
6451
+ this.placeDefinition.getVisitParameterDefs().forEach(function (def) {
6452
+ if (def.isRouteId || def.isRouteParameter) {
6453
+ if (routeParameterKeys.includes(def.name)) {
6454
+ params[def.name] = routeParams[def.name];
6455
+ }
6456
+ }
6457
+ else {
6458
+ // copy non route params as is, but only if they already exist otherwise we'll inject nil values and break the
6459
+ // defaults and remember sanitisation process.
6460
+ var value = _this.getParameter(def.name);
6461
+ if (_this.hasParameter(def.name)) {
6462
+ params[def.name] = value;
6463
+ }
6464
+ }
6465
+ });
6466
+ return new Visit(this.placeDefinition, params);
6467
+ };
6468
+ Visit.prototype.hasRoutingChangedFrom = function (other) {
6469
+ var samePlace = other.placeDefinition === this.placeDefinition;
6470
+ var sameRouteParameters = isEqual(this.placeDefinition.getFormattedRouteParameters(this, true), this.placeDefinition.getFormattedRouteParameters(other, true));
6471
+ return !samePlace || !sameRouteParameters;
6472
+ };
6473
+ Visit.prototype.hasChangedFrom = function (other) {
6474
+ var sameNonRouteParameters = isEqual(this.placeDefinition.getNonRouteParameters(this), this.placeDefinition.getNonRouteParameters(other));
6475
+ return !sameNonRouteParameters || this.hasRoutingChangedFrom(other);
6476
+ };
6477
+ Visit.prototype.toDebugString = function () {
6478
+ var _this = this;
6479
+ return Object.keys(this.visitParameters).map(function (k) { return k + "=" + _this.visitParameters[k]; }).join(",");
6480
+ };
6481
+ return Visit;
6482
+ }());
6483
+
5655
6484
  var AUP_PLACE_CONFIG = new InjectionToken('AUP_PLACE_CONFIG');
5656
6485
 
5657
6486
  // Freezes the state of the components at the start of the animation.
@@ -6666,8 +7495,7 @@ function installMechanics(prototype, propertyKey, backingModel, tagPrefix, isEmp
6666
7495
  binding: null
6667
7496
  };
6668
7497
  var tag = tagPrefix + "(" + prototype.constructor.name + "." + propertyKey.toString() + ")";
6669
- DebugContext.get(mechanics.backingModel).tag(tag);
6670
- Logger.get(mechanics.backingModel).tag(tag);
7498
+ DebugContext.getOrCreate(mechanics.backingModel).tag(tag);
6671
7499
  Object.defineProperty(prototype, propertyKey, {
6672
7500
  get: function () {
6673
7501
  return mechanics.backingModel;
@@ -6729,5 +7557,5 @@ function VisitParameterList(options) {
6729
7557
  * Generated bundle index. Do not edit.
6730
7558
  */
6731
7559
 
6732
- 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 };
7560
+ export { ACTIVITY_DATA, AUP_PLACE_CONFIG, AbstractInputActivity, AbstractInputComponent, AbstractInteractionContext, AbstractListInputComponent, AbstractPlaceNavigationComponent, AbstractPopStateNavigation, AbstractPopupMenuComponent, 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, CommandBarComponent, CommandComponent, CommandContainer, CommandDirective, CommandFace, CommandFaceComponent, 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, MoreMenuComponent, 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, PopupMenuComponent, PopupMenuRendererComponent, 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, TableRowMenuComponent, 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, TableRowMenuComponent as ɵbm, CommandBarComponent as ɵbn, CommandContainer as ɵbo, CommandComponent as ɵbp, PopupMenuComponent as ɵbq, AbstractPopupMenuComponent as ɵbr, PopupMenuRendererComponent as ɵbs, CommandFaceComponent as ɵbt, MoreMenuComponent as ɵbu, PlaceModule as ɵbv, ComponentsModule as ɵbw, EmptyStateComponent as ɵbx, BusyOverlayComponent as ɵby, PlaceOutletComponent as ɵbz, FocusBindingDirective as ɵc, leftRightPlaceAnimation as ɵca, LEFT_RIGHT_PLACE_ANIMATION as ɵcb, AUP_PLACE_CONFIG as ɵcc, PlaceRouter as ɵce, InteractionService as ɵcf, ModalInteractionContextFactory as ɵcg, UrlService as ɵch, PlaceHistory as ɵci, TabbedPlaceNavigationComponent as ɵcj, AbstractPlaceNavigationComponent as ɵck, ListPlaceNavComponent as ɵcl, SidePlaceNavigationComponent as ɵcm, InteractionModule as ɵcn, ActivityContainerComponent as ɵco, AbstractInteractionContext as ɵcp, ActivityOutletComponent as ɵcq, ConfirmationDialogComponent as ɵcr, ACTIVITY_DATA as ɵcs, Activity as ɵct, ConfirmThenDialogComponent as ɵcv, AlertDialogComponent as ɵcw, InPlaceInteractionContextComponent as ɵcy, AddItemInteractionContextComponent as ɵcz, DisposableComponent as ɵd, ActivityActionsComponent as ɵda, PopupInteractionContextComponent as ɵdb, StringInputActivity as ɵdc, AbstractInputActivity as ɵdd, SelectInputActivity as ɵde, InteractionContextTriggerFor as ɵdf, 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 };
6733
7561
  //# sourceMappingURL=coolon-angular-ui-powerups.js.map