@coolon/angular-ui-powerups 0.0.32 → 0.0.33

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 (57) hide show
  1. package/bundles/coolon-angular-ui-powerups.umd.js +867 -724
  2. package/bundles/coolon-angular-ui-powerups.umd.js.map +1 -1
  3. package/bundles/coolon-angular-ui-powerups.umd.min.js +1 -1
  4. package/bundles/coolon-angular-ui-powerups.umd.min.js.map +1 -1
  5. package/coolon-angular-ui-powerups.metadata.json +1 -1
  6. package/esm2015/coolon-angular-ui-powerups.js +2 -2
  7. package/esm2015/index.js +2 -2
  8. package/esm2015/lib/place/components/place-outlet/place-outlet.component.js +33 -4
  9. package/esm2015/lib/place/components/tabbed-place-navigation/tabbed-place-navigation.component.js +3 -3
  10. package/esm2015/lib/place/guards/leave-place.guard.js +18 -2
  11. package/esm2015/lib/place/i-place-component.js +17 -0
  12. package/esm2015/lib/place/i-place-service.js +16 -0
  13. package/esm2015/lib/place/index.js +7 -3
  14. package/esm2015/lib/place/place-component.js +165 -7
  15. package/esm2015/lib/place/place.decorator.js +7 -87
  16. package/esm2015/lib/place/place.service.js +47 -8
  17. package/esm2015/lib/place/route/resolved-parameter.js +16 -0
  18. package/esm2015/lib/place/route/resolved-route-parameter-snapshot.js +106 -0
  19. package/esm2015/lib/place/route/route-parameter-bindings.js +14 -158
  20. package/esm2015/lib/place/route/visit-snapshot.js +7 -0
  21. package/esm2015/public_api.js +2 -2
  22. package/esm5/coolon-angular-ui-powerups.js +2 -2
  23. package/esm5/index.js +2 -2
  24. package/esm5/lib/place/components/place-outlet/place-outlet.component.js +40 -4
  25. package/esm5/lib/place/components/tabbed-place-navigation/tabbed-place-navigation.component.js +3 -3
  26. package/esm5/lib/place/guards/leave-place.guard.js +18 -2
  27. package/esm5/lib/place/i-place-component.js +17 -0
  28. package/esm5/lib/place/i-place-service.js +16 -0
  29. package/esm5/lib/place/index.js +7 -3
  30. package/esm5/lib/place/place-component.js +195 -7
  31. package/esm5/lib/place/place.decorator.js +7 -97
  32. package/esm5/lib/place/place.service.js +52 -10
  33. package/esm5/lib/place/route/resolved-parameter.js +16 -0
  34. package/esm5/lib/place/route/resolved-route-parameter-snapshot.js +129 -0
  35. package/esm5/lib/place/route/route-parameter-bindings.js +13 -185
  36. package/esm5/lib/place/route/visit-snapshot.js +11 -0
  37. package/esm5/public_api.js +2 -2
  38. package/fesm2015/coolon-angular-ui-powerups.js +818 -696
  39. package/fesm2015/coolon-angular-ui-powerups.js.map +1 -1
  40. package/fesm5/coolon-angular-ui-powerups.js +863 -722
  41. package/fesm5/coolon-angular-ui-powerups.js.map +1 -1
  42. package/lib/place/components/place-outlet/place-outlet.component.d.ts +4 -0
  43. package/lib/place/components/tabbed-place-navigation/tabbed-place-navigation.component.d.ts +1 -2
  44. package/lib/place/i-place-component.d.ts +5 -0
  45. package/lib/place/i-place-service.d.ts +10 -0
  46. package/lib/place/index.d.ts +5 -1
  47. package/lib/place/place-component.d.ts +40 -2
  48. package/lib/place/place.decorator.d.ts +1 -25
  49. package/lib/place/place.service.d.ts +13 -2
  50. package/lib/place/route/resolved-parameter.d.ts +5 -0
  51. package/lib/place/route/resolved-route-parameter-snapshot.d.ts +12 -0
  52. package/lib/place/route/route-parameter-bindings.d.ts +3 -4
  53. package/lib/place/route/visit-snapshot.d.ts +2 -0
  54. package/package.json +1 -1
  55. package/esm2015/lib/place/abstract-place-component.js +0 -50
  56. package/esm5/lib/place/abstract-place-component.js +0 -57
  57. package/lib/place/abstract-place-component.d.ts +0 -11
@@ -1,8 +1,8 @@
1
1
  (function (global, factory) {
2
- typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports, require('@angular/common'), require('@angular/core'), require('@angular/forms'), require('@angular/material'), require('@angular/platform-browser'), require('@angular/platform-browser/animations'), require('@coolon/pectin'), require('@angular/cdk/portal'), require('@coolon/pectin/lib/promise/deferred.class'), require('@coolon/typescript-utilities'), require('@angular/material/dialog'), require('@angular/material/icon'), require('@angular/material/list'), require('@angular/material/tabs'), require('@angular/material/tooltip'), require('@angular/router'), require('@angular/animations'), require('lodash'), require('reflect-metadata'), require('resize-observer-polyfill'), require('@typescript-plus/fast-memoize-decorator'), require('@typescript-plus/fast-memoize-decorator/dist/src')) :
3
- typeof define === 'function' && define.amd ? define('@coolon/angular-ui-powerups', ['exports', '@angular/common', '@angular/core', '@angular/forms', '@angular/material', '@angular/platform-browser', '@angular/platform-browser/animations', '@coolon/pectin', '@angular/cdk/portal', '@coolon/pectin/lib/promise/deferred.class', '@coolon/typescript-utilities', '@angular/material/dialog', '@angular/material/icon', '@angular/material/list', '@angular/material/tabs', '@angular/material/tooltip', '@angular/router', '@angular/animations', 'lodash', 'reflect-metadata', 'resize-observer-polyfill', '@typescript-plus/fast-memoize-decorator', '@typescript-plus/fast-memoize-decorator/dist/src'], factory) :
4
- (global = global || self, factory((global.coolon = global.coolon || {}, global.coolon['angular-ui-powerups'] = {}), global.ng.common, global.ng.core, global.ng.forms, global.ng.material, global.ng.platformBrowser, global.ng.platformBrowser.animations, global.pectin, global.ng.cdk.portal, global.deferred_class, global.typescriptUtilities, global.ng.material.dialog, global.ng.material.icon, global.ng.material.list, global.ng.material.tabs, global.ng.material.tooltip, global.ng.router, global.ng.animations, global.lodash, null, global.ResizeObserver, global.fastMemoizeDecorator, global.src));
5
- }(this, function (exports, common, core, forms, material, platformBrowser, animations, pectin, portal, deferred_class, typescriptUtilities, dialog, icon, list, tabs, tooltip, router, animations$1, lodash, reflectMetadata, ResizeObserver, fastMemoizeDecorator, src) { 'use strict';
2
+ typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports, require('@angular/common'), require('@angular/core'), require('@angular/forms'), require('@angular/material'), require('@angular/platform-browser'), require('@angular/platform-browser/animations'), require('@coolon/pectin'), require('@angular/cdk/portal'), require('@coolon/pectin/lib/promise/deferred.class'), require('@coolon/typescript-utilities'), require('@angular/material/dialog'), require('@angular/material/icon'), require('@angular/material/list'), require('@angular/material/tabs'), require('@angular/material/tooltip'), require('@angular/router'), require('@typescript-plus/fast-memoize-decorator'), require('lodash'), require('reflect-metadata'), require('@angular/animations'), require('resize-observer-polyfill'), require('@typescript-plus/fast-memoize-decorator/dist/src')) :
3
+ typeof define === 'function' && define.amd ? define('@coolon/angular-ui-powerups', ['exports', '@angular/common', '@angular/core', '@angular/forms', '@angular/material', '@angular/platform-browser', '@angular/platform-browser/animations', '@coolon/pectin', '@angular/cdk/portal', '@coolon/pectin/lib/promise/deferred.class', '@coolon/typescript-utilities', '@angular/material/dialog', '@angular/material/icon', '@angular/material/list', '@angular/material/tabs', '@angular/material/tooltip', '@angular/router', '@typescript-plus/fast-memoize-decorator', 'lodash', 'reflect-metadata', '@angular/animations', 'resize-observer-polyfill', '@typescript-plus/fast-memoize-decorator/dist/src'], factory) :
4
+ (global = global || self, factory((global.coolon = global.coolon || {}, global.coolon['angular-ui-powerups'] = {}), global.ng.common, global.ng.core, global.ng.forms, global.ng.material, global.ng.platformBrowser, global.ng.platformBrowser.animations, global.pectin, global.ng.cdk.portal, global.deferred_class, global.typescriptUtilities, global.ng.material.dialog, global.ng.material.icon, global.ng.material.list, global.ng.material.tabs, global.ng.material.tooltip, global.ng.router, global.fastMemoizeDecorator, global.lodash, null, global.ng.animations, global.ResizeObserver, global.src));
5
+ }(this, function (exports, common, core, forms, material, platformBrowser, animations, pectin, portal, deferred_class, typescriptUtilities, dialog, icon, list, tabs, tooltip, router, fastMemoizeDecorator, lodash, reflectMetadata, animations$1, ResizeObserver, src) { 'use strict';
6
6
 
7
7
  ResizeObserver = ResizeObserver && ResizeObserver.hasOwnProperty('default') ? ResizeObserver['default'] : ResizeObserver;
8
8
 
@@ -1904,247 +1904,401 @@
1904
1904
  * @fileoverview added by tsickle
1905
1905
  * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
1906
1906
  */
1907
- var PlaceService = /** @class */ (function () {
1908
- function PlaceService() {
1909
- this._activePlaces = new pectin.MutableListModel();
1907
+ var ResolvedRouteParameterSnapshot = /** @class */ (function () {
1908
+ function ResolvedRouteParameterSnapshot(parameters) {
1909
+ this.parameters = parameters;
1910
1910
  }
1911
- Object.defineProperty(PlaceService.prototype, "activePlaces", {
1912
- get: /**
1913
- * @return {?}
1914
- */
1915
- function () {
1916
- return this._activePlaces.readonly;
1917
- },
1918
- enumerable: true,
1919
- configurable: true
1920
- });
1921
1911
  /**
1922
- * @param {?} place
1912
+ * @template T
1913
+ * @param {?} parameter
1923
1914
  * @return {?}
1924
1915
  */
1925
- PlaceService.prototype.onActivate = /**
1926
- * @param {?} place
1916
+ ResolvedRouteParameterSnapshot.prototype.get = /**
1917
+ * @template T
1918
+ * @param {?} parameter
1927
1919
  * @return {?}
1928
1920
  */
1929
- function (place) {
1930
- this._activePlaces.push(place);
1921
+ function (parameter) {
1922
+ /** @type {?} */
1923
+ var resolved = this.parameters.find((/**
1924
+ * @param {?} p
1925
+ * @return {?}
1926
+ */
1927
+ function (p) { return p.parameterDef === parameter; }));
1928
+ return resolved ? resolved.resolvedValue : null;
1931
1929
  };
1932
1930
  /**
1933
- * @param {?} place
1931
+ * @template T
1932
+ * @param {?} parameter
1933
+ * @param {?} value
1934
1934
  * @return {?}
1935
1935
  */
1936
- PlaceService.prototype.onDeactivate = /**
1937
- * @param {?} place
1936
+ ResolvedRouteParameterSnapshot.prototype.replace = /**
1937
+ * @template T
1938
+ * @param {?} parameter
1939
+ * @param {?} value
1938
1940
  * @return {?}
1939
1941
  */
1940
- function (place) {
1941
- this._activePlaces.remove(place);
1942
+ function (parameter, value) {
1943
+ return new ResolvedRouteParameterSnapshot(this.parameters.filter((/**
1944
+ * @param {?} p
1945
+ * @return {?}
1946
+ */
1947
+ function (p) { return p.parameterDef !== parameter; })).concat({
1948
+ parameterDef: parameter,
1949
+ resolvedValue: value
1950
+ }));
1942
1951
  };
1943
- PlaceService.decorators = [
1944
- { type: core.Injectable, args: [{
1945
- providedIn: 'root'
1946
- },] }
1947
- ];
1948
- /** @nocollapse */
1949
- PlaceService.ctorParameters = function () { return []; };
1950
- /** @nocollapse */ PlaceService.ngInjectableDef = core.ɵɵdefineInjectable({ factory: function PlaceService_Factory() { return new PlaceService(); }, token: PlaceService, providedIn: "root" });
1951
- __decorate([
1952
- pectin.Trace(),
1953
- __metadata("design:type", Function),
1954
- __metadata("design:paramtypes", [Object]),
1955
- __metadata("design:returntype", void 0)
1956
- ], PlaceService.prototype, "onActivate", null);
1957
- __decorate([
1958
- pectin.Trace(),
1959
- __metadata("design:type", Function),
1960
- __metadata("design:paramtypes", [Object]),
1961
- __metadata("design:returntype", void 0)
1962
- ], PlaceService.prototype, "onDeactivate", null);
1963
- return PlaceService;
1964
- }());
1965
- if (false) {
1966
- /**
1967
- * @type {?}
1968
- * @private
1969
- */
1970
- PlaceService.prototype._activePlaces;
1971
- }
1972
-
1973
- /**
1974
- * @fileoverview added by tsickle
1975
- * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
1976
- */
1977
- // Freezes the state of the components at the start of the animation.
1978
- /** @type {?} */
1979
- var animationStartStyle = animations$1.style({ position: 'absolute', top: '0', left: '0', bottom: '0', right: '0' });
1980
- /** @type {?} */
1981
- var left = [
1982
- animations$1.query(':enter, :leave', animationStartStyle, { optional: true }),
1983
- animations$1.group([
1984
- animations$1.query(':enter', [
1985
- animations$1.style({ transform: 'translateX(-100%)' }),
1986
- animations$1.animate('{{duration}} ease-out', animations$1.style({ transform: 'translateX(0%)' }))
1987
- ], {
1988
- optional: true
1989
- }),
1990
- animations$1.query(':leave', [
1991
- animations$1.style({ transform: 'translateX(0%)' }),
1992
- animations$1.animate('{{duration}} ease-out', animations$1.style({ transform: 'translateX(100%)' }))
1993
- ], {
1994
- optional: true
1995
- })
1996
- ])
1997
- ];
1998
- /** @type {?} */
1999
- var right = [
2000
- animations$1.query(':enter, :leave', animationStartStyle, { optional: true }),
2001
- animations$1.group([
2002
- animations$1.query(':enter', [
2003
- animations$1.style({ transform: 'translateX(100%)' }),
2004
- animations$1.animate('{{duration}} ease-out', animations$1.style({ transform: 'translateX(0%)' }))
2005
- ], {
2006
- optional: true
2007
- }),
2008
- animations$1.query(':leave', [animations$1.style({ transform: 'translateX(0%)' }), animations$1.animate('{{duration}} ease-out', animations$1.style({ transform: 'translateX(-100%)' }))], {
2009
- optional: true
2010
- })
2011
- ])
2012
- ];
2013
- /** @type {?} */
2014
- var LEFT_RIGHT_PLACE_ANIMATION = animations$1.trigger('routeAnimations', [
2015
- animations$1.transition(':increment', right, { params: { duration: '.3s' } }),
2016
- animations$1.transition(':decrement', left, { params: { duration: '.3s' } })
2017
- ]);
2018
-
2019
- /**
2020
- * @fileoverview added by tsickle
2021
- * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
2022
- */
2023
- var PlaceOutletComponent = /** @class */ (function () {
2024
- function PlaceOutletComponent(placeService) {
2025
- this.placeService = placeService;
2026
- this.animate = true;
2027
- }
2028
1952
  /**
2029
1953
  * @return {?}
2030
1954
  */
2031
- PlaceOutletComponent.prototype.ngOnInit = /**
1955
+ ResolvedRouteParameterSnapshot.prototype.getFormattedRouteId = /**
2032
1956
  * @return {?}
2033
1957
  */
2034
1958
  function () {
1959
+ /** @type {?} */
1960
+ var routeIdParam = this.getRouteIdParam();
1961
+ return routeIdParam ? routeIdParam.parameterDef.type.format(routeIdParam.resolvedValue) : null;
2035
1962
  };
2036
1963
  /**
2037
- * @param {?} $event
1964
+ * @private
2038
1965
  * @return {?}
2039
1966
  */
2040
- PlaceOutletComponent.prototype.onActivate = /**
2041
- * @param {?} $event
1967
+ ResolvedRouteParameterSnapshot.prototype.getRouteIdParam = /**
1968
+ * @private
2042
1969
  * @return {?}
2043
1970
  */
2044
- function ($event) {
2045
- this.placeService.onActivate($event);
1971
+ function () {
1972
+ return this.parameters.find((/**
1973
+ * @param {?} p
1974
+ * @return {?}
1975
+ */
1976
+ function (p) { return p.parameterDef.isRouteId; }));
2046
1977
  };
2047
1978
  /**
2048
- * @param {?} $event
2049
1979
  * @return {?}
2050
1980
  */
2051
- PlaceOutletComponent.prototype.onDeactivate = /**
2052
- * @param {?} $event
1981
+ ResolvedRouteParameterSnapshot.prototype.getFormattedParameters = /**
2053
1982
  * @return {?}
2054
1983
  */
2055
- function ($event) {
2056
- this.placeService.onDeactivate($event);
1984
+ function () {
1985
+ /** @type {?} */
1986
+ var params = {};
1987
+ /** @type {?} */
1988
+ var routeIdParam = this.parameters.filter((/**
1989
+ * @param {?} p
1990
+ * @return {?}
1991
+ */
1992
+ function (p) { return !p.parameterDef.isRouteId; })).forEach((/**
1993
+ * @param {?} p
1994
+ * @return {?}
1995
+ */
1996
+ function (p) {
1997
+ params[p.parameterDef.name] = p.parameterDef.type.format(p.resolvedValue);
1998
+ }));
1999
+ return params;
2057
2000
  };
2058
2001
  /**
2059
- * @param {?} outlet
2060
2002
  * @return {?}
2061
2003
  */
2062
- PlaceOutletComponent.prototype.getPlaceOrder = /**
2063
- * @param {?} outlet
2004
+ ResolvedRouteParameterSnapshot.prototype.hasRouteId = /**
2064
2005
  * @return {?}
2065
2006
  */
2066
- function (outlet) {
2067
- return this.animate && outlet && outlet.activatedRouteData && outlet.activatedRouteData['placeOrder'];
2068
- };
2069
- PlaceOutletComponent.decorators = [
2070
- { type: core.Component, args: [{
2071
- selector: 'angular-ui-powerups-place-outlet',
2072
- template: "<div class=\"router-outlet-container\" [@routeAnimations]=\"getPlaceOrder(routerOutlet)\">\n <router-outlet #routerOutlet=\"outlet\"\n (activate)=\"onActivate($event)\"\n (deactivate)=\"onDeactivate($event)\">\n </router-outlet>\n</div>\n\n",
2073
- animations: [LEFT_RIGHT_PLACE_ANIMATION],
2074
- styles: [":host{display:flex;flex-direction:column;min-height:0}.router-outlet-container{flex:1;display:block;position:relative;min-height:0}router-outlet{display:none}"]
2075
- }] }
2076
- ];
2077
- /** @nocollapse */
2078
- PlaceOutletComponent.ctorParameters = function () { return [
2079
- { type: PlaceService }
2080
- ]; };
2081
- PlaceOutletComponent.propDecorators = {
2082
- animate: [{ type: core.Input }]
2007
+ function () {
2008
+ return !!this.getRouteIdParam();
2083
2009
  };
2084
- return PlaceOutletComponent;
2010
+ __decorate([
2011
+ pectin.Trace(),
2012
+ __metadata("design:type", Function),
2013
+ __metadata("design:paramtypes", []),
2014
+ __metadata("design:returntype", void 0)
2015
+ ], ResolvedRouteParameterSnapshot.prototype, "getFormattedRouteId", null);
2016
+ __decorate([
2017
+ pectin.Trace(),
2018
+ __metadata("design:type", Function),
2019
+ __metadata("design:paramtypes", []),
2020
+ __metadata("design:returntype", void 0)
2021
+ ], ResolvedRouteParameterSnapshot.prototype, "getFormattedParameters", null);
2022
+ return ResolvedRouteParameterSnapshot;
2085
2023
  }());
2086
2024
  if (false) {
2087
2025
  /** @type {?} */
2088
- PlaceOutletComponent.prototype.animate;
2089
- /**
2090
- * @type {?}
2091
- * @private
2092
- */
2093
- PlaceOutletComponent.prototype.placeService;
2026
+ ResolvedRouteParameterSnapshot.prototype.parameters;
2094
2027
  }
2095
2028
 
2096
2029
  /**
2097
2030
  * @fileoverview added by tsickle
2098
2031
  * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
2099
2032
  */
2100
- /**
2101
- * @param {?} options
2102
- * @return {?}
2103
- */
2104
- function Place(options) {
2105
- return (/**
2106
- * @param {?} target
2107
- * @return {?}
2108
- */
2109
- function (target) {
2110
- Reflect.defineMetadata('place.options', options, target);
2111
- });
2112
- }
2113
- (function (Place) {
2114
- /**
2115
- * @record
2116
- */
2117
- function Options() { }
2118
- Place.Options = Options;
2119
- if (false) {
2120
- /** @type {?} */
2121
- Options.prototype.path;
2033
+ exports.RouteParameterBindings = /** @class */ (function (_super) {
2034
+ __extends(RouteParameterBindings, _super);
2035
+ function RouteParameterBindings(component, placeService) {
2036
+ var _this = _super.call(this) || this;
2037
+ _this.component = component;
2038
+ _this._incomingRouteChange = new pectin.MutableValueModel(false);
2039
+ _this.resolvedParameters = new pectin.MutableValueModel();
2040
+ var _a = pectin.Dsl.disposeWith(_this), chain = _a.chain, valueOf = _a.valueOf, before = _a.before, when = _a.when, after = _a.after, observe = _a.observe;
2041
+ _this.txo = new pectin.TransactionObserver(); //.onEvent(e => console.log(e.toString()));
2042
+ //.onEvent(e => console.log(e.toString()));
2122
2043
  /** @type {?} */
2123
- Options.prototype.order;
2124
- /** @type {?|undefined} */
2125
- Options.prototype.data;
2126
- /** @type {?|undefined} */
2127
- Options.prototype.authenticate;
2128
- }
2129
- var Descriptor = /** @class */ (function () {
2130
- function Descriptor(placeClass, options) {
2131
- pectin.assert.notNil(options);
2132
- this.path = options.path;
2133
- this.order = options.order;
2134
- this.data = options.data;
2135
- this.authenticate = lodash.isNil(options.authenticate) || options.authenticate;
2136
- }
2137
- /**
2138
- * @template T
2139
- * @param {?} key
2140
- * @param {?=} defaultValue
2044
+ var routeParameterDefs = typescriptUtilities.Klass.get(component).getMetadataList(RouteParameterBindings.ROUTE_PARAMETER_LIST_KEY);
2045
+ routeParameterDefs.forEach((/**
2046
+ * @param {?} parameter
2141
2047
  * @return {?}
2142
2048
  */
2143
- Descriptor.prototype.getData = /**
2144
- * @template T
2145
- * @param {?} key
2146
- * @param {?=} defaultValue
2147
- * @return {?}
2049
+ function (parameter) { return _this.installBinding(parameter); }));
2050
+ /** @type {?} */
2051
+ var incomingResolvedRouteParameters = observe.valuesFrom(component.activatedRoute.paramMap)
2052
+ .last()
2053
+ .map((/**
2054
+ * @param {?} params
2055
+ * @return {?}
2056
+ */
2057
+ function (params) {
2058
+ /** @type {?} */
2059
+ var result = [];
2060
+ routeParameterDefs.forEach((/**
2061
+ * @param {?} parameterDef
2062
+ * @return {?}
2063
+ */
2064
+ function (parameterDef) {
2065
+ /** @type {?} */
2066
+ var resolvedValue;
2067
+ if (parameterDef.isArray) {
2068
+ resolvedValue = params.getAll(parameterDef.name).map((/**
2069
+ * @param {?} v
2070
+ * @return {?}
2071
+ */
2072
+ function (v) { return parameterDef.type.parse(v); }));
2073
+ }
2074
+ else {
2075
+ resolvedValue = parameterDef.type.parse(params.get(parameterDef.name));
2076
+ }
2077
+ result.push({ parameterDef: parameterDef, resolvedValue: resolvedValue });
2078
+ }));
2079
+ return new ResolvedRouteParameterSnapshot(result);
2080
+ }));
2081
+ incomingResolvedRouteParameters.subscribe((/**
2082
+ * @param {?} resolvedParameters
2083
+ * @return {?}
2084
+ */
2085
+ function (resolvedParameters) {
2086
+ _this._incomingRouteChange.value = true;
2087
+ _this.resolvedParameters.value = resolvedParameters;
2088
+ _this._incomingRouteChange.value = false;
2089
+ }));
2090
+ when.valueOf(_this.resolvedParameters).changes((/**
2091
+ * @param {?} params
2092
+ * @param {?} previous
2093
+ * @return {?}
2094
+ */
2095
+ function (params, previous) {
2096
+ placeService.notifyRouteParametersChanged({
2097
+ placeComponent: component,
2098
+ next: params,
2099
+ previous: previous,
2100
+ updateRoute: !_this.incomingRouteChange.value // we update the route if it's a component triggered change.
2101
+ });
2102
+ }));
2103
+ _this.txo.observe('incomingResolvedRouteParameters', incomingResolvedRouteParameters);
2104
+ _this.txo.observe('this.routeIsChanging', _this.incomingRouteChange);
2105
+ return _this;
2106
+ }
2107
+ Object.defineProperty(RouteParameterBindings.prototype, "incomingRouteChange", {
2108
+ get: /**
2109
+ * @return {?}
2110
+ */
2111
+ function () {
2112
+ return this._incomingRouteChange.readonly;
2113
+ },
2114
+ enumerable: true,
2115
+ configurable: true
2116
+ });
2117
+ /**
2118
+ * @protected
2119
+ * @template T
2120
+ * @param {?} parameter
2121
+ * @return {?}
2122
+ */
2123
+ RouteParameterBindings.prototype.installBinding = /**
2124
+ * @protected
2125
+ * @template T
2126
+ * @param {?} parameter
2127
+ * @return {?}
2128
+ */
2129
+ function (parameter) {
2130
+ /** @type {?} */
2131
+ var model = this.getModelFor(parameter);
2132
+ // this.txo.observe(parameter.propertyName, model);
2133
+ this.registerDisposable(new pectin.Binding(this.resolvedParameters, model, {
2134
+ toRight: /**
2135
+ * @param {?} parameters
2136
+ * @return {?}
2137
+ */
2138
+ function (parameters) {
2139
+ return parameters.get(parameter);
2140
+ },
2141
+ toLeft: /**
2142
+ * @param {?} value
2143
+ * @param {?=} currentParameters
2144
+ * @return {?}
2145
+ */
2146
+ function (value, currentParameters) {
2147
+ return currentParameters.replace(parameter, value);
2148
+ }
2149
+ }));
2150
+ };
2151
+ /**
2152
+ * @private
2153
+ * @template T
2154
+ * @param {?} parameter
2155
+ * @return {?}
2156
+ */
2157
+ RouteParameterBindings.prototype.getModelFor = /**
2158
+ * @private
2159
+ * @template T
2160
+ * @param {?} parameter
2161
+ * @return {?}
2162
+ */
2163
+ function (parameter) {
2164
+ return this.component[parameter.propertyName];
2165
+ };
2166
+ return RouteParameterBindings;
2167
+ }(pectin.GarbageCollector));
2168
+ if (false) {
2169
+ /** @type {?} */
2170
+ exports.RouteParameterBindings.prototype._incomingRouteChange;
2171
+ /**
2172
+ * @type {?}
2173
+ * @private
2174
+ */
2175
+ exports.RouteParameterBindings.prototype.txo;
2176
+ /**
2177
+ * @type {?}
2178
+ * @private
2179
+ */
2180
+ exports.RouteParameterBindings.prototype.resolvedParameters;
2181
+ /**
2182
+ * @type {?}
2183
+ * @private
2184
+ */
2185
+ exports.RouteParameterBindings.prototype.component;
2186
+ }
2187
+ (function (RouteParameterBindings) {
2188
+ RouteParameterBindings.ROUTE_PARAMETER_LIST_KEY = Symbol('place:route:parameters');
2189
+ })(exports.RouteParameterBindings || (exports.RouteParameterBindings = {}));
2190
+
2191
+ /**
2192
+ * @fileoverview added by tsickle
2193
+ * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
2194
+ */
2195
+ // RAKE: making this Symbol(...) broke things.
2196
+ /** @type {?} */
2197
+ var DEFINITION_META_DATA_KEY = 'PLACE_DEFINITION_OPTIONS';
2198
+ exports.PlaceComponent = /** @class */ (function (_super) {
2199
+ __extends(PlaceComponent, _super);
2200
+ function PlaceComponent(activatedRoute, placeService) {
2201
+ var _this = _super.call(this) || this;
2202
+ _this.activatedRoute = activatedRoute;
2203
+ _this.routeBindingMediator = _this.registerDisposable(new exports.RouteParameterBindings(_this, placeService));
2204
+ return _this;
2205
+ }
2206
+ Object.defineProperty(PlaceComponent.prototype, "placeConfig", {
2207
+ get: /**
2208
+ * @return {?}
2209
+ */
2210
+ function () {
2211
+ return PlaceComponent.getDefinition((/** @type {?} */ ((/** @type {?} */ (this.constructor)))));
2212
+ },
2213
+ enumerable: true,
2214
+ configurable: true
2215
+ });
2216
+ /**
2217
+ * @param {?=} nextPlace
2218
+ * @param {?=} nextState
2219
+ * @return {?}
2220
+ */
2221
+ PlaceComponent.prototype.canDeactivate = /**
2222
+ * @param {?=} nextPlace
2223
+ * @param {?=} nextState
2224
+ * @return {?}
2225
+ */
2226
+ function (nextPlace, nextState) {
2227
+ return true;
2228
+ };
2229
+ /**
2230
+ * @return {?}
2231
+ */
2232
+ PlaceComponent.prototype.onPlaceReady = /**
2233
+ * @return {?}
2234
+ */
2235
+ function () {
2236
+ };
2237
+ __decorate([
2238
+ fastMemoizeDecorator.Memoize(),
2239
+ __metadata("design:type", PlaceComponent.Definition),
2240
+ __metadata("design:paramtypes", [])
2241
+ ], PlaceComponent.prototype, "placeConfig", null);
2242
+ __decorate([
2243
+ pectin.Trace(),
2244
+ __metadata("design:type", Function),
2245
+ __metadata("design:paramtypes", []),
2246
+ __metadata("design:returntype", void 0)
2247
+ ], PlaceComponent.prototype, "onPlaceReady", null);
2248
+ return PlaceComponent;
2249
+ }(DisposableComponent));
2250
+ if (false) {
2251
+ /**
2252
+ * @type {?}
2253
+ * @private
2254
+ */
2255
+ exports.PlaceComponent.prototype.routeBindingMediator;
2256
+ /** @type {?} */
2257
+ exports.PlaceComponent.prototype.activatedRoute;
2258
+ }
2259
+ (function (PlaceComponent) {
2260
+ var Definition = /** @class */ (function () {
2261
+ function Definition(component, options) {
2262
+ this.component = component;
2263
+ pectin.assert.notNil(options);
2264
+ this.path = options.path;
2265
+ this.order = options.order;
2266
+ this.data = options.data;
2267
+ this.authenticate = lodash.isNil(options.authenticate) || options.authenticate;
2268
+ }
2269
+ /**
2270
+ * @param {?} construcable
2271
+ * @return {?}
2272
+ */
2273
+ Definition.prototype.isDescriptorForType = /**
2274
+ * @param {?} construcable
2275
+ * @return {?}
2276
+ */
2277
+ function (construcable) {
2278
+ return pectin.lang.constructorChain(construcable).includes(PlaceComponent);
2279
+ };
2280
+ /**
2281
+ * @param {?} placeComponent
2282
+ * @return {?}
2283
+ */
2284
+ Definition.prototype.isDescriptorFor = /**
2285
+ * @param {?} placeComponent
2286
+ * @return {?}
2287
+ */
2288
+ function (placeComponent) {
2289
+ return placeComponent.constructor === this.component;
2290
+ };
2291
+ /**
2292
+ * @template T
2293
+ * @param {?} key
2294
+ * @param {?=} defaultValue
2295
+ * @return {?}
2296
+ */
2297
+ Definition.prototype.getData = /**
2298
+ * @template T
2299
+ * @param {?} key
2300
+ * @param {?=} defaultValue
2301
+ * @return {?}
2148
2302
  */
2149
2303
  function (key, defaultValue) {
2150
2304
  return this.data ?
@@ -2157,7 +2311,7 @@
2157
2311
  * @param {?=} defaultValue
2158
2312
  * @return {?}
2159
2313
  */
2160
- Descriptor.prototype.searchData = /**
2314
+ Definition.prototype.searchData = /**
2161
2315
  * @template T
2162
2316
  * @param {?} keys
2163
2317
  * @param {?=} defaultValue
@@ -2178,51 +2332,344 @@
2178
2332
  return defaultValue;
2179
2333
  }
2180
2334
  };
2181
- return Descriptor;
2335
+ return Definition;
2182
2336
  }());
2183
- Place.Descriptor = Descriptor;
2337
+ PlaceComponent.Definition = Definition;
2184
2338
  if (false) {
2185
2339
  /** @type {?} */
2186
- Descriptor.prototype.path;
2340
+ Definition.prototype.path;
2187
2341
  /** @type {?} */
2188
- Descriptor.prototype.authenticate;
2342
+ Definition.prototype.authenticate;
2343
+ /** @type {?} */
2344
+ Definition.prototype.order;
2345
+ /** @type {?} */
2346
+ Definition.prototype.data;
2347
+ /** @type {?} */
2348
+ Definition.prototype.component;
2349
+ }
2350
+ /**
2351
+ * @record
2352
+ */
2353
+ function Options() { }
2354
+ PlaceComponent.Options = Options;
2355
+ if (false) {
2189
2356
  /** @type {?} */
2190
- Descriptor.prototype.order;
2357
+ Options.prototype.path;
2191
2358
  /** @type {?} */
2192
- Descriptor.prototype.data;
2359
+ Options.prototype.order;
2360
+ /** @type {?|undefined} */
2361
+ Options.prototype.data;
2362
+ /** @type {?|undefined} */
2363
+ Options.prototype.authenticate;
2193
2364
  }
2194
2365
  /**
2195
2366
  * @param {?} klass
2196
2367
  * @return {?}
2197
2368
  */
2198
- function getDescriptor(klass) {
2369
+ function getDefinition(klass) {
2199
2370
  /** @type {?} */
2200
- var placeOptions = Reflect.getMetadata('place.options', klass);
2201
- return new Descriptor(klass, placeOptions);
2371
+ var placeOptions = Reflect.getMetadata(DEFINITION_META_DATA_KEY, klass);
2372
+ return new Definition(klass, placeOptions);
2373
+ }
2374
+ PlaceComponent.getDefinition = getDefinition;
2375
+ /**
2376
+ * @param {?} klass
2377
+ * @param {?} options
2378
+ * @return {?}
2379
+ */
2380
+ function injectDefinition(klass, options) {
2381
+ Reflect.defineMetadata(DEFINITION_META_DATA_KEY, options, klass);
2202
2382
  }
2203
- Place.getDescriptor = getDescriptor;
2204
- })(Place || (Place = {}));
2383
+ PlaceComponent.injectDefinition = injectDefinition;
2384
+ })(exports.PlaceComponent || (exports.PlaceComponent = {}));
2205
2385
 
2206
2386
  /**
2207
2387
  * @fileoverview added by tsickle
2208
2388
  * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
2209
2389
  */
2210
- var TabbedPlaceNavigationComponent = /** @class */ (function (_super) {
2211
- __extends(TabbedPlaceNavigationComponent, _super);
2212
- function TabbedPlaceNavigationComponent() {
2390
+ var PlaceService = /** @class */ (function (_super) {
2391
+ __extends(PlaceService, _super);
2392
+ function PlaceService(router) {
2213
2393
  var _this = _super.call(this) || this;
2214
- var _a = pectin.Dsl.disposeWith(_this), chain = _a.chain, valueOf = _a.valueOf, before = _a.before, when = _a.when, after = _a.after, observe = _a.observe, switchOn = _a.switchOn;
2215
- _this.orderedPlaces = chain(_this.placesModel).map((/**
2216
- * @param {?} c
2217
- * @return {?}
2218
- */
2219
- function (c) { return Place.getDescriptor(c); })).sortBy('order');
2394
+ _this.router = router;
2395
+ _this._activePlaces = new pectin.MutableListModel();
2220
2396
  return _this;
2221
2397
  }
2398
+ Object.defineProperty(PlaceService.prototype, "activePlaces", {
2399
+ get: /**
2400
+ * @return {?}
2401
+ */
2402
+ function () {
2403
+ return this._activePlaces.readonly;
2404
+ },
2405
+ enumerable: true,
2406
+ configurable: true
2407
+ });
2222
2408
  /**
2409
+ * @param {?} place
2223
2410
  * @return {?}
2224
2411
  */
2225
- TabbedPlaceNavigationComponent.prototype.ngOnInit = /**
2412
+ PlaceService.prototype.onActivate = /**
2413
+ * @param {?} place
2414
+ * @return {?}
2415
+ */
2416
+ function (place) {
2417
+ this._activePlaces.push(place);
2418
+ };
2419
+ /**
2420
+ * @param {?} place
2421
+ * @return {?}
2422
+ */
2423
+ PlaceService.prototype.onDeactivate = /**
2424
+ * @param {?} place
2425
+ * @return {?}
2426
+ */
2427
+ function (place) {
2428
+ this._activePlaces.remove(place);
2429
+ };
2430
+ /**
2431
+ * @param {?} params
2432
+ * @return {?}
2433
+ */
2434
+ PlaceService.prototype.notifyRouteParametersChanged = /**
2435
+ * @param {?} params
2436
+ * @return {?}
2437
+ */
2438
+ function (params) {
2439
+ // We update the router state...
2440
+ if (params.updateRoute) {
2441
+ /** @type {?} */
2442
+ var routeId = params.next.getFormattedRouteId();
2443
+ /** @type {?} */
2444
+ var relativePath = !!params.previous.hasRouteId() ? '..' : '.';
2445
+ /** @type {?} */
2446
+ var path = routeId ? [relativePath, routeId, params.next.getFormattedParameters()] : [relativePath, params.next.getFormattedParameters()];
2447
+ this.router.navigate(path, {
2448
+ relativeTo: params.placeComponent.activatedRoute
2449
+ });
2450
+ }
2451
+ };
2452
+ PlaceService.decorators = [
2453
+ { type: core.Injectable, args: [{
2454
+ providedIn: 'root'
2455
+ },] }
2456
+ ];
2457
+ /** @nocollapse */
2458
+ PlaceService.ctorParameters = function () { return [
2459
+ { type: router.Router }
2460
+ ]; };
2461
+ /** @nocollapse */ PlaceService.ngInjectableDef = core.ɵɵdefineInjectable({ factory: function PlaceService_Factory() { return new PlaceService(core.ɵɵinject(router.Router)); }, token: PlaceService, providedIn: "root" });
2462
+ __decorate([
2463
+ pectin.Trace(),
2464
+ __metadata("design:type", Function),
2465
+ __metadata("design:paramtypes", [exports.PlaceComponent]),
2466
+ __metadata("design:returntype", void 0)
2467
+ ], PlaceService.prototype, "onActivate", null);
2468
+ __decorate([
2469
+ pectin.Trace(),
2470
+ __metadata("design:type", Function),
2471
+ __metadata("design:paramtypes", [exports.PlaceComponent]),
2472
+ __metadata("design:returntype", void 0)
2473
+ ], PlaceService.prototype, "onDeactivate", null);
2474
+ __decorate([
2475
+ pectin.Trace(),
2476
+ __metadata("design:type", Function),
2477
+ __metadata("design:paramtypes", [Object]),
2478
+ __metadata("design:returntype", void 0)
2479
+ ], PlaceService.prototype, "notifyRouteParametersChanged", null);
2480
+ return PlaceService;
2481
+ }(pectin.GarbageCollector));
2482
+ if (false) {
2483
+ /**
2484
+ * @type {?}
2485
+ * @private
2486
+ */
2487
+ PlaceService.prototype._activePlaces;
2488
+ /**
2489
+ * @type {?}
2490
+ * @protected
2491
+ */
2492
+ PlaceService.prototype.router;
2493
+ }
2494
+
2495
+ /**
2496
+ * @fileoverview added by tsickle
2497
+ * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
2498
+ */
2499
+ // Freezes the state of the components at the start of the animation.
2500
+ /** @type {?} */
2501
+ var animationStartStyle = animations$1.style({ position: 'absolute', top: '0', left: '0', bottom: '0', right: '0' });
2502
+ /** @type {?} */
2503
+ var left = [
2504
+ animations$1.query(':enter, :leave', animationStartStyle, { optional: true }),
2505
+ animations$1.group([
2506
+ animations$1.query(':enter', [
2507
+ animations$1.style({ transform: 'translateX(-100%)' }),
2508
+ animations$1.animate('{{duration}} ease-out', animations$1.style({ transform: 'translateX(0%)' }))
2509
+ ], {
2510
+ optional: true
2511
+ }),
2512
+ animations$1.query(':leave', [
2513
+ animations$1.style({ transform: 'translateX(0%)' }),
2514
+ animations$1.animate('{{duration}} ease-out', animations$1.style({ transform: 'translateX(100%)' }))
2515
+ ], {
2516
+ optional: true
2517
+ })
2518
+ ])
2519
+ ];
2520
+ /** @type {?} */
2521
+ var right = [
2522
+ animations$1.query(':enter, :leave', animationStartStyle, { optional: true }),
2523
+ animations$1.group([
2524
+ animations$1.query(':enter', [
2525
+ animations$1.style({ transform: 'translateX(100%)' }),
2526
+ animations$1.animate('{{duration}} ease-out', animations$1.style({ transform: 'translateX(0%)' }))
2527
+ ], {
2528
+ optional: true
2529
+ }),
2530
+ animations$1.query(':leave', [animations$1.style({ transform: 'translateX(0%)' }), animations$1.animate('{{duration}} ease-out', animations$1.style({ transform: 'translateX(-100%)' }))], {
2531
+ optional: true
2532
+ })
2533
+ ])
2534
+ ];
2535
+ /** @type {?} */
2536
+ var LEFT_RIGHT_PLACE_ANIMATION = animations$1.trigger('routeAnimations', [
2537
+ animations$1.transition(':increment', right, { params: { duration: '.3s' } }),
2538
+ animations$1.transition(':decrement', left, { params: { duration: '.3s' } })
2539
+ ]);
2540
+
2541
+ /**
2542
+ * @fileoverview added by tsickle
2543
+ * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
2544
+ */
2545
+ var PlaceOutletComponent = /** @class */ (function () {
2546
+ function PlaceOutletComponent(placeService) {
2547
+ this.placeService = placeService;
2548
+ this.animate = true;
2549
+ }
2550
+ /**
2551
+ * @return {?}
2552
+ */
2553
+ PlaceOutletComponent.prototype.ngOnInit = /**
2554
+ * @return {?}
2555
+ */
2556
+ function () {
2557
+ };
2558
+ /**
2559
+ * @param {?} $event
2560
+ * @return {?}
2561
+ */
2562
+ PlaceOutletComponent.prototype.onActivate = /**
2563
+ * @param {?} $event
2564
+ * @return {?}
2565
+ */
2566
+ function ($event) {
2567
+ this.currentPlace = $event;
2568
+ this.placeService.onActivate($event);
2569
+ if (!this.animate) {
2570
+ this.notifyPlaceReady();
2571
+ }
2572
+ };
2573
+ /**
2574
+ * @param {?} $event
2575
+ * @return {?}
2576
+ */
2577
+ PlaceOutletComponent.prototype.onDeactivate = /**
2578
+ * @param {?} $event
2579
+ * @return {?}
2580
+ */
2581
+ function ($event) {
2582
+ this.currentPlace = null;
2583
+ this.placeService.onDeactivate($event);
2584
+ };
2585
+ /**
2586
+ * @param {?} outlet
2587
+ * @return {?}
2588
+ */
2589
+ PlaceOutletComponent.prototype.getPlaceOrder = /**
2590
+ * @param {?} outlet
2591
+ * @return {?}
2592
+ */
2593
+ function (outlet) {
2594
+ return this.animate && outlet && outlet.activatedRouteData && outlet.activatedRouteData['placeOrder'];
2595
+ };
2596
+ /**
2597
+ * @return {?}
2598
+ */
2599
+ PlaceOutletComponent.prototype.animationDone = /**
2600
+ * @return {?}
2601
+ */
2602
+ function () {
2603
+ this.notifyPlaceReady();
2604
+ };
2605
+ /**
2606
+ * @private
2607
+ * @return {?}
2608
+ */
2609
+ PlaceOutletComponent.prototype.notifyPlaceReady = /**
2610
+ * @private
2611
+ * @return {?}
2612
+ */
2613
+ function () {
2614
+ if (this.currentPlace) {
2615
+ this.currentPlace.onPlaceReady();
2616
+ }
2617
+ };
2618
+ PlaceOutletComponent.decorators = [
2619
+ { type: core.Component, args: [{
2620
+ selector: 'angular-ui-powerups-place-outlet',
2621
+ template: "<div class=\"router-outlet-container\"\n [@routeAnimations]=\"getPlaceOrder(routerOutlet)\"\n (@routeAnimations.done)=\"animationDone()\"\n>\n <router-outlet #routerOutlet=\"outlet\"\n (activate)=\"onActivate($event)\"\n (deactivate)=\"onDeactivate($event)\">\n </router-outlet>\n</div>\n\n",
2622
+ animations: [LEFT_RIGHT_PLACE_ANIMATION],
2623
+ styles: [":host{display:flex;flex-direction:column;min-height:0}.router-outlet-container{flex:1;display:block;position:relative;min-height:0}router-outlet{display:none}"]
2624
+ }] }
2625
+ ];
2626
+ /** @nocollapse */
2627
+ PlaceOutletComponent.ctorParameters = function () { return [
2628
+ { type: PlaceService }
2629
+ ]; };
2630
+ PlaceOutletComponent.propDecorators = {
2631
+ animate: [{ type: core.Input }],
2632
+ routerOutLet: [{ type: core.ViewChild, args: ['routerOutlet', { static: false },] }]
2633
+ };
2634
+ return PlaceOutletComponent;
2635
+ }());
2636
+ if (false) {
2637
+ /** @type {?} */
2638
+ PlaceOutletComponent.prototype.animate;
2639
+ /** @type {?} */
2640
+ PlaceOutletComponent.prototype.routerOutLet;
2641
+ /**
2642
+ * @type {?}
2643
+ * @private
2644
+ */
2645
+ PlaceOutletComponent.prototype.currentPlace;
2646
+ /**
2647
+ * @type {?}
2648
+ * @private
2649
+ */
2650
+ PlaceOutletComponent.prototype.placeService;
2651
+ }
2652
+
2653
+ /**
2654
+ * @fileoverview added by tsickle
2655
+ * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
2656
+ */
2657
+ var TabbedPlaceNavigationComponent = /** @class */ (function (_super) {
2658
+ __extends(TabbedPlaceNavigationComponent, _super);
2659
+ function TabbedPlaceNavigationComponent() {
2660
+ var _this = _super.call(this) || this;
2661
+ var _a = pectin.Dsl.disposeWith(_this), chain = _a.chain, valueOf = _a.valueOf, before = _a.before, when = _a.when, after = _a.after, observe = _a.observe, switchOn = _a.switchOn;
2662
+ _this.orderedPlaces = chain(_this.placesModel).map((/**
2663
+ * @param {?} c
2664
+ * @return {?}
2665
+ */
2666
+ function (c) { return exports.PlaceComponent.getDefinition(c); })).sortBy('order');
2667
+ return _this;
2668
+ }
2669
+ /**
2670
+ * @return {?}
2671
+ */
2672
+ TabbedPlaceNavigationComponent.prototype.ngOnInit = /**
2226
2673
  * @return {?}
2227
2674
  */
2228
2675
  function () {
@@ -2539,559 +2986,191 @@
2539
2986
  function () {
2540
2987
  return this._boundsModel.readonly;
2541
2988
  },
2542
- enumerable: true,
2543
- configurable: true
2544
- });
2545
- Object.defineProperty(ResizeAwareComponent.prototype, "nativeElement", {
2546
- get: /**
2547
- * @return {?}
2548
- */
2549
- function () {
2550
- return this.elementRef.nativeElement;
2551
- },
2552
- enumerable: true,
2553
- configurable: true
2554
- });
2555
- // TODO: Make this handle body scroll
2556
- // TODO: Make this handle body scroll
2557
- /**
2558
- * @param {?} point
2559
- * @return {?}
2560
- */
2561
- ResizeAwareComponent.prototype.relativePositionOf =
2562
- // TODO: Make this handle body scroll
2563
- /**
2564
- * @param {?} point
2565
- * @return {?}
2566
- */
2567
- function (point) {
2568
- return this.bounds.relativePositionOf(point);
2569
- };
2570
- Object.defineProperty(ResizeAwareComponent.prototype, "bounds", {
2571
- get: /**
2572
- * @return {?}
2573
- */
2574
- function () {
2575
- return this._boundsModel.value;
2576
- },
2577
- enumerable: true,
2578
- configurable: true
2579
- });
2580
- /**
2581
- * @private
2582
- * @return {?}
2583
- */
2584
- ResizeAwareComponent.prototype.updateBounds = /**
2585
- * @private
2586
- * @return {?}
2587
- */
2588
- function () {
2589
- this._boundsModel.value = exports.Bounds.ofElement(this.nativeElement);
2590
- };
2591
- return ResizeAwareComponent;
2592
- }(DisposableComponent));
2593
- if (false) {
2594
- /**
2595
- * @type {?}
2596
- * @private
2597
- */
2598
- ResizeAwareComponent.prototype._boundsModel;
2599
- /**
2600
- * @type {?}
2601
- * @protected
2602
- */
2603
- ResizeAwareComponent.prototype.elementRef;
2604
- /**
2605
- * @type {?}
2606
- * @protected
2607
- */
2608
- ResizeAwareComponent.prototype.ngZone;
2609
- }
2610
-
2611
- /**
2612
- * @fileoverview added by tsickle
2613
- * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
2614
- */
2615
-
2616
- /**
2617
- * @fileoverview added by tsickle
2618
- * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
2619
- */
2620
-
2621
- /**
2622
- * @fileoverview added by tsickle
2623
- * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
2624
- */
2625
- /**
2626
- * @record
2627
- */
2628
- function Alert() { }
2629
- if (false) {
2630
- /**
2631
- * @return {?}
2632
- */
2633
- Alert.prototype.title = function () { };
2634
- /**
2635
- * @return {?}
2636
- */
2637
- Alert.prototype.content = function () { };
2638
- /**
2639
- * @return {?}
2640
- */
2641
- Alert.prototype.ok = function () { };
2642
- }
2643
-
2644
- /**
2645
- * @fileoverview added by tsickle
2646
- * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
2647
- */
2648
- /**
2649
- * @record
2650
- */
2651
- function Confirm() { }
2652
- if (false) {
2653
- /** @type {?|undefined} */
2654
- Confirm.prototype.destructive;
2655
- /**
2656
- * @return {?}
2657
- */
2658
- Confirm.prototype.cancel = function () { };
2659
- }
2660
-
2661
- /**
2662
- * @fileoverview added by tsickle
2663
- * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
2664
- */
2665
- /**
2666
- * @record
2667
- * @template R, E
2668
- */
2669
- function Result() { }
2670
- (function (Result) {
2671
- /**
2672
- * @record
2673
- * @template R, E
2674
- */
2675
- function Callback() { }
2676
- Result.Callback = Callback;
2677
- if (false) {
2678
- /** @type {?} */
2679
- Callback.prototype.then;
2680
- /** @type {?} */
2681
- Callback.prototype.catch;
2682
- }
2683
- })(Result || (Result = {}));
2684
-
2685
- /**
2686
- * @fileoverview added by tsickle
2687
- * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
2688
- */
2689
- /**
2690
- * @record
2691
- * @template D, R, E
2692
- */
2693
- function ActivityOutletContext() { }
2694
- if (false) {
2695
- /** @type {?} */
2696
- ActivityOutletContext.prototype.interactionContext;
2697
- /** @type {?} */
2698
- ActivityOutletContext.prototype.activityClass;
2699
- /** @type {?} */
2700
- ActivityOutletContext.prototype.activityData;
2701
- /** @type {?} */
2702
- ActivityOutletContext.prototype.onDone;
2703
- /** @type {?} */
2704
- ActivityOutletContext.prototype.onCancel;
2705
- }
2706
-
2707
- /**
2708
- * @fileoverview added by tsickle
2709
- * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
2710
- */
2711
-
2712
- /**
2713
- * @fileoverview added by tsickle
2714
- * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
2715
- */
2716
- /**
2717
- * @record
2718
- * @template T
2719
- */
2720
- function ResolvedParameter() { }
2721
- if (false) {
2722
- /** @type {?} */
2723
- ResolvedParameter.prototype.parameterDef;
2724
- /** @type {?} */
2725
- ResolvedParameter.prototype.resolvedValue;
2726
- }
2727
- var ResolvedParameters = /** @class */ (function () {
2728
- function ResolvedParameters(parameters) {
2729
- this.parameters = parameters;
2730
- }
2731
- /**
2732
- * @template T
2733
- * @param {?} parameter
2734
- * @return {?}
2735
- */
2736
- ResolvedParameters.prototype.get = /**
2737
- * @template T
2738
- * @param {?} parameter
2739
- * @return {?}
2740
- */
2741
- function (parameter) {
2742
- /** @type {?} */
2743
- var resolved = this.parameters.find((/**
2744
- * @param {?} p
2745
- * @return {?}
2746
- */
2747
- function (p) { return p.parameterDef === parameter; }));
2748
- return resolved ? resolved.resolvedValue : null;
2749
- };
2750
- /**
2751
- * @template T
2752
- * @param {?} parameter
2753
- * @param {?} value
2754
- * @return {?}
2755
- */
2756
- ResolvedParameters.prototype.replace = /**
2757
- * @template T
2758
- * @param {?} parameter
2759
- * @param {?} value
2760
- * @return {?}
2761
- */
2762
- function (parameter, value) {
2763
- return new ResolvedParameters(this.parameters.filter((/**
2764
- * @param {?} p
2765
- * @return {?}
2766
- */
2767
- function (p) { return p.parameterDef !== parameter; })).concat({
2768
- parameterDef: parameter,
2769
- resolvedValue: value
2770
- }));
2771
- };
2772
- /**
2773
- * @protected
2774
- * @return {?}
2775
- */
2776
- ResolvedParameters.prototype.getFormattedRouteId = /**
2777
- * @protected
2778
- * @return {?}
2779
- */
2780
- function () {
2781
- /** @type {?} */
2782
- var routeIdParam = this.getRouteIdParam();
2783
- return routeIdParam ? routeIdParam.parameterDef.type.format(routeIdParam.resolvedValue) : null;
2784
- };
2785
- /**
2786
- * @private
2787
- * @return {?}
2788
- */
2789
- ResolvedParameters.prototype.getRouteIdParam = /**
2790
- * @private
2791
- * @return {?}
2792
- */
2793
- function () {
2794
- return this.parameters.find((/**
2795
- * @param {?} p
2796
- * @return {?}
2797
- */
2798
- function (p) { return p.parameterDef.isRouteId; }));
2799
- };
2800
- /**
2801
- * @protected
2802
- * @return {?}
2803
- */
2804
- ResolvedParameters.prototype.getFormattedParameters = /**
2805
- * @protected
2806
- * @return {?}
2807
- */
2808
- function () {
2809
- /** @type {?} */
2810
- var params = {};
2811
- /** @type {?} */
2812
- var routeIdParam = this.parameters.filter((/**
2813
- * @param {?} p
2814
- * @return {?}
2815
- */
2816
- function (p) { return !p.parameterDef.isRouteId; })).forEach((/**
2817
- * @param {?} p
2818
- * @return {?}
2819
- */
2820
- function (p) {
2821
- params[p.parameterDef.name] = p.parameterDef.type.format(p.resolvedValue);
2822
- }));
2823
- return params;
2824
- };
2825
- /**
2826
- * @return {?}
2827
- */
2828
- ResolvedParameters.prototype.hasRouteId = /**
2829
- * @return {?}
2830
- */
2831
- function () {
2832
- return !!this.getRouteIdParam();
2833
- };
2834
- /**
2835
- * @param {?} previous
2836
- * @param {?} router
2837
- * @param {?} activatedRoute
2838
- * @return {?}
2839
- */
2840
- ResolvedParameters.prototype.redirect = /**
2841
- * @param {?} previous
2842
- * @param {?} router
2843
- * @param {?} activatedRoute
2844
- * @return {?}
2845
- */
2846
- function (previous, router, activatedRoute) {
2847
- /** @type {?} */
2848
- var routeId = this.getFormattedRouteId();
2849
- /** @type {?} */
2850
- var relativePath = !!previous.hasRouteId() ? '..' : '.';
2851
- /** @type {?} */
2852
- var path = routeId ? [relativePath, routeId, this.getFormattedParameters()] : [relativePath, this.getFormattedParameters()];
2853
- router.navigate(path, {
2854
- relativeTo: activatedRoute
2855
- });
2856
- };
2857
- __decorate([
2858
- pectin.Trace(),
2859
- __metadata("design:type", Function),
2860
- __metadata("design:paramtypes", []),
2861
- __metadata("design:returntype", void 0)
2862
- ], ResolvedParameters.prototype, "getFormattedRouteId", null);
2863
- __decorate([
2864
- pectin.Trace(),
2865
- __metadata("design:type", Function),
2866
- __metadata("design:paramtypes", []),
2867
- __metadata("design:returntype", void 0)
2868
- ], ResolvedParameters.prototype, "getFormattedParameters", null);
2869
- __decorate([
2870
- pectin.Trace(),
2871
- __metadata("design:type", Function),
2872
- __metadata("design:paramtypes", [ResolvedParameters, router.Router, router.ActivatedRoute]),
2873
- __metadata("design:returntype", void 0)
2874
- ], ResolvedParameters.prototype, "redirect", null);
2875
- return ResolvedParameters;
2876
- }());
2877
- if (false) {
2878
- /** @type {?} */
2879
- ResolvedParameters.prototype.parameters;
2880
- }
2881
- exports.RouteParameterBindings = /** @class */ (function (_super) {
2882
- __extends(RouteParameterBindings, _super);
2883
- function RouteParameterBindings(component, router, activatedRoute) {
2884
- var _this = _super.call(this) || this;
2885
- _this.component = component;
2886
- _this.router = router;
2887
- _this.activatedRoute = activatedRoute;
2888
- _this._incomingRouteChange = new pectin.MutableValueModel(false);
2889
- _this.resolvedParameters = new pectin.MutableValueModel();
2890
- var _a = pectin.Dsl.disposeWith(_this), chain = _a.chain, valueOf = _a.valueOf, before = _a.before, when = _a.when, after = _a.after, observe = _a.observe;
2891
- _this.txo = new pectin.TransactionObserver(); //.onEvent(e => console.log(e.toString()));
2892
- //.onEvent(e => console.log(e.toString()));
2893
- /** @type {?} */
2894
- var routeParameterDefs = typescriptUtilities.Klass.get(component).getMetadataList(RouteParameterBindings.ROUTE_PARAMETER_LIST_KEY);
2895
- routeParameterDefs.forEach((/**
2896
- * @param {?} parameter
2897
- * @return {?}
2898
- */
2899
- function (parameter) { return _this.installBinding(parameter); }));
2900
- /** @type {?} */
2901
- var incomingResolvedRouteParameters = observe.valuesFrom(activatedRoute.paramMap)
2902
- .last()
2903
- .map((/**
2904
- * @param {?} params
2905
- * @return {?}
2906
- */
2907
- function (params) {
2908
- /** @type {?} */
2909
- var result = [];
2910
- routeParameterDefs.forEach((/**
2911
- * @param {?} parameterDef
2912
- * @return {?}
2913
- */
2914
- function (parameterDef) {
2915
- /** @type {?} */
2916
- var resolvedValue;
2917
- if (parameterDef.isArray) {
2918
- resolvedValue = params.getAll(parameterDef.name).map((/**
2919
- * @param {?} v
2920
- * @return {?}
2921
- */
2922
- function (v) { return parameterDef.type.parse(v); }));
2923
- }
2924
- else {
2925
- resolvedValue = parameterDef.type.parse(params.get(parameterDef.name));
2926
- }
2927
- result.push({ parameterDef: parameterDef, resolvedValue: resolvedValue });
2928
- }));
2929
- return new ResolvedParameters(result);
2930
- }));
2931
- incomingResolvedRouteParameters.subscribe((/**
2932
- * @param {?} resolvedParameters
2933
- * @return {?}
2934
- */
2935
- function (resolvedParameters) {
2936
- _this._incomingRouteChange.value = true;
2937
- _this.resolvedParameters.value = resolvedParameters;
2938
- _this._incomingRouteChange.value = false;
2939
- }));
2940
- when.valueOf(_this.resolvedParameters).changes((/**
2941
- * @param {?} params
2942
- * @param {?} previous
2943
- * @return {?}
2944
- */
2945
- function (params, previous) {
2946
- params.redirect(previous, router, activatedRoute);
2947
- }), { unless: _this.incomingRouteChange });
2948
- _this.txo.observe('incomingResolvedRouteParameters', incomingResolvedRouteParameters);
2949
- _this.txo.observe('this.routeIsChanging', _this.incomingRouteChange);
2950
- return _this;
2951
- }
2952
- Object.defineProperty(RouteParameterBindings.prototype, "incomingRouteChange", {
2989
+ enumerable: true,
2990
+ configurable: true
2991
+ });
2992
+ Object.defineProperty(ResizeAwareComponent.prototype, "nativeElement", {
2953
2993
  get: /**
2954
2994
  * @return {?}
2955
2995
  */
2956
2996
  function () {
2957
- return this._incomingRouteChange.readonly;
2997
+ return this.elementRef.nativeElement;
2958
2998
  },
2959
2999
  enumerable: true,
2960
3000
  configurable: true
2961
3001
  });
3002
+ // TODO: Make this handle body scroll
3003
+ // TODO: Make this handle body scroll
2962
3004
  /**
2963
- * @protected
2964
- * @template T
2965
- * @param {?} parameter
3005
+ * @param {?} point
2966
3006
  * @return {?}
2967
3007
  */
2968
- RouteParameterBindings.prototype.installBinding = /**
2969
- * @protected
2970
- * @template T
2971
- * @param {?} parameter
3008
+ ResizeAwareComponent.prototype.relativePositionOf =
3009
+ // TODO: Make this handle body scroll
3010
+ /**
3011
+ * @param {?} point
2972
3012
  * @return {?}
2973
3013
  */
2974
- function (parameter) {
2975
- /** @type {?} */
2976
- var model = this.getModelFor(parameter);
2977
- // this.txo.observe(parameter.propertyName, model);
2978
- this.registerDisposable(new pectin.Binding(this.resolvedParameters, model, {
2979
- toRight: /**
2980
- * @param {?} parameters
2981
- * @return {?}
2982
- */
2983
- function (parameters) {
2984
- return parameters.get(parameter);
2985
- },
2986
- toLeft: /**
2987
- * @param {?} value
2988
- * @param {?=} currentParameters
2989
- * @return {?}
2990
- */
2991
- function (value, currentParameters) {
2992
- return currentParameters.replace(parameter, value);
2993
- }
2994
- }));
3014
+ function (point) {
3015
+ return this.bounds.relativePositionOf(point);
2995
3016
  };
3017
+ Object.defineProperty(ResizeAwareComponent.prototype, "bounds", {
3018
+ get: /**
3019
+ * @return {?}
3020
+ */
3021
+ function () {
3022
+ return this._boundsModel.value;
3023
+ },
3024
+ enumerable: true,
3025
+ configurable: true
3026
+ });
2996
3027
  /**
2997
3028
  * @private
2998
- * @template T
2999
- * @param {?} parameter
3000
3029
  * @return {?}
3001
3030
  */
3002
- RouteParameterBindings.prototype.getModelFor = /**
3031
+ ResizeAwareComponent.prototype.updateBounds = /**
3003
3032
  * @private
3004
- * @template T
3005
- * @param {?} parameter
3006
3033
  * @return {?}
3007
3034
  */
3008
- function (parameter) {
3009
- return this.component[parameter.propertyName];
3035
+ function () {
3036
+ this._boundsModel.value = exports.Bounds.ofElement(this.nativeElement);
3010
3037
  };
3011
- return RouteParameterBindings;
3012
- }(pectin.GarbageCollector));
3038
+ return ResizeAwareComponent;
3039
+ }(DisposableComponent));
3013
3040
  if (false) {
3014
- /** @type {?} */
3015
- exports.RouteParameterBindings.prototype._incomingRouteChange;
3016
3041
  /**
3017
3042
  * @type {?}
3018
3043
  * @private
3019
3044
  */
3020
- exports.RouteParameterBindings.prototype.txo;
3045
+ ResizeAwareComponent.prototype._boundsModel;
3021
3046
  /**
3022
3047
  * @type {?}
3023
- * @private
3048
+ * @protected
3024
3049
  */
3025
- exports.RouteParameterBindings.prototype.resolvedParameters;
3050
+ ResizeAwareComponent.prototype.elementRef;
3026
3051
  /**
3027
3052
  * @type {?}
3028
- * @private
3053
+ * @protected
3029
3054
  */
3030
- exports.RouteParameterBindings.prototype.component;
3055
+ ResizeAwareComponent.prototype.ngZone;
3056
+ }
3057
+
3058
+ /**
3059
+ * @fileoverview added by tsickle
3060
+ * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
3061
+ */
3062
+
3063
+ /**
3064
+ * @fileoverview added by tsickle
3065
+ * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
3066
+ */
3067
+
3068
+ /**
3069
+ * @fileoverview added by tsickle
3070
+ * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
3071
+ */
3072
+ /**
3073
+ * @record
3074
+ */
3075
+ function Alert() { }
3076
+ if (false) {
3031
3077
  /**
3032
- * @type {?}
3033
- * @private
3078
+ * @return {?}
3079
+ */
3080
+ Alert.prototype.title = function () { };
3081
+ /**
3082
+ * @return {?}
3034
3083
  */
3035
- exports.RouteParameterBindings.prototype.router;
3084
+ Alert.prototype.content = function () { };
3036
3085
  /**
3037
- * @type {?}
3038
- * @private
3086
+ * @return {?}
3039
3087
  */
3040
- exports.RouteParameterBindings.prototype.activatedRoute;
3088
+ Alert.prototype.ok = function () { };
3041
3089
  }
3042
- (function (RouteParameterBindings) {
3043
- RouteParameterBindings.ROUTE_PARAMETER_LIST_KEY = Symbol('place:route:parameters');
3044
- })(exports.RouteParameterBindings || (exports.RouteParameterBindings = {}));
3045
3090
 
3046
3091
  /**
3047
3092
  * @fileoverview added by tsickle
3048
3093
  * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
3049
3094
  */
3050
- var AbstractPlaceComponent = /** @class */ (function (_super) {
3051
- __extends(AbstractPlaceComponent, _super);
3052
- function AbstractPlaceComponent(activatedRoute, router) {
3053
- var _this = _super.call(this) || this;
3054
- _this.activatedRoute = activatedRoute;
3055
- _this.routeBindingMediator = _this.registerDisposable(new exports.RouteParameterBindings(_this, router, activatedRoute));
3056
- return _this;
3057
- }
3058
- Object.defineProperty(AbstractPlaceComponent.prototype, "placeConfig", {
3059
- get: /**
3060
- * @return {?}
3061
- */
3062
- function () {
3063
- return Place.getDescriptor((/** @type {?} */ ((/** @type {?} */ (this.constructor)))));
3064
- },
3065
- enumerable: true,
3066
- configurable: true
3067
- });
3095
+ /**
3096
+ * @record
3097
+ */
3098
+ function Confirm() { }
3099
+ if (false) {
3100
+ /** @type {?|undefined} */
3101
+ Confirm.prototype.destructive;
3068
3102
  /**
3069
3103
  * @return {?}
3070
3104
  */
3071
- AbstractPlaceComponent.prototype.canDeactivate = /**
3072
- * @return {?}
3073
- */
3074
- function () {
3075
- return true;
3076
- };
3077
- __decorate([
3078
- fastMemoizeDecorator.Memoize(),
3079
- __metadata("design:type", Place.Descriptor),
3080
- __metadata("design:paramtypes", [])
3081
- ], AbstractPlaceComponent.prototype, "placeConfig", null);
3082
- return AbstractPlaceComponent;
3083
- }(DisposableComponent));
3084
- if (false) {
3105
+ Confirm.prototype.cancel = function () { };
3106
+ }
3107
+
3108
+ /**
3109
+ * @fileoverview added by tsickle
3110
+ * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
3111
+ */
3112
+ /**
3113
+ * @record
3114
+ * @template R, E
3115
+ */
3116
+ function Result() { }
3117
+ (function (Result) {
3085
3118
  /**
3086
- * @type {?}
3087
- * @private
3119
+ * @record
3120
+ * @template R, E
3088
3121
  */
3089
- AbstractPlaceComponent.prototype.routeBindingMediator;
3122
+ function Callback() { }
3123
+ Result.Callback = Callback;
3124
+ if (false) {
3125
+ /** @type {?} */
3126
+ Callback.prototype.then;
3127
+ /** @type {?} */
3128
+ Callback.prototype.catch;
3129
+ }
3130
+ })(Result || (Result = {}));
3131
+
3132
+ /**
3133
+ * @fileoverview added by tsickle
3134
+ * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
3135
+ */
3136
+ /**
3137
+ * @record
3138
+ * @template D, R, E
3139
+ */
3140
+ function ActivityOutletContext() { }
3141
+ if (false) {
3142
+ /** @type {?} */
3143
+ ActivityOutletContext.prototype.interactionContext;
3144
+ /** @type {?} */
3145
+ ActivityOutletContext.prototype.activityClass;
3146
+ /** @type {?} */
3147
+ ActivityOutletContext.prototype.activityData;
3148
+ /** @type {?} */
3149
+ ActivityOutletContext.prototype.onDone;
3150
+ /** @type {?} */
3151
+ ActivityOutletContext.prototype.onCancel;
3152
+ }
3153
+
3154
+ /**
3155
+ * @fileoverview added by tsickle
3156
+ * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
3157
+ */
3158
+
3159
+ /**
3160
+ * @fileoverview added by tsickle
3161
+ * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
3162
+ */
3163
+ /**
3164
+ * @record
3165
+ */
3166
+ function IPlaceComponent() { }
3167
+ if (false) {
3168
+ /** @type {?} */
3169
+ IPlaceComponent.prototype.activatedRoute;
3090
3170
  /**
3091
- * @type {?}
3092
- * @protected
3171
+ * @return {?}
3093
3172
  */
3094
- AbstractPlaceComponent.prototype.activatedRoute;
3173
+ IPlaceComponent.prototype.onPlaceReady = function () { };
3095
3174
  }
3096
3175
 
3097
3176
  /**
@@ -3101,12 +3180,34 @@
3101
3180
  /**
3102
3181
  * @record
3103
3182
  */
3104
- function PlaceComponent() { }
3183
+ function IPlaceService() { }
3105
3184
  if (false) {
3106
3185
  /**
3186
+ * @param {?} params
3187
+ * @return {?}
3188
+ */
3189
+ IPlaceService.prototype.notifyRouteParametersChanged = function (params) { };
3190
+ }
3191
+
3192
+ /**
3193
+ * @fileoverview added by tsickle
3194
+ * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
3195
+ */
3196
+ /**
3197
+ * @param {?} options
3198
+ * @return {?}
3199
+ */
3200
+ function Place(options) {
3201
+ return (/**
3202
+ * @param {?} target
3107
3203
  * @return {?}
3108
3204
  */
3109
- PlaceComponent.prototype.canDeactivate = function () { };
3205
+ function (target) {
3206
+ if (!pectin.lang.constructorChain((/** @type {?} */ (target))).includes(exports.PlaceComponent)) {
3207
+ pectin.lang.illegalState(target + " must extend PlaceComponent to use the @Place decorator");
3208
+ }
3209
+ exports.PlaceComponent.injectDefinition((/** @type {?} */ (target)), options);
3210
+ });
3110
3211
  }
3111
3212
 
3112
3213
  /**
@@ -3133,7 +3234,21 @@
3133
3234
  * @return {?}
3134
3235
  */
3135
3236
  function (component, currentRoute, currentState, nextState) {
3136
- return component.canDeactivate();
3237
+ /** @type {?} */
3238
+ var placeComponent = nextState ?
3239
+ (/** @type {?} */ (nextState.root.firstChild.component)) :
3240
+ null;
3241
+ /** @type {?} */
3242
+ var nextPlaceDefinition = pectin.lang.constructorChain(placeComponent).includes(exports.PlaceComponent) ?
3243
+ exports.PlaceComponent.getDefinition((/** @type {?} */ ((/** @type {?} */ (placeComponent))))) :
3244
+ null;
3245
+ if (nextPlaceDefinition.isDescriptorFor(component)) {
3246
+ // console.log("Same place different route. Do we need a place component hook for this??");
3247
+ return true;
3248
+ }
3249
+ else {
3250
+ return component.canDeactivate(nextPlaceDefinition, nextState);
3251
+ }
3137
3252
  };
3138
3253
  LeavePlaceGuard.decorators = [
3139
3254
  { type: core.Injectable, args: [{
@@ -3940,10 +4055,35 @@
3940
4055
  ParameterType.BOOLEAN = new BooleanType();
3941
4056
  })(exports.ParameterType || (exports.ParameterType = {}));
3942
4057
 
4058
+ /**
4059
+ * @fileoverview added by tsickle
4060
+ * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
4061
+ */
4062
+ /**
4063
+ * @record
4064
+ * @template T
4065
+ */
4066
+ function ResolvedParameter() { }
4067
+ if (false) {
4068
+ /** @type {?} */
4069
+ ResolvedParameter.prototype.parameterDef;
4070
+ /** @type {?} */
4071
+ ResolvedParameter.prototype.resolvedValue;
4072
+ }
4073
+
4074
+ /**
4075
+ * @fileoverview added by tsickle
4076
+ * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
4077
+ */
4078
+ var VisitSnapshot = /** @class */ (function () {
4079
+ function VisitSnapshot() {
4080
+ }
4081
+ return VisitSnapshot;
4082
+ }());
4083
+
3943
4084
  exports.ACTIVITY_DATA = ACTIVITY_DATA;
3944
4085
  exports.AbstractActivity = AbstractActivity;
3945
4086
  exports.AbstractInputComponent = AbstractInputComponent;
3946
- exports.AbstractPlaceComponent = AbstractPlaceComponent;
3947
4087
  exports.ActivityContainerComponent = exports.ɵq;
3948
4088
  exports.ActivityOutletComponent = exports.ɵx;
3949
4089
  exports.AlertDialogComponent = AlertDialogComponent;
@@ -3951,6 +4091,7 @@
3951
4091
  exports.BusyOverlayComponent = BusyOverlayComponent;
3952
4092
  exports.CommandDirective = CommandDirective;
3953
4093
  exports.ConfirmationDialogComponent = ConfirmationDialogComponent;
4094
+ exports.DEFINITION_META_DATA_KEY = DEFINITION_META_DATA_KEY;
3954
4095
  exports.DialogInteractionService = DialogInteractionService;
3955
4096
  exports.Dimension = Dimension;
3956
4097
  exports.DisposableComponent = DisposableComponent;
@@ -3972,6 +4113,7 @@
3972
4113
  exports.QueryParameter = QueryParameter;
3973
4114
  exports.QueryParameterList = QueryParameterList;
3974
4115
  exports.ResizeAwareComponent = ResizeAwareComponent;
4116
+ exports.ResolvedRouteParameterSnapshot = ResolvedRouteParameterSnapshot;
3975
4117
  exports.RouteId = RouteId;
3976
4118
  exports.RouteParameter = RouteParameter;
3977
4119
  exports.RouteParameterList = RouteParameterList;
@@ -3979,6 +4121,7 @@
3979
4121
  exports.SelectInputComponent = SelectInputComponent;
3980
4122
  exports.StringInputComponent = StringInputComponent;
3981
4123
  exports.TabbedPlaceNavigationComponent = TabbedPlaceNavigationComponent;
4124
+ exports.VisitSnapshot = VisitSnapshot;
3982
4125
  exports.slideDownAndUpAnimation = slideDownAndUpAnimation;
3983
4126
  exports.ɵa = CommandDirective;
3984
4127
  exports.ɵb = FocusBindingDirective;