@coolon/angular-ui-powerups 2.0.0-alpha.8 → 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 (372) hide show
  1. package/CHANGELOG.md +212 -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 +1729 -377
  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 +67 -54
  12. package/coolon-angular-ui-powerups.metadata.json +1 -1
  13. package/esm2015/coolon-angular-ui-powerups.js +65 -52
  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 +54 -14
  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 +31 -15
  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 +70 -0
  88. package/esm2015/lib/components/forms/autocomplete-input/autocomplete-input.component.js.map +1 -0
  89. package/esm2015/lib/components/forms/autocomplete-input/autocomplete-input.component.metadata.json +1 -0
  90. package/esm2015/lib/components/forms/autocomplete-input/autocomplete-input.component.ngfactory.js.map +1 -0
  91. package/esm2015/lib/components/forms/autocomplete-input/autocomplete-input.component.scss.shim.ngstyle.js.map +1 -0
  92. package/esm2015/lib/components/forms/checkbox-input/checkbox-input.component.js +1 -1
  93. package/esm2015/lib/components/forms/checkbox-input/checkbox-input.component.js.map +1 -1
  94. package/esm2015/lib/components/forms/checkbox-input/checkbox-input.component.metadata.json +1 -1
  95. package/esm2015/lib/components/forms/multiple-select-input/multiple-select-input.component.js +8 -9
  96. package/esm2015/lib/components/forms/multiple-select-input/multiple-select-input.component.js.map +1 -1
  97. package/esm2015/lib/components/forms/multiple-select-input/multiple-select-input.component.metadata.json +1 -1
  98. package/esm2015/lib/components/forms/number-input/number-input.component.js +1 -1
  99. package/esm2015/lib/components/forms/number-input/number-input.component.js.map +1 -1
  100. package/esm2015/lib/components/forms/number-input/number-input.component.metadata.json +1 -1
  101. package/esm2015/lib/components/forms/password-input/password-input.component.js +1 -1
  102. package/esm2015/lib/components/forms/password-input/password-input.component.js.map +1 -1
  103. package/esm2015/lib/components/forms/password-input/password-input.component.metadata.json +1 -1
  104. package/esm2015/lib/components/forms/select-input/select-input.component.js +2 -1
  105. package/esm2015/lib/components/forms/select-input/select-input.component.js.map +1 -1
  106. package/esm2015/lib/components/forms/select-input/select-input.component.metadata.json +1 -1
  107. package/esm2015/lib/components/forms/string-input/string-input.component.js +3 -3
  108. package/esm2015/lib/components/forms/string-input/string-input.component.js.map +1 -1
  109. package/esm2015/lib/components/forms/string-input/string-input.component.metadata.json +1 -1
  110. package/esm2015/lib/components/forms/text-input/text-input.component.js +1 -1
  111. package/esm2015/lib/components/forms/text-input/text-input.component.js.map +1 -1
  112. package/esm2015/lib/components/forms/text-input/text-input.component.metadata.json +1 -1
  113. package/esm2015/lib/components/icon/icon.component.js +17 -4
  114. package/esm2015/lib/components/icon/icon.component.js.map +1 -1
  115. package/esm2015/lib/components/icon/icon.component.metadata.json +1 -1
  116. package/esm2015/lib/components/index.js +17 -0
  117. package/esm2015/lib/components/index.js.map +1 -1
  118. package/esm2015/lib/components/index.metadata.json +1 -1
  119. package/esm2015/lib/components/table/column-model.js +44 -2
  120. package/esm2015/lib/components/table/column-model.js.map +1 -1
  121. package/esm2015/lib/components/table/column-model.metadata.json +1 -1
  122. package/esm2015/lib/components/table/mutable-cell-renderer.js +1 -0
  123. package/esm2015/lib/components/table/mutable-cell-renderer.js.map +1 -0
  124. package/esm2015/lib/components/table/mutable-cell-renderer.metadata.json +1 -0
  125. package/esm2015/lib/components/table/table-model.js +10 -7
  126. package/esm2015/lib/components/table/table-model.js.map +1 -1
  127. package/esm2015/lib/components/table/table-model.metadata.json +1 -1
  128. package/esm2015/lib/components/table/table-row-menu/table-row-menu.component.js +73 -0
  129. package/esm2015/lib/components/table/table-row-menu/table-row-menu.component.js.map +1 -0
  130. package/esm2015/lib/components/table/table-row-menu/table-row-menu.component.metadata.json +1 -0
  131. package/esm2015/lib/components/table/table-row-menu/table-row-menu.component.ngfactory.js.map +1 -0
  132. package/esm2015/lib/components/table/table.component.js +1 -1
  133. package/esm2015/lib/components/table/table.component.js.map +1 -1
  134. package/esm2015/lib/components/table/table.component.metadata.json +1 -1
  135. package/esm2015/lib/components/track-by.js +5 -0
  136. package/esm2015/lib/components/track-by.js.map +1 -0
  137. package/esm2015/lib/interaction/activity-ref.js +10 -2
  138. package/esm2015/lib/interaction/activity-ref.js.map +1 -1
  139. package/esm2015/lib/interaction/activity-ref.metadata.json +1 -1
  140. package/esm2015/lib/interaction/activity.js +18 -1
  141. package/esm2015/lib/interaction/activity.js.map +1 -1
  142. package/esm2015/lib/interaction/activity.metadata.json +1 -1
  143. package/esm2015/lib/interaction/components/activity-actions/activity-actions.component.js +1 -1
  144. package/esm2015/lib/interaction/components/activity-actions/activity-actions.component.metadata.json +1 -1
  145. package/esm2015/lib/interaction/components/activity-container/activity-container.component.js +24 -17
  146. package/esm2015/lib/interaction/components/activity-container/activity-container.component.js.map +1 -1
  147. package/esm2015/lib/interaction/components/activity-container/activity-container.component.metadata.json +1 -1
  148. package/esm2015/lib/interaction/components/activity-container/activity-outlet/activity-outlet.component.js +1 -1
  149. package/esm2015/lib/interaction/components/activity-container/activity-outlet/activity-outlet.component.js.map +1 -1
  150. package/esm2015/lib/interaction/components/activity-container/activity-outlet/activity-outlet.component.metadata.json +1 -1
  151. package/esm2015/lib/interaction/interaction.module.ngfactory.js.map +1 -1
  152. package/esm2015/lib/place/components/abstract-place-navigation.component.js +4 -3
  153. package/esm2015/lib/place/components/abstract-place-navigation.component.js.map +1 -1
  154. package/esm2015/lib/place/components/abstract-place-navigation.component.metadata.json +1 -1
  155. package/esm2015/lib/place/components/list-place-nav/list-place-nav.component.js +1 -1
  156. package/esm2015/lib/place/components/list-place-nav/list-place-nav.component.js.map +1 -1
  157. package/esm2015/lib/place/components/list-place-nav/list-place-nav.component.metadata.json +1 -1
  158. package/esm2015/lib/place/components/place-outlet/place-outlet.component.js +56 -16
  159. package/esm2015/lib/place/components/place-outlet/place-outlet.component.js.map +1 -1
  160. package/esm2015/lib/place/components/place-outlet/place-outlet.component.metadata.json +1 -1
  161. package/esm2015/lib/place/components/side-place-navigation/side-place-navigation.component.js +2 -2
  162. package/esm2015/lib/place/components/side-place-navigation/side-place-navigation.component.js.map +1 -1
  163. package/esm2015/lib/place/components/side-place-navigation/side-place-navigation.component.metadata.json +1 -1
  164. package/esm2015/lib/place/components/tabbed-place-navigation/tabbed-place-navigation.component.js +1 -1
  165. package/esm2015/lib/place/components/tabbed-place-navigation/tabbed-place-navigation.component.js.map +1 -1
  166. package/esm2015/lib/place/components/tabbed-place-navigation/tabbed-place-navigation.component.metadata.json +1 -1
  167. package/esm2015/lib/place/place-component.js +13 -1
  168. package/esm2015/lib/place/place-component.js.map +1 -1
  169. package/esm2015/lib/place/place-component.metadata.json +1 -1
  170. package/esm2015/lib/place/place-router.js +2 -8
  171. package/esm2015/lib/place/place-router.js.map +1 -1
  172. package/esm2015/lib/place/place-router.metadata.json +1 -1
  173. package/esm2015/lib/place/place.module.js +3 -3
  174. package/esm2015/lib/place/place.module.js.map +1 -1
  175. package/esm2015/lib/place/place.module.metadata.json +1 -1
  176. package/esm2015/lib/place/place.module.ngfactory.js.map +1 -1
  177. package/esm2015/lib/place/route/parameter-decorators.js +2 -3
  178. package/esm2015/lib/place/route/parameter-decorators.js.map +1 -1
  179. package/esm2015/lib/place/route/parameter-decorators.metadata.json +1 -1
  180. package/esm5/coolon-angular-ui-powerups.js +65 -52
  181. package/esm5/coolon-angular-ui-powerups.js.map +1 -1
  182. package/esm5/lib/angular-ui-powerups.module.ngfactory.js.map +1 -1
  183. package/esm5/lib/components/card-container/card-container.component.js +1 -1
  184. package/esm5/lib/components/commands/command/command.component.js +64 -0
  185. package/esm5/lib/components/commands/command/command.component.js.map +1 -0
  186. package/esm5/lib/components/commands/command/command.component.ngfactory.js.map +1 -0
  187. package/esm5/lib/components/commands/command-face/command-face.component.js +123 -0
  188. package/esm5/lib/components/commands/command-face/command-face.component.js.map +1 -0
  189. package/esm5/lib/components/commands/command-face/command-face.component.ngfactory.js.map +1 -0
  190. package/esm5/lib/components/commands/command-face/command-face.component.scss.ngstyle.js.map +1 -0
  191. package/esm5/lib/components/commands/command-face.js +145 -0
  192. package/esm5/lib/components/commands/command-face.js.map +1 -0
  193. package/esm5/lib/components/commands/flex.component.js +33 -0
  194. package/esm5/lib/components/commands/flex.component.js.map +1 -0
  195. package/esm5/lib/components/commands/flex.component.ngfactory.js.map +1 -0
  196. package/esm5/lib/components/commands/group/command-group/command-group.component.js +51 -0
  197. package/esm5/lib/components/commands/group/command-group/command-group.component.js.map +1 -0
  198. package/esm5/lib/components/commands/group/command-group/command-group.component.ngfactory.js.map +1 -0
  199. package/esm5/lib/components/commands/group/command-group-menu-renderer/command-group-menu-renderer.component.js +59 -0
  200. package/esm5/lib/components/commands/group/command-group-menu-renderer/command-group-menu-renderer.component.js.map +1 -0
  201. package/esm5/lib/components/commands/group/command-group-menu-renderer/command-group-menu-renderer.component.ngfactory.js.map +1 -0
  202. package/esm5/lib/components/commands/group/command-group-renderer/command-group-renderer.component.js +42 -0
  203. package/esm5/lib/components/commands/group/command-group-renderer/command-group-renderer.component.js.map +1 -0
  204. package/esm5/lib/components/commands/group/command-group-renderer/command-group-renderer.component.ngfactory.js.map +1 -0
  205. package/esm5/lib/components/commands/group/command-group-renderer/command-group-renderer.component.scss.shim.ngstyle.js.map +1 -0
  206. package/esm5/lib/components/commands/group/command-group.js +122 -0
  207. package/esm5/lib/components/commands/group/command-group.js.map +1 -0
  208. package/esm5/lib/components/commands/group/more-menu.component.js +58 -0
  209. package/esm5/lib/components/commands/group/more-menu.component.js.map +1 -0
  210. package/esm5/lib/components/commands/group/more-menu.component.ngfactory.js.map +1 -0
  211. package/esm5/lib/components/commands/group/popup-menu.component.js +68 -0
  212. package/esm5/lib/components/commands/group/popup-menu.component.js.map +1 -0
  213. package/esm5/lib/components/commands/group/popup-menu.component.ngfactory.js.map +1 -0
  214. package/esm5/lib/components/commands/group/registration.js +80 -0
  215. package/esm5/lib/components/commands/group/registration.js.map +1 -0
  216. package/esm5/lib/components/commands/group/tool-bar/tool-bar.component.js +58 -0
  217. package/esm5/lib/components/commands/group/tool-bar/tool-bar.component.js.map +1 -0
  218. package/esm5/lib/components/commands/group/tool-bar/tool-bar.component.ngfactory.js.map +1 -0
  219. package/esm5/lib/components/commands/group/tool-bar/tool-bar.component.scss.shim.ngstyle.js.map +1 -0
  220. package/esm5/lib/components/commands/group/view-data.js +131 -0
  221. package/esm5/lib/components/commands/group/view-data.js.map +1 -0
  222. package/esm5/lib/components/commands/separator.component.js +37 -0
  223. package/esm5/lib/components/commands/separator.component.js.map +1 -0
  224. package/esm5/lib/components/commands/separator.component.ngfactory.js.map +1 -0
  225. package/esm5/lib/components/components.module.js +54 -14
  226. package/esm5/lib/components/components.module.js.map +1 -1
  227. package/esm5/lib/components/components.module.ngfactory.js.map +1 -1
  228. package/esm5/lib/components/forms/abstract-input.component.js +12 -4
  229. package/esm5/lib/components/forms/abstract-input.component.js.map +1 -1
  230. package/esm5/lib/components/forms/abstract-list-input.component.js +27 -14
  231. package/esm5/lib/components/forms/abstract-list-input.component.js.map +1 -1
  232. package/esm5/lib/components/forms/abstract-value-input.component.js +31 -15
  233. package/esm5/lib/components/forms/abstract-value-input.component.js.map +1 -1
  234. package/esm5/lib/components/forms/autocomplete-input/autocomplete-input.component.js +73 -0
  235. package/esm5/lib/components/forms/autocomplete-input/autocomplete-input.component.js.map +1 -0
  236. package/esm5/lib/components/forms/autocomplete-input/autocomplete-input.component.ngfactory.js.map +1 -0
  237. package/esm5/lib/components/forms/autocomplete-input/autocomplete-input.component.scss.shim.ngstyle.js.map +1 -0
  238. package/esm5/lib/components/forms/checkbox-input/checkbox-input.component.js +1 -1
  239. package/esm5/lib/components/forms/checkbox-input/checkbox-input.component.js.map +1 -1
  240. package/esm5/lib/components/forms/multiple-select-input/multiple-select-input.component.js +8 -9
  241. package/esm5/lib/components/forms/multiple-select-input/multiple-select-input.component.js.map +1 -1
  242. package/esm5/lib/components/forms/number-input/number-input.component.js +1 -1
  243. package/esm5/lib/components/forms/number-input/number-input.component.js.map +1 -1
  244. package/esm5/lib/components/forms/password-input/password-input.component.js +1 -1
  245. package/esm5/lib/components/forms/password-input/password-input.component.js.map +1 -1
  246. package/esm5/lib/components/forms/select-input/select-input.component.js +2 -1
  247. package/esm5/lib/components/forms/select-input/select-input.component.js.map +1 -1
  248. package/esm5/lib/components/forms/string-input/string-input.component.js +3 -3
  249. package/esm5/lib/components/forms/string-input/string-input.component.js.map +1 -1
  250. package/esm5/lib/components/forms/text-input/text-input.component.js +1 -1
  251. package/esm5/lib/components/forms/text-input/text-input.component.js.map +1 -1
  252. package/esm5/lib/components/icon/icon.component.js +15 -3
  253. package/esm5/lib/components/icon/icon.component.js.map +1 -1
  254. package/esm5/lib/components/index.js +17 -0
  255. package/esm5/lib/components/index.js.map +1 -1
  256. package/esm5/lib/components/table/column-model.js +45 -2
  257. package/esm5/lib/components/table/column-model.js.map +1 -1
  258. package/esm5/lib/components/table/mutable-cell-renderer.js +1 -0
  259. package/esm5/lib/components/table/mutable-cell-renderer.js.map +1 -0
  260. package/esm5/lib/components/table/table-model.js +10 -8
  261. package/esm5/lib/components/table/table-model.js.map +1 -1
  262. package/esm5/lib/components/table/table-row-menu/table-row-menu.component.js +63 -0
  263. package/esm5/lib/components/table/table-row-menu/table-row-menu.component.js.map +1 -0
  264. package/esm5/lib/components/table/table-row-menu/table-row-menu.component.ngfactory.js.map +1 -0
  265. package/esm5/lib/components/table/table.component.js +1 -1
  266. package/esm5/lib/components/table/table.component.js.map +1 -1
  267. package/esm5/lib/components/track-by.js +5 -0
  268. package/esm5/lib/components/track-by.js.map +1 -0
  269. package/esm5/lib/interaction/activity-ref.js +14 -2
  270. package/esm5/lib/interaction/activity-ref.js.map +1 -1
  271. package/esm5/lib/interaction/activity.js +27 -1
  272. package/esm5/lib/interaction/activity.js.map +1 -1
  273. package/esm5/lib/interaction/components/activity-actions/activity-actions.component.js +1 -1
  274. package/esm5/lib/interaction/components/activity-container/activity-container.component.js +24 -17
  275. package/esm5/lib/interaction/components/activity-container/activity-container.component.js.map +1 -1
  276. package/esm5/lib/interaction/components/activity-container/activity-outlet/activity-outlet.component.js +1 -1
  277. package/esm5/lib/interaction/components/activity-container/activity-outlet/activity-outlet.component.js.map +1 -1
  278. package/esm5/lib/interaction/interaction.module.ngfactory.js.map +1 -1
  279. package/esm5/lib/place/components/abstract-place-navigation.component.js +4 -3
  280. package/esm5/lib/place/components/abstract-place-navigation.component.js.map +1 -1
  281. package/esm5/lib/place/components/list-place-nav/list-place-nav.component.js +1 -1
  282. package/esm5/lib/place/components/list-place-nav/list-place-nav.component.js.map +1 -1
  283. package/esm5/lib/place/components/place-outlet/place-outlet.component.js +56 -16
  284. package/esm5/lib/place/components/place-outlet/place-outlet.component.js.map +1 -1
  285. package/esm5/lib/place/components/side-place-navigation/side-place-navigation.component.js +2 -2
  286. package/esm5/lib/place/components/side-place-navigation/side-place-navigation.component.js.map +1 -1
  287. package/esm5/lib/place/components/tabbed-place-navigation/tabbed-place-navigation.component.js +1 -1
  288. package/esm5/lib/place/components/tabbed-place-navigation/tabbed-place-navigation.component.js.map +1 -1
  289. package/esm5/lib/place/place-component.js +17 -1
  290. package/esm5/lib/place/place-component.js.map +1 -1
  291. package/esm5/lib/place/place-router.js +2 -8
  292. package/esm5/lib/place/place-router.js.map +1 -1
  293. package/esm5/lib/place/place.module.js +3 -3
  294. package/esm5/lib/place/place.module.js.map +1 -1
  295. package/esm5/lib/place/place.module.ngfactory.js.map +1 -1
  296. package/esm5/lib/place/route/parameter-decorators.js +2 -3
  297. package/esm5/lib/place/route/parameter-decorators.js.map +1 -1
  298. package/fesm2015/coolon-angular-ui-powerups.js +1475 -311
  299. package/fesm2015/coolon-angular-ui-powerups.js.map +1 -1
  300. package/fesm5/coolon-angular-ui-powerups.js +1641 -309
  301. package/fesm5/coolon-angular-ui-powerups.js.map +1 -1
  302. package/lib/components/commands/command/command.component.d.ts +22 -0
  303. package/lib/components/commands/command-face/command-face.component.d.ts +34 -0
  304. package/lib/components/commands/command-face.d.ts +40 -0
  305. package/lib/components/commands/flex.component.d.ts +11 -0
  306. package/lib/components/commands/group/command-group/command-group.component.d.ts +11 -0
  307. package/lib/components/commands/group/command-group-menu-renderer/command-group-menu-renderer.component.d.ts +21 -0
  308. package/lib/components/commands/group/command-group-renderer/command-group-renderer.component.d.ts +13 -0
  309. package/lib/components/commands/group/command-group.d.ts +41 -0
  310. package/lib/components/commands/group/more-menu.component.d.ts +14 -0
  311. package/lib/components/commands/group/popup-menu.component.d.ts +17 -0
  312. package/lib/components/commands/group/registration.d.ts +32 -0
  313. package/lib/components/commands/group/tool-bar/tool-bar.component.d.ts +13 -0
  314. package/lib/components/commands/group/view-data.d.ts +40 -0
  315. package/lib/components/commands/separator.component.d.ts +12 -0
  316. package/lib/components/forms/abstract-input.component.d.ts +8 -2
  317. package/lib/components/forms/abstract-list-input.component.d.ts +4 -3
  318. package/lib/components/forms/abstract-value-input.component.d.ts +5 -4
  319. package/lib/components/forms/autocomplete-input/autocomplete-input.component.d.ts +25 -0
  320. package/lib/components/forms/multiple-select-input/multiple-select-input.component.d.ts +7 -2
  321. package/lib/components/forms/select-input/select-input.component.d.ts +1 -0
  322. package/lib/components/icon/icon.component.d.ts +15 -0
  323. package/lib/components/index.d.ts +18 -0
  324. package/lib/components/table/column-model.d.ts +15 -17
  325. package/lib/components/table/mutable-cell-renderer.d.ts +6 -0
  326. package/lib/components/table/table-model.d.ts +7 -3
  327. package/lib/components/table/table-row-menu/table-row-menu.component.d.ts +26 -0
  328. package/lib/components/track-by.d.ts +3 -0
  329. package/lib/interaction/activity-ref.d.ts +3 -0
  330. package/lib/interaction/activity.d.ts +6 -2
  331. package/lib/interaction/components/activity-container/activity-container.component.d.ts +4 -2
  332. package/lib/place/components/abstract-place-navigation.component.d.ts +2 -2
  333. package/lib/place/components/place-outlet/place-outlet.component.d.ts +8 -2
  334. package/lib/place/components/side-place-navigation/side-place-navigation.component.d.ts +1 -1
  335. package/lib/place/place-component.d.ts +6 -0
  336. package/package.json +7 -5
  337. package/schematics/bootstrap-app/index.d.ts +3 -0
  338. package/schematics/bootstrap-app/index.js +81 -0
  339. package/schematics/bootstrap-app/index.js.map +1 -0
  340. package/schematics/bootstrap-app/schema.d.ts +3 -0
  341. package/schematics/bootstrap-app/schema.js +3 -0
  342. package/schematics/bootstrap-app/schema.js.map +1 -0
  343. package/schematics/bootstrap-app/schema.json +19 -0
  344. package/schematics/bootstrap-app/templates/app/app-routing.module.ts +19 -0
  345. package/schematics/bootstrap-app/templates/app/auth/auth.guard.spec.ts +15 -0
  346. package/schematics/bootstrap-app/templates/app/auth/auth.guard.ts +23 -0
  347. package/schematics/bootstrap-app/templates/app/auth/auth.module.ts +13 -0
  348. package/schematics/bootstrap-app/templates/app/auth/auth.service.ts +13 -0
  349. package/schematics/bootstrap-app/templates/app/i18n.ts +9 -0
  350. package/schematics/bootstrap-app/templates/app/places/home/home.component.html +1 -0
  351. package/schematics/bootstrap-app/templates/app/places/home/home.component.scss +4 -0
  352. package/schematics/bootstrap-app/templates/app/places/home/home.component.spec.ts +25 -0
  353. package/schematics/bootstrap-app/templates/app/places/home/home.component.ts +25 -0
  354. package/schematics/bootstrap-app/templates/app/places/place-routes.ts +3 -0
  355. package/schematics/bootstrap-app/templates/app/places/places.json5 +3 -0
  356. package/schematics/bootstrap-app/templates/i18n/config.json +9 -0
  357. package/schematics/bootstrap-app/templates/i18n/notifications.yml +19 -0
  358. package/schematics/bootstrap-app/templates/i18n/places/home.yml +6 -0
  359. package/schematics/collection.json +10 -1
  360. package/schematics/ng-add/index.d.ts +1 -0
  361. package/schematics/ng-add/index.js +27 -4
  362. package/schematics/ng-add/index.js.map +1 -1
  363. package/schematics/package-util.d.ts +13 -0
  364. package/schematics/package-util.js +60 -0
  365. package/schematics/package-util.js.map +1 -0
  366. package/schematics/place-add/index.d.ts +3 -0
  367. package/schematics/place-add/index.js +26 -0
  368. package/schematics/place-add/index.js.map +1 -0
  369. package/schematics/place-add/schema.d.ts +2 -0
  370. package/schematics/place-add/schema.js +3 -0
  371. package/schematics/place-add/schema.js.map +1 -0
  372. 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';
@@ -9,25 +9,29 @@ import { MatTabsModule, MatTabGroup, MAT_TABS_CONFIG } from '@angular/material/t
9
9
  import { BrowserAnimationsModule } from '@angular/platform-browser/animations';
10
10
  import { ComponentPortal, TemplatePortal, PortalModule } from '@angular/cdk/portal';
11
11
  import { CdkScrollableModule } from '@angular/cdk/scrolling';
12
+ import { MatAutocompleteModule } from '@angular/material/autocomplete';
12
13
  import { MatButtonModule } from '@angular/material/button';
13
14
  import { MatCheckboxModule } from '@angular/material/checkbox';
15
+ import { MatDividerModule } from '@angular/material/divider';
14
16
  import { MatIconModule } from '@angular/material/icon';
17
+ import { MatMenu, MatMenuTrigger, MatMenuModule } from '@angular/material/menu';
15
18
  import { MatTableModule } from '@angular/material/table';
16
- 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';
17
- import { assert as assert$1, Opts, lang as lang$1, Klass } from '@coolon/typescript-utilities';
19
+ import { MatTooltipModule } from '@angular/material/tooltip';
20
+ import { FaIconLibrary, FontAwesomeModule } from '@fortawesome/angular-fontawesome';
21
+ import { fas } from '@fortawesome/free-solid-svg-icons';
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';
18
23
  import { Memoize } from '@typescript-plus/fast-memoize-decorator/dist/src';
19
24
  import ___default, { isEqual, isNil } from 'lodash';
25
+ import { Enum } from 'typescript-string-enums';
26
+ import { assert as assert$1, Opts, lang as lang$1, Klass } from '@coolon/typescript-utilities';
20
27
  import produce from 'immer';
21
- import { FaIconLibrary, FontAwesomeModule } from '@fortawesome/angular-fontawesome';
22
- import { fas } from '@fortawesome/free-solid-svg-icons';
23
- import { MatTooltipModule } from '@angular/material/tooltip';
24
28
  import { FlexModule, GridModule } from '@angular/flex-layout';
25
29
  import { MatDialogModule, MatDialog, MatDialogConfig, MAT_DIALOG_DEFAULT_OPTIONS } from '@angular/material/dialog';
26
30
  import { RouterModule, UrlSegment, Router, UrlSerializer, NavigationStart, NavigationEnd, NavigationError, NavigationCancel, RouterOutlet } from '@angular/router';
27
31
  import { Overlay, CdkScrollable } from '@angular/cdk/overlay';
28
32
  import ResizeObserver from 'resize-observer-polyfill';
29
- import { MatProgressSpinnerModule } from '@angular/material/progress-spinner';
30
33
  import { MatListModule } from '@angular/material/list';
34
+ import { MatProgressSpinnerModule } from '@angular/material/progress-spinner';
31
35
  import { Memoize as Memoize$1 } from '@typescript-plus/fast-memoize-decorator';
32
36
  import 'reflect-metadata';
33
37
  import { style, query, group, animate, trigger, transition } from '@angular/animations';
@@ -369,11 +373,844 @@ CardContainerComponent = __decorate([
369
373
  Component({
370
374
  selector: 'aup-card-container',
371
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",
372
- styles: [":root{--aup-default-padding:var(--default-padding, 18px);--aup-default-background:white}.router-outlet-container>*{position:absolute;top:0;left:0;bottom:0;right:0}[no-tab-header]>mat-tab-header{display:none}[full-height-tabs] .mat-tab-body-wrapper,mat-tab-group.full-height-tabs .mat-tab-body-wrapper{flex:1}[full-height-tabs] .mat-tab-body-wrapper .mat-tab-body-content,[full-height-tabs] .mat-tab-body-wrapper mat-tab-body,mat-tab-group.full-height-tabs .mat-tab-body-wrapper .mat-tab-body-content,mat-tab-group.full-height-tabs .mat-tab-body-wrapper mat-tab-body{display:flex;flex-direction:column;justify-content:stretch}.dialog-interaction-context{max-width:95vw!important;max-height:95vh!important}.dialog-interaction-context mat-dialog-container{max-width:95vw!important;max-height:95vh!important;padding:0}.aup-popup-interaction-panel{background:var(--aup-default-background,#fff);box-shadow:0 2px 1px -1px rgba(0,0,0,.2),0 1px 1px 0 rgba(0,0,0,.14),0 1px 3px 0 rgba(0,0,0,.12);transition:box-shadow 280ms cubic-bezier(.4,0,.2,1)}.aup-input-activity{padding:calc(var(--aup-default-padding)/2)}.aup-input-component{display:block}.aup-input-component input,.aup-input-component mat-form-field{width:100%}.aup-input-component input mat-hint.faux-error,.aup-input-component mat-form-field mat-hint.faux-error{color:#f44336}.aup-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}"]
373
377
  }),
374
378
  __metadata("design:paramtypes", [])
375
379
  ], CardContainerComponent);
376
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
+
377
1214
  let FocusContainerComponent = class FocusContainerComponent extends DisposableComponent {
378
1215
  constructor(focusManager) {
379
1216
  super();
@@ -467,6 +1304,7 @@ FocusableComponent = __decorate([
467
1304
  let AbstractInputComponent = class AbstractInputComponent extends DisposableComponent {
468
1305
  constructor() {
469
1306
  super();
1307
+ this.onValueEditedListeners = new EventListenerList();
470
1308
  this.dense = false;
471
1309
  // TODO: fix this.
472
1310
  // tslint:disable-next-line:no-output-native
@@ -515,19 +1353,19 @@ let AbstractInputComponent = class AbstractInputComponent extends DisposableComp
515
1353
  return this.enabled.value;
516
1354
  }
517
1355
  get enabled() {
518
- return this.inputModel.enabled;
1356
+ return this.formValueModel.enabled;
519
1357
  }
520
1358
  hasErrors() {
521
1359
  return !this.errorList.query().isEmpty();
522
1360
  }
523
1361
  get errorList() {
524
- return this.inputModel.errorList;
1362
+ return this.formValueModel.errorList;
525
1363
  }
526
1364
  get firstError() {
527
1365
  return this.hasErrors() ? this.errorList.value[0] : null;
528
1366
  }
529
1367
  get focusContext() {
530
- return this.inputModel.focusContext;
1368
+ return this.formValueModel.focusContext;
531
1369
  }
532
1370
  get floatLabel() {
533
1371
  return this.dense ? 'never' : this.userFloatLabel;
@@ -535,6 +1373,13 @@ let AbstractInputComponent = class AbstractInputComponent extends DisposableComp
535
1373
  get showHint() {
536
1374
  return this.dense ? false : !!this.hint;
537
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
+ }
538
1383
  };
539
1384
  __decorate([
540
1385
  Input(),
@@ -634,29 +1479,42 @@ let AbstractListInputComponent = class AbstractListInputComponent extends Abstra
634
1479
  * gets told it's an Object and can't scan for a base type annotated with @DelegateUsing(..).
635
1480
  */
636
1481
  // We have to register it as a disposable so it ditches any listeners when we're disposed.
637
- this.inputModel = this.registerDisposable(new Form.DelegatingListModel());
638
- this.setValueIsInitialising = new Guard();
1482
+ this.formValueModel = this.registerDisposable(new Form.DelegatingListModel());
1483
+ this.componentListModel = new MutableListModel();
1484
+ this.setValueIsInProgress = new Guard();
639
1485
  this.valueChange = new EventEmitter();
640
- const { when } = Dsl.disposeWith(this);
641
- 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
+ }, {
642
1493
  initialValue: 'ignore',
643
- 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
644
1498
  });
1499
+ DebugContext.tag(this.formValueModel, `${this.constructor.name}.formValueModel`);
645
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.
646
1504
  set value(value) {
647
- if (!this.listHolder) {
648
- this.setValueIsInitialising.whileTrue(() => {
1505
+ this.setValueIsInProgress.whileTrue(() => {
1506
+ if (!this.listHolder) {
649
1507
  this.listHolder = new MutableListModel(value);
650
1508
  this.listModel = this.listHolder;
651
- });
652
- }
653
- else {
654
- this.listHolder.value = value;
655
- }
1509
+ }
1510
+ else {
1511
+ this.listHolder.value = value;
1512
+ }
1513
+ });
656
1514
  }
657
1515
  };
658
1516
  __decorate([
659
- Input(), TrackExternal({ delegateTo: 'inputModel' }),
1517
+ Input(), TrackExternal({ delegateTo: 'formValueModel' }),
660
1518
  __metadata("design:type", Object)
661
1519
  ], AbstractListInputComponent.prototype, "listModel", void 0);
662
1520
  __decorate([
@@ -687,41 +1545,121 @@ let AbstractValueInputComponent = class AbstractValueInputComponent extends Abst
687
1545
  * gets told it's an Object and can't scan for a base type annotated with @DelegateUsing(..).
688
1546
  */
689
1547
  // We have to register it as a disposable so it ditches any listeners when we're disposed.
690
- this.inputModel = this.registerDisposable(new Form.DelegatingValueModel());
691
- this.setValueIsInitialising = new Guard();
1548
+ this.formValueModel = this.registerDisposable(new Form.DelegatingValueModel());
1549
+ this.setValueInProgress = new Guard();
1550
+ this.componentValueModel = new MutableValueModel();
692
1551
  this.valueChange = new EventEmitter();
693
- const { when } = Dsl.disposeWith(this);
694
- when(this.inputModel).changes(value => this.valueChange.emit(value), { initialValue: 'ignore', unless: this.setValueIsInitialising });
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
+ }, {
1559
+ initialValue: 'ignore',
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
1564
+ });
1565
+ DebugContext.tag(this.formValueModel, `${this.constructor.name}.formValueModel`);
695
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.
696
1570
  set value(value) {
697
- if (!this.valueHolder) {
698
- this.setValueIsInitialising.whileTrue(() => {
699
- this.valueHolder = new MutableValueModel(value);
700
- this.valueModel = this.valueHolder;
701
- });
702
- }
703
- else {
704
- this.valueHolder.value = value;
705
- }
1571
+ this.setValueInProgress.whileTrue(() => {
1572
+ if (!this.plainValueHolder) {
1573
+ this.plainValueHolder = new MutableValueModel(value);
1574
+ this.valueModel = this.plainValueHolder;
1575
+ }
1576
+ else {
1577
+ this.plainValueHolder.value = value;
1578
+ }
1579
+ });
1580
+ }
1581
+ };
1582
+ __decorate([
1583
+ Input(), TrackExternal({ delegateTo: 'formValueModel' }),
1584
+ __metadata("design:type", Object)
1585
+ ], AbstractValueInputComponent.prototype, "valueModel", void 0);
1586
+ __decorate([
1587
+ Input(),
1588
+ __metadata("design:type", Object),
1589
+ __metadata("design:paramtypes", [Object])
1590
+ ], AbstractValueInputComponent.prototype, "value", null);
1591
+ __decorate([
1592
+ Output(),
1593
+ __metadata("design:type", Object)
1594
+ ], AbstractValueInputComponent.prototype, "valueChange", void 0);
1595
+ AbstractValueInputComponent = __decorate([
1596
+ Component({ template: '' }),
1597
+ __metadata("design:paramtypes", [])
1598
+ ], AbstractValueInputComponent);
1599
+
1600
+ /**
1601
+ * Using templates (not only supported for nil values:
1602
+ * <aup-autocomplete-input [valueModel]="myModel" [options]="myOptions">
1603
+ * <ng-template #nilOptionTemplate let-option>{{option.thePropertyYouWant}}</ng-template>
1604
+ * </aup-autocomplete-input>
1605
+ */
1606
+ let AutocompleteInputComponent = class AutocompleteInputComponent extends AbstractValueInputComponent {
1607
+ constructor() {
1608
+ super();
1609
+ this.filterValue = new MutableValueModel();
1610
+ this.optionLabelFormat = (option) => (option && this.optionLabel) ? option[this.optionLabel] : option;
1611
+ const { chain, valueOf, before, when, after, observe, switchOn } = Dsl.disposeWith(this);
1612
+ const lowerCaseFilterValue = chain(this.filterValue)
1613
+ .map(v => ___default.isString(v) ? v.toLowerCase() : '');
1614
+ this.filteredOptions = chain(this.optionsModel)
1615
+ .select(option => {
1616
+ return ___default.isEmpty(this.filterValue.value) || this.optionLabelFormat(option).toString().toLowerCase().includes(lowerCaseFilterValue.value);
1617
+ }, { dependsOn: lowerCaseFilterValue });
1618
+ }
1619
+ ngOnInit() {
1620
+ }
1621
+ formatOption(option) {
1622
+ return this.optionLabelFormat(option);
1623
+ }
1624
+ updateFilter($event) {
1625
+ this.filterValue.value = $event;
1626
+ }
1627
+ onSelect($event) {
1628
+ this.valueModel.value = $event.option.value;
706
1629
  }
707
1630
  };
708
1631
  __decorate([
709
- Input(), TrackExternal({ delegateTo: 'inputModel' }),
1632
+ Input(), TrackExternal(),
1633
+ __metadata("design:type", ListModel)
1634
+ ], AutocompleteInputComponent.prototype, "optionsModel", void 0);
1635
+ __decorate([
1636
+ Input(), StoreInListModel('optionsModel'),
1637
+ __metadata("design:type", Array)
1638
+ ], AutocompleteInputComponent.prototype, "options", void 0);
1639
+ __decorate([
1640
+ Input(),
710
1641
  __metadata("design:type", Object)
711
- ], AbstractValueInputComponent.prototype, "valueModel", void 0);
1642
+ ], AutocompleteInputComponent.prototype, "optionLabel", void 0);
712
1643
  __decorate([
713
1644
  Input(),
714
- __metadata("design:type", Object),
715
- __metadata("design:paramtypes", [Object])
716
- ], AbstractValueInputComponent.prototype, "value", null);
1645
+ __metadata("design:type", Boolean)
1646
+ ], AutocompleteInputComponent.prototype, "allowNil", void 0);
717
1647
  __decorate([
718
- Output(),
719
- __metadata("design:type", Object)
720
- ], AbstractValueInputComponent.prototype, "valueChange", void 0);
721
- AbstractValueInputComponent = __decorate([
722
- Component({ template: '' }),
1648
+ ContentChild('nilOptionTemplate'),
1649
+ __metadata("design:type", TemplateRef)
1650
+ ], AutocompleteInputComponent.prototype, "nilOptionTemplateRef", void 0);
1651
+ __decorate([
1652
+ Input(),
1653
+ __metadata("design:type", Function)
1654
+ ], AutocompleteInputComponent.prototype, "optionLabelFormat", void 0);
1655
+ AutocompleteInputComponent = __decorate([
1656
+ Component({
1657
+ selector: 'aup-autocomplete-input',
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",
1659
+ styles: [":host{display:inline-block}mat-form-field{width:100%}"]
1660
+ }),
723
1661
  __metadata("design:paramtypes", [])
724
- ], AbstractValueInputComponent);
1662
+ ], AutocompleteInputComponent);
725
1663
 
726
1664
  let CheckboxInputComponent = class CheckboxInputComponent extends AbstractValueInputComponent {
727
1665
  constructor() {
@@ -745,12 +1683,56 @@ __decorate([
745
1683
  CheckboxInputComponent = __decorate([
746
1684
  Component({
747
1685
  selector: 'aup-checkbox-input',
748
- 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",
749
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}"]
750
1688
  }),
751
1689
  __metadata("design:paramtypes", [])
752
1690
  ], CheckboxInputComponent);
753
1691
 
1692
+ /**
1693
+ * Using templates:
1694
+ * <aup-multiple-select-input [valueModel]="myModel" [options]="myOptions">
1695
+ * <ng-template #optionTemplate let-option>{{option.thePropertyYouWant}}</ng-template>
1696
+ * <ng-template #nilOptionTemplate let-option>{{option.thePropertyYouWant}}</ng-template>
1697
+ * </aup-multiple-select_input>
1698
+ */
1699
+ let MultipleSelectInputComponent = class MultipleSelectInputComponent extends AbstractListInputComponent {
1700
+ constructor() {
1701
+ super();
1702
+ this.optionLabelFormat = (option) => (option && this.optionLabel) ? option[this.optionLabel] : option;
1703
+ }
1704
+ ngOnInit() {
1705
+ }
1706
+ };
1707
+ __decorate([
1708
+ Input(), TrackExternal(),
1709
+ __metadata("design:type", ListModel)
1710
+ ], MultipleSelectInputComponent.prototype, "optionsModel", void 0);
1711
+ __decorate([
1712
+ Input(), StoreInListModel('optionsModel'),
1713
+ __metadata("design:type", Array)
1714
+ ], MultipleSelectInputComponent.prototype, "options", void 0);
1715
+ __decorate([
1716
+ Input(),
1717
+ __metadata("design:type", Object)
1718
+ ], MultipleSelectInputComponent.prototype, "optionLabel", void 0);
1719
+ __decorate([
1720
+ ContentChild('optionTemplate'),
1721
+ __metadata("design:type", TemplateRef)
1722
+ ], MultipleSelectInputComponent.prototype, "optionTemplateRef", void 0);
1723
+ __decorate([
1724
+ Input(),
1725
+ __metadata("design:type", Function)
1726
+ ], MultipleSelectInputComponent.prototype, "optionLabelFormat", void 0);
1727
+ MultipleSelectInputComponent = __decorate([
1728
+ Component({
1729
+ selector: 'aup-multiple-select-input',
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",
1731
+ styles: [":host{display:inline-block}mat-form-field{width:100%}"]
1732
+ }),
1733
+ __metadata("design:paramtypes", [])
1734
+ ], MultipleSelectInputComponent);
1735
+
754
1736
  let NumberInputComponent = class NumberInputComponent extends AbstractValueInputComponent {
755
1737
  constructor() {
756
1738
  super();
@@ -773,7 +1755,7 @@ __decorate([
773
1755
  NumberInputComponent = __decorate([
774
1756
  Component({
775
1757
  selector: 'aup-number-input',
776
- 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",
777
1759
  styles: [""]
778
1760
  }),
779
1761
  __metadata("design:paramtypes", [])
@@ -791,7 +1773,7 @@ let PasswordInputComponent = class PasswordInputComponent extends AbstractValueI
791
1773
  PasswordInputComponent = __decorate([
792
1774
  Component({
793
1775
  selector: 'aup-password-input',
794
- 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",
795
1777
  styles: [""]
796
1778
  }),
797
1779
  __metadata("design:paramtypes", [])
@@ -801,6 +1783,7 @@ PasswordInputComponent = __decorate([
801
1783
  * Using templates:
802
1784
  * <aup-select-input [valueModel]="myModel" [options]="myOptions">
803
1785
  * <ng-template #optionTemplate let-option>{{option.thePropertyYouWant}}</ng-template>
1786
+ * <ng-template #nilOptionTemplate let-option>{{option.thePropertyYouWant}}</ng-template>
804
1787
  * </aup-select_input>
805
1788
  */
806
1789
  let SelectInputComponent = class SelectInputComponent extends AbstractValueInputComponent {
@@ -842,7 +1825,7 @@ __decorate([
842
1825
  SelectInputComponent = __decorate([
843
1826
  Component({
844
1827
  selector: 'aup-select-input',
845
- 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",
846
1829
  styles: [":host{display:inline-block}mat-form-field{width:100%}"]
847
1830
  }),
848
1831
  __metadata("design:paramtypes", [])
@@ -853,9 +1836,9 @@ let StringInputComponent = class StringInputComponent extends AbstractValueInput
853
1836
  super();
854
1837
  const { chain, valueOf, before, when, after, observe, switchOn } = Dsl.disposeWith(this);
855
1838
  this.clearCommand = Command.create(() => {
856
- this.valueModel.value = null;
1839
+ this.componentValueModel.value = null;
857
1840
  });
858
- this.clearCommand.disableWhile(chain.stringValue(this.valueModel).isBlank());
1841
+ this.clearCommand.disableWhile(chain.stringValue(this.componentValueModel).isBlank());
859
1842
  }
860
1843
  ngOnInit() {
861
1844
  }
@@ -871,7 +1854,7 @@ __decorate([
871
1854
  StringInputComponent = __decorate([
872
1855
  Component({
873
1856
  selector: 'aup-string-input',
874
- 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",
875
1858
  styles: ["button[disabled]{visibility:hidden}"]
876
1859
  }),
877
1860
  __metadata("design:paramtypes", [])
@@ -899,12 +1882,59 @@ __decorate([
899
1882
  TextInputComponent = __decorate([
900
1883
  Component({
901
1884
  selector: 'aup-text-input',
902
- 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",
903
1886
  styles: ["button[disabled]{visibility:hidden}textarea{overflow:auto}"]
904
1887
  }),
905
1888
  __metadata("design:paramtypes", [])
906
1889
  ], TextInputComponent);
907
1890
 
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
+ }
1897
+ set icon(iconName) {
1898
+ this._icon = iconName;
1899
+ if (!iconName) {
1900
+ this.errorMessage = 'icon is nil';
1901
+ this.prefix = undefined;
1902
+ return;
1903
+ }
1904
+ const colonIndex = iconName.indexOf(':');
1905
+ if (colonIndex > 0) {
1906
+ this.prefix = this.icon.slice(0, colonIndex);
1907
+ this.suffix = this.icon.slice(colonIndex + 1);
1908
+ }
1909
+ if (this.prefix) {
1910
+ this.errorMessage = `Unknown icon "${iconName}"`;
1911
+ }
1912
+ this.errorMessage = `Unknown icon prefix, expected one of [${this.allowedPrefixes.join(',')}] got "${this.prefix}:"`;
1913
+ }
1914
+ get icon() {
1915
+ return this._icon;
1916
+ }
1917
+ };
1918
+ __decorate([
1919
+ Input(),
1920
+ __metadata("design:type", String),
1921
+ __metadata("design:paramtypes", [String])
1922
+ ], IconComponent.prototype, "icon", null);
1923
+ IconComponent = IconComponent_1 = __decorate([
1924
+ Component({
1925
+ selector: 'aup-icon',
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",
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}"]
1928
+ })
1929
+ ], IconComponent);
1930
+ (function (IconComponent) {
1931
+ IconComponent.IconPrefix = Enum({
1932
+ SVG: 'svg',
1933
+ FONT_AWESOME: 'fa',
1934
+ MATERIAL: 'mat'
1935
+ });
1936
+ })(IconComponent || (IconComponent = {}));
1937
+
908
1938
  let NoopComponent = class NoopComponent {
909
1939
  constructor() {
910
1940
  }
@@ -1318,7 +2348,8 @@ SelectHeaderCellRendererComponent = __decorate([
1318
2348
 
1319
2349
  const noop = () => {
1320
2350
  };
1321
- const ɵ0 = noop;
2351
+ const ɵ0$3 = noop;
2352
+ const CELL_RENDERER_COMPONENT_ROW_CACHE = Symbol("aup-cell-renderer:row-data-cache");
1322
2353
  class ColumnModel {
1323
2354
  constructor(columnId, defaults) {
1324
2355
  this.columnId = columnId;
@@ -1432,6 +2463,34 @@ class PropertyColumnModel extends ColumnModel {
1432
2463
  }));
1433
2464
  return this;
1434
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
+ }
1435
2494
  cellEditor(editor, validatorsOrInitialiser, onComponentInit) {
1436
2495
  const validators = Array.isArray(validatorsOrInitialiser) ? validatorsOrInitialiser : undefined;
1437
2496
  const initialiser = ___default.isFunction(validatorsOrInitialiser) ? validatorsOrInitialiser : onComponentInit;
@@ -1499,9 +2558,22 @@ class CustomValueColumnModel extends ColumnModel {
1499
2558
  this.getValue = getValue;
1500
2559
  this.cellRenderer(DefaultCellRendererComponent);
1501
2560
  }
1502
- cellRenderer(componentType) {
1503
- 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
+ }
1504
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
+ }
1505
2577
  }));
1506
2578
  return this;
1507
2579
  }
@@ -1663,6 +2735,9 @@ let TableModel = TableModel_1 = class TableModel {
1663
2735
  this._editorSessions = new MutableListModel();
1664
2736
  this.rowClassNamePredicates = [];
1665
2737
  this._createForm = (row) => new DirtyTrackingForm();
2738
+ this.trackBy = (index, item) => {
2739
+ return this.identityOf ? this.identityOf(item) : index;
2740
+ };
1666
2741
  this.identityOf = sourceOfTruth.identityOf;
1667
2742
  const { chain, valueOf, before, when, after, observe, switchOn } = Dsl.disposeWith(this._garbage);
1668
2743
  this._columnsById = chain(this._columns).indexBy('columnId');
@@ -1684,11 +2759,6 @@ let TableModel = TableModel_1 = class TableModel {
1684
2759
  get rowsBeingEdited() {
1685
2760
  return this._rowsBeingEdited.readonly;
1686
2761
  }
1687
- getTrackByFunction() {
1688
- return (index, item) => {
1689
- return this.identityOf ? this.identityOf(item) : index;
1690
- };
1691
- }
1692
2762
  get columns() {
1693
2763
  return this._columns.readonly;
1694
2764
  }
@@ -1710,6 +2780,9 @@ let TableModel = TableModel_1 = class TableModel {
1710
2780
  addCustomColumn(columnId, dataAccessor) {
1711
2781
  return this.addColumn(new CustomValueColumnModel(columnId, this, dataAccessor));
1712
2782
  }
2783
+ addComponentColumn(columnId, component, onComponentInitOrOptions) {
2784
+ return this.addColumn(new CustomValueColumnModel(columnId, this, row => row)).cellRenderer(component, onComponentInitOrOptions);
2785
+ }
1713
2786
  addTemplateColumn(columnId) {
1714
2787
  return this.addColumn(new CustomTemplateColumnModel(columnId, this));
1715
2788
  }
@@ -1738,12 +2811,14 @@ let TableModel = TableModel_1 = class TableModel {
1738
2811
  }
1739
2812
  return column;
1740
2813
  }
2814
+ // removeColumn(column: ColumnModel<Row>) {
2815
+ //
2816
+ // }
1741
2817
  columnTextProperties(columnTextProperties) {
1742
2818
  this._columnTextPropertiesLookup = columnTextProperties;
1743
2819
  }
1744
2820
  getColumnTextProperties(column) {
1745
- const factory = this._columnTextPropertiesLookup ? this._columnTextPropertiesLookup[column.columnId] : undefined;
1746
- return factory ? factory() : undefined;
2821
+ return this._columnTextPropertiesLookup ? this._columnTextPropertiesLookup[column.columnId] : undefined;
1747
2822
  }
1748
2823
  startEditSession(row) {
1749
2824
  const rowId = this.identityOf(row);
@@ -1857,7 +2932,7 @@ __decorate([
1857
2932
  TableComponent = __decorate([
1858
2933
  Component({
1859
2934
  selector: 'aup-table',
1860
- 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",
1861
2936
  styles: [":host{display:flex;flex-direction:column;align-items:stretch}:host table{flex:1}"]
1862
2937
  }),
1863
2938
  __metadata("design:paramtypes", [])
@@ -2032,6 +3107,73 @@ TableHeaderCellRendererComponent = __decorate([
2032
3107
  __metadata("design:paramtypes", [])
2033
3108
  ], TableHeaderCellRendererComponent);
2034
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
+
2035
3177
  let VerticalFocusContainerComponent = class VerticalFocusContainerComponent extends FocusContainerComponent {
2036
3178
  constructor(focusManager) {
2037
3179
  super(focusManager);
@@ -2084,115 +3226,35 @@ __decorate([
2084
3226
  __metadata("design:returntype", void 0)
2085
3227
  ], VerticalFocusContainerComponent.prototype, "arrowLeft", null);
2086
3228
  __decorate([
2087
- HostListener('keyup.arrowRight', ['$event']),
2088
- __metadata("design:type", Function),
2089
- __metadata("design:paramtypes", [KeyboardEvent]),
2090
- __metadata("design:returntype", void 0)
2091
- ], VerticalFocusContainerComponent.prototype, "arrowRight", null);
2092
- __decorate([
2093
- HostListener('keyup.arrowDown', ['$event']),
2094
- __metadata("design:type", Function),
2095
- __metadata("design:paramtypes", [KeyboardEvent]),
2096
- __metadata("design:returntype", void 0)
2097
- ], VerticalFocusContainerComponent.prototype, "arrowDown", null);
2098
- __decorate([
2099
- HostListener('keyup.arrowUp', ['$event']),
2100
- __metadata("design:type", Function),
2101
- __metadata("design:paramtypes", [KeyboardEvent]),
2102
- __metadata("design:returntype", void 0)
2103
- ], VerticalFocusContainerComponent.prototype, "arrowUp", null);
2104
- VerticalFocusContainerComponent = __decorate([
2105
- Component({
2106
- selector: 'aup-vertical-focus-container',
2107
- template: "<ng-content></ng-content>\n",
2108
- providers: [
2109
- { provide: FocusManager }
2110
- ],
2111
- styles: [":host{display:block}"]
2112
- }),
2113
- __param(0, Self()),
2114
- __metadata("design:paramtypes", [FocusManager])
2115
- ], VerticalFocusContainerComponent);
2116
-
2117
- let MultipleSelectInputComponent = class MultipleSelectInputComponent extends AbstractListInputComponent {
2118
- constructor() {
2119
- super();
2120
- this.optionLabelFormat = (option) => (option && this.optionLabel) ? option[this.optionLabel] : option;
2121
- }
2122
- ngOnInit() {
2123
- }
2124
- };
2125
- __decorate([
2126
- Input(), TrackExternal(),
2127
- __metadata("design:type", ListModel)
2128
- ], MultipleSelectInputComponent.prototype, "optionsModel", void 0);
2129
- __decorate([
2130
- Input(), StoreInListModel('optionsModel'),
2131
- __metadata("design:type", Array)
2132
- ], MultipleSelectInputComponent.prototype, "options", void 0);
2133
- __decorate([
2134
- Input(),
2135
- __metadata("design:type", Object)
2136
- ], MultipleSelectInputComponent.prototype, "optionLabel", void 0);
2137
- __decorate([
2138
- Input(),
2139
- __metadata("design:type", Boolean)
2140
- ], MultipleSelectInputComponent.prototype, "allowNil", void 0);
2141
- __decorate([
2142
- ContentChild('optionTemplate'),
2143
- __metadata("design:type", TemplateRef)
2144
- ], MultipleSelectInputComponent.prototype, "optionTemplateRef", void 0);
2145
- __decorate([
2146
- ContentChild('nilOptionTemplate'),
2147
- __metadata("design:type", TemplateRef)
2148
- ], MultipleSelectInputComponent.prototype, "nilOptionTemplateRef", void 0);
2149
- __decorate([
2150
- Input(),
2151
- __metadata("design:type", Function)
2152
- ], MultipleSelectInputComponent.prototype, "optionLabelFormat", void 0);
2153
- MultipleSelectInputComponent = __decorate([
2154
- Component({
2155
- selector: 'aup-multiple-select-input',
2156
- 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",
2157
- styles: [":host{display:inline-block}mat-form-field{width:100%}"]
2158
- }),
2159
- __metadata("design:paramtypes", [])
2160
- ], MultipleSelectInputComponent);
2161
-
2162
- let IconComponent = class IconComponent {
2163
- set icon(iconName) {
2164
- this._icon = iconName;
2165
- if (!iconName) {
2166
- this.errorMessage = 'icon is nil';
2167
- this.prefix = undefined;
2168
- return;
2169
- }
2170
- const colonIndex = iconName.indexOf(':');
2171
- if (colonIndex > 0) {
2172
- this.prefix = this.icon.slice(0, colonIndex);
2173
- this.suffix = this.icon.slice(colonIndex + 1);
2174
- }
2175
- if (this.prefix) {
2176
- this.errorMessage = `Unknown icon "${iconName}"`;
2177
- }
2178
- this.errorMessage = `Unknown icon prefix "${this.prefix}"`;
2179
- }
2180
- get icon() {
2181
- return this._icon;
2182
- }
2183
- };
3229
+ HostListener('keyup.arrowRight', ['$event']),
3230
+ __metadata("design:type", Function),
3231
+ __metadata("design:paramtypes", [KeyboardEvent]),
3232
+ __metadata("design:returntype", void 0)
3233
+ ], VerticalFocusContainerComponent.prototype, "arrowRight", null);
2184
3234
  __decorate([
2185
- Input(),
2186
- __metadata("design:type", String),
2187
- __metadata("design:paramtypes", [String])
2188
- ], IconComponent.prototype, "icon", null);
2189
- IconComponent = __decorate([
3235
+ HostListener('keyup.arrowDown', ['$event']),
3236
+ __metadata("design:type", Function),
3237
+ __metadata("design:paramtypes", [KeyboardEvent]),
3238
+ __metadata("design:returntype", void 0)
3239
+ ], VerticalFocusContainerComponent.prototype, "arrowDown", null);
3240
+ __decorate([
3241
+ HostListener('keyup.arrowUp', ['$event']),
3242
+ __metadata("design:type", Function),
3243
+ __metadata("design:paramtypes", [KeyboardEvent]),
3244
+ __metadata("design:returntype", void 0)
3245
+ ], VerticalFocusContainerComponent.prototype, "arrowUp", null);
3246
+ VerticalFocusContainerComponent = __decorate([
2190
3247
  Component({
2191
- selector: 'aup-icon',
2192
- 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",
2193
- 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}"]
2194
- })
2195
- ], IconComponent);
3248
+ selector: 'aup-vertical-focus-container',
3249
+ template: "<ng-content></ng-content>\n",
3250
+ providers: [
3251
+ { provide: FocusManager }
3252
+ ],
3253
+ styles: [":host{display:block}"]
3254
+ }),
3255
+ __param(0, Self()),
3256
+ __metadata("design:paramtypes", [FocusManager])
3257
+ ], VerticalFocusContainerComponent);
2196
3258
 
2197
3259
  let ComponentsModule = class ComponentsModule {
2198
3260
  constructor(faIconLibrary) {
@@ -2213,6 +3275,8 @@ ComponentsModule = __decorate([
2213
3275
  TextInputComponent,
2214
3276
  PasswordInputComponent,
2215
3277
  SelectInputComponent,
3278
+ MultipleSelectInputComponent,
3279
+ AutocompleteInputComponent,
2216
3280
  CheckboxInputComponent,
2217
3281
  ScrollContainerComponent,
2218
3282
  NoopComponent,
@@ -2232,9 +3296,19 @@ ComponentsModule = __decorate([
2232
3296
  SelectHeaderCellRendererComponent,
2233
3297
  DefaultHeaderCellRendererComponent,
2234
3298
  TableHeaderCellRendererComponent,
2235
- MultipleSelectInputComponent,
2236
3299
  IconComponent,
2237
- 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
2238
3312
  ],
2239
3313
  imports: [
2240
3314
  CommonModule,
@@ -2252,7 +3326,10 @@ ComponentsModule = __decorate([
2252
3326
  PortalModule,
2253
3327
  CdkScrollableModule,
2254
3328
  FontAwesomeModule,
2255
- MatTooltipModule
3329
+ MatTooltipModule,
3330
+ MatAutocompleteModule,
3331
+ MatMenuModule,
3332
+ MatDividerModule
2256
3333
  ],
2257
3334
  exports: [
2258
3335
  NumberInputComponent,
@@ -2261,6 +3338,8 @@ ComponentsModule = __decorate([
2261
3338
  PasswordInputComponent,
2262
3339
  CheckboxInputComponent,
2263
3340
  SelectInputComponent,
3341
+ MultipleSelectInputComponent,
3342
+ AutocompleteInputComponent,
2264
3343
  ScrollContainerComponent,
2265
3344
  NoopComponent,
2266
3345
  SwitchCaseComponent,
@@ -2273,12 +3352,20 @@ ComponentsModule = __decorate([
2273
3352
  TableComponent,
2274
3353
  EditRowControls,
2275
3354
  ColumnTemplateDirective,
2276
- MultipleSelectInputComponent,
2277
3355
  IconComponent,
2278
- SectionHeaderComponent
3356
+ SectionHeaderComponent,
3357
+ TableRowMenuComponent,
3358
+ CommandGroupComponent,
3359
+ ToolBarComponent,
3360
+ CommandComponent,
3361
+ PopupMenuComponent,
3362
+ CommandFaceComponent,
3363
+ MoreMenuComponent,
3364
+ SeparatorComponent,
3365
+ FlexComponent
2279
3366
  ],
2280
3367
  providers: [
2281
- FocusBindingFactory,
3368
+ FocusBindingFactory
2282
3369
  ]
2283
3370
  }),
2284
3371
  __metadata("design:paramtypes", [FaIconLibrary])
@@ -2346,7 +3433,7 @@ ActivityActionsComponent = __decorate([
2346
3433
  Component({
2347
3434
  selector: 'aup-activity-actions',
2348
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",
2349
- 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}"]
2350
3437
  })
2351
3438
  ], ActivityActionsComponent);
2352
3439
 
@@ -2355,12 +3442,21 @@ class Activity extends DisposableComponent {
2355
3442
  constructor() {
2356
3443
  super(...arguments);
2357
3444
  this._busyModel = new DelegatingValueModel().withDefault(false);
3445
+ this._focusedModel = this.registerDisposable(new DelegatingValueModel());
2358
3446
  this.class = 'aup-activity';
2359
3447
  }
3448
+ get isFocused() {
3449
+ return this._focusedModel.value;
3450
+ }
2360
3451
  initialise(nestedInteractionContext, activityContext) {
3452
+ const { chain, when } = Dsl.disposeWith(this);
2361
3453
  assert$1.isNil(this._activityContext);
2362
3454
  this._activityContext = activityContext;
2363
3455
  this._interactionContext = nestedInteractionContext;
3456
+ this._focusedModel.setDelegate(activityContext.focused);
3457
+ when(this._focusedModel).becomesTruthy(() => {
3458
+ this.onActivityReady();
3459
+ });
2364
3460
  }
2365
3461
  get interactionContext() {
2366
3462
  assert$1.isTruthy(this.isInitialised());
@@ -2378,6 +3474,9 @@ class Activity extends DisposableComponent {
2378
3474
  get busy() {
2379
3475
  return this._busyModel.readonly;
2380
3476
  }
3477
+ get focused() {
3478
+ return this._focusedModel.readonly;
3479
+ }
2381
3480
  busyWhile(busyModel) {
2382
3481
  this._busyModel.setDelegate(busyModel);
2383
3482
  }
@@ -2392,6 +3491,11 @@ __decorate([
2392
3491
  HostBinding('class'),
2393
3492
  __metadata("design:type", Object)
2394
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);
2395
3499
 
2396
3500
  let AlertDialogComponent = class AlertDialogComponent extends Activity {
2397
3501
  constructor(alert) {
@@ -2511,6 +3615,7 @@ class ActivityRef {
2511
3615
  this.onComplete = onComplete;
2512
3616
  this._complete = false;
2513
3617
  this.deferredResult = Deferred.defer();
3618
+ this.focusedModel = new MutableValueModel();
2514
3619
  }
2515
3620
  isActivityRealised() {
2516
3621
  return !!this._activity;
@@ -2522,6 +3627,12 @@ class ActivityRef {
2522
3627
  assert.isTruthy(this.isActivityRealised());
2523
3628
  return this._activity;
2524
3629
  }
3630
+ setFocused(focused) {
3631
+ this.focusedModel.value = focused;
3632
+ }
3633
+ get focused() {
3634
+ return this.focusedModel.value;
3635
+ }
2525
3636
  notifyActivityCreated(activity, nestedInteractionContext) {
2526
3637
  assert.isNil(this._activity);
2527
3638
  this._activity = activity;
@@ -2532,7 +3643,8 @@ class ActivityRef {
2532
3643
  },
2533
3644
  onCancel(error) {
2534
3645
  self.finishActivity(deferred => deferred.reject(error));
2535
- }
3646
+ },
3647
+ focused: this.focusedModel.readonly
2536
3648
  });
2537
3649
  }
2538
3650
  finishActivity(resolveOrReject) {
@@ -2561,7 +3673,7 @@ let ActivityOutletComponent = class ActivityOutletComponent {
2561
3673
  }
2562
3674
  set activityRef(activityRef) {
2563
3675
  if (this.activityRef && !this.activityRef.isComplete()) {
2564
- lang$1.illegalState("changing activity before previous one has completed");
3676
+ lang$1.illegalState('changing activity before previous one has completed');
2565
3677
  }
2566
3678
  this._activityRef = activityRef;
2567
3679
  this.loadActivity(activityRef);
@@ -2618,8 +3730,9 @@ let ActivityContainerComponent = class ActivityContainerComponent extends Abstra
2618
3730
  constructor() {
2619
3731
  super();
2620
3732
  this.dynamicHeight = false;
2621
- this.activityTabs = [];
3733
+ this.activityRefs = [];
2622
3734
  this.garbage = new GarbageCollector();
3735
+ this.inAnimation = new MutableValueModel(false);
2623
3736
  }
2624
3737
  ngOnInit() {
2625
3738
  }
@@ -2651,6 +3764,7 @@ let ActivityContainerComponent = class ActivityContainerComponent extends Abstra
2651
3764
  registerDisposable(disposable) {
2652
3765
  return this.garbage.registerDisposable(disposable);
2653
3766
  }
3767
+ // @Trace()
2654
3768
  dispose() {
2655
3769
  // TODO: think about auto cancelling any outstanding activity on dispose.
2656
3770
  // See NavigationState.Navigating for a use-case.
@@ -2661,7 +3775,7 @@ let ActivityContainerComponent = class ActivityContainerComponent extends Abstra
2661
3775
  if (!this.isActive()) {
2662
3776
  lang$1.illegalState('no activity in progress');
2663
3777
  }
2664
- return ___default.findLast(this.activityTabs, tab => !tab.isComplete());
3778
+ return ___default.findLast(this.activityRefs, tab => !tab.isComplete());
2665
3779
  }
2666
3780
  /**
2667
3781
  * Cancels the current activity and returns true the context is no longer active, false if
@@ -2695,14 +3809,14 @@ let ActivityContainerComponent = class ActivityContainerComponent extends Abstra
2695
3809
  });
2696
3810
  this.launchActivity(activityRef);
2697
3811
  // if this is the first activity let the interaction service know.
2698
- if (this.activityTabs.length === 1) {
3812
+ if (this.activityRefs.length === 1) {
2699
3813
  // console.log('Now active!!!');
2700
3814
  this.interactionServiceApi.notifyActive(this);
2701
3815
  }
2702
3816
  return activityRef.activityResult;
2703
3817
  }
2704
3818
  getActiveActivityCount() {
2705
- return this.activityTabs.filter(ref => !ref.isComplete()).length;
3819
+ return this.activityRefs.filter(ref => !ref.isComplete()).length;
2706
3820
  }
2707
3821
  /**
2708
3822
  * Checks if this interaction context has finished an is in the process of waiting
@@ -2726,7 +3840,7 @@ let ActivityContainerComponent = class ActivityContainerComponent extends Abstra
2726
3840
  // Without this our animation done wasn't called when a single
2727
3841
  // new activity followed a single tab activity (since we're tracking
2728
3842
  // by activity index)
2729
- this.activityTabs = [];
3843
+ this.activityRefs = [];
2730
3844
  const promise = this.interactionServiceApi.notifyFinished(this);
2731
3845
  this._deferredCleanUp = promise
2732
3846
  .finally(() => {
@@ -2736,14 +3850,15 @@ let ActivityContainerComponent = class ActivityContainerComponent extends Abstra
2736
3850
  }
2737
3851
  // @Trace()
2738
3852
  launchActivity(activityRef) {
2739
- const cleanedTabs = this.activityTabs.filter(tab => !tab.isComplete());
2740
- this.activityTabs = cleanedTabs.concat(activityRef);
3853
+ const cleanedTabs = this.activityRefs.filter(tab => !tab.isComplete());
3854
+ this.activityRefs = cleanedTabs.concat(activityRef);
2741
3855
  this.synchroniseSelectedTabIndex();
2742
3856
  }
2743
3857
  activityIndex(index, activityRef) {
2744
3858
  return index;
2745
3859
  }
2746
3860
  ;
3861
+ // @Trace()
2747
3862
  onAnimationFinished() {
2748
3863
  if (this.onAnimationFinishedJob) {
2749
3864
  this.onAnimationFinishedJob();
@@ -2753,14 +3868,20 @@ let ActivityContainerComponent = class ActivityContainerComponent extends Abstra
2753
3868
  /**
2754
3869
  * Synchronises the selected tab index.
2755
3870
  */
3871
+ // @Trace()
2756
3872
  synchroniseSelectedTabIndex() {
2757
3873
  const previousIndex = this.tabs.selectedIndex;
2758
3874
  const newIndex = this.getActiveActivityCount() - 1;
2759
3875
  if (previousIndex !== newIndex) {
3876
+ this.inAnimation.value = true;
3877
+ this.activityRefs[newIndex].setFocused(false);
2760
3878
  this.tabs.selectedIndex = newIndex;
2761
3879
  this.onAnimationFinishedJob = () => {
2762
- this.getSelectedOutlet().component.onActivityReady();
2763
- 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
+ });
2764
3885
  };
2765
3886
  }
2766
3887
  }
@@ -2768,6 +3889,10 @@ let ActivityContainerComponent = class ActivityContainerComponent extends Abstra
2768
3889
  return this.activityOutlets.toArray()[this.tabs.selectedIndex];
2769
3890
  }
2770
3891
  // @Trace()
3892
+ getSelectedTabIndex() {
3893
+ return this.tabs.selectedIndex;
3894
+ }
3895
+ // @Trace()
2771
3896
  triggerTabSynchronisation() {
2772
3897
  if (this.syncSelectedTabTimeout) {
2773
3898
  clearTimeout(this.syncSelectedTabTimeout);
@@ -2790,16 +3915,10 @@ __decorate([
2790
3915
  ViewChildren(ActivityOutletComponent),
2791
3916
  __metadata("design:type", QueryList)
2792
3917
  ], ActivityContainerComponent.prototype, "activityOutlets", void 0);
2793
- __decorate([
2794
- Trace(),
2795
- __metadata("design:type", Function),
2796
- __metadata("design:paramtypes", []),
2797
- __metadata("design:returntype", void 0)
2798
- ], ActivityContainerComponent.prototype, "dispose", null);
2799
3918
  ActivityContainerComponent = __decorate([
2800
3919
  Component({
2801
3920
  selector: 'aup-activity-container',
2802
- 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",
2803
3922
  styles: [":host{display:flex;flex-direction:column}mat-tab-group{flex:1}"]
2804
3923
  }),
2805
3924
  __metadata("design:paramtypes", [])
@@ -3776,13 +4895,16 @@ let PlaceComponent = PlaceComponent_1 = class PlaceComponent extends DisposableC
3776
4895
  super();
3777
4896
  this.visitModel = new MutableValueModel();
3778
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());
3779
4901
  }
3780
4902
  // @Trace()
3781
4903
  initialiseVisit(visit, notifyVisitChanged) {
3782
4904
  assert.isNil(this.visitModel.value);
3783
4905
  const { when } = Dsl.disposeWith(this);
3784
4906
  this.visitModel.value = visit;
3785
- DebugContext.get(this.visitModel).tag(`${this.placeDefinition.component.name}.visitModel`);
4907
+ DebugContext.getOrCreate(this.visitModel).tag(`${this.placeDefinition.component.name}.visitModel`);
3786
4908
  this.placeDefinition.getVisitParameterDefs().forEach(parameterDef => this.installBinding(parameterDef));
3787
4909
  when.valueOf(this.visitModel).changes((current, previous) => {
3788
4910
  notifyVisitChanged(current, previous);
@@ -3821,6 +4943,15 @@ let PlaceComponent = PlaceComponent_1 = class PlaceComponent extends DisposableC
3821
4943
  get childPlaces() {
3822
4944
  return this.placeDefinition.children.map(d => d.component);
3823
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
+ }
3824
4955
  onPlaceReady() {
3825
4956
  }
3826
4957
  };
@@ -4822,70 +5953,6 @@ UrlService = __decorate([
4822
5953
  __metadata("design:paramtypes", [Router, Location, UrlSerializer])
4823
5954
  ], UrlService);
4824
5955
 
4825
- class Visit {
4826
- constructor(placeDefinition, visitParameters = {}) {
4827
- this.placeDefinition = placeDefinition;
4828
- this.visitParameters = visitParameters;
4829
- }
4830
- // @Trace()
4831
- getRouteId() {
4832
- return this.placeDefinition.getRouteIdFrom(this);
4833
- }
4834
- // @Trace()
4835
- hasRouteId() {
4836
- return !isNil(this.getRouteId());
4837
- }
4838
- /**
4839
- * Returns the value of the place parameter with the specified name. The parameter
4840
- * name is taken from the `as` option, e.g. {as: 'aCustomName'} otherwise it is the
4841
- * same as the the ValueModel property name.
4842
- * @param parameterName the field name of the property model or the `as` option if specified.
4843
- */
4844
- getParameter(parameterName) {
4845
- return this.visitParameters[parameterName];
4846
- }
4847
- // @Trace()
4848
- hasParameter(parameterName) {
4849
- return Object.keys(this.visitParameters).includes(parameterName);
4850
- }
4851
- replace(parameter, value) {
4852
- return new Visit(this.placeDefinition, Object.assign(Object.assign({}, this.visitParameters), { [parameter.name]: value }));
4853
- }
4854
- mergeRouteParameters(routeParams) {
4855
- // todo: whitelist parameters.
4856
- const routeParameterKeys = Object.keys(routeParams);
4857
- const params = {};
4858
- this.placeDefinition.getVisitParameterDefs().forEach(def => {
4859
- if (def.isRouteId || def.isRouteParameter) {
4860
- if (routeParameterKeys.includes(def.name)) {
4861
- params[def.name] = routeParams[def.name];
4862
- }
4863
- }
4864
- else {
4865
- // copy non route params as is, but only if they already exist otherwise we'll inject nil values and break the
4866
- // defaults and remember sanitisation process.
4867
- const value = this.getParameter(def.name);
4868
- if (this.hasParameter(def.name)) {
4869
- params[def.name] = value;
4870
- }
4871
- }
4872
- });
4873
- return new Visit(this.placeDefinition, params);
4874
- }
4875
- hasRoutingChangedFrom(other) {
4876
- const samePlace = other.placeDefinition === this.placeDefinition;
4877
- const sameRouteParameters = isEqual(this.placeDefinition.getFormattedRouteParameters(this, true), this.placeDefinition.getFormattedRouteParameters(other, true));
4878
- return !samePlace || !sameRouteParameters;
4879
- }
4880
- hasChangedFrom(other) {
4881
- const sameNonRouteParameters = isEqual(this.placeDefinition.getNonRouteParameters(this), this.placeDefinition.getNonRouteParameters(other));
4882
- return !sameNonRouteParameters || this.hasRoutingChangedFrom(other);
4883
- }
4884
- toDebugString() {
4885
- return Object.keys(this.visitParameters).map(k => `${k}=${this.visitParameters[k]}`).join(",");
4886
- }
4887
- }
4888
-
4889
5956
  let PlaceRouter = class PlaceRouter extends GarbageCollector {
4890
5957
  constructor(angularRouter, angularLocation, interactionService, urlService, placeHistory) {
4891
5958
  super();
@@ -5047,6 +6114,7 @@ let PlaceRouter = class PlaceRouter extends GarbageCollector {
5047
6114
  get activeVisits() {
5048
6115
  return this._activeVisits.readonly;
5049
6116
  }
6117
+ // @Trace()
5050
6118
  pushVisitChangesToRoute(previous, next) {
5051
6119
  return __awaiter(this, void 0, void 0, function* () {
5052
6120
  this.placeHistory.updateVisit(next);
@@ -5143,12 +6211,6 @@ PlaceRouter.ctorParameters = () => [
5143
6211
  { type: PlaceHistory }
5144
6212
  ];
5145
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" });
5146
- __decorate([
5147
- Trace(),
5148
- __metadata("design:type", Function),
5149
- __metadata("design:paramtypes", [Visit, Visit]),
5150
- __metadata("design:returntype", Promise)
5151
- ], PlaceRouter.prototype, "pushVisitChangesToRoute", null);
5152
6214
  PlaceRouter = __decorate([
5153
6215
  Injectable({
5154
6216
  providedIn: 'root'
@@ -5160,6 +6222,70 @@ PlaceRouter = __decorate([
5160
6222
  PlaceHistory])
5161
6223
  ], PlaceRouter);
5162
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
+
5163
6289
  const AUP_PLACE_CONFIG = new InjectionToken('AUP_PLACE_CONFIG');
5164
6290
 
5165
6291
  // Freezes the state of the components at the start of the animation.
@@ -5218,6 +6344,7 @@ let PlaceOutletComponent = class PlaceOutletComponent extends DisposableComponen
5218
6344
  this._activePlaceModel = new MutableValueModel();
5219
6345
  this.initialPlaceIndex = null;
5220
6346
  this._isPushingVisitToRoute = new MutableValueModel(false);
6347
+ this.isVeryFirstLoad = true;
5221
6348
  const { chain, valueOf, before, when, after, observe, switchOn } = Dsl.disposeWith(this);
5222
6349
  this.parentOutletModel = new MutableValueModel(parentOutlet);
5223
6350
  const defaultPlaceAnimationOrder = chain(this.parentOutletModel)
@@ -5226,8 +6353,9 @@ let PlaceOutletComponent = class PlaceOutletComponent extends DisposableComponen
5226
6353
  .pluckList('children')
5227
6354
  .pluck('component');
5228
6355
  const activatePlaceType = chain(this.activePlaceModel).map(p => p.constructor);
5229
- this.placeAnimationOrder = chain(this.customPlaceAnimationOrderModel)
5230
- .otherwise(defaultPlaceAnimationOrder)
6356
+ this.placesInAnimationOrder = chain(this.customPlaceAnimationOrderModel)
6357
+ .otherwise(defaultPlaceAnimationOrder);
6358
+ this.activePlaceAnimationPosition = this.placesInAnimationOrder
5231
6359
  .reduce((placesInOrder) => {
5232
6360
  let placeIndex = 0;
5233
6361
  if (activatePlaceType.value) {
@@ -5238,14 +6366,16 @@ let PlaceOutletComponent = class PlaceOutletComponent extends DisposableComponen
5238
6366
  }
5239
6367
  return isNil(this.initialPlaceIndex) ? 0 : placeIndex - this.initialPlaceIndex;
5240
6368
  }, { dependsOn: activatePlaceType });
6369
+ this.animationSupported = this.placesInAnimationOrder.count().isGreaterThan(0);
6370
+ this.animationEnabled = valueOf.all(this.animateModel, this.animationSupported).areTruthy();
5241
6371
  // Extract our visit model from the place router.
5242
6372
  this._activePlaceDefinition = chain(this._activePlaceModel).pluck('placeDefinition');
5243
6373
  this.routerVisitModel = this._activePlaceDefinition.findIn(chain(placeRouter.activeVisitsByPlaceDefinition));
5244
6374
  this.navigationInProgress = chain(this.placeRouter.navigationInProgress);
5245
- when.valueOf(this.navigationInProgress).becomesFalsey(() => {
6375
+ when(this.navigationInProgress).becomesFalsey(() => {
5246
6376
  this.checkStateAndInitialise();
5247
6377
  });
5248
- when.valueOf(this.outletActivated).becomesTruthy(() => {
6378
+ when(this.outletActivated).becomesTruthy(() => {
5249
6379
  this.checkStateAndInitialise();
5250
6380
  });
5251
6381
  chain(this._activePlaceModel)
@@ -5257,14 +6387,17 @@ let PlaceOutletComponent = class PlaceOutletComponent extends DisposableComponen
5257
6387
  }
5258
6388
  // @Trace()
5259
6389
  getAnimationOrder() {
5260
- return this.placeAnimationOrder.value;
6390
+ return this.activePlaceAnimationPosition.value;
5261
6391
  }
5262
6392
  get animationDuration() {
5263
6393
  return this.placeConfig && this.placeConfig.animationDuration ? this.placeConfig.animationDuration : '500ms';
5264
6394
  }
5265
6395
  // @Trace()
5266
6396
  navigate(visit) {
5267
- // 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
+ // }
5268
6401
  this.placeRouter.navigate(visit, {
5269
6402
  relativeTo: this.parentOutlet ? this.parentOutlet.activatedRouteModel.value : null
5270
6403
  });
@@ -5278,14 +6411,25 @@ let PlaceOutletComponent = class PlaceOutletComponent extends DisposableComponen
5278
6411
  get activatedRouteModel() {
5279
6412
  return this._activatedRouteModel.readonly;
5280
6413
  }
5281
- // @Trace()
5282
6414
  onOutletActivated(routerOutlet, place) {
5283
6415
  this._activatedRouteModel.value = routerOutlet.activatedRoute;
5284
6416
  this._activePlaceModel.value = place;
6417
+ this.validateAnimationState(place);
5285
6418
  this.outletActivated.value = true;
5286
6419
  this.checkStateAndInitialise();
5287
6420
  }
5288
- // @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
+ }
5289
6433
  onOutletDeactivated() {
5290
6434
  this.outletActivated.value = false;
5291
6435
  this._activePlaceModel.value = null;
@@ -5302,16 +6446,24 @@ let PlaceOutletComponent = class PlaceOutletComponent extends DisposableComponen
5302
6446
  this.initialisePlace(routerVisit, activePlace);
5303
6447
  }
5304
6448
  }
5305
- // @Trace()
5306
6449
  initialisePlace(routerVisit, activePlace) {
5307
6450
  const visitModel = new MutableValueModel(routerVisit);
5308
6451
  DebugContext.tag(visitModel, `PlaceOutletComponent[${activePlace.constructor.name})].visitModel`);
5309
6452
  activePlace.initialiseVisit(routerVisit, (current, previous) => {
5310
6453
  this.pushVisitChangeToRoute(previous, current);
5311
6454
  });
5312
- if (!this.animateModel.value) {
5313
- // we're not animating so trigger any post animation callbacks now.
5314
- 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;
5315
6467
  }
5316
6468
  const { when, chain, valueOf } = Dsl.disposeWith(activePlace);
5317
6469
  when.valueOf(this.routerVisitModel)
@@ -5333,8 +6485,9 @@ let PlaceOutletComponent = class PlaceOutletComponent extends DisposableComponen
5333
6485
  }
5334
6486
  // @Trace()
5335
6487
  animationDone() {
5336
- if (this._activePlaceModel.value) {
5337
- this._activePlaceModel.value.onPlaceReady();
6488
+ if (this.onAnimationFinishedJob) {
6489
+ this.onAnimationFinishedJob();
6490
+ this.onAnimationFinishedJob = undefined;
5338
6491
  }
5339
6492
  }
5340
6493
  };
@@ -5368,10 +6521,22 @@ __decorate([
5368
6521
  ViewChild('routeOutlet', { static: true }),
5369
6522
  __metadata("design:type", RouterOutlet)
5370
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);
5371
6536
  PlaceOutletComponent = __decorate([
5372
6537
  Component({
5373
6538
  selector: 'aup-place-outlet',
5374
- 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",
5375
6540
  animations: [LEFT_RIGHT_PLACE_ANIMATION],
5376
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}"]
5377
6542
  }),
@@ -5398,10 +6563,10 @@ let AbstractPlaceNavigationComponent = class AbstractPlaceNavigationComponent ex
5398
6563
  });
5399
6564
  this.activePlaceDefinition = chain(this._activePlaceComponent).pluck('placeDefinition');
5400
6565
  }
5401
- getNav(placeDef) {
6566
+ getNavigationFace(placeDef) {
5402
6567
  const navItem = placeDef.getPlaceData('nav');
5403
6568
  return {
5404
- title: () => navItem ? navItem.title() : placeDef.searchPlaceData(['navTitle', 'title']),
6569
+ text: () => navItem ? navItem.title() : placeDef.searchPlaceData(['navTitle', 'title']),
5405
6570
  tooltip: () => navItem && navItem.tooltip ? navItem.tooltip() : placeDef.getPlaceData('navTooltip', null),
5406
6571
  icon: () => navItem && navItem.icon ? navItem.icon() : placeDef.getPlaceData('navIcon', null)
5407
6572
  };
@@ -5436,7 +6601,7 @@ __decorate([
5436
6601
  __metadata("design:type", Function),
5437
6602
  __metadata("design:paramtypes", [PlaceDefinition]),
5438
6603
  __metadata("design:returntype", Object)
5439
- ], AbstractPlaceNavigationComponent.prototype, "getNav", null);
6604
+ ], AbstractPlaceNavigationComponent.prototype, "getNavigationFace", null);
5440
6605
  AbstractPlaceNavigationComponent = __decorate([
5441
6606
  Component({
5442
6607
  template: ''
@@ -5497,29 +6662,12 @@ ListPlaceNavComponent.ctorParameters = () => [
5497
6662
  ListPlaceNavComponent = __decorate([
5498
6663
  Component({
5499
6664
  selector: 'aup-list-place-nav',
5500
- 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",
5501
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)}"]
5502
6667
  }),
5503
6668
  __metadata("design:paramtypes", [PlaceRouter])
5504
6669
  ], ListPlaceNavComponent);
5505
6670
 
5506
- let TabbedPlaceNavigationComponent = class TabbedPlaceNavigationComponent extends AbstractPlaceNavigationComponent {
5507
- constructor(placeRouter) {
5508
- super(placeRouter);
5509
- }
5510
- };
5511
- TabbedPlaceNavigationComponent.ctorParameters = () => [
5512
- { type: PlaceRouter }
5513
- ];
5514
- TabbedPlaceNavigationComponent = __decorate([
5515
- Component({
5516
- selector: 'aup-tabbed-place-navigation',
5517
- 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",
5518
- styles: [""]
5519
- }),
5520
- __metadata("design:paramtypes", [PlaceRouter])
5521
- ], TabbedPlaceNavigationComponent);
5522
-
5523
6671
  /**
5524
6672
  * @example
5525
6673
  * // Usage
@@ -5558,7 +6706,7 @@ TabbedPlaceNavigationComponent = __decorate([
5558
6706
  * (at)Place({
5559
6707
  * path: 'myPlace',
5560
6708
  * data: {
5561
- * nav: I18n.places.myPlace.nav()
6709
+ * nav: I18n.places.myPlace.nav
5562
6710
  * }
5563
6711
  * })
5564
6712
  */
@@ -5593,12 +6741,29 @@ __decorate([
5593
6741
  SidePlaceNavigationComponent = __decorate([
5594
6742
  Component({
5595
6743
  selector: 'aup-side-place-navigation',
5596
- 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",
5597
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)}"]
5598
6746
  }),
5599
6747
  __metadata("design:paramtypes", [Router, PlaceRouter])
5600
6748
  ], SidePlaceNavigationComponent);
5601
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
+
5602
6767
  let PlaceModule = class PlaceModule {
5603
6768
  };
5604
6769
  PlaceModule = __decorate([
@@ -6045,8 +7210,7 @@ function installMechanics(prototype, propertyKey, backingModel, tagPrefix, isEmp
6045
7210
  binding: null
6046
7211
  };
6047
7212
  const tag = `${tagPrefix}(${prototype.constructor.name}.${propertyKey.toString()})`;
6048
- DebugContext.get(mechanics.backingModel).tag(tag);
6049
- Logger.get(mechanics.backingModel).tag(tag);
7213
+ DebugContext.getOrCreate(mechanics.backingModel).tag(tag);
6050
7214
  Object.defineProperty(prototype, propertyKey, {
6051
7215
  get: function () {
6052
7216
  return mechanics.backingModel;
@@ -6108,5 +7272,5 @@ function VisitParameterList(options) {
6108
7272
  * Generated bundle index. Do not edit.
6109
7273
  */
6110
7274
 
6111
- export { ACTIVITY_DATA, AUP_PLACE_CONFIG, AbstractInputActivity, AbstractInputComponent, AbstractInteractionContext, AbstractListInputComponent, AbstractPlaceNavigationComponent, AbstractPopStateNavigation, AbstractValueInputComponent, Activity, ActivityActionsComponent, ActivityContainerComponent, ActivityOutletComponent, ActivityRef, AddItemInteractionContextComponent, AlertDialogComponent, AngularUiPowerupsModule, Bounds, BusyOverlayComponent, CELL_EDITOR_PORTAL, CELL_RENDERER_PORTAL, CardContainerComponent, CellEditorPortalRef, CellHeaderPortalRef, CellPortalRef, CellRendererPortalRef, CheckboxInputComponent, ColumnModel, ColumnTemplateDirective, CommandDirective, ComponentCellRendererPortalRef, ComponentsModule, ConfirmThenDialogComponent, ConfirmationDialogComponent, ConsolidatedParameterMap, CustomTemplateColumnModel, CustomValueColumnModel, DEFINITION_META_DATA_KEY, DIALOG_INTERACTION_SERVICE_DEFAULTS, DefaultCellRendererComponent, DefaultHeaderCellRendererComponent, DialogInteractionContext, DialogInteractionContextFactory, Dimension, DirectivesModule, DisposableComponent, EditRowControls, EditSession, EditorControlColumnModel, EmptyStateComponent, EventCleanUpSession, FocusBinding, FocusBindingDirective, FocusBindingFactory, FocusContainerComponent, FocusableComponent, Formatter, HEADER_CELL_RENDERER_PORTAL, IconComponent, InPlaceInteractionContextComponent, InteractionContextTriggerFor, InteractionModule, InteractionService, InteractionServiceRoutingAdapter, LEFT_RIGHT_PLACE_ANIMATION, ListPlaceNavComponent, ListPropertyColumnModel, ModalInteractionContextFactory, MultipleSelectInputComponent, Navigating, NavigatingDuringInteraction, NavigationContext, NavigationSession, NoopAuthGuard, NoopComponent, NumberInputComponent, PORTAL_EDITOR_COMPONENT, PORTAL_RENDERER_COMPONENT, ParameterDefinition, PasswordInputComponent, Place, PlaceComponent, PlaceComponentDeactivationHandler, PlaceDefinition, PlaceGuard, PlaceHistory, PlaceModule, PlaceOutletComponent, PlaceRouter, Point, PopStateDuringInteractionNavigation, PopStateNavigation, PopupInteractionContextComponent, PropertyColumnModel, ROUTE_PARAMETER_LIST_KEY, RemoveLastInteractionFromUrlNavigationSession, ResizeAwareComponent, RouteId, ScrollContainerComponent, SectionHeaderComponent, SelectCellRendererComponent, SelectHeaderCellRendererComponent, SelectInputActivity, SelectInputComponent, SelectionColumnModel, SidePlaceNavigationComponent, StringInputActivity, StringInputComponent, SwitchCaseComponent, SwitchCaseDefaultDirective, SwitchCaseOption, SwitchCaseWhenDirective, SynchroniseInteractionContextIdsWithRoute, TabbedPlaceNavigationComponent, TableCellRendererComponent, TableComponent, TableHeaderCellRendererComponent, TableModel, TemplateCellRendererPortalRef, TextInputComponent, UrlService, UrlSnapshot, VerticalFocusContainerComponent, Visit, VisitParameter, VisitParameterList, VisitSanitiser, WaitUntilLeavingInteractionTransitionCancelled, WaitUntilLinkTriggeredNavigationInteractionCancellationEventsFinish, WaitUntilPopStateDuringCanDeactivateInteractionFinishes, leftRightPlaceAnimation, slideDownOnEnterAnimation, slideRightOnEnterAnimation, ɵ0, DirectivesModule as ɵa, CommandDirective as ɵb, EditRowControls as ɵba, ColumnTemplateDirective as ɵbb, DefaultCellRendererComponent as ɵbc, TableCellRendererComponent as ɵbd, SelectCellRendererComponent as ɵbe, SelectHeaderCellRendererComponent as ɵbf, DefaultHeaderCellRendererComponent as ɵbg, TableHeaderCellRendererComponent as ɵbh, MultipleSelectInputComponent as ɵbi, IconComponent as ɵbj, SectionHeaderComponent as ɵbk, PlaceModule as ɵbl, ComponentsModule as ɵbm, EmptyStateComponent as ɵbn, BusyOverlayComponent as ɵbo, PlaceOutletComponent as ɵbp, leftRightPlaceAnimation as ɵbq, LEFT_RIGHT_PLACE_ANIMATION as ɵbr, AUP_PLACE_CONFIG as ɵbs, PlaceRouter as ɵbu, InteractionService as ɵbv, ModalInteractionContextFactory as ɵbw, UrlService as ɵbx, PlaceHistory as ɵby, TabbedPlaceNavigationComponent as ɵbz, FocusBindingDirective as ɵc, AbstractPlaceNavigationComponent as ɵca, ListPlaceNavComponent as ɵcb, SidePlaceNavigationComponent as ɵcc, InteractionModule as ɵcd, ActivityContainerComponent as ɵce, AbstractInteractionContext as ɵcf, ActivityOutletComponent as ɵcg, ConfirmationDialogComponent as ɵch, ACTIVITY_DATA as ɵci, Activity as ɵcj, ConfirmThenDialogComponent as ɵcl, AlertDialogComponent as ɵcm, InPlaceInteractionContextComponent as ɵco, AddItemInteractionContextComponent as ɵcp, ActivityActionsComponent as ɵcq, PopupInteractionContextComponent as ɵcr, StringInputActivity as ɵcs, AbstractInputActivity as ɵct, SelectInputActivity as ɵcu, InteractionContextTriggerFor as ɵcv, DisposableComponent as ɵd, FocusBindingFactory as ɵe, ComponentsModule as ɵf, AbstractInputComponent as ɵg, AbstractValueInputComponent as ɵh, AbstractListInputComponent as ɵi, NumberInputComponent as ɵj, StringInputComponent as ɵk, TextInputComponent as ɵl, PasswordInputComponent as ɵm, SelectInputComponent as ɵn, CheckboxInputComponent as ɵo, ScrollContainerComponent as ɵp, NoopComponent as ɵq, SwitchCaseOption as ɵr, SwitchCaseWhenDirective as ɵs, SwitchCaseDefaultDirective as ɵt, SwitchCaseComponent as ɵu, FocusContainerComponent as ɵv, VerticalFocusContainerComponent as ɵw, FocusableComponent as ɵx, CardContainerComponent as ɵy, TableComponent as ɵz };
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 };
6112
7276
  //# sourceMappingURL=coolon-angular-ui-powerups.js.map