@coolon/angular-ui-powerups 0.0.31 → 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 (60) hide show
  1. package/bundles/coolon-angular-ui-powerups.umd.js +1056 -901
  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 +34 -5
  9. package/esm2015/lib/place/components/place-outlet/route-animations.js +29 -17
  10. package/esm2015/lib/place/components/tabbed-place-navigation/tabbed-place-navigation.component.js +3 -3
  11. package/esm2015/lib/place/guards/leave-place.guard.js +18 -2
  12. package/esm2015/lib/place/i-place-component.js +17 -0
  13. package/esm2015/lib/place/i-place-service.js +16 -0
  14. package/esm2015/lib/place/index.js +7 -3
  15. package/esm2015/lib/place/place-component.js +165 -7
  16. package/esm2015/lib/place/place.decorator.js +7 -87
  17. package/esm2015/lib/place/place.service.js +47 -8
  18. package/esm2015/lib/place/route/resolved-parameter.js +16 -0
  19. package/esm2015/lib/place/route/resolved-route-parameter-snapshot.js +106 -0
  20. package/esm2015/lib/place/route/route-parameter-bindings.js +14 -158
  21. package/esm2015/lib/place/route/visit-snapshot.js +7 -0
  22. package/esm2015/public_api.js +2 -2
  23. package/esm5/coolon-angular-ui-powerups.js +2 -2
  24. package/esm5/index.js +2 -2
  25. package/esm5/lib/place/components/place-outlet/place-outlet.component.js +41 -5
  26. package/esm5/lib/place/components/place-outlet/route-animations.js +29 -17
  27. package/esm5/lib/place/components/tabbed-place-navigation/tabbed-place-navigation.component.js +3 -3
  28. package/esm5/lib/place/guards/leave-place.guard.js +18 -2
  29. package/esm5/lib/place/i-place-component.js +17 -0
  30. package/esm5/lib/place/i-place-service.js +16 -0
  31. package/esm5/lib/place/index.js +7 -3
  32. package/esm5/lib/place/place-component.js +195 -7
  33. package/esm5/lib/place/place.decorator.js +7 -97
  34. package/esm5/lib/place/place.service.js +52 -10
  35. package/esm5/lib/place/route/resolved-parameter.js +16 -0
  36. package/esm5/lib/place/route/resolved-route-parameter-snapshot.js +129 -0
  37. package/esm5/lib/place/route/route-parameter-bindings.js +13 -185
  38. package/esm5/lib/place/route/visit-snapshot.js +11 -0
  39. package/esm5/public_api.js +2 -2
  40. package/fesm2015/coolon-angular-ui-powerups.js +835 -701
  41. package/fesm2015/coolon-angular-ui-powerups.js.map +1 -1
  42. package/fesm5/coolon-angular-ui-powerups.js +1054 -901
  43. package/fesm5/coolon-angular-ui-powerups.js.map +1 -1
  44. package/lib/place/components/place-outlet/place-outlet.component.d.ts +4 -0
  45. package/lib/place/components/tabbed-place-navigation/tabbed-place-navigation.component.d.ts +1 -2
  46. package/lib/place/i-place-component.d.ts +5 -0
  47. package/lib/place/i-place-service.d.ts +10 -0
  48. package/lib/place/index.d.ts +5 -1
  49. package/lib/place/place-component.d.ts +40 -2
  50. package/lib/place/place.decorator.d.ts +1 -25
  51. package/lib/place/place.service.d.ts +13 -2
  52. package/lib/place/route/resolved-parameter.d.ts +5 -0
  53. package/lib/place/route/resolved-route-parameter-snapshot.d.ts +12 -0
  54. package/lib/place/route/route-parameter-bindings.d.ts +3 -4
  55. package/lib/place/route/visit-snapshot.d.ts +2 -0
  56. package/package.json +1 -1
  57. package/styles/styles.scss +10 -0
  58. package/esm2015/lib/place/abstract-place-component.js +0 -50
  59. package/esm5/lib/place/abstract-place-component.js +0 -57
  60. 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,792 +1904,917 @@
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
- /** @type {?} */
1978
- var left = [
1979
- animations$1.query(':enter, :leave', animations$1.style({ position: 'fixed', width: '100%' }), { optional: true }),
1980
- animations$1.group([
1981
- animations$1.query(':enter', [animations$1.style({ transform: 'translateX(-100%)' }), animations$1.animate('.3s ease-out', animations$1.style({ transform: 'translateX(0%)' }))], {
1982
- optional: true,
1983
- }),
1984
- animations$1.query(':leave', [animations$1.style({ transform: 'translateX(0%)' }), animations$1.animate('.3s ease-out', animations$1.style({ transform: 'translateX(100%)' }))], {
1985
- optional: true,
1986
- }),
1987
- ]),
1988
- ];
1989
- /** @type {?} */
1990
- var right = [
1991
- animations$1.query(':enter, :leave', animations$1.style({ position: 'fixed', width: '100%' }), { optional: true }),
1992
- animations$1.group([
1993
- animations$1.query(':enter', [animations$1.style({ transform: 'translateX(100%)' }), animations$1.animate('.3s ease-out', animations$1.style({ transform: 'translateX(0%)' }))], {
1994
- optional: true,
1995
- }),
1996
- animations$1.query(':leave', [animations$1.style({ transform: 'translateX(0%)' }), animations$1.animate('.3s ease-out', animations$1.style({ transform: 'translateX(-100%)' }))], {
1997
- optional: true,
1998
- }),
1999
- ]),
2000
- ];
2001
- /** @type {?} */
2002
- var LEFT_RIGHT_PLACE_ANIMATION = animations$1.trigger('routeAnimations', [
2003
- animations$1.transition(':increment', right),
2004
- animations$1.transition(':decrement', left),
2005
- ]);
2006
-
2007
- /**
2008
- * @fileoverview added by tsickle
2009
- * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
2010
- */
2011
- var PlaceOutletComponent = /** @class */ (function () {
2012
- function PlaceOutletComponent(placeService) {
2013
- this.placeService = placeService;
2014
- this.animate = true;
2015
- }
2016
1952
  /**
2017
1953
  * @return {?}
2018
1954
  */
2019
- PlaceOutletComponent.prototype.ngOnInit = /**
1955
+ ResolvedRouteParameterSnapshot.prototype.getFormattedRouteId = /**
2020
1956
  * @return {?}
2021
1957
  */
2022
1958
  function () {
1959
+ /** @type {?} */
1960
+ var routeIdParam = this.getRouteIdParam();
1961
+ return routeIdParam ? routeIdParam.parameterDef.type.format(routeIdParam.resolvedValue) : null;
2023
1962
  };
2024
1963
  /**
2025
- * @param {?} $event
1964
+ * @private
2026
1965
  * @return {?}
2027
1966
  */
2028
- PlaceOutletComponent.prototype.onActivate = /**
2029
- * @param {?} $event
1967
+ ResolvedRouteParameterSnapshot.prototype.getRouteIdParam = /**
1968
+ * @private
2030
1969
  * @return {?}
2031
1970
  */
2032
- function ($event) {
2033
- this.placeService.onActivate($event);
1971
+ function () {
1972
+ return this.parameters.find((/**
1973
+ * @param {?} p
1974
+ * @return {?}
1975
+ */
1976
+ function (p) { return p.parameterDef.isRouteId; }));
2034
1977
  };
2035
1978
  /**
2036
- * @param {?} $event
2037
1979
  * @return {?}
2038
1980
  */
2039
- PlaceOutletComponent.prototype.onDeactivate = /**
2040
- * @param {?} $event
1981
+ ResolvedRouteParameterSnapshot.prototype.getFormattedParameters = /**
2041
1982
  * @return {?}
2042
1983
  */
2043
- function ($event) {
2044
- 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;
2045
2000
  };
2046
2001
  /**
2047
- * @param {?} outlet
2048
2002
  * @return {?}
2049
2003
  */
2050
- PlaceOutletComponent.prototype.getPlaceOrder = /**
2051
- * @param {?} outlet
2004
+ ResolvedRouteParameterSnapshot.prototype.hasRouteId = /**
2052
2005
  * @return {?}
2053
2006
  */
2054
- function (outlet) {
2055
- return this.animate && outlet && outlet.activatedRouteData && outlet.activatedRouteData['placeOrder'];
2056
- };
2057
- PlaceOutletComponent.decorators = [
2058
- { type: core.Component, args: [{
2059
- selector: 'angular-ui-powerups-place-outlet',
2060
- template: "<div container [@routeAnimations]=\"getPlaceOrder(routerOutlet)\">\n <router-outlet #routerOutlet=\"outlet\"\n (activate)=\"onActivate($event)\"\n (deactivate)=\"onDeactivate($event)\">\n </router-outlet>\n</div>\n\n",
2061
- animations: [LEFT_RIGHT_PLACE_ANIMATION],
2062
- styles: [":host{display:flex;flex-direction:column;min-height:0}[container]{flex:1;display:-ms-grid;display:grid;-ms-grid-rows:0 1fr;grid-template-rows:0 1fr;min-height:0}"]
2063
- }] }
2064
- ];
2065
- /** @nocollapse */
2066
- PlaceOutletComponent.ctorParameters = function () { return [
2067
- { type: PlaceService }
2068
- ]; };
2069
- PlaceOutletComponent.propDecorators = {
2070
- animate: [{ type: core.Input }]
2007
+ function () {
2008
+ return !!this.getRouteIdParam();
2071
2009
  };
2072
- 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;
2073
2023
  }());
2074
2024
  if (false) {
2075
2025
  /** @type {?} */
2076
- PlaceOutletComponent.prototype.animate;
2077
- /**
2078
- * @type {?}
2079
- * @private
2080
- */
2081
- PlaceOutletComponent.prototype.placeService;
2026
+ ResolvedRouteParameterSnapshot.prototype.parameters;
2082
2027
  }
2083
2028
 
2084
2029
  /**
2085
2030
  * @fileoverview added by tsickle
2086
2031
  * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
2087
2032
  */
2088
- /**
2089
- * @param {?} options
2090
- * @return {?}
2091
- */
2092
- function Place(options) {
2093
- return (/**
2094
- * @param {?} target
2095
- * @return {?}
2096
- */
2097
- function (target) {
2098
- Reflect.defineMetadata('place.options', options, target);
2099
- });
2100
- }
2101
- (function (Place) {
2102
- /**
2103
- * @record
2104
- */
2105
- function Options() { }
2106
- Place.Options = Options;
2107
- if (false) {
2108
- /** @type {?} */
2109
- 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()));
2110
2043
  /** @type {?} */
2111
- Options.prototype.order;
2112
- /** @type {?|undefined} */
2113
- Options.prototype.data;
2114
- /** @type {?|undefined} */
2115
- Options.prototype.authenticate;
2116
- }
2117
- var Descriptor = /** @class */ (function () {
2118
- function Descriptor(placeClass, options) {
2119
- pectin.assert.notNil(options);
2120
- this.path = options.path;
2121
- this.order = options.order;
2122
- this.data = options.data;
2123
- this.authenticate = lodash.isNil(options.authenticate) || options.authenticate;
2124
- }
2125
- /**
2126
- * @template T
2127
- * @param {?} key
2128
- * @param {?=} defaultValue
2129
- * @return {?}
2130
- */
2131
- Descriptor.prototype.getData = /**
2132
- * @template T
2133
- * @param {?} key
2134
- * @param {?=} defaultValue
2135
- * @return {?}
2136
- */
2137
- function (key, defaultValue) {
2138
- return this.data ?
2139
- lodash.isNil(this.data[key]) ? defaultValue : this.data[key] :
2140
- defaultValue;
2141
- };
2142
- /**
2143
- * @template T
2144
- * @param {?} keys
2145
- * @param {?=} defaultValue
2044
+ var routeParameterDefs = typescriptUtilities.Klass.get(component).getMetadataList(RouteParameterBindings.ROUTE_PARAMETER_LIST_KEY);
2045
+ routeParameterDefs.forEach((/**
2046
+ * @param {?} parameter
2146
2047
  * @return {?}
2147
2048
  */
2148
- Descriptor.prototype.searchData = /**
2149
- * @template T
2150
- * @param {?} keys
2151
- * @param {?=} defaultValue
2049
+ function (parameter) { return _this.installBinding(parameter); }));
2050
+ /** @type {?} */
2051
+ var incomingResolvedRouteParameters = observe.valuesFrom(component.activatedRoute.paramMap)
2052
+ .last()
2053
+ .map((/**
2054
+ * @param {?} params
2152
2055
  * @return {?}
2153
2056
  */
2154
- function (keys, defaultValue) {
2155
- var _this = this;
2156
- if (this.data) {
2157
- /** @type {?} */
2158
- var found = keys.find((/**
2159
- * @param {?} key
2160
- * @return {?}
2161
- */
2162
- function (key) { return !lodash.isNil(_this.data[key]); }));
2163
- return found ? this.data[found] : defaultValue;
2164
- }
2165
- else {
2166
- return defaultValue;
2167
- }
2168
- };
2169
- return Descriptor;
2170
- }());
2171
- Place.Descriptor = Descriptor;
2172
- if (false) {
2173
- /** @type {?} */
2174
- Descriptor.prototype.path;
2175
- /** @type {?} */
2176
- Descriptor.prototype.authenticate;
2177
- /** @type {?} */
2178
- Descriptor.prototype.order;
2179
- /** @type {?} */
2180
- Descriptor.prototype.data;
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;
2181
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
+ });
2182
2117
  /**
2183
- * @param {?} klass
2118
+ * @protected
2119
+ * @template T
2120
+ * @param {?} parameter
2184
2121
  * @return {?}
2185
2122
  */
2186
- function getDescriptor(klass) {
2123
+ RouteParameterBindings.prototype.installBinding = /**
2124
+ * @protected
2125
+ * @template T
2126
+ * @param {?} parameter
2127
+ * @return {?}
2128
+ */
2129
+ function (parameter) {
2187
2130
  /** @type {?} */
2188
- var placeOptions = Reflect.getMetadata('place.options', klass);
2189
- return new Descriptor(klass, placeOptions);
2190
- }
2191
- Place.getDescriptor = getDescriptor;
2192
- })(Place || (Place = {}));
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 = {}));
2193
2190
 
2194
2191
  /**
2195
2192
  * @fileoverview added by tsickle
2196
2193
  * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
2197
2194
  */
2198
- var TabbedPlaceNavigationComponent = /** @class */ (function (_super) {
2199
- __extends(TabbedPlaceNavigationComponent, _super);
2200
- function TabbedPlaceNavigationComponent() {
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
2201
  var _this = _super.call(this) || this;
2202
- 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;
2203
- _this.orderedPlaces = chain(_this.placesModel).map((/**
2204
- * @param {?} c
2205
- * @return {?}
2206
- */
2207
- function (c) { return Place.getDescriptor(c); })).sortBy('order');
2202
+ _this.activatedRoute = activatedRoute;
2203
+ _this.routeBindingMediator = _this.registerDisposable(new exports.RouteParameterBindings(_this, placeService));
2208
2204
  return _this;
2209
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
+ };
2210
2229
  /**
2211
2230
  * @return {?}
2212
2231
  */
2213
- TabbedPlaceNavigationComponent.prototype.ngOnInit = /**
2232
+ PlaceComponent.prototype.onPlaceReady = /**
2214
2233
  * @return {?}
2215
2234
  */
2216
2235
  function () {
2217
2236
  };
2218
- TabbedPlaceNavigationComponent.decorators = [
2219
- { type: core.Component, args: [{
2220
- selector: 'angular-ui-powerups-tabbed-place-navigation',
2221
- template: "<nav mat-tab-nav-bar>\n <a mat-tab-link *ngFor=\"let placeDescriptor of orderedPlaces.value\"\n [routerLink]='placeDescriptor.path'\n routerLinkActive #rla=\"routerLinkActive\"\n [active]=\"rla.isActive\"\n [matTooltip]=\"placeDescriptor.searchData(['navTooltip', 'navTitle'])\">\n <mat-icon *ngIf=\"placeDescriptor.getData('navIcon')\">{{placeDescriptor.getData('navIcon')}}</mat-icon>\n <span>{{placeDescriptor.getData(\"navTitle\", 'missing @Place({data: {navTitle: ??}\\})')}}</span>\n </a>\n</nav>\n",
2222
- styles: [""]
2223
- }] }
2224
- ];
2225
- /** @nocollapse */
2226
- TabbedPlaceNavigationComponent.ctorParameters = function () { return []; };
2227
- TabbedPlaceNavigationComponent.propDecorators = {
2228
- places: [{ type: core.Input }],
2229
- placesModel: [{ type: core.Input }]
2230
- };
2231
2237
  __decorate([
2232
- pectin.StoreInListModel('placesModel'),
2233
- __metadata("design:type", Array)
2234
- ], TabbedPlaceNavigationComponent.prototype, "places", void 0);
2238
+ fastMemoizeDecorator.Memoize(),
2239
+ __metadata("design:type", PlaceComponent.Definition),
2240
+ __metadata("design:paramtypes", [])
2241
+ ], PlaceComponent.prototype, "placeConfig", null);
2235
2242
  __decorate([
2236
- pectin.UseDelegate(),
2237
- __metadata("design:type", pectin.ListModel)
2238
- ], TabbedPlaceNavigationComponent.prototype, "placesModel", void 0);
2239
- return TabbedPlaceNavigationComponent;
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;
2240
2249
  }(DisposableComponent));
2241
2250
  if (false) {
2251
+ /**
2252
+ * @type {?}
2253
+ * @private
2254
+ */
2255
+ exports.PlaceComponent.prototype.routeBindingMediator;
2242
2256
  /** @type {?} */
2243
- TabbedPlaceNavigationComponent.prototype.places;
2244
- /** @type {?} */
2245
- TabbedPlaceNavigationComponent.prototype.placesModel;
2246
- /** @type {?} */
2247
- TabbedPlaceNavigationComponent.prototype.orderedPlaces;
2257
+ exports.PlaceComponent.prototype.activatedRoute;
2248
2258
  }
2249
-
2250
- /**
2251
- * @fileoverview added by tsickle
2252
- * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
2253
- */
2254
- var PlaceModule = /** @class */ (function () {
2255
- function PlaceModule() {
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 {?}
2302
+ */
2303
+ function (key, defaultValue) {
2304
+ return this.data ?
2305
+ lodash.isNil(this.data[key]) ? defaultValue : this.data[key] :
2306
+ defaultValue;
2307
+ };
2308
+ /**
2309
+ * @template T
2310
+ * @param {?} keys
2311
+ * @param {?=} defaultValue
2312
+ * @return {?}
2313
+ */
2314
+ Definition.prototype.searchData = /**
2315
+ * @template T
2316
+ * @param {?} keys
2317
+ * @param {?=} defaultValue
2318
+ * @return {?}
2319
+ */
2320
+ function (keys, defaultValue) {
2321
+ var _this = this;
2322
+ if (this.data) {
2323
+ /** @type {?} */
2324
+ var found = keys.find((/**
2325
+ * @param {?} key
2326
+ * @return {?}
2327
+ */
2328
+ function (key) { return !lodash.isNil(_this.data[key]); }));
2329
+ return found ? this.data[found] : defaultValue;
2330
+ }
2331
+ else {
2332
+ return defaultValue;
2333
+ }
2334
+ };
2335
+ return Definition;
2336
+ }());
2337
+ PlaceComponent.Definition = Definition;
2338
+ if (false) {
2339
+ /** @type {?} */
2340
+ Definition.prototype.path;
2341
+ /** @type {?} */
2342
+ Definition.prototype.authenticate;
2343
+ /** @type {?} */
2344
+ Definition.prototype.order;
2345
+ /** @type {?} */
2346
+ Definition.prototype.data;
2347
+ /** @type {?} */
2348
+ Definition.prototype.component;
2256
2349
  }
2257
- PlaceModule.decorators = [
2258
- { type: core.NgModule, args: [{
2259
- imports: [
2260
- common.CommonModule,
2261
- animations.BrowserAnimationsModule,
2262
- material.MatProgressSpinnerModule,
2263
- router.RouterModule,
2264
- tabs.MatTabsModule,
2265
- list.MatListModule,
2266
- tooltip.MatTooltipModule,
2267
- icon.MatIconModule
2268
- ],
2269
- declarations: [
2270
- EmptyStateComponent,
2271
- BusyOverlayComponent,
2272
- PlaceOutletComponent,
2273
- TabbedPlaceNavigationComponent
2274
- ],
2275
- entryComponents: [BusyOverlayComponent],
2276
- exports: [
2277
- BusyOverlayComponent,
2278
- PlaceOutletComponent,
2279
- EmptyStateComponent,
2280
- TabbedPlaceNavigationComponent
2281
- ],
2282
- providers: [
2283
- PlaceService
2284
- ]
2285
- },] }
2286
- ];
2287
- return PlaceModule;
2288
- }());
2289
-
2290
- /**
2291
- * @fileoverview added by tsickle
2292
- * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
2293
- */
2294
- var AngularUiPowerupsModule = /** @class */ (function () {
2295
- function AngularUiPowerupsModule() {
2350
+ /**
2351
+ * @record
2352
+ */
2353
+ function Options() { }
2354
+ PlaceComponent.Options = Options;
2355
+ if (false) {
2356
+ /** @type {?} */
2357
+ Options.prototype.path;
2358
+ /** @type {?} */
2359
+ Options.prototype.order;
2360
+ /** @type {?|undefined} */
2361
+ Options.prototype.data;
2362
+ /** @type {?|undefined} */
2363
+ Options.prototype.authenticate;
2296
2364
  }
2297
- AngularUiPowerupsModule.decorators = [
2298
- { type: core.NgModule, args: [{
2299
- declarations: [
2300
- CommandDirective,
2301
- FocusBindingDirective,
2302
- NumberInputComponent,
2303
- StringInputComponent,
2304
- PasswordInputComponent,
2305
- SelectInputComponent,
2306
- ],
2307
- imports: [
2308
- common.CommonModule,
2309
- platformBrowser.BrowserModule,
2310
- animations.BrowserAnimationsModule,
2311
- forms.FormsModule,
2312
- material.MatInputModule,
2313
- material.MatFormFieldModule,
2314
- material.MatSelectModule,
2315
- PlaceModule,
2316
- InteractionModule
2317
- ],
2318
- exports: [
2319
- CommandDirective,
2320
- FocusBindingDirective,
2321
- NumberInputComponent,
2322
- StringInputComponent,
2323
- PasswordInputComponent,
2324
- SelectInputComponent,
2325
- InteractionModule,
2326
- PlaceModule,
2327
- ]
2328
- },] }
2329
- ];
2330
- return AngularUiPowerupsModule;
2331
- }());
2332
-
2333
- /**
2334
- * @fileoverview added by tsickle
2335
- * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
2336
- */
2337
- /** @type {?} */
2338
- var defaultHiddenStyleDef = animations$1.style({
2339
- opacity: 0,
2340
- 'height': '0',
2341
- paddingTop: '0',
2342
- paddingBottom: '0'
2343
- });
2344
- /**
2345
- * @param {?} triggerName
2346
- * @param {?=} options
2347
- * @return {?}
2348
- */
2349
- function slideDownAndUpAnimation(triggerName, options) {
2350
- // SEE to fix this: https://github.com/angular/angular/issues/15587#issuecomment-351510501
2351
- /** @type {?} */
2352
- var duration = pectin.OptionsHelper.get(options).getOptional('duration', '100ms');
2353
- /** @type {?} */
2354
- var hiddenStyleDef = pectin.OptionsHelper.get(options).getOptional('hiddenStyleDef', defaultHiddenStyleDef);
2355
- return animations$1.trigger(triggerName, [
2356
- animations$1.transition(':enter', [hiddenStyleDef, animations$1.animate('100ms')]),
2357
- animations$1.transition(':leave', [animations$1.animate('100ms', hiddenStyleDef)])
2358
- ]);
2359
- }
2360
-
2361
- /**
2362
- * @fileoverview added by tsickle
2363
- * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
2364
- */
2365
-
2366
- /**
2367
- * @fileoverview added by tsickle
2368
- * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
2369
- */
2370
- var Dimension = /** @class */ (function () {
2371
- function Dimension(width, height) {
2372
- this.width = width;
2373
- this.height = height;
2365
+ /**
2366
+ * @param {?} klass
2367
+ * @return {?}
2368
+ */
2369
+ function getDefinition(klass) {
2370
+ /** @type {?} */
2371
+ var placeOptions = Reflect.getMetadata(DEFINITION_META_DATA_KEY, klass);
2372
+ return new Definition(klass, placeOptions);
2374
2373
  }
2375
- return Dimension;
2376
- }());
2377
- if (false) {
2378
- /** @type {?} */
2379
- Dimension.prototype.width;
2380
- /** @type {?} */
2381
- Dimension.prototype.height;
2382
- }
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);
2382
+ }
2383
+ PlaceComponent.injectDefinition = injectDefinition;
2384
+ })(exports.PlaceComponent || (exports.PlaceComponent = {}));
2383
2385
 
2384
2386
  /**
2385
2387
  * @fileoverview added by tsickle
2386
2388
  * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
2387
2389
  */
2388
- var Point = /** @class */ (function () {
2389
- function Point(x, y) {
2390
- this.x = x;
2391
- this.y = y;
2390
+ var PlaceService = /** @class */ (function (_super) {
2391
+ __extends(PlaceService, _super);
2392
+ function PlaceService(router) {
2393
+ var _this = _super.call(this) || this;
2394
+ _this.router = router;
2395
+ _this._activePlaces = new pectin.MutableListModel();
2396
+ return _this;
2392
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
+ });
2393
2408
  /**
2394
- * @param {?} data
2409
+ * @param {?} place
2395
2410
  * @return {?}
2396
2411
  */
2397
- Point.from = /**
2398
- * @param {?} data
2412
+ PlaceService.prototype.onActivate = /**
2413
+ * @param {?} place
2399
2414
  * @return {?}
2400
2415
  */
2401
- function (data) {
2402
- return new Point(data.x, data.y);
2416
+ function (place) {
2417
+ this._activePlaces.push(place);
2403
2418
  };
2404
2419
  /**
2405
- * @param {?} x
2406
- * @param {?} y
2420
+ * @param {?} place
2407
2421
  * @return {?}
2408
2422
  */
2409
- Point.prototype.translate = /**
2410
- * @param {?} x
2411
- * @param {?} y
2423
+ PlaceService.prototype.onDeactivate = /**
2424
+ * @param {?} place
2412
2425
  * @return {?}
2413
2426
  */
2414
- function (x, y) {
2415
- return new Point(this.x + x, this.y + y);
2427
+ function (place) {
2428
+ this._activePlaces.remove(place);
2416
2429
  };
2417
- return Point;
2418
- }());
2419
- if (false) {
2420
- /** @type {?} */
2421
- Point.prototype.x;
2422
- /** @type {?} */
2423
- Point.prototype.y;
2424
- }
2425
-
2426
- /**
2427
- * @fileoverview added by tsickle
2428
- * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
2429
- */
2430
- exports.Bounds = /** @class */ (function (_super) {
2431
- __extends(Bounds, _super);
2432
- function Bounds(top, left, width, height) {
2433
- var _this = _super.call(this, width, height) || this;
2434
- _this.top = top;
2435
- _this.left = left;
2436
- _this.width = width;
2437
- _this.height = height;
2438
- return _this;
2439
- }
2440
2430
  /**
2441
- * @param {?} point
2431
+ * @param {?} params
2442
2432
  * @return {?}
2443
2433
  */
2444
- Bounds.prototype.relativePositionOf = /**
2445
- * @param {?} point
2434
+ PlaceService.prototype.notifyRouteParametersChanged = /**
2435
+ * @param {?} params
2446
2436
  * @return {?}
2447
2437
  */
2448
- function (point) {
2449
- if (point instanceof MouseEvent) {
2450
- return new Point(point.clientX - this.left, point.clientY - this.top);
2451
- }
2452
- else {
2453
- return new Point(point.x - this.left, point.y - this.top);
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
+ });
2454
2450
  }
2455
2451
  };
2456
- return Bounds;
2457
- }(Dimension));
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));
2458
2482
  if (false) {
2459
- /** @type {?} */
2460
- exports.Bounds.prototype.top;
2461
- /** @type {?} */
2462
- exports.Bounds.prototype.left;
2463
- /** @type {?} */
2464
- exports.Bounds.prototype.width;
2465
- /** @type {?} */
2466
- exports.Bounds.prototype.height;
2467
- }
2468
- (function (Bounds) {
2469
2483
  /**
2470
- * @param {?} element
2471
- * @return {?}
2484
+ * @type {?}
2485
+ * @private
2472
2486
  */
2473
- function ofElement(element) {
2474
- /** @type {?} */
2475
- var rect = element.getBoundingClientRect();
2476
- return new Bounds(rect.top, rect.left, rect.width, rect.height);
2477
- }
2478
- Bounds.ofElement = ofElement;
2479
- })(exports.Bounds || (exports.Bounds = {}));
2487
+ PlaceService.prototype._activePlaces;
2488
+ /**
2489
+ * @type {?}
2490
+ * @protected
2491
+ */
2492
+ PlaceService.prototype.router;
2493
+ }
2480
2494
 
2481
2495
  /**
2482
2496
  * @fileoverview added by tsickle
2483
2497
  * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
2484
2498
  */
2485
- var ResizeAwareComponent = /** @class */ (function (_super) {
2486
- __extends(ResizeAwareComponent, _super);
2487
- function ResizeAwareComponent(elementRef, ngZone) {
2488
- var _this = _super.call(this) || this;
2489
- _this.elementRef = elementRef;
2490
- _this.ngZone = ngZone;
2491
- _this._boundsModel = new pectin.ValueHolder(new exports.Bounds(0, 0, 0, 0));
2492
- return _this;
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;
2493
2549
  }
2494
2550
  /**
2495
2551
  * @return {?}
2496
2552
  */
2497
- ResizeAwareComponent.prototype.ngAfterViewInit = /**
2553
+ PlaceOutletComponent.prototype.ngOnInit = /**
2498
2554
  * @return {?}
2499
2555
  */
2500
2556
  function () {
2501
- var _this = this;
2502
- this.updateBounds();
2503
- /** @type {?} */
2504
- var element = this.elementRef.nativeElement;
2505
- /** @type {?} */
2506
- var ro = new ResizeObserver((/**
2507
- * @param {?} entries
2508
- * @param {?} observer
2509
- * @return {?}
2510
- */
2511
- function (entries, observer) {
2512
- _this.ngZone.run((/**
2513
- * @return {?}
2514
- */
2515
- function () { return _this.updateBounds(); }));
2516
- }));
2517
- ro.observe(element);
2518
- this.onDispose((/**
2519
- * @return {?}
2520
- */
2521
- function () { return ro.disconnect(); }));
2522
2557
  };
2523
- Object.defineProperty(ResizeAwareComponent.prototype, "boundsModel", {
2524
- get: /**
2525
- * @return {?}
2526
- */
2527
- function () {
2528
- return this._boundsModel.readonly;
2529
- },
2530
- enumerable: true,
2531
- configurable: true
2532
- });
2533
- Object.defineProperty(ResizeAwareComponent.prototype, "nativeElement", {
2534
- get: /**
2535
- * @return {?}
2536
- */
2537
- function () {
2538
- return this.elementRef.nativeElement;
2539
- },
2540
- enumerable: true,
2541
- configurable: true
2542
- });
2543
- // TODO: Make this handle body scroll
2544
- // TODO: Make this handle body scroll
2545
2558
  /**
2546
- * @param {?} point
2559
+ * @param {?} $event
2547
2560
  * @return {?}
2548
2561
  */
2549
- ResizeAwareComponent.prototype.relativePositionOf =
2550
- // TODO: Make this handle body scroll
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
+ };
2551
2573
  /**
2552
- * @param {?} point
2574
+ * @param {?} $event
2553
2575
  * @return {?}
2554
2576
  */
2555
- function (point) {
2556
- return this.bounds.relativePositionOf(point);
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();
2557
2604
  };
2558
- Object.defineProperty(ResizeAwareComponent.prototype, "bounds", {
2559
- get: /**
2560
- * @return {?}
2561
- */
2562
- function () {
2563
- return this._boundsModel.value;
2564
- },
2565
- enumerable: true,
2566
- configurable: true
2567
- });
2568
2605
  /**
2569
2606
  * @private
2570
2607
  * @return {?}
2571
2608
  */
2572
- ResizeAwareComponent.prototype.updateBounds = /**
2609
+ PlaceOutletComponent.prototype.notifyPlaceReady = /**
2573
2610
  * @private
2574
2611
  * @return {?}
2575
2612
  */
2576
2613
  function () {
2577
- this._boundsModel.value = exports.Bounds.ofElement(this.nativeElement);
2614
+ if (this.currentPlace) {
2615
+ this.currentPlace.onPlaceReady();
2616
+ }
2578
2617
  };
2579
- return ResizeAwareComponent;
2580
- }(DisposableComponent));
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
+ }());
2581
2636
  if (false) {
2637
+ /** @type {?} */
2638
+ PlaceOutletComponent.prototype.animate;
2639
+ /** @type {?} */
2640
+ PlaceOutletComponent.prototype.routerOutLet;
2582
2641
  /**
2583
2642
  * @type {?}
2584
2643
  * @private
2585
2644
  */
2586
- ResizeAwareComponent.prototype._boundsModel;
2587
- /**
2588
- * @type {?}
2589
- * @protected
2590
- */
2591
- ResizeAwareComponent.prototype.elementRef;
2645
+ PlaceOutletComponent.prototype.currentPlace;
2592
2646
  /**
2593
2647
  * @type {?}
2594
- * @protected
2648
+ * @private
2595
2649
  */
2596
- ResizeAwareComponent.prototype.ngZone;
2650
+ PlaceOutletComponent.prototype.placeService;
2597
2651
  }
2598
2652
 
2599
2653
  /**
2600
2654
  * @fileoverview added by tsickle
2601
2655
  * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
2602
2656
  */
2603
-
2604
- /**
2605
- * @fileoverview added by tsickle
2606
- * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
2607
- */
2608
-
2609
- /**
2610
- * @fileoverview added by tsickle
2611
- * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
2612
- */
2613
- /**
2614
- * @record
2615
- */
2616
- function Alert() { }
2617
- if (false) {
2618
- /**
2619
- * @return {?}
2620
- */
2621
- Alert.prototype.title = function () { };
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
+ }
2622
2669
  /**
2623
2670
  * @return {?}
2624
2671
  */
2625
- Alert.prototype.content = function () { };
2626
- /**
2672
+ TabbedPlaceNavigationComponent.prototype.ngOnInit = /**
2627
2673
  * @return {?}
2628
2674
  */
2629
- Alert.prototype.ok = function () { };
2675
+ function () {
2676
+ };
2677
+ TabbedPlaceNavigationComponent.decorators = [
2678
+ { type: core.Component, args: [{
2679
+ selector: 'angular-ui-powerups-tabbed-place-navigation',
2680
+ template: "<nav mat-tab-nav-bar>\n <a mat-tab-link *ngFor=\"let placeDescriptor of orderedPlaces.value\"\n [routerLink]='placeDescriptor.path'\n routerLinkActive #rla=\"routerLinkActive\"\n [active]=\"rla.isActive\"\n [matTooltip]=\"placeDescriptor.searchData(['navTooltip', 'navTitle'])\">\n <mat-icon *ngIf=\"placeDescriptor.getData('navIcon')\">{{placeDescriptor.getData('navIcon')}}</mat-icon>\n <span>{{placeDescriptor.getData(\"navTitle\", 'missing @Place({data: {navTitle: ??}\\})')}}</span>\n </a>\n</nav>\n",
2681
+ styles: [""]
2682
+ }] }
2683
+ ];
2684
+ /** @nocollapse */
2685
+ TabbedPlaceNavigationComponent.ctorParameters = function () { return []; };
2686
+ TabbedPlaceNavigationComponent.propDecorators = {
2687
+ places: [{ type: core.Input }],
2688
+ placesModel: [{ type: core.Input }]
2689
+ };
2690
+ __decorate([
2691
+ pectin.StoreInListModel('placesModel'),
2692
+ __metadata("design:type", Array)
2693
+ ], TabbedPlaceNavigationComponent.prototype, "places", void 0);
2694
+ __decorate([
2695
+ pectin.UseDelegate(),
2696
+ __metadata("design:type", pectin.ListModel)
2697
+ ], TabbedPlaceNavigationComponent.prototype, "placesModel", void 0);
2698
+ return TabbedPlaceNavigationComponent;
2699
+ }(DisposableComponent));
2700
+ if (false) {
2701
+ /** @type {?} */
2702
+ TabbedPlaceNavigationComponent.prototype.places;
2703
+ /** @type {?} */
2704
+ TabbedPlaceNavigationComponent.prototype.placesModel;
2705
+ /** @type {?} */
2706
+ TabbedPlaceNavigationComponent.prototype.orderedPlaces;
2630
2707
  }
2631
2708
 
2632
2709
  /**
2633
2710
  * @fileoverview added by tsickle
2634
2711
  * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
2635
2712
  */
2636
- /**
2637
- * @record
2638
- */
2639
- function Confirm() { }
2640
- if (false) {
2641
- /** @type {?|undefined} */
2642
- Confirm.prototype.destructive;
2643
- /**
2644
- * @return {?}
2645
- */
2646
- Confirm.prototype.cancel = function () { };
2647
- }
2713
+ var PlaceModule = /** @class */ (function () {
2714
+ function PlaceModule() {
2715
+ }
2716
+ PlaceModule.decorators = [
2717
+ { type: core.NgModule, args: [{
2718
+ imports: [
2719
+ common.CommonModule,
2720
+ animations.BrowserAnimationsModule,
2721
+ material.MatProgressSpinnerModule,
2722
+ router.RouterModule,
2723
+ tabs.MatTabsModule,
2724
+ list.MatListModule,
2725
+ tooltip.MatTooltipModule,
2726
+ icon.MatIconModule
2727
+ ],
2728
+ declarations: [
2729
+ EmptyStateComponent,
2730
+ BusyOverlayComponent,
2731
+ PlaceOutletComponent,
2732
+ TabbedPlaceNavigationComponent
2733
+ ],
2734
+ entryComponents: [BusyOverlayComponent],
2735
+ exports: [
2736
+ BusyOverlayComponent,
2737
+ PlaceOutletComponent,
2738
+ EmptyStateComponent,
2739
+ TabbedPlaceNavigationComponent
2740
+ ],
2741
+ providers: [
2742
+ PlaceService
2743
+ ]
2744
+ },] }
2745
+ ];
2746
+ return PlaceModule;
2747
+ }());
2648
2748
 
2649
2749
  /**
2650
2750
  * @fileoverview added by tsickle
2651
2751
  * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
2652
2752
  */
2653
- /**
2654
- * @record
2655
- * @template R, E
2656
- */
2657
- function Result() { }
2658
- (function (Result) {
2659
- /**
2660
- * @record
2661
- * @template R, E
2662
- */
2663
- function Callback() { }
2664
- Result.Callback = Callback;
2665
- if (false) {
2666
- /** @type {?} */
2667
- Callback.prototype.then;
2668
- /** @type {?} */
2669
- Callback.prototype.catch;
2753
+ var AngularUiPowerupsModule = /** @class */ (function () {
2754
+ function AngularUiPowerupsModule() {
2670
2755
  }
2671
- })(Result || (Result = {}));
2756
+ AngularUiPowerupsModule.decorators = [
2757
+ { type: core.NgModule, args: [{
2758
+ declarations: [
2759
+ CommandDirective,
2760
+ FocusBindingDirective,
2761
+ NumberInputComponent,
2762
+ StringInputComponent,
2763
+ PasswordInputComponent,
2764
+ SelectInputComponent,
2765
+ ],
2766
+ imports: [
2767
+ common.CommonModule,
2768
+ platformBrowser.BrowserModule,
2769
+ animations.BrowserAnimationsModule,
2770
+ forms.FormsModule,
2771
+ material.MatInputModule,
2772
+ material.MatFormFieldModule,
2773
+ material.MatSelectModule,
2774
+ PlaceModule,
2775
+ InteractionModule
2776
+ ],
2777
+ exports: [
2778
+ CommandDirective,
2779
+ FocusBindingDirective,
2780
+ NumberInputComponent,
2781
+ StringInputComponent,
2782
+ PasswordInputComponent,
2783
+ SelectInputComponent,
2784
+ InteractionModule,
2785
+ PlaceModule,
2786
+ ]
2787
+ },] }
2788
+ ];
2789
+ return AngularUiPowerupsModule;
2790
+ }());
2672
2791
 
2673
2792
  /**
2674
2793
  * @fileoverview added by tsickle
2675
2794
  * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
2676
2795
  */
2796
+ /** @type {?} */
2797
+ var defaultHiddenStyleDef = animations$1.style({
2798
+ opacity: 0,
2799
+ 'height': '0',
2800
+ paddingTop: '0',
2801
+ paddingBottom: '0'
2802
+ });
2677
2803
  /**
2678
- * @record
2679
- * @template D, R, E
2804
+ * @param {?} triggerName
2805
+ * @param {?=} options
2806
+ * @return {?}
2680
2807
  */
2681
- function ActivityOutletContext() { }
2682
- if (false) {
2683
- /** @type {?} */
2684
- ActivityOutletContext.prototype.interactionContext;
2685
- /** @type {?} */
2686
- ActivityOutletContext.prototype.activityClass;
2687
- /** @type {?} */
2688
- ActivityOutletContext.prototype.activityData;
2808
+ function slideDownAndUpAnimation(triggerName, options) {
2809
+ // SEE to fix this: https://github.com/angular/angular/issues/15587#issuecomment-351510501
2689
2810
  /** @type {?} */
2690
- ActivityOutletContext.prototype.onDone;
2811
+ var duration = pectin.OptionsHelper.get(options).getOptional('duration', '100ms');
2691
2812
  /** @type {?} */
2692
- ActivityOutletContext.prototype.onCancel;
2813
+ var hiddenStyleDef = pectin.OptionsHelper.get(options).getOptional('hiddenStyleDef', defaultHiddenStyleDef);
2814
+ return animations$1.trigger(triggerName, [
2815
+ animations$1.transition(':enter', [hiddenStyleDef, animations$1.animate('100ms')]),
2816
+ animations$1.transition(':leave', [animations$1.animate('100ms', hiddenStyleDef)])
2817
+ ]);
2693
2818
  }
2694
2819
 
2695
2820
  /**
@@ -2701,385 +2826,351 @@
2701
2826
  * @fileoverview added by tsickle
2702
2827
  * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
2703
2828
  */
2704
- /**
2705
- * @record
2706
- * @template T
2707
- */
2708
- function ResolvedParameter() { }
2829
+ var Dimension = /** @class */ (function () {
2830
+ function Dimension(width, height) {
2831
+ this.width = width;
2832
+ this.height = height;
2833
+ }
2834
+ return Dimension;
2835
+ }());
2709
2836
  if (false) {
2710
2837
  /** @type {?} */
2711
- ResolvedParameter.prototype.parameterDef;
2838
+ Dimension.prototype.width;
2712
2839
  /** @type {?} */
2713
- ResolvedParameter.prototype.resolvedValue;
2840
+ Dimension.prototype.height;
2714
2841
  }
2715
- var ResolvedParameters = /** @class */ (function () {
2716
- function ResolvedParameters(parameters) {
2717
- this.parameters = parameters;
2842
+
2843
+ /**
2844
+ * @fileoverview added by tsickle
2845
+ * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
2846
+ */
2847
+ var Point = /** @class */ (function () {
2848
+ function Point(x, y) {
2849
+ this.x = x;
2850
+ this.y = y;
2718
2851
  }
2719
2852
  /**
2720
- * @template T
2721
- * @param {?} parameter
2722
- * @return {?}
2723
- */
2724
- ResolvedParameters.prototype.get = /**
2725
- * @template T
2726
- * @param {?} parameter
2727
- * @return {?}
2728
- */
2729
- function (parameter) {
2730
- /** @type {?} */
2731
- var resolved = this.parameters.find((/**
2732
- * @param {?} p
2733
- * @return {?}
2734
- */
2735
- function (p) { return p.parameterDef === parameter; }));
2736
- return resolved ? resolved.resolvedValue : null;
2737
- };
2738
- /**
2739
- * @template T
2740
- * @param {?} parameter
2741
- * @param {?} value
2853
+ * @param {?} data
2742
2854
  * @return {?}
2743
2855
  */
2744
- ResolvedParameters.prototype.replace = /**
2745
- * @template T
2746
- * @param {?} parameter
2747
- * @param {?} value
2856
+ Point.from = /**
2857
+ * @param {?} data
2748
2858
  * @return {?}
2749
2859
  */
2750
- function (parameter, value) {
2751
- return new ResolvedParameters(this.parameters.filter((/**
2752
- * @param {?} p
2753
- * @return {?}
2754
- */
2755
- function (p) { return p.parameterDef !== parameter; })).concat({
2756
- parameterDef: parameter,
2757
- resolvedValue: value
2758
- }));
2860
+ function (data) {
2861
+ return new Point(data.x, data.y);
2759
2862
  };
2760
2863
  /**
2761
- * @protected
2864
+ * @param {?} x
2865
+ * @param {?} y
2762
2866
  * @return {?}
2763
2867
  */
2764
- ResolvedParameters.prototype.getFormattedRouteId = /**
2765
- * @protected
2868
+ Point.prototype.translate = /**
2869
+ * @param {?} x
2870
+ * @param {?} y
2766
2871
  * @return {?}
2767
2872
  */
2768
- function () {
2769
- /** @type {?} */
2770
- var routeIdParam = this.getRouteIdParam();
2771
- return routeIdParam ? routeIdParam.parameterDef.type.format(routeIdParam.resolvedValue) : null;
2873
+ function (x, y) {
2874
+ return new Point(this.x + x, this.y + y);
2772
2875
  };
2876
+ return Point;
2877
+ }());
2878
+ if (false) {
2879
+ /** @type {?} */
2880
+ Point.prototype.x;
2881
+ /** @type {?} */
2882
+ Point.prototype.y;
2883
+ }
2884
+
2885
+ /**
2886
+ * @fileoverview added by tsickle
2887
+ * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
2888
+ */
2889
+ exports.Bounds = /** @class */ (function (_super) {
2890
+ __extends(Bounds, _super);
2891
+ function Bounds(top, left, width, height) {
2892
+ var _this = _super.call(this, width, height) || this;
2893
+ _this.top = top;
2894
+ _this.left = left;
2895
+ _this.width = width;
2896
+ _this.height = height;
2897
+ return _this;
2898
+ }
2773
2899
  /**
2774
- * @private
2900
+ * @param {?} point
2775
2901
  * @return {?}
2776
2902
  */
2777
- ResolvedParameters.prototype.getRouteIdParam = /**
2778
- * @private
2903
+ Bounds.prototype.relativePositionOf = /**
2904
+ * @param {?} point
2779
2905
  * @return {?}
2780
2906
  */
2781
- function () {
2782
- return this.parameters.find((/**
2783
- * @param {?} p
2784
- * @return {?}
2785
- */
2786
- function (p) { return p.parameterDef.isRouteId; }));
2907
+ function (point) {
2908
+ if (point instanceof MouseEvent) {
2909
+ return new Point(point.clientX - this.left, point.clientY - this.top);
2910
+ }
2911
+ else {
2912
+ return new Point(point.x - this.left, point.y - this.top);
2913
+ }
2787
2914
  };
2915
+ return Bounds;
2916
+ }(Dimension));
2917
+ if (false) {
2918
+ /** @type {?} */
2919
+ exports.Bounds.prototype.top;
2920
+ /** @type {?} */
2921
+ exports.Bounds.prototype.left;
2922
+ /** @type {?} */
2923
+ exports.Bounds.prototype.width;
2924
+ /** @type {?} */
2925
+ exports.Bounds.prototype.height;
2926
+ }
2927
+ (function (Bounds) {
2788
2928
  /**
2789
- * @protected
2790
- * @return {?}
2791
- */
2792
- ResolvedParameters.prototype.getFormattedParameters = /**
2793
- * @protected
2929
+ * @param {?} element
2794
2930
  * @return {?}
2795
2931
  */
2796
- function () {
2797
- /** @type {?} */
2798
- var params = {};
2932
+ function ofElement(element) {
2799
2933
  /** @type {?} */
2800
- var routeIdParam = this.parameters.filter((/**
2801
- * @param {?} p
2802
- * @return {?}
2803
- */
2804
- function (p) { return !p.parameterDef.isRouteId; })).forEach((/**
2805
- * @param {?} p
2806
- * @return {?}
2807
- */
2808
- function (p) {
2809
- params[p.parameterDef.name] = p.parameterDef.type.format(p.resolvedValue);
2810
- }));
2811
- return params;
2812
- };
2934
+ var rect = element.getBoundingClientRect();
2935
+ return new Bounds(rect.top, rect.left, rect.width, rect.height);
2936
+ }
2937
+ Bounds.ofElement = ofElement;
2938
+ })(exports.Bounds || (exports.Bounds = {}));
2939
+
2940
+ /**
2941
+ * @fileoverview added by tsickle
2942
+ * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
2943
+ */
2944
+ var ResizeAwareComponent = /** @class */ (function (_super) {
2945
+ __extends(ResizeAwareComponent, _super);
2946
+ function ResizeAwareComponent(elementRef, ngZone) {
2947
+ var _this = _super.call(this) || this;
2948
+ _this.elementRef = elementRef;
2949
+ _this.ngZone = ngZone;
2950
+ _this._boundsModel = new pectin.ValueHolder(new exports.Bounds(0, 0, 0, 0));
2951
+ return _this;
2952
+ }
2813
2953
  /**
2814
2954
  * @return {?}
2815
2955
  */
2816
- ResolvedParameters.prototype.hasRouteId = /**
2956
+ ResizeAwareComponent.prototype.ngAfterViewInit = /**
2817
2957
  * @return {?}
2818
2958
  */
2819
2959
  function () {
2820
- return !!this.getRouteIdParam();
2821
- };
2822
- /**
2823
- * @param {?} previous
2824
- * @param {?} router
2825
- * @param {?} activatedRoute
2826
- * @return {?}
2827
- */
2828
- ResolvedParameters.prototype.redirect = /**
2829
- * @param {?} previous
2830
- * @param {?} router
2831
- * @param {?} activatedRoute
2832
- * @return {?}
2833
- */
2834
- function (previous, router, activatedRoute) {
2835
- /** @type {?} */
2836
- var routeId = this.getFormattedRouteId();
2837
- /** @type {?} */
2838
- var relativePath = !!previous.hasRouteId() ? '..' : '.';
2839
- /** @type {?} */
2840
- var path = routeId ? [relativePath, routeId, this.getFormattedParameters()] : [relativePath, this.getFormattedParameters()];
2841
- router.navigate(path, {
2842
- relativeTo: activatedRoute
2843
- });
2844
- };
2845
- __decorate([
2846
- pectin.Trace(),
2847
- __metadata("design:type", Function),
2848
- __metadata("design:paramtypes", []),
2849
- __metadata("design:returntype", void 0)
2850
- ], ResolvedParameters.prototype, "getFormattedRouteId", null);
2851
- __decorate([
2852
- pectin.Trace(),
2853
- __metadata("design:type", Function),
2854
- __metadata("design:paramtypes", []),
2855
- __metadata("design:returntype", void 0)
2856
- ], ResolvedParameters.prototype, "getFormattedParameters", null);
2857
- __decorate([
2858
- pectin.Trace(),
2859
- __metadata("design:type", Function),
2860
- __metadata("design:paramtypes", [ResolvedParameters, router.Router, router.ActivatedRoute]),
2861
- __metadata("design:returntype", void 0)
2862
- ], ResolvedParameters.prototype, "redirect", null);
2863
- return ResolvedParameters;
2864
- }());
2865
- if (false) {
2866
- /** @type {?} */
2867
- ResolvedParameters.prototype.parameters;
2868
- }
2869
- exports.RouteParameterBindings = /** @class */ (function (_super) {
2870
- __extends(RouteParameterBindings, _super);
2871
- function RouteParameterBindings(component, router, activatedRoute) {
2872
- var _this = _super.call(this) || this;
2873
- _this.component = component;
2874
- _this.router = router;
2875
- _this.activatedRoute = activatedRoute;
2876
- _this._incomingRouteChange = new pectin.MutableValueModel(false);
2877
- _this.resolvedParameters = new pectin.MutableValueModel();
2878
- var _a = pectin.Dsl.disposeWith(_this), chain = _a.chain, valueOf = _a.valueOf, before = _a.before, when = _a.when, after = _a.after, observe = _a.observe;
2879
- _this.txo = new pectin.TransactionObserver(); //.onEvent(e => console.log(e.toString()));
2880
- //.onEvent(e => console.log(e.toString()));
2960
+ var _this = this;
2961
+ this.updateBounds();
2881
2962
  /** @type {?} */
2882
- var routeParameterDefs = typescriptUtilities.Klass.get(component).getMetadataList(RouteParameterBindings.ROUTE_PARAMETER_LIST_KEY);
2883
- routeParameterDefs.forEach((/**
2884
- * @param {?} parameter
2885
- * @return {?}
2886
- */
2887
- function (parameter) { return _this.installBinding(parameter); }));
2963
+ var element = this.elementRef.nativeElement;
2888
2964
  /** @type {?} */
2889
- var incomingResolvedRouteParameters = observe.valuesFrom(activatedRoute.paramMap)
2890
- .last()
2891
- .map((/**
2892
- * @param {?} params
2965
+ var ro = new ResizeObserver((/**
2966
+ * @param {?} entries
2967
+ * @param {?} observer
2893
2968
  * @return {?}
2894
2969
  */
2895
- function (params) {
2896
- /** @type {?} */
2897
- var result = [];
2898
- routeParameterDefs.forEach((/**
2899
- * @param {?} parameterDef
2970
+ function (entries, observer) {
2971
+ _this.ngZone.run((/**
2900
2972
  * @return {?}
2901
2973
  */
2902
- function (parameterDef) {
2903
- /** @type {?} */
2904
- var resolvedValue;
2905
- if (parameterDef.isArray) {
2906
- resolvedValue = params.getAll(parameterDef.name).map((/**
2907
- * @param {?} v
2908
- * @return {?}
2909
- */
2910
- function (v) { return parameterDef.type.parse(v); }));
2911
- }
2912
- else {
2913
- resolvedValue = parameterDef.type.parse(params.get(parameterDef.name));
2914
- }
2915
- result.push({ parameterDef: parameterDef, resolvedValue: resolvedValue });
2916
- }));
2917
- return new ResolvedParameters(result);
2974
+ function () { return _this.updateBounds(); }));
2918
2975
  }));
2919
- incomingResolvedRouteParameters.subscribe((/**
2920
- * @param {?} resolvedParameters
2976
+ ro.observe(element);
2977
+ this.onDispose((/**
2921
2978
  * @return {?}
2922
2979
  */
2923
- function (resolvedParameters) {
2924
- _this._incomingRouteChange.value = true;
2925
- _this.resolvedParameters.value = resolvedParameters;
2926
- _this._incomingRouteChange.value = false;
2927
- }));
2928
- when.valueOf(_this.resolvedParameters).changes((/**
2929
- * @param {?} params
2930
- * @param {?} previous
2980
+ function () { return ro.disconnect(); }));
2981
+ };
2982
+ Object.defineProperty(ResizeAwareComponent.prototype, "boundsModel", {
2983
+ get: /**
2931
2984
  * @return {?}
2932
2985
  */
2933
- function (params, previous) {
2934
- params.redirect(previous, router, activatedRoute);
2935
- }), { unless: _this.incomingRouteChange });
2936
- _this.txo.observe('incomingResolvedRouteParameters', incomingResolvedRouteParameters);
2937
- _this.txo.observe('this.routeIsChanging', _this.incomingRouteChange);
2938
- return _this;
2939
- }
2940
- Object.defineProperty(RouteParameterBindings.prototype, "incomingRouteChange", {
2986
+ function () {
2987
+ return this._boundsModel.readonly;
2988
+ },
2989
+ enumerable: true,
2990
+ configurable: true
2991
+ });
2992
+ Object.defineProperty(ResizeAwareComponent.prototype, "nativeElement", {
2941
2993
  get: /**
2942
2994
  * @return {?}
2943
2995
  */
2944
2996
  function () {
2945
- return this._incomingRouteChange.readonly;
2997
+ return this.elementRef.nativeElement;
2946
2998
  },
2947
2999
  enumerable: true,
2948
3000
  configurable: true
2949
3001
  });
3002
+ // TODO: Make this handle body scroll
3003
+ // TODO: Make this handle body scroll
2950
3004
  /**
2951
- * @protected
2952
- * @template T
2953
- * @param {?} parameter
3005
+ * @param {?} point
2954
3006
  * @return {?}
2955
3007
  */
2956
- RouteParameterBindings.prototype.installBinding = /**
2957
- * @protected
2958
- * @template T
2959
- * @param {?} parameter
3008
+ ResizeAwareComponent.prototype.relativePositionOf =
3009
+ // TODO: Make this handle body scroll
3010
+ /**
3011
+ * @param {?} point
2960
3012
  * @return {?}
2961
3013
  */
2962
- function (parameter) {
2963
- /** @type {?} */
2964
- var model = this.getModelFor(parameter);
2965
- // this.txo.observe(parameter.propertyName, model);
2966
- this.registerDisposable(new pectin.Binding(this.resolvedParameters, model, {
2967
- toRight: /**
2968
- * @param {?} parameters
2969
- * @return {?}
2970
- */
2971
- function (parameters) {
2972
- return parameters.get(parameter);
2973
- },
2974
- toLeft: /**
2975
- * @param {?} value
2976
- * @param {?=} currentParameters
2977
- * @return {?}
2978
- */
2979
- function (value, currentParameters) {
2980
- return currentParameters.replace(parameter, value);
2981
- }
2982
- }));
3014
+ function (point) {
3015
+ return this.bounds.relativePositionOf(point);
2983
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
+ });
2984
3027
  /**
2985
3028
  * @private
2986
- * @template T
2987
- * @param {?} parameter
2988
3029
  * @return {?}
2989
3030
  */
2990
- RouteParameterBindings.prototype.getModelFor = /**
3031
+ ResizeAwareComponent.prototype.updateBounds = /**
2991
3032
  * @private
2992
- * @template T
2993
- * @param {?} parameter
2994
3033
  * @return {?}
2995
3034
  */
2996
- function (parameter) {
2997
- return this.component[parameter.propertyName];
3035
+ function () {
3036
+ this._boundsModel.value = exports.Bounds.ofElement(this.nativeElement);
2998
3037
  };
2999
- return RouteParameterBindings;
3000
- }(pectin.GarbageCollector));
3038
+ return ResizeAwareComponent;
3039
+ }(DisposableComponent));
3001
3040
  if (false) {
3002
- /** @type {?} */
3003
- exports.RouteParameterBindings.prototype._incomingRouteChange;
3004
3041
  /**
3005
3042
  * @type {?}
3006
3043
  * @private
3007
3044
  */
3008
- exports.RouteParameterBindings.prototype.txo;
3045
+ ResizeAwareComponent.prototype._boundsModel;
3009
3046
  /**
3010
3047
  * @type {?}
3011
- * @private
3048
+ * @protected
3012
3049
  */
3013
- exports.RouteParameterBindings.prototype.resolvedParameters;
3050
+ ResizeAwareComponent.prototype.elementRef;
3014
3051
  /**
3015
3052
  * @type {?}
3016
- * @private
3053
+ * @protected
3017
3054
  */
3018
- 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) {
3019
3077
  /**
3020
- * @type {?}
3021
- * @private
3078
+ * @return {?}
3079
+ */
3080
+ Alert.prototype.title = function () { };
3081
+ /**
3082
+ * @return {?}
3022
3083
  */
3023
- exports.RouteParameterBindings.prototype.router;
3084
+ Alert.prototype.content = function () { };
3024
3085
  /**
3025
- * @type {?}
3026
- * @private
3086
+ * @return {?}
3027
3087
  */
3028
- exports.RouteParameterBindings.prototype.activatedRoute;
3088
+ Alert.prototype.ok = function () { };
3029
3089
  }
3030
- (function (RouteParameterBindings) {
3031
- RouteParameterBindings.ROUTE_PARAMETER_LIST_KEY = Symbol('place:route:parameters');
3032
- })(exports.RouteParameterBindings || (exports.RouteParameterBindings = {}));
3033
3090
 
3034
3091
  /**
3035
3092
  * @fileoverview added by tsickle
3036
3093
  * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
3037
3094
  */
3038
- var AbstractPlaceComponent = /** @class */ (function (_super) {
3039
- __extends(AbstractPlaceComponent, _super);
3040
- function AbstractPlaceComponent(activatedRoute, router) {
3041
- var _this = _super.call(this) || this;
3042
- _this.activatedRoute = activatedRoute;
3043
- _this.routeBindingMediator = _this.registerDisposable(new exports.RouteParameterBindings(_this, router, activatedRoute));
3044
- return _this;
3045
- }
3046
- Object.defineProperty(AbstractPlaceComponent.prototype, "placeConfig", {
3047
- get: /**
3048
- * @return {?}
3049
- */
3050
- function () {
3051
- return Place.getDescriptor((/** @type {?} */ ((/** @type {?} */ (this.constructor)))));
3052
- },
3053
- enumerable: true,
3054
- configurable: true
3055
- });
3095
+ /**
3096
+ * @record
3097
+ */
3098
+ function Confirm() { }
3099
+ if (false) {
3100
+ /** @type {?|undefined} */
3101
+ Confirm.prototype.destructive;
3056
3102
  /**
3057
3103
  * @return {?}
3058
3104
  */
3059
- AbstractPlaceComponent.prototype.canDeactivate = /**
3060
- * @return {?}
3061
- */
3062
- function () {
3063
- return true;
3064
- };
3065
- __decorate([
3066
- fastMemoizeDecorator.Memoize(),
3067
- __metadata("design:type", Place.Descriptor),
3068
- __metadata("design:paramtypes", [])
3069
- ], AbstractPlaceComponent.prototype, "placeConfig", null);
3070
- return AbstractPlaceComponent;
3071
- }(DisposableComponent));
3072
- 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) {
3073
3118
  /**
3074
- * @type {?}
3075
- * @private
3119
+ * @record
3120
+ * @template R, E
3076
3121
  */
3077
- 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;
3078
3170
  /**
3079
- * @type {?}
3080
- * @protected
3171
+ * @return {?}
3081
3172
  */
3082
- AbstractPlaceComponent.prototype.activatedRoute;
3173
+ IPlaceComponent.prototype.onPlaceReady = function () { };
3083
3174
  }
3084
3175
 
3085
3176
  /**
@@ -3089,12 +3180,34 @@
3089
3180
  /**
3090
3181
  * @record
3091
3182
  */
3092
- function PlaceComponent() { }
3183
+ function IPlaceService() { }
3093
3184
  if (false) {
3094
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
3095
3203
  * @return {?}
3096
3204
  */
3097
- 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
+ });
3098
3211
  }
3099
3212
 
3100
3213
  /**
@@ -3121,7 +3234,21 @@
3121
3234
  * @return {?}
3122
3235
  */
3123
3236
  function (component, currentRoute, currentState, nextState) {
3124
- 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
+ }
3125
3252
  };
3126
3253
  LeavePlaceGuard.decorators = [
3127
3254
  { type: core.Injectable, args: [{
@@ -3928,10 +4055,35 @@
3928
4055
  ParameterType.BOOLEAN = new BooleanType();
3929
4056
  })(exports.ParameterType || (exports.ParameterType = {}));
3930
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
+
3931
4084
  exports.ACTIVITY_DATA = ACTIVITY_DATA;
3932
4085
  exports.AbstractActivity = AbstractActivity;
3933
4086
  exports.AbstractInputComponent = AbstractInputComponent;
3934
- exports.AbstractPlaceComponent = AbstractPlaceComponent;
3935
4087
  exports.ActivityContainerComponent = exports.ɵq;
3936
4088
  exports.ActivityOutletComponent = exports.ɵx;
3937
4089
  exports.AlertDialogComponent = AlertDialogComponent;
@@ -3939,6 +4091,7 @@
3939
4091
  exports.BusyOverlayComponent = BusyOverlayComponent;
3940
4092
  exports.CommandDirective = CommandDirective;
3941
4093
  exports.ConfirmationDialogComponent = ConfirmationDialogComponent;
4094
+ exports.DEFINITION_META_DATA_KEY = DEFINITION_META_DATA_KEY;
3942
4095
  exports.DialogInteractionService = DialogInteractionService;
3943
4096
  exports.Dimension = Dimension;
3944
4097
  exports.DisposableComponent = DisposableComponent;
@@ -3960,6 +4113,7 @@
3960
4113
  exports.QueryParameter = QueryParameter;
3961
4114
  exports.QueryParameterList = QueryParameterList;
3962
4115
  exports.ResizeAwareComponent = ResizeAwareComponent;
4116
+ exports.ResolvedRouteParameterSnapshot = ResolvedRouteParameterSnapshot;
3963
4117
  exports.RouteId = RouteId;
3964
4118
  exports.RouteParameter = RouteParameter;
3965
4119
  exports.RouteParameterList = RouteParameterList;
@@ -3967,6 +4121,7 @@
3967
4121
  exports.SelectInputComponent = SelectInputComponent;
3968
4122
  exports.StringInputComponent = StringInputComponent;
3969
4123
  exports.TabbedPlaceNavigationComponent = TabbedPlaceNavigationComponent;
4124
+ exports.VisitSnapshot = VisitSnapshot;
3970
4125
  exports.slideDownAndUpAnimation = slideDownAndUpAnimation;
3971
4126
  exports.ɵa = CommandDirective;
3972
4127
  exports.ɵb = FocusBindingDirective;