@coolon/angular-ui-powerups 0.0.1

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 (179) hide show
  1. package/README.md +7 -0
  2. package/bundles/coolon-angular-ui-powerups.umd.js +3373 -0
  3. package/bundles/coolon-angular-ui-powerups.umd.js.map +1 -0
  4. package/bundles/coolon-angular-ui-powerups.umd.min.js +2 -0
  5. package/bundles/coolon-angular-ui-powerups.umd.min.js.map +1 -0
  6. package/coolon-angular-ui-powerups.d.ts +12 -0
  7. package/coolon-angular-ui-powerups.metadata.json +1 -0
  8. package/esm2015/coolon-angular-ui-powerups.js +17 -0
  9. package/esm2015/index.js +6 -0
  10. package/esm2015/lib/angular-ui-powerups.module.js +48 -0
  11. package/esm2015/lib/components/disposable-component.js +14 -0
  12. package/esm2015/lib/components/forms/abstract-input.component.js +173 -0
  13. package/esm2015/lib/components/forms/number-input/number-input.component.js +26 -0
  14. package/esm2015/lib/components/forms/password-input/password-input.component.js +26 -0
  15. package/esm2015/lib/components/forms/select-input/select-input.component.js +60 -0
  16. package/esm2015/lib/components/forms/string-input/string-input.component.js +26 -0
  17. package/esm2015/lib/components/index.js +18 -0
  18. package/esm2015/lib/components/resize-aware.component.js +96 -0
  19. package/esm2015/lib/components/types/bounds.class.js +56 -0
  20. package/esm2015/lib/components/types/dimension.class.js +21 -0
  21. package/esm2015/lib/components/types/point.class.js +36 -0
  22. package/esm2015/lib/directives/command.directive.js +91 -0
  23. package/esm2015/lib/directives/focus-binding.directive.js +163 -0
  24. package/esm2015/lib/directives/index.js +10 -0
  25. package/esm2015/lib/interaction/abstract-activity.js +129 -0
  26. package/esm2015/lib/interaction/activity.js +27 -0
  27. package/esm2015/lib/interaction/alert.js +23 -0
  28. package/esm2015/lib/interaction/components/activity-container/activity-container.component.js +144 -0
  29. package/esm2015/lib/interaction/components/activity-outlet/activity-outlet-context.js +22 -0
  30. package/esm2015/lib/interaction/components/activity-outlet/activity-outlet.component.js +169 -0
  31. package/esm2015/lib/interaction/components/alert-dialog/alert-dialog.component.js +37 -0
  32. package/esm2015/lib/interaction/components/confirmation-dialog/confirmation-dialog.component.js +46 -0
  33. package/esm2015/lib/interaction/confirm.js +17 -0
  34. package/esm2015/lib/interaction/index.js +21 -0
  35. package/esm2015/lib/interaction/interaction-context.js +35 -0
  36. package/esm2015/lib/interaction/interaction.module.js +41 -0
  37. package/esm2015/lib/interaction/result.js +24 -0
  38. package/esm2015/lib/interaction/services/dialog-interaction.service.js +112 -0
  39. package/esm2015/lib/place/abstract-place-component.js +59 -0
  40. package/esm2015/lib/place/components/busy-overlay/busy-overlay.component.js +44 -0
  41. package/esm2015/lib/place/components/empty-state/empty-state.component.js +28 -0
  42. package/esm2015/lib/place/components/place-outlet/place-outlet.component.js +52 -0
  43. package/esm2015/lib/place/guards/leave-place.guard.js +52 -0
  44. package/esm2015/lib/place/guards/place-route.guard.js +74 -0
  45. package/esm2015/lib/place/index.js +25 -0
  46. package/esm2015/lib/place/place-component.js +17 -0
  47. package/esm2015/lib/place/place.decorator.js +67 -0
  48. package/esm2015/lib/place/place.module.js +38 -0
  49. package/esm2015/lib/place/place.service.js +61 -0
  50. package/esm2015/lib/place/route/json-types.js +13 -0
  51. package/esm2015/lib/place/route/parameter-decorators.js +82 -0
  52. package/esm2015/lib/place/route/parameter-definition.class.js +22 -0
  53. package/esm2015/lib/place/route/parameter-sanitiser.js +17 -0
  54. package/esm2015/lib/place/route/parameter-type.js +43 -0
  55. package/esm2015/lib/place/route/route-parameter-bindings.js +282 -0
  56. package/esm2015/lib/place/route/route-parameter-sanitiser.js +148 -0
  57. package/esm2015/public_api.js +10 -0
  58. package/esm5/coolon-angular-ui-powerups.js +17 -0
  59. package/esm5/index.js +6 -0
  60. package/esm5/lib/angular-ui-powerups.module.js +52 -0
  61. package/esm5/lib/components/disposable-component.js +24 -0
  62. package/esm5/lib/components/forms/abstract-input.component.js +218 -0
  63. package/esm5/lib/components/forms/number-input/number-input.component.js +33 -0
  64. package/esm5/lib/components/forms/password-input/password-input.component.js +33 -0
  65. package/esm5/lib/components/forms/select-input/select-input.component.js +67 -0
  66. package/esm5/lib/components/forms/string-input/string-input.component.js +33 -0
  67. package/esm5/lib/components/index.js +18 -0
  68. package/esm5/lib/components/resize-aware.component.js +124 -0
  69. package/esm5/lib/components/types/bounds.class.js +59 -0
  70. package/esm5/lib/components/types/dimension.class.js +19 -0
  71. package/esm5/lib/components/types/point.class.js +43 -0
  72. package/esm5/lib/directives/command.directive.js +107 -0
  73. package/esm5/lib/directives/focus-binding.directive.js +211 -0
  74. package/esm5/lib/directives/index.js +10 -0
  75. package/esm5/lib/interaction/abstract-activity.js +173 -0
  76. package/esm5/lib/interaction/activity.js +27 -0
  77. package/esm5/lib/interaction/alert.js +23 -0
  78. package/esm5/lib/interaction/components/activity-container/activity-container.component.js +181 -0
  79. package/esm5/lib/interaction/components/activity-outlet/activity-outlet-context.js +22 -0
  80. package/esm5/lib/interaction/components/activity-outlet/activity-outlet.component.js +206 -0
  81. package/esm5/lib/interaction/components/alert-dialog/alert-dialog.component.js +42 -0
  82. package/esm5/lib/interaction/components/confirmation-dialog/confirmation-dialog.component.js +54 -0
  83. package/esm5/lib/interaction/confirm.js +17 -0
  84. package/esm5/lib/interaction/index.js +21 -0
  85. package/esm5/lib/interaction/interaction-context.js +45 -0
  86. package/esm5/lib/interaction/interaction.module.js +45 -0
  87. package/esm5/lib/interaction/result.js +24 -0
  88. package/esm5/lib/interaction/services/dialog-interaction.service.js +138 -0
  89. package/esm5/lib/place/abstract-place-component.js +66 -0
  90. package/esm5/lib/place/components/busy-overlay/busy-overlay.component.js +49 -0
  91. package/esm5/lib/place/components/empty-state/empty-state.component.js +29 -0
  92. package/esm5/lib/place/components/place-outlet/place-outlet.component.js +62 -0
  93. package/esm5/lib/place/guards/leave-place.guard.js +57 -0
  94. package/esm5/lib/place/guards/place-route.guard.js +78 -0
  95. package/esm5/lib/place/index.js +25 -0
  96. package/esm5/lib/place/place-component.js +17 -0
  97. package/esm5/lib/place/place.decorator.js +64 -0
  98. package/esm5/lib/place/place.module.js +42 -0
  99. package/esm5/lib/place/place.service.js +75 -0
  100. package/esm5/lib/place/route/json-types.js +13 -0
  101. package/esm5/lib/place/route/parameter-decorators.js +82 -0
  102. package/esm5/lib/place/route/parameter-definition.class.js +22 -0
  103. package/esm5/lib/place/route/parameter-sanitiser.js +17 -0
  104. package/esm5/lib/place/route/parameter-type.js +65 -0
  105. package/esm5/lib/place/route/route-parameter-bindings.js +327 -0
  106. package/esm5/lib/place/route/route-parameter-sanitiser.js +203 -0
  107. package/esm5/public_api.js +10 -0
  108. package/fesm2015/coolon-angular-ui-powerups.js +2687 -0
  109. package/fesm2015/coolon-angular-ui-powerups.js.map +1 -0
  110. package/fesm5/coolon-angular-ui-powerups.js +3164 -0
  111. package/fesm5/coolon-angular-ui-powerups.js.map +1 -0
  112. package/index.d.ts +1 -0
  113. package/lib/angular-ui-powerups.module.d.ts +2 -0
  114. package/lib/components/disposable-component.d.ts +5 -0
  115. package/lib/components/forms/abstract-input.component.d.ts +34 -0
  116. package/lib/components/forms/number-input/number-input.component.d.ts +6 -0
  117. package/lib/components/forms/password-input/password-input.component.d.ts +6 -0
  118. package/lib/components/forms/select-input/select-input.component.d.ts +11 -0
  119. package/lib/components/forms/string-input/string-input.component.d.ts +6 -0
  120. package/lib/components/index.d.ts +13 -0
  121. package/lib/components/resize-aware.component.d.ts +22 -0
  122. package/lib/components/types/bounds.class.d.ts +16 -0
  123. package/lib/components/types/dimension.class.d.ts +5 -0
  124. package/lib/components/types/point.class.d.ts +10 -0
  125. package/lib/directives/command.directive.d.ts +11 -0
  126. package/lib/directives/focus-binding.directive.d.ts +21 -0
  127. package/lib/directives/index.d.ts +5 -0
  128. package/lib/interaction/abstract-activity.d.ts +17 -0
  129. package/lib/interaction/activity.d.ts +11 -0
  130. package/lib/interaction/alert.d.ts +5 -0
  131. package/lib/interaction/components/activity-container/activity-container.component.d.ts +32 -0
  132. package/lib/interaction/components/activity-outlet/activity-outlet-context.d.ts +10 -0
  133. package/lib/interaction/components/activity-outlet/activity-outlet.component.d.ts +30 -0
  134. package/lib/interaction/components/alert-dialog/alert-dialog.component.d.ts +8 -0
  135. package/lib/interaction/components/confirmation-dialog/confirmation-dialog.component.d.ts +9 -0
  136. package/lib/interaction/confirm.d.ts +5 -0
  137. package/lib/interaction/index.d.ts +16 -0
  138. package/lib/interaction/interaction-context.d.ts +11 -0
  139. package/lib/interaction/interaction.module.d.ts +2 -0
  140. package/lib/interaction/result.d.ts +8 -0
  141. package/lib/interaction/services/dialog-interaction.service.d.ts +14 -0
  142. package/lib/place/abstract-place-component.d.ts +13 -0
  143. package/lib/place/components/busy-overlay/busy-overlay.component.d.ts +8 -0
  144. package/lib/place/components/empty-state/empty-state.component.d.ts +5 -0
  145. package/lib/place/components/place-outlet/place-outlet.component.d.ts +10 -0
  146. package/lib/place/guards/leave-place.guard.d.ts +10 -0
  147. package/lib/place/guards/place-route.guard.d.ts +9 -0
  148. package/lib/place/index.d.ts +20 -0
  149. package/lib/place/place-component.d.ts +5 -0
  150. package/lib/place/place.decorator.d.ts +18 -0
  151. package/lib/place/place.module.d.ts +2 -0
  152. package/lib/place/place.service.d.ts +8 -0
  153. package/lib/place/route/json-types.d.ts +7 -0
  154. package/lib/place/route/parameter-decorators.d.ts +9 -0
  155. package/lib/place/route/parameter-definition.class.d.ts +10 -0
  156. package/lib/place/route/parameter-sanitiser.d.ts +3 -0
  157. package/lib/place/route/parameter-type.d.ts +16 -0
  158. package/lib/place/route/route-parameter-bindings.d.ts +18 -0
  159. package/lib/place/route/route-parameter-sanitiser.d.ts +15 -0
  160. package/package.json +31 -0
  161. package/public_api.d.ts +5 -0
  162. package/schematics/collection.json +14 -0
  163. package/schematics/ng-add/index.d.ts +2 -0
  164. package/schematics/ng-add/index.js +12 -0
  165. package/schematics/ng-add/index.js.map +1 -0
  166. package/schematics/place-routes/index.d.ts +3 -0
  167. package/schematics/place-routes/index.js +92 -0
  168. package/schematics/place-routes/index.js.map +1 -0
  169. package/schematics/place-routes/place-def.d.ts +31 -0
  170. package/schematics/place-routes/place-def.js +75 -0
  171. package/schematics/place-routes/place-def.js.map +1 -0
  172. package/schematics/place-routes/scanner.d.ts +26 -0
  173. package/schematics/place-routes/scanner.js +124 -0
  174. package/schematics/place-routes/scanner.js.map +1 -0
  175. package/schematics/place-routes/schema.d.ts +7 -0
  176. package/schematics/place-routes/schema.js +3 -0
  177. package/schematics/place-routes/schema.js.map +1 -0
  178. package/schematics/place-routes/schema.json +17 -0
  179. package/schematics/place-routes/templates/apps/__project__/src/app/place-routes.ts.template +31 -0
@@ -0,0 +1,282 @@
1
+ /**
2
+ * @fileoverview added by tsickle
3
+ * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
4
+ */
5
+ import * as tslib_1 from "tslib";
6
+ import { ActivatedRoute, Router } from '@angular/router';
7
+ import { Binding, Dsl, GarbageCollector, MutableValueModel, Trace, TransactionObserver } from '@coolon/pectin';
8
+ import { Klass } from '@coolon/typescript-utilities';
9
+ /**
10
+ * @record
11
+ * @template T
12
+ */
13
+ function ResolvedParameter() { }
14
+ if (false) {
15
+ /** @type {?} */
16
+ ResolvedParameter.prototype.parameter;
17
+ /** @type {?} */
18
+ ResolvedParameter.prototype.resolvedValue;
19
+ }
20
+ class ResolvedParameters {
21
+ /**
22
+ * @param {?} parameters
23
+ */
24
+ constructor(parameters) {
25
+ this.parameters = parameters;
26
+ }
27
+ /**
28
+ * @template T
29
+ * @param {?} parameter
30
+ * @return {?}
31
+ */
32
+ get(parameter) {
33
+ /** @type {?} */
34
+ const resolved = this.parameters.find((/**
35
+ * @param {?} p
36
+ * @return {?}
37
+ */
38
+ p => p.parameter === parameter));
39
+ return resolved ? resolved.resolvedValue : null;
40
+ }
41
+ /**
42
+ * @template T
43
+ * @param {?} parameter
44
+ * @param {?} value
45
+ * @return {?}
46
+ */
47
+ replace(parameter, value) {
48
+ return new ResolvedParameters(this.parameters.filter((/**
49
+ * @param {?} p
50
+ * @return {?}
51
+ */
52
+ p => p.parameter !== parameter)).concat({
53
+ parameter,
54
+ resolvedValue: value
55
+ }));
56
+ }
57
+ /**
58
+ * @protected
59
+ * @return {?}
60
+ */
61
+ getFormattedRouteId() {
62
+ /** @type {?} */
63
+ const routeIdParam = this.getRouteIdParam();
64
+ return routeIdParam ? routeIdParam.parameter.type.format(routeIdParam.resolvedValue) : null;
65
+ }
66
+ /**
67
+ * @private
68
+ * @return {?}
69
+ */
70
+ getRouteIdParam() {
71
+ return this.parameters.find((/**
72
+ * @param {?} p
73
+ * @return {?}
74
+ */
75
+ p => p.parameter.isRouteId));
76
+ }
77
+ /**
78
+ * @protected
79
+ * @return {?}
80
+ */
81
+ getFormattedParameters() {
82
+ /** @type {?} */
83
+ const params = {};
84
+ /** @type {?} */
85
+ const routeIdParam = this.parameters.filter((/**
86
+ * @param {?} p
87
+ * @return {?}
88
+ */
89
+ p => !p.parameter.isRouteId)).forEach((/**
90
+ * @param {?} p
91
+ * @return {?}
92
+ */
93
+ p => {
94
+ params[p.parameter.name] = p.parameter.type.format(p.resolvedValue);
95
+ }));
96
+ return params;
97
+ }
98
+ /**
99
+ * @return {?}
100
+ */
101
+ hasRouteId() {
102
+ return !!this.getRouteIdParam();
103
+ }
104
+ /**
105
+ * @param {?} previous
106
+ * @param {?} router
107
+ * @param {?} activatedRoute
108
+ * @return {?}
109
+ */
110
+ redirect(previous, router, activatedRoute) {
111
+ /** @type {?} */
112
+ const routeId = this.getFormattedRouteId();
113
+ /** @type {?} */
114
+ const relativePath = !!previous.hasRouteId() ? '..' : '.';
115
+ /** @type {?} */
116
+ const path = routeId ? [relativePath, routeId, this.getFormattedParameters()] : [relativePath, this.getFormattedParameters()];
117
+ router.navigate(path, {
118
+ relativeTo: activatedRoute,
119
+ });
120
+ }
121
+ }
122
+ tslib_1.__decorate([
123
+ Trace(),
124
+ tslib_1.__metadata("design:type", Function),
125
+ tslib_1.__metadata("design:paramtypes", []),
126
+ tslib_1.__metadata("design:returntype", void 0)
127
+ ], ResolvedParameters.prototype, "getFormattedRouteId", null);
128
+ tslib_1.__decorate([
129
+ Trace(),
130
+ tslib_1.__metadata("design:type", Function),
131
+ tslib_1.__metadata("design:paramtypes", []),
132
+ tslib_1.__metadata("design:returntype", void 0)
133
+ ], ResolvedParameters.prototype, "getFormattedParameters", null);
134
+ tslib_1.__decorate([
135
+ Trace(),
136
+ tslib_1.__metadata("design:type", Function),
137
+ tslib_1.__metadata("design:paramtypes", [ResolvedParameters, Router, ActivatedRoute]),
138
+ tslib_1.__metadata("design:returntype", void 0)
139
+ ], ResolvedParameters.prototype, "redirect", null);
140
+ if (false) {
141
+ /** @type {?} */
142
+ ResolvedParameters.prototype.parameters;
143
+ }
144
+ export class RouteParameterBindings extends GarbageCollector {
145
+ /**
146
+ * @param {?} component
147
+ * @param {?} router
148
+ * @param {?} activatedRoute
149
+ */
150
+ constructor(component, router, activatedRoute) {
151
+ super();
152
+ this.component = component;
153
+ this.router = router;
154
+ this.activatedRoute = activatedRoute;
155
+ this._incomingRouteChange = new MutableValueModel(false);
156
+ this.resolvedParameters = new MutableValueModel();
157
+ const { chain, valueOf, before, when, after, observe } = Dsl.disposeWith(this);
158
+ this.txo = new TransactionObserver(); //.onEvent(e => console.log(e.toString()));
159
+ //.onEvent(e => console.log(e.toString()));
160
+ /** @type {?} */
161
+ const routeParameterDefs = Klass.get(component).getMetadataList(RouteParameterBindings.ROUTE_PARAMETER_LIST_KEY);
162
+ routeParameterDefs.forEach((/**
163
+ * @param {?} parameter
164
+ * @return {?}
165
+ */
166
+ parameter => this.installBinding(parameter)));
167
+ /** @type {?} */
168
+ const incomingResolvedRouteParameters = observe.valuesFrom(activatedRoute.paramMap)
169
+ .last()
170
+ .map((/**
171
+ * @param {?} params
172
+ * @return {?}
173
+ */
174
+ params => {
175
+ /** @type {?} */
176
+ const result = [];
177
+ routeParameterDefs.forEach((/**
178
+ * @param {?} parameter
179
+ * @return {?}
180
+ */
181
+ parameter => {
182
+ result.push({ parameter, resolvedValue: parameter.type.parse(params.get(parameter.name)) });
183
+ }));
184
+ return new ResolvedParameters(result);
185
+ }));
186
+ incomingResolvedRouteParameters.subscribe((/**
187
+ * @param {?} resolvedParameters
188
+ * @return {?}
189
+ */
190
+ resolvedParameters => {
191
+ this._incomingRouteChange.value = true;
192
+ this.resolvedParameters.value = resolvedParameters;
193
+ this._incomingRouteChange.value = false;
194
+ }));
195
+ when.valueOf(this.resolvedParameters).changes((/**
196
+ * @param {?} params
197
+ * @param {?} previous
198
+ * @return {?}
199
+ */
200
+ (params, previous) => {
201
+ params.redirect(previous, router, activatedRoute);
202
+ }), { unless: this.incomingRouteChange });
203
+ this.txo.observe('incomingResolvedRouteParameters', incomingResolvedRouteParameters);
204
+ this.txo.observe('this.routeIsChanging', this.incomingRouteChange);
205
+ }
206
+ /**
207
+ * @return {?}
208
+ */
209
+ get incomingRouteChange() {
210
+ return this._incomingRouteChange.readonly;
211
+ }
212
+ /**
213
+ * @protected
214
+ * @template T
215
+ * @param {?} parameter
216
+ * @return {?}
217
+ */
218
+ installBinding(parameter) {
219
+ /** @type {?} */
220
+ const model = this.getModelFor(parameter);
221
+ this.txo.observe(parameter.propertyName, model);
222
+ this.registerDisposable(new Binding(this.resolvedParameters, model, {
223
+ /**
224
+ * @param {?} parameters
225
+ * @return {?}
226
+ */
227
+ toRight(parameters) {
228
+ return parameters.get(parameter);
229
+ },
230
+ /**
231
+ * @param {?} value
232
+ * @param {?=} currentParameters
233
+ * @return {?}
234
+ */
235
+ toLeft(value, currentParameters) {
236
+ return currentParameters.replace(parameter, value);
237
+ }
238
+ }));
239
+ }
240
+ /**
241
+ * @private
242
+ * @template T
243
+ * @param {?} parameter
244
+ * @return {?}
245
+ */
246
+ getModelFor(parameter) {
247
+ return this.component[parameter.propertyName];
248
+ }
249
+ }
250
+ if (false) {
251
+ /** @type {?} */
252
+ RouteParameterBindings.prototype._incomingRouteChange;
253
+ /**
254
+ * @type {?}
255
+ * @private
256
+ */
257
+ RouteParameterBindings.prototype.txo;
258
+ /**
259
+ * @type {?}
260
+ * @private
261
+ */
262
+ RouteParameterBindings.prototype.resolvedParameters;
263
+ /**
264
+ * @type {?}
265
+ * @private
266
+ */
267
+ RouteParameterBindings.prototype.component;
268
+ /**
269
+ * @type {?}
270
+ * @private
271
+ */
272
+ RouteParameterBindings.prototype.router;
273
+ /**
274
+ * @type {?}
275
+ * @private
276
+ */
277
+ RouteParameterBindings.prototype.activatedRoute;
278
+ }
279
+ (function (RouteParameterBindings) {
280
+ RouteParameterBindings.ROUTE_PARAMETER_LIST_KEY = Symbol('place:route:parameters');
281
+ })(RouteParameterBindings || (RouteParameterBindings = {}));
282
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGUtcGFyYW1ldGVyLWJpbmRpbmdzLmpzIiwic291cmNlUm9vdCI6Im5nOi8vQGNvb2xvbi9hbmd1bGFyLXVpLXBvd2VydXBzLyIsInNvdXJjZXMiOlsibGliL3BsYWNlL3JvdXRlL3JvdXRlLXBhcmFtZXRlci1iaW5kaW5ncy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDekQsT0FBTyxFQUNMLE9BQU8sRUFDUCxHQUFHLEVBQ0gsZ0JBQWdCLEVBRWhCLGlCQUFpQixFQUNqQixLQUFLLEVBQ0wsbUJBQW1CLEVBQ3BCLE1BQU0sZ0JBQWdCLENBQUM7QUFDeEIsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLDhCQUE4QixDQUFDOzs7OztBQUlyRCxnQ0FHQzs7O0lBRkMsc0NBQWtDOztJQUNsQywwQ0FBaUI7O0FBR25CLE1BQU0sa0JBQWtCOzs7O0lBQ3RCLFlBQXFCLFVBQW9DO1FBQXBDLGVBQVUsR0FBVixVQUFVLENBQTBCO0lBQ3pELENBQUM7Ozs7OztJQUVELEdBQUcsQ0FBSSxTQUFpQzs7Y0FDaEMsUUFBUSxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSTs7OztRQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLFNBQVMsS0FBSyxTQUFTLEVBQUM7UUFDckUsT0FBTyxRQUFRLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztJQUNsRCxDQUFDOzs7Ozs7O0lBRUQsT0FBTyxDQUFJLFNBQWlDLEVBQUUsS0FBUTtRQUNwRCxPQUFPLElBQUksa0JBQWtCLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxNQUFNOzs7O1FBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsU0FBUyxLQUFLLFNBQVMsRUFBQyxDQUFDLE1BQU0sQ0FBQztZQUMxRixTQUFTO1lBQ1QsYUFBYSxFQUFF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LGdEQUErQzs7QUF1RC9ILFdBQWlCLHNCQUFzQjtJQUN4QiwrQ0FBd0IsR0FBRyxNQUFNLENBQUMsd0JBQXdCLENBQUM7QUFDMUUsQ0FBQyxFQUZnQixzQkFBc0IsS0FBdEIsc0JBQXNCLFFBRXRDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQWN0aXZhdGVkUm91dGUsIFJvdXRlciB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQge1xuICBCaW5kaW5nLFxuICBEc2wsXG4gIEdhcmJhZ2VDb2xsZWN0b3IsXG4gIE11dGFibGVIYXNWYWx1ZSxcbiAgTXV0YWJsZVZhbHVlTW9kZWwsXG4gIFRyYWNlLFxuICBUcmFuc2FjdGlvbk9ic2VydmVyXG59IGZyb20gJ0Bjb29sb24vcGVjdGluJztcbmltcG9ydCB7IEtsYXNzIH0gZnJvbSAnQGNvb2xvbi90eXBlc2NyaXB0LXV0aWxpdGllcyc7XG5pbXBvcnQgeyBBYnN0cmFjdFBsYWNlQ29tcG9uZW50IH0gZnJvbSAnLi4vYWJzdHJhY3QtcGxhY2UtY29tcG9uZW50JztcbmltcG9ydCB7IFBhcmFtZXRlckRlZmluaXRpb24gfSBmcm9tICcuL3BhcmFtZXRlci1kZWZpbml0aW9uLmNsYXNzJztcblxuaW50ZXJmYWNlIFJlc29sdmVkUGFyYW1ldGVyPFQ+IHtcbiAgcGFyYW1ldGVyOiBQYXJhbWV0ZXJEZWZpbml0aW9uPFQ+O1xuICByZXNvbHZlZFZhbHVlOiBUO1xufVxuXG5jbGFzcyBSZXNvbHZlZFBhcmFtZXRlcnMge1xuICBjb25zdHJ1Y3RvcihyZWFkb25seSBwYXJhbWV0ZXJzOiBSZXNvbHZlZFBhcmFtZXRlcjxhbnk+W10pIHtcbiAgfVxuXG4gIGdldDxUPihwYXJhbWV0ZXI6IFBhcmFtZXRlckRlZmluaXRpb248VD4pOiBUIHtcbiAgICBjb25zdCByZXNvbHZlZCA9IHRoaXMucGFyYW1ldGVycy5maW5kKHAgPT4gcC5wYXJhbWV0ZXIgPT09IHBhcmFtZXRlcik7XG4gICAgcmV0dXJuIHJlc29sdmVkID8gcmVzb2x2ZWQucmVzb2x2ZWRWYWx1ZSA6IG51bGw7XG4gIH1cblxuICByZXBsYWNlPFQ+KHBhcmFtZXRlcjogUGFyYW1ldGVyRGVmaW5pdGlvbjxUPiwgdmFsdWU6IFQpOiBSZXNvbHZlZFBhcmFtZXRlcnMge1xuICAgIHJldHVybiBuZXcgUmVzb2x2ZWRQYXJhbWV0ZXJzKHRoaXMucGFyYW1ldGVycy5maWx0ZXIocCA9PiBwLnBhcmFtZXRlciAhPT0gcGFyYW1ldGVyKS5jb25jYXQoe1xuICAgICAgcGFyYW1ldGVyLFxuICAgICAgcmVzb2x2ZWRWYWx1ZTogdmFsdWVcbiAgICB9KSk7XG4gIH1cblxuICBAVHJhY2UoKVxuICBwcm90ZWN0ZWQgZ2V0Rm9ybWF0dGVkUm91dGVJZCgpIHtcbiAgICBjb25zdCByb3V0ZUlkUGFyYW0gPSB0aGlzLmdldFJvdXRlSWRQYXJhbSgpO1xuICAgIHJldHVybiByb3V0ZUlkUGFyYW0gPyByb3V0ZUlkUGFyYW0ucGFyYW1ldGVyLnR5cGUuZm9ybWF0KHJvdXRlSWRQYXJhbS5yZXNvbHZlZFZhbHVlKSA6IG51bGw7XG4gIH1cblxuICBwcml2YXRlIGdldFJvdXRlSWRQYXJhbSgpIHtcbiAgICByZXR1cm4gdGhpcy5wYXJhbWV0ZXJzLmZpbmQocCA9PiBwLnBhcmFtZXRlci5pc1JvdXRlSWQpO1xuICB9XG5cbiAgQFRyYWNlKClcbiAgcHJvdGVjdGVkIGdldEZvcm1hdHRlZFBhcmFtZXRlcnMoKSB7XG4gICAgY29uc3QgcGFyYW1zID0ge307XG4gICAgY29uc3Qgcm91dGVJZFBhcmFtID0gdGhpcy5wYXJhbWV0ZXJzLmZpbHRlcihwID0+ICFwLnBhcmFtZXRlci5pc1JvdXRlSWQpLmZvckVhY2gocCA9PiB7XG4gICAgICBwYXJhbXNbcC5wYXJhbWV0ZXIubmFtZV0gPSBwLnBhcmFtZXRlci50eXBlLmZvcm1hdChwLnJlc29sdmVkVmFsdWUpO1xuICAgIH0pO1xuICAgIHJldHVybiBwYXJhbXM7XG4gIH1cblxuICBoYXNSb3V0ZUlkKCkge1xuICAgIHJldHVybiAhIXRoaXMuZ2V0Um91dGVJZFBhcmFtKCk7XG4gIH1cblxuICBAVHJhY2UoKVxuICByZWRpcmVjdChwcmV2aW91czogUmVzb2x2ZWRQYXJhbWV0ZXJzLCByb3V0ZXI6IFJvdXRlciwgYWN0aXZhdGVkUm91dGU6IEFjdGl2YXRlZFJvdXRlKSB7XG4gICAgY29uc3Qgcm91dGVJZCA9IHRoaXMuZ2V0Rm9ybWF0dGVkUm91dGVJZCgpO1xuICAgIGNvbnN0IHJlbGF0aXZlUGF0aCA9ICEhcHJldmlvdXMuaGFzUm91dGVJZCgpID8gJy4uJyA6ICcuJztcbiAgICBjb25zdCBwYXRoID0gcm91dGVJZCA/IFtyZWxhdGl2ZVBhdGgsIHJvdXRlSWQsIHRoaXMuZ2V0Rm9ybWF0dGVkUGFyYW1ldGVycygpXSA6IFtyZWxhdGl2ZVBhdGgsIHRoaXMuZ2V0Rm9ybWF0dGVkUGFyYW1ldGVycygpXTtcbiAgICByb3V0ZXIubmF2aWdhdGUocGF0aCwge1xuICAgICAgcmVsYXRpdmVUbzogYWN0aXZhdGVkUm91dGUsXG4gICAgfSk7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIFJvdXRlUGFyYW1ldGVyQmluZGluZ3MgZXh0ZW5kcyBHYXJiYWdlQ29sbGVjdG9yIHtcblxuICBwdWJsaWMgcmVhZG9ubHkgX2luY29taW5nUm91dGVDaGFuZ2UgPSBuZXcgTXV0YWJsZVZhbHVlTW9kZWw8Ym9vbGVhbj4oZmFsc2UpO1xuXG4gIHByaXZhdGUgdHhvOiBUcmFuc2FjdGlvbk9ic2VydmVyO1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgcmVzb2x2ZWRQYXJhbWV0ZXJzID0gbmV3IE11dGFibGVWYWx1ZU1vZGVsPFJlc29sdmVkUGFyYW1ldGVycz4oKTtcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIHJlYWRvbmx5IGNvbXBvbmVudDogYW55LCBwcml2YXRlIHJlYWRvbmx5IHJvdXRlcjogUm91dGVyLCBwcml2YXRlIHJlYWRvbmx5IGFjdGl2YXRlZFJvdXRlOiBBY3RpdmF0ZWRSb3V0ZSkge1xuICAgIHN1cGVyKCk7XG4gICAgY29uc3QgeyBjaGFpbiwgdmFsdWVPZiwgYmVmb3JlLCB3aGVuLCBhZnRlciwgb2JzZXJ2ZSB9ID0gRHNsLmRpc3Bvc2VXaXRoKHRoaXMpO1xuICAgIHRoaXMudHhvID0gbmV3IFRyYW5zYWN0aW9uT2JzZXJ2ZXIoKTsvLy5vbkV2ZW50KGUgPT4gY29uc29sZS5sb2coZS50b1N0cmluZygpKSk7XG5cbiAgICBjb25zdCByb3V0ZVBhcmFtZXRlckRlZnMgPSBLbGFzcy5nZXQoY29tcG9uZW50KS5nZXRNZXRhZGF0YUxpc3QoUm91dGVQYXJhbWV0ZXJCaW5kaW5ncy5ST1VURV9QQVJBTUVURVJfTElTVF9LRVkpO1xuICAgIHJvdXRlUGFyYW1ldGVyRGVmcy5mb3JFYWNoKHBhcmFtZXRlciA9PiB0aGlzLmluc3RhbGxCaW5kaW5nKHBhcmFtZXRlcikpO1xuXG4gICAgY29uc3QgaW5jb21pbmdSZXNvbHZlZFJvdXRlUGFyYW1ldGVycyA9IG9ic2VydmUudmFsdWVzRnJvbShhY3RpdmF0ZWRSb3V0ZS5wYXJhbU1hcClcbiAgICAgIC5sYXN0KClcbiAgICAgIC5tYXAocGFyYW1zID0+IHtcbiAgICAgICAgY29uc3QgcmVzdWx0OiBSZXNvbHZlZFBhcmFtZXRlcjxhbnk+W10gPSBbXTtcbiAgICAgICAgcm91dGVQYXJhbWV0ZXJEZWZzLmZvckVhY2gocGFyYW1ldGVyID0+IHtcbiAgICAgICAgICByZXN1bHQucHVzaCh7IHBhcmFtZXRlciwgcmVzb2x2ZWRWYWx1ZTogcGFyYW1ldGVyLnR5cGUucGFyc2UocGFyYW1zLmdldChwYXJhbWV0ZXIubmFtZSkpIH0pO1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIG5ldyBSZXNvbHZlZFBhcmFtZXRlcnMocmVzdWx0KTtcbiAgICAgIH0pO1xuXG4gICAgaW5jb21pbmdSZXNvbHZlZFJvdXRlUGFyYW1ldGVycy5zdWJzY3JpYmUocmVzb2x2ZWRQYXJhbWV0ZXJzID0+IHtcbiAgICAgIHRoaXMuX2luY29taW5nUm91dGVDaGFuZ2UudmFsdWUgPSB0cnVlO1xuICAgICAgdGhpcy5yZXNvbHZlZFBhcmFtZXRlcnMudmFsdWUgPSByZXNvbHZlZFBhcmFtZXRlcnM7XG4gICAgICB0aGlzLl9pbmNvbWluZ1JvdXRlQ2hhbmdlLnZhbHVlID0gZmFsc2U7XG4gICAgfSk7XG5cbiAgICB3aGVuLnZhbHVlT2YodGhpcy5yZXNvbHZlZFBhcmFtZXRlcnMpLmNoYW5nZXMoKHBhcmFtcywgcHJldmlvdXMpID0+IHtcbiAgICAgIHBhcmFtcy5yZWRpcmVjdChwcmV2aW91cywgcm91dGVyLCBhY3RpdmF0ZWRSb3V0ZSk7XG4gICAgfSwgeyB1bmxlc3M6IHRoaXMuaW5jb21pbmdSb3V0ZUNoYW5nZSB9KTtcblxuICAgIHRoaXMudHhvLm9ic2VydmUoJ2luY29taW5nUmVzb2x2ZWRSb3V0ZVBhcmFtZXRlcnMnLCBpbmNvbWluZ1Jlc29sdmVkUm91dGVQYXJhbWV0ZXJzKTtcbiAgICB0aGlzLnR4by5vYnNlcnZlKCd0aGlzLnJvdXRlSXNDaGFuZ2luZycsIHRoaXMuaW5jb21pbmdSb3V0ZUNoYW5nZSk7XG4gIH1cblxuICBnZXQgaW5jb21pbmdSb3V0ZUNoYW5nZSgpIHtcbiAgICByZXR1cm4gdGhpcy5faW5jb21pbmdSb3V0ZUNoYW5nZS5yZWFkb25seTtcbiAgfVxuXG4gIHByb3RlY3RlZCBpbnN0YWxsQmluZGluZzxUPihwYXJhbWV0ZXI6IFBhcmFtZXRlckRlZmluaXRpb248VD4pIHtcbiAgICBjb25zdCBtb2RlbCA9IHRoaXMuZ2V0TW9kZWxGb3IocGFyYW1ldGVyKTtcbiAgICB0aGlzLnR4by5vYnNlcnZlKHBhcmFtZXRlci5wcm9wZXJ0eU5hbWUsIG1vZGVsKTtcbiAgICB0aGlzLnJlZ2lzdGVyRGlzcG9zYWJsZShuZXcgQmluZGluZyh0aGlzLnJlc29sdmVkUGFyYW1ldGVycywgbW9kZWwsIHtcbiAgICAgIHRvUmlnaHQocGFyYW1ldGVyczogUmVzb2x2ZWRQYXJhbWV0ZXJzKTogVCB7XG4gICAgICAgIHJldHVybiBwYXJhbWV0ZXJzLmdldChwYXJhbWV0ZXIpO1xuICAgICAgfSxcbiAgICAgIHRvTGVmdCh2YWx1ZTogVCwgY3VycmVudFBhcmFtZXRlcnM/OiBSZXNvbHZlZFBhcmFtZXRlcnMpOiBSZXNvbHZlZFBhcmFtZXRlcnMge1xuICAgICAgICByZXR1cm4gY3VycmVudFBhcmFtZXRlcnMucmVwbGFjZShwYXJhbWV0ZXIsIHZhbHVlKTtcbiAgICAgIH1cbiAgICB9KSk7XG4gIH1cblxuXG4gIHByaXZhdGUgZ2V0TW9kZWxGb3I8VD4ocGFyYW1ldGVyOiBQYXJhbWV0ZXJEZWZpbml0aW9uPFQ+KTogTXV0YWJsZUhhc1ZhbHVlPFQ+IHtcbiAgICByZXR1cm4gdGhpcy5jb21wb25lbnRbcGFyYW1ldGVyLnByb3BlcnR5TmFtZV07XG4gIH1cbn1cblxuZXhwb3J0IG5hbWVzcGFjZSBSb3V0ZVBhcmFtZXRlckJpbmRpbmdzIHtcbiAgZXhwb3J0IGNvbnN0IFJPVVRFX1BBUkFNRVRFUl9MSVNUX0tFWSA9IFN5bWJvbCgncGxhY2U6cm91dGU6cGFyYW1ldGVycycpO1xufVxuIl19
@@ -0,0 +1,148 @@
1
+ /**
2
+ * @fileoverview added by tsickle
3
+ * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
4
+ */
5
+ import * as tslib_1 from "tslib";
6
+ import { assert, Trace } from '@coolon/pectin';
7
+ import { Memoize } from '@typescript-plus/fast-memoize-decorator/dist/src';
8
+ export class RouteParameterSanitiser {
9
+ /**
10
+ * @param {?} parameterDefs
11
+ * @param {?} injector
12
+ */
13
+ constructor(parameterDefs, injector) {
14
+ this.parameterDefs = parameterDefs;
15
+ this.injector = injector;
16
+ this.sanitisedParameters = [];
17
+ this.routeParameter = parameterDefs.find((/**
18
+ * @param {?} p
19
+ * @return {?}
20
+ */
21
+ p => p.isRouteId));
22
+ this.queryParameters = parameterDefs.filter((/**
23
+ * @param {?} p
24
+ * @return {?}
25
+ */
26
+ p => !p.isRouteId));
27
+ }
28
+ /**
29
+ * @param {?} snapshot
30
+ * @return {?}
31
+ */
32
+ sanitise(snapshot) {
33
+ return tslib_1.__awaiter(this, void 0, void 0, function* () {
34
+ if (this.routeParameter) {
35
+ /** @type {?} */
36
+ const routeOk = yield this.sanitiseParameter(this.routeParameter, snapshot.paramMap.get(this.routeParameter.name));
37
+ if (!routeOk) {
38
+ // if the route id isn't ok we redirect immediately as the query params may need to be sanitised in the
39
+ // context of the route id.
40
+ return false;
41
+ }
42
+ }
43
+ for (const param of this.queryParameters) {
44
+ yield this.sanitiseParameter(param, snapshot.queryParamMap.get(param.name));
45
+ }
46
+ return this.sanitisedParameters.length === 0;
47
+ });
48
+ }
49
+ /**
50
+ * @template T
51
+ * @param {?} def
52
+ * @param {?} formattedInitialValue
53
+ * @return {?}
54
+ */
55
+ sanitiseParameter(def, formattedInitialValue) {
56
+ return tslib_1.__awaiter(this, void 0, void 0, function* () {
57
+ if (def) {
58
+ /** @type {?} */
59
+ const sanitiser = this.getSanitiser(def);
60
+ if (sanitiser) {
61
+ /** @type {?} */
62
+ const initialValue = def.type.parse(formattedInitialValue);
63
+ /** @type {?} */
64
+ const sanitisedValue = yield sanitiser.sanitise(initialValue);
65
+ if (initialValue !== sanitisedValue) {
66
+ this.sanitisedParameters.push({ def, value: def.type.format(sanitisedValue) });
67
+ return false;
68
+ }
69
+ }
70
+ }
71
+ return true;
72
+ });
73
+ }
74
+ /**
75
+ * @param {?} router
76
+ * @return {?}
77
+ */
78
+ redirect(router) {
79
+ assert.isTruthy(this.sanitisedParameters.length !== 0);
80
+ /** @type {?} */
81
+ const sanitisedRouteId = this.sanitisedParameters.find((/**
82
+ * @param {?} s
83
+ * @return {?}
84
+ */
85
+ s => s.def === this.routeParameter));
86
+ if (sanitisedRouteId) {
87
+ return router.navigate(['..', sanitisedRouteId.value]);
88
+ }
89
+ else {
90
+ /** @type {?} */
91
+ const queryParams = this.sanitisedParameters.filter((/**
92
+ * @param {?} s
93
+ * @return {?}
94
+ */
95
+ s => s.def !== this.routeParameter))
96
+ .reduce((/**
97
+ * @param {?} params
98
+ * @param {?} item
99
+ * @return {?}
100
+ */
101
+ (params, item) => (Object.assign({}, params, { [item.def.name]: item.value }))), {});
102
+ return router.navigate(['.', queryParams]);
103
+ }
104
+ }
105
+ /**
106
+ * @private
107
+ * @template T
108
+ * @param {?} def
109
+ * @return {?}
110
+ */
111
+ getSanitiser(def) {
112
+ return def.sanitiser ? this.injector.get(def.sanitiser, new def.sanitiser()) : null;
113
+ }
114
+ }
115
+ tslib_1.__decorate([
116
+ Trace(),
117
+ tslib_1.__metadata("design:type", Function),
118
+ tslib_1.__metadata("design:paramtypes", [Object, String]),
119
+ tslib_1.__metadata("design:returntype", Promise)
120
+ ], RouteParameterSanitiser.prototype, "sanitiseParameter", null);
121
+ tslib_1.__decorate([
122
+ Memoize(),
123
+ tslib_1.__metadata("design:type", Function),
124
+ tslib_1.__metadata("design:paramtypes", [Object]),
125
+ tslib_1.__metadata("design:returntype", Object)
126
+ ], RouteParameterSanitiser.prototype, "getSanitiser", null);
127
+ if (false) {
128
+ /**
129
+ * @type {?}
130
+ * @private
131
+ */
132
+ RouteParameterSanitiser.prototype.routeParameter;
133
+ /**
134
+ * @type {?}
135
+ * @private
136
+ */
137
+ RouteParameterSanitiser.prototype.queryParameters;
138
+ /**
139
+ * @type {?}
140
+ * @private
141
+ */
142
+ RouteParameterSanitiser.prototype.sanitisedParameters;
143
+ /** @type {?} */
144
+ RouteParameterSanitiser.prototype.parameterDefs;
145
+ /** @type {?} */
146
+ RouteParameterSanitiser.prototype.injector;
147
+ }
148
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGUtcGFyYW1ldGVyLXNhbml0aXNlci5qcyIsInNvdXJjZVJvb3QiOiJuZzovL0Bjb29sb24vYW5ndWxhci11aS1wb3dlcnVwcy8iLCJzb3VyY2VzIjpbImxpYi9wbGFjZS9yb3V0ZS9yb3V0ZS1wYXJhbWV0ZXItc2FuaXRpc2VyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBRUEsT0FBTyxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUMvQyxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sa0RBQWtELENBQUM7QUFJM0UsTUFBTSxPQUFPLHVCQUF1Qjs7Ozs7SUFPbEMsWUFBcUIsYUFBeUMsRUFBVyxRQUFrQjtRQUF0RSxrQkFBYSxHQUFiLGFBQWEsQ0FBNEI7UUFBVyxhQUFRLEdBQVIsUUFBUSxDQUFVO1FBRjFFLHdCQUFtQixHQUF1RCxFQUFFLENBQUM7UUFHNUYsSUFBSSxDQUFDLGNBQWMsR0FBRyxhQUFhLENBQUMsSUFBSTs7OztRQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLFNBQVMsRUFBQyxDQUFDO1FBQzNELElBQUksQ0FBQyxlQUFlLEdBQUcsYUFBYSxDQUFDLE1BQU07Ozs7UUFBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsRUFBQyxDQUFDO0lBQ2pFLENBQUM7Ozs7O0lBRUssUUFBUSxDQUFDLFFBQWdDOztZQUM3QyxJQUFJLElBQUksQ0FBQyxjQUFjLEVBQUU7O3NCQUNqQixPQUFPLEdBQUcsTUFBTSxJQUFJLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLGNBQWMsRUFBRSxRQUFRLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxDQUFDO2dCQUNsSCxJQUFJLENBQUMsT0FBTyxFQUFFO29CQUNaLHVHQUF1RztvQkFDdkcsMkJBQTJCO29CQUMzQixPQUFPLEtBQUssQ0FBQztpQkFDZDthQUNGO1lBQ0QsS0FBSyxNQUFNLEtBQUssSUFBSSxJQUFJLENBQUMsZUFBZSxFQUFFO2dCQUN4QyxNQUFNLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxLQUFLLEVBQUUsUUFBUSxDQUFDLGFBQWEsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7YUFDN0U7WUFDRCxPQUFPLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxNQUFNLEtBQUssQ0FBQyxDQUFDO1FBQy9DLENBQUM7S0FBQTs7Ozs7OztJQUdLLGlCQUFpQixDQUFJLEdBQTJCLEVBQUUscUJBQTZCOztZQUNuRixJQUFJLEdBQUcsRUFBRTs7c0JBQ0QsU0FBUyxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsR0FBRyxDQUFDO2dCQUN4QyxJQUFJLFNBQVMsRUFBRTs7MEJBQ1AsWUFBWSxHQUFHLEdBQUcsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLHFCQUFxQixDQUFDOzswQkFDcEQsY0FBYyxHQUFHLE1BQU0sU0FBUyxDQUFDLFFBQVEsQ0FBQyxZQUFZLENBQUM7b0JBQzdELElBQUksWUFBWSxLQUFLLGNBQWMsRUFBRTt3QkFDbkMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLElBQUksQ0FBQyxFQUFFLEdBQUcsRUFBRSxLQUFLLEVBQUUsR0FBRyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsY0FBYyxDQUFDLEVBQUUsQ0FBQyxDQUFDO3dCQUMvRSxPQUFPLEtBQUssQ0FBQztxQkFDZDtpQkFDRjthQUNGO1lBQ0QsT0FBTyxJQUFJLENBQUM7UUFDZCxDQUFDO0tBQUE7Ozs7O0lBRUQsUUFBUSxDQUFDLE1BQWM7UUFDckIsTUFBTSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsbUJBQW1CLENBQUMsTUFBTSxLQUFLLENBQUMsQ0FBQyxDQUFDOztjQUNqRCxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsbUJBQW1CLENBQUMsSUFBSTs7OztRQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxJQUFJLENBQUMsY0FBYyxFQUFDO1FBQzFGLElBQUksZ0JBQWdCLEVBQUU7WUFDcEIsT0FBTyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUMsSUFBSSxFQUFFLGdCQUFnQixDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7U0FDeEQ7YUFBTTs7a0JBQ0MsV0FBVyxHQUFHLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxNQUFNOzs7O1lBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLElBQUksQ0FBQyxjQUFjLEVBQUM7aUJBQ3BGLE1BQU07Ozs7O1lBQUMsQ0FBQyxNQUFNLEVBQUUsSUFBSSxFQUFFLEVBQUUsQ0FBQyxtQkFBTSxNQUFNLElBQUUsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxFQUFFLElBQUksQ0FBQyxLQUFLLElBQUcsR0FBRSxFQUFFLENBQUM7WUFDN0UsT0FBTyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUMsR0FBRyxFQUFFLFdBQVcsQ0FBQyxDQUFDLENBQUM7U0FDNUM7SUFDSCxDQUFDOzs7Ozs7O0lBR08sWUFBWSxDQUFJLEdBQTJCO1FBQ2pELE9BQU8sR0FBRyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQXdCLEdBQUcsQ0FBQyxTQUFTLEVBQUUsSUFBSSxHQUFHLENBQUMsU0FBUyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO0lBQzdHLENBQUM7Q0FDRjtBQS9CQztJQURDLEtBQUssRUFBRTs7OztnRUFjUDtBQWVEO0lBREMsT0FBTyxFQUFFOzs7OzJEQUdUOzs7Ozs7SUF4REQsaURBQTBEOzs7OztJQUMxRCxrREFBNkQ7Ozs7O0lBRTdELHNEQUE4Rjs7SUFFbEYsZ0RBQWtEOztJQUFFLDJDQUEyQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdG9yIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBBY3RpdmF0ZWRSb3V0ZVNuYXBzaG90LCBSb3V0ZXIgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuaW1wb3J0IHsgYXNzZXJ0LCBUcmFjZSB9IGZyb20gJ0Bjb29sb24vcGVjdGluJztcbmltcG9ydCB7IE1lbW9pemUgfSBmcm9tICdAdHlwZXNjcmlwdC1wbHVzL2Zhc3QtbWVtb2l6ZS1kZWNvcmF0b3IvZGlzdC9zcmMnO1xuaW1wb3J0IHsgUGFyYW1ldGVyRGVmaW5pdGlvbiB9IGZyb20gJy4vcGFyYW1ldGVyLWRlZmluaXRpb24uY2xhc3MnO1xuaW1wb3J0IHsgUGFyYW1ldGVyU2FuaXRpc2VyIH0gZnJvbSAnLi9wYXJhbWV0ZXItc2FuaXRpc2VyJztcblxuZXhwb3J0IGNsYXNzIFJvdXRlUGFyYW1ldGVyU2FuaXRpc2VyIHtcblxuICBwcml2YXRlIHJlYWRvbmx5IHJvdXRlUGFyYW1ldGVyOiBQYXJhbWV0ZXJEZWZpbml0aW9uPGFueT47XG4gIHByaXZhdGUgcmVhZG9ubHkgcXVlcnlQYXJhbWV0ZXJzOiBQYXJhbWV0ZXJEZWZpbml0aW9uPGFueT5bXTtcblxuICBwcml2YXRlIHJlYWRvbmx5IHNhbml0aXNlZFBhcmFtZXRlcnM6IHsgZGVmOiBQYXJhbWV0ZXJEZWZpbml0aW9uPGFueT4sIHZhbHVlOiBzdHJpbmcgfVtdID0gW107XG5cbiAgY29uc3RydWN0b3IocmVhZG9ubHkgcGFyYW1ldGVyRGVmczogUGFyYW1ldGVyRGVmaW5pdGlvbjxhbnk+W10sIHJlYWRvbmx5IGluamVjdG9yOiBJbmplY3Rvcikge1xuICAgIHRoaXMucm91dGVQYXJhbWV0ZXIgPSBwYXJhbWV0ZXJEZWZzLmZpbmQocCA9PiBwLmlzUm91dGVJZCk7XG4gICAgdGhpcy5xdWVyeVBhcmFtZXRlcnMgPSBwYXJhbWV0ZXJEZWZzLmZpbHRlcihwID0+ICFwLmlzUm91dGVJZCk7XG4gIH1cblxuICBhc3luYyBzYW5pdGlzZShzbmFwc2hvdDogQWN0aXZhdGVkUm91dGVTbmFwc2hvdCk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIGlmICh0aGlzLnJvdXRlUGFyYW1ldGVyKSB7XG4gICAgICBjb25zdCByb3V0ZU9rID0gYXdhaXQgdGhpcy5zYW5pdGlzZVBhcmFtZXRlcih0aGlzLnJvdXRlUGFyYW1ldGVyLCBzbmFwc2hvdC5wYXJhbU1hcC5nZXQodGhpcy5yb3V0ZVBhcmFtZXRlci5uYW1lKSk7XG4gICAgICBpZiAoIXJvdXRlT2spIHtcbiAgICAgICAgLy8gaWYgdGhlIHJvdXRlIGlkIGlzbid0IG9rIHdlIHJlZGlyZWN0IGltbWVkaWF0ZWx5IGFzIHRoZSBxdWVyeSBwYXJhbXMgbWF5IG5lZWQgdG8gYmUgc2FuaXRpc2VkIGluIHRoZVxuICAgICAgICAvLyBjb250ZXh0IG9mIHRoZSByb3V0ZSBpZC5cbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgIH1cbiAgICBmb3IgKGNvbnN0IHBhcmFtIG9mIHRoaXMucXVlcnlQYXJhbWV0ZXJzKSB7XG4gICAgICBhd2FpdCB0aGlzLnNhbml0aXNlUGFyYW1ldGVyKHBhcmFtLCBzbmFwc2hvdC5xdWVyeVBhcmFtTWFwLmdldChwYXJhbS5uYW1lKSk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLnNhbml0aXNlZFBhcmFtZXRlcnMubGVuZ3RoID09PSAwO1xuICB9XG5cbiAgQFRyYWNlKClcbiAgYXN5bmMgc2FuaXRpc2VQYXJhbWV0ZXI8VD4oZGVmOiBQYXJhbWV0ZXJEZWZpbml0aW9uPFQ+LCBmb3JtYXR0ZWRJbml0aWFsVmFsdWU6IHN0cmluZyk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIGlmIChkZWYpIHtcbiAgICAgIGNvbnN0IHNhbml0aXNlciA9IHRoaXMuZ2V0U2FuaXRpc2VyKGRlZik7XG4gICAgICBpZiAoc2FuaXRpc2VyKSB7XG4gICAgICAgIGNvbnN0IGluaXRpYWxWYWx1ZSA9IGRlZi50eXBlLnBhcnNlKGZvcm1hdHRlZEluaXRpYWxWYWx1ZSk7XG4gICAgICAgIGNvbnN0IHNhbml0aXNlZFZhbHVlID0gYXdhaXQgc2FuaXRpc2VyLnNhbml0aXNlKGluaXRpYWxWYWx1ZSk7XG4gICAgICAgIGlmIChpbml0aWFsVmFsdWUgIT09IHNhbml0aXNlZFZhbHVlKSB7XG4gICAgICAgICAgdGhpcy5zYW5pdGlzZWRQYXJhbWV0ZXJzLnB1c2goeyBkZWYsIHZhbHVlOiBkZWYudHlwZS5mb3JtYXQoc2FuaXRpc2VkVmFsdWUpIH0pO1xuICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIHJlZGlyZWN0KHJvdXRlcjogUm91dGVyKSB7XG4gICAgYXNzZXJ0LmlzVHJ1dGh5KHRoaXMuc2FuaXRpc2VkUGFyYW1ldGVycy5sZW5ndGggIT09IDApO1xuICAgIGNvbnN0IHNhbml0aXNlZFJvdXRlSWQgPSB0aGlzLnNhbml0aXNlZFBhcmFtZXRlcnMuZmluZChzID0+IHMuZGVmID09PSB0aGlzLnJvdXRlUGFyYW1ldGVyKTtcbiAgICBpZiAoc2FuaXRpc2VkUm91dGVJZCkge1xuICAgICAgcmV0dXJuIHJvdXRlci5uYXZpZ2F0ZShbJy4uJywgc2FuaXRpc2VkUm91dGVJZC52YWx1ZV0pO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBxdWVyeVBhcmFtcyA9IHRoaXMuc2FuaXRpc2VkUGFyYW1ldGVycy5maWx0ZXIocyA9PiBzLmRlZiAhPT0gdGhpcy5yb3V0ZVBhcmFtZXRlcilcbiAgICAgICAgLnJlZHVjZSgocGFyYW1zLCBpdGVtKSA9PiAoeyAuLi5wYXJhbXMsIFtpdGVtLmRlZi5uYW1lXTogaXRlbS52YWx1ZSB9KSwge30pO1xuICAgICAgcmV0dXJuIHJvdXRlci5uYXZpZ2F0ZShbJy4nLCBxdWVyeVBhcmFtc10pO1xuICAgIH1cbiAgfVxuXG4gIEBNZW1vaXplKClcbiAgcHJpdmF0ZSBnZXRTYW5pdGlzZXI8VD4oZGVmOiBQYXJhbWV0ZXJEZWZpbml0aW9uPFQ+KTogUGFyYW1ldGVyU2FuaXRpc2VyPFQ+IHtcbiAgICByZXR1cm4gZGVmLnNhbml0aXNlciA/IHRoaXMuaW5qZWN0b3IuZ2V0PFBhcmFtZXRlclNhbml0aXNlcjxUPj4oZGVmLnNhbml0aXNlciwgbmV3IGRlZi5zYW5pdGlzZXIoKSkgOiBudWxsO1xuICB9XG59XG4iXX0=
@@ -0,0 +1,10 @@
1
+ /**
2
+ * @fileoverview added by tsickle
3
+ * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
4
+ */
5
+ export { AngularUiPowerupsModule } from './lib/angular-ui-powerups.module';
6
+ export { DisposableComponent, ResizeAwareComponent, AbstractInputComponent, NumberInputComponent, PasswordInputComponent, SelectInputComponent, StringInputComponent, Bounds, Dimension, Point } from './lib/components';
7
+ export { CommandDirective, FocusBindingDirective } from './lib/directives';
8
+ export { AbstractActivity, ACTIVITY_DATA, INTERACTION_CONTEXT, InteractionContext, InteractionModule, ActivityContainerComponent, ActivityOutletComponent, AlertDialogComponent, ConfirmationDialogComponent, DialogInteractionService } from './lib/interaction';
9
+ export { AbstractPlaceComponent, Place, PlaceModule, PlaceService, BusyOverlayComponent, EmptyStateComponent, PlaceOutletComponent, LeavePlaceGuard, PlaceRouteGuard, RouteId, QueryParameter, ParameterType, RouteParameterBindings, RouteParameterSanitiser } from './lib/place';
10
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGljX2FwaS5qcyIsInNvdXJjZVJvb3QiOiJuZzovL0Bjb29sb24vYW5ndWxhci11aS1wb3dlcnVwcy8iLCJzb3VyY2VzIjpbInB1YmxpY19hcGkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7OztBQUFBLHdDQUFjLGtDQUFrQyxDQUFDO0FBQ2pELHNNQUFjLGtCQUFrQixDQUFDO0FBQ2pDLHdEQUFjLGtCQUFrQixDQUFDO0FBQ2pDLDhPQUFjLG1CQUFtQixDQUFDO0FBQ2xDLHFRQUFjLGFBQWEsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCAqIGZyb20gJy4vbGliL2FuZ3VsYXItdWktcG93ZXJ1cHMubW9kdWxlJztcbmV4cG9ydCAqIGZyb20gJy4vbGliL2NvbXBvbmVudHMnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvZGlyZWN0aXZlcyc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9pbnRlcmFjdGlvbic7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9wbGFjZSc7XG4iXX0=
@@ -0,0 +1,17 @@
1
+ /**
2
+ * @fileoverview added by tsickle
3
+ * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
4
+ */
5
+ /**
6
+ * Generated bundle index. Do not edit.
7
+ */
8
+ export { AngularUiPowerupsModule, DisposableComponent, ResizeAwareComponent, AbstractInputComponent, NumberInputComponent, PasswordInputComponent, SelectInputComponent, StringInputComponent, Bounds, Dimension, Point, CommandDirective, FocusBindingDirective, AbstractActivity, ACTIVITY_DATA, INTERACTION_CONTEXT, InteractionContext, InteractionModule, ActivityContainerComponent, ActivityOutletComponent, AlertDialogComponent, ConfirmationDialogComponent, DialogInteractionService, AbstractPlaceComponent, Place, PlaceModule, PlaceService, BusyOverlayComponent, EmptyStateComponent, PlaceOutletComponent, LeavePlaceGuard, PlaceRouteGuard, RouteId, QueryParameter, ParameterType, RouteParameterBindings, RouteParameterSanitiser } from './index';
9
+ export { DisposableComponent as ɵc } from './lib/components/disposable-component';
10
+ export { AbstractInputComponent as ɵe } from './lib/components/forms/abstract-input.component';
11
+ export { NumberInputComponent as ɵd } from './lib/components/forms/number-input/number-input.component';
12
+ export { PasswordInputComponent as ɵg } from './lib/components/forms/password-input/password-input.component';
13
+ export { SelectInputComponent as ɵh } from './lib/components/forms/select-input/select-input.component';
14
+ export { StringInputComponent as ɵf } from './lib/components/forms/string-input/string-input.component';
15
+ export { CommandDirective as ɵa } from './lib/directives/command.directive';
16
+ export { FocusBindingDirective as ɵb } from './lib/directives/focus-binding.directive';
17
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29vbG9uLWFuZ3VsYXItdWktcG93ZXJ1cHMuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9AY29vbG9uL2FuZ3VsYXItdWktcG93ZXJ1cHMvIiwic291cmNlcyI6WyJjb29sb24tYW5ndWxhci11aS1wb3dlcnVwcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7O0FBSUEsNnRCQUFjLFNBQVMsQ0FBQztBQUV4QixPQUFPLEVBQUMsbUJBQW1CLElBQUksRUFBRSxFQUFDLE1BQU0sdUNBQXVDLENBQUM7QUFDaEYsT0FBTyxFQUFDLHNCQUFzQixJQUFJLEVBQUUsRUFBQyxNQUFNLGlEQUFpRCxDQUFDO0FBQzdGLE9BQU8sRUFBQyxvQkFBb0IsSUFBSSxFQUFFLEVBQUMsTUFBTSw0REFBNEQsQ0FBQztBQUN0RyxPQUFPLEVBQUMsc0JBQXNCLElBQUksRUFBRSxFQUFDLE1BQU0sZ0VBQWdFLENBQUM7QUFDNUcsT0FBTyxFQUFDLG9CQUFvQixJQUFJLEVBQUUsRUFBQyxNQUFNLDREQUE0RCxDQUFDO0FBQ3RHLE9BQU8sRUFBQyxvQkFBb0IsSUFBSSxFQUFFLEVBQUMsTUFBTSw0REFBNEQsQ0FBQztBQUN0RyxPQUFPLEVBQUMsZ0JBQWdCLElBQUksRUFBRSxFQUFDLE1BQU0sb0NBQW9DLENBQUM7QUFDMUUsT0FBTyxFQUFDLHFCQUFxQixJQUFJLEVBQUUsRUFBQyxNQUFNLDBDQUEwQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBHZW5lcmF0ZWQgYnVuZGxlIGluZGV4LiBEbyBub3QgZWRpdC5cbiAqL1xuXG5leHBvcnQgKiBmcm9tICcuL2luZGV4JztcblxuZXhwb3J0IHtEaXNwb3NhYmxlQ29tcG9uZW50IGFzIMm1Y30gZnJvbSAnLi9saWIvY29tcG9uZW50cy9kaXNwb3NhYmxlLWNvbXBvbmVudCc7XG5leHBvcnQge0Fic3RyYWN0SW5wdXRDb21wb25lbnQgYXMgybVlfSBmcm9tICcuL2xpYi9jb21wb25lbnRzL2Zvcm1zL2Fic3RyYWN0LWlucHV0LmNvbXBvbmVudCc7XG5leHBvcnQge051bWJlcklucHV0Q29tcG9uZW50IGFzIMm1ZH0gZnJvbSAnLi9saWIvY29tcG9uZW50cy9mb3Jtcy9udW1iZXItaW5wdXQvbnVtYmVyLWlucHV0LmNvbXBvbmVudCc7XG5leHBvcnQge1Bhc3N3b3JkSW5wdXRDb21wb25lbnQgYXMgybVnfSBmcm9tICcuL2xpYi9jb21wb25lbnRzL2Zvcm1zL3Bhc3N3b3JkLWlucHV0L3Bhc3N3b3JkLWlucHV0LmNvbXBvbmVudCc7XG5leHBvcnQge1NlbGVjdElucHV0Q29tcG9uZW50IGFzIMm1aH0gZnJvbSAnLi9saWIvY29tcG9uZW50cy9mb3Jtcy9zZWxlY3QtaW5wdXQvc2VsZWN0LWlucHV0LmNvbXBvbmVudCc7XG5leHBvcnQge1N0cmluZ0lucHV0Q29tcG9uZW50IGFzIMm1Zn0gZnJvbSAnLi9saWIvY29tcG9uZW50cy9mb3Jtcy9zdHJpbmctaW5wdXQvc3RyaW5nLWlucHV0LmNvbXBvbmVudCc7XG5leHBvcnQge0NvbW1hbmREaXJlY3RpdmUgYXMgybVhfSBmcm9tICcuL2xpYi9kaXJlY3RpdmVzL2NvbW1hbmQuZGlyZWN0aXZlJztcbmV4cG9ydCB7Rm9jdXNCaW5kaW5nRGlyZWN0aXZlIGFzIMm1Yn0gZnJvbSAnLi9saWIvZGlyZWN0aXZlcy9mb2N1cy1iaW5kaW5nLmRpcmVjdGl2ZSc7Il19
package/esm5/index.js ADDED
@@ -0,0 +1,6 @@
1
+ /**
2
+ * @fileoverview added by tsickle
3
+ * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
4
+ */
5
+ export { AngularUiPowerupsModule, DisposableComponent, ResizeAwareComponent, AbstractInputComponent, NumberInputComponent, PasswordInputComponent, SelectInputComponent, StringInputComponent, Bounds, Dimension, Point, CommandDirective, FocusBindingDirective, AbstractActivity, ACTIVITY_DATA, INTERACTION_CONTEXT, InteractionContext, InteractionModule, ActivityContainerComponent, ActivityOutletComponent, AlertDialogComponent, ConfirmationDialogComponent, DialogInteractionService, AbstractPlaceComponent, Place, PlaceModule, PlaceService, BusyOverlayComponent, EmptyStateComponent, PlaceOutletComponent, LeavePlaceGuard, PlaceRouteGuard, RouteId, QueryParameter, ParameterType, RouteParameterBindings, RouteParameterSanitiser } from "./public_api";
6
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290Ijoibmc6Ly9AY29vbG9uL2FuZ3VsYXItdWktcG93ZXJ1cHMvIiwic291cmNlcyI6WyJpbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7O0FBQUEsNnRCQUFjLGNBQWMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCAqIGZyb20gXCIuL3B1YmxpY19hcGlcIjtcbiJdfQ==
@@ -0,0 +1,52 @@
1
+ /**
2
+ * @fileoverview added by tsickle
3
+ * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
4
+ */
5
+ import { CommonModule } from '@angular/common';
6
+ import { NgModule } from '@angular/core';
7
+ import { FormsModule } from '@angular/forms';
8
+ import { MatFormFieldModule, MatInputModule, MatSelectModule } from '@angular/material';
9
+ import { BrowserModule } from '@angular/platform-browser';
10
+ import { BrowserAnimationsModule } from '@angular/platform-browser/animations';
11
+ import { NumberInputComponent } from './components/forms/number-input/number-input.component';
12
+ import { CommandDirective } from './directives/command.directive';
13
+ import { FocusBindingDirective } from './directives/focus-binding.directive';
14
+ import { StringInputComponent } from './components/forms/string-input/string-input.component';
15
+ import { PasswordInputComponent } from './components/forms/password-input/password-input.component';
16
+ import { SelectInputComponent } from './components/forms/select-input/select-input.component';
17
+ var AngularUiPowerupsModule = /** @class */ (function () {
18
+ function AngularUiPowerupsModule() {
19
+ }
20
+ AngularUiPowerupsModule.decorators = [
21
+ { type: NgModule, args: [{
22
+ declarations: [
23
+ CommandDirective,
24
+ FocusBindingDirective,
25
+ NumberInputComponent,
26
+ StringInputComponent,
27
+ PasswordInputComponent,
28
+ SelectInputComponent,
29
+ ],
30
+ imports: [
31
+ CommonModule,
32
+ BrowserModule,
33
+ BrowserAnimationsModule,
34
+ FormsModule,
35
+ MatInputModule,
36
+ MatFormFieldModule,
37
+ MatSelectModule
38
+ ],
39
+ exports: [
40
+ CommandDirective,
41
+ FocusBindingDirective,
42
+ NumberInputComponent,
43
+ StringInputComponent,
44
+ PasswordInputComponent,
45
+ SelectInputComponent,
46
+ ]
47
+ },] }
48
+ ];
49
+ return AngularUiPowerupsModule;
50
+ }());
51
+ export { AngularUiPowerupsModule };
52
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYW5ndWxhci11aS1wb3dlcnVwcy5tb2R1bGUuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9AY29vbG9uL2FuZ3VsYXItdWktcG93ZXJ1cHMvIiwic291cmNlcyI6WyJsaWIvYW5ndWxhci11aS1wb3dlcnVwcy5tb2R1bGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7OztBQUFBLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3pDLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM3QyxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsY0FBYyxFQUFFLGVBQWUsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQ3hGLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUMxRCxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSxzQ0FBc0MsQ0FBQztBQUMvRSxPQUFPLEVBQUUsb0JBQW9CLEVBQUMsTUFBTSx3REFBd0QsQ0FBQztBQUM3RixPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUNsRSxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxzQ0FBc0MsQ0FBQztBQUM3RSxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSx3REFBd0QsQ0FBQztBQUM5RixPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSw0REFBNEQsQ0FBQztBQUNwRyxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSx3REFBd0QsQ0FBQztBQUU5RjtJQUFBO0lBNkJBLENBQUM7O2dCQTdCQSxRQUFRLFNBQUM7b0JBQ1IsWUFBWSxFQUFFO3dCQUNaLGdCQUFnQjt3QkFDaEIscUJBQXFCO3dCQUNyQixvQkFBb0I7d0JBQ3BCLG9CQUFvQjt3QkFDcEIsc0JBQXNCO3dCQUN0QixvQkFBb0I7cUJBQ3JCO29CQUNELE9BQU8sRUFBRTt3QkFDUCxZQUFZO3dCQUNaLGFBQWE7d0JBQ2IsdUJBQXVCO3dCQUN2QixXQUFXO3dCQUNYLGNBQWM7d0JBQ2Qsa0JBQWtCO3dCQUNsQixlQUFlO3FCQUNoQjtvQkFDRCxPQUFPLEVBQUU7d0JBQ1AsZ0JBQWdCO3dCQUNoQixxQkFBcUI7d0JBQ3JCLG9CQUFvQjt3QkFDcEIsb0JBQW9CO3dCQUNwQixzQkFBc0I7d0JBQ3RCLG9CQUFvQjtxQkFDckI7aUJBRUY7O0lBRUQsOEJBQUM7Q0FBQSxBQTdCRCxJQTZCQztTQURZLHVCQUF1QiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBOZ01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRm9ybXNNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBNYXRGb3JtRmllbGRNb2R1bGUsIE1hdElucHV0TW9kdWxlLCBNYXRTZWxlY3RNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbCc7XG5pbXBvcnQgeyBCcm93c2VyTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvcGxhdGZvcm0tYnJvd3Nlcic7XG5pbXBvcnQgeyBCcm93c2VyQW5pbWF0aW9uc01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL3BsYXRmb3JtLWJyb3dzZXIvYW5pbWF0aW9ucyc7XG5pbXBvcnQgeyBOdW1iZXJJbnB1dENvbXBvbmVudH0gZnJvbSAnLi9jb21wb25lbnRzL2Zvcm1zL251bWJlci1pbnB1dC9udW1iZXItaW5wdXQuY29tcG9uZW50JztcbmltcG9ydCB7IENvbW1hbmREaXJlY3RpdmUgfSBmcm9tICcuL2RpcmVjdGl2ZXMvY29tbWFuZC5kaXJlY3RpdmUnO1xuaW1wb3J0IHsgRm9jdXNCaW5kaW5nRGlyZWN0aXZlIH0gZnJvbSAnLi9kaXJlY3RpdmVzL2ZvY3VzLWJpbmRpbmcuZGlyZWN0aXZlJztcbmltcG9ydCB7IFN0cmluZ0lucHV0Q29tcG9uZW50IH0gZnJvbSAnLi9jb21wb25lbnRzL2Zvcm1zL3N0cmluZy1pbnB1dC9zdHJpbmctaW5wdXQuY29tcG9uZW50JztcbmltcG9ydCB7IFBhc3N3b3JkSW5wdXRDb21wb25lbnQgfSBmcm9tICcuL2NvbXBvbmVudHMvZm9ybXMvcGFzc3dvcmQtaW5wdXQvcGFzc3dvcmQtaW5wdXQuY29tcG9uZW50JztcbmltcG9ydCB7IFNlbGVjdElucHV0Q29tcG9uZW50IH0gZnJvbSAnLi9jb21wb25lbnRzL2Zvcm1zL3NlbGVjdC1pbnB1dC9zZWxlY3QtaW5wdXQuY29tcG9uZW50JztcblxuQE5nTW9kdWxlKHtcbiAgZGVjbGFyYXRpb25zOiBbXG4gICAgQ29tbWFuZERpcmVjdGl2ZSxcbiAgICBGb2N1c0JpbmRpbmdEaXJlY3RpdmUsXG4gICAgTnVtYmVySW5wdXRDb21wb25lbnQsXG4gICAgU3RyaW5nSW5wdXRDb21wb25lbnQsXG4gICAgUGFzc3dvcmRJbnB1dENvbXBvbmVudCxcbiAgICBTZWxlY3RJbnB1dENvbXBvbmVudCxcbiAgXSxcbiAgaW1wb3J0czogW1xuICAgIENvbW1vbk1vZHVsZSxcbiAgICBCcm93c2VyTW9kdWxlLFxuICAgIEJyb3dzZXJBbmltYXRpb25zTW9kdWxlLFxuICAgIEZvcm1zTW9kdWxlLFxuICAgIE1hdElucHV0TW9kdWxlLFxuICAgIE1hdEZvcm1GaWVsZE1vZHVsZSxcbiAgICBNYXRTZWxlY3RNb2R1bGVcbiAgXSxcbiAgZXhwb3J0czogW1xuICAgIENvbW1hbmREaXJlY3RpdmUsXG4gICAgRm9jdXNCaW5kaW5nRGlyZWN0aXZlLFxuICAgIE51bWJlcklucHV0Q29tcG9uZW50LFxuICAgIFN0cmluZ0lucHV0Q29tcG9uZW50LFxuICAgIFBhc3N3b3JkSW5wdXRDb21wb25lbnQsXG4gICAgU2VsZWN0SW5wdXRDb21wb25lbnQsXG4gIF1cblxufSlcbmV4cG9ydCBjbGFzcyBBbmd1bGFyVWlQb3dlcnVwc01vZHVsZSB7XG59XG4iXX0=
@@ -0,0 +1,24 @@
1
+ /**
2
+ * @fileoverview added by tsickle
3
+ * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
4
+ */
5
+ import * as tslib_1 from "tslib";
6
+ import { GarbageCollector } from '@coolon/pectin';
7
+ var DisposableComponent = /** @class */ (function (_super) {
8
+ tslib_1.__extends(DisposableComponent, _super);
9
+ function DisposableComponent() {
10
+ return _super !== null && _super.apply(this, arguments) || this;
11
+ }
12
+ /**
13
+ * @return {?}
14
+ */
15
+ DisposableComponent.prototype.ngOnDestroy = /**
16
+ * @return {?}
17
+ */
18
+ function () {
19
+ this.dispose();
20
+ };
21
+ return DisposableComponent;
22
+ }(GarbageCollector));
23
+ export { DisposableComponent };
24
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGlzcG9zYWJsZS1jb21wb25lbnQuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9AY29vbG9uL2FuZ3VsYXItdWktcG93ZXJ1cHMvIiwic291cmNlcyI6WyJsaWIvY29tcG9uZW50cy9kaXNwb3NhYmxlLWNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUNBLE9BQU8sRUFBQyxnQkFBZ0IsRUFBQyxNQUFNLGdCQUFnQixDQUFDO0FBRWhEO0lBQXlDLCtDQUFnQjtJQUF6RDs7SUFLQSxDQUFDOzs7O0lBSEcseUNBQVc7OztJQUFYO1FBQ0ksSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO0lBQ25CLENBQUM7SUFDTCwwQkFBQztBQUFELENBQUMsQUFMRCxDQUF5QyxnQkFBZ0IsR0FLeEQiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge09uRGVzdHJveX0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge0dhcmJhZ2VDb2xsZWN0b3J9IGZyb20gJ0Bjb29sb24vcGVjdGluJztcblxuZXhwb3J0IGNsYXNzIERpc3Bvc2FibGVDb21wb25lbnQgZXh0ZW5kcyBHYXJiYWdlQ29sbGVjdG9yIGltcGxlbWVudHMgT25EZXN0cm95IHtcblxuICAgIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgICAgICB0aGlzLmRpc3Bvc2UoKTtcbiAgICB9XG59XG4iXX0=