@coolon/angular-ui-powerups 2.0.0-alpha.9 → 2.0.0

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 (368) hide show
  1. package/CHANGELOG.md +200 -0
  2. package/assets/commands.scss +3 -0
  3. package/assets/icons.scss +30 -0
  4. package/assets/interaction.scss +5 -0
  5. package/assets/styles.scss +2 -0
  6. package/assets/tabs.scss +1 -1
  7. package/bundles/coolon-angular-ui-powerups.umd.js +1537 -277
  8. package/bundles/coolon-angular-ui-powerups.umd.js.map +1 -1
  9. package/bundles/coolon-angular-ui-powerups.umd.min.js +2 -2
  10. package/bundles/coolon-angular-ui-powerups.umd.min.js.map +1 -1
  11. package/coolon-angular-ui-powerups.d.ts +46 -34
  12. package/coolon-angular-ui-powerups.metadata.json +1 -1
  13. package/esm2015/coolon-angular-ui-powerups.js +44 -32
  14. package/esm2015/coolon-angular-ui-powerups.js.map +1 -1
  15. package/esm2015/coolon-angular-ui-powerups.metadata.json +1 -1
  16. package/esm2015/lib/angular-ui-powerups.module.ngfactory.js.map +1 -1
  17. package/esm2015/lib/components/card-container/card-container.component.js +1 -1
  18. package/esm2015/lib/components/card-container/card-container.component.metadata.json +1 -1
  19. package/esm2015/lib/components/commands/command/command.component.js +61 -0
  20. package/esm2015/lib/components/commands/command/command.component.js.map +1 -0
  21. package/esm2015/lib/components/commands/command/command.component.metadata.json +1 -0
  22. package/esm2015/lib/components/commands/command/command.component.ngfactory.js.map +1 -0
  23. package/esm2015/lib/components/commands/command-face/command-face.component.js +92 -0
  24. package/esm2015/lib/components/commands/command-face/command-face.component.js.map +1 -0
  25. package/esm2015/lib/components/commands/command-face/command-face.component.metadata.json +1 -0
  26. package/esm2015/lib/components/commands/command-face/command-face.component.ngfactory.js.map +1 -0
  27. package/esm2015/lib/components/commands/command-face/command-face.component.scss.ngstyle.js.map +1 -0
  28. package/esm2015/lib/components/commands/command-face.js +112 -0
  29. package/esm2015/lib/components/commands/command-face.js.map +1 -0
  30. package/esm2015/lib/components/commands/command-face.metadata.json +1 -0
  31. package/esm2015/lib/components/commands/flex.component.js +30 -0
  32. package/esm2015/lib/components/commands/flex.component.js.map +1 -0
  33. package/esm2015/lib/components/commands/flex.component.metadata.json +1 -0
  34. package/esm2015/lib/components/commands/flex.component.ngfactory.js.map +1 -0
  35. package/esm2015/lib/components/commands/group/command-group/command-group.component.js +47 -0
  36. package/esm2015/lib/components/commands/group/command-group/command-group.component.js.map +1 -0
  37. package/esm2015/lib/components/commands/group/command-group/command-group.component.metadata.json +1 -0
  38. package/esm2015/lib/components/commands/group/command-group/command-group.component.ngfactory.js.map +1 -0
  39. package/esm2015/lib/components/commands/group/command-group-menu-renderer/command-group-menu-renderer.component.js +55 -0
  40. package/esm2015/lib/components/commands/group/command-group-menu-renderer/command-group-menu-renderer.component.js.map +1 -0
  41. package/esm2015/lib/components/commands/group/command-group-menu-renderer/command-group-menu-renderer.component.metadata.json +1 -0
  42. package/esm2015/lib/components/commands/group/command-group-menu-renderer/command-group-menu-renderer.component.ngfactory.js.map +1 -0
  43. package/esm2015/lib/components/commands/group/command-group-renderer/command-group-renderer.component.js +39 -0
  44. package/esm2015/lib/components/commands/group/command-group-renderer/command-group-renderer.component.js.map +1 -0
  45. package/esm2015/lib/components/commands/group/command-group-renderer/command-group-renderer.component.metadata.json +1 -0
  46. package/esm2015/lib/components/commands/group/command-group-renderer/command-group-renderer.component.ngfactory.js.map +1 -0
  47. package/esm2015/lib/components/commands/group/command-group-renderer/command-group-renderer.component.scss.shim.ngstyle.js.map +1 -0
  48. package/esm2015/lib/components/commands/group/command-group.js +100 -0
  49. package/esm2015/lib/components/commands/group/command-group.js.map +1 -0
  50. package/esm2015/lib/components/commands/group/command-group.metadata.json +1 -0
  51. package/esm2015/lib/components/commands/group/more-menu.component.js +55 -0
  52. package/esm2015/lib/components/commands/group/more-menu.component.js.map +1 -0
  53. package/esm2015/lib/components/commands/group/more-menu.component.metadata.json +1 -0
  54. package/esm2015/lib/components/commands/group/more-menu.component.ngfactory.js.map +1 -0
  55. package/esm2015/lib/components/commands/group/popup-menu.component.js +65 -0
  56. package/esm2015/lib/components/commands/group/popup-menu.component.js.map +1 -0
  57. package/esm2015/lib/components/commands/group/popup-menu.component.metadata.json +1 -0
  58. package/esm2015/lib/components/commands/group/popup-menu.component.ngfactory.js.map +1 -0
  59. package/esm2015/lib/components/commands/group/registration.js +58 -0
  60. package/esm2015/lib/components/commands/group/registration.js.map +1 -0
  61. package/esm2015/lib/components/commands/group/registration.metadata.json +1 -0
  62. package/esm2015/lib/components/commands/group/tool-bar/tool-bar.component.js +55 -0
  63. package/esm2015/lib/components/commands/group/tool-bar/tool-bar.component.js.map +1 -0
  64. package/esm2015/lib/components/commands/group/tool-bar/tool-bar.component.metadata.json +1 -0
  65. package/esm2015/lib/components/commands/group/tool-bar/tool-bar.component.ngfactory.js.map +1 -0
  66. package/esm2015/lib/components/commands/group/tool-bar/tool-bar.component.scss.shim.ngstyle.js.map +1 -0
  67. package/esm2015/lib/components/commands/group/view-data.js +104 -0
  68. package/esm2015/lib/components/commands/group/view-data.js.map +1 -0
  69. package/esm2015/lib/components/commands/group/view-data.metadata.json +1 -0
  70. package/esm2015/lib/components/commands/separator.component.js +35 -0
  71. package/esm2015/lib/components/commands/separator.component.js.map +1 -0
  72. package/esm2015/lib/components/commands/separator.component.metadata.json +1 -0
  73. package/esm2015/lib/components/commands/separator.component.ngfactory.js.map +1 -0
  74. package/esm2015/lib/components/components.module.js +38 -15
  75. package/esm2015/lib/components/components.module.js.map +1 -1
  76. package/esm2015/lib/components/components.module.metadata.json +1 -1
  77. package/esm2015/lib/components/components.module.ngfactory.js.map +1 -1
  78. package/esm2015/lib/components/forms/abstract-input.component.js +12 -4
  79. package/esm2015/lib/components/forms/abstract-input.component.js.map +1 -1
  80. package/esm2015/lib/components/forms/abstract-input.component.metadata.json +1 -1
  81. package/esm2015/lib/components/forms/abstract-list-input.component.js +27 -14
  82. package/esm2015/lib/components/forms/abstract-list-input.component.js.map +1 -1
  83. package/esm2015/lib/components/forms/abstract-list-input.component.metadata.json +1 -1
  84. package/esm2015/lib/components/forms/abstract-value-input.component.js +23 -13
  85. package/esm2015/lib/components/forms/abstract-value-input.component.js.map +1 -1
  86. package/esm2015/lib/components/forms/abstract-value-input.component.metadata.json +1 -1
  87. package/esm2015/lib/components/forms/autocomplete-input/autocomplete-input.component.js +7 -1
  88. package/esm2015/lib/components/forms/autocomplete-input/autocomplete-input.component.js.map +1 -1
  89. package/esm2015/lib/components/forms/autocomplete-input/autocomplete-input.component.metadata.json +1 -1
  90. package/esm2015/lib/components/forms/checkbox-input/checkbox-input.component.js +1 -1
  91. package/esm2015/lib/components/forms/checkbox-input/checkbox-input.component.js.map +1 -1
  92. package/esm2015/lib/components/forms/checkbox-input/checkbox-input.component.metadata.json +1 -1
  93. package/esm2015/lib/components/forms/multiple-select-input/multiple-select-input.component.js +2 -10
  94. package/esm2015/lib/components/forms/multiple-select-input/multiple-select-input.component.js.map +1 -1
  95. package/esm2015/lib/components/forms/multiple-select-input/multiple-select-input.component.metadata.json +1 -1
  96. package/esm2015/lib/components/forms/number-input/number-input.component.js +1 -1
  97. package/esm2015/lib/components/forms/number-input/number-input.component.js.map +1 -1
  98. package/esm2015/lib/components/forms/number-input/number-input.component.metadata.json +1 -1
  99. package/esm2015/lib/components/forms/password-input/password-input.component.js +1 -1
  100. package/esm2015/lib/components/forms/password-input/password-input.component.js.map +1 -1
  101. package/esm2015/lib/components/forms/password-input/password-input.component.metadata.json +1 -1
  102. package/esm2015/lib/components/forms/select-input/select-input.component.js +2 -2
  103. package/esm2015/lib/components/forms/select-input/select-input.component.js.map +1 -1
  104. package/esm2015/lib/components/forms/select-input/select-input.component.metadata.json +1 -1
  105. package/esm2015/lib/components/forms/string-input/string-input.component.js +3 -3
  106. package/esm2015/lib/components/forms/string-input/string-input.component.js.map +1 -1
  107. package/esm2015/lib/components/forms/string-input/string-input.component.metadata.json +1 -1
  108. package/esm2015/lib/components/forms/text-input/text-input.component.js +1 -1
  109. package/esm2015/lib/components/forms/text-input/text-input.component.js.map +1 -1
  110. package/esm2015/lib/components/forms/text-input/text-input.component.metadata.json +1 -1
  111. package/esm2015/lib/components/icon/icon.component.js +17 -4
  112. package/esm2015/lib/components/icon/icon.component.js.map +1 -1
  113. package/esm2015/lib/components/icon/icon.component.metadata.json +1 -1
  114. package/esm2015/lib/components/index.js +16 -0
  115. package/esm2015/lib/components/index.js.map +1 -1
  116. package/esm2015/lib/components/index.metadata.json +1 -1
  117. package/esm2015/lib/components/table/column-model.js +44 -2
  118. package/esm2015/lib/components/table/column-model.js.map +1 -1
  119. package/esm2015/lib/components/table/column-model.metadata.json +1 -1
  120. package/esm2015/lib/components/table/mutable-cell-renderer.js +1 -0
  121. package/esm2015/lib/components/table/mutable-cell-renderer.js.map +1 -0
  122. package/esm2015/lib/components/table/mutable-cell-renderer.metadata.json +1 -0
  123. package/esm2015/lib/components/table/table-model.js +10 -7
  124. package/esm2015/lib/components/table/table-model.js.map +1 -1
  125. package/esm2015/lib/components/table/table-model.metadata.json +1 -1
  126. package/esm2015/lib/components/table/table-row-menu/table-row-menu.component.js +73 -0
  127. package/esm2015/lib/components/table/table-row-menu/table-row-menu.component.js.map +1 -0
  128. package/esm2015/lib/components/table/table-row-menu/table-row-menu.component.metadata.json +1 -0
  129. package/esm2015/lib/components/table/table-row-menu/table-row-menu.component.ngfactory.js.map +1 -0
  130. package/esm2015/lib/components/table/table.component.js +1 -1
  131. package/esm2015/lib/components/table/table.component.js.map +1 -1
  132. package/esm2015/lib/components/table/table.component.metadata.json +1 -1
  133. package/esm2015/lib/components/track-by.js +5 -0
  134. package/esm2015/lib/components/track-by.js.map +1 -0
  135. package/esm2015/lib/interaction/activity-ref.js +10 -2
  136. package/esm2015/lib/interaction/activity-ref.js.map +1 -1
  137. package/esm2015/lib/interaction/activity-ref.metadata.json +1 -1
  138. package/esm2015/lib/interaction/activity.js +18 -1
  139. package/esm2015/lib/interaction/activity.js.map +1 -1
  140. package/esm2015/lib/interaction/activity.metadata.json +1 -1
  141. package/esm2015/lib/interaction/components/activity-actions/activity-actions.component.js +1 -1
  142. package/esm2015/lib/interaction/components/activity-actions/activity-actions.component.metadata.json +1 -1
  143. package/esm2015/lib/interaction/components/activity-container/activity-container.component.js +24 -17
  144. package/esm2015/lib/interaction/components/activity-container/activity-container.component.js.map +1 -1
  145. package/esm2015/lib/interaction/components/activity-container/activity-container.component.metadata.json +1 -1
  146. package/esm2015/lib/interaction/components/activity-container/activity-outlet/activity-outlet.component.js +1 -1
  147. package/esm2015/lib/interaction/components/activity-container/activity-outlet/activity-outlet.component.js.map +1 -1
  148. package/esm2015/lib/interaction/components/activity-container/activity-outlet/activity-outlet.component.metadata.json +1 -1
  149. package/esm2015/lib/interaction/interaction.module.ngfactory.js.map +1 -1
  150. package/esm2015/lib/place/components/abstract-place-navigation.component.js +4 -3
  151. package/esm2015/lib/place/components/abstract-place-navigation.component.js.map +1 -1
  152. package/esm2015/lib/place/components/abstract-place-navigation.component.metadata.json +1 -1
  153. package/esm2015/lib/place/components/list-place-nav/list-place-nav.component.js +1 -1
  154. package/esm2015/lib/place/components/list-place-nav/list-place-nav.component.js.map +1 -1
  155. package/esm2015/lib/place/components/list-place-nav/list-place-nav.component.metadata.json +1 -1
  156. package/esm2015/lib/place/components/place-outlet/place-outlet.component.js +56 -16
  157. package/esm2015/lib/place/components/place-outlet/place-outlet.component.js.map +1 -1
  158. package/esm2015/lib/place/components/place-outlet/place-outlet.component.metadata.json +1 -1
  159. package/esm2015/lib/place/components/side-place-navigation/side-place-navigation.component.js +2 -2
  160. package/esm2015/lib/place/components/side-place-navigation/side-place-navigation.component.js.map +1 -1
  161. package/esm2015/lib/place/components/side-place-navigation/side-place-navigation.component.metadata.json +1 -1
  162. package/esm2015/lib/place/components/tabbed-place-navigation/tabbed-place-navigation.component.js +1 -1
  163. package/esm2015/lib/place/components/tabbed-place-navigation/tabbed-place-navigation.component.js.map +1 -1
  164. package/esm2015/lib/place/components/tabbed-place-navigation/tabbed-place-navigation.component.metadata.json +1 -1
  165. package/esm2015/lib/place/place-component.js +13 -1
  166. package/esm2015/lib/place/place-component.js.map +1 -1
  167. package/esm2015/lib/place/place-component.metadata.json +1 -1
  168. package/esm2015/lib/place/place-router.js +2 -8
  169. package/esm2015/lib/place/place-router.js.map +1 -1
  170. package/esm2015/lib/place/place-router.metadata.json +1 -1
  171. package/esm2015/lib/place/place.module.js +3 -3
  172. package/esm2015/lib/place/place.module.js.map +1 -1
  173. package/esm2015/lib/place/place.module.metadata.json +1 -1
  174. package/esm2015/lib/place/place.module.ngfactory.js.map +1 -1
  175. package/esm2015/lib/place/route/parameter-decorators.js +2 -3
  176. package/esm2015/lib/place/route/parameter-decorators.js.map +1 -1
  177. package/esm2015/lib/place/route/parameter-decorators.metadata.json +1 -1
  178. package/esm5/coolon-angular-ui-powerups.js +44 -32
  179. package/esm5/coolon-angular-ui-powerups.js.map +1 -1
  180. package/esm5/lib/angular-ui-powerups.module.ngfactory.js.map +1 -1
  181. package/esm5/lib/components/card-container/card-container.component.js +1 -1
  182. package/esm5/lib/components/commands/command/command.component.js +64 -0
  183. package/esm5/lib/components/commands/command/command.component.js.map +1 -0
  184. package/esm5/lib/components/commands/command/command.component.ngfactory.js.map +1 -0
  185. package/esm5/lib/components/commands/command-face/command-face.component.js +123 -0
  186. package/esm5/lib/components/commands/command-face/command-face.component.js.map +1 -0
  187. package/esm5/lib/components/commands/command-face/command-face.component.ngfactory.js.map +1 -0
  188. package/esm5/lib/components/commands/command-face/command-face.component.scss.ngstyle.js.map +1 -0
  189. package/esm5/lib/components/commands/command-face.js +145 -0
  190. package/esm5/lib/components/commands/command-face.js.map +1 -0
  191. package/esm5/lib/components/commands/flex.component.js +33 -0
  192. package/esm5/lib/components/commands/flex.component.js.map +1 -0
  193. package/esm5/lib/components/commands/flex.component.ngfactory.js.map +1 -0
  194. package/esm5/lib/components/commands/group/command-group/command-group.component.js +51 -0
  195. package/esm5/lib/components/commands/group/command-group/command-group.component.js.map +1 -0
  196. package/esm5/lib/components/commands/group/command-group/command-group.component.ngfactory.js.map +1 -0
  197. package/esm5/lib/components/commands/group/command-group-menu-renderer/command-group-menu-renderer.component.js +59 -0
  198. package/esm5/lib/components/commands/group/command-group-menu-renderer/command-group-menu-renderer.component.js.map +1 -0
  199. package/esm5/lib/components/commands/group/command-group-menu-renderer/command-group-menu-renderer.component.ngfactory.js.map +1 -0
  200. package/esm5/lib/components/commands/group/command-group-renderer/command-group-renderer.component.js +42 -0
  201. package/esm5/lib/components/commands/group/command-group-renderer/command-group-renderer.component.js.map +1 -0
  202. package/esm5/lib/components/commands/group/command-group-renderer/command-group-renderer.component.ngfactory.js.map +1 -0
  203. package/esm5/lib/components/commands/group/command-group-renderer/command-group-renderer.component.scss.shim.ngstyle.js.map +1 -0
  204. package/esm5/lib/components/commands/group/command-group.js +122 -0
  205. package/esm5/lib/components/commands/group/command-group.js.map +1 -0
  206. package/esm5/lib/components/commands/group/more-menu.component.js +58 -0
  207. package/esm5/lib/components/commands/group/more-menu.component.js.map +1 -0
  208. package/esm5/lib/components/commands/group/more-menu.component.ngfactory.js.map +1 -0
  209. package/esm5/lib/components/commands/group/popup-menu.component.js +68 -0
  210. package/esm5/lib/components/commands/group/popup-menu.component.js.map +1 -0
  211. package/esm5/lib/components/commands/group/popup-menu.component.ngfactory.js.map +1 -0
  212. package/esm5/lib/components/commands/group/registration.js +80 -0
  213. package/esm5/lib/components/commands/group/registration.js.map +1 -0
  214. package/esm5/lib/components/commands/group/tool-bar/tool-bar.component.js +58 -0
  215. package/esm5/lib/components/commands/group/tool-bar/tool-bar.component.js.map +1 -0
  216. package/esm5/lib/components/commands/group/tool-bar/tool-bar.component.ngfactory.js.map +1 -0
  217. package/esm5/lib/components/commands/group/tool-bar/tool-bar.component.scss.shim.ngstyle.js.map +1 -0
  218. package/esm5/lib/components/commands/group/view-data.js +131 -0
  219. package/esm5/lib/components/commands/group/view-data.js.map +1 -0
  220. package/esm5/lib/components/commands/separator.component.js +37 -0
  221. package/esm5/lib/components/commands/separator.component.js.map +1 -0
  222. package/esm5/lib/components/commands/separator.component.ngfactory.js.map +1 -0
  223. package/esm5/lib/components/components.module.js +38 -15
  224. package/esm5/lib/components/components.module.js.map +1 -1
  225. package/esm5/lib/components/components.module.ngfactory.js.map +1 -1
  226. package/esm5/lib/components/forms/abstract-input.component.js +12 -4
  227. package/esm5/lib/components/forms/abstract-input.component.js.map +1 -1
  228. package/esm5/lib/components/forms/abstract-list-input.component.js +27 -14
  229. package/esm5/lib/components/forms/abstract-list-input.component.js.map +1 -1
  230. package/esm5/lib/components/forms/abstract-value-input.component.js +23 -13
  231. package/esm5/lib/components/forms/abstract-value-input.component.js.map +1 -1
  232. package/esm5/lib/components/forms/autocomplete-input/autocomplete-input.component.js +7 -1
  233. package/esm5/lib/components/forms/autocomplete-input/autocomplete-input.component.js.map +1 -1
  234. package/esm5/lib/components/forms/checkbox-input/checkbox-input.component.js +1 -1
  235. package/esm5/lib/components/forms/checkbox-input/checkbox-input.component.js.map +1 -1
  236. package/esm5/lib/components/forms/multiple-select-input/multiple-select-input.component.js +2 -10
  237. package/esm5/lib/components/forms/multiple-select-input/multiple-select-input.component.js.map +1 -1
  238. package/esm5/lib/components/forms/number-input/number-input.component.js +1 -1
  239. package/esm5/lib/components/forms/number-input/number-input.component.js.map +1 -1
  240. package/esm5/lib/components/forms/password-input/password-input.component.js +1 -1
  241. package/esm5/lib/components/forms/password-input/password-input.component.js.map +1 -1
  242. package/esm5/lib/components/forms/select-input/select-input.component.js +2 -2
  243. package/esm5/lib/components/forms/select-input/select-input.component.js.map +1 -1
  244. package/esm5/lib/components/forms/string-input/string-input.component.js +3 -3
  245. package/esm5/lib/components/forms/string-input/string-input.component.js.map +1 -1
  246. package/esm5/lib/components/forms/text-input/text-input.component.js +1 -1
  247. package/esm5/lib/components/forms/text-input/text-input.component.js.map +1 -1
  248. package/esm5/lib/components/icon/icon.component.js +15 -3
  249. package/esm5/lib/components/icon/icon.component.js.map +1 -1
  250. package/esm5/lib/components/index.js +16 -0
  251. package/esm5/lib/components/index.js.map +1 -1
  252. package/esm5/lib/components/table/column-model.js +45 -2
  253. package/esm5/lib/components/table/column-model.js.map +1 -1
  254. package/esm5/lib/components/table/mutable-cell-renderer.js +1 -0
  255. package/esm5/lib/components/table/mutable-cell-renderer.js.map +1 -0
  256. package/esm5/lib/components/table/table-model.js +10 -8
  257. package/esm5/lib/components/table/table-model.js.map +1 -1
  258. package/esm5/lib/components/table/table-row-menu/table-row-menu.component.js +63 -0
  259. package/esm5/lib/components/table/table-row-menu/table-row-menu.component.js.map +1 -0
  260. package/esm5/lib/components/table/table-row-menu/table-row-menu.component.ngfactory.js.map +1 -0
  261. package/esm5/lib/components/table/table.component.js +1 -1
  262. package/esm5/lib/components/table/table.component.js.map +1 -1
  263. package/esm5/lib/components/track-by.js +5 -0
  264. package/esm5/lib/components/track-by.js.map +1 -0
  265. package/esm5/lib/interaction/activity-ref.js +14 -2
  266. package/esm5/lib/interaction/activity-ref.js.map +1 -1
  267. package/esm5/lib/interaction/activity.js +27 -1
  268. package/esm5/lib/interaction/activity.js.map +1 -1
  269. package/esm5/lib/interaction/components/activity-actions/activity-actions.component.js +1 -1
  270. package/esm5/lib/interaction/components/activity-container/activity-container.component.js +24 -17
  271. package/esm5/lib/interaction/components/activity-container/activity-container.component.js.map +1 -1
  272. package/esm5/lib/interaction/components/activity-container/activity-outlet/activity-outlet.component.js +1 -1
  273. package/esm5/lib/interaction/components/activity-container/activity-outlet/activity-outlet.component.js.map +1 -1
  274. package/esm5/lib/interaction/interaction.module.ngfactory.js.map +1 -1
  275. package/esm5/lib/place/components/abstract-place-navigation.component.js +4 -3
  276. package/esm5/lib/place/components/abstract-place-navigation.component.js.map +1 -1
  277. package/esm5/lib/place/components/list-place-nav/list-place-nav.component.js +1 -1
  278. package/esm5/lib/place/components/list-place-nav/list-place-nav.component.js.map +1 -1
  279. package/esm5/lib/place/components/place-outlet/place-outlet.component.js +56 -16
  280. package/esm5/lib/place/components/place-outlet/place-outlet.component.js.map +1 -1
  281. package/esm5/lib/place/components/side-place-navigation/side-place-navigation.component.js +2 -2
  282. package/esm5/lib/place/components/side-place-navigation/side-place-navigation.component.js.map +1 -1
  283. package/esm5/lib/place/components/tabbed-place-navigation/tabbed-place-navigation.component.js +1 -1
  284. package/esm5/lib/place/components/tabbed-place-navigation/tabbed-place-navigation.component.js.map +1 -1
  285. package/esm5/lib/place/place-component.js +17 -1
  286. package/esm5/lib/place/place-component.js.map +1 -1
  287. package/esm5/lib/place/place-router.js +2 -8
  288. package/esm5/lib/place/place-router.js.map +1 -1
  289. package/esm5/lib/place/place.module.js +3 -3
  290. package/esm5/lib/place/place.module.js.map +1 -1
  291. package/esm5/lib/place/place.module.ngfactory.js.map +1 -1
  292. package/esm5/lib/place/route/parameter-decorators.js +2 -3
  293. package/esm5/lib/place/route/parameter-decorators.js.map +1 -1
  294. package/fesm2015/coolon-angular-ui-powerups.js +1290 -214
  295. package/fesm2015/coolon-angular-ui-powerups.js.map +1 -1
  296. package/fesm5/coolon-angular-ui-powerups.js +1468 -227
  297. package/fesm5/coolon-angular-ui-powerups.js.map +1 -1
  298. package/lib/components/commands/command/command.component.d.ts +22 -0
  299. package/lib/components/commands/command-face/command-face.component.d.ts +34 -0
  300. package/lib/components/commands/command-face.d.ts +40 -0
  301. package/lib/components/commands/flex.component.d.ts +11 -0
  302. package/lib/components/commands/group/command-group/command-group.component.d.ts +11 -0
  303. package/lib/components/commands/group/command-group-menu-renderer/command-group-menu-renderer.component.d.ts +21 -0
  304. package/lib/components/commands/group/command-group-renderer/command-group-renderer.component.d.ts +13 -0
  305. package/lib/components/commands/group/command-group.d.ts +41 -0
  306. package/lib/components/commands/group/more-menu.component.d.ts +14 -0
  307. package/lib/components/commands/group/popup-menu.component.d.ts +17 -0
  308. package/lib/components/commands/group/registration.d.ts +32 -0
  309. package/lib/components/commands/group/tool-bar/tool-bar.component.d.ts +13 -0
  310. package/lib/components/commands/group/view-data.d.ts +40 -0
  311. package/lib/components/commands/separator.component.d.ts +12 -0
  312. package/lib/components/forms/abstract-input.component.d.ts +8 -2
  313. package/lib/components/forms/abstract-list-input.component.d.ts +4 -3
  314. package/lib/components/forms/abstract-value-input.component.d.ts +4 -3
  315. package/lib/components/forms/autocomplete-input/autocomplete-input.component.d.ts +3 -0
  316. package/lib/components/forms/multiple-select-input/multiple-select-input.component.d.ts +1 -3
  317. package/lib/components/forms/select-input/select-input.component.d.ts +1 -1
  318. package/lib/components/icon/icon.component.d.ts +15 -0
  319. package/lib/components/index.d.ts +17 -0
  320. package/lib/components/table/column-model.d.ts +15 -17
  321. package/lib/components/table/mutable-cell-renderer.d.ts +6 -0
  322. package/lib/components/table/table-model.d.ts +7 -3
  323. package/lib/components/table/table-row-menu/table-row-menu.component.d.ts +26 -0
  324. package/lib/components/track-by.d.ts +3 -0
  325. package/lib/interaction/activity-ref.d.ts +3 -0
  326. package/lib/interaction/activity.d.ts +6 -2
  327. package/lib/interaction/components/activity-container/activity-container.component.d.ts +4 -2
  328. package/lib/place/components/abstract-place-navigation.component.d.ts +2 -2
  329. package/lib/place/components/place-outlet/place-outlet.component.d.ts +8 -2
  330. package/lib/place/components/side-place-navigation/side-place-navigation.component.d.ts +1 -1
  331. package/lib/place/place-component.d.ts +6 -0
  332. package/package.json +7 -5
  333. package/schematics/bootstrap-app/index.d.ts +3 -0
  334. package/schematics/bootstrap-app/index.js +81 -0
  335. package/schematics/bootstrap-app/index.js.map +1 -0
  336. package/schematics/bootstrap-app/schema.d.ts +3 -0
  337. package/schematics/bootstrap-app/schema.js +3 -0
  338. package/schematics/bootstrap-app/schema.js.map +1 -0
  339. package/schematics/bootstrap-app/schema.json +19 -0
  340. package/schematics/bootstrap-app/templates/app/app-routing.module.ts +19 -0
  341. package/schematics/bootstrap-app/templates/app/auth/auth.guard.spec.ts +15 -0
  342. package/schematics/bootstrap-app/templates/app/auth/auth.guard.ts +23 -0
  343. package/schematics/bootstrap-app/templates/app/auth/auth.module.ts +13 -0
  344. package/schematics/bootstrap-app/templates/app/auth/auth.service.ts +13 -0
  345. package/schematics/bootstrap-app/templates/app/i18n.ts +9 -0
  346. package/schematics/bootstrap-app/templates/app/places/home/home.component.html +1 -0
  347. package/schematics/bootstrap-app/templates/app/places/home/home.component.scss +4 -0
  348. package/schematics/bootstrap-app/templates/app/places/home/home.component.spec.ts +25 -0
  349. package/schematics/bootstrap-app/templates/app/places/home/home.component.ts +25 -0
  350. package/schematics/bootstrap-app/templates/app/places/place-routes.ts +3 -0
  351. package/schematics/bootstrap-app/templates/app/places/places.json5 +3 -0
  352. package/schematics/bootstrap-app/templates/i18n/config.json +9 -0
  353. package/schematics/bootstrap-app/templates/i18n/notifications.yml +19 -0
  354. package/schematics/bootstrap-app/templates/i18n/places/home.yml +6 -0
  355. package/schematics/collection.json +10 -1
  356. package/schematics/ng-add/index.d.ts +1 -0
  357. package/schematics/ng-add/index.js +27 -4
  358. package/schematics/ng-add/index.js.map +1 -1
  359. package/schematics/package-util.d.ts +13 -0
  360. package/schematics/package-util.js +60 -0
  361. package/schematics/package-util.js.map +1 -0
  362. package/schematics/place-add/index.d.ts +3 -0
  363. package/schematics/place-add/index.js +26 -0
  364. package/schematics/place-add/index.js.map +1 -0
  365. package/schematics/place-add/schema.d.ts +2 -0
  366. package/schematics/place-add/schema.js +3 -0
  367. package/schematics/place-add/schema.js.map +1 -0
  368. package/schematics/place-add/schema.json +8 -0
@@ -1,6 +1,6 @@
1
1
  import { __decorate, __metadata, __param, __awaiter } from 'tslib';
2
2
  import { DOCUMENT, CommonModule, Location } from '@angular/common';
3
- import { ElementRef, Inject, Input, HostListener, Directive, NgZone, ɵɵdefineInjectable, ɵɵinject, Injectable, NgModule, ContentChild, TemplateRef, Component, Self, HostBinding, EventEmitter, Output, ChangeDetectorRef, ContentChildren, QueryList, 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, EventEmitter, Optional, SkipSelf, ViewChild, Output, ViewChildren, QueryList, HostBinding, ViewEncapsulation, Self, ChangeDetectorRef, ContentChildren, ViewContainerRef, InjectionToken, Injector, ComponentFactoryResolver } 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';
@@ -12,23 +12,26 @@ import { CdkScrollableModule } from '@angular/cdk/scrolling';
12
12
  import { MatAutocompleteModule } from '@angular/material/autocomplete';
13
13
  import { MatButtonModule } from '@angular/material/button';
14
14
  import { MatCheckboxModule } from '@angular/material/checkbox';
15
+ import { MatDividerModule } from '@angular/material/divider';
15
16
  import { MatIconModule } from '@angular/material/icon';
17
+ import { MatMenu, MatMenuTrigger, MatMenuModule } from '@angular/material/menu';
16
18
  import { MatTableModule } from '@angular/material/table';
17
19
  import { MatTooltipModule } from '@angular/material/tooltip';
18
20
  import { FaIconLibrary, FontAwesomeModule } from '@fortawesome/angular-fontawesome';
19
21
  import { fas } from '@fortawesome/free-solid-svg-icons';
20
- import { GarbageCollector, DelegatingValueModel, assert, UnaryCommand, lang, Dsl, Logger, TrackExternal, Command, FocusManager, Form, Guard, MutableListModel, MutableValueModel, ListModel, StoreInListModel, ValueModel, StoreInValueModel, MultipleSelectionModel, DirtyTrackingForm, DelegatingCommand, Deferred, Trace, DebugContext, Binding, Functions } from '@coolon/pectin';
22
+ import { GarbageCollector, DelegatingValueModel, assert, UnaryCommand, lang, Dsl, Logger, TrackExternal, Command, MutableValueModel, StoreInValueModel, ValueModel, MutableListModel, Trace, FocusManager, EventListenerList, Form, Guard, Binding, DebugContext, ListModel, StoreInListModel, MultipleSelectionModel, DirtyTrackingForm, DelegatingCommand, Deferred, Functions } from '@coolon/pectin';
23
+ import { Memoize } from '@typescript-plus/fast-memoize-decorator/dist/src';
21
24
  import ___default, { isEqual, isNil } from 'lodash';
25
+ import { Enum } from 'typescript-string-enums';
22
26
  import { assert as assert$1, Opts, lang as lang$1, Klass } from '@coolon/typescript-utilities';
23
- import { Memoize } from '@typescript-plus/fast-memoize-decorator/dist/src';
24
27
  import produce from 'immer';
25
28
  import { FlexModule, GridModule } from '@angular/flex-layout';
26
29
  import { MatDialogModule, MatDialog, MatDialogConfig, MAT_DIALOG_DEFAULT_OPTIONS } from '@angular/material/dialog';
27
30
  import { RouterModule, UrlSegment, Router, UrlSerializer, NavigationStart, NavigationEnd, NavigationError, NavigationCancel, RouterOutlet } from '@angular/router';
28
31
  import { Overlay, CdkScrollable } from '@angular/cdk/overlay';
29
32
  import ResizeObserver from 'resize-observer-polyfill';
30
- import { MatProgressSpinnerModule } from '@angular/material/progress-spinner';
31
33
  import { MatListModule } from '@angular/material/list';
34
+ import { MatProgressSpinnerModule } from '@angular/material/progress-spinner';
32
35
  import { Memoize as Memoize$1 } from '@typescript-plus/fast-memoize-decorator';
33
36
  import 'reflect-metadata';
34
37
  import { style, query, group, animate, trigger, transition } from '@angular/animations';
@@ -370,11 +373,844 @@ CardContainerComponent = __decorate([
370
373
  Component({
371
374
  selector: 'aup-card-container',
372
375
  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",
373
- styles: [":root{--aup-default-padding:var(--default-padding, 18px);--aup-default-background:white}.router-outlet-container>*{position:absolute;top:0;left:0;bottom:0;right:0}[no-tab-header]>mat-tab-header{display:none}[full-height-tabs] .mat-tab-body-wrapper,mat-tab-group.full-height-tabs .mat-tab-body-wrapper{flex:1}[full-height-tabs] .mat-tab-body-wrapper .mat-tab-body-content,[full-height-tabs] .mat-tab-body-wrapper mat-tab-body,mat-tab-group.full-height-tabs .mat-tab-body-wrapper .mat-tab-body-content,mat-tab-group.full-height-tabs .mat-tab-body-wrapper mat-tab-body{display:flex;flex-direction:column;justify-content:stretch}.dialog-interaction-context{max-width:95vw!important;max-height:95vh!important}.dialog-interaction-context mat-dialog-container{max-width:95vw!important;max-height:95vh!important;padding:0}.aup-popup-interaction-panel{background:var(--aup-default-background,#fff);box-shadow:0 2px 1px -1px rgba(0,0,0,.2),0 1px 1px 0 rgba(0,0,0,.14),0 1px 3px 0 rgba(0,0,0,.12);transition:box-shadow 280ms cubic-bezier(.4,0,.2,1)}.aup-input-activity{padding:calc(var(--aup-default-padding)/2)}.aup-input-component{display:block}.aup-input-component input,.aup-input-component mat-form-field{width:100%}.aup-input-component input mat-hint.faux-error,.aup-input-component mat-form-field mat-hint.faux-error{color:#f44336}.aup-input-component.dense mat-form-field .mat-form-field-infix{border-top:none}.aup-input-component.dense mat-form-field .mat-form-field-flex{padding-top:0}.aup-input-component.dense mat-form-field .mat-form-field-wrapper{padding-bottom:0;border-bottom:0}.aup-input-component.dense mat-form-field .mat-form-field-underline{bottom:0}.aup-input-component.dense mat-form-field.mat-form-field-can-float.mat-form-field-should-float .mat-form-field-label-wrapper{display:none}.aup-input-component.dense mat-form-field.mat-form-field-appearance-standard.mat-form-field-has-label .mat-select:not(.mat-select-empty) .mat-select-arrow-wrapper{transform:translateY(0)}aup-table-cell-renderer>.aup-input-component .mat-form-field-flex{padding-top:0}aup-table-cell-renderer>.aup-input-component .mat-form-field-infix{width:0}aup-table-cell-renderer>.aup-input-component .mat-form-field-label-wrapper{display:none}aup-table{--default-column-gap:var(--column-gap, 24px);--resolved-row-hover-background-color:var(--row-hover-background-color, rgba(0, 0, 0, 0.05))}aup-table .mat-table td.mat-cell:first-of-type,aup-table .mat-table td.mat-footer-cell:first-of-type,aup-table .mat-table th.mat-header-cell:first-of-type{padding-left:0}aup-table .mat-table tr.enable-hover:hover{background-color:var(--resolved-row-hover-background-color)}aup-table .mat-table td.enable-cursor{cursor:pointer}aup-table aup-table-cell-renderer,aup-table aup-table-header-cell-renderer{display:flex;flex-direction:column;align-items:stretch;justify-content:center;height:100%;min-height:47px}aup-table aup-table-cell-renderer.first-column,aup-table aup-table-cell-renderer:not(.first-column),aup-table aup-table-header-cell-renderer.first-column,aup-table aup-table-header-cell-renderer:not(.first-column){padding-left:var(--default-column-gap)}aup-table aup-table-cell-renderer.fillCell{justify-content:stretch;padding-left:0!important}aup-table aup-table-cell-renderer.padChild>:first-child{padding-left:var(--default-column-gap);flex:1}:host{--resolved-card-gap:var(--card-gap, 16px);--resolved-card-width:var(--card-width, 300px);--resolved-card-height:var(--card-height, auto);--resolved-card-min-height:var(--card-min-height, auto);--resolved-card-background:var(--card-background, #fcfcfb);flex:1;display:block;background:var(--resolved-card-background)}.card-container{display:-ms-grid;display:grid;grid-template-columns:repeat(auto-fill,var(--resolved-card-width));grid-template-rows:repeat(auto-fit,minmax(0,var(--resolved-card-height)));grid-gap:var(--resolved-card-gap);box-sizing:border-box;padding:var(--resolved-card-gap);min-height:calc(var(--resolved-card-height) + 2 * var(--resolved-card-gap));min-width:calc(var(--resolved-card-width) + 2 * var(--resolved-card-gap));width:calc((var(--resolved-card-width) + var(--resolved-card-gap)) * 2 + var(--grid-gap));max-width:100%}.add-card-container{width:var(--resolved-card-width);height:var(--resolved-card-height);min-height:var(--resolved-card-min-height);display:flex;flex-direction:column;align-items:center;justify-content:center;box-sizing:border-box;border:2px dashed rgba(0,0,0,.1);border-radius:6px;font-weight:300;cursor:pointer;color:rgba(0,0,0,.54);background-color:rgba(255,255,255,.8);transition:280ms cubic-bezier(.4,0,.2,1)}.add-card-container mat-icon{font-size:200%}.add-card-container:hover{transition:280ms cubic-bezier(.4,0,.2,1);border-color:transparent;background-color:#fff;color:rgba(0,0,0,.54)}.add-card-container:hover:hover{box-shadow:0 2px 4px -1px rgba(0,0,0,.2),0 4px 5px 0 rgba(0,0,0,.14),0 1px 10px 0 rgba(0,0,0,.12)}.add-card-template-container{width:var(--resolved-card-width);height:var(--resolved-card-height);display:flex;flex-direction:column;align-items:stretch;justify-content:stretch}"]
376
+ styles: [":root{--aup-default-padding:var(--default-padding, 18px);--aup-default-background:white;--aup-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}.activity-outlet-wrapper{display:flex;flex-direction:column;align-items:stretch}.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}"]
374
377
  }),
375
378
  __metadata("design:paramtypes", [])
376
379
  ], CardContainerComponent);
377
380
 
381
+ var TrackBy;
382
+ (function (TrackBy) {
383
+ TrackBy.byIndex = (data, index) => index;
384
+ })(TrackBy || (TrackBy = {}));
385
+
386
+ var CommandFace;
387
+ (function (CommandFace) {
388
+ let Position;
389
+ (function (Position) {
390
+ Position["START"] = "start";
391
+ Position["END"] = "end";
392
+ })(Position = CommandFace.Position || (CommandFace.Position = {}));
393
+ CommandFace.Style = Enum({
394
+ FLAT: 'flat',
395
+ STROKED: 'stroked',
396
+ RAISED: 'raised'
397
+ });
398
+ function getColorOf(face) {
399
+ return ___default.isFunction(face === null || face === void 0 ? void 0 : face.color) ? face.color() : undefined;
400
+ }
401
+ CommandFace.getColorOf = getColorOf;
402
+ function getStyleOf(face) {
403
+ return ___default.isFunction(face === null || face === void 0 ? void 0 : face.style) ? face.style() : undefined;
404
+ }
405
+ CommandFace.getStyleOf = getStyleOf;
406
+ function getIconOf(face) {
407
+ return ___default.isFunction(face === null || face === void 0 ? void 0 : face.icon) ? face.icon() : undefined;
408
+ }
409
+ CommandFace.getIconOf = getIconOf;
410
+ function getIconPositionOf(face) {
411
+ return ___default.isFunction(face === null || face === void 0 ? void 0 : face.iconPosition) ? face.iconPosition() : undefined;
412
+ }
413
+ CommandFace.getIconPositionOf = getIconPositionOf;
414
+ function getTooltipOf(face) {
415
+ return ___default.isFunction(face === null || face === void 0 ? void 0 : face.tooltip) ? face.tooltip() : undefined;
416
+ }
417
+ CommandFace.getTooltipOf = getTooltipOf;
418
+ function getTextOf(face) {
419
+ return ___default.isFunction(face === null || face === void 0 ? void 0 : face.text) ? face.text() : undefined;
420
+ }
421
+ CommandFace.getTextOf = getTextOf;
422
+ class Adapter {
423
+ constructor(face) {
424
+ this.face = face;
425
+ }
426
+ get text() {
427
+ return CommandFace.getTextOf(this.face);
428
+ }
429
+ get icon() {
430
+ return CommandFace.getIconOf(this.face);
431
+ }
432
+ get iconPosition() {
433
+ return CommandFace.getIconPositionOf(this.face);
434
+ }
435
+ get tooltip() {
436
+ return CommandFace.getTooltipOf(this.face);
437
+ }
438
+ get iconPositionStart() {
439
+ return this.iconPosition === CommandFace.Position.START;
440
+ }
441
+ get iconPositionEnd() {
442
+ return this.iconPosition === CommandFace.Position.END;
443
+ }
444
+ get color() {
445
+ return CommandFace.getColorOf(this.face);
446
+ }
447
+ get style() {
448
+ return CommandFace.getStyleOf(this.face);
449
+ }
450
+ }
451
+ __decorate([
452
+ Memoize(),
453
+ __metadata("design:type", Object),
454
+ __metadata("design:paramtypes", [])
455
+ ], Adapter.prototype, "text", null);
456
+ __decorate([
457
+ Memoize(),
458
+ __metadata("design:type", Object),
459
+ __metadata("design:paramtypes", [])
460
+ ], Adapter.prototype, "icon", null);
461
+ __decorate([
462
+ Memoize(),
463
+ __metadata("design:type", Object),
464
+ __metadata("design:paramtypes", [])
465
+ ], Adapter.prototype, "iconPosition", null);
466
+ __decorate([
467
+ Memoize(),
468
+ __metadata("design:type", Object),
469
+ __metadata("design:paramtypes", [])
470
+ ], Adapter.prototype, "tooltip", null);
471
+ __decorate([
472
+ Memoize(),
473
+ __metadata("design:type", Boolean),
474
+ __metadata("design:paramtypes", [])
475
+ ], Adapter.prototype, "iconPositionStart", null);
476
+ __decorate([
477
+ Memoize(),
478
+ __metadata("design:type", Boolean),
479
+ __metadata("design:paramtypes", [])
480
+ ], Adapter.prototype, "iconPositionEnd", null);
481
+ __decorate([
482
+ Memoize(),
483
+ __metadata("design:type", String),
484
+ __metadata("design:paramtypes", [])
485
+ ], Adapter.prototype, "color", null);
486
+ __decorate([
487
+ Memoize(),
488
+ __metadata("design:type", String),
489
+ __metadata("design:paramtypes", [])
490
+ ], Adapter.prototype, "style", null);
491
+ CommandFace.Adapter = Adapter;
492
+ })(CommandFace || (CommandFace = {}));
493
+
494
+ class ViewData {
495
+ }
496
+ (function (ViewData) {
497
+ class FaceData extends ViewData {
498
+ constructor(face) {
499
+ super();
500
+ this.faceAdapter = new CommandFace.Adapter(face);
501
+ }
502
+ }
503
+ ViewData.FaceData = FaceData;
504
+ class GroupData extends FaceData {
505
+ constructor(face, xPosition, yPosition, children) {
506
+ super(face);
507
+ this.xPosition = xPosition;
508
+ this.yPosition = yPosition;
509
+ this.children = children;
510
+ }
511
+ get hasMixedIcons() {
512
+ const hasFaces = this.children.filter(c => ViewData.hasFace(c));
513
+ const iconCount = hasFaces.filter(c => !!c.faceAdapter.icon).length;
514
+ return iconCount > 0 && hasFaces.length !== iconCount;
515
+ }
516
+ }
517
+ __decorate([
518
+ Memoize(),
519
+ __metadata("design:type", Boolean),
520
+ __metadata("design:paramtypes", [])
521
+ ], GroupData.prototype, "hasMixedIcons", null);
522
+ ViewData.GroupData = GroupData;
523
+ class CommandData extends FaceData {
524
+ constructor(face, command) {
525
+ super(face);
526
+ this.command = command;
527
+ }
528
+ }
529
+ ViewData.CommandData = CommandData;
530
+ class SeparatorData extends ViewData {
531
+ }
532
+ ViewData.SeparatorData = SeparatorData;
533
+ class FlexData extends ViewData {
534
+ }
535
+ ViewData.FlexData = FlexData;
536
+ function as(type, viewData) {
537
+ return viewData instanceof type ? viewData : lang.illegalState(`expected instance of ${type.name}, got ${viewData.constructor.name}`);
538
+ }
539
+ ViewData.as = as;
540
+ function getCommand(data) {
541
+ return as(CommandData, data).command;
542
+ }
543
+ ViewData.getCommand = getCommand;
544
+ function getTooltip(data) {
545
+ return as(FaceData, data).faceAdapter.tooltip;
546
+ }
547
+ ViewData.getTooltip = getTooltip;
548
+ function getStyle(data) {
549
+ return as(FaceData, data).faceAdapter.style;
550
+ }
551
+ ViewData.getStyle = getStyle;
552
+ function getColor(data) {
553
+ return as(FaceData, data).faceAdapter.color;
554
+ }
555
+ ViewData.getColor = getColor;
556
+ function hasText(data) {
557
+ return !!as(FaceData, data).faceAdapter.text;
558
+ }
559
+ ViewData.hasText = hasText;
560
+ function getFace(data) {
561
+ return as(FaceData, data).faceAdapter.face;
562
+ }
563
+ ViewData.getFace = getFace;
564
+ function asGroup(viewData) {
565
+ return as(GroupData, viewData);
566
+ }
567
+ ViewData.asGroup = asGroup;
568
+ function hasMixedIcons(data) {
569
+ return as(GroupData, data).hasMixedIcons;
570
+ }
571
+ ViewData.hasMixedIcons = hasMixedIcons;
572
+ function isGroup(data) {
573
+ return data instanceof GroupData;
574
+ }
575
+ ViewData.isGroup = isGroup;
576
+ function hasFace(data) {
577
+ return data instanceof FaceData;
578
+ }
579
+ ViewData.hasFace = hasFace;
580
+ function isCommand(data) {
581
+ return data instanceof CommandData;
582
+ }
583
+ ViewData.isCommand = isCommand;
584
+ function isSeparator(data) {
585
+ return data instanceof SeparatorData;
586
+ }
587
+ ViewData.isSeparator = isSeparator;
588
+ function isFlex(data) {
589
+ return data instanceof FlexData;
590
+ }
591
+ ViewData.isFlex = isFlex;
592
+ })(ViewData || (ViewData = {}));
593
+
594
+ let CommandGroupMenuRendererComponent = class CommandGroupMenuRendererComponent extends DisposableComponent {
595
+ constructor(parent) {
596
+ super();
597
+ this.parent = parent;
598
+ this.groupViewDataModel = new MutableValueModel();
599
+ this.commandFired = new EventEmitter();
600
+ this.ViewData = ViewData;
601
+ this.TrackBy = TrackBy;
602
+ const { chain, valueOf, before, when, after, observe, switchOn } = Dsl.disposeWith(this);
603
+ this.children = chain(this.groupViewDataModel).pluckList('children');
604
+ this.hasMixedIcons = chain(this.groupViewDataModel).pluck('hasMixedIcons');
605
+ }
606
+ getCommand(data) {
607
+ const command = ViewData.getCommand(data);
608
+ const { when } = Dsl.disposeWith(this);
609
+ when(command.busy).becomesFalsey(() => this.commandFired.emit());
610
+ return command;
611
+ }
612
+ };
613
+ CommandGroupMenuRendererComponent.ctorParameters = () => [
614
+ { type: CommandGroupMenuRendererComponent, decorators: [{ type: Optional }, { type: SkipSelf }] }
615
+ ];
616
+ __decorate([
617
+ ViewChild('menu', { static: true }),
618
+ __metadata("design:type", MatMenu)
619
+ ], CommandGroupMenuRendererComponent.prototype, "menuComponent", void 0);
620
+ __decorate([
621
+ Input(), StoreInValueModel('groupViewDataModel'),
622
+ __metadata("design:type", ViewData.GroupData)
623
+ ], CommandGroupMenuRendererComponent.prototype, "groupViewData", void 0);
624
+ __decorate([
625
+ Output(),
626
+ __metadata("design:type", Object)
627
+ ], CommandGroupMenuRendererComponent.prototype, "commandFired", void 0);
628
+ __decorate([
629
+ ViewChildren(MatMenuTrigger),
630
+ __metadata("design:type", QueryList)
631
+ ], CommandGroupMenuRendererComponent.prototype, "triggers", void 0);
632
+ CommandGroupMenuRendererComponent = __decorate([
633
+ Component({
634
+ selector: 'aup-command-group-menu',
635
+ template: "<mat-menu #menu [xPosition]=\"groupViewData.xPosition\" [yPosition]=\"groupViewData.yPosition\">\n <ng-container *ngFor=\"let data of children.value; trackBy: TrackBy.byIndex\" >\n <button *ngIf=\"ViewData.isCommand(data)\"\n [pectinCommand]=\"getCommand(data)\"\n [matTooltip]=\"ViewData.getTooltip(data)\"\n mat-menu-item>\n <aup-command-face [face]=\"ViewData.getFace(data)\"\n [includeMissingIconInLayout]=\"hasMixedIcons.value\"></aup-command-face>\n </button>\n\n <ng-container *ngIf=\"ViewData.isGroup(data)\">\n <button mat-menu-item\n #trigger=\"matMenuTrigger\"\n [matMenuTriggerFor]=\"innerPanel.menuComponent\"\n >\n <aup-command-face [face]=\"ViewData.getFace(data)\"\n [includeMissingIconInLayout]=\"hasMixedIcons.value\"></aup-command-face>\n </button>\n <aup-command-group-menu #innerPanel\n [groupViewData]=\"ViewData.asGroup(data)\"\n (commandFired)=\"trigger.closeMenu()\"></aup-command-group-menu>\n </ng-container>\n\n <mat-divider *ngIf=\"ViewData.isSeparator(data)\"></mat-divider>\n\n </ng-container>\n</mat-menu>\n"
636
+ }),
637
+ __param(0, Optional()), __param(0, SkipSelf()),
638
+ __metadata("design:paramtypes", [CommandGroupMenuRendererComponent])
639
+ ], CommandGroupMenuRendererComponent);
640
+
641
+ let CommandGroupRendererComponent = class CommandGroupRendererComponent extends DisposableComponent {
642
+ constructor() {
643
+ super();
644
+ this.renderRootNode = true;
645
+ this.ViewData = ViewData;
646
+ this.TrackBy = TrackBy;
647
+ const { chain, valueOf, before, when, after, observe, switchOn } = Dsl.disposeWith(this);
648
+ this.childViewDataModels = chain(this.groupViewDataModel).pluckList('children');
649
+ }
650
+ };
651
+ __decorate([
652
+ Input(), TrackExternal(),
653
+ __metadata("design:type", ValueModel)
654
+ ], CommandGroupRendererComponent.prototype, "groupViewDataModel", void 0);
655
+ __decorate([
656
+ Input(), StoreInValueModel('groupViewDataModel'),
657
+ __metadata("design:type", ViewData.GroupData)
658
+ ], CommandGroupRendererComponent.prototype, "groupViewData", void 0);
659
+ __decorate([
660
+ Input(),
661
+ HostBinding('class.render-root'),
662
+ __metadata("design:type", Object)
663
+ ], CommandGroupRendererComponent.prototype, "renderRootNode", void 0);
664
+ CommandGroupRendererComponent = __decorate([
665
+ Component({
666
+ selector: 'aup-command-group-renderer',
667
+ template: "<ng-template #groupTemplate let-group>\n\n <ng-container *ngIf=\"ViewData.hasText(group)\" [ngSwitch]=\"ViewData.getStyle(group)\">\n <ng-container *ngSwitchCase=\"'stroked'\">\n <button #trigger=\"matMenuTrigger\"\n [matMenuTriggerFor]=\"subMenu.menuComponent\"\n [matTooltip]=\"ViewData.getTooltip(group)\"\n [color]=\"ViewData.getColor(group)\"\n mat-stroked-button>\n <aup-command-face [face]=\"ViewData.getFace(group)\"></aup-command-face>\n </button>\n <aup-command-group-menu #subMenu [groupViewData]=\"group\" (commandFired)=\"trigger.closeMenu()\"></aup-command-group-menu>\n </ng-container>\n\n <ng-container *ngSwitchCase=\"'raised'\">\n <button #trigger=\"matMenuTrigger\"\n [matMenuTriggerFor]=\"subMenu.menuComponent\"\n\n [matTooltip]=\"ViewData.getTooltip(group)\"\n [color]=\"ViewData.getColor(group)\"\n mat-raised-button>\n <aup-command-face [face]=\"ViewData.getFace(group)\"></aup-command-face>\n </button>\n <aup-command-group-menu #subMenu [groupViewData]=\"group\" (commandFired)=\"trigger.closeMenu()\"></aup-command-group-menu>\n </ng-container>\n\n <ng-container *ngSwitchDefault>\n <button #trigger=\"matMenuTrigger\"\n [matMenuTriggerFor]=\"subMenu.menuComponent\"\n [matTooltip]=\"ViewData.getTooltip(group)\"\n [color]=\"ViewData.getColor(group)\"\n mat-button>\n <aup-command-face [face]=\"ViewData.getFace(group)\"></aup-command-face>\n </button>\n <aup-command-group-menu #subMenu [groupViewData]=\"group\" (commandFired)=\"trigger.closeMenu()\"></aup-command-group-menu>\n </ng-container>\n\n </ng-container>\n\n <ng-container *ngIf=\"!ViewData.hasText(group)\">\n <button #trigger=\"matMenuTrigger\"\n mat-icon-button\n [matMenuTriggerFor]=\"subMenu.menuComponent\"\n\n [matTooltip]=\"ViewData.getTooltip(group)\"\n [color]=\"ViewData.getColor(group)\"\n >\n <aup-command-face [face]=\"ViewData.getFace(group)\"></aup-command-face>\n </button>\n <aup-command-group-menu #subMenu [groupViewData]=\"group\" (commandFired)=\"trigger.closeMenu()\"></aup-command-group-menu>\n </ng-container>\n\n</ng-template>\n\n\n<ng-template #commandTemplate let-data>\n\n <ng-container *ngIf=\"ViewData.hasText(data)\" [ngSwitch]=\"ViewData.getStyle(data)\">\n <button *ngSwitchCase=\"'raised'\"\n [pectinCommand]=\"ViewData.getCommand(data)\"\n [matTooltip]=\"ViewData.getTooltip(data)\"\n [color]=\"ViewData.getColor(data)\"\n mat-raised-button>\n <aup-command-face [face]=\"ViewData.getFace(data)\"></aup-command-face>\n </button>\n <button *ngSwitchCase=\"'stroked'\"\n [pectinCommand]=\"ViewData.getCommand(data)\"\n [matTooltip]=\"ViewData.getTooltip(data)\"\n [color]=\"ViewData.getColor(data)\"\n mat-stroked-button>\n <aup-command-face [face]=\"ViewData.getFace(data)\"></aup-command-face>\n </button>\n <button *ngSwitchDefault\n [pectinCommand]=\"ViewData.getCommand(data)\"\n [matTooltip]=\"ViewData.getTooltip(data)\"\n [color]=\"ViewData.getColor(data)\"\n mat-button>\n <aup-command-face [face]=\"ViewData.getFace(data)\"></aup-command-face>\n </button>\n </ng-container>\n\n <button *ngIf=\"!ViewData.hasText(data)\"\n [pectinCommand]=\"ViewData.getCommand(data)\"\n [matTooltip]=\"ViewData.getTooltip(data)\"\n [color]=\"ViewData.getColor(data)\"\n mat-icon-button>\n <aup-command-face [face]=\"ViewData.getFace(data)\"></aup-command-face>\n </button>\n\n</ng-template>\n\n\n<ng-template *ngIf=\"renderRootNode\"\n [ngTemplateOutlet]=\"groupTemplate\"\n [ngTemplateOutletContext]=\"{ $implicit: groupViewDataModel.value }\">\n</ng-template>\n\n<ng-container *ngIf=\"!renderRootNode\">\n <ng-container *ngFor=\"let data of this.childViewDataModels.value; trackBy: TrackBy.byIndex\">\n <ng-template *ngIf=\"ViewData.isGroup(data)\"\n [ngTemplateOutlet]=\"groupTemplate\"\n [ngTemplateOutletContext]=\"{ $implicit: data }\">\n </ng-template>\n <ng-template *ngIf=\"ViewData.isCommand(data)\"\n [ngTemplateOutlet]=\"commandTemplate\"\n [ngTemplateOutletContext]=\"{ $implicit: data }\">\n </ng-template>\n\n <mat-divider *ngIf=\"ViewData.isSeparator(data)\" [vertical]=\"true\"></mat-divider>\n </ng-container>\n\n</ng-container>\n",
668
+ styles: [":host{display:inline-flex;flex-direction:row;align-items:center}:host:not(.render-root) mat-divider{-ms-grid-row-align:stretch;align-self:stretch;margin:4px 0}:host:not(.render-root)>*+*{margin-left:8px}:host span.flex{flex:1}"]
669
+ }),
670
+ __metadata("design:paramtypes", [])
671
+ ], CommandGroupRendererComponent);
672
+
673
+ class Registration extends GarbageCollector {
674
+ }
675
+ (function (Registration) {
676
+ class FaceRegistration extends Registration {
677
+ constructor(faceModel) {
678
+ super();
679
+ this.faceModel = faceModel;
680
+ }
681
+ }
682
+ Registration.FaceRegistration = FaceRegistration;
683
+ class CommandRegistration extends FaceRegistration {
684
+ constructor(faceModel, command) {
685
+ super(faceModel);
686
+ this.command = command;
687
+ }
688
+ toTemplate() {
689
+ return new ViewData.CommandData(this.faceModel.value, this.command);
690
+ }
691
+ }
692
+ Registration.CommandRegistration = CommandRegistration;
693
+ class GroupRegistration extends FaceRegistration {
694
+ constructor(faceModel, group) {
695
+ super(faceModel);
696
+ this.group = group;
697
+ }
698
+ toTemplate() {
699
+ return new ViewData.GroupData(this.faceModel.value, this.group.xPosition, this.group.yPosition, this.group.registrations.value.map(r => r.toTemplate()));
700
+ }
701
+ }
702
+ Registration.GroupRegistration = GroupRegistration;
703
+ class SeparatorRegistration extends Registration {
704
+ constructor() {
705
+ super(...arguments);
706
+ this.template = new ViewData.SeparatorData();
707
+ }
708
+ toTemplate() {
709
+ return this.template;
710
+ }
711
+ }
712
+ Registration.SeparatorRegistration = SeparatorRegistration;
713
+ class FlexRegistration extends Registration {
714
+ constructor() {
715
+ super(...arguments);
716
+ this.template = new ViewData.FlexData();
717
+ }
718
+ toTemplate() {
719
+ return this.template;
720
+ }
721
+ }
722
+ Registration.FlexRegistration = FlexRegistration;
723
+ function hasFace(entry) {
724
+ return entry instanceof CommandRegistration || entry instanceof GroupRegistration;
725
+ }
726
+ Registration.hasFace = hasFace;
727
+ })(Registration || (Registration = {}));
728
+
729
+ class CommandGroup extends GarbageCollector {
730
+ constructor(parent) {
731
+ super();
732
+ this.parent = parent;
733
+ this._rootTemplate = new MutableValueModel();
734
+ this._registrations = new MutableListModel();
735
+ const { chain, valueOf, before, when, after, observe, switchOn } = Dsl.disposeWith(this);
736
+ this.childTemplates = chain(this._rootTemplate).pluckList('children');
737
+ this.initialised = chain(this._rootTemplate).isNotNil();
738
+ }
739
+ initialise() {
740
+ this.rebuildTemplates();
741
+ }
742
+ get rootTemplate() {
743
+ return this._rootTemplate.readonly;
744
+ }
745
+ get registrations() {
746
+ return this._registrations.readonly;
747
+ }
748
+ notifyChanged() {
749
+ if (this.parent) {
750
+ this.parent.notifyChanged();
751
+ }
752
+ else {
753
+ this.rebuildTemplates();
754
+ }
755
+ }
756
+ notifyChildFaceChanged(is, was) {
757
+ this.notifyChanged();
758
+ }
759
+ rebuildTemplates() {
760
+ this._rootTemplate.value = new ViewData.GroupData(this.faceModel.value, this.xPosition, this.yPosition, this.registrations.value.map(r => r.toTemplate()));
761
+ }
762
+ get depth() {
763
+ return this.isRoot() ? 0 : this.parent.depth + 1;
764
+ }
765
+ isRoot() {
766
+ return false;
767
+ }
768
+ registerCommand(command, faceModel) {
769
+ return this.register(new Registration.CommandRegistration(faceModel, command));
770
+ }
771
+ registerGroup(group, faceModel) {
772
+ return this.register(new Registration.GroupRegistration(faceModel, group));
773
+ }
774
+ registerFlex(component) {
775
+ return this.register(new Registration.FlexRegistration());
776
+ }
777
+ registerSeparator(component) {
778
+ return this.register(new Registration.SeparatorRegistration());
779
+ }
780
+ register(registration) {
781
+ this._registrations.push(registration);
782
+ if (registration instanceof Registration.FaceRegistration) {
783
+ const { when } = Dsl.disposeWith(registration);
784
+ when(registration.faceModel).changes((is, was) => {
785
+ this.notifyChildFaceChanged(is, was);
786
+ }, { asLongAs: this.initialised });
787
+ }
788
+ registration.onDispose(() => this._registrations.remove(registration));
789
+ return registration;
790
+ }
791
+ }
792
+ (function (CommandGroup) {
793
+ class Root extends CommandGroup {
794
+ isRoot() {
795
+ return true;
796
+ }
797
+ }
798
+ __decorate([
799
+ TrackExternal(),
800
+ __metadata("design:type", ValueModel)
801
+ ], Root.prototype, "faceModel", void 0);
802
+ __decorate([
803
+ TrackExternal({ defaultValue: 'after' }),
804
+ __metadata("design:type", ValueModel)
805
+ ], Root.prototype, "xPositionModel", void 0);
806
+ __decorate([
807
+ StoreInValueModel('xPositionModel'),
808
+ __metadata("design:type", String)
809
+ ], Root.prototype, "xPosition", void 0);
810
+ __decorate([
811
+ TrackExternal({ defaultValue: 'below' }),
812
+ __metadata("design:type", ValueModel)
813
+ ], Root.prototype, "yPositionModel", void 0);
814
+ __decorate([
815
+ StoreInValueModel('yPositionModel'),
816
+ __metadata("design:type", String)
817
+ ], Root.prototype, "yPosition", void 0);
818
+ CommandGroup.Root = Root;
819
+ function factory() {
820
+ return new Root();
821
+ }
822
+ CommandGroup.factory = factory;
823
+ })(CommandGroup || (CommandGroup = {}));
824
+
825
+ var CommandGroupComponent_1;
826
+ let CommandGroupComponent = CommandGroupComponent_1 = class CommandGroupComponent extends CommandGroup {
827
+ constructor(parent) {
828
+ super(parent);
829
+ this.parent = parent;
830
+ this.xPosition = 'after';
831
+ this.yPosition = 'below';
832
+ this.parent.registerGroup(this, this.faceModel);
833
+ }
834
+ };
835
+ CommandGroupComponent.ctorParameters = () => [
836
+ { type: CommandGroup, decorators: [{ type: SkipSelf }] }
837
+ ];
838
+ __decorate([
839
+ Input(), TrackExternal(),
840
+ __metadata("design:type", ValueModel)
841
+ ], CommandGroupComponent.prototype, "faceModel", void 0);
842
+ __decorate([
843
+ Input(), StoreInValueModel('faceModel'),
844
+ __metadata("design:type", Object)
845
+ ], CommandGroupComponent.prototype, "face", void 0);
846
+ __decorate([
847
+ Input(),
848
+ __metadata("design:type", String)
849
+ ], CommandGroupComponent.prototype, "xPosition", void 0);
850
+ __decorate([
851
+ Input(),
852
+ __metadata("design:type", String)
853
+ ], CommandGroupComponent.prototype, "yPosition", void 0);
854
+ CommandGroupComponent = CommandGroupComponent_1 = __decorate([
855
+ Component({
856
+ selector: 'aup-command-group',
857
+ template: '',
858
+ providers: [
859
+ { provide: CommandGroup, useExisting: CommandGroupComponent_1 }
860
+ ]
861
+ }),
862
+ __param(0, SkipSelf()),
863
+ __metadata("design:paramtypes", [CommandGroup])
864
+ ], CommandGroupComponent);
865
+
866
+ /**
867
+ * Custom CSS:
868
+ * @example
869
+ * root: { // globally
870
+ * --aup-command-face-icon-gap: 8px;
871
+ * }
872
+ * aup-command-face { // per instance
873
+ * --icon-gap: 4px;
874
+ * }
875
+ */
876
+ let CommandFaceComponent = class CommandFaceComponent extends DisposableComponent {
877
+ constructor() {
878
+ super();
879
+ this.faceModel = new MutableValueModel();
880
+ this.ignoreIcon = false;
881
+ this.ignoreText = false;
882
+ this.includeMissingIconInLayout = false;
883
+ const { chain, valueOf, before, when, after, observe, switchOn } = Dsl.disposeWith(this);
884
+ // overkill /c: when all you have is a hammer...
885
+ const faceAdapter = chain(this.faceModel).map(face => new CommandFace.Adapter(face));
886
+ this.iconModel = faceAdapter.pluck('icon');
887
+ this.textModel = faceAdapter.pluck('text');
888
+ this.positionModel = faceAdapter.pluck('iconPosition');
889
+ this.colorModel = faceAdapter.pluck('color');
890
+ }
891
+ get requiresMissingIconInLayout() {
892
+ return this.includeMissingIconInLayout && !this.iconModel.value;
893
+ }
894
+ ngOnInit() {
895
+ }
896
+ get iconPosition() {
897
+ var _a;
898
+ return (_a = this.positionModel.value) !== null && _a !== void 0 ? _a : CommandFace.Position.START;
899
+ }
900
+ get shouldIncludeIcon() {
901
+ return (!this.ignoreIcon && this.iconModel.value) || this.includeMissingIconInLayout;
902
+ }
903
+ get iconStart() {
904
+ return this.shouldIncludeIcon && this.iconPosition === CommandFace.Position.START;
905
+ }
906
+ get iconEnd() {
907
+ return this.shouldIncludeIcon && this.iconPosition === CommandFace.Position.END;
908
+ }
909
+ get text() {
910
+ return this.ignoreText ? undefined : this.textModel.value;
911
+ }
912
+ get color() {
913
+ return this.colorModel.value;
914
+ }
915
+ };
916
+ __decorate([
917
+ Input('face'), StoreInValueModel('faceModel'),
918
+ __metadata("design:type", Object)
919
+ ], CommandFaceComponent.prototype, "_rawFace", void 0);
920
+ __decorate([
921
+ Input(),
922
+ __metadata("design:type", Object)
923
+ ], CommandFaceComponent.prototype, "ignoreIcon", void 0);
924
+ __decorate([
925
+ Input(),
926
+ __metadata("design:type", Object)
927
+ ], CommandFaceComponent.prototype, "ignoreText", void 0);
928
+ __decorate([
929
+ Input(),
930
+ __metadata("design:type", Object)
931
+ ], CommandFaceComponent.prototype, "includeMissingIconInLayout", void 0);
932
+ __decorate([
933
+ HostBinding('class.hide-icon'),
934
+ __metadata("design:type", Object),
935
+ __metadata("design:paramtypes", [])
936
+ ], CommandFaceComponent.prototype, "requiresMissingIconInLayout", null);
937
+ __decorate([
938
+ HostBinding('attr.color'),
939
+ __metadata("design:type", String),
940
+ __metadata("design:paramtypes", [])
941
+ ], CommandFaceComponent.prototype, "color", null);
942
+ CommandFaceComponent = __decorate([
943
+ Component({
944
+ selector: 'aup-command-face',
945
+ 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",
946
+ encapsulation: ViewEncapsulation.None,
947
+ styles: ["aup-command-face{--icon-gap:var(--aup-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}"]
948
+ }),
949
+ __metadata("design:paramtypes", [])
950
+ ], CommandFaceComponent);
951
+
952
+ /**
953
+ *
954
+ */
955
+ let CommandComponent = class CommandComponent extends DisposableComponent {
956
+ constructor(parent) {
957
+ super();
958
+ this.parent = parent;
959
+ this.CommandFace = CommandFace;
960
+ const { chain, switchOn } = Dsl.disposeWith(this);
961
+ this.activeFaceModel = switchOn(this.command.busy).toValue(when => {
962
+ when.equalTo(true, this.busyFaceModel);
963
+ when.otherwise(this.faceModel);
964
+ }).otherwise(this.faceModel);
965
+ this.buttonStyle = chain(this.activeFaceModel).map(f => CommandFace.getStyleOf(f));
966
+ this.colorModel = chain(this.activeFaceModel).map(f => CommandFace.getColorOf(f));
967
+ if (parent) {
968
+ this.registerDisposable(this.parent.registerCommand(this.command, this.activeFaceModel));
969
+ }
970
+ }
971
+ ngOnInit() {
972
+ }
973
+ };
974
+ CommandComponent.ctorParameters = () => [
975
+ { type: CommandGroup, decorators: [{ type: Optional }] }
976
+ ];
977
+ __decorate([
978
+ Input(), TrackExternal(),
979
+ __metadata("design:type", Command)
980
+ ], CommandComponent.prototype, "command", void 0);
981
+ __decorate([
982
+ Input(), TrackExternal(),
983
+ __metadata("design:type", ValueModel)
984
+ ], CommandComponent.prototype, "faceModel", void 0);
985
+ __decorate([
986
+ Input(), StoreInValueModel('faceModel'),
987
+ __metadata("design:type", Object)
988
+ ], CommandComponent.prototype, "face", void 0);
989
+ __decorate([
990
+ Input(), TrackExternal(),
991
+ __metadata("design:type", ValueModel)
992
+ ], CommandComponent.prototype, "busyFaceModel", void 0);
993
+ __decorate([
994
+ Input(), StoreInValueModel('busyFaceModel'),
995
+ __metadata("design:type", Object)
996
+ ], CommandComponent.prototype, "busyFace", void 0);
997
+ CommandComponent = __decorate([
998
+ Component({
999
+ selector: 'aup-command',
1000
+ template: "<ng-container *ngIf=\"!parent\">\n <ng-container [ngSwitch]=\"buttonStyle.value\">\n <button *ngSwitchCase=\"CommandFace.Style.STROKED\" mat-stroked-button [pectinCommand]=\"command\" [color]=\"colorModel.value\">\n <aup-command-face [face]=\"activeFaceModel.value\"></aup-command-face>\n </button>\n <button *ngSwitchCase=\"CommandFace.Style.RAISED\" mat-raised-button [pectinCommand]=\"command\" [color]=\"colorModel.value\">\n <aup-command-face [face]=\"activeFaceModel.value\"></aup-command-face>\n </button>\n <button *ngSwitchDefault mat-button [pectinCommand]=\"command\" [color]=\"colorModel.value\">\n <aup-command-face [face]=\"activeFaceModel.value\"></aup-command-face>\n </button>\n </ng-container>\n</ng-container>\n"
1001
+ }),
1002
+ __param(0, Optional()),
1003
+ __metadata("design:paramtypes", [CommandGroup])
1004
+ ], CommandComponent);
1005
+
1006
+ /**
1007
+ *
1008
+ */
1009
+ let FlexComponent = class FlexComponent extends DisposableComponent {
1010
+ constructor(parent) {
1011
+ super();
1012
+ this.parent = parent;
1013
+ if (parent) {
1014
+ parent.registerFlex(this);
1015
+ }
1016
+ }
1017
+ ngOnInit() {
1018
+ }
1019
+ };
1020
+ FlexComponent.ctorParameters = () => [
1021
+ { type: CommandGroup }
1022
+ ];
1023
+ FlexComponent = __decorate([
1024
+ Component({
1025
+ selector: 'aup-flex',
1026
+ template: ``
1027
+ }),
1028
+ __metadata("design:paramtypes", [CommandGroup])
1029
+ ], FlexComponent);
1030
+
1031
+ const ɵ0 = CommandGroup.factory;
1032
+ /**
1033
+ *
1034
+ */
1035
+ let MoreMenuComponent = class MoreMenuComponent extends DisposableComponent {
1036
+ constructor(group) {
1037
+ super();
1038
+ this.group = group;
1039
+ this.tooltipModel = new MutableValueModel();
1040
+ const { chain, valueOf, before, when, after, observe, switchOn } = Dsl.disposeWith(this);
1041
+ group.xPosition = 'before'; // this should be the default unless overridden by the user.
1042
+ group.faceModel = chain(this.tooltipModel).map(tooltip => {
1043
+ return {
1044
+ icon: () => 'mat:more_vert',
1045
+ tooltip() {
1046
+ return tooltip;
1047
+ }
1048
+ };
1049
+ }, { allowNil: true });
1050
+ }
1051
+ ngOnInit() {
1052
+ }
1053
+ ngAfterContentInit() {
1054
+ this.group.initialise();
1055
+ }
1056
+ };
1057
+ MoreMenuComponent.ctorParameters = () => [
1058
+ { type: CommandGroup }
1059
+ ];
1060
+ __decorate([
1061
+ Input(), StoreInValueModel('tooltipModel'),
1062
+ __metadata("design:type", String)
1063
+ ], MoreMenuComponent.prototype, "tooltip", void 0);
1064
+ __decorate([
1065
+ Trace(),
1066
+ __metadata("design:type", Function),
1067
+ __metadata("design:paramtypes", []),
1068
+ __metadata("design:returntype", void 0)
1069
+ ], MoreMenuComponent.prototype, "ngAfterContentInit", null);
1070
+ MoreMenuComponent = __decorate([
1071
+ Component({
1072
+ selector: 'aup-more-menu',
1073
+ template: '<aup-command-group-renderer [renderRootNode]="true" [groupViewDataModel]="group.rootTemplate"></aup-command-group-renderer>',
1074
+ providers: [{ provide: CommandGroup, useFactory: ɵ0 }]
1075
+ }),
1076
+ __metadata("design:paramtypes", [CommandGroup])
1077
+ ], MoreMenuComponent);
1078
+
1079
+ const ɵ0$1 = CommandGroup.factory;
1080
+ /**
1081
+ *
1082
+ */
1083
+ let PopupMenuComponent = class PopupMenuComponent extends DisposableComponent {
1084
+ constructor(group) {
1085
+ super();
1086
+ this.group = group;
1087
+ const { chain, valueOf, before, when, after, observe, switchOn } = Dsl.disposeWith(this);
1088
+ group.faceModel = this.faceModel;
1089
+ }
1090
+ ngOnInit() {
1091
+ }
1092
+ ngAfterContentInit() {
1093
+ this.group.initialise();
1094
+ }
1095
+ ngAfterViewInit() {
1096
+ }
1097
+ };
1098
+ PopupMenuComponent.ctorParameters = () => [
1099
+ { type: CommandGroup }
1100
+ ];
1101
+ __decorate([
1102
+ Input(), TrackExternal(),
1103
+ __metadata("design:type", ValueModel)
1104
+ ], PopupMenuComponent.prototype, "faceModel", void 0);
1105
+ __decorate([
1106
+ Input(), StoreInValueModel('faceModel'),
1107
+ __metadata("design:type", Object)
1108
+ ], PopupMenuComponent.prototype, "face", void 0);
1109
+ __decorate([
1110
+ Trace(),
1111
+ __metadata("design:type", Function),
1112
+ __metadata("design:paramtypes", []),
1113
+ __metadata("design:returntype", void 0)
1114
+ ], PopupMenuComponent.prototype, "ngOnInit", null);
1115
+ __decorate([
1116
+ Trace(),
1117
+ __metadata("design:type", Function),
1118
+ __metadata("design:paramtypes", []),
1119
+ __metadata("design:returntype", void 0)
1120
+ ], PopupMenuComponent.prototype, "ngAfterContentInit", null);
1121
+ __decorate([
1122
+ Trace(),
1123
+ __metadata("design:type", Function),
1124
+ __metadata("design:paramtypes", []),
1125
+ __metadata("design:returntype", void 0)
1126
+ ], PopupMenuComponent.prototype, "ngAfterViewInit", null);
1127
+ PopupMenuComponent = __decorate([
1128
+ Component({
1129
+ selector: 'aup-popup-menu',
1130
+ template: '<aup-command-group-renderer [renderRootNode]="true" [groupViewDataModel]="group.rootTemplate"></aup-command-group-renderer>',
1131
+ providers: [{ provide: CommandGroup, useFactory: ɵ0$1 }]
1132
+ }),
1133
+ __metadata("design:paramtypes", [CommandGroup])
1134
+ ], PopupMenuComponent);
1135
+
1136
+ /**
1137
+ *
1138
+ */
1139
+ let SeparatorComponent = class SeparatorComponent extends DisposableComponent {
1140
+ constructor(parent) {
1141
+ super();
1142
+ this.parent = parent;
1143
+ if (parent) {
1144
+ parent.registerSeparator(this);
1145
+ }
1146
+ }
1147
+ isVertical() {
1148
+ return this === null || this === void 0 ? void 0 : this.parent.isRoot();
1149
+ }
1150
+ ngOnInit() {
1151
+ }
1152
+ };
1153
+ SeparatorComponent.ctorParameters = () => [
1154
+ { type: CommandGroup, decorators: [{ type: Optional }] }
1155
+ ];
1156
+ SeparatorComponent = __decorate([
1157
+ Component({
1158
+ selector: 'aup-separator',
1159
+ template: `
1160
+ <mat-divider [vertical]="isVertical()"></mat-divider>`
1161
+ }),
1162
+ __param(0, Optional()),
1163
+ __metadata("design:paramtypes", [CommandGroup])
1164
+ ], SeparatorComponent);
1165
+
1166
+ const ɵ0$2 = CommandGroup.factory;
1167
+ /**
1168
+ *
1169
+ */
1170
+ let ToolBarComponent = class ToolBarComponent extends DisposableComponent {
1171
+ constructor(group) {
1172
+ super();
1173
+ this.group = group;
1174
+ }
1175
+ ngOnInit() {
1176
+ }
1177
+ ngAfterContentInit() {
1178
+ this.group.initialise();
1179
+ }
1180
+ ngAfterViewInit() {
1181
+ }
1182
+ };
1183
+ ToolBarComponent.ctorParameters = () => [
1184
+ { type: CommandGroup }
1185
+ ];
1186
+ __decorate([
1187
+ Trace(),
1188
+ __metadata("design:type", Function),
1189
+ __metadata("design:paramtypes", []),
1190
+ __metadata("design:returntype", void 0)
1191
+ ], ToolBarComponent.prototype, "ngOnInit", null);
1192
+ __decorate([
1193
+ Trace(),
1194
+ __metadata("design:type", Function),
1195
+ __metadata("design:paramtypes", []),
1196
+ __metadata("design:returntype", void 0)
1197
+ ], ToolBarComponent.prototype, "ngAfterContentInit", null);
1198
+ __decorate([
1199
+ Trace(),
1200
+ __metadata("design:type", Function),
1201
+ __metadata("design:paramtypes", []),
1202
+ __metadata("design:returntype", void 0)
1203
+ ], ToolBarComponent.prototype, "ngAfterViewInit", null);
1204
+ ToolBarComponent = __decorate([
1205
+ Component({
1206
+ selector: 'aup-tool-bar',
1207
+ template: '<aup-command-group-renderer [renderRootNode]="false" [groupViewDataModel]="group.rootTemplate"></aup-command-group-renderer>',
1208
+ providers: [{ provide: CommandGroup, useFactory: ɵ0$2 }],
1209
+ styles: [":host{display:inline-flex;flex-direction:row;align-items:center}:host mat-divider{-ms-grid-row-align:stretch;align-self:stretch;margin:4px 0}:host span.flex{flex:1}:host>*+*{margin-left:8px}"]
1210
+ }),
1211
+ __metadata("design:paramtypes", [CommandGroup])
1212
+ ], ToolBarComponent);
1213
+
378
1214
  let FocusContainerComponent = class FocusContainerComponent extends DisposableComponent {
379
1215
  constructor(focusManager) {
380
1216
  super();
@@ -468,6 +1304,7 @@ FocusableComponent = __decorate([
468
1304
  let AbstractInputComponent = class AbstractInputComponent extends DisposableComponent {
469
1305
  constructor() {
470
1306
  super();
1307
+ this.onValueEditedListeners = new EventListenerList();
471
1308
  this.dense = false;
472
1309
  // TODO: fix this.
473
1310
  // tslint:disable-next-line:no-output-native
@@ -516,19 +1353,19 @@ let AbstractInputComponent = class AbstractInputComponent extends DisposableComp
516
1353
  return this.enabled.value;
517
1354
  }
518
1355
  get enabled() {
519
- return this.inputModel.enabled;
1356
+ return this.formValueModel.enabled;
520
1357
  }
521
1358
  hasErrors() {
522
1359
  return !this.errorList.query().isEmpty();
523
1360
  }
524
1361
  get errorList() {
525
- return this.inputModel.errorList;
1362
+ return this.formValueModel.errorList;
526
1363
  }
527
1364
  get firstError() {
528
1365
  return this.hasErrors() ? this.errorList.value[0] : null;
529
1366
  }
530
1367
  get focusContext() {
531
- return this.inputModel.focusContext;
1368
+ return this.formValueModel.focusContext;
532
1369
  }
533
1370
  get floatLabel() {
534
1371
  return this.dense ? 'never' : this.userFloatLabel;
@@ -536,6 +1373,13 @@ let AbstractInputComponent = class AbstractInputComponent extends DisposableComp
536
1373
  get showHint() {
537
1374
  return this.dense ? false : !!this.hint;
538
1375
  }
1376
+ /**
1377
+ * Invokes the callback when this components value is changed by a user edit.
1378
+ * @param callback
1379
+ */
1380
+ onValueEdited(callback) {
1381
+ return this.onValueEditedListeners.add(callback);
1382
+ }
539
1383
  };
540
1384
  __decorate([
541
1385
  Input(),
@@ -635,29 +1479,42 @@ let AbstractListInputComponent = class AbstractListInputComponent extends Abstra
635
1479
  * gets told it's an Object and can't scan for a base type annotated with @DelegateUsing(..).
636
1480
  */
637
1481
  // We have to register it as a disposable so it ditches any listeners when we're disposed.
638
- this.inputModel = this.registerDisposable(new Form.DelegatingListModel());
639
- this.setValueIsInitialising = new Guard();
1482
+ this.formValueModel = this.registerDisposable(new Form.DelegatingListModel());
1483
+ this.componentListModel = new MutableListModel();
1484
+ this.setValueIsInProgress = new Guard();
640
1485
  this.valueChange = new EventEmitter();
641
- const { when } = Dsl.disposeWith(this);
642
- when(this.inputModel).changes(value => this.valueChange.emit(value), {
1486
+ const { when, valueOf, chain } = Dsl.disposeWith(this);
1487
+ const binding = new Binding.Identity(this.formValueModel, this.componentListModel).writeRight();
1488
+ const inExternalChange = valueOf.any(this.setValueIsInProgress, chain(binding.direction).equals(Binding.Direction.RIGHT)).areTruthy();
1489
+ when(this.componentListModel).changes((is, was) => {
1490
+ this.valueChange.emit(is);
1491
+ this.onValueEditedListeners.fire(l => l(is, was));
1492
+ }, {
643
1493
  initialValue: 'ignore',
644
- unless: this.setValueIsInitialising
1494
+ // we never fire events during an external changes to the value. This allows
1495
+ // the component to behave when used in the conventional angular
1496
+ // fashion, i.e. [(value)]="..."
1497
+ unless: inExternalChange
645
1498
  });
1499
+ DebugContext.tag(this.formValueModel, `${this.constructor.name}.formValueModel`);
646
1500
  }
1501
+ // We add support for simple direct display of values by allowing components to be used
1502
+ // by `component.value = ...` This use of the component without a value model in tables
1503
+ // and the like.
647
1504
  set value(value) {
648
- if (!this.listHolder) {
649
- this.setValueIsInitialising.whileTrue(() => {
1505
+ this.setValueIsInProgress.whileTrue(() => {
1506
+ if (!this.listHolder) {
650
1507
  this.listHolder = new MutableListModel(value);
651
1508
  this.listModel = this.listHolder;
652
- });
653
- }
654
- else {
655
- this.listHolder.value = value;
656
- }
1509
+ }
1510
+ else {
1511
+ this.listHolder.value = value;
1512
+ }
1513
+ });
657
1514
  }
658
1515
  };
659
1516
  __decorate([
660
- Input(), TrackExternal({ delegateTo: 'inputModel' }),
1517
+ Input(), TrackExternal({ delegateTo: 'formValueModel' }),
661
1518
  __metadata("design:type", Object)
662
1519
  ], AbstractListInputComponent.prototype, "listModel", void 0);
663
1520
  __decorate([
@@ -688,32 +1545,42 @@ let AbstractValueInputComponent = class AbstractValueInputComponent extends Abst
688
1545
  * gets told it's an Object and can't scan for a base type annotated with @DelegateUsing(..).
689
1546
  */
690
1547
  // We have to register it as a disposable so it ditches any listeners when we're disposed.
691
- this.inputModel = this.registerDisposable(new Form.DelegatingValueModel());
1548
+ this.formValueModel = this.registerDisposable(new Form.DelegatingValueModel());
692
1549
  this.setValueInProgress = new Guard();
1550
+ this.componentValueModel = new MutableValueModel();
693
1551
  this.valueChange = new EventEmitter();
694
- const { when } = Dsl.disposeWith(this);
695
- when(this.inputModel).changes(value => this.valueChange.emit(value), {
1552
+ const { when, chain, valueOf } = Dsl.disposeWith(this);
1553
+ const binding = new Binding.Identity(this.formValueModel, this.componentValueModel).writeRight();
1554
+ const inExternalChange = valueOf.any(this.setValueInProgress, chain(binding.direction).equals(Binding.Direction.RIGHT)).areTruthy();
1555
+ when(this.componentValueModel).changes((is, was) => {
1556
+ this.valueChange.emit(is);
1557
+ this.onValueEditedListeners.fire(l => l(is, was));
1558
+ }, {
696
1559
  initialValue: 'ignore',
697
- unless: this.setValueInProgress
1560
+ // we never fire events during an external set value operation. This allows
1561
+ // the component to behave when used in the conventional angular
1562
+ // fashion, i.e. [(value)]="..."
1563
+ unless: inExternalChange
698
1564
  });
1565
+ DebugContext.tag(this.formValueModel, `${this.constructor.name}.formValueModel`);
699
1566
  }
1567
+ // We add support for simple direct display of values by allowing components to be used
1568
+ // by `component.value = ...` This use of the component without a value model in tables
1569
+ // and the like.
700
1570
  set value(value) {
701
- // we never fire events during an external set value operation. This allows
702
- // the component to behave when used in the conventional angular
703
- // fashion, i.e. [(value)]="..."
704
1571
  this.setValueInProgress.whileTrue(() => {
705
- if (!this.valueHolder) {
706
- this.valueHolder = new MutableValueModel(value);
707
- this.valueModel = this.valueHolder;
1572
+ if (!this.plainValueHolder) {
1573
+ this.plainValueHolder = new MutableValueModel(value);
1574
+ this.valueModel = this.plainValueHolder;
708
1575
  }
709
1576
  else {
710
- this.valueHolder.value = value;
1577
+ this.plainValueHolder.value = value;
711
1578
  }
712
1579
  });
713
1580
  }
714
1581
  };
715
1582
  __decorate([
716
- Input(), TrackExternal({ delegateTo: 'inputModel' }),
1583
+ Input(), TrackExternal({ delegateTo: 'formValueModel' }),
717
1584
  __metadata("design:type", Object)
718
1585
  ], AbstractValueInputComponent.prototype, "valueModel", void 0);
719
1586
  __decorate([
@@ -751,9 +1618,15 @@ let AutocompleteInputComponent = class AutocompleteInputComponent extends Abstra
751
1618
  }
752
1619
  ngOnInit() {
753
1620
  }
1621
+ formatOption(option) {
1622
+ return this.optionLabelFormat(option);
1623
+ }
754
1624
  updateFilter($event) {
755
1625
  this.filterValue.value = $event;
756
1626
  }
1627
+ onSelect($event) {
1628
+ this.valueModel.value = $event.option.value;
1629
+ }
757
1630
  };
758
1631
  __decorate([
759
1632
  Input(), TrackExternal(),
@@ -782,7 +1655,7 @@ __decorate([
782
1655
  AutocompleteInputComponent = __decorate([
783
1656
  Component({
784
1657
  selector: 'aup-autocomplete-input',
785
- template: "<mat-form-field appearance=\"standard\" [floatLabel]=\"floatLabel\">\n <mat-label *ngIf=\"label\">{{label}}</mat-label>\n <input type=\"string\"\n matInput\n [matAutocomplete]=\"autocomplete\"\n placeholder=\"{{placeholder}}\"\n [ngModel]=\"optionLabelFormat(valueModel.value)\"\n (ngModelChange)=\"updateFilter($event)\"\n [disabled]=\"!enabled.value\"\n (keydown.enter)=\"notifyEnterKey()\"\n (keydown.escape)=\"notifyEscapeKey()\"\n [pectinFocusBinding]=\"focusContext\"\n [errorStateMatcher]=\"errorStateMatcher\"\n >\n <mat-autocomplete #autocomplete [displayWith]=\"optionLabelFormat\" [autoActiveFirstOption]=\"true\">\n <mat-option *ngFor=\"let option of filteredOptions.value; let i = index\"\n [value]=\"option\"\n >{{optionLabelFormat(option)}}</mat-option>\n <mat-option *ngIf=\"allowNil\">{{placeholder}}</mat-option>\n </mat-autocomplete>\n\n <mat-hint *ngIf=\"showHint\">{{hint}}</mat-hint>\n <mat-error *ngIf=\"hasErrors\">{{firstError}}</mat-error>\n</mat-form-field>\n",
1658
+ 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",
786
1659
  styles: [":host{display:inline-block}mat-form-field{width:100%}"]
787
1660
  }),
788
1661
  __metadata("design:paramtypes", [])
@@ -810,7 +1683,7 @@ __decorate([
810
1683
  CheckboxInputComponent = __decorate([
811
1684
  Component({
812
1685
  selector: 'aup-checkbox-input',
813
- template: "<!-- TODO: add focus binding -->\n<mat-checkbox\n [(ngModel)]=\"valueModel.value\"\n [color]=\"color\"\n [labelPosition]=\"labelPosition\"\n [disabled]=\"!isEnabled()\"\n>{{label}}</mat-checkbox>\n<mat-hint *ngIf=\"showHint\">{{hint}}</mat-hint>\n<mat-error *ngIf=\"hasErrors\">{{firstError}}</mat-error>\n",
1686
+ 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",
814
1687
  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}"]
815
1688
  }),
816
1689
  __metadata("design:paramtypes", [])
@@ -820,7 +1693,7 @@ CheckboxInputComponent = __decorate([
820
1693
  * Using templates:
821
1694
  * <aup-multiple-select-input [valueModel]="myModel" [options]="myOptions">
822
1695
  * <ng-template #optionTemplate let-option>{{option.thePropertyYouWant}}</ng-template>
823
- * <ng-template #nilOptionTemplateRef let-option>{{option.thePropertyYouWant}}</ng-template>
1696
+ * <ng-template #nilOptionTemplate let-option>{{option.thePropertyYouWant}}</ng-template>
824
1697
  * </aup-multiple-select_input>
825
1698
  */
826
1699
  let MultipleSelectInputComponent = class MultipleSelectInputComponent extends AbstractListInputComponent {
@@ -843,18 +1716,10 @@ __decorate([
843
1716
  Input(),
844
1717
  __metadata("design:type", Object)
845
1718
  ], MultipleSelectInputComponent.prototype, "optionLabel", void 0);
846
- __decorate([
847
- Input(),
848
- __metadata("design:type", Boolean)
849
- ], MultipleSelectInputComponent.prototype, "allowNil", void 0);
850
1719
  __decorate([
851
1720
  ContentChild('optionTemplate'),
852
1721
  __metadata("design:type", TemplateRef)
853
1722
  ], MultipleSelectInputComponent.prototype, "optionTemplateRef", void 0);
854
- __decorate([
855
- ContentChild('nilOptionTemplate'),
856
- __metadata("design:type", TemplateRef)
857
- ], MultipleSelectInputComponent.prototype, "nilOptionTemplateRef", void 0);
858
1723
  __decorate([
859
1724
  Input(),
860
1725
  __metadata("design:type", Function)
@@ -862,7 +1727,7 @@ __decorate([
862
1727
  MultipleSelectInputComponent = __decorate([
863
1728
  Component({
864
1729
  selector: 'aup-multiple-select-input',
865
- template: "<mat-form-field appearance=\"standard\" [floatLabel]=\"floatLabel\">\n <mat-label *ngIf=\"label\">{{label}}</mat-label>\n <mat-select placeholder=\"{{placeholder}}\"\n multiple\n [(ngModel)]=\"listModel.value\"\n [disabled]=\"!enabled.value\"\n (keydown.enter)=\"notifyEnterKey()\"\n (keydown.escape)=\"notifyEscapeKey()\"\n [pectinFocusBinding]=\"focusContext\"\n [errorStateMatcher]=\"errorStateMatcher\"\n >\n <mat-option *ngIf=\"allowNil\">{{placeholder}}</mat-option>\n <mat-option *ngFor=\"let option of optionsModel.value; let i = index\" [value]=\"option\">\n <ng-container *ngIf=\"!optionTemplateRef\">{{optionLabelFormat(option)}}</ng-container>\n <ng-container *ngIf=\"optionTemplateRef\"\n [ngTemplateOutlet]=\"optionTemplateRef\"\n [ngTemplateOutletContext]=\"{ $implicit: option, index: i }\"\n >\n </ng-container>\n </mat-option>\n </mat-select>\n <mat-hint *ngIf=\"showHint\">{{hint}}</mat-hint>\n <mat-error *ngIf=\"hasErrors\">{{firstError}}</mat-error>\n</mat-form-field>\n",
1730
+ 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",
866
1731
  styles: [":host{display:inline-block}mat-form-field{width:100%}"]
867
1732
  }),
868
1733
  __metadata("design:paramtypes", [])
@@ -890,7 +1755,7 @@ __decorate([
890
1755
  NumberInputComponent = __decorate([
891
1756
  Component({
892
1757
  selector: 'aup-number-input',
893
- template: "<mat-form-field appearance=\"standard\" [floatLabel]=\"floatLabel\">\n <mat-label *ngIf=\"label\">{{label}}</mat-label>\n <input type=\"number\"\n matInput\n placeholder=\"{{placeholder}}\"\n [(ngModel)]=\"valueModel.value\"\n [disabled]=\"!enabled.value\"\n (keydown.enter)=\"notifyEnterKey()\"\n (keydown.escape)=\"notifyEscapeKey()\"\n [pectinFocusBinding]=\"focusContext\"\n [errorStateMatcher]=\"errorStateMatcher\"\n [min]=\"min\"\n [max]=\"max\"\n >\n <mat-hint *ngIf=\"hint && !dense\" >{{hint}}</mat-hint>\n <mat-error *ngIf=\"hasErrors\">{{firstError}}</mat-error>\n</mat-form-field>\n",
1758
+ 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",
894
1759
  styles: [""]
895
1760
  }),
896
1761
  __metadata("design:paramtypes", [])
@@ -908,7 +1773,7 @@ let PasswordInputComponent = class PasswordInputComponent extends AbstractValueI
908
1773
  PasswordInputComponent = __decorate([
909
1774
  Component({
910
1775
  selector: 'aup-password-input',
911
- template: "<mat-form-field appearance=\"standard\" [floatLabel]=\"floatLabel\">\n <mat-label *ngIf=\"label\">{{label}}</mat-label>\n <input type=\"password\"\n matInput\n placeholder=\"{{placeholder}}\"\n [(ngModel)]=\"valueModel.value\"\n [disabled]=\"!enabled.value\"\n (keydown.enter)=\"notifyEnterKey()\"\n (keydown.escape)=\"notifyEscapeKey()\"\n [pectinFocusBinding]=\"focusContext\"\n [errorStateMatcher]=\"errorStateMatcher\"\n >\n <mat-hint *ngIf=\"showHint\">{{hint}}</mat-hint>\n <mat-error *ngIf=\"hasErrors\">{{firstError}}</mat-error>\n</mat-form-field>\n\n",
1776
+ 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",
912
1777
  styles: [""]
913
1778
  }),
914
1779
  __metadata("design:paramtypes", [])
@@ -918,7 +1783,7 @@ PasswordInputComponent = __decorate([
918
1783
  * Using templates:
919
1784
  * <aup-select-input [valueModel]="myModel" [options]="myOptions">
920
1785
  * <ng-template #optionTemplate let-option>{{option.thePropertyYouWant}}</ng-template>
921
- * <ng-template #nilOptionTemplateRef let-option>{{option.thePropertyYouWant}}</ng-template>
1786
+ * <ng-template #nilOptionTemplate let-option>{{option.thePropertyYouWant}}</ng-template>
922
1787
  * </aup-select_input>
923
1788
  */
924
1789
  let SelectInputComponent = class SelectInputComponent extends AbstractValueInputComponent {
@@ -960,7 +1825,7 @@ __decorate([
960
1825
  SelectInputComponent = __decorate([
961
1826
  Component({
962
1827
  selector: 'aup-select-input',
963
- template: "<mat-form-field appearance=\"standard\" [floatLabel]=\"floatLabel\">\n <mat-label *ngIf=\"label\">{{label}}</mat-label>\n <mat-select placeholder=\"{{placeholder}}\"\n [(ngModel)]=\"valueModel.value\"\n [disabled]=\"!enabled.value\"\n (keydown.enter)=\"notifyEnterKey()\"\n (keydown.escape)=\"notifyEscapeKey()\"\n [pectinFocusBinding]=\"focusContext\"\n [errorStateMatcher]=\"errorStateMatcher\"\n >\n <mat-option *ngIf=\"allowNil\">{{placeholder}}</mat-option>\n <mat-option *ngFor=\"let option of optionsModel.value; let i = index\" [value]=\"option\">\n <ng-container *ngIf=\"!optionTemplateRef\">{{optionLabelFormat(option)}}</ng-container>\n <ng-container *ngIf=\"optionTemplateRef\"\n [ngTemplateOutlet]=\"optionTemplateRef\"\n [ngTemplateOutletContext]=\"{ $implicit: option, index: i }\"\n >\n </ng-container>\n </mat-option>\n </mat-select>\n <mat-hint *ngIf=\"showHint\">{{hint}}</mat-hint>\n <mat-error *ngIf=\"hasErrors\">{{firstError}}</mat-error>\n</mat-form-field>\n",
1828
+ 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",
964
1829
  styles: [":host{display:inline-block}mat-form-field{width:100%}"]
965
1830
  }),
966
1831
  __metadata("design:paramtypes", [])
@@ -971,9 +1836,9 @@ let StringInputComponent = class StringInputComponent extends AbstractValueInput
971
1836
  super();
972
1837
  const { chain, valueOf, before, when, after, observe, switchOn } = Dsl.disposeWith(this);
973
1838
  this.clearCommand = Command.create(() => {
974
- this.valueModel.value = null;
1839
+ this.componentValueModel.value = null;
975
1840
  });
976
- this.clearCommand.disableWhile(chain.stringValue(this.valueModel).isBlank());
1841
+ this.clearCommand.disableWhile(chain.stringValue(this.componentValueModel).isBlank());
977
1842
  }
978
1843
  ngOnInit() {
979
1844
  }
@@ -989,7 +1854,7 @@ __decorate([
989
1854
  StringInputComponent = __decorate([
990
1855
  Component({
991
1856
  selector: 'aup-string-input',
992
- template: "<mat-form-field appearance=\"standard\" [floatLabel]=\"floatLabel\">\n <mat-label *ngIf=\"label\">{{label}}</mat-label>\n <input matInput\n placeholder=\"{{placeholder}}\"\n [(ngModel)]=\"valueModel.value\"\n [disabled]=\"!enabled.value\"\n (keydown.enter)=\"notifyEnterKey()\"\n (keydown.escape)=\"notifyEscapeKey()\"\n [pectinFocusBinding]=\"focusContext\"\n [errorStateMatcher]=\"errorStateMatcher\"\n >\n <mat-hint *ngIf=\"showHint\">{{hint}}</mat-hint>\n <mat-error *ngIf=\"hasErrors\">{{firstError}}</mat-error>\n <button mat-button mat-icon-button matSuffix *ngIf=\"enableClear\" [pectinCommand]=\"clearCommand\">\n <aup-icon icon=\"mat:close\"></aup-icon>\n </button>\n</mat-form-field>\n\n",
1857
+ 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",
993
1858
  styles: ["button[disabled]{visibility:hidden}"]
994
1859
  }),
995
1860
  __metadata("design:paramtypes", [])
@@ -1017,13 +1882,18 @@ __decorate([
1017
1882
  TextInputComponent = __decorate([
1018
1883
  Component({
1019
1884
  selector: 'aup-text-input',
1020
- template: "<mat-form-field appearance=\"standard\" [floatLabel]=\"floatLabel\">\n <mat-label *ngIf=\"label\">{{label}}</mat-label>\n <textarea matInput\n placeholder=\"{{placeholder}}\"\n [(ngModel)]=\"valueModel.value\"\n [disabled]=\"!enabled.value\"\n (keydown.enter)=\"notifyEnterKey()\"\n (keydown.escape)=\"notifyEscapeKey()\"\n [pectinFocusBinding]=\"focusContext\"\n [errorStateMatcher]=\"errorStateMatcher\"\n [rows]=\"rows\"\n [cols]=\"cols\"\n >\n </textarea>\n <mat-hint *ngIf=\"showHint\">{{hint}}</mat-hint>\n <mat-error *ngIf=\"hasErrors\">{{firstError}}</mat-error>\n</mat-form-field>\n\n",
1885
+ 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",
1021
1886
  styles: ["button[disabled]{visibility:hidden}textarea{overflow:auto}"]
1022
1887
  }),
1023
1888
  __metadata("design:paramtypes", [])
1024
1889
  ], TextInputComponent);
1025
1890
 
1026
- let IconComponent = class IconComponent {
1891
+ var IconComponent_1;
1892
+ let IconComponent = IconComponent_1 = class IconComponent {
1893
+ constructor() {
1894
+ this.allowedPrefixes = Enum.values(IconComponent_1.IconPrefix).map(p => `${p}:`);
1895
+ this.iconPrefix = IconComponent_1.IconPrefix;
1896
+ }
1027
1897
  set icon(iconName) {
1028
1898
  this._icon = iconName;
1029
1899
  if (!iconName) {
@@ -1039,7 +1909,7 @@ let IconComponent = class IconComponent {
1039
1909
  if (this.prefix) {
1040
1910
  this.errorMessage = `Unknown icon "${iconName}"`;
1041
1911
  }
1042
- this.errorMessage = `Unknown icon prefix "${this.prefix}"`;
1912
+ this.errorMessage = `Unknown icon prefix, expected one of [${this.allowedPrefixes.join(',')}] got "${this.prefix}:"`;
1043
1913
  }
1044
1914
  get icon() {
1045
1915
  return this._icon;
@@ -1050,13 +1920,20 @@ __decorate([
1050
1920
  __metadata("design:type", String),
1051
1921
  __metadata("design:paramtypes", [String])
1052
1922
  ], IconComponent.prototype, "icon", null);
1053
- IconComponent = __decorate([
1923
+ IconComponent = IconComponent_1 = __decorate([
1054
1924
  Component({
1055
1925
  selector: 'aup-icon',
1056
- template: "<ng-container [ngSwitch]=\"prefix\">\n\n <mat-icon *ngSwitchCase=\"'svg'\"\n [svgIcon]=\"suffix\"\n class=\"svgIcon\">\n </mat-icon>\n\n <mat-icon *ngSwitchCase=\"'mat'\">\n {{suffix}}\n </mat-icon>\n\n <div *ngSwitchCase=\"'fab'\"\n class=\"faIconWrapper\">\n <fa-icon [icon]=\"suffix\">\n </fa-icon>\n </div>\n\n <mat-icon *ngSwitchDefault\n [matTooltip]=\"errorMessage\">\n bug_report\n </mat-icon>\n\n</ng-container>\n\n",
1926
+ 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",
1057
1927
  styles: [":host{display:inline-flex;width:24px}fa-icon{vertical-align:middle}.faIconWrapper{text-align:center;width:24px;height:24px}.svgIcon{width:24px;height:24px}:host(.mat-chip-remove) mat-icon{font-size:18px}mat-icon{width:inherit;height:inherit}"]
1058
1928
  })
1059
1929
  ], IconComponent);
1930
+ (function (IconComponent) {
1931
+ IconComponent.IconPrefix = Enum({
1932
+ SVG: 'svg',
1933
+ FONT_AWESOME: 'fa',
1934
+ MATERIAL: 'mat'
1935
+ });
1936
+ })(IconComponent || (IconComponent = {}));
1060
1937
 
1061
1938
  let NoopComponent = class NoopComponent {
1062
1939
  constructor() {
@@ -1471,7 +2348,8 @@ SelectHeaderCellRendererComponent = __decorate([
1471
2348
 
1472
2349
  const noop = () => {
1473
2350
  };
1474
- const ɵ0 = noop;
2351
+ const ɵ0$3 = noop;
2352
+ const CELL_RENDERER_COMPONENT_ROW_CACHE = Symbol("aup-cell-renderer:row-data-cache");
1475
2353
  class ColumnModel {
1476
2354
  constructor(columnId, defaults) {
1477
2355
  this.columnId = columnId;
@@ -1585,6 +2463,34 @@ class PropertyColumnModel extends ColumnModel {
1585
2463
  }));
1586
2464
  return this;
1587
2465
  }
2466
+ mutableCellRenderer(componentType, options) {
2467
+ this.configureCellRenderer(new ComponentCellRendererPortalRef(componentType, (component, rowData, firstTime) => {
2468
+ // keep a local copy most recent row value so it's available to teh
2469
+ // edit callback without having to add/remove subscribers all the time.
2470
+ component[CELL_RENDERER_COMPONENT_ROW_CACHE] = rowData.row;
2471
+ let disableEditCallback = false;
2472
+ if (firstTime) {
2473
+ if (___default.isFunction(options === null || options === void 0 ? void 0 : options.onComponentInit)) {
2474
+ options.onComponentInit(component);
2475
+ }
2476
+ // install our edit callback
2477
+ component.onValueEdited((is, was) => {
2478
+ if (!disableEditCallback) {
2479
+ options.onValueEdit(component[CELL_RENDERER_COMPONENT_ROW_CACHE], is, was);
2480
+ }
2481
+ });
2482
+ }
2483
+ // now push the value the component and disable the callback just incase the component misbehaves
2484
+ // and fires a value change during the operation.
2485
+ disableEditCallback = true;
2486
+ component.value = rowData.row[this.property];
2487
+ disableEditCallback = false;
2488
+ if (!___default.isFunction(options) && ___default.isFunction(options === null || options === void 0 ? void 0 : options.onRowUpdate)) {
2489
+ options.onRowUpdate(component, rowData.row);
2490
+ }
2491
+ }));
2492
+ return this;
2493
+ }
1588
2494
  cellEditor(editor, validatorsOrInitialiser, onComponentInit) {
1589
2495
  const validators = Array.isArray(validatorsOrInitialiser) ? validatorsOrInitialiser : undefined;
1590
2496
  const initialiser = ___default.isFunction(validatorsOrInitialiser) ? validatorsOrInitialiser : onComponentInit;
@@ -1652,9 +2558,22 @@ class CustomValueColumnModel extends ColumnModel {
1652
2558
  this.getValue = getValue;
1653
2559
  this.cellRenderer(DefaultCellRendererComponent);
1654
2560
  }
1655
- cellRenderer(componentType) {
1656
- this.configureCellRenderer(new ComponentCellRendererPortalRef(componentType, (component, rowData) => {
2561
+ cellRenderer(componentType, onComponentInitOrOptions) {
2562
+ this.configureCellRenderer(new ComponentCellRendererPortalRef(componentType, (component, rowData, firstTime) => {
2563
+ if (firstTime) {
2564
+ if (___default.isFunction(onComponentInitOrOptions)) {
2565
+ onComponentInitOrOptions(component);
2566
+ }
2567
+ else {
2568
+ if (___default.isFunction(onComponentInitOrOptions === null || onComponentInitOrOptions === void 0 ? void 0 : onComponentInitOrOptions.onComponentInit)) {
2569
+ onComponentInitOrOptions.onComponentInit(component);
2570
+ }
2571
+ }
2572
+ }
1657
2573
  component.value = this.getValue(rowData.row);
2574
+ if (!___default.isFunction(onComponentInitOrOptions) && ___default.isFunction(onComponentInitOrOptions === null || onComponentInitOrOptions === void 0 ? void 0 : onComponentInitOrOptions.onRowUpdate)) {
2575
+ onComponentInitOrOptions.onRowUpdate(component, rowData.row);
2576
+ }
1658
2577
  }));
1659
2578
  return this;
1660
2579
  }
@@ -1816,6 +2735,9 @@ let TableModel = TableModel_1 = class TableModel {
1816
2735
  this._editorSessions = new MutableListModel();
1817
2736
  this.rowClassNamePredicates = [];
1818
2737
  this._createForm = (row) => new DirtyTrackingForm();
2738
+ this.trackBy = (index, item) => {
2739
+ return this.identityOf ? this.identityOf(item) : index;
2740
+ };
1819
2741
  this.identityOf = sourceOfTruth.identityOf;
1820
2742
  const { chain, valueOf, before, when, after, observe, switchOn } = Dsl.disposeWith(this._garbage);
1821
2743
  this._columnsById = chain(this._columns).indexBy('columnId');
@@ -1837,11 +2759,6 @@ let TableModel = TableModel_1 = class TableModel {
1837
2759
  get rowsBeingEdited() {
1838
2760
  return this._rowsBeingEdited.readonly;
1839
2761
  }
1840
- getTrackByFunction() {
1841
- return (index, item) => {
1842
- return this.identityOf ? this.identityOf(item) : index;
1843
- };
1844
- }
1845
2762
  get columns() {
1846
2763
  return this._columns.readonly;
1847
2764
  }
@@ -1863,6 +2780,9 @@ let TableModel = TableModel_1 = class TableModel {
1863
2780
  addCustomColumn(columnId, dataAccessor) {
1864
2781
  return this.addColumn(new CustomValueColumnModel(columnId, this, dataAccessor));
1865
2782
  }
2783
+ addComponentColumn(columnId, component, onComponentInitOrOptions) {
2784
+ return this.addColumn(new CustomValueColumnModel(columnId, this, row => row)).cellRenderer(component, onComponentInitOrOptions);
2785
+ }
1866
2786
  addTemplateColumn(columnId) {
1867
2787
  return this.addColumn(new CustomTemplateColumnModel(columnId, this));
1868
2788
  }
@@ -1891,12 +2811,14 @@ let TableModel = TableModel_1 = class TableModel {
1891
2811
  }
1892
2812
  return column;
1893
2813
  }
2814
+ // removeColumn(column: ColumnModel<Row>) {
2815
+ //
2816
+ // }
1894
2817
  columnTextProperties(columnTextProperties) {
1895
2818
  this._columnTextPropertiesLookup = columnTextProperties;
1896
2819
  }
1897
2820
  getColumnTextProperties(column) {
1898
- const factory = this._columnTextPropertiesLookup ? this._columnTextPropertiesLookup[column.columnId] : undefined;
1899
- return factory ? factory() : undefined;
2821
+ return this._columnTextPropertiesLookup ? this._columnTextPropertiesLookup[column.columnId] : undefined;
1900
2822
  }
1901
2823
  startEditSession(row) {
1902
2824
  const rowId = this.identityOf(row);
@@ -2010,7 +2932,7 @@ __decorate([
2010
2932
  TableComponent = __decorate([
2011
2933
  Component({
2012
2934
  selector: 'aup-table',
2013
- 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",
2935
+ 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",
2014
2936
  styles: [":host{display:flex;flex-direction:column;align-items:stretch}:host table{flex:1}"]
2015
2937
  }),
2016
2938
  __metadata("design:paramtypes", [])
@@ -2185,6 +3107,73 @@ TableHeaderCellRendererComponent = __decorate([
2185
3107
  __metadata("design:paramtypes", [])
2186
3108
  ], TableHeaderCellRendererComponent);
2187
3109
 
3110
+ class MenuItemData {
3111
+ constructor(factory, face) {
3112
+ this.factory = factory;
3113
+ this.face = face;
3114
+ }
3115
+ }
3116
+ /**
3117
+ *
3118
+ */
3119
+ let TableRowMenuComponent = class TableRowMenuComponent extends DisposableComponent {
3120
+ constructor() {
3121
+ super();
3122
+ this.actions = [];
3123
+ this.moreActions = [];
3124
+ }
3125
+ registerAction(commandFactory, properties) {
3126
+ this.actions.push(new MenuItemData(commandFactory, properties));
3127
+ }
3128
+ registerMoreAction(commandFactory, properties) {
3129
+ this.moreActions.push(new MenuItemData(commandFactory, properties));
3130
+ }
3131
+ ngOnInit() {
3132
+ }
3133
+ createMoreMenuCommand(item, value) {
3134
+ const { when } = Dsl.disposeWith(this);
3135
+ const command = item.factory.create(value);
3136
+ when(command.busy).becomesFalsey(() => {
3137
+ this.closeMoreMenu();
3138
+ });
3139
+ return command;
3140
+ }
3141
+ closeMoreMenu() {
3142
+ this.menu.closeMenu();
3143
+ }
3144
+ };
3145
+ __decorate([
3146
+ Input(),
3147
+ __metadata("design:type", Object)
3148
+ ], TableRowMenuComponent.prototype, "value", void 0);
3149
+ __decorate([
3150
+ ViewChild(MatMenuTrigger),
3151
+ __metadata("design:type", MatMenuTrigger)
3152
+ ], TableRowMenuComponent.prototype, "menu", void 0);
3153
+ TableRowMenuComponent = __decorate([
3154
+ Component({
3155
+ selector: 'aup-table-row-menu',
3156
+ template: `
3157
+ <aup-tool-bar>
3158
+ <aup-command *ngFor="let action of actions" [command]="action.factory.create(value)"
3159
+ [face]="action.faceModel"></aup-command>
3160
+ </aup-tool-bar>
3161
+ <ng-container *ngIf="moreActions.length > 0">
3162
+ <aup-more-menu>
3163
+ <aup-command *ngFor="let action of moreActions" [command]="action.factory.create(value)"
3164
+ [face]="action.faceModel"></aup-command>
3165
+ </aup-more-menu>
3166
+ </ng-container>
3167
+ `,
3168
+ styles: [`:host {
3169
+ display: inline-flex;
3170
+ flex-direction: row;
3171
+ align-items: center;
3172
+ }`]
3173
+ }),
3174
+ __metadata("design:paramtypes", [])
3175
+ ], TableRowMenuComponent);
3176
+
2188
3177
  let VerticalFocusContainerComponent = class VerticalFocusContainerComponent extends FocusContainerComponent {
2189
3178
  constructor(focusManager) {
2190
3179
  super(focusManager);
@@ -2308,7 +3297,18 @@ ComponentsModule = __decorate([
2308
3297
  DefaultHeaderCellRendererComponent,
2309
3298
  TableHeaderCellRendererComponent,
2310
3299
  IconComponent,
2311
- SectionHeaderComponent
3300
+ SectionHeaderComponent,
3301
+ TableRowMenuComponent,
3302
+ ToolBarComponent,
3303
+ CommandComponent,
3304
+ PopupMenuComponent,
3305
+ CommandGroupComponent,
3306
+ CommandFaceComponent,
3307
+ MoreMenuComponent,
3308
+ SeparatorComponent,
3309
+ FlexComponent,
3310
+ CommandGroupMenuRendererComponent,
3311
+ CommandGroupRendererComponent
2312
3312
  ],
2313
3313
  imports: [
2314
3314
  CommonModule,
@@ -2327,7 +3327,9 @@ ComponentsModule = __decorate([
2327
3327
  CdkScrollableModule,
2328
3328
  FontAwesomeModule,
2329
3329
  MatTooltipModule,
2330
- MatAutocompleteModule
3330
+ MatAutocompleteModule,
3331
+ MatMenuModule,
3332
+ MatDividerModule
2331
3333
  ],
2332
3334
  exports: [
2333
3335
  NumberInputComponent,
@@ -2351,22 +3353,19 @@ ComponentsModule = __decorate([
2351
3353
  EditRowControls,
2352
3354
  ColumnTemplateDirective,
2353
3355
  IconComponent,
2354
- SectionHeaderComponent
3356
+ SectionHeaderComponent,
3357
+ TableRowMenuComponent,
3358
+ CommandGroupComponent,
3359
+ ToolBarComponent,
3360
+ CommandComponent,
3361
+ PopupMenuComponent,
3362
+ CommandFaceComponent,
3363
+ MoreMenuComponent,
3364
+ SeparatorComponent,
3365
+ FlexComponent
2355
3366
  ],
2356
3367
  providers: [
2357
3368
  FocusBindingFactory
2358
- // {
2359
- // provide: CELL_EDITOR_REGISTRATION, useValue: {
2360
- // type: 'string',
2361
- // editorClass: StringInputComponent
2362
- // }, multi: true
2363
- // },
2364
- // {
2365
- // provide: CELL_EDITOR_REGISTRATION, useValue: {
2366
- // type: 'number',
2367
- // editorClass: NumberInputComponent
2368
- // }, multi: true
2369
- // }
2370
3369
  ]
2371
3370
  }),
2372
3371
  __metadata("design:paramtypes", [FaIconLibrary])
@@ -2434,7 +3433,7 @@ ActivityActionsComponent = __decorate([
2434
3433
  Component({
2435
3434
  selector: 'aup-activity-actions',
2436
3435
  template: "<ng-container *ngIf=\"hasCancelCommand()\">\n <button class=\"cancel\" *ngIf=\"!hasCancelText()\" mat-icon-button [pectinCommand]=\"cancelCommand\">\n <aup-icon icon=\"mat:clear\"></aup-icon>\n </button>\n <button class=\"cancel\" *ngIf=\"hasCancelText()\" mat-button [pectinCommand]=\"cancelCommand\">{{cancelText}}</button>\n</ng-container>\n<ng-container *ngIf=\"hasConfirmCommand()\">\n <button class=\"confirm\" *ngIf=\"!hasConfirmText()\" mat-icon-button [pectinCommand]=\"confirmCommand\">\n <aup-icon icon=\"mat:done\"></aup-icon>\n </button>\n <button class=\"confirm\" *ngIf=\"hasConfirmText()\" mat-button [pectinCommand]=\"confirmCommand\">{{confirmText}}</button>\n</ng-container>\n<div class=\"content\">\n <ng-content></ng-content>\n</div>\n",
2437
- styles: [":host{display:-ms-grid;display:grid;grid-template-areas:\"cancel confirm content\";-ms-grid-columns:auto auto 1fr;grid-template-columns:auto auto 1fr;-ms-grid-rows:auto;grid-template-rows:auto;align-items:center;justify-content:end}:host.align-end{grid-template-areas:\"content cancel confirm\";-ms-grid-columns:1fr auto auto;grid-template-columns:1fr auto auto}:host.align-stretch{grid-template-areas:\"cancel content confirm\";-ms-grid-columns:auto 1fr auto;grid-template-columns:auto 1fr auto}.cancel{-ms-grid-row:1;-ms-grid-column:1;grid-area:cancel}:host.align-end>.cancel{-ms-grid-row:1;-ms-grid-column:2}:host.align-stretch>.cancel{-ms-grid-row:1;-ms-grid-column:1}.confirm{-ms-grid-row:1;-ms-grid-column:2;grid-area:confirm}:host.align-end>.confirm{-ms-grid-row:1;-ms-grid-column:3}:host.align-stretch>.confirm{-ms-grid-row:1;-ms-grid-column:3}.content{-ms-grid-row:1;-ms-grid-column:3;grid-area:content;text-align:left}:host.align-end>.content{-ms-grid-row:1;-ms-grid-column:1}:host.align-stretch>.content{-ms-grid-row:1;-ms-grid-column:2}"]
3436
+ styles: [":host{display:-ms-grid;display:grid;grid-template-areas:\"cancel confirm content\";-ms-grid-columns:auto auto 1fr;grid-template-columns:auto auto 1fr;-ms-grid-rows:auto;grid-template-rows:auto;align-items:center;justify-content:end}:host.align-end{grid-template-areas:\"content cancel confirm\";-ms-grid-columns:1fr auto auto;grid-template-columns:1fr auto auto}:host.align-stretch{grid-template-areas:\"cancel content confirm\";-ms-grid-columns:auto 1fr auto;grid-template-columns:auto 1fr auto}.cancel{-ms-grid-row:1;-ms-grid-column:1;grid-area:cancel}:host.align-end>.cancel{-ms-grid-row:1;-ms-grid-column:2}:host.align-stretch>.cancel{-ms-grid-row:1;-ms-grid-column:1}.confirm{-ms-grid-row:1;-ms-grid-column:2;grid-area:confirm}:host.align-end>.confirm{-ms-grid-row:1;-ms-grid-column:3}:host.align-stretch>.confirm{-ms-grid-row:1;-ms-grid-column:3}.column{-ms-grid-row:1;-ms-grid-column:3;grid-area:content;text-align:left}:host.align-end>.column{-ms-grid-row:1;-ms-grid-column:1}:host.align-stretch>.column{-ms-grid-row:1;-ms-grid-column:2}"]
2438
3437
  })
2439
3438
  ], ActivityActionsComponent);
2440
3439
 
@@ -2443,12 +3442,21 @@ class Activity extends DisposableComponent {
2443
3442
  constructor() {
2444
3443
  super(...arguments);
2445
3444
  this._busyModel = new DelegatingValueModel().withDefault(false);
3445
+ this._focusedModel = this.registerDisposable(new DelegatingValueModel());
2446
3446
  this.class = 'aup-activity';
2447
3447
  }
3448
+ get isFocused() {
3449
+ return this._focusedModel.value;
3450
+ }
2448
3451
  initialise(nestedInteractionContext, activityContext) {
3452
+ const { chain, when } = Dsl.disposeWith(this);
2449
3453
  assert$1.isNil(this._activityContext);
2450
3454
  this._activityContext = activityContext;
2451
3455
  this._interactionContext = nestedInteractionContext;
3456
+ this._focusedModel.setDelegate(activityContext.focused);
3457
+ when(this._focusedModel).becomesTruthy(() => {
3458
+ this.onActivityReady();
3459
+ });
2452
3460
  }
2453
3461
  get interactionContext() {
2454
3462
  assert$1.isTruthy(this.isInitialised());
@@ -2466,6 +3474,9 @@ class Activity extends DisposableComponent {
2466
3474
  get busy() {
2467
3475
  return this._busyModel.readonly;
2468
3476
  }
3477
+ get focused() {
3478
+ return this._focusedModel.readonly;
3479
+ }
2469
3480
  busyWhile(busyModel) {
2470
3481
  this._busyModel.setDelegate(busyModel);
2471
3482
  }
@@ -2480,6 +3491,11 @@ __decorate([
2480
3491
  HostBinding('class'),
2481
3492
  __metadata("design:type", Object)
2482
3493
  ], Activity.prototype, "class", void 0);
3494
+ __decorate([
3495
+ HostBinding('attr.focused'),
3496
+ __metadata("design:type", Object),
3497
+ __metadata("design:paramtypes", [])
3498
+ ], Activity.prototype, "isFocused", null);
2483
3499
 
2484
3500
  let AlertDialogComponent = class AlertDialogComponent extends Activity {
2485
3501
  constructor(alert) {
@@ -2599,6 +3615,7 @@ class ActivityRef {
2599
3615
  this.onComplete = onComplete;
2600
3616
  this._complete = false;
2601
3617
  this.deferredResult = Deferred.defer();
3618
+ this.focusedModel = new MutableValueModel();
2602
3619
  }
2603
3620
  isActivityRealised() {
2604
3621
  return !!this._activity;
@@ -2610,6 +3627,12 @@ class ActivityRef {
2610
3627
  assert.isTruthy(this.isActivityRealised());
2611
3628
  return this._activity;
2612
3629
  }
3630
+ setFocused(focused) {
3631
+ this.focusedModel.value = focused;
3632
+ }
3633
+ get focused() {
3634
+ return this.focusedModel.value;
3635
+ }
2613
3636
  notifyActivityCreated(activity, nestedInteractionContext) {
2614
3637
  assert.isNil(this._activity);
2615
3638
  this._activity = activity;
@@ -2620,7 +3643,8 @@ class ActivityRef {
2620
3643
  },
2621
3644
  onCancel(error) {
2622
3645
  self.finishActivity(deferred => deferred.reject(error));
2623
- }
3646
+ },
3647
+ focused: this.focusedModel.readonly
2624
3648
  });
2625
3649
  }
2626
3650
  finishActivity(resolveOrReject) {
@@ -2649,7 +3673,7 @@ let ActivityOutletComponent = class ActivityOutletComponent {
2649
3673
  }
2650
3674
  set activityRef(activityRef) {
2651
3675
  if (this.activityRef && !this.activityRef.isComplete()) {
2652
- lang$1.illegalState("changing activity before previous one has completed");
3676
+ lang$1.illegalState('changing activity before previous one has completed');
2653
3677
  }
2654
3678
  this._activityRef = activityRef;
2655
3679
  this.loadActivity(activityRef);
@@ -2706,8 +3730,9 @@ let ActivityContainerComponent = class ActivityContainerComponent extends Abstra
2706
3730
  constructor() {
2707
3731
  super();
2708
3732
  this.dynamicHeight = false;
2709
- this.activityTabs = [];
3733
+ this.activityRefs = [];
2710
3734
  this.garbage = new GarbageCollector();
3735
+ this.inAnimation = new MutableValueModel(false);
2711
3736
  }
2712
3737
  ngOnInit() {
2713
3738
  }
@@ -2739,6 +3764,7 @@ let ActivityContainerComponent = class ActivityContainerComponent extends Abstra
2739
3764
  registerDisposable(disposable) {
2740
3765
  return this.garbage.registerDisposable(disposable);
2741
3766
  }
3767
+ // @Trace()
2742
3768
  dispose() {
2743
3769
  // TODO: think about auto cancelling any outstanding activity on dispose.
2744
3770
  // See NavigationState.Navigating for a use-case.
@@ -2749,7 +3775,7 @@ let ActivityContainerComponent = class ActivityContainerComponent extends Abstra
2749
3775
  if (!this.isActive()) {
2750
3776
  lang$1.illegalState('no activity in progress');
2751
3777
  }
2752
- return ___default.findLast(this.activityTabs, tab => !tab.isComplete());
3778
+ return ___default.findLast(this.activityRefs, tab => !tab.isComplete());
2753
3779
  }
2754
3780
  /**
2755
3781
  * Cancels the current activity and returns true the context is no longer active, false if
@@ -2783,14 +3809,14 @@ let ActivityContainerComponent = class ActivityContainerComponent extends Abstra
2783
3809
  });
2784
3810
  this.launchActivity(activityRef);
2785
3811
  // if this is the first activity let the interaction service know.
2786
- if (this.activityTabs.length === 1) {
3812
+ if (this.activityRefs.length === 1) {
2787
3813
  // console.log('Now active!!!');
2788
3814
  this.interactionServiceApi.notifyActive(this);
2789
3815
  }
2790
3816
  return activityRef.activityResult;
2791
3817
  }
2792
3818
  getActiveActivityCount() {
2793
- return this.activityTabs.filter(ref => !ref.isComplete()).length;
3819
+ return this.activityRefs.filter(ref => !ref.isComplete()).length;
2794
3820
  }
2795
3821
  /**
2796
3822
  * Checks if this interaction context has finished an is in the process of waiting
@@ -2814,7 +3840,7 @@ let ActivityContainerComponent = class ActivityContainerComponent extends Abstra
2814
3840
  // Without this our animation done wasn't called when a single
2815
3841
  // new activity followed a single tab activity (since we're tracking
2816
3842
  // by activity index)
2817
- this.activityTabs = [];
3843
+ this.activityRefs = [];
2818
3844
  const promise = this.interactionServiceApi.notifyFinished(this);
2819
3845
  this._deferredCleanUp = promise
2820
3846
  .finally(() => {
@@ -2824,14 +3850,15 @@ let ActivityContainerComponent = class ActivityContainerComponent extends Abstra
2824
3850
  }
2825
3851
  // @Trace()
2826
3852
  launchActivity(activityRef) {
2827
- const cleanedTabs = this.activityTabs.filter(tab => !tab.isComplete());
2828
- this.activityTabs = cleanedTabs.concat(activityRef);
3853
+ const cleanedTabs = this.activityRefs.filter(tab => !tab.isComplete());
3854
+ this.activityRefs = cleanedTabs.concat(activityRef);
2829
3855
  this.synchroniseSelectedTabIndex();
2830
3856
  }
2831
3857
  activityIndex(index, activityRef) {
2832
3858
  return index;
2833
3859
  }
2834
3860
  ;
3861
+ // @Trace()
2835
3862
  onAnimationFinished() {
2836
3863
  if (this.onAnimationFinishedJob) {
2837
3864
  this.onAnimationFinishedJob();
@@ -2841,14 +3868,20 @@ let ActivityContainerComponent = class ActivityContainerComponent extends Abstra
2841
3868
  /**
2842
3869
  * Synchronises the selected tab index.
2843
3870
  */
3871
+ // @Trace()
2844
3872
  synchroniseSelectedTabIndex() {
2845
3873
  const previousIndex = this.tabs.selectedIndex;
2846
3874
  const newIndex = this.getActiveActivityCount() - 1;
2847
3875
  if (previousIndex !== newIndex) {
3876
+ this.inAnimation.value = true;
3877
+ this.activityRefs[newIndex].setFocused(false);
2848
3878
  this.tabs.selectedIndex = newIndex;
2849
3879
  this.onAnimationFinishedJob = () => {
2850
- this.getSelectedOutlet().component.onActivityReady();
2851
- this.activityTabs = this.activityTabs.filter(tab => !tab.isComplete());
3880
+ this.activityRefs = this.activityRefs.filter(tab => !tab.isComplete());
3881
+ this.inAnimation.value = false;
3882
+ this.activityRefs.forEach((ref, index) => {
3883
+ ref.setFocused(index === newIndex);
3884
+ });
2852
3885
  };
2853
3886
  }
2854
3887
  }
@@ -2856,6 +3889,10 @@ let ActivityContainerComponent = class ActivityContainerComponent extends Abstra
2856
3889
  return this.activityOutlets.toArray()[this.tabs.selectedIndex];
2857
3890
  }
2858
3891
  // @Trace()
3892
+ getSelectedTabIndex() {
3893
+ return this.tabs.selectedIndex;
3894
+ }
3895
+ // @Trace()
2859
3896
  triggerTabSynchronisation() {
2860
3897
  if (this.syncSelectedTabTimeout) {
2861
3898
  clearTimeout(this.syncSelectedTabTimeout);
@@ -2878,16 +3915,10 @@ __decorate([
2878
3915
  ViewChildren(ActivityOutletComponent),
2879
3916
  __metadata("design:type", QueryList)
2880
3917
  ], ActivityContainerComponent.prototype, "activityOutlets", void 0);
2881
- __decorate([
2882
- Trace(),
2883
- __metadata("design:type", Function),
2884
- __metadata("design:paramtypes", []),
2885
- __metadata("design:returntype", void 0)
2886
- ], ActivityContainerComponent.prototype, "dispose", null);
2887
3918
  ActivityContainerComponent = __decorate([
2888
3919
  Component({
2889
3920
  selector: 'aup-activity-container',
2890
- 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",
3921
+ template: "<mat-tab-group #tabs no-tab-header\n [dynamicHeight]=\"dynamicHeight\"\n [class.full-height-tabs]=\"!dynamicHeight\">\n <mat-tab *ngFor=\"let activityRef of activityRefs; let i = index; trackBy: activityIndex\">\n <!--\n We have issues where angular is triggering a leave animation when an\n new activity is started, but is not running the enter animation\n when it is scrolled back into view. So we track the tab changes and\n disable all animations inside the tab while we're animating.\n -->\n <div class=\"activity-outlet-wrapper\" [@.disabled]=\"!activityRef.focused\">\n <aup-activity-outlet [nestedInteractionContext]=\"this\" [activityRef]=\"activityRef\"></aup-activity-outlet>\n </div>\n </mat-tab>\n</mat-tab-group>\n",
2891
3922
  styles: [":host{display:flex;flex-direction:column}mat-tab-group{flex:1}"]
2892
3923
  }),
2893
3924
  __metadata("design:paramtypes", [])
@@ -3864,13 +4895,16 @@ let PlaceComponent = PlaceComponent_1 = class PlaceComponent extends DisposableC
3864
4895
  super();
3865
4896
  this.visitModel = new MutableValueModel();
3866
4897
  this._inVisitUpdate = new Guard();
4898
+ this._active = new MutableValueModel(false);
4899
+ const { chain, valueOf, before, when, after, observe, switchOn } = Dsl.disposeWith(this);
4900
+ when(this._active).becomesTruthy(() => this.onPlaceReady());
3867
4901
  }
3868
4902
  // @Trace()
3869
4903
  initialiseVisit(visit, notifyVisitChanged) {
3870
4904
  assert.isNil(this.visitModel.value);
3871
4905
  const { when } = Dsl.disposeWith(this);
3872
4906
  this.visitModel.value = visit;
3873
- DebugContext.get(this.visitModel).tag(`${this.placeDefinition.component.name}.visitModel`);
4907
+ DebugContext.getOrCreate(this.visitModel).tag(`${this.placeDefinition.component.name}.visitModel`);
3874
4908
  this.placeDefinition.getVisitParameterDefs().forEach(parameterDef => this.installBinding(parameterDef));
3875
4909
  when.valueOf(this.visitModel).changes((current, previous) => {
3876
4910
  notifyVisitChanged(current, previous);
@@ -3909,6 +4943,15 @@ let PlaceComponent = PlaceComponent_1 = class PlaceComponent extends DisposableC
3909
4943
  get childPlaces() {
3910
4944
  return this.placeDefinition.children.map(d => d.component);
3911
4945
  }
4946
+ get active() {
4947
+ return this._active.readonly;
4948
+ }
4949
+ /**
4950
+ * Called by the router when the place is ready to interact after any animations have run.
4951
+ */
4952
+ _notifyActive(active) {
4953
+ this._active.value = active;
4954
+ }
3912
4955
  onPlaceReady() {
3913
4956
  }
3914
4957
  };
@@ -4910,70 +5953,6 @@ UrlService = __decorate([
4910
5953
  __metadata("design:paramtypes", [Router, Location, UrlSerializer])
4911
5954
  ], UrlService);
4912
5955
 
4913
- class Visit {
4914
- constructor(placeDefinition, visitParameters = {}) {
4915
- this.placeDefinition = placeDefinition;
4916
- this.visitParameters = visitParameters;
4917
- }
4918
- // @Trace()
4919
- getRouteId() {
4920
- return this.placeDefinition.getRouteIdFrom(this);
4921
- }
4922
- // @Trace()
4923
- hasRouteId() {
4924
- return !isNil(this.getRouteId());
4925
- }
4926
- /**
4927
- * Returns the value of the place parameter with the specified name. The parameter
4928
- * name is taken from the `as` option, e.g. {as: 'aCustomName'} otherwise it is the
4929
- * same as the the ValueModel property name.
4930
- * @param parameterName the field name of the property model or the `as` option if specified.
4931
- */
4932
- getParameter(parameterName) {
4933
- return this.visitParameters[parameterName];
4934
- }
4935
- // @Trace()
4936
- hasParameter(parameterName) {
4937
- return Object.keys(this.visitParameters).includes(parameterName);
4938
- }
4939
- replace(parameter, value) {
4940
- return new Visit(this.placeDefinition, Object.assign(Object.assign({}, this.visitParameters), { [parameter.name]: value }));
4941
- }
4942
- mergeRouteParameters(routeParams) {
4943
- // todo: whitelist parameters.
4944
- const routeParameterKeys = Object.keys(routeParams);
4945
- const params = {};
4946
- this.placeDefinition.getVisitParameterDefs().forEach(def => {
4947
- if (def.isRouteId || def.isRouteParameter) {
4948
- if (routeParameterKeys.includes(def.name)) {
4949
- params[def.name] = routeParams[def.name];
4950
- }
4951
- }
4952
- else {
4953
- // copy non route params as is, but only if they already exist otherwise we'll inject nil values and break the
4954
- // defaults and remember sanitisation process.
4955
- const value = this.getParameter(def.name);
4956
- if (this.hasParameter(def.name)) {
4957
- params[def.name] = value;
4958
- }
4959
- }
4960
- });
4961
- return new Visit(this.placeDefinition, params);
4962
- }
4963
- hasRoutingChangedFrom(other) {
4964
- const samePlace = other.placeDefinition === this.placeDefinition;
4965
- const sameRouteParameters = isEqual(this.placeDefinition.getFormattedRouteParameters(this, true), this.placeDefinition.getFormattedRouteParameters(other, true));
4966
- return !samePlace || !sameRouteParameters;
4967
- }
4968
- hasChangedFrom(other) {
4969
- const sameNonRouteParameters = isEqual(this.placeDefinition.getNonRouteParameters(this), this.placeDefinition.getNonRouteParameters(other));
4970
- return !sameNonRouteParameters || this.hasRoutingChangedFrom(other);
4971
- }
4972
- toDebugString() {
4973
- return Object.keys(this.visitParameters).map(k => `${k}=${this.visitParameters[k]}`).join(",");
4974
- }
4975
- }
4976
-
4977
5956
  let PlaceRouter = class PlaceRouter extends GarbageCollector {
4978
5957
  constructor(angularRouter, angularLocation, interactionService, urlService, placeHistory) {
4979
5958
  super();
@@ -5135,6 +6114,7 @@ let PlaceRouter = class PlaceRouter extends GarbageCollector {
5135
6114
  get activeVisits() {
5136
6115
  return this._activeVisits.readonly;
5137
6116
  }
6117
+ // @Trace()
5138
6118
  pushVisitChangesToRoute(previous, next) {
5139
6119
  return __awaiter(this, void 0, void 0, function* () {
5140
6120
  this.placeHistory.updateVisit(next);
@@ -5231,12 +6211,6 @@ PlaceRouter.ctorParameters = () => [
5231
6211
  { type: PlaceHistory }
5232
6212
  ];
5233
6213
  PlaceRouter.ɵprov = ɵɵdefineInjectable({ factory: function PlaceRouter_Factory() { return new PlaceRouter(ɵɵinject(Router), ɵɵinject(Location), ɵɵinject(InteractionService), ɵɵinject(UrlService), ɵɵinject(PlaceHistory)); }, token: PlaceRouter, providedIn: "root" });
5234
- __decorate([
5235
- Trace(),
5236
- __metadata("design:type", Function),
5237
- __metadata("design:paramtypes", [Visit, Visit]),
5238
- __metadata("design:returntype", Promise)
5239
- ], PlaceRouter.prototype, "pushVisitChangesToRoute", null);
5240
6214
  PlaceRouter = __decorate([
5241
6215
  Injectable({
5242
6216
  providedIn: 'root'
@@ -5248,6 +6222,70 @@ PlaceRouter = __decorate([
5248
6222
  PlaceHistory])
5249
6223
  ], PlaceRouter);
5250
6224
 
6225
+ class Visit {
6226
+ constructor(placeDefinition, visitParameters = {}) {
6227
+ this.placeDefinition = placeDefinition;
6228
+ this.visitParameters = visitParameters;
6229
+ }
6230
+ // @Trace()
6231
+ getRouteId() {
6232
+ return this.placeDefinition.getRouteIdFrom(this);
6233
+ }
6234
+ // @Trace()
6235
+ hasRouteId() {
6236
+ return !isNil(this.getRouteId());
6237
+ }
6238
+ /**
6239
+ * Returns the value of the place parameter with the specified name. The parameter
6240
+ * name is taken from the `as` option, e.g. {as: 'aCustomName'} otherwise it is the
6241
+ * same as the the ValueModel property name.
6242
+ * @param parameterName the field name of the property model or the `as` option if specified.
6243
+ */
6244
+ getParameter(parameterName) {
6245
+ return this.visitParameters[parameterName];
6246
+ }
6247
+ // @Trace()
6248
+ hasParameter(parameterName) {
6249
+ return Object.keys(this.visitParameters).includes(parameterName);
6250
+ }
6251
+ replace(parameter, value) {
6252
+ return new Visit(this.placeDefinition, Object.assign(Object.assign({}, this.visitParameters), { [parameter.name]: value }));
6253
+ }
6254
+ mergeRouteParameters(routeParams) {
6255
+ // todo: whitelist parameters.
6256
+ const routeParameterKeys = Object.keys(routeParams);
6257
+ const params = {};
6258
+ this.placeDefinition.getVisitParameterDefs().forEach(def => {
6259
+ if (def.isRouteId || def.isRouteParameter) {
6260
+ if (routeParameterKeys.includes(def.name)) {
6261
+ params[def.name] = routeParams[def.name];
6262
+ }
6263
+ }
6264
+ else {
6265
+ // copy non route params as is, but only if they already exist otherwise we'll inject nil values and break the
6266
+ // defaults and remember sanitisation process.
6267
+ const value = this.getParameter(def.name);
6268
+ if (this.hasParameter(def.name)) {
6269
+ params[def.name] = value;
6270
+ }
6271
+ }
6272
+ });
6273
+ return new Visit(this.placeDefinition, params);
6274
+ }
6275
+ hasRoutingChangedFrom(other) {
6276
+ const samePlace = other.placeDefinition === this.placeDefinition;
6277
+ const sameRouteParameters = isEqual(this.placeDefinition.getFormattedRouteParameters(this, true), this.placeDefinition.getFormattedRouteParameters(other, true));
6278
+ return !samePlace || !sameRouteParameters;
6279
+ }
6280
+ hasChangedFrom(other) {
6281
+ const sameNonRouteParameters = isEqual(this.placeDefinition.getNonRouteParameters(this), this.placeDefinition.getNonRouteParameters(other));
6282
+ return !sameNonRouteParameters || this.hasRoutingChangedFrom(other);
6283
+ }
6284
+ toDebugString() {
6285
+ return Object.keys(this.visitParameters).map(k => `${k}=${this.visitParameters[k]}`).join(",");
6286
+ }
6287
+ }
6288
+
5251
6289
  const AUP_PLACE_CONFIG = new InjectionToken('AUP_PLACE_CONFIG');
5252
6290
 
5253
6291
  // Freezes the state of the components at the start of the animation.
@@ -5306,6 +6344,7 @@ let PlaceOutletComponent = class PlaceOutletComponent extends DisposableComponen
5306
6344
  this._activePlaceModel = new MutableValueModel();
5307
6345
  this.initialPlaceIndex = null;
5308
6346
  this._isPushingVisitToRoute = new MutableValueModel(false);
6347
+ this.isVeryFirstLoad = true;
5309
6348
  const { chain, valueOf, before, when, after, observe, switchOn } = Dsl.disposeWith(this);
5310
6349
  this.parentOutletModel = new MutableValueModel(parentOutlet);
5311
6350
  const defaultPlaceAnimationOrder = chain(this.parentOutletModel)
@@ -5314,8 +6353,9 @@ let PlaceOutletComponent = class PlaceOutletComponent extends DisposableComponen
5314
6353
  .pluckList('children')
5315
6354
  .pluck('component');
5316
6355
  const activatePlaceType = chain(this.activePlaceModel).map(p => p.constructor);
5317
- this.placeAnimationOrder = chain(this.customPlaceAnimationOrderModel)
5318
- .otherwise(defaultPlaceAnimationOrder)
6356
+ this.placesInAnimationOrder = chain(this.customPlaceAnimationOrderModel)
6357
+ .otherwise(defaultPlaceAnimationOrder);
6358
+ this.activePlaceAnimationPosition = this.placesInAnimationOrder
5319
6359
  .reduce((placesInOrder) => {
5320
6360
  let placeIndex = 0;
5321
6361
  if (activatePlaceType.value) {
@@ -5326,14 +6366,16 @@ let PlaceOutletComponent = class PlaceOutletComponent extends DisposableComponen
5326
6366
  }
5327
6367
  return isNil(this.initialPlaceIndex) ? 0 : placeIndex - this.initialPlaceIndex;
5328
6368
  }, { dependsOn: activatePlaceType });
6369
+ this.animationSupported = this.placesInAnimationOrder.count().isGreaterThan(0);
6370
+ this.animationEnabled = valueOf.all(this.animateModel, this.animationSupported).areTruthy();
5329
6371
  // Extract our visit model from the place router.
5330
6372
  this._activePlaceDefinition = chain(this._activePlaceModel).pluck('placeDefinition');
5331
6373
  this.routerVisitModel = this._activePlaceDefinition.findIn(chain(placeRouter.activeVisitsByPlaceDefinition));
5332
6374
  this.navigationInProgress = chain(this.placeRouter.navigationInProgress);
5333
- when.valueOf(this.navigationInProgress).becomesFalsey(() => {
6375
+ when(this.navigationInProgress).becomesFalsey(() => {
5334
6376
  this.checkStateAndInitialise();
5335
6377
  });
5336
- when.valueOf(this.outletActivated).becomesTruthy(() => {
6378
+ when(this.outletActivated).becomesTruthy(() => {
5337
6379
  this.checkStateAndInitialise();
5338
6380
  });
5339
6381
  chain(this._activePlaceModel)
@@ -5345,14 +6387,17 @@ let PlaceOutletComponent = class PlaceOutletComponent extends DisposableComponen
5345
6387
  }
5346
6388
  // @Trace()
5347
6389
  getAnimationOrder() {
5348
- return this.placeAnimationOrder.value;
6390
+ return this.activePlaceAnimationPosition.value;
5349
6391
  }
5350
6392
  get animationDuration() {
5351
6393
  return this.placeConfig && this.placeConfig.animationDuration ? this.placeConfig.animationDuration : '500ms';
5352
6394
  }
5353
6395
  // @Trace()
5354
6396
  navigate(visit) {
5355
- // console.log({ activatedRoute: this._activatedRouteModel.value });
6397
+ // const place = this.placesInAnimationOrder.query().findMatching(p => visit.placeDefinition.component === p);
6398
+ // if (!place) {
6399
+ // lang.illegalState()
6400
+ // }
5356
6401
  this.placeRouter.navigate(visit, {
5357
6402
  relativeTo: this.parentOutlet ? this.parentOutlet.activatedRouteModel.value : null
5358
6403
  });
@@ -5366,14 +6411,25 @@ let PlaceOutletComponent = class PlaceOutletComponent extends DisposableComponen
5366
6411
  get activatedRouteModel() {
5367
6412
  return this._activatedRouteModel.readonly;
5368
6413
  }
5369
- // @Trace()
5370
6414
  onOutletActivated(routerOutlet, place) {
5371
6415
  this._activatedRouteModel.value = routerOutlet.activatedRoute;
5372
6416
  this._activePlaceModel.value = place;
6417
+ this.validateAnimationState(place);
5373
6418
  this.outletActivated.value = true;
5374
6419
  this.checkStateAndInitialise();
5375
6420
  }
5376
- // @Trace()
6421
+ validateAnimationState(place) {
6422
+ if (this.animateModel.value) {
6423
+ if (this.placesInAnimationOrder.length < 1) {
6424
+ console.error('PlaceOutlet.animate === true but placeAnimationOrder has not been set. Animation is disabled.');
6425
+ }
6426
+ else {
6427
+ if (!this.placesInAnimationOrder.query().includes(place.placeDefinition.component)) {
6428
+ console.error(`PlaceOutlet.animate === true but placeAnimationOrder doesn't contain ${place.placeDefinition.component.name}.`);
6429
+ }
6430
+ }
6431
+ }
6432
+ }
5377
6433
  onOutletDeactivated() {
5378
6434
  this.outletActivated.value = false;
5379
6435
  this._activePlaceModel.value = null;
@@ -5390,16 +6446,24 @@ let PlaceOutletComponent = class PlaceOutletComponent extends DisposableComponen
5390
6446
  this.initialisePlace(routerVisit, activePlace);
5391
6447
  }
5392
6448
  }
5393
- // @Trace()
5394
6449
  initialisePlace(routerVisit, activePlace) {
5395
6450
  const visitModel = new MutableValueModel(routerVisit);
5396
6451
  DebugContext.tag(visitModel, `PlaceOutletComponent[${activePlace.constructor.name})].visitModel`);
5397
6452
  activePlace.initialiseVisit(routerVisit, (current, previous) => {
5398
6453
  this.pushVisitChangeToRoute(previous, current);
5399
6454
  });
5400
- if (!this.animateModel.value) {
5401
- // we're not animating so trigger any post animation callbacks now.
5402
- this.animationDone();
6455
+ const finishPlaceLoad = () => {
6456
+ this._activePlaceModel.value._notifyActive(true);
6457
+ };
6458
+ if (!this.animationEnabled.value || this.isVeryFirstLoad) {
6459
+ // if animation is disabled or this is the very first load then
6460
+ // we won't get our animation done callback so we finish the
6461
+ // process here and now.
6462
+ this.isVeryFirstLoad = false;
6463
+ finishPlaceLoad();
6464
+ }
6465
+ else {
6466
+ this.onAnimationFinishedJob = finishPlaceLoad;
5403
6467
  }
5404
6468
  const { when, chain, valueOf } = Dsl.disposeWith(activePlace);
5405
6469
  when.valueOf(this.routerVisitModel)
@@ -5421,8 +6485,9 @@ let PlaceOutletComponent = class PlaceOutletComponent extends DisposableComponen
5421
6485
  }
5422
6486
  // @Trace()
5423
6487
  animationDone() {
5424
- if (this._activePlaceModel.value) {
5425
- this._activePlaceModel.value.onPlaceReady();
6488
+ if (this.onAnimationFinishedJob) {
6489
+ this.onAnimationFinishedJob();
6490
+ this.onAnimationFinishedJob = undefined;
5426
6491
  }
5427
6492
  }
5428
6493
  };
@@ -5456,10 +6521,22 @@ __decorate([
5456
6521
  ViewChild('routeOutlet', { static: true }),
5457
6522
  __metadata("design:type", RouterOutlet)
5458
6523
  ], PlaceOutletComponent.prototype, "routerOut", void 0);
6524
+ __decorate([
6525
+ Trace(),
6526
+ __metadata("design:type", Function),
6527
+ __metadata("design:paramtypes", [RouterOutlet, PlaceComponent]),
6528
+ __metadata("design:returntype", void 0)
6529
+ ], PlaceOutletComponent.prototype, "onOutletActivated", null);
6530
+ __decorate([
6531
+ Trace(),
6532
+ __metadata("design:type", Function),
6533
+ __metadata("design:paramtypes", []),
6534
+ __metadata("design:returntype", void 0)
6535
+ ], PlaceOutletComponent.prototype, "onOutletDeactivated", null);
5459
6536
  PlaceOutletComponent = __decorate([
5460
6537
  Component({
5461
6538
  selector: 'aup-place-outlet',
5462
- template: "<ng-container *ngIf=\"animateModel.value\">\n <div class=\"router-outlet-container\" cdkScrollable\n [@routeAnimations]=\"{value: getAnimationOrder(), params:{duration: animationDuration}}\"\n (@routeAnimations.start)=\"animationStarted()\"\n (@routeAnimations.done)=\"animationDone()\"\n >\n <router-outlet #routerOutlet=\"outlet\"\n (activate)=\"onOutletActivated(routerOutlet, $event)\"\n (deactivate)=\"onOutletDeactivated()\">\n </router-outlet>\n </div>\n</ng-container>\n\n<ng-container *ngIf=\"!animateModel.value\">\n <div class=\"router-outlet-container\" cdkScrollable>\n <router-outlet #routerOutlet=\"outlet\"\n (activate)=\"onOutletActivated(routerOutlet, $event)\"\n (deactivate)=\"onOutletDeactivated()\">\n </router-outlet>\n </div>\n</ng-container>\n\n",
6539
+ template: "<ng-container *ngIf=\"animationEnabled.value\">\n <div class=\"router-outlet-container\" cdkScrollable\n [@routeAnimations]=\"{value: getAnimationOrder(), params:{duration: animationDuration}}\"\n (@routeAnimations.start)=\"animationStarted()\"\n (@routeAnimations.done)=\"animationDone()\"\n >\n <router-outlet #routerOutlet=\"outlet\"\n (activate)=\"onOutletActivated(routerOutlet, $event)\"\n (deactivate)=\"onOutletDeactivated()\">\n </router-outlet>\n </div>\n</ng-container>\n\n<ng-container *ngIf=\"!animationEnabled.value\">\n <div class=\"router-outlet-container\" cdkScrollable>\n <router-outlet #routerOutlet=\"outlet\"\n (activate)=\"onOutletActivated(routerOutlet, $event)\"\n (deactivate)=\"onOutletDeactivated()\">\n </router-outlet>\n </div>\n</ng-container>\n\n",
5463
6540
  animations: [LEFT_RIGHT_PLACE_ANIMATION],
5464
6541
  styles: [":host{display:flex;flex-direction:column;min-height:0}.router-outlet-container{flex:1;display:block;position:relative;min-height:0;overflow-x:hidden;overflow-y:scroll}router-outlet{display:none}"]
5465
6542
  }),
@@ -5486,10 +6563,10 @@ let AbstractPlaceNavigationComponent = class AbstractPlaceNavigationComponent ex
5486
6563
  });
5487
6564
  this.activePlaceDefinition = chain(this._activePlaceComponent).pluck('placeDefinition');
5488
6565
  }
5489
- getNav(placeDef) {
6566
+ getNavigationFace(placeDef) {
5490
6567
  const navItem = placeDef.getPlaceData('nav');
5491
6568
  return {
5492
- title: () => navItem ? navItem.title() : placeDef.searchPlaceData(['navTitle', 'title']),
6569
+ text: () => navItem ? navItem.title() : placeDef.searchPlaceData(['navTitle', 'title']),
5493
6570
  tooltip: () => navItem && navItem.tooltip ? navItem.tooltip() : placeDef.getPlaceData('navTooltip', null),
5494
6571
  icon: () => navItem && navItem.icon ? navItem.icon() : placeDef.getPlaceData('navIcon', null)
5495
6572
  };
@@ -5524,7 +6601,7 @@ __decorate([
5524
6601
  __metadata("design:type", Function),
5525
6602
  __metadata("design:paramtypes", [PlaceDefinition]),
5526
6603
  __metadata("design:returntype", Object)
5527
- ], AbstractPlaceNavigationComponent.prototype, "getNav", null);
6604
+ ], AbstractPlaceNavigationComponent.prototype, "getNavigationFace", null);
5528
6605
  AbstractPlaceNavigationComponent = __decorate([
5529
6606
  Component({
5530
6607
  template: ''
@@ -5585,29 +6662,12 @@ ListPlaceNavComponent.ctorParameters = () => [
5585
6662
  ListPlaceNavComponent = __decorate([
5586
6663
  Component({
5587
6664
  selector: 'aup-list-place-nav',
5588
- template: "<mat-nav-list fxFlex>\n <a mat-list-item *ngFor=\"let placeDefinition of placeDefinitions.value\"\n [pectinCommand]=\"commandFactory.create(placeDefinition)\"\n [class.active]=\"isActive(placeDefinition)\"\n [matTooltip]=\"getNav(placeDefinition).tooltip()\">\n <aup-icon *ngIf=\"getNav(placeDefinition).icon()\" [icon]=\"getNav(placeDefinition).icon()\"></aup-icon>\n <span>{{getNav(placeDefinition).title()}}</span>\n </a>\n</mat-nav-list>\n",
6665
+ template: "<mat-nav-list fxFlex>\n <a mat-list-item *ngFor=\"let placeDefinition of placeDefinitions.value\"\n [pectinCommand]=\"commandFactory.create(placeDefinition)\"\n [class.active]=\"isActive(placeDefinition)\"\n [matTooltip]=\"getNavigationFace(placeDefinition).tooltip()\">\n <aup-command-face [face]=\"getNavigationFace(placeDefinition)\"></aup-command-face>\n </a>\n</mat-nav-list>\n",
5589
6666
  styles: [":host{display:flex;flex-direction:column;--selected-border-color:#838383;--selected-color:inherit;--selected-background:#f1f1f1}mat-nav-list{padding-top:0}a.active{border-right:2px solid var(--selected-border-color);background:var(--selected-background);color:var(--selected-color)}"]
5590
6667
  }),
5591
6668
  __metadata("design:paramtypes", [PlaceRouter])
5592
6669
  ], ListPlaceNavComponent);
5593
6670
 
5594
- let TabbedPlaceNavigationComponent = class TabbedPlaceNavigationComponent extends AbstractPlaceNavigationComponent {
5595
- constructor(placeRouter) {
5596
- super(placeRouter);
5597
- }
5598
- };
5599
- TabbedPlaceNavigationComponent.ctorParameters = () => [
5600
- { type: PlaceRouter }
5601
- ];
5602
- TabbedPlaceNavigationComponent = __decorate([
5603
- Component({
5604
- selector: 'aup-tabbed-place-navigation',
5605
- template: "<nav mat-tab-nav-bar>\n <a mat-tab-link *ngFor=\"let placeDefinition of placeDefinitions.value\"\n [pectinCommand]=\"commandFactory.create(placeDefinition)\"\n [active]=\"isActive(placeDefinition)\"\n [matTooltip]=\"getNav(placeDefinition).tooltip()\">\n <aup-icon *ngIf=\"getNav(placeDefinition).icon()\" [icon]=\"getNav(placeDefinition).icon()\"></aup-icon>\n <span>{{getNav(placeDefinition).title()}}</span>\n </a>\n</nav>\n",
5606
- styles: [""]
5607
- }),
5608
- __metadata("design:paramtypes", [PlaceRouter])
5609
- ], TabbedPlaceNavigationComponent);
5610
-
5611
6671
  /**
5612
6672
  * @example
5613
6673
  * // Usage
@@ -5646,7 +6706,7 @@ TabbedPlaceNavigationComponent = __decorate([
5646
6706
  * (at)Place({
5647
6707
  * path: 'myPlace',
5648
6708
  * data: {
5649
- * nav: I18n.places.myPlace.nav()
6709
+ * nav: I18n.places.myPlace.nav
5650
6710
  * }
5651
6711
  * })
5652
6712
  */
@@ -5681,12 +6741,29 @@ __decorate([
5681
6741
  SidePlaceNavigationComponent = __decorate([
5682
6742
  Component({
5683
6743
  selector: 'aup-side-place-navigation',
5684
- template: "<mat-nav-list>\n <a mat-list-item (click)=\"toggleMenu()\" class=\"home\">\n <aup-icon class=\"collapsed-only\" icon=\"mat:menu\"></aup-icon>\n <aup-icon class=\"expanded-only\" icon=\"mat:arrow_back\"></aup-icon>\n <span class=\"expanded-only\">Menu</span>\n </a>\n <a mat-list-item *ngFor=\"let placeDefinition of placeDefinitions.value\"\n [pectinCommand]=\"commandFactory.create(placeDefinition)\"\n [class.active]=\"isActive(placeDefinition)\"\n [matTooltip]=\"getNav(placeDefinition).tooltip()\">\n <aup-icon *ngIf=\"getNav(placeDefinition).icon()\" [icon]=\"getNav(placeDefinition).icon()\"></aup-icon>\n <span\n class=\"expanded-only\">{{getNav(placeDefinition).title()}}</span>\n </a>\n <span [style.flex]=\"1\"></span>\n <ng-container *ngIf=\"navEndTemplate\" [ngTemplateOutlet]=\"navEndTemplate\"></ng-container>\n</mat-nav-list>\n",
6744
+ template: "<mat-nav-list>\n <a mat-list-item (click)=\"toggleMenu()\" class=\"home\">\n <aup-icon class=\"collapsed-only\" icon=\"mat:menu\"></aup-icon>\n <aup-icon class=\"expanded-only\" icon=\"mat:arrow_back\"></aup-icon>\n <span class=\"expanded-only\">Menu</span>\n </a>\n <a mat-list-item *ngFor=\"let placeDefinition of placeDefinitions.value\"\n [pectinCommand]=\"commandFactory.create(placeDefinition)\"\n [class.active]=\"isActive(placeDefinition)\"\n [matTooltip]=\"getNavigationFace(placeDefinition).tooltip()\">\n <aup-icon *ngIf=\"getNavigationFace(placeDefinition).icon()\" [icon]=\"getNavigationFace(placeDefinition).icon()\"></aup-icon>\n <span class=\"expanded-only\">{{getNavigationFace(placeDefinition).text()}}</span>\n </a>\n <span [style.flex]=\"1\"></span>\n <ng-container *ngIf=\"navEndTemplate\" [ngTemplateOutlet]=\"navEndTemplate\"></ng-container>\n</mat-nav-list>\n",
5685
6745
  styles: [":host{display:flex;flex-direction:column;--resolved-nav-item-width:var(--nav-width, 56px);--resolved-nav-item-height:var(--nav-item-height, var(--resolved-nav-item-width));--resolved-expanded-width:var(--nav-expanded-width, 235px);--resolved-color:var(--nav-color, rgba(255, 255, 255, 0.9));--resolved-background-color:var(--nav-background-color, #555);width:var(--resolved-nav-item-width);transition:width 125ms linear;background-color:var(--resolved-background-color);color:var(--resolved-color)}:host.expanded{width:var(--resolved-expanded-width);max-width:var(--resolved-expanded-width)}:host-context(.expanded) .expanded-only{max-width:100%}:host-context(.expanded) .collapsed-only{max-width:0}:host-context(.expanded) .mat-list-item aup-icon:not(.collapsed-only){margin-right:12px}:host-context(.expanded) .mat-list-item span{text-wrap:none;white-space:nowrap}.expanded-only{max-width:0;overflow:hidden}.collapsed-only{max-width:100%;overflow:hidden}mat-nav-list{flex:1;display:flex;flex-direction:column}.mat-list-item{width:var(--resolved-nav-item-width);height:var(--resolved-nav-item-height);color:inherit}.mat-list-item.active{background-color:#444}.mat-list-item.home{text-align:left}mat-icon{color:inherit}mat-icon.flip-horizontal{transform:scaleX(-1)}"]
5686
6746
  }),
5687
6747
  __metadata("design:paramtypes", [Router, PlaceRouter])
5688
6748
  ], SidePlaceNavigationComponent);
5689
6749
 
6750
+ let TabbedPlaceNavigationComponent = class TabbedPlaceNavigationComponent extends AbstractPlaceNavigationComponent {
6751
+ constructor(placeRouter) {
6752
+ super(placeRouter);
6753
+ }
6754
+ };
6755
+ TabbedPlaceNavigationComponent.ctorParameters = () => [
6756
+ { type: PlaceRouter }
6757
+ ];
6758
+ TabbedPlaceNavigationComponent = __decorate([
6759
+ Component({
6760
+ selector: 'aup-tabbed-place-navigation',
6761
+ template: "<nav mat-tab-nav-bar>\n <a mat-tab-link *ngFor=\"let placeDefinition of placeDefinitions.value\"\n [pectinCommand]=\"commandFactory.create(placeDefinition)\"\n [active]=\"isActive(placeDefinition)\"\n [matTooltip]=\"getNavigationFace(placeDefinition).tooltip()\">\n <aup-command-face [face]=\"getNavigationFace(placeDefinition)\"></aup-command-face>\n </a>\n</nav>\n",
6762
+ styles: [""]
6763
+ }),
6764
+ __metadata("design:paramtypes", [PlaceRouter])
6765
+ ], TabbedPlaceNavigationComponent);
6766
+
5690
6767
  let PlaceModule = class PlaceModule {
5691
6768
  };
5692
6769
  PlaceModule = __decorate([
@@ -6133,8 +7210,7 @@ function installMechanics(prototype, propertyKey, backingModel, tagPrefix, isEmp
6133
7210
  binding: null
6134
7211
  };
6135
7212
  const tag = `${tagPrefix}(${prototype.constructor.name}.${propertyKey.toString()})`;
6136
- DebugContext.get(mechanics.backingModel).tag(tag);
6137
- Logger.get(mechanics.backingModel).tag(tag);
7213
+ DebugContext.getOrCreate(mechanics.backingModel).tag(tag);
6138
7214
  Object.defineProperty(prototype, propertyKey, {
6139
7215
  get: function () {
6140
7216
  return mechanics.backingModel;
@@ -6196,5 +7272,5 @@ function VisitParameterList(options) {
6196
7272
  * Generated bundle index. Do not edit.
6197
7273
  */
6198
7274
 
6199
- export { ACTIVITY_DATA, AUP_PLACE_CONFIG, AbstractInputActivity, AbstractInputComponent, AbstractInteractionContext, AbstractListInputComponent, AbstractPlaceNavigationComponent, AbstractPopStateNavigation, AbstractValueInputComponent, Activity, ActivityActionsComponent, ActivityContainerComponent, ActivityOutletComponent, ActivityRef, AddItemInteractionContextComponent, AlertDialogComponent, AngularUiPowerupsModule, AutocompleteInputComponent, Bounds, BusyOverlayComponent, CELL_EDITOR_PORTAL, CELL_RENDERER_PORTAL, CardContainerComponent, CellEditorPortalRef, CellHeaderPortalRef, CellPortalRef, CellRendererPortalRef, CheckboxInputComponent, ColumnModel, ColumnTemplateDirective, CommandDirective, ComponentCellRendererPortalRef, ComponentsModule, ConfirmThenDialogComponent, ConfirmationDialogComponent, ConsolidatedParameterMap, CustomTemplateColumnModel, CustomValueColumnModel, DEFINITION_META_DATA_KEY, DIALOG_INTERACTION_SERVICE_DEFAULTS, DefaultCellRendererComponent, DefaultHeaderCellRendererComponent, DialogInteractionContext, DialogInteractionContextFactory, Dimension, DirectivesModule, DisposableComponent, EditRowControls, EditSession, EditorControlColumnModel, EmptyStateComponent, EventCleanUpSession, FocusBinding, FocusBindingDirective, FocusBindingFactory, FocusContainerComponent, FocusableComponent, Formatter, HEADER_CELL_RENDERER_PORTAL, IconComponent, InPlaceInteractionContextComponent, InteractionContextTriggerFor, InteractionModule, InteractionService, InteractionServiceRoutingAdapter, LEFT_RIGHT_PLACE_ANIMATION, ListPlaceNavComponent, ListPropertyColumnModel, ModalInteractionContextFactory, MultipleSelectInputComponent, Navigating, NavigatingDuringInteraction, NavigationContext, NavigationSession, NoopAuthGuard, NoopComponent, NumberInputComponent, PORTAL_EDITOR_COMPONENT, PORTAL_RENDERER_COMPONENT, ParameterDefinition, PasswordInputComponent, Place, PlaceComponent, PlaceComponentDeactivationHandler, PlaceDefinition, PlaceGuard, PlaceHistory, PlaceModule, PlaceOutletComponent, PlaceRouter, Point, PopStateDuringInteractionNavigation, PopStateNavigation, PopupInteractionContextComponent, PropertyColumnModel, ROUTE_PARAMETER_LIST_KEY, RemoveLastInteractionFromUrlNavigationSession, ResizeAwareComponent, RouteId, ScrollContainerComponent, SectionHeaderComponent, SelectCellRendererComponent, SelectHeaderCellRendererComponent, SelectInputActivity, SelectInputComponent, SelectionColumnModel, SidePlaceNavigationComponent, StringInputActivity, StringInputComponent, SwitchCaseComponent, SwitchCaseDefaultDirective, SwitchCaseOption, SwitchCaseWhenDirective, SynchroniseInteractionContextIdsWithRoute, TabbedPlaceNavigationComponent, TableCellRendererComponent, TableComponent, TableHeaderCellRendererComponent, TableModel, TemplateCellRendererPortalRef, TextInputComponent, UrlService, UrlSnapshot, VerticalFocusContainerComponent, Visit, VisitParameter, VisitParameterList, VisitSanitiser, WaitUntilLeavingInteractionTransitionCancelled, WaitUntilLinkTriggeredNavigationInteractionCancellationEventsFinish, WaitUntilPopStateDuringCanDeactivateInteractionFinishes, leftRightPlaceAnimation, slideDownOnEnterAnimation, slideRightOnEnterAnimation, ɵ0, DirectivesModule as ɵa, CommandDirective as ɵb, CardContainerComponent as ɵba, TableComponent as ɵbb, EditRowControls as ɵbc, ColumnTemplateDirective as ɵbd, DefaultCellRendererComponent as ɵbe, TableCellRendererComponent as ɵbf, SelectCellRendererComponent as ɵbg, SelectHeaderCellRendererComponent as ɵbh, DefaultHeaderCellRendererComponent as ɵbi, TableHeaderCellRendererComponent as ɵbj, IconComponent as ɵbk, SectionHeaderComponent as ɵbl, PlaceModule as ɵbm, ComponentsModule as ɵbn, EmptyStateComponent as ɵbo, BusyOverlayComponent as ɵbp, PlaceOutletComponent as ɵbq, leftRightPlaceAnimation as ɵbr, LEFT_RIGHT_PLACE_ANIMATION as ɵbs, AUP_PLACE_CONFIG as ɵbt, PlaceRouter as ɵbv, InteractionService as ɵbw, ModalInteractionContextFactory as ɵbx, UrlService as ɵby, PlaceHistory as ɵbz, FocusBindingDirective as ɵc, TabbedPlaceNavigationComponent as ɵca, AbstractPlaceNavigationComponent as ɵcb, ListPlaceNavComponent as ɵcc, SidePlaceNavigationComponent as ɵcd, InteractionModule as ɵce, ActivityContainerComponent as ɵcf, AbstractInteractionContext as ɵcg, ActivityOutletComponent as ɵch, ConfirmationDialogComponent as ɵci, ACTIVITY_DATA as ɵcj, Activity as ɵck, ConfirmThenDialogComponent as ɵcm, AlertDialogComponent as ɵcn, InPlaceInteractionContextComponent as ɵcp, AddItemInteractionContextComponent as ɵcq, ActivityActionsComponent as ɵcr, PopupInteractionContextComponent as ɵcs, StringInputActivity as ɵct, AbstractInputActivity as ɵcu, SelectInputActivity as ɵcv, InteractionContextTriggerFor as ɵcw, DisposableComponent as ɵd, FocusBindingFactory as ɵe, ComponentsModule as ɵf, AbstractInputComponent as ɵg, AbstractValueInputComponent as ɵh, AbstractListInputComponent as ɵi, NumberInputComponent as ɵj, StringInputComponent as ɵk, TextInputComponent as ɵl, PasswordInputComponent as ɵm, SelectInputComponent as ɵn, MultipleSelectInputComponent as ɵo, AutocompleteInputComponent as ɵp, CheckboxInputComponent as ɵq, ScrollContainerComponent as ɵr, NoopComponent as ɵs, SwitchCaseOption as ɵt, SwitchCaseWhenDirective as ɵu, SwitchCaseDefaultDirective as ɵv, SwitchCaseComponent as ɵw, FocusContainerComponent as ɵx, VerticalFocusContainerComponent as ɵy, FocusableComponent as ɵz };
7275
+ export { ACTIVITY_DATA, AUP_PLACE_CONFIG, AbstractInputActivity, AbstractInputComponent, AbstractInteractionContext, AbstractListInputComponent, AbstractPlaceNavigationComponent, AbstractPopStateNavigation, AbstractValueInputComponent, Activity, ActivityActionsComponent, ActivityContainerComponent, ActivityOutletComponent, ActivityRef, AddItemInteractionContextComponent, AlertDialogComponent, AngularUiPowerupsModule, AutocompleteInputComponent, Bounds, BusyOverlayComponent, CELL_EDITOR_PORTAL, CELL_RENDERER_PORTAL, CardContainerComponent, CellEditorPortalRef, CellHeaderPortalRef, CellPortalRef, CellRendererPortalRef, CheckboxInputComponent, ColumnModel, ColumnTemplateDirective, CommandComponent, CommandDirective, CommandFace, CommandFaceComponent, CommandGroup, CommandGroupComponent, CommandGroupMenuRendererComponent, CommandGroupRendererComponent, 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, FlexComponent, 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, PropertyColumnModel, ROUTE_PARAMETER_LIST_KEY, Registration, RemoveLastInteractionFromUrlNavigationSession, ResizeAwareComponent, RouteId, ScrollContainerComponent, SectionHeaderComponent, SelectCellRendererComponent, SelectHeaderCellRendererComponent, SelectInputActivity, SelectInputComponent, SelectionColumnModel, SeparatorComponent, SidePlaceNavigationComponent, StringInputActivity, StringInputComponent, SwitchCaseComponent, SwitchCaseDefaultDirective, SwitchCaseOption, SwitchCaseWhenDirective, SynchroniseInteractionContextIdsWithRoute, TabbedPlaceNavigationComponent, TableCellRendererComponent, TableComponent, TableHeaderCellRendererComponent, TableModel, TableRowMenuComponent, TemplateCellRendererPortalRef, TextInputComponent, ToolBarComponent, TrackBy, UrlService, UrlSnapshot, VerticalFocusContainerComponent, ViewData, 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, ToolBarComponent as ɵbn, CommandGroup as ɵbo, CommandComponent as ɵbp, PopupMenuComponent as ɵbq, CommandGroupComponent as ɵbr, CommandFaceComponent as ɵbs, MoreMenuComponent as ɵbt, SeparatorComponent as ɵbu, FlexComponent as ɵbv, CommandGroupMenuRendererComponent as ɵbw, CommandGroupRendererComponent as ɵbx, PlaceModule as ɵby, ComponentsModule as ɵbz, FocusBindingDirective as ɵc, EmptyStateComponent as ɵca, BusyOverlayComponent as ɵcb, PlaceOutletComponent as ɵcc, leftRightPlaceAnimation as ɵcd, LEFT_RIGHT_PLACE_ANIMATION as ɵce, AUP_PLACE_CONFIG as ɵcf, PlaceRouter as ɵch, InteractionService as ɵci, ModalInteractionContextFactory as ɵcj, UrlService as ɵck, PlaceHistory as ɵcl, TabbedPlaceNavigationComponent as ɵcm, AbstractPlaceNavigationComponent as ɵcn, ListPlaceNavComponent as ɵco, SidePlaceNavigationComponent as ɵcp, InteractionModule as ɵcq, ActivityContainerComponent as ɵcr, AbstractInteractionContext as ɵcs, ActivityOutletComponent as ɵct, ConfirmationDialogComponent as ɵcu, ACTIVITY_DATA as ɵcv, Activity as ɵcw, ConfirmThenDialogComponent as ɵcy, AlertDialogComponent as ɵcz, DisposableComponent as ɵd, InPlaceInteractionContextComponent as ɵdb, AddItemInteractionContextComponent as ɵdc, ActivityActionsComponent as ɵdd, PopupInteractionContextComponent as ɵde, StringInputActivity as ɵdf, AbstractInputActivity as ɵdg, SelectInputActivity as ɵdh, InteractionContextTriggerFor as ɵdi, 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 };
6200
7276
  //# sourceMappingURL=coolon-angular-ui-powerups.js.map