@coolon/angular-ui-powerups 0.0.26 → 0.0.27

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 (286) hide show
  1. package/bundles/coolon-angular-ui-powerups.umd.js +3926 -0
  2. package/bundles/coolon-angular-ui-powerups.umd.js.map +1 -0
  3. package/bundles/coolon-angular-ui-powerups.umd.min.js +2 -0
  4. package/bundles/coolon-angular-ui-powerups.umd.min.js.map +1 -0
  5. package/coolon-angular-ui-powerups.d.ts +30 -0
  6. package/coolon-angular-ui-powerups.metadata.json +1 -0
  7. package/esm2015/coolon-angular-ui-powerups.js +33 -0
  8. package/esm2015/index.js +6 -0
  9. package/esm2015/lib/angular-ui-powerups.module.js +54 -0
  10. package/esm2015/lib/animations/index.js +9 -0
  11. package/esm2015/lib/animations/slideDownAndUpAnimation.js +30 -0
  12. package/esm2015/lib/components/disposable-component.js +14 -0
  13. package/esm2015/lib/components/forms/abstract-input.component.js +183 -0
  14. package/esm2015/lib/components/forms/number-input/number-input.component.js +26 -0
  15. package/esm2015/lib/components/forms/password-input/password-input.component.js +26 -0
  16. package/esm2015/lib/components/forms/select-input/select-input.component.js +60 -0
  17. package/esm2015/lib/components/forms/string-input/string-input.component.js +26 -0
  18. package/esm2015/lib/components/index.js +18 -0
  19. package/esm2015/lib/components/resize-aware.component.js +96 -0
  20. package/esm2015/lib/components/types/bounds.class.js +56 -0
  21. package/esm2015/lib/components/types/dimension.class.js +21 -0
  22. package/esm2015/lib/components/types/point.class.js +36 -0
  23. package/esm2015/lib/directives/command.directive.js +135 -0
  24. package/esm2015/lib/directives/focus-binding.directive.js +179 -0
  25. package/esm2015/lib/directives/index.js +10 -0
  26. package/esm2015/lib/interaction/abstract-activity.js +129 -0
  27. package/esm2015/lib/interaction/activity.js +27 -0
  28. package/esm2015/lib/interaction/alert.js +23 -0
  29. package/esm2015/lib/interaction/components/activity-container/activity-container.component.js +144 -0
  30. package/esm2015/lib/interaction/components/activity-outlet/activity-outlet-context.js +22 -0
  31. package/esm2015/lib/interaction/components/activity-outlet/activity-outlet.component.js +169 -0
  32. package/esm2015/lib/interaction/components/alert-dialog/alert-dialog.component.js +37 -0
  33. package/esm2015/lib/interaction/components/confirmation-dialog/confirmation-dialog.component.js +46 -0
  34. package/esm2015/lib/interaction/confirm.js +17 -0
  35. package/esm2015/lib/interaction/index.js +21 -0
  36. package/esm2015/lib/interaction/interaction-context.js +35 -0
  37. package/esm2015/lib/interaction/interaction.module.js +41 -0
  38. package/esm2015/lib/interaction/result.js +24 -0
  39. package/esm2015/lib/interaction/services/dialog-interaction.service.js +114 -0
  40. package/esm2015/lib/place/abstract-place-component.js +59 -0
  41. package/esm2015/lib/place/components/busy-overlay/busy-overlay.component.js +44 -0
  42. package/esm2015/lib/place/components/empty-state/empty-state.component.js +28 -0
  43. package/esm2015/lib/place/components/place-outlet/place-outlet.component.js +67 -0
  44. package/esm2015/lib/place/components/place-outlet/route-animations.js +35 -0
  45. package/esm2015/lib/place/components/tabbed-place-navigation/tabbed-place-navigation.component.js +50 -0
  46. package/esm2015/lib/place/guards/leave-place.guard.js +52 -0
  47. package/esm2015/lib/place/guards/place-route.guard.js +74 -0
  48. package/esm2015/lib/place/index.js +27 -0
  49. package/esm2015/lib/place/place-component.js +17 -0
  50. package/esm2015/lib/place/place.decorator.js +72 -0
  51. package/esm2015/lib/place/place.module.js +49 -0
  52. package/esm2015/lib/place/place.service.js +61 -0
  53. package/esm2015/lib/place/route/json-types.js +13 -0
  54. package/esm2015/lib/place/route/parameter-decorators.js +178 -0
  55. package/esm2015/lib/place/route/parameter-definition.class.js +24 -0
  56. package/esm2015/lib/place/route/parameter-sanitiser.js +17 -0
  57. package/esm2015/lib/place/route/parameter-type.js +43 -0
  58. package/esm2015/lib/place/route/route-parameter-bindings.js +294 -0
  59. package/esm2015/lib/place/route/route-parameter-sanitiser.js +280 -0
  60. package/esm2015/public_api.js +11 -0
  61. package/esm5/coolon-angular-ui-powerups.js +33 -0
  62. package/esm5/index.js +6 -0
  63. package/esm5/lib/angular-ui-powerups.module.js +58 -0
  64. package/esm5/lib/animations/index.js +9 -0
  65. package/esm5/lib/animations/slideDownAndUpAnimation.js +30 -0
  66. package/esm5/lib/components/disposable-component.js +24 -0
  67. package/esm5/lib/components/forms/abstract-input.component.js +232 -0
  68. package/esm5/lib/components/forms/number-input/number-input.component.js +33 -0
  69. package/esm5/lib/components/forms/password-input/password-input.component.js +33 -0
  70. package/esm5/lib/components/forms/select-input/select-input.component.js +67 -0
  71. package/esm5/lib/components/forms/string-input/string-input.component.js +33 -0
  72. package/esm5/lib/components/index.js +18 -0
  73. package/esm5/lib/components/resize-aware.component.js +124 -0
  74. package/esm5/lib/components/types/bounds.class.js +59 -0
  75. package/esm5/lib/components/types/dimension.class.js +19 -0
  76. package/esm5/lib/components/types/point.class.js +43 -0
  77. package/esm5/lib/directives/command.directive.js +155 -0
  78. package/esm5/lib/directives/focus-binding.directive.js +231 -0
  79. package/esm5/lib/directives/index.js +10 -0
  80. package/esm5/lib/interaction/abstract-activity.js +173 -0
  81. package/esm5/lib/interaction/activity.js +27 -0
  82. package/esm5/lib/interaction/alert.js +23 -0
  83. package/esm5/lib/interaction/components/activity-container/activity-container.component.js +181 -0
  84. package/esm5/lib/interaction/components/activity-outlet/activity-outlet-context.js +22 -0
  85. package/esm5/lib/interaction/components/activity-outlet/activity-outlet.component.js +206 -0
  86. package/esm5/lib/interaction/components/alert-dialog/alert-dialog.component.js +42 -0
  87. package/esm5/lib/interaction/components/confirmation-dialog/confirmation-dialog.component.js +54 -0
  88. package/esm5/lib/interaction/confirm.js +17 -0
  89. package/esm5/lib/interaction/index.js +21 -0
  90. package/esm5/lib/interaction/interaction-context.js +45 -0
  91. package/esm5/lib/interaction/interaction.module.js +45 -0
  92. package/esm5/lib/interaction/result.js +24 -0
  93. package/esm5/lib/interaction/services/dialog-interaction.service.js +140 -0
  94. package/esm5/lib/place/abstract-place-component.js +66 -0
  95. package/esm5/lib/place/components/busy-overlay/busy-overlay.component.js +49 -0
  96. package/esm5/lib/place/components/empty-state/empty-state.component.js +29 -0
  97. package/esm5/lib/place/components/place-outlet/place-outlet.component.js +81 -0
  98. package/esm5/lib/place/components/place-outlet/route-animations.js +35 -0
  99. package/esm5/lib/place/components/tabbed-place-navigation/tabbed-place-navigation.component.js +57 -0
  100. package/esm5/lib/place/guards/leave-place.guard.js +57 -0
  101. package/esm5/lib/place/guards/place-route.guard.js +78 -0
  102. package/esm5/lib/place/index.js +27 -0
  103. package/esm5/lib/place/place-component.js +17 -0
  104. package/esm5/lib/place/place.decorator.js +69 -0
  105. package/esm5/lib/place/place.module.js +53 -0
  106. package/esm5/lib/place/place.service.js +75 -0
  107. package/esm5/lib/place/route/json-types.js +13 -0
  108. package/esm5/lib/place/route/parameter-decorators.js +178 -0
  109. package/esm5/lib/place/route/parameter-definition.class.js +24 -0
  110. package/esm5/lib/place/route/parameter-sanitiser.js +17 -0
  111. package/esm5/lib/place/route/parameter-type.js +65 -0
  112. package/esm5/lib/place/route/route-parameter-bindings.js +339 -0
  113. package/esm5/lib/place/route/route-parameter-sanitiser.js +395 -0
  114. package/esm5/public_api.js +11 -0
  115. package/fesm2015/coolon-angular-ui-powerups.js +3145 -0
  116. package/fesm2015/coolon-angular-ui-powerups.js.map +1 -0
  117. package/fesm5/coolon-angular-ui-powerups.js +3699 -0
  118. package/fesm5/coolon-angular-ui-powerups.js.map +1 -0
  119. package/lib/angular-ui-powerups.module.d.ts +2 -0
  120. package/{src/lib/animations/index.ts → lib/animations/index.d.ts} +0 -1
  121. package/lib/animations/slideDownAndUpAnimation.d.ts +5 -0
  122. package/lib/components/disposable-component.d.ts +5 -0
  123. package/lib/components/forms/abstract-input.component.d.ts +35 -0
  124. package/lib/components/forms/number-input/number-input.component.d.ts +6 -0
  125. package/lib/components/forms/password-input/password-input.component.d.ts +6 -0
  126. package/lib/components/forms/select-input/select-input.component.d.ts +11 -0
  127. package/lib/components/forms/string-input/string-input.component.d.ts +6 -0
  128. package/{src/lib/components/index.ts → lib/components/index.d.ts} +0 -1
  129. package/lib/components/resize-aware.component.d.ts +22 -0
  130. package/lib/components/types/bounds.class.d.ts +16 -0
  131. package/lib/components/types/dimension.class.d.ts +5 -0
  132. package/lib/components/types/point.class.d.ts +10 -0
  133. package/lib/directives/command.directive.d.ts +14 -0
  134. package/lib/directives/focus-binding.directive.d.ts +22 -0
  135. package/{src/lib/directives/index.ts → lib/directives/index.d.ts} +0 -1
  136. package/lib/interaction/abstract-activity.d.ts +17 -0
  137. package/lib/interaction/activity.d.ts +11 -0
  138. package/lib/interaction/alert.d.ts +5 -0
  139. package/lib/interaction/components/activity-container/activity-container.component.d.ts +32 -0
  140. package/{src/lib/interaction/components/activity-outlet/activity-outlet-context.ts → lib/interaction/components/activity-outlet/activity-outlet-context.d.ts} +5 -7
  141. package/lib/interaction/components/activity-outlet/activity-outlet.component.d.ts +30 -0
  142. package/lib/interaction/components/alert-dialog/alert-dialog.component.d.ts +8 -0
  143. package/lib/interaction/components/confirmation-dialog/confirmation-dialog.component.d.ts +9 -0
  144. package/{src/lib/interaction/confirm.ts → lib/interaction/confirm.d.ts} +2 -3
  145. package/{src/lib/interaction/index.ts → lib/interaction/index.d.ts} +0 -1
  146. package/lib/interaction/interaction-context.d.ts +11 -0
  147. package/lib/interaction/interaction.module.d.ts +2 -0
  148. package/lib/interaction/result.d.ts +8 -0
  149. package/lib/interaction/services/dialog-interaction.service.d.ts +14 -0
  150. package/lib/place/abstract-place-component.d.ts +13 -0
  151. package/lib/place/components/busy-overlay/busy-overlay.component.d.ts +8 -0
  152. package/lib/place/components/empty-state/empty-state.component.d.ts +5 -0
  153. package/lib/place/components/place-outlet/place-outlet.component.d.ts +13 -0
  154. package/lib/place/components/place-outlet/route-animations.d.ts +1 -0
  155. package/lib/place/components/tabbed-place-navigation/tabbed-place-navigation.component.d.ts +11 -0
  156. package/lib/place/guards/leave-place.guard.d.ts +10 -0
  157. package/lib/place/guards/place-route.guard.d.ts +9 -0
  158. package/{src/lib/place/index.ts → lib/place/index.d.ts} +0 -1
  159. package/lib/place/place-component.d.ts +5 -0
  160. package/lib/place/place.decorator.d.ts +20 -0
  161. package/lib/place/place.module.d.ts +2 -0
  162. package/lib/place/place.service.d.ts +8 -0
  163. package/lib/place/route/json-types.d.ts +7 -0
  164. package/lib/place/route/parameter-decorators.d.ts +26 -0
  165. package/lib/place/route/parameter-definition.class.d.ts +11 -0
  166. package/{src/lib/place/route/parameter-sanitiser.ts → lib/place/route/parameter-sanitiser.d.ts} +1 -1
  167. package/lib/place/route/parameter-type.d.ts +16 -0
  168. package/lib/place/route/route-parameter-bindings.d.ts +18 -0
  169. package/lib/place/route/route-parameter-sanitiser.d.ts +42 -0
  170. package/package.json +14 -12
  171. package/schematics/ng-add/index.d.ts +2 -0
  172. package/schematics/ng-add/index.js +12 -0
  173. package/schematics/ng-add/index.js.map +1 -0
  174. package/schematics/place-routes/index.d.ts +3 -0
  175. package/schematics/place-routes/index.js +114 -0
  176. package/schematics/place-routes/index.js.map +1 -0
  177. package/schematics/place-routes/place-def.d.ts +34 -0
  178. package/schematics/place-routes/place-def.js +84 -0
  179. package/schematics/place-routes/place-def.js.map +1 -0
  180. package/schematics/place-routes/scanner.d.ts +26 -0
  181. package/schematics/place-routes/scanner.js +125 -0
  182. package/schematics/place-routes/scanner.js.map +1 -0
  183. package/schematics/place-routes/schema.d.ts +7 -0
  184. package/schematics/place-routes/schema.js +3 -0
  185. package/schematics/place-routes/schema.js.map +1 -0
  186. package/CHANGELOG.md +0 -7
  187. package/jest.config.js +0 -9
  188. package/ng-package.json +0 -13
  189. package/schematics/ng-add/index.ts +0 -10
  190. package/schematics/place-routes/index.ts +0 -152
  191. package/schematics/place-routes/place-def.ts +0 -93
  192. package/schematics/place-routes/scanner.ts +0 -145
  193. package/schematics/place-routes/schema.ts +0 -7
  194. package/src/lib/angular-ui-powerups.module.spec.ts +0 -14
  195. package/src/lib/angular-ui-powerups.module.ts +0 -49
  196. package/src/lib/animations/slideDownAndUpAnimation.ts +0 -39
  197. package/src/lib/components/disposable-component.ts +0 -9
  198. package/src/lib/components/forms/abstract-input.component.ts +0 -108
  199. package/src/lib/components/forms/number-input/number-input.component.html +0 -15
  200. package/src/lib/components/forms/number-input/number-input.component.scss +0 -3
  201. package/src/lib/components/forms/number-input/number-input.component.spec.ts +0 -25
  202. package/src/lib/components/forms/number-input/number-input.component.ts +0 -19
  203. package/src/lib/components/forms/password-input/password-input.component.html +0 -16
  204. package/src/lib/components/forms/password-input/password-input.component.scss +0 -3
  205. package/src/lib/components/forms/password-input/password-input.component.spec.ts +0 -25
  206. package/src/lib/components/forms/password-input/password-input.component.ts +0 -18
  207. package/src/lib/components/forms/scss/mixins.scss +0 -16
  208. package/src/lib/components/forms/select-input/select-input.component.html +0 -16
  209. package/src/lib/components/forms/select-input/select-input.component.scss +0 -7
  210. package/src/lib/components/forms/select-input/select-input.component.spec.ts +0 -25
  211. package/src/lib/components/forms/select-input/select-input.component.ts +0 -31
  212. package/src/lib/components/forms/string-input/string-input.component.html +0 -15
  213. package/src/lib/components/forms/string-input/string-input.component.scss +0 -3
  214. package/src/lib/components/forms/string-input/string-input.component.spec.ts +0 -25
  215. package/src/lib/components/forms/string-input/string-input.component.ts +0 -18
  216. package/src/lib/components/resize-aware.component.ts +0 -52
  217. package/src/lib/components/types/bounds.class.ts +0 -25
  218. package/src/lib/components/types/dimension.class.ts +0 -3
  219. package/src/lib/components/types/point.class.ts +0 -13
  220. package/src/lib/directives/command.directive.spec.ts +0 -73
  221. package/src/lib/directives/command.directive.ts +0 -81
  222. package/src/lib/directives/focus-binding.directive.spec.ts +0 -8
  223. package/src/lib/directives/focus-binding.directive.ts +0 -108
  224. package/src/lib/interaction/abstract-activity.ts +0 -57
  225. package/src/lib/interaction/activity.ts +0 -17
  226. package/src/lib/interaction/alert.ts +0 -6
  227. package/src/lib/interaction/components/activity-container/activity-container.component.html +0 -8
  228. package/src/lib/interaction/components/activity-container/activity-container.component.scss +0 -3
  229. package/src/lib/interaction/components/activity-container/activity-container.component.spec.ts +0 -25
  230. package/src/lib/interaction/components/activity-container/activity-container.component.ts +0 -93
  231. package/src/lib/interaction/components/activity-outlet/activity-outlet.component.scss +0 -3
  232. package/src/lib/interaction/components/activity-outlet/activity-outlet.component.spec.ts +0 -25
  233. package/src/lib/interaction/components/activity-outlet/activity-outlet.component.ts +0 -96
  234. package/src/lib/interaction/components/alert-dialog/alert-dialog.component.html +0 -7
  235. package/src/lib/interaction/components/alert-dialog/alert-dialog.component.scss +0 -7
  236. package/src/lib/interaction/components/alert-dialog/alert-dialog.component.spec.ts +0 -25
  237. package/src/lib/interaction/components/alert-dialog/alert-dialog.component.ts +0 -20
  238. package/src/lib/interaction/components/confirmation-dialog/confirmation-dialog.component.html +0 -9
  239. package/src/lib/interaction/components/confirmation-dialog/confirmation-dialog.component.scss +0 -8
  240. package/src/lib/interaction/components/confirmation-dialog/confirmation-dialog.component.spec.ts +0 -25
  241. package/src/lib/interaction/components/confirmation-dialog/confirmation-dialog.component.ts +0 -26
  242. package/src/lib/interaction/interaction-context.ts +0 -16
  243. package/src/lib/interaction/interaction.module.ts +0 -35
  244. package/src/lib/interaction/result.ts +0 -16
  245. package/src/lib/interaction/services/dialog-interaction.service.scss +0 -11
  246. package/src/lib/interaction/services/dialog-interaction.service.spec.ts +0 -12
  247. package/src/lib/interaction/services/dialog-interaction.service.ts +0 -63
  248. package/src/lib/place/abstract-place-component.ts +0 -33
  249. package/src/lib/place/components/busy-overlay/busy-overlay.component.html +0 -4
  250. package/src/lib/place/components/busy-overlay/busy-overlay.component.scss +0 -27
  251. package/src/lib/place/components/busy-overlay/busy-overlay.component.spec.ts +0 -25
  252. package/src/lib/place/components/busy-overlay/busy-overlay.component.ts +0 -23
  253. package/src/lib/place/components/empty-state/empty-state.component.scss +0 -15
  254. package/src/lib/place/components/empty-state/empty-state.component.spec.ts +0 -25
  255. package/src/lib/place/components/empty-state/empty-state.component.ts +0 -19
  256. package/src/lib/place/components/place-outlet/place-outlet.component.html +0 -7
  257. package/src/lib/place/components/place-outlet/place-outlet.component.scss +0 -12
  258. package/src/lib/place/components/place-outlet/place-outlet.component.spec.ts +0 -25
  259. package/src/lib/place/components/place-outlet/place-outlet.component.ts +0 -37
  260. package/src/lib/place/components/place-outlet/route-animations.ts +0 -30
  261. package/src/lib/place/components/tabbed-place-navigation/tabbed-place-navigation.component.html +0 -7
  262. package/src/lib/place/components/tabbed-place-navigation/tabbed-place-navigation.component.scss +0 -100
  263. package/src/lib/place/components/tabbed-place-navigation/tabbed-place-navigation.component.spec.ts +0 -25
  264. package/src/lib/place/components/tabbed-place-navigation/tabbed-place-navigation.component.ts +0 -30
  265. package/src/lib/place/guards/leave-place.guard.spec.ts +0 -15
  266. package/src/lib/place/guards/leave-place.guard.ts +0 -18
  267. package/src/lib/place/guards/place-route.guard.ts +0 -37
  268. package/src/lib/place/place-component.ts +0 -6
  269. package/src/lib/place/place.decorator.ts +0 -40
  270. package/src/lib/place/place.module.ts +0 -44
  271. package/src/lib/place/place.service.spec.ts +0 -12
  272. package/src/lib/place/place.service.ts +0 -29
  273. package/src/lib/place/route/json-types.ts +0 -5
  274. package/src/lib/place/route/parameter-decorators.ts +0 -99
  275. package/src/lib/place/route/parameter-definition.class.ts +0 -12
  276. package/src/lib/place/route/parameter-type.ts +0 -31
  277. package/src/lib/place/route/route-parameter-bindings.ts +0 -140
  278. package/src/lib/place/route/route-parameter-sanitiser.ts +0 -135
  279. package/src/test-setup.ts +0 -1
  280. package/tsconfig.json +0 -7
  281. package/tsconfig.lib.json +0 -20
  282. package/tsconfig.schematics.json +0 -35
  283. package/tsconfig.spec.json +0 -10
  284. package/tslint.json +0 -7
  285. /package/{src/index.ts → index.d.ts} +0 -0
  286. /package/{src/public_api.ts → public_api.d.ts} +0 -0
@@ -1,81 +0,0 @@
1
- import { AfterViewInit, Directive, ElementRef, HostListener, Inject, Input, OnDestroy, OnInit } from '@angular/core';
2
- import { assert, Command, Dsl, GarbageCollector, lang, UnaryCommand } from '@coolon/pectin';
3
-
4
- @Directive({
5
- // tslint:disable-next-line:directive-selector
6
- selector: '[pectinCommand]'
7
- })
8
- export class CommandDirective<P = any> extends GarbageCollector implements OnInit, OnDestroy, AfterViewInit {
9
-
10
- @Input()
11
- pectinCommand: Command<any> | UnaryCommand<P>;
12
-
13
- private _commandParameter:P;
14
- private _commandParameterProvided = false;
15
-
16
- @Input()
17
- set commandParameter(value: P) {
18
- this._commandParameterProvided = true;
19
- this._commandParameter = value;
20
- }
21
-
22
- get commandParameter(): P {
23
- return this._commandParameter;
24
- }
25
-
26
- constructor(@Inject(ElementRef) private elementRef: ElementRef) {
27
- super();
28
- }
29
-
30
- ngOnInit(): void {
31
- assert.notNil(this.pectinCommand);
32
- if (this.pectinCommand instanceof UnaryCommand) {
33
- if (!this._commandParameterProvided) {
34
- lang.illegalState('UnaryCommands required the command parameter to be specified.');
35
- }
36
- } else {
37
- if (this._commandParameterProvided) {
38
- lang.illegalState('command parameters are only supported by UnaryCommands');
39
- }
40
- }
41
- }
42
-
43
- ngAfterViewInit(): void {
44
- // for some reason mat-buttons kills the disabled host binding. It works on a regular button but for now
45
- // we need to do this.
46
- const { chain } = Dsl.disposeWith(this);
47
- chain(this.pectinCommand.enabled).subscribe(enabled => {
48
- if (enabled) {
49
- this.elementRef.nativeElement.removeAttribute('disabled');
50
- if (this.elementRef.nativeElement.tagName === 'A') {
51
- this.elementRef.nativeElement.setAttribute('href', 'javascript:void');
52
- }
53
- } else {
54
- this.elementRef.nativeElement.setAttribute('disabled', 'disabled');
55
- if (this.elementRef.nativeElement.tagName === 'A') {
56
- this.elementRef.nativeElement.removeAttribute('href');
57
- }
58
- }
59
- });
60
- }
61
-
62
- ngOnDestroy(): void {
63
- this.dispose();
64
- }
65
-
66
-
67
- @HostListener('click', ['$event'])
68
- notifyClick($event: Event) {
69
- $event.preventDefault();
70
- $event.stopPropagation();
71
- if (this.pectinCommand.enabled.value) {
72
- if (this.pectinCommand instanceof UnaryCommand) {
73
- this.pectinCommand.withContext({ event: $event }).execute(this.commandParameter);
74
- } else {
75
- this.pectinCommand.withContext({ event: $event }).execute();
76
- }
77
- } else {
78
- console.warn('disabled command clicked, ignoring.');
79
- }
80
- }
81
- }
@@ -1,8 +0,0 @@
1
- import { FocusBindingDirective } from './focus-binding.directive';
2
-
3
- describe('FocusBindingDirective', () => {
4
- it('should create an instance', () => {
5
- const directive = new FocusBindingDirective(null, null);
6
- expect(directive).toBeTruthy();
7
- });
8
- });
@@ -1,108 +0,0 @@
1
- import {DOCUMENT} from '@angular/common';
2
- import {AfterViewInit, Directive, ElementRef, HostListener, Inject, Input, NgZone, OnInit} from '@angular/core';
3
- import {Dsl, HasFocusTracking, Logger} from '@coolon/pectin';
4
- import {DisposableComponent} from '../components/disposable-component';
5
-
6
-
7
- @Directive({
8
- // tslint:disable-next-line:directive-selector
9
- selector: '[pectinFocusBinding]'
10
- })
11
- export class FocusBindingDirective extends DisposableComponent implements OnInit, AfterViewInit {
12
-
13
- private readonly document: Document;
14
-
15
- @Input() pectinFocusBinding: HasFocusTracking;
16
- @Input() focusBindingTarget: HTMLElement;
17
-
18
- @HostListener('focusin')
19
- onFocusIn() {
20
- if (this.hasBinding()) {
21
- this.pectinFocusBinding.focusContext.notifyFocusIn();
22
- }
23
- }
24
-
25
- @HostListener('focusout')
26
- onFocusOut() {
27
- if (this.hasBinding()) {
28
- this.pectinFocusBinding.focusContext.notifyFocusOut();
29
- }
30
- }
31
-
32
- constructor(@Inject(ElementRef) private readonly el: ElementRef,
33
- @Inject(NgZone) private readonly ngZone: NgZone,
34
- @Inject(DOCUMENT) document: any) {
35
- super();
36
- // @see https://stackoverflow.com/questions/49513359/could-not-resolve-type-document-in-angular5/53715642#53715642
37
- this.document = document as Document;
38
- }
39
-
40
- ngOnInit(): void {
41
- }
42
-
43
- ngAfterViewInit(): void {
44
- // TODO: Make this also track the current enabled/disabled state.
45
- if (this.hasBinding()) {
46
- const {chain} = Dsl.disposeWith(this);
47
- chain(this.pectinFocusBinding.focusContext.focused).subscribe((focused) => {
48
- if (focused && !this.alreadyHasFocus()) {
49
- this.tryAndFocus();
50
- }
51
- });
52
- } else {
53
- Logger.get(this).warn("pectinFocusBinding was nil");
54
- }
55
- }
56
-
57
- private hasBinding() {
58
- return !!this.pectinFocusBinding && !!this.pectinFocusBinding.focusContext;
59
- }
60
-
61
- // Hook method for debugging via tracing.
62
- alreadyHasFocus() {
63
- return this.isFocused(this.focusTarget);
64
- }
65
-
66
- // Hook method for debugging via tracing.
67
- isFocused(element: Element): boolean {
68
- return this.document.activeElement === element;
69
- }
70
-
71
- tryAndFocus(retries: number = 5) {
72
- if (this.modelShouldStillHaveFocus() && this.canFocus()) {
73
- if (!this.alreadyHasFocus()) {
74
- this.focusTarget.focus();
75
- }
76
- // if we didn't get the focus we try again later.
77
- if (!this.alreadyHasFocus()) {
78
- Logger.get(this).log(`focus failed, trying ${retries} more times`);
79
- if (retries > 0) {
80
- // try again on the next paint
81
- // TODO: is there an angular way of doing this without calling a window function.
82
- requestAnimationFrame(() => {
83
- this.tryAndFocus(retries - 1);
84
- });
85
- } else {
86
- Logger.get(this).warn(`Tried to focus but gave up as the component wasn't enabled or visible.`);
87
- }
88
- }
89
- }
90
- }
91
-
92
- get focusTarget(): HTMLElement {
93
- return this.focusBindingTarget || this.el.nativeElement;
94
- }
95
-
96
- // Hook method for debugging via tracing.
97
- modelShouldStillHaveFocus() {
98
- return this.hasBinding() && this.pectinFocusBinding.focusContext.focused.value;
99
- }
100
-
101
- // Hook method for debugging via tracing.
102
- canFocus(): boolean {
103
- const dimension = this.focusTarget.getBoundingClientRect();
104
- const hasSize = dimension.height >= 0 && dimension.height >= 0;
105
- // tslint:disable-next-line:no-string-literal
106
- return hasSize && !this.focusTarget['disabled'];
107
- }
108
- }
@@ -1,57 +0,0 @@
1
- import { DelegatingValueModel, EventListenerList, ValueModel } from '@coolon/pectin';
2
- import { DisposableComponent } from '../components/disposable-component';
3
- import { Activity } from './activity';
4
-
5
- export class AbstractActivity<D, R, E = any> extends DisposableComponent implements Activity<D, R, E> {
6
-
7
- private readonly _doneListeners = new EventListenerList<Activity.CallBack<R>>();
8
- private readonly _cancelListeners = new EventListenerList<Activity.CallBack<E>>();
9
- private readonly _finishListeners = new EventListenerList<() => void>();
10
-
11
- private readonly _busyModel = new DelegatingValueModel<boolean>().withDefault(false);
12
-
13
- onDone(callback: Activity.CallBack<R>) {
14
- this._doneListeners.add(callback);
15
- }
16
-
17
- onCancel(callback: Activity.CallBack<E>) {
18
- this._cancelListeners.add(callback);
19
- }
20
-
21
- done(result?: R): Promise<any> {
22
- return this._doneListeners
23
- .fireAndWait(l => l(result))
24
- .finally(() => this.finalizeAndDispose());
25
- }
26
-
27
- cancel(error?: E): Promise<any> {
28
- return this._cancelListeners
29
- .fireAndWait(l => l(error))
30
- .finally(() => this.finalizeAndDispose());
31
- }
32
-
33
- private finalizeAndDispose() {
34
- // this._activeModel.value = false;
35
- this._finishListeners.fire(l => l());
36
- // this._interactionContext = null;
37
- // this._initialized = false;
38
- [
39
- this._finishListeners,
40
- this._doneListeners,
41
- this._cancelListeners
42
- ].forEach(l => l.dispose());
43
- }
44
-
45
-
46
- get busy(): ValueModel<boolean> {
47
- return this._busyModel.readonly;
48
- }
49
-
50
- busyWhile(busyModel: ValueModel<boolean>) {
51
- this._busyModel.setDelegate(busyModel);
52
- }
53
-
54
- isBusy() {
55
- return this._busyModel.value;
56
- }
57
- }
@@ -1,17 +0,0 @@
1
- import { InjectionToken } from '@angular/core';
2
- import { ValueModel } from '@coolon/pectin';
3
-
4
- export const ACTIVITY_DATA = new InjectionToken<any>('InteractionActivityData');
5
-
6
- export interface Activity<D, R, E = any> {
7
- readonly busy: ValueModel<boolean>;
8
-
9
- onDone(callback: Activity.CallBack<R>);
10
-
11
- onCancel(callback: Activity.CallBack<E>);
12
-
13
- }
14
-
15
- export namespace Activity {
16
- export type CallBack<T> = (value: T) => void | Promise<any>;
17
- }
@@ -1,6 +0,0 @@
1
-
2
- export interface Alert {
3
- title?():string;
4
- content():string[];
5
- ok():string;
6
- }
@@ -1,8 +0,0 @@
1
- <mat-tab-group #tabs no-tab-header [dynamicHeight]="true">
2
- <mat-tab>
3
- <angular-ui-powerups-activity-outlet [interactionContext]="this" [activityContext]="initialActivity"></angular-ui-powerups-activity-outlet>
4
- </mat-tab>
5
- <mat-tab *ngFor="let tab of activityTabs.value">
6
- <angular-ui-powerups-activity-outlet [interactionContext]="this" [activityContext]="tab"></angular-ui-powerups-activity-outlet>
7
- </mat-tab>
8
- </mat-tab-group>
@@ -1,25 +0,0 @@
1
- import { async, ComponentFixture, TestBed } from '@angular/core/testing';
2
-
3
- import { ActivityContainerComponent } from './activity-container.component';
4
-
5
- describe('ActivityContainerComponent', () => {
6
- let component: ActivityContainerComponent;
7
- let fixture: ComponentFixture<ActivityContainerComponent>;
8
-
9
- beforeEach(async(() => {
10
- TestBed.configureTestingModule({
11
- declarations: [ ActivityContainerComponent ]
12
- })
13
- .compileComponents();
14
- }));
15
-
16
- beforeEach(() => {
17
- fixture = TestBed.createComponent(ActivityContainerComponent);
18
- component = fixture.componentInstance;
19
- fixture.detectChanges();
20
- });
21
-
22
- it('should create', () => {
23
- expect(component).toBeTruthy();
24
- });
25
- });
@@ -1,93 +0,0 @@
1
- import { AfterViewInit, Component, Input, OnInit, ViewChild } from '@angular/core';
2
- import { MatTabGroup } from '@angular/material';
3
- import { Constructable, Dsl, MutableListModel } from '@coolon/pectin';
4
- import { Deferred } from '@coolon/pectin/lib/promise/deferred.class';
5
- import { DisposableComponent } from '../../../components/disposable-component';
6
-
7
- import { Activity } from '../../activity';
8
- import { Alert } from '../../alert';
9
- import { Confirm } from '../../confirm';
10
- import { InteractionContext } from '../../interaction-context';
11
- import { ActivityOutletContext } from '../activity-outlet/activity-outlet-context';
12
- import { AlertDialogComponent } from '../alert-dialog/alert-dialog.component';
13
- import { ConfirmationDialogComponent } from '../confirmation-dialog/confirmation-dialog.component';
14
-
15
- @Component({
16
- selector: 'angular-ui-powerups-activity-container',
17
- templateUrl: './activity-container.component.html',
18
- styleUrls: ['./activity-container.component.scss']
19
- })
20
- export class ActivityContainerComponent extends DisposableComponent implements OnInit, AfterViewInit, InteractionContext {
21
-
22
- @Input()
23
- parentInteractionContext: InteractionContext;
24
-
25
- @Input()
26
- initialActivity: ActivityOutletContext<any, any, any>;
27
-
28
- @ViewChild('tabs', { static: true })
29
- tabs: MatTabGroup;
30
-
31
- readonly activityTabs = new MutableListModel<ActivityOutletContext<any, any, any>>();
32
- private obsoleteTabs: ActivityOutletContext<any, any, any>[] = [];
33
-
34
- constructor() {
35
- super();
36
- }
37
-
38
- ngOnInit() {
39
- }
40
-
41
- ngAfterViewInit(): void {
42
- const { observe } = Dsl.disposeWith(this);
43
- observe.valuesFrom(this.tabs.animationDone).subscribe(() => this.cleanUpTabs());
44
- }
45
-
46
- initialise<D, R, E>(options: ActivityContainerComponent.ActivityContext<D, R, E>) {
47
- this.initialActivity = {
48
- ...options,
49
- interactionContext: this
50
- };
51
- }
52
-
53
- startActivity<D, R, E>(activityType: Constructable<Activity<D, R, E>>, data?: D): Promise<R> {
54
- const deferred = Deferred.defer<R>();
55
- const context = {
56
- interactionContext: this,
57
- activityClass: activityType,
58
- activityData: data,
59
- onDone: deferred.resolve,
60
- onCancel: deferred.reject
61
- };
62
- this.activityTabs.push(context);
63
- this.tabs.selectedIndex = this.activityTabs.length;
64
- return deferred.promise.finally(() => {
65
- this.obsoleteTabs.push(context);
66
- this.tabs.selectedIndex = this.activityTabs.length - 1;
67
- });
68
- }
69
-
70
- alert(alert: Alert): Promise<void> {
71
- return this.startActivity(AlertDialogComponent, alert);
72
- }
73
-
74
- confirm(confirm: Confirm): Promise<boolean> {
75
- return this.startActivity(ConfirmationDialogComponent, confirm);
76
- }
77
-
78
- private cleanUpTabs() {
79
- this.activityTabs.value = this.activityTabs.value.filter(tab => {
80
- return !this.obsoleteTabs.includes(tab);
81
- });
82
- }
83
- }
84
-
85
- export namespace ActivityContainerComponent {
86
-
87
- export interface ActivityContext<D, R, E> {
88
- activityClass: Constructable<Activity<D, R, E>>,
89
- activityData: D,
90
- onDone: (result: R) => void,
91
- onCancel: (error: E) => void,
92
- }
93
- }
@@ -1,25 +0,0 @@
1
- import { async, ComponentFixture, TestBed } from '@angular/core/testing';
2
-
3
- import { ActivityOutletComponent } from './activity-outlet.component';
4
-
5
- describe('PortalOutletComponentComponent', () => {
6
- let component: ActivityOutletComponent;
7
- let fixture: ComponentFixture<ActivityOutletComponent>;
8
-
9
- beforeEach(async(() => {
10
- TestBed.configureTestingModule({
11
- declarations: [ ActivityOutletComponent ]
12
- })
13
- .compileComponents();
14
- }));
15
-
16
- beforeEach(() => {
17
- fixture = TestBed.createComponent(ActivityOutletComponent);
18
- component = fixture.componentInstance;
19
- fixture.detectChanges();
20
- });
21
-
22
- it('should create', () => {
23
- expect(component).toBeTruthy();
24
- });
25
- });
@@ -1,96 +0,0 @@
1
- import {
2
- AfterViewInit,
3
- Component,
4
- ComponentFactoryResolver,
5
- ComponentRef,
6
- Injector,
7
- Input,
8
- OnInit,
9
- ViewContainerRef
10
- } from '@angular/core';
11
- import { Constructable, lang } from '@coolon/pectin';
12
- import { Activity, ACTIVITY_DATA } from '../../activity';
13
- import { Alert } from '../../alert';
14
- import { Confirm } from '../../confirm';
15
- import { InteractionContext } from '../../interaction-context';
16
- import { ActivityOutletContext } from './activity-outlet-context';
17
-
18
- @Component({
19
- selector: 'angular-ui-powerups-activity-outlet',
20
- template: '',
21
- styleUrls: ['./activity-outlet.component.scss']
22
- })
23
- export class ActivityOutletComponent<D, R, E> implements OnInit, InteractionContext {
24
-
25
- @Input()
26
- interactionContext: InteractionContext;
27
-
28
- @Input()
29
- set activityContext(activityContext: ActivityOutletContext<D, R, E>) {
30
- this.loadActivity(activityContext);
31
- };
32
-
33
- private activityComponent: ComponentRef<Activity<D, R, E>>;
34
-
35
- constructor(
36
- private componentFactoryResolver: ComponentFactoryResolver,
37
- private viewContainerRef: ViewContainerRef,
38
- private injector: Injector
39
- ) {
40
- }
41
-
42
- ngOnInit() {
43
- }
44
-
45
- loadActivity(activityContext: ActivityOutletContext<D, R, E>) {
46
- const injector = Injector.create({
47
- providers: [
48
- {
49
- provide: InteractionContext,
50
- useValue: this
51
- },
52
- { provide: ACTIVITY_DATA, useValue: activityContext.activityData }
53
- ],
54
- parent: this.injector
55
- });
56
- const componentFactory = this.componentFactoryResolver.resolveComponentFactory(activityContext.activityClass);
57
- this.viewContainerRef.clear();
58
- this.activityComponent = this.viewContainerRef.createComponent(componentFactory, 0, injector);
59
- this.activityComponent.instance.onDone(activityContext.onDone);
60
- this.activityComponent.instance.onCancel(activityContext.onCancel);
61
- }
62
-
63
- alert(alert: Alert): Promise<void> {
64
- return this.interactionContext.alert(alert);
65
- }
66
-
67
- confirm(confirm: Confirm): Promise<boolean> {
68
- return this.interactionContext.confirm(confirm);
69
- }
70
-
71
- startActivity<D1, R1, E1>(activityType: Constructable<Activity<D1, R1, E1>>, data?: D1): Promise<R1> {
72
- return this.interactionContext.startActivity(activityType, data);
73
- }
74
- }
75
-
76
- export namespace ActivityOutletComponent {
77
-
78
- export class OutletInteractionContext<D, R, E> implements InteractionContext {
79
-
80
- constructor(private readonly context: ActivityOutletContext<D, R, E>) {
81
- }
82
-
83
- alert(alert: Alert): Promise<void> {
84
- return lang.notImplemented();
85
- }
86
-
87
- confirm(confirm: Confirm): Promise<boolean> {
88
- return lang.notImplemented();
89
- }
90
-
91
- startActivity<D1, R1, E1>(activityType: Constructable<Activity<D1, R1, E1>>, data?: D1): Promise<R1> {
92
- return lang.notImplemented();
93
- }
94
- }
95
-
96
- }
@@ -1,7 +0,0 @@
1
- <h3 matDialogTitle *ngIf="alert.title">{{alert.title()}}</h3>
2
- <div matDialogContent>
3
- <p *ngFor="let line of alert.content()">{{line}}</p>
4
- </div>
5
- <p matDialogActions>
6
- <button mat-raised-button color="primary" (click)="done()">{{alert.ok()}}</button>
7
- </p>
@@ -1,7 +0,0 @@
1
- :host {
2
- display: block;
3
- padding: var(--angular-ui-powerups-default-padding);
4
- }
5
- .mat-dialog-actions {
6
- justify-content: flex-end;
7
- }
@@ -1,25 +0,0 @@
1
- import { async, ComponentFixture, TestBed } from '@angular/core/testing';
2
-
3
- import { AlertDialogComponent } from './alert-dialog.component';
4
-
5
- describe('ConfirmationDialogComponent', () => {
6
- let component: AlertDialogComponent;
7
- let fixture: ComponentFixture<AlertDialogComponent>;
8
-
9
- beforeEach(async(() => {
10
- TestBed.configureTestingModule({
11
- declarations: [ AlertDialogComponent ]
12
- })
13
- .compileComponents();
14
- }));
15
-
16
- beforeEach(() => {
17
- fixture = TestBed.createComponent(AlertDialogComponent);
18
- component = fixture.componentInstance;
19
- fixture.detectChanges();
20
- });
21
-
22
- it('should create', () => {
23
- expect(component).toBeTruthy();
24
- });
25
- });
@@ -1,20 +0,0 @@
1
- import { Component, Inject, OnInit } from '@angular/core';
2
- import { AbstractActivity } from '../../abstract-activity';
3
- import { ACTIVITY_DATA } from '../../activity';
4
- import { Alert } from '../../alert';
5
-
6
- @Component({
7
- selector: 'angular-ui-powerups-alert-dialog',
8
- templateUrl: './alert-dialog.component.html',
9
- styleUrls: ['./alert-dialog.component.scss']
10
- })
11
- export class AlertDialogComponent extends AbstractActivity<Alert, void> implements OnInit {
12
-
13
- constructor(@Inject(ACTIVITY_DATA) readonly alert: Alert) {
14
- super();
15
- }
16
-
17
- ngOnInit() {
18
- }
19
-
20
- }
@@ -1,9 +0,0 @@
1
- <h3 matDialogTitle *ngIf="confirm.title">{{confirm.title()}}</h3>
2
- <div matDialogContent>
3
- <p *ngFor="let line of confirm.content()">{{line}}</p>
4
- </div>
5
- <p matDialogActions>
6
- <button mat-button (click)="cancel()">{{confirm.cancel()}}</button>
7
- <button mat-raised-button [color]="isDestructive() ? 'warn' : 'primary'" (click)="done(true)">{{confirm.ok()}}</button>
8
- </p>
9
-
@@ -1,8 +0,0 @@
1
- :host {
2
- display: block;
3
- padding: var(--angular-ui-powerups-default-padding);
4
- }
5
-
6
- .mat-dialog-actions {
7
- justify-content: flex-end;
8
- }
@@ -1,25 +0,0 @@
1
- import { async, ComponentFixture, TestBed } from '@angular/core/testing';
2
-
3
- import { ConfirmationDialogComponent } from './confirmation-dialog.component';
4
-
5
- describe('ConfirmationDialogComponent', () => {
6
- let component: ConfirmationDialogComponent;
7
- let fixture: ComponentFixture<ConfirmationDialogComponent>;
8
-
9
- beforeEach(async(() => {
10
- TestBed.configureTestingModule({
11
- declarations: [ ConfirmationDialogComponent ]
12
- })
13
- .compileComponents();
14
- }));
15
-
16
- beforeEach(() => {
17
- fixture = TestBed.createComponent(ConfirmationDialogComponent);
18
- component = fixture.componentInstance;
19
- fixture.detectChanges();
20
- });
21
-
22
- it('should create', () => {
23
- expect(component).toBeTruthy();
24
- });
25
- });
@@ -1,26 +0,0 @@
1
- import { Component, Inject, OnInit } from '@angular/core';
2
- import { assert } from '@coolon/pectin';
3
- import { AbstractActivity } from '../../abstract-activity';
4
- import { ACTIVITY_DATA } from '../../activity';
5
- import { Confirm } from '../../confirm';
6
-
7
- @Component({
8
- selector: 'angular-ui-powerups-confirmation-dialog',
9
- templateUrl: './confirmation-dialog.component.html',
10
- styleUrls: ['./confirmation-dialog.component.scss']
11
- })
12
- export class ConfirmationDialogComponent extends AbstractActivity<Confirm, boolean> implements OnInit {
13
-
14
- constructor(@Inject(ACTIVITY_DATA) readonly confirm: Confirm) {
15
- super();
16
- assert.notNil(confirm);
17
- console.log(confirm);
18
- }
19
-
20
- ngOnInit() {
21
- }
22
-
23
- isDestructive(): boolean {
24
- return this.confirm.destructive && this.confirm.destructive();
25
- }
26
- }