@coolon/angular-ui-powerups 0.0.43 → 0.0.44

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 (131) hide show
  1. package/bundles/coolon-angular-ui-powerups.umd.js +1165 -1181
  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.d.ts +16 -15
  6. package/coolon-angular-ui-powerups.metadata.json +1 -1
  7. package/esm2015/coolon-angular-ui-powerups.js +16 -15
  8. package/esm2015/index.js +2 -2
  9. package/esm2015/lib/components/disposable-component.js +1 -1
  10. package/esm2015/lib/components/forms/number-input/number-input.component.js +1 -1
  11. package/esm2015/lib/components/forms/password-input/password-input.component.js +1 -1
  12. package/esm2015/lib/components/forms/string-input/string-input.component.js +1 -1
  13. package/esm2015/lib/components/resize-aware.component.js +1 -1
  14. package/esm2015/lib/components/types/bounds.class.js +1 -1
  15. package/esm2015/lib/components/types/dimension.class.js +1 -1
  16. package/esm2015/lib/components/types/point.class.js +1 -1
  17. package/esm2015/lib/directives/command.directive.js +1 -1
  18. package/esm2015/lib/directives/focus-binding.directive.js +2 -2
  19. package/esm2015/lib/interaction/alert.js +1 -1
  20. package/esm2015/lib/interaction/components/activity-container/activity-container.component.js +2 -2
  21. package/esm2015/lib/interaction/components/activity-outlet/activity-outlet.component.js +6 -1
  22. package/esm2015/lib/interaction/components/confirmation-dialog/confirmation-dialog.component.js +2 -2
  23. package/esm2015/lib/interaction/confirm.js +1 -1
  24. package/esm2015/lib/interaction/interaction.module.js +2 -2
  25. package/esm2015/lib/interaction/result.js +1 -1
  26. package/esm2015/lib/interaction/services/dialog-interaction.service.js +2 -2
  27. package/esm2015/lib/place/components/abstract-place-navigation.component.js +3 -2
  28. package/esm2015/lib/place/components/place-outlet/place-outlet.component.js +132 -86
  29. package/esm2015/lib/place/components/place-outlet/route-animations.js +2 -2
  30. package/esm2015/lib/place/components/tabbed-place-navigation/tabbed-place-navigation.component.js +1 -1
  31. package/esm2015/lib/place/guards/leave-place.guard.js +12 -10
  32. package/esm2015/lib/place/guards/place-route.guard.js +40 -33
  33. package/esm2015/lib/place/index.js +5 -5
  34. package/esm2015/lib/place/nav-item.js +1 -1
  35. package/esm2015/lib/place/place-component.js +38 -168
  36. package/esm2015/lib/place/place-definition.js +79 -0
  37. package/esm2015/lib/place/place-history.js +54 -0
  38. package/esm2015/lib/place/place-router.js +83 -0
  39. package/esm2015/lib/place/place.decorator.js +30 -3
  40. package/esm2015/lib/place/place.module.js +2 -5
  41. package/esm2015/lib/place/route/default-parameter-sanitiser.js +10 -22
  42. package/esm2015/lib/place/route/json-types.js +1 -1
  43. package/esm2015/lib/place/route/parameter-decorators.js +7 -60
  44. package/esm2015/lib/place/route/parameter-definition.class.js +103 -8
  45. package/esm2015/lib/place/route/parameter-sanitiser.js +1 -15
  46. package/esm2015/lib/place/route/parameter-snapshot.js +13 -55
  47. package/esm2015/lib/place/route/parameter-type.js +2 -2
  48. package/esm2015/lib/place/route/route-parameter-sanitiser.js +6 -20
  49. package/esm2015/lib/place/visit.js +1 -1
  50. package/esm2015/public_api.js +2 -2
  51. package/esm5/coolon-angular-ui-powerups.js +16 -15
  52. package/esm5/index.js +2 -2
  53. package/esm5/lib/components/disposable-component.js +1 -1
  54. package/esm5/lib/components/forms/number-input/number-input.component.js +1 -1
  55. package/esm5/lib/components/forms/password-input/password-input.component.js +1 -1
  56. package/esm5/lib/components/forms/string-input/string-input.component.js +1 -1
  57. package/esm5/lib/components/resize-aware.component.js +1 -1
  58. package/esm5/lib/components/types/bounds.class.js +1 -1
  59. package/esm5/lib/components/types/dimension.class.js +1 -1
  60. package/esm5/lib/components/types/point.class.js +1 -1
  61. package/esm5/lib/directives/command.directive.js +1 -1
  62. package/esm5/lib/directives/focus-binding.directive.js +2 -2
  63. package/esm5/lib/interaction/alert.js +1 -1
  64. package/esm5/lib/interaction/components/activity-container/activity-container.component.js +2 -2
  65. package/esm5/lib/interaction/components/activity-outlet/activity-outlet.component.js +6 -1
  66. package/esm5/lib/interaction/components/confirmation-dialog/confirmation-dialog.component.js +2 -2
  67. package/esm5/lib/interaction/confirm.js +1 -1
  68. package/esm5/lib/interaction/interaction.module.js +2 -2
  69. package/esm5/lib/interaction/result.js +1 -1
  70. package/esm5/lib/interaction/services/dialog-interaction.service.js +2 -2
  71. package/esm5/lib/place/components/abstract-place-navigation.component.js +3 -2
  72. package/esm5/lib/place/components/place-outlet/place-outlet.component.js +150 -115
  73. package/esm5/lib/place/components/place-outlet/route-animations.js +2 -2
  74. package/esm5/lib/place/components/tabbed-place-navigation/tabbed-place-navigation.component.js +1 -1
  75. package/esm5/lib/place/guards/leave-place.guard.js +12 -10
  76. package/esm5/lib/place/guards/place-route.guard.js +40 -32
  77. package/esm5/lib/place/index.js +5 -5
  78. package/esm5/lib/place/nav-item.js +1 -1
  79. package/esm5/lib/place/place-component.js +52 -198
  80. package/esm5/lib/place/place-definition.js +88 -0
  81. package/esm5/lib/place/place-history.js +57 -0
  82. package/esm5/lib/place/place-router.js +101 -0
  83. package/esm5/lib/place/place.decorator.js +30 -3
  84. package/esm5/lib/place/place.module.js +2 -5
  85. package/esm5/lib/place/route/default-parameter-sanitiser.js +8 -20
  86. package/esm5/lib/place/route/json-types.js +1 -1
  87. package/esm5/lib/place/route/parameter-decorators.js +7 -60
  88. package/esm5/lib/place/route/parameter-definition.class.js +131 -8
  89. package/esm5/lib/place/route/parameter-sanitiser.js +1 -15
  90. package/esm5/lib/place/route/parameter-snapshot.js +25 -63
  91. package/esm5/lib/place/route/parameter-type.js +2 -2
  92. package/esm5/lib/place/route/route-parameter-sanitiser.js +6 -19
  93. package/esm5/lib/place/visit.js +1 -1
  94. package/esm5/public_api.js +2 -2
  95. package/fesm2015/coolon-angular-ui-powerups.js +944 -959
  96. package/fesm2015/coolon-angular-ui-powerups.js.map +1 -1
  97. package/fesm5/coolon-angular-ui-powerups.js +1147 -1167
  98. package/fesm5/coolon-angular-ui-powerups.js.map +1 -1
  99. package/index.d.ts +1 -1
  100. package/lib/interaction/components/activity-outlet/activity-outlet.component.d.ts +7 -0
  101. package/lib/place/components/abstract-place-navigation.component.d.ts +3 -2
  102. package/lib/place/components/place-outlet/place-outlet.component.d.ts +31 -19
  103. package/lib/place/guards/place-route.guard.d.ts +7 -6
  104. package/lib/place/index.d.ts +3 -3
  105. package/lib/place/place-component.d.ts +13 -41
  106. package/lib/place/place-definition.d.ts +20 -0
  107. package/lib/place/place-history.d.ts +10 -0
  108. package/lib/place/place-router.d.ts +9 -0
  109. package/lib/place/place.decorator.d.ts +13 -1
  110. package/lib/place/route/default-parameter-sanitiser.d.ts +3 -5
  111. package/lib/place/route/parameter-decorators.d.ts +0 -4
  112. package/lib/place/route/parameter-definition.class.d.ts +29 -6
  113. package/lib/place/route/parameter-sanitiser.d.ts +0 -6
  114. package/lib/place/route/parameter-snapshot.d.ts +7 -7
  115. package/lib/place/route/route-parameter-sanitiser.d.ts +1 -3
  116. package/lib/place/visit.d.ts +2 -2
  117. package/package.json +1 -1
  118. package/schematics/place-routes/index.js.map +1 -1
  119. package/schematics/place-routes/place-def.js +1 -1
  120. package/schematics/place-routes/place-def.js.map +1 -1
  121. package/schematics/place-routes/templates/place-destinations.ts.template +21 -0
  122. package/schematics/place-routes/templates/{places.ts.template → place-routes.ts.template} +1 -13
  123. package/esm2015/lib/place/place-component-like.js +0 -17
  124. package/esm2015/lib/place/place-updates-service.js +0 -16
  125. package/esm2015/lib/place/place.service.js +0 -102
  126. package/esm5/lib/place/place-component-like.js +0 -17
  127. package/esm5/lib/place/place-updates-service.js +0 -16
  128. package/esm5/lib/place/place.service.js +0 -136
  129. package/lib/place/place-component-like.d.ts +0 -5
  130. package/lib/place/place-updates-service.d.ts +0 -10
  131. package/lib/place/place.service.d.ts +0 -22
@@ -1,9 +1,10 @@
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/material/tabs'), 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/tooltip'), require('@angular/router'), require('@typescript-plus/fast-memoize-decorator/dist/src'), require('@typescript-plus/fast-memoize-decorator'), require('lodash'), require('reflect-metadata'), require('@angular/animations'), require('resize-observer-polyfill')) :
3
- typeof define === 'function' && define.amd ? define('@coolon/angular-ui-powerups', ['exports', '@angular/common', '@angular/core', '@angular/forms', '@angular/material', '@angular/material/tabs', '@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/tooltip', '@angular/router', '@typescript-plus/fast-memoize-decorator/dist/src', '@typescript-plus/fast-memoize-decorator', 'lodash', 'reflect-metadata', '@angular/animations', 'resize-observer-polyfill'], 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.material.tabs, 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.tooltip, global.ng.router, global.src, global.fastMemoizeDecorator, global.lodash, null, global.ng.animations, global.ResizeObserver));
5
- }(this, function (exports, common, core, forms, material, tabs, animations, pectin, portal, deferred_class, typescriptUtilities, dialog, icon, list, tooltip, router, src, fastMemoizeDecorator, lodash, reflectMetadata, animations$1, ResizeObserver) { '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/material/tabs'), 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/tooltip'), require('@angular/router'), require('@typescript-plus/fast-memoize-decorator/dist/src'), require('@typescript-plus/fast-memoize-decorator'), require('reflect-metadata'), require('lodash'), require('@angular/animations'), require('resize-observer-polyfill')) :
3
+ typeof define === 'function' && define.amd ? define('@coolon/angular-ui-powerups', ['exports', '@angular/common', '@angular/core', '@angular/forms', '@angular/material', '@angular/material/tabs', '@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/tooltip', '@angular/router', '@typescript-plus/fast-memoize-decorator/dist/src', '@typescript-plus/fast-memoize-decorator', 'reflect-metadata', 'lodash', '@angular/animations', 'resize-observer-polyfill'], 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.material.tabs, 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.tooltip, global.ng.router, global.src, global.fastMemoizeDecorator, null, global.___default, global.ng.animations, global.ResizeObserver));
5
+ }(this, function (exports, common, core, forms, material, tabs, animations, pectin, portal, deferred_class, typescriptUtilities, dialog, icon, list, tooltip, router, src, fastMemoizeDecorator, reflectMetadata, ___default, animations$1, ResizeObserver) { 'use strict';
6
6
 
7
+ var ___default__default = 'default' in ___default ? ___default['default'] : ___default;
7
8
  ResizeObserver = ResizeObserver && ResizeObserver.hasOwnProperty('default') ? ResizeObserver['default'] : ResizeObserver;
8
9
 
9
10
  /*! *****************************************************************************
@@ -816,7 +817,7 @@
816
817
  }));
817
818
  }
818
819
  else {
819
- pectin.Logger.get(this).warn("pectinFocusBinding was nil");
820
+ pectin.Logger.get(this).warn('pectinFocusBinding was nil');
820
821
  }
821
822
  };
822
823
  /**
@@ -1046,9 +1047,14 @@
1046
1047
  * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
1047
1048
  */
1048
1049
  /**
1050
+ * ActivityOutletComponent creates and displays an activity and delegates the interaction context functionality to an
1051
+ * external service.
1052
+ *
1053
+ * It might be nice to have wrapper component that allows more declarative use, i.e.
1054
+ * <activity-view [activityClass]="...", [activityData]="..." (done)=".." (cancel)="..."></activity-view>
1049
1055
  * @template D, R, E
1050
1056
  */
1051
- exports.ɵu = /** @class */ (function () {
1057
+ exports.ɵv = /** @class */ (function () {
1052
1058
  function ActivityOutletComponent(componentFactoryResolver, viewContainerRef, injector) {
1053
1059
  this.componentFactoryResolver = componentFactoryResolver;
1054
1060
  this.viewContainerRef = viewContainerRef;
@@ -1170,27 +1176,27 @@
1170
1176
  }());
1171
1177
  if (false) {
1172
1178
  /** @type {?} */
1173
- exports.ɵu.prototype.interactionContext;
1179
+ exports.ɵv.prototype.interactionContext;
1174
1180
  /**
1175
1181
  * @type {?}
1176
1182
  * @private
1177
1183
  */
1178
- exports.ɵu.prototype.activityComponentRef;
1184
+ exports.ɵv.prototype.activityComponentRef;
1179
1185
  /**
1180
1186
  * @type {?}
1181
1187
  * @private
1182
1188
  */
1183
- exports.ɵu.prototype.componentFactoryResolver;
1189
+ exports.ɵv.prototype.componentFactoryResolver;
1184
1190
  /**
1185
1191
  * @type {?}
1186
1192
  * @private
1187
1193
  */
1188
- exports.ɵu.prototype.viewContainerRef;
1194
+ exports.ɵv.prototype.viewContainerRef;
1189
1195
  /**
1190
1196
  * @type {?}
1191
1197
  * @private
1192
1198
  */
1193
- exports.ɵu.prototype.injector;
1199
+ exports.ɵv.prototype.injector;
1194
1200
  /* Skipping unhandled member: ;*/
1195
1201
  }
1196
1202
  (function (ActivityOutletComponent) {
@@ -1251,7 +1257,7 @@
1251
1257
  */
1252
1258
  OutletInteractionContext.prototype.context;
1253
1259
  }
1254
- })(exports.ɵu || (exports.ɵu = {}));
1260
+ })(exports.ɵv || (exports.ɵv = {}));
1255
1261
 
1256
1262
  /**
1257
1263
  * @fileoverview added by tsickle
@@ -1499,7 +1505,7 @@
1499
1505
  ConfirmationDialogComponent.decorators = [
1500
1506
  { type: core.Component, args: [{
1501
1507
  selector: 'angular-ui-powerups-confirmation-dialog',
1502
- template: "<h3 matDialogTitle *ngIf=\"confirm.title\">{{confirm.title()}}</h3>\n<div matDialogContent>\n <p *ngFor=\"let line of confirm.content()\">{{line}}</p>\n</div>\n<p matDialogActions>\n <button mat-button (click)=\"cancel()\">{{confirm.cancel()}}</button>\n <button mat-raised-button [color]=\"isDestructive() ? 'warn' : 'primary'\" (click)=\"done(true)\">{{confirm.ok()}}</button>\n</p>\n\n",
1508
+ template: "<h3 matDialogTitle *ngIf=\"confirm.title\">{{confirm.title()}}</h3>\n<div matDialogContent>\n <p *ngFor=\"let line of confirm.content()\">{{line}}</p>\n</div>\n<p matDialogActions>\n <button mat-button (click)=\"cancel()\">{{confirm.cancel()}}</button>\n <button mat-raised-button [color]=\"isDestructive() ? 'warn' : 'primary'\"\n (click)=\"done(true)\">{{confirm.ok()}}</button>\n</p>\n\n",
1503
1509
  styles: [":host{display:block;padding:var(--angular-ui-powerups-default-padding)}.mat-dialog-actions{justify-content:flex-end}"]
1504
1510
  }] }
1505
1511
  ];
@@ -1518,7 +1524,7 @@
1518
1524
  * @fileoverview added by tsickle
1519
1525
  * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
1520
1526
  */
1521
- exports.ɵt = /** @class */ (function (_super) {
1527
+ exports.ɵu = /** @class */ (function (_super) {
1522
1528
  __extends(ActivityContainerComponent, _super);
1523
1529
  function ActivityContainerComponent() {
1524
1530
  var _this = _super.call(this) || this;
@@ -1641,7 +1647,7 @@
1641
1647
  ActivityContainerComponent.decorators = [
1642
1648
  { type: core.Component, args: [{
1643
1649
  selector: 'angular-ui-powerups-activity-container',
1644
- template: "<mat-tab-group #tabs no-tab-header [dynamicHeight]=\"true\">\n <mat-tab>\n <angular-ui-powerups-activity-outlet [interactionContext]=\"this\" [activityContext]=\"initialActivityOutlet\"></angular-ui-powerups-activity-outlet>\n </mat-tab>\n <mat-tab *ngFor=\"let tab of activityOutletTabs.value\">\n <angular-ui-powerups-activity-outlet [interactionContext]=\"this\" [activityContext]=\"tab\"></angular-ui-powerups-activity-outlet>\n </mat-tab>\n</mat-tab-group>\n",
1650
+ template: "<mat-tab-group #tabs no-tab-header [dynamicHeight]=\"true\">\n <mat-tab>\n <angular-ui-powerups-activity-outlet [interactionContext]=\"this\"\n [activityContext]=\"initialActivityOutlet\"></angular-ui-powerups-activity-outlet>\n </mat-tab>\n <mat-tab *ngFor=\"let tab of activityOutletTabs.value\">\n <angular-ui-powerups-activity-outlet [interactionContext]=\"this\"\n [activityContext]=\"tab\"></angular-ui-powerups-activity-outlet>\n </mat-tab>\n</mat-tab-group>\n",
1645
1651
  styles: [":host{display:block}"]
1646
1652
  }] }
1647
1653
  ];
@@ -1651,31 +1657,31 @@
1651
1657
  parentInteractionContext: [{ type: core.Input }],
1652
1658
  initialActivityOutlet: [{ type: core.Input }],
1653
1659
  tabs: [{ type: core.ViewChild, args: ['tabs', { static: true },] }],
1654
- outlets: [{ type: core.ViewChildren, args: [exports.ɵu,] }]
1660
+ outlets: [{ type: core.ViewChildren, args: [exports.ɵv,] }]
1655
1661
  };
1656
1662
  return ActivityContainerComponent;
1657
1663
  }(DisposableComponent));
1658
1664
  if (false) {
1659
1665
  /** @type {?} */
1660
- exports.ɵt.prototype.parentInteractionContext;
1666
+ exports.ɵu.prototype.parentInteractionContext;
1661
1667
  /** @type {?} */
1662
- exports.ɵt.prototype.initialActivityOutlet;
1668
+ exports.ɵu.prototype.initialActivityOutlet;
1663
1669
  /** @type {?} */
1664
- exports.ɵt.prototype.tabs;
1670
+ exports.ɵu.prototype.tabs;
1665
1671
  /** @type {?} */
1666
- exports.ɵt.prototype.outlets;
1672
+ exports.ɵu.prototype.outlets;
1667
1673
  /** @type {?} */
1668
- exports.ɵt.prototype.activityOutletTabs;
1674
+ exports.ɵu.prototype.activityOutletTabs;
1669
1675
  /**
1670
1676
  * @type {?}
1671
1677
  * @private
1672
1678
  */
1673
- exports.ɵt.prototype.obsoleteTabs;
1679
+ exports.ɵu.prototype.obsoleteTabs;
1674
1680
  /**
1675
1681
  * @type {?}
1676
1682
  * @private
1677
1683
  */
1678
- exports.ɵt.prototype.lastActivityTab;
1684
+ exports.ɵu.prototype.lastActivityTab;
1679
1685
  }
1680
1686
  (function (ActivityContainerComponent) {
1681
1687
  /**
@@ -1694,7 +1700,7 @@
1694
1700
  /** @type {?} */
1695
1701
  ActivityContext.prototype.onCancel;
1696
1702
  }
1697
- })(exports.ɵt || (exports.ɵt = {}));
1703
+ })(exports.ɵu || (exports.ɵu = {}));
1698
1704
 
1699
1705
  /**
1700
1706
  * @fileoverview added by tsickle
@@ -1750,7 +1756,7 @@
1750
1756
  autoFocus: false
1751
1757
  };
1752
1758
  /** @type {?} */
1753
- var matDialogRef = (/** @type {?} */ (this.dialogService.open(exports.ɵt, config)));
1759
+ var matDialogRef = (/** @type {?} */ (this.dialogService.open(exports.ɵu, config)));
1754
1760
  return new Promise((/**
1755
1761
  * @param {?} resolve
1756
1762
  * @param {?} reject
@@ -1842,17 +1848,17 @@
1842
1848
  portal.PortalModule
1843
1849
  ],
1844
1850
  declarations: [
1845
- exports.ɵt,
1851
+ exports.ɵu,
1846
1852
  ConfirmationDialogComponent,
1847
1853
  AlertDialogComponent,
1848
- exports.ɵu
1854
+ exports.ɵv
1849
1855
  ],
1850
1856
  exports: [
1851
- exports.ɵt,
1852
- exports.ɵu
1857
+ exports.ɵu,
1858
+ exports.ɵv
1853
1859
  ],
1854
1860
  entryComponents: [
1855
- exports.ɵt,
1861
+ exports.ɵu,
1856
1862
  ConfirmationDialogComponent,
1857
1863
  AlertDialogComponent
1858
1864
  ],
@@ -1940,1040 +1946,1100 @@
1940
1946
  * @fileoverview added by tsickle
1941
1947
  * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
1942
1948
  */
1943
- // TODO: there are really two types of snapshot, ones with id's and ones without.
1944
- // Id snapshot are repesented by 2 url segments
1945
- // ID => [{'/basePath', params}, {'id', params}]
1946
- // NO ID => [{'/basePath', params}]
1947
- exports.ParameterSnapshot = /** @class */ (function () {
1948
- function ParameterSnapshot(placeDefinition, resolved) {
1949
- this.placeDefinition = placeDefinition;
1950
- this.resolved = resolved;
1949
+ var PlaceDefinition = /** @class */ (function () {
1950
+ function PlaceDefinition(component, path, authenticate, order, data, routeParameters, children) {
1951
+ this.component = component;
1952
+ this.path = path;
1953
+ this.authenticate = authenticate;
1954
+ this.order = order;
1955
+ this.data = data;
1956
+ this.routeParameters = routeParameters;
1957
+ this.children = children;
1951
1958
  }
1952
1959
  /**
1953
- * @param {?} other
1954
1960
  * @return {?}
1955
1961
  */
1956
- ParameterSnapshot.prototype.hasChanged = /**
1957
- * @param {?} other
1962
+ PlaceDefinition.prototype.getRouteParameters = /**
1958
1963
  * @return {?}
1959
1964
  */
1960
- function (other) {
1961
- /** @type {?} */
1962
- var changed = this.resolved.find((/**
1963
- * @param {?} r
1964
- * @return {?}
1965
- */
1966
- function (r) {
1967
- return !r.isSame(other.getResolvedParameterValue(r.parameterDef));
1968
- }));
1969
- if (changed) {
1970
- console.log({ mine: changed, theirs: other.getResolvedParameter(changed.parameterDef) });
1971
- }
1972
- return !!changed;
1965
+ function () {
1966
+ return this.routeParameters;
1973
1967
  };
1974
1968
  /**
1975
- * @param {?} other
1969
+ * @template T
1970
+ * @param {?} key
1971
+ * @param {?=} defaultValue
1976
1972
  * @return {?}
1977
1973
  */
1978
- ParameterSnapshot.prototype.asUrlSegment = /**
1979
- * @param {?} other
1974
+ PlaceDefinition.prototype.getData = /**
1975
+ * @template T
1976
+ * @param {?} key
1977
+ * @param {?=} defaultValue
1980
1978
  * @return {?}
1981
1979
  */
1982
- function (other) {
1983
- pectin.assert.isTruthy(this.hasChanged(other));
1984
- /** @type {?} */
1985
- var routeParts = [];
1986
- /** @type {?} */
1987
- var gainedId = this.getFormattedRouteId() && !other.getFormattedRouteId();
1988
- /** @type {?} */
1989
- var sameId = this.getFormattedRouteId() === other.getFormattedRouteId();
1990
- /** @type {?} */
1991
- var lostId = (!this.getFormattedRouteId() && other.getFormattedRouteId());
1992
- /** @type {?} */
1993
- var changedId = (this.getFormattedRouteId() !== other.getFormattedRouteId());
1994
- if (lostId || changedId) {
1995
- routeParts.push('..');
1996
- if (changedId) {
1997
- routeParts.push(this.getFormattedRouteId());
1998
- }
1980
+ function (key, defaultValue) {
1981
+ return this.data ?
1982
+ ___default__default.isNil(this.data[key]) ? defaultValue : this.data[key] :
1983
+ defaultValue;
1984
+ };
1985
+ /**
1986
+ * @template T
1987
+ * @param {?} keys
1988
+ * @param {?=} defaultValue
1989
+ * @return {?}
1990
+ */
1991
+ PlaceDefinition.prototype.searchData = /**
1992
+ * @template T
1993
+ * @param {?} keys
1994
+ * @param {?=} defaultValue
1995
+ * @return {?}
1996
+ */
1997
+ function (keys, defaultValue) {
1998
+ var _this = this;
1999
+ if (this.data) {
2000
+ /** @type {?} */
2001
+ var found = keys.find((/**
2002
+ * @param {?} key
2003
+ * @return {?}
2004
+ */
2005
+ function (key) { return !___default__default.isNil(_this.data[key]); }));
2006
+ return found ? this.data[found] : defaultValue;
1999
2007
  }
2000
2008
  else {
2001
- routeParts.push('.');
2009
+ return defaultValue;
2002
2010
  }
2003
- routeParts.push(this.getFormattedParameters());
2004
- return routeParts;
2005
2011
  };
2012
+ return PlaceDefinition;
2013
+ }());
2014
+ if (false) {
2015
+ /** @type {?} */
2016
+ PlaceDefinition.prototype.component;
2017
+ /** @type {?} */
2018
+ PlaceDefinition.prototype.path;
2019
+ /** @type {?} */
2020
+ PlaceDefinition.prototype.authenticate;
2021
+ /** @type {?} */
2022
+ PlaceDefinition.prototype.order;
2023
+ /** @type {?} */
2024
+ PlaceDefinition.prototype.data;
2025
+ /** @type {?} */
2026
+ PlaceDefinition.prototype.routeParameters;
2027
+ /** @type {?} */
2028
+ PlaceDefinition.prototype.children;
2029
+ }
2030
+
2031
+ /**
2032
+ * @fileoverview added by tsickle
2033
+ * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
2034
+ */
2035
+ // RAKE: making this Symbol(...) broke things.
2036
+ /** @type {?} */
2037
+ var DEFINITION_META_DATA_KEY = 'PLACE_DEFINITION_OPTIONS';
2038
+ // this one seems ok.
2039
+ /** @type {?} */
2040
+ var ROUTE_PARAMETER_LIST_KEY = Symbol('place:route:parameters');
2041
+ exports.PlaceComponent = /** @class */ (function (_super) {
2042
+ __extends(PlaceComponent, _super);
2043
+ function PlaceComponent() {
2044
+ return _super.call(this) || this;
2045
+ }
2006
2046
  /**
2007
- * @template T, S
2008
- * @param {?} parameterDef
2047
+ * @param {?} resolvedParameters
2009
2048
  * @return {?}
2010
2049
  */
2011
- ParameterSnapshot.prototype.getResolvedParameter = /**
2012
- * @template T, S
2013
- * @param {?} parameterDef
2050
+ PlaceComponent.prototype.initialiseBindings = /**
2051
+ * @param {?} resolvedParameters
2014
2052
  * @return {?}
2015
2053
  */
2016
- function (parameterDef) {
2017
- return this.resolved.find((/**
2018
- * @param {?} r
2054
+ function (resolvedParameters) {
2055
+ var _this = this;
2056
+ pectin.assert.isNil(this.resolvedParameters);
2057
+ this.resolvedParameters = resolvedParameters;
2058
+ this.placeDefinition.getRouteParameters().forEach((/**
2059
+ * @param {?} parameterDef
2019
2060
  * @return {?}
2020
2061
  */
2021
- function (r) { return r.parameterDef === parameterDef; }));
2062
+ function (parameterDef) {
2063
+ _this.installBinding(parameterDef);
2064
+ }));
2022
2065
  };
2023
2066
  /**
2067
+ * @private
2024
2068
  * @template T, S
2025
2069
  * @param {?} parameterDef
2026
2070
  * @return {?}
2027
2071
  */
2028
- ParameterSnapshot.prototype.getResolvedParameterValue = /**
2072
+ PlaceComponent.prototype.installBinding = /**
2073
+ * @private
2029
2074
  * @template T, S
2030
2075
  * @param {?} parameterDef
2031
2076
  * @return {?}
2032
2077
  */
2033
2078
  function (parameterDef) {
2034
2079
  /** @type {?} */
2035
- var resolvedParameter = this.getResolvedParameter(parameterDef);
2036
- return resolvedParameter ? resolvedParameter.value : null;
2080
+ var model = (/** @type {?} */ (this[parameterDef.propertyName]));
2081
+ // this.txo.observe(parameterDef.propertyName, model);
2082
+ this.registerDisposable(new pectin.Binding(this.resolvedParameters, model, {
2083
+ toRight: /**
2084
+ * @param {?} parameters
2085
+ * @return {?}
2086
+ */
2087
+ function (parameters) {
2088
+ return parameters.getResolvedParameterValue(parameterDef);
2089
+ },
2090
+ toLeft: /**
2091
+ * @param {?} value
2092
+ * @param {?=} currentParameters
2093
+ * @return {?}
2094
+ */
2095
+ function (value, currentParameters) {
2096
+ return currentParameters.replace(parameterDef, value);
2097
+ }
2098
+ }));
2037
2099
  };
2100
+ Object.defineProperty(PlaceComponent.prototype, "placeDefinition", {
2101
+ get: /**
2102
+ * @return {?}
2103
+ */
2104
+ function () {
2105
+ return PlaceComponent.getDefinition((/** @type {?} */ ((/** @type {?} */ (this.constructor)))));
2106
+ },
2107
+ enumerable: true,
2108
+ configurable: true
2109
+ });
2110
+ Object.defineProperty(PlaceComponent.prototype, "childPlaces", {
2111
+ get: /**
2112
+ * @return {?}
2113
+ */
2114
+ function () {
2115
+ return this.placeDefinition.children.map((/**
2116
+ * @param {?} d
2117
+ * @return {?}
2118
+ */
2119
+ function (d) { return d.component; }));
2120
+ },
2121
+ enumerable: true,
2122
+ configurable: true
2123
+ });
2038
2124
  /**
2039
2125
  * @return {?}
2040
2126
  */
2041
- ParameterSnapshot.prototype.getRouteId = /**
2127
+ PlaceComponent.prototype.canDeactivate = /**
2042
2128
  * @return {?}
2043
2129
  */
2044
2130
  function () {
2045
- return this.getResolvedRouteId() ? this.getResolvedRouteId().value : null;
2131
+ return true;
2046
2132
  };
2047
2133
  /**
2048
- * @param {?} name
2049
2134
  * @return {?}
2050
2135
  */
2051
- ParameterSnapshot.prototype.getRouteParameter = /**
2052
- * @param {?} name
2136
+ PlaceComponent.prototype.onPlaceReady = /**
2053
2137
  * @return {?}
2054
2138
  */
2055
- function (name) {
2056
- /** @type {?} */
2057
- var resolvedParameter = this.resolved.find((/**
2058
- * @param {?} r
2059
- * @return {?}
2060
- */
2061
- function (r) { return r.parameterDef.name === name; }));
2062
- return resolvedParameter ? resolvedParameter.value : null;
2139
+ function () {
2063
2140
  };
2141
+ __decorate([
2142
+ fastMemoizeDecorator.Memoize(),
2143
+ __metadata("design:type", PlaceDefinition),
2144
+ __metadata("design:paramtypes", [])
2145
+ ], PlaceComponent.prototype, "placeDefinition", null);
2146
+ return PlaceComponent;
2147
+ }(DisposableComponent));
2148
+ if (false) {
2064
2149
  /**
2150
+ * @type {?}
2065
2151
  * @private
2066
- * @return {?}
2067
- */
2068
- ParameterSnapshot.prototype.getResolvedRouteId = /**
2069
- * @private
2070
- * @return {?}
2071
2152
  */
2072
- function () {
2073
- // RouteId's are never arrays: see parameter-decorators.ts createDefinition methods. It would be nice to
2074
- // capture this in the type system though
2075
- return (/** @type {?} */ (this.resolved.find((/**
2076
- * @param {?} p
2077
- * @return {?}
2078
- */
2079
- function (p) { return p.parameterDef.isRouteId; }))));
2080
- };
2153
+ exports.PlaceComponent.prototype.resolvedParameters;
2154
+ }
2155
+ (function (PlaceComponent) {
2081
2156
  /**
2157
+ * @param {?} target
2082
2158
  * @return {?}
2083
2159
  */
2084
- ParameterSnapshot.prototype.hasRouteId = /**
2160
+ function isPlaceComponentConstructor(target) {
2161
+ return pectin.lang.constructorChain((/** @type {?} */ (target))).includes(PlaceComponent);
2162
+ }
2163
+ PlaceComponent.isPlaceComponentConstructor = isPlaceComponentConstructor;
2164
+ /**
2165
+ * @param {?} klass
2085
2166
  * @return {?}
2086
2167
  */
2087
- function () {
2088
- return !!this.getResolvedRouteId();
2089
- };
2168
+ function getRouteParameters(klass) {
2169
+ return typescriptUtilities.Klass.get(klass).getMetadataList(ROUTE_PARAMETER_LIST_KEY);
2170
+ }
2171
+ PlaceComponent.getRouteParameters = getRouteParameters;
2090
2172
  /**
2173
+ * @param {?} klass
2091
2174
  * @return {?}
2092
2175
  */
2093
- ParameterSnapshot.prototype.getFormattedRouteId = /**
2176
+ function getDefinition(klass) {
2177
+ return Reflect.getMetadata(DEFINITION_META_DATA_KEY, klass);
2178
+ }
2179
+ PlaceComponent.getDefinition = getDefinition;
2180
+ /**
2181
+ * @param {?} klass
2182
+ * @param {?} definition
2094
2183
  * @return {?}
2095
2184
  */
2096
- function () {
2097
- /** @type {?} */
2098
- var routeIdParam = this.getResolvedRouteId();
2099
- return routeIdParam ? routeIdParam.formattedValue() : null;
2100
- };
2185
+ function injectDefinition(klass, definition) {
2186
+ Reflect.defineMetadata(DEFINITION_META_DATA_KEY, definition, klass);
2187
+ }
2188
+ PlaceComponent.injectDefinition = injectDefinition;
2189
+ })(exports.PlaceComponent || (exports.PlaceComponent = {}));
2190
+
2191
+ /**
2192
+ * @fileoverview added by tsickle
2193
+ * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
2194
+ */
2195
+ var AbstractPlaceNavigationComponent = /** @class */ (function (_super) {
2196
+ __extends(AbstractPlaceNavigationComponent, _super);
2197
+ function AbstractPlaceNavigationComponent() {
2198
+ var _this = _super.call(this) || this;
2199
+ 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;
2200
+ _this.placeDefinitions = chain(_this.placesModel).map((/**
2201
+ * @param {?} c
2202
+ * @return {?}
2203
+ */
2204
+ function (c) { return exports.PlaceComponent.getDefinition(c); }));
2205
+ return _this;
2206
+ }
2101
2207
  /**
2208
+ * @param {?} placeDef
2102
2209
  * @return {?}
2103
2210
  */
2104
- ParameterSnapshot.prototype.getFormattedParameters = /**
2211
+ AbstractPlaceNavigationComponent.prototype.getNav = /**
2212
+ * @param {?} placeDef
2105
2213
  * @return {?}
2106
2214
  */
2107
- function () {
2108
- /** @type {?} */
2109
- var params = {};
2215
+ function (placeDef) {
2110
2216
  /** @type {?} */
2111
- var routeIdParam = this.resolved.filter((/**
2112
- * @param {?} p
2113
- * @return {?}
2114
- */
2115
- function (p) { return !p.parameterDef.isRouteId; })).forEach((/**
2116
- * @param {?} p
2117
- * @return {?}
2118
- */
2119
- function (p) {
2120
- params[p.parameterDef.name] = p.formattedValue();
2121
- }));
2122
- return params;
2217
+ var navItem = (/** @type {?} */ (placeDef.getData('nav')));
2218
+ return {
2219
+ title: (/**
2220
+ * @return {?}
2221
+ */
2222
+ function () { return navItem ? navItem.title() : placeDef.searchData(['navTitle', 'title']); }),
2223
+ tooltip: (/**
2224
+ * @return {?}
2225
+ */
2226
+ function () { return navItem && navItem.tooltip ? navItem.tooltip() : placeDef.getData('navTooltip', null); }),
2227
+ icon: (/**
2228
+ * @return {?}
2229
+ */
2230
+ function () { return navItem && navItem.icon ? navItem.icon() : placeDef.getData('navIcon', null); })
2231
+ };
2123
2232
  };
2124
2233
  /**
2125
- * @template T, S
2126
- * @param {?} parameter
2127
- * @param {?} value
2128
2234
  * @return {?}
2129
2235
  */
2130
- ParameterSnapshot.prototype.replace = /**
2131
- * @template T, S
2132
- * @param {?} parameter
2133
- * @param {?} value
2236
+ AbstractPlaceNavigationComponent.prototype.ngOnInit = /**
2134
2237
  * @return {?}
2135
2238
  */
2136
- function (parameter, value) {
2137
- return new ParameterSnapshot(this.placeDefinition, this.resolved.map((/**
2138
- * @param {?} p
2139
- * @return {?}
2140
- */
2141
- function (p) {
2142
- return p.parameterDef === parameter ? p.replace(value) : p;
2143
- })));
2239
+ function () {
2144
2240
  };
2145
- /**
2146
- * @param {?} url
2147
- * @return {?}
2148
- */
2149
- ParameterSnapshot.prototype.updateUrl = /**
2150
- * @param {?} url
2151
- * @return {?}
2152
- */
2153
- function (url) {
2154
- return url;
2241
+ AbstractPlaceNavigationComponent.propDecorators = {
2242
+ places: [{ type: core.Input }],
2243
+ placesModel: [{ type: core.Input }]
2155
2244
  };
2156
- var _a;
2157
2245
  __decorate([
2158
- src.Memoize(),
2159
- __metadata("design:type", Function),
2160
- __metadata("design:paramtypes", [Object]),
2161
- __metadata("design:returntype", ParameterSnapshot.ResolvedParameter)
2162
- ], ParameterSnapshot.prototype, "getResolvedParameter", null);
2246
+ pectin.StoreInListModel('placesModel'),
2247
+ __metadata("design:type", Array)
2248
+ ], AbstractPlaceNavigationComponent.prototype, "places", void 0);
2163
2249
  __decorate([
2164
- src.Memoize(),
2165
- __metadata("design:type", Function),
2166
- __metadata("design:paramtypes", [Object]),
2167
- __metadata("design:returntype", typeof (_a = typeof S !== "undefined" && S) === "function" ? _a : Object)
2168
- ], ParameterSnapshot.prototype, "getResolvedParameterValue", null);
2250
+ pectin.UseDelegate(),
2251
+ __metadata("design:type", pectin.ListModel)
2252
+ ], AbstractPlaceNavigationComponent.prototype, "placesModel", void 0);
2169
2253
  __decorate([
2170
2254
  src.Memoize(),
2171
2255
  __metadata("design:type", Function),
2172
- __metadata("design:paramtypes", [String]),
2256
+ __metadata("design:paramtypes", [PlaceDefinition]),
2173
2257
  __metadata("design:returntype", Object)
2174
- ], ParameterSnapshot.prototype, "getRouteParameter", null);
2175
- __decorate([
2176
- src.Memoize(),
2177
- __metadata("design:type", Function),
2178
- __metadata("design:paramtypes", []),
2179
- __metadata("design:returntype", ParameterSnapshot.ResolvedValueParameter)
2180
- ], ParameterSnapshot.prototype, "getResolvedRouteId", null);
2181
- return ParameterSnapshot;
2182
- }());
2258
+ ], AbstractPlaceNavigationComponent.prototype, "getNav", null);
2259
+ return AbstractPlaceNavigationComponent;
2260
+ }(DisposableComponent));
2183
2261
  if (false) {
2184
2262
  /** @type {?} */
2185
- exports.ParameterSnapshot.prototype.placeDefinition;
2263
+ AbstractPlaceNavigationComponent.prototype.places;
2264
+ /** @type {?} */
2265
+ AbstractPlaceNavigationComponent.prototype.placesModel;
2266
+ /** @type {?} */
2267
+ AbstractPlaceNavigationComponent.prototype.placeDefinitions;
2268
+ }
2269
+
2270
+ /**
2271
+ * @fileoverview added by tsickle
2272
+ * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
2273
+ */
2274
+ var ListPlaceNavComponent = /** @class */ (function (_super) {
2275
+ __extends(ListPlaceNavComponent, _super);
2276
+ function ListPlaceNavComponent() {
2277
+ var _this = _super.call(this) || this;
2278
+ _this.expanded = true;
2279
+ return _this;
2280
+ }
2186
2281
  /**
2187
- * @type {?}
2188
- * @private
2282
+ * @return {?}
2189
2283
  */
2190
- exports.ParameterSnapshot.prototype.resolved;
2284
+ ListPlaceNavComponent.prototype.expandMenu = /**
2285
+ * @return {?}
2286
+ */
2287
+ function () {
2288
+ this.expanded = true;
2289
+ };
2290
+ /**
2291
+ * @return {?}
2292
+ */
2293
+ ListPlaceNavComponent.prototype.collapseMenu = /**
2294
+ * @return {?}
2295
+ */
2296
+ function () {
2297
+ this.expanded = false;
2298
+ };
2299
+ /**
2300
+ * @return {?}
2301
+ */
2302
+ ListPlaceNavComponent.prototype.toggleMenu = /**
2303
+ * @return {?}
2304
+ */
2305
+ function () {
2306
+ this.expanded = !this.expanded;
2307
+ };
2308
+ ListPlaceNavComponent.decorators = [
2309
+ { type: core.Component, args: [{
2310
+ selector: 'angular-ui-powerups-list-place-nav',
2311
+ template: "<mat-nav-list class=\"app-menu\">\n <a mat-list-item *ngFor=\"let place of placeDefinitions.value\"\n [routerLink]='place.path'\n routerLinkActive #rla=\"routerLinkActive\"\n [matTooltip]=\"getNav(place).tooltip()\">\n <mat-icon *ngIf=\"getNav(place).icon()\">{{getNav(place).icon()}}</mat-icon>\n <span class=\"expanded-only\">{{getNav(place).title()}}</span>\n </a>\n</mat-nav-list>\n",
2312
+ styles: [":host{display:flex;flex-direction:column;--expanded-width:235px;--nav-item-width:var(--nav-bar-height);width:var(--nav-item-width);transition:width 125ms linear}:host.expanded{width:var(--expanded-width);max-width:var(--expanded-width)}.expanded-only{max-width:0;overflow:hidden}.collapsed-only{max-width:100%;overflow:hidden}.header{display:flex;flex-direction:row;justify-content:flex-end;align-items:center;height:var(--nav-bar-height);border-bottom:var(--pinstripe-border);cursor:pointer}.header .menu{flex:1}.header button{color:inherit;width:var(--nav-item-width);height:var(--nav-bar-height)}mat-nav-list{flex:1;display:flex;flex-direction:column}.mat-list-item{width:var(--nav-item-width);height:var(--nav-bar-height);color:inherit}mat-icon{color:inherit}mat-icon.flip-horizontal{transform:scaleX(-1)}:host-context(.expanded) .expanded-only{max-width:100%}:host-context(.expanded) .collapsed-only{max-width:0}:host-context(.expanded) .mat-list-item mat-icon{margin-right:12px}:host-context(.expanded) .mat-list-item span{text-wrap:none;white-space:nowrap}a[ng-reflect-router-link=manage-instruments] mat-icon{transform:rotate(90deg)}.app-menu{padding-top:0}"]
2313
+ }] }
2314
+ ];
2315
+ /** @nocollapse */
2316
+ ListPlaceNavComponent.ctorParameters = function () { return []; };
2317
+ ListPlaceNavComponent.propDecorators = {
2318
+ expanded: [{ type: core.HostBinding, args: ['class.expanded',] }]
2319
+ };
2320
+ return ListPlaceNavComponent;
2321
+ }(AbstractPlaceNavigationComponent));
2322
+ if (false) {
2323
+ /** @type {?} */
2324
+ ListPlaceNavComponent.prototype.expanded;
2191
2325
  }
2192
- (function (ParameterSnapshot) {
2326
+
2327
+ /**
2328
+ * @fileoverview added by tsickle
2329
+ * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
2330
+ */
2331
+ var PlaceHistory = /** @class */ (function () {
2332
+ function PlaceHistory(router) {
2333
+ this.router = router;
2334
+ this._history = [];
2335
+ }
2193
2336
  /**
2194
- * @param {?} placeDef
2195
- * @param {?} paramMap
2337
+ * @param {?} state
2196
2338
  * @return {?}
2197
2339
  */
2198
- function create(placeDef, paramMap) {
2340
+ PlaceHistory.prototype.add = /**
2341
+ * @param {?} state
2342
+ * @return {?}
2343
+ */
2344
+ function (state) {
2199
2345
  /** @type {?} */
2200
- var resolvedParameters = placeDef.getRouteParameters()
2201
- .map((/**
2202
- * @param {?} def
2203
- * @return {?}
2204
- */
2205
- function (def) {
2206
- if (def.isArray) {
2207
- /** @type {?} */
2208
- var value = paramMap.has(def.name) ? paramMap.getAll(def.name).map((/**
2209
- * @param {?} raw
2210
- * @return {?}
2211
- */
2212
- function (raw) { return def.type.parse(raw); })) : null;
2213
- return new ResolvedArrayParameter(def, value);
2214
- }
2215
- else {
2216
- /** @type {?} */
2217
- var value = paramMap.has(def.name) ? def.type.parse(paramMap.get(def.name)) : null;
2218
- return new ResolvedValueParameter(def, value);
2219
- }
2220
- }));
2221
- return new ParameterSnapshot(placeDef, resolvedParameters);
2346
+ var previousState = ___default__default.last(this._history);
2347
+ if (!previousState || state.hasChanged(previousState)) {
2348
+ this._history.push(state);
2349
+ // limit our history to 100 visits
2350
+ this._history = this._history.slice(-100);
2351
+ }
2352
+ };
2353
+ PlaceHistory.decorators = [
2354
+ { type: core.Injectable, args: [{
2355
+ providedIn: 'root'
2356
+ },] }
2357
+ ];
2358
+ /** @nocollapse */
2359
+ PlaceHistory.ctorParameters = function () { return [
2360
+ { type: router.Router }
2361
+ ]; };
2362
+ /** @nocollapse */ PlaceHistory.ngInjectableDef = core.ɵɵdefineInjectable({ factory: function PlaceHistory_Factory() { return new PlaceHistory(core.ɵɵinject(router.Router)); }, token: PlaceHistory, providedIn: "root" });
2363
+ return PlaceHistory;
2364
+ }());
2365
+ if (false) {
2366
+ /**
2367
+ * @type {?}
2368
+ * @private
2369
+ */
2370
+ PlaceHistory.prototype._history;
2371
+ /**
2372
+ * @type {?}
2373
+ * @private
2374
+ */
2375
+ PlaceHistory.prototype.router;
2376
+ }
2377
+
2378
+ /**
2379
+ * @fileoverview added by tsickle
2380
+ * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
2381
+ */
2382
+ var PlaceRouter = /** @class */ (function () {
2383
+ function PlaceRouter(router) {
2384
+ this.router = router;
2222
2385
  }
2223
- ParameterSnapshot.create = create;
2224
2386
  /**
2225
- * @abstract
2226
- * @template T, S
2387
+ * @param {?} activatedRoute
2388
+ * @param {?} previous
2389
+ * @param {?} next
2390
+ * @return {?}
2227
2391
  */
2228
- var /**
2229
- * @abstract
2230
- * @template T, S
2392
+ PlaceRouter.prototype.pushParameterChangesToRoute = /**
2393
+ * @param {?} activatedRoute
2394
+ * @param {?} previous
2395
+ * @param {?} next
2396
+ * @return {?}
2231
2397
  */
2232
- ResolvedParameter = /** @class */ (function () {
2233
- function ResolvedParameter(parameterDef, value) {
2234
- this.parameterDef = parameterDef;
2235
- this.value = value;
2236
- }
2237
- /**
2238
- * @return {?}
2239
- */
2240
- ResolvedParameter.prototype.isRouteId = /**
2398
+ function (activatedRoute, previous, next) {
2399
+ this.router.navigate(this.redirect(activatedRoute.snapshot, previous, next), {
2400
+ relativeTo: activatedRoute
2401
+ });
2402
+ };
2403
+ /**
2404
+ * @param {?} activatedRoute
2405
+ * @param {?} sanitised
2406
+ * @param {?} snapshot
2407
+ * @return {?}
2408
+ */
2409
+ PlaceRouter.prototype.createUrlTree = /**
2410
+ * @param {?} activatedRoute
2411
+ * @param {?} sanitised
2412
+ * @param {?} snapshot
2413
+ * @return {?}
2414
+ */
2415
+ function (activatedRoute, sanitised, snapshot) {
2416
+ return this.router.createUrlTree(this.redirect(activatedRoute, snapshot, sanitised));
2417
+ };
2418
+ /**
2419
+ * @protected
2420
+ * @param {?} activatedRoute
2421
+ * @param {?} previous
2422
+ * @param {?} next
2423
+ * @return {?}
2424
+ */
2425
+ PlaceRouter.prototype.redirect = /**
2426
+ * @protected
2427
+ * @param {?} activatedRoute
2428
+ * @param {?} previous
2429
+ * @param {?} next
2430
+ * @return {?}
2431
+ */
2432
+ function (activatedRoute, previous, next) {
2433
+ /** @type {?} */
2434
+ var childSegments = ___default__default.flatten(activatedRoute.children.map((/**
2435
+ * @param {?} child
2241
2436
  * @return {?}
2242
2437
  */
2243
- function () {
2244
- return this.parameterDef.isRouteId;
2245
- };
2246
- return ResolvedParameter;
2247
- }());
2248
- ParameterSnapshot.ResolvedParameter = ResolvedParameter;
2249
- if (false) {
2438
+ function (child) { return child.url; })));
2250
2439
  /** @type {?} */
2251
- ResolvedParameter.prototype.parameterDef;
2440
+ var relativePath = !!previous.hasRouteId() ? '..' : '.';
2252
2441
  /** @type {?} */
2253
- ResolvedParameter.prototype.value;
2254
- /**
2255
- * @abstract
2256
- * @param {?} dest
2257
- * @return {?}
2258
- */
2259
- ResolvedParameter.prototype.injectRouteParam = function (dest) { };
2260
- /**
2261
- * @abstract
2262
- * @param {?} otherValue
2263
- * @return {?}
2264
- */
2265
- ResolvedParameter.prototype.isSame = function (otherValue) { };
2266
- /**
2267
- * @abstract
2268
- * @return {?}
2269
- */
2270
- ResolvedParameter.prototype.formattedValue = function () { };
2271
- /**
2272
- * @abstract
2273
- * @param {?} value
2442
+ var routeId = next.getFormattedRouteId();
2443
+ /** @type {?} */
2444
+ var path = routeId ?
2445
+ [relativePath, routeId, next.getFormattedParameters()] :
2446
+ [relativePath, next.getFormattedParameters()];
2447
+ return path.concat(childSegments.map((/**
2448
+ * @param {?} s
2274
2449
  * @return {?}
2275
2450
  */
2276
- ResolvedParameter.prototype.replace = function (value) { };
2277
- }
2451
+ function (s) { return s.path; })));
2452
+ };
2453
+ PlaceRouter.decorators = [
2454
+ { type: core.Injectable, args: [{
2455
+ providedIn: 'root'
2456
+ },] }
2457
+ ];
2458
+ /** @nocollapse */
2459
+ PlaceRouter.ctorParameters = function () { return [
2460
+ { type: router.Router }
2461
+ ]; };
2462
+ /** @nocollapse */ PlaceRouter.ngInjectableDef = core.ɵɵdefineInjectable({ factory: function PlaceRouter_Factory() { return new PlaceRouter(core.ɵɵinject(router.Router)); }, token: PlaceRouter, providedIn: "root" });
2463
+ return PlaceRouter;
2464
+ }());
2465
+ if (false) {
2278
2466
  /**
2279
- * @template T
2467
+ * @type {?}
2468
+ * @private
2280
2469
  */
2281
- var ResolvedValueParameter = /** @class */ (function (_super) {
2282
- __extends(ResolvedValueParameter, _super);
2283
- function ResolvedValueParameter() {
2284
- return _super !== null && _super.apply(this, arguments) || this;
2285
- }
2286
- /**
2287
- * @param {?} otherValue
2288
- * @return {?}
2289
- */
2290
- ResolvedValueParameter.prototype.isSame = /**
2291
- * @param {?} otherValue
2292
- * @return {?}
2293
- */
2294
- function (otherValue) {
2295
- return this.value === otherValue;
2296
- };
2297
- /**
2298
- * @param {?} dest
2299
- * @return {?}
2300
- */
2301
- ResolvedValueParameter.prototype.injectRouteParam = /**
2302
- * @param {?} dest
2303
- * @return {?}
2304
- */
2305
- function (dest) {
2306
- dest[this.parameterDef.name] = this.parameterDef.type.format(this.value);
2307
- };
2308
- /**
2309
- * @param {?} value
2310
- * @return {?}
2311
- */
2312
- ResolvedValueParameter.prototype.replace = /**
2313
- * @param {?} value
2314
- * @return {?}
2315
- */
2316
- function (value) {
2317
- return new ResolvedValueParameter(this.parameterDef, value);
2318
- };
2319
- /**
2320
- * @return {?}
2321
- */
2322
- ResolvedValueParameter.prototype.formattedValue = /**
2323
- * @return {?}
2324
- */
2325
- function () {
2326
- return !lodash.isNil(this.value) ? this.parameterDef.type.format(this.value) : null;
2327
- };
2328
- __decorate([
2329
- pectin.Trace(),
2330
- __metadata("design:type", Function),
2331
- __metadata("design:paramtypes", [Object]),
2332
- __metadata("design:returntype", Boolean)
2333
- ], ResolvedValueParameter.prototype, "isSame", null);
2334
- return ResolvedValueParameter;
2335
- }(ResolvedParameter));
2336
- ParameterSnapshot.ResolvedValueParameter = ResolvedValueParameter;
2337
- /**
2338
- * @template T
2339
- */
2340
- var ResolvedArrayParameter = /** @class */ (function (_super) {
2341
- __extends(ResolvedArrayParameter, _super);
2342
- function ResolvedArrayParameter() {
2343
- return _super !== null && _super.apply(this, arguments) || this;
2344
- }
2345
- /**
2346
- * @param {?} otherValue
2347
- * @return {?}
2348
- */
2349
- ResolvedArrayParameter.prototype.isSame = /**
2350
- * @param {?} otherValue
2351
- * @return {?}
2352
- */
2353
- function (otherValue) {
2354
- return lodash.isEqual(this.value, otherValue);
2355
- };
2356
- /**
2357
- * @param {?} dest
2358
- * @return {?}
2359
- */
2360
- ResolvedArrayParameter.prototype.injectRouteParam = /**
2361
- * @param {?} dest
2362
- * @return {?}
2363
- */
2364
- function (dest) {
2365
- var _this = this;
2366
- dest[this.parameterDef.name] = this.value.map((/**
2367
- * @param {?} v
2368
- * @return {?}
2369
- */
2370
- function (v) { return _this.parameterDef.type.format(v); }));
2371
- };
2372
- /**
2373
- * @param {?} value
2374
- * @return {?}
2375
- */
2376
- ResolvedArrayParameter.prototype.replace = /**
2377
- * @param {?} value
2378
- * @return {?}
2379
- */
2380
- function (value) {
2381
- return new ResolvedArrayParameter(this.parameterDef, value);
2382
- };
2383
- /**
2384
- * @return {?}
2385
- */
2386
- ResolvedArrayParameter.prototype.formattedValue = /**
2387
- * @return {?}
2388
- */
2389
- function () {
2390
- var _this = this;
2391
- return this.value ? this.value.map((/**
2392
- * @param {?} v
2393
- * @return {?}
2394
- */
2395
- function (v) { return _this.parameterDef.type.format(v); })) : [];
2396
- };
2397
- __decorate([
2398
- pectin.Trace(),
2399
- __metadata("design:type", Function),
2400
- __metadata("design:paramtypes", [Array]),
2401
- __metadata("design:returntype", Boolean)
2402
- ], ResolvedArrayParameter.prototype, "isSame", null);
2403
- return ResolvedArrayParameter;
2404
- }(ResolvedParameter));
2405
- ParameterSnapshot.ResolvedArrayParameter = ResolvedArrayParameter;
2406
- })(exports.ParameterSnapshot || (exports.ParameterSnapshot = {}));
2470
+ PlaceRouter.prototype.router;
2471
+ }
2407
2472
 
2408
2473
  /**
2409
2474
  * @fileoverview added by tsickle
2410
2475
  * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
2411
2476
  */
2412
- // RAKE: making this Symbol(...) broke things.
2413
- /** @type {?} */
2414
- var DEFINITION_META_DATA_KEY = 'PLACE_DEFINITION_OPTIONS';
2415
- // this one seems ok.
2416
- /** @type {?} */
2417
- var ROUTE_PARAMETER_LIST_KEY = Symbol('place:route:parameters');
2418
- exports.PlaceComponent = /** @class */ (function (_super) {
2419
- __extends(PlaceComponent, _super);
2420
- function PlaceComponent(activatedRoute, placeService) {
2421
- var _this = _super.call(this) || this;
2422
- _this.activatedRoute = activatedRoute;
2423
- _this._incomingRouteChange = new pectin.MutableValueModel(false);
2424
- _this.resolvedParameters = new pectin.MutableValueModel();
2425
- 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;
2426
- _this.placeDefinition.getRouteParameters().forEach((/**
2427
- * @param {?} p
2428
- * @return {?}
2429
- */
2430
- function (p) { return _this.installBinding(p); }));
2431
- observe.valuesFrom(activatedRoute.paramMap)
2432
- .last()
2433
- .map((/**
2434
- * @param {?} params
2435
- * @return {?}
2436
- */
2437
- function (params) { return exports.ParameterSnapshot.create(_this.placeDefinition, params); }))
2438
- .subscribe((/**
2439
- * @param {?} resolvedParameters
2440
- * @return {?}
2441
- */
2442
- function (resolvedParameters) {
2443
- _this._incomingRouteChange.value = true;
2444
- _this.resolvedParameters.value = resolvedParameters;
2445
- _this._incomingRouteChange.value = false;
2446
- }));
2447
- when.valueOf(_this.resolvedParameters).changes((/**
2448
- * @param {?} params
2449
- * @param {?} previous
2450
- * @return {?}
2451
- */
2452
- function (params, previous) {
2453
- placeService.notifyRouteParametersChanged({
2454
- activatedRoute: _this.activatedRoute,
2455
- next: params,
2456
- previous: previous,
2457
- updateRoute: !_this.incomingRouteChange.value // we update the route if it's a component triggered change.
2458
- });
2459
- }));
2460
- return _this;
2461
- }
2462
- Object.defineProperty(PlaceComponent.prototype, "incomingRouteChange", {
2463
- get: /**
2464
- * @return {?}
2465
- */
2466
- function () {
2467
- return this._incomingRouteChange.readonly;
2468
- },
2469
- enumerable: true,
2470
- configurable: true
2471
- });
2472
- /**
2473
- * @private
2474
- * @template T, S
2475
- * @param {?} parameterDef
2476
- * @return {?}
2477
- */
2478
- PlaceComponent.prototype.installBinding = /**
2479
- * @private
2480
- * @template T, S
2481
- * @param {?} parameterDef
2482
- * @return {?}
2483
- */
2484
- function (parameterDef) {
2477
+ /**
2478
+ * @abstract
2479
+ * @template T, S
2480
+ */
2481
+ /**
2482
+ * @abstract
2483
+ * @template T, S
2484
+ */
2485
+ exports.ParameterDefinition = /** @class */ (function () {
2486
+ function ParameterDefinition(propertyName, type, options) {
2487
+ this.propertyName = propertyName;
2488
+ this.type = type;
2485
2489
  /** @type {?} */
2486
- var model = (/** @type {?} */ (this[parameterDef.propertyName]));
2487
- // this.txo.observe(parameterDef.propertyName, model);
2488
- this.registerDisposable(new pectin.Binding(this.resolvedParameters, model, {
2489
- toRight: /**
2490
- * @param {?} parameters
2491
- * @return {?}
2492
- */
2493
- function (parameters) {
2494
- return parameters.getResolvedParameterValue(parameterDef);
2495
- },
2496
- toLeft: /**
2497
- * @param {?} value
2498
- * @param {?=} currentParameters
2499
- * @return {?}
2500
- */
2501
- function (value, currentParameters) {
2502
- return currentParameters.replace(parameterDef, value);
2503
- }
2504
- }));
2505
- };
2506
- Object.defineProperty(PlaceComponent.prototype, "placeDefinition", {
2507
- get: /**
2508
- * @return {?}
2509
- */
2510
- function () {
2511
- return PlaceComponent.getDefinition((/** @type {?} */ ((/** @type {?} */ (this.constructor)))));
2512
- },
2513
- enumerable: true,
2514
- configurable: true
2515
- });
2516
- /**
2517
- * @return {?}
2518
- */
2519
- PlaceComponent.prototype.canDeactivate = /**
2520
- * @return {?}
2521
- */
2522
- function () {
2523
- return true;
2524
- };
2525
- // @Trace()
2526
- // @Trace()
2490
+ var opts = typescriptUtilities.Opts.get(options);
2491
+ this.name = opts.getOptional('as', propertyName);
2492
+ // this.sanitiser = new DefaultParameterSanitiser(
2493
+ // this,
2494
+ // opts.getOptional('remember', false),
2495
+ // opts.getOptional('defaultValue', null)
2496
+ // );
2497
+ }
2527
2498
  /**
2499
+ * @param {?} injector
2528
2500
  * @return {?}
2529
2501
  */
2530
- PlaceComponent.prototype.onPlaceReady =
2531
- // @Trace()
2532
- /**
2502
+ ParameterDefinition.prototype.getSanitiser = /**
2503
+ * @param {?} injector
2533
2504
  * @return {?}
2534
2505
  */
2535
- function () {
2506
+ function (injector) {
2507
+ return this.sanitiser;
2536
2508
  };
2537
- __decorate([
2538
- fastMemoizeDecorator.Memoize(),
2539
- __metadata("design:type", PlaceComponent.Definition),
2540
- __metadata("design:paramtypes", [])
2541
- ], PlaceComponent.prototype, "placeDefinition", null);
2542
- return PlaceComponent;
2543
- }(DisposableComponent));
2509
+ return ParameterDefinition;
2510
+ }());
2544
2511
  if (false) {
2545
- /** @type {?} */
2546
- exports.PlaceComponent.prototype._incomingRouteChange;
2547
- /**
2548
- * @type {?}
2549
- * @private
2550
- */
2551
- exports.PlaceComponent.prototype.resolvedParameters;
2552
- /** @type {?} */
2553
- exports.PlaceComponent.prototype.activatedRoute;
2554
- }
2555
- (function (PlaceComponent) {
2556
- var Definition = /** @class */ (function () {
2557
- function Definition(component, options) {
2558
- this.component = component;
2559
- pectin.assert.notNil(options);
2560
- this.path = options.path;
2561
- this.order = options.order;
2562
- this.data = options.data;
2563
- this.authenticate = lodash.isNil(options.authenticate) || options.authenticate;
2564
- this.children = (options.children || []).map((/**
2565
- * @param {?} c
2566
- * @return {?}
2567
- */
2568
- function (c) { return PlaceComponent.getDefinition(c).component; }));
2569
- }
2570
- /**
2571
- * @return {?}
2572
- */
2573
- Definition.prototype.getRouteParameters = /**
2574
- * @return {?}
2575
- */
2576
- function () {
2577
- return typescriptUtilities.Klass.get(this.component).getMetadataList(ROUTE_PARAMETER_LIST_KEY);
2578
- };
2579
- /**
2580
- * @param {?} constructable
2581
- * @return {?}
2582
- */
2583
- Definition.prototype.isDescriptorForType = /**
2584
- * @param {?} constructable
2585
- * @return {?}
2586
- */
2587
- function (constructable) {
2588
- return pectin.lang.constructorChain(constructable).includes(PlaceComponent);
2589
- };
2590
- /**
2591
- * @param {?} placeComponent
2592
- * @return {?}
2593
- */
2594
- Definition.prototype.isDescriptorFor = /**
2595
- * @param {?} placeComponent
2596
- * @return {?}
2597
- */
2598
- function (placeComponent) {
2599
- return placeComponent.constructor === this.component;
2600
- };
2601
- /**
2602
- * @template T
2603
- * @param {?} key
2604
- * @param {?=} defaultValue
2605
- * @return {?}
2606
- */
2607
- Definition.prototype.getData = /**
2608
- * @template T
2609
- * @param {?} key
2610
- * @param {?=} defaultValue
2611
- * @return {?}
2612
- */
2613
- function (key, defaultValue) {
2614
- return this.data ?
2615
- lodash.isNil(this.data[key]) ? defaultValue : this.data[key] :
2616
- defaultValue;
2617
- };
2618
- /**
2619
- * @template T
2620
- * @param {?} keys
2621
- * @param {?=} defaultValue
2622
- * @return {?}
2623
- */
2624
- Definition.prototype.searchData = /**
2625
- * @template T
2626
- * @param {?} keys
2627
- * @param {?=} defaultValue
2628
- * @return {?}
2629
- */
2630
- function (keys, defaultValue) {
2631
- var _this = this;
2632
- if (this.data) {
2633
- /** @type {?} */
2634
- var found = keys.find((/**
2635
- * @param {?} key
2636
- * @return {?}
2637
- */
2638
- function (key) { return !lodash.isNil(_this.data[key]); }));
2639
- return found ? this.data[found] : defaultValue;
2640
- }
2641
- else {
2642
- return defaultValue;
2643
- }
2644
- };
2645
- __decorate([
2646
- fastMemoizeDecorator.Memoize(),
2647
- __metadata("design:type", Function),
2648
- __metadata("design:paramtypes", []),
2649
- __metadata("design:returntype", Array)
2650
- ], Definition.prototype, "getRouteParameters", null);
2651
- return Definition;
2652
- }());
2653
- PlaceComponent.Definition = Definition;
2654
- if (false) {
2655
- /** @type {?} */
2656
- Definition.prototype.path;
2657
- /** @type {?} */
2658
- Definition.prototype.authenticate;
2659
- /** @type {?} */
2660
- Definition.prototype.order;
2661
- /** @type {?} */
2662
- Definition.prototype.data;
2663
- /** @type {?} */
2664
- Definition.prototype.children;
2665
- /** @type {?} */
2666
- Definition.prototype.component;
2667
- }
2512
+ /** @type {?} */
2513
+ exports.ParameterDefinition.prototype.isRouteId;
2514
+ /** @type {?} */
2515
+ exports.ParameterDefinition.prototype.isArray;
2516
+ /** @type {?} */
2517
+ exports.ParameterDefinition.prototype.name;
2518
+ /** @type {?} */
2519
+ exports.ParameterDefinition.prototype.sanitiser;
2520
+ /** @type {?} */
2521
+ exports.ParameterDefinition.prototype.propertyName;
2522
+ /** @type {?} */
2523
+ exports.ParameterDefinition.prototype.type;
2524
+ }
2525
+ (function (ParameterDefinition) {
2668
2526
  /**
2669
2527
  * @record
2528
+ * @template T
2670
2529
  */
2671
2530
  function Options() { }
2672
- PlaceComponent.Options = Options;
2531
+ ParameterDefinition.Options = Options;
2673
2532
  if (false) {
2674
- /** @type {?} */
2675
- Options.prototype.path;
2676
- /** @type {?} */
2677
- Options.prototype.order;
2678
2533
  /** @type {?|undefined} */
2679
- Options.prototype.data;
2534
+ Options.prototype.as;
2680
2535
  /** @type {?|undefined} */
2681
- Options.prototype.authenticate;
2536
+ Options.prototype.optional;
2682
2537
  /** @type {?|undefined} */
2683
- Options.prototype.children;
2538
+ Options.prototype.remember;
2539
+ /** @type {?|undefined} */
2540
+ Options.prototype.defaultValue;
2684
2541
  }
2685
2542
  /**
2686
- * @record
2543
+ * @template T
2687
2544
  */
2688
- function ChildOptions() { }
2689
- PlaceComponent.ChildOptions = ChildOptions;
2545
+ var /**
2546
+ * @template T
2547
+ */
2548
+ RouteId = /** @class */ (function (_super) {
2549
+ __extends(RouteId, _super);
2550
+ function RouteId() {
2551
+ var _this = _super !== null && _super.apply(this, arguments) || this;
2552
+ _this.isRouteId = true;
2553
+ _this.isArray = false;
2554
+ return _this;
2555
+ }
2556
+ return RouteId;
2557
+ }(ParameterDefinition));
2558
+ ParameterDefinition.RouteId = RouteId;
2690
2559
  if (false) {
2691
2560
  /** @type {?} */
2692
- ChildOptions.prototype.parent;
2561
+ RouteId.prototype.isRouteId;
2562
+ /** @type {?} */
2563
+ RouteId.prototype.isArray;
2693
2564
  }
2694
2565
  /**
2695
- * @param {?} klass
2696
- * @return {?}
2566
+ * @template T
2697
2567
  */
2698
- function getDefinition(klass) {
2699
- return Reflect.getMetadata(DEFINITION_META_DATA_KEY, klass);
2568
+ var /**
2569
+ * @template T
2570
+ */
2571
+ ValueParameter = /** @class */ (function (_super) {
2572
+ __extends(ValueParameter, _super);
2573
+ function ValueParameter() {
2574
+ var _this = _super !== null && _super.apply(this, arguments) || this;
2575
+ _this.isRouteId = false;
2576
+ _this.isArray = false;
2577
+ return _this;
2578
+ }
2579
+ return ValueParameter;
2580
+ }(ParameterDefinition));
2581
+ ParameterDefinition.ValueParameter = ValueParameter;
2582
+ if (false) {
2583
+ /** @type {?} */
2584
+ ValueParameter.prototype.isRouteId;
2585
+ /** @type {?} */
2586
+ ValueParameter.prototype.isArray;
2700
2587
  }
2701
- PlaceComponent.getDefinition = getDefinition;
2702
2588
  /**
2703
- * @param {?} klass
2704
- * @param {?} options
2705
- * @return {?}
2589
+ * @template T
2590
+ */
2591
+ var /**
2592
+ * @template T
2706
2593
  */
2707
- function injectDefinition(klass, options) {
2708
- Reflect.defineMetadata(DEFINITION_META_DATA_KEY, new Definition(klass, options), klass);
2594
+ ArrayParameter = /** @class */ (function (_super) {
2595
+ __extends(ArrayParameter, _super);
2596
+ function ArrayParameter() {
2597
+ var _this = _super !== null && _super.apply(this, arguments) || this;
2598
+ _this.isRouteId = false;
2599
+ _this.isArray = true;
2600
+ return _this;
2601
+ }
2602
+ return ArrayParameter;
2603
+ }(ParameterDefinition));
2604
+ ParameterDefinition.ArrayParameter = ArrayParameter;
2605
+ if (false) {
2606
+ /** @type {?} */
2607
+ ArrayParameter.prototype.isRouteId;
2608
+ /** @type {?} */
2609
+ ArrayParameter.prototype.isArray;
2709
2610
  }
2710
- PlaceComponent.injectDefinition = injectDefinition;
2711
- })(exports.PlaceComponent || (exports.PlaceComponent = {}));
2611
+ })(exports.ParameterDefinition || (exports.ParameterDefinition = {}));
2712
2612
 
2713
2613
  /**
2714
2614
  * @fileoverview added by tsickle
2715
2615
  * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
2716
2616
  */
2717
- var AbstractPlaceNavigationComponent = /** @class */ (function (_super) {
2718
- __extends(AbstractPlaceNavigationComponent, _super);
2719
- function AbstractPlaceNavigationComponent() {
2720
- var _this = _super.call(this) || this;
2721
- 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;
2722
- _this.placeDefinitions = chain(_this.placesModel).map((/**
2723
- * @param {?} c
2724
- * @return {?}
2725
- */
2726
- function (c) { return exports.PlaceComponent.getDefinition(c); }));
2727
- return _this;
2617
+ exports.ParameterSnapshot = /** @class */ (function () {
2618
+ function ParameterSnapshot(placeDefinition, resolved) {
2619
+ this.placeDefinition = placeDefinition;
2620
+ this.resolved = resolved;
2728
2621
  }
2729
2622
  /**
2730
- * @param {?} placeDef
2623
+ * @param {?} other
2731
2624
  * @return {?}
2732
2625
  */
2733
- AbstractPlaceNavigationComponent.prototype.getNav = /**
2734
- * @param {?} placeDef
2626
+ ParameterSnapshot.prototype.hasChanged = /**
2627
+ * @param {?} other
2735
2628
  * @return {?}
2736
2629
  */
2737
- function (placeDef) {
2630
+ function (other) {
2738
2631
  /** @type {?} */
2739
- var navItem = (/** @type {?} */ (placeDef.getData('nav')));
2740
- return {
2741
- title: (/**
2742
- * @return {?}
2743
- */
2744
- function () { return navItem ? navItem.title() : placeDef.searchData(['navTitle', 'title']); }),
2745
- tooltip: (/**
2746
- * @return {?}
2747
- */
2748
- function () { return navItem && navItem.tooltip ? navItem.tooltip() : placeDef.getData('navTooltip', null); }),
2749
- icon: (/**
2750
- * @return {?}
2751
- */
2752
- function () { return navItem && navItem.icon ? navItem.icon() : placeDef.getData('navIcon', null); })
2753
- };
2632
+ var changed = this.resolved.find((/**
2633
+ * @param {?} r
2634
+ * @return {?}
2635
+ */
2636
+ function (r) {
2637
+ return !r.isSame(other.getResolvedParameterValue(r.parameterDef));
2638
+ }));
2639
+ // if (changed) {
2640
+ // console.log({ mine: changed, theirs: other.getResolvedParameter(changed.parameterDef) });
2641
+ // }
2642
+ return !!changed;
2754
2643
  };
2755
2644
  /**
2645
+ * @template T, S
2646
+ * @param {?} parameterDef
2756
2647
  * @return {?}
2757
2648
  */
2758
- AbstractPlaceNavigationComponent.prototype.ngOnInit = /**
2649
+ ParameterSnapshot.prototype.getResolvedParameter = /**
2650
+ * @template T, S
2651
+ * @param {?} parameterDef
2759
2652
  * @return {?}
2760
2653
  */
2761
- function () {
2654
+ function (parameterDef) {
2655
+ return this.resolved.find((/**
2656
+ * @param {?} r
2657
+ * @return {?}
2658
+ */
2659
+ function (r) { return r.parameterDef === parameterDef; }));
2762
2660
  };
2763
- AbstractPlaceNavigationComponent.propDecorators = {
2764
- places: [{ type: core.Input }],
2765
- placesModel: [{ type: core.Input }]
2661
+ /**
2662
+ * @template T, S
2663
+ * @param {?} parameterDef
2664
+ * @return {?}
2665
+ */
2666
+ ParameterSnapshot.prototype.getResolvedParameterValue = /**
2667
+ * @template T, S
2668
+ * @param {?} parameterDef
2669
+ * @return {?}
2670
+ */
2671
+ function (parameterDef) {
2672
+ /** @type {?} */
2673
+ var resolvedParameter = this.getResolvedParameter(parameterDef);
2674
+ return resolvedParameter ? resolvedParameter.value : null;
2766
2675
  };
2767
- __decorate([
2768
- pectin.StoreInListModel('placesModel'),
2769
- __metadata("design:type", Array)
2770
- ], AbstractPlaceNavigationComponent.prototype, "places", void 0);
2771
- __decorate([
2772
- pectin.UseDelegate(),
2773
- __metadata("design:type", pectin.ListModel)
2774
- ], AbstractPlaceNavigationComponent.prototype, "placesModel", void 0);
2775
- __decorate([
2776
- src.Memoize(),
2777
- __metadata("design:type", Function),
2778
- __metadata("design:paramtypes", [exports.PlaceComponent.Definition]),
2779
- __metadata("design:returntype", Object)
2780
- ], AbstractPlaceNavigationComponent.prototype, "getNav", null);
2781
- return AbstractPlaceNavigationComponent;
2782
- }(DisposableComponent));
2783
- if (false) {
2784
- /** @type {?} */
2785
- AbstractPlaceNavigationComponent.prototype.places;
2786
- /** @type {?} */
2787
- AbstractPlaceNavigationComponent.prototype.placesModel;
2788
- /** @type {?} */
2789
- AbstractPlaceNavigationComponent.prototype.placeDefinitions;
2790
- }
2791
-
2792
- /**
2793
- * @fileoverview added by tsickle
2794
- * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
2795
- */
2796
- var ListPlaceNavComponent = /** @class */ (function (_super) {
2797
- __extends(ListPlaceNavComponent, _super);
2798
- function ListPlaceNavComponent() {
2799
- var _this = _super.call(this) || this;
2800
- _this.expanded = true;
2801
- return _this;
2802
- }
2803
2676
  /**
2804
2677
  * @return {?}
2805
2678
  */
2806
- ListPlaceNavComponent.prototype.expandMenu = /**
2679
+ ParameterSnapshot.prototype.getRouteId = /**
2807
2680
  * @return {?}
2808
2681
  */
2809
2682
  function () {
2810
- this.expanded = true;
2683
+ return this.getResolvedRouteId() ? this.getResolvedRouteId().value : null;
2811
2684
  };
2812
2685
  /**
2686
+ * @param {?} name
2813
2687
  * @return {?}
2814
2688
  */
2815
- ListPlaceNavComponent.prototype.collapseMenu = /**
2689
+ ParameterSnapshot.prototype.getRouteParameter = /**
2690
+ * @param {?} name
2816
2691
  * @return {?}
2817
2692
  */
2818
- function () {
2819
- this.expanded = false;
2693
+ function (name) {
2694
+ /** @type {?} */
2695
+ var resolvedParameter = this.resolved.find((/**
2696
+ * @param {?} r
2697
+ * @return {?}
2698
+ */
2699
+ function (r) { return r.parameterDef.name === name; }));
2700
+ return resolvedParameter ? resolvedParameter.value : null;
2820
2701
  };
2821
2702
  /**
2703
+ * @private
2822
2704
  * @return {?}
2823
2705
  */
2824
- ListPlaceNavComponent.prototype.toggleMenu = /**
2706
+ ParameterSnapshot.prototype.getResolvedRouteId = /**
2707
+ * @private
2825
2708
  * @return {?}
2826
2709
  */
2827
2710
  function () {
2828
- this.expanded = !this.expanded;
2829
- };
2830
- ListPlaceNavComponent.decorators = [
2831
- { type: core.Component, args: [{
2832
- selector: 'angular-ui-powerups-list-place-nav',
2833
- template: "<mat-nav-list class=\"app-menu\">\n <a mat-list-item *ngFor=\"let place of placeDefinitions.value\"\n [routerLink]='place.path'\n routerLinkActive #rla=\"routerLinkActive\"\n [matTooltip]=\"getNav(place).tooltip()\">\n <mat-icon *ngIf=\"getNav(place).icon()\">{{getNav(place).icon()}}</mat-icon>\n <span class=\"expanded-only\">{{getNav(place).title()}}</span>\n </a>\n</mat-nav-list>\n",
2834
- styles: [":host{display:flex;flex-direction:column;--expanded-width:235px;--nav-item-width:var(--nav-bar-height);width:var(--nav-item-width);transition:width 125ms linear}:host.expanded{width:var(--expanded-width);max-width:var(--expanded-width)}.expanded-only{max-width:0;overflow:hidden}.collapsed-only{max-width:100%;overflow:hidden}.header{display:flex;flex-direction:row;justify-content:flex-end;align-items:center;height:var(--nav-bar-height);border-bottom:var(--pinstripe-border);cursor:pointer}.header .menu{flex:1}.header button{color:inherit;width:var(--nav-item-width);height:var(--nav-bar-height)}mat-nav-list{flex:1;display:flex;flex-direction:column}.mat-list-item{width:var(--nav-item-width);height:var(--nav-bar-height);color:inherit}mat-icon{color:inherit}mat-icon.flip-horizontal{transform:scaleX(-1)}:host-context(.expanded) .expanded-only{max-width:100%}:host-context(.expanded) .collapsed-only{max-width:0}:host-context(.expanded) .mat-list-item mat-icon{margin-right:12px}:host-context(.expanded) .mat-list-item span{text-wrap:none;white-space:nowrap}a[ng-reflect-router-link=manage-instruments] mat-icon{transform:rotate(90deg)}.app-menu{padding-top:0}"]
2835
- }] }
2836
- ];
2837
- /** @nocollapse */
2838
- ListPlaceNavComponent.ctorParameters = function () { return []; };
2839
- ListPlaceNavComponent.propDecorators = {
2840
- expanded: [{ type: core.HostBinding, args: ['class.expanded',] }]
2841
- };
2842
- return ListPlaceNavComponent;
2843
- }(AbstractPlaceNavigationComponent));
2844
- if (false) {
2845
- /** @type {?} */
2846
- ListPlaceNavComponent.prototype.expanded;
2847
- }
2848
-
2849
- /**
2850
- * @fileoverview added by tsickle
2851
- * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
2852
- */
2853
- var PlaceService = /** @class */ (function (_super) {
2854
- __extends(PlaceService, _super);
2855
- function PlaceService(router, injector) {
2856
- var _this = _super.call(this) || this;
2857
- _this.router = router;
2858
- _this.injector = injector;
2859
- _this._activePlaces = new pectin.MutableListModel();
2860
- return _this;
2861
- }
2862
- Object.defineProperty(PlaceService.prototype, "activePlaces", {
2863
- get: /**
2711
+ // RouteId's are never arrays: see parameter-decorators.ts createDefinition methods. It would be nice to
2712
+ // capture this in the type system though
2713
+ return (/** @type {?} */ (this.resolved.find((/**
2714
+ * @param {?} p
2864
2715
  * @return {?}
2865
2716
  */
2866
- function () {
2867
- return this._activePlaces.readonly;
2868
- },
2869
- enumerable: true,
2870
- configurable: true
2871
- });
2872
- // @Trace()
2873
- // @Trace()
2717
+ function (p) { return p.parameterDef.isRouteId; }))));
2718
+ };
2874
2719
  /**
2875
- * @param {?} place
2876
2720
  * @return {?}
2877
2721
  */
2878
- PlaceService.prototype.onActivate =
2879
- // @Trace()
2880
- /**
2881
- * @param {?} place
2722
+ ParameterSnapshot.prototype.hasRouteId = /**
2882
2723
  * @return {?}
2883
2724
  */
2884
- function (place) {
2885
- this._activePlaces.push(place);
2725
+ function () {
2726
+ return !!this.getResolvedRouteId();
2886
2727
  };
2887
- // @Trace()
2888
- // @Trace()
2889
2728
  /**
2890
- * @param {?} place
2891
2729
  * @return {?}
2892
2730
  */
2893
- PlaceService.prototype.onDeactivate =
2894
- // @Trace()
2731
+ ParameterSnapshot.prototype.getFormattedRouteId = /**
2732
+ * @return {?}
2733
+ */
2734
+ function () {
2735
+ /** @type {?} */
2736
+ var routeIdParam = this.getResolvedRouteId();
2737
+ return routeIdParam ? routeIdParam.formattedValue() : null;
2738
+ };
2895
2739
  /**
2896
- * @param {?} place
2897
2740
  * @return {?}
2898
2741
  */
2899
- function (place) {
2900
- this._activePlaces.remove(place);
2742
+ ParameterSnapshot.prototype.getFormattedParameters = /**
2743
+ * @return {?}
2744
+ */
2745
+ function () {
2746
+ /** @type {?} */
2747
+ var params = {};
2748
+ /** @type {?} */
2749
+ var routeIdParam = this.resolved.filter((/**
2750
+ * @param {?} p
2751
+ * @return {?}
2752
+ */
2753
+ function (p) { return !p.parameterDef.isRouteId; })).forEach((/**
2754
+ * @param {?} p
2755
+ * @return {?}
2756
+ */
2757
+ function (p) {
2758
+ params[p.parameterDef.name] = p.formattedValue();
2759
+ }));
2760
+ return params;
2901
2761
  };
2902
- // @Trace()
2903
- // @Trace()
2904
2762
  /**
2905
- * @param {?} params
2763
+ * @template T, S
2764
+ * @param {?} parameter
2765
+ * @param {?} value
2906
2766
  * @return {?}
2907
2767
  */
2908
- PlaceService.prototype.notifyRouteParametersChanged =
2909
- // @Trace()
2910
- /**
2911
- * @param {?} params
2768
+ ParameterSnapshot.prototype.replace = /**
2769
+ * @template T, S
2770
+ * @param {?} parameter
2771
+ * @param {?} value
2912
2772
  * @return {?}
2913
2773
  */
2914
- function (params) {
2915
- // We update the router state...
2916
- if (params.updateRoute) {
2917
- /** @type {?} */
2918
- var routeId = params.next.getFormattedRouteId();
2919
- /** @type {?} */
2920
- var relativePath = !!params.previous.hasRouteId() ? '..' : '.';
2921
- /** @type {?} */
2922
- var path = routeId ? [relativePath, routeId, params.next.getFormattedParameters()] : [relativePath, params.next.getFormattedParameters()];
2923
- this.router.navigate(path, {
2924
- relativeTo: params.activatedRoute
2925
- });
2926
- }
2774
+ function (parameter, value) {
2775
+ return new ParameterSnapshot(this.placeDefinition, this.resolved.map((/**
2776
+ * @param {?} p
2777
+ * @return {?}
2778
+ */
2779
+ function (p) {
2780
+ return p.parameterDef === parameter ? p.replace(value) : p;
2781
+ })));
2927
2782
  };
2928
- // @Trace()
2929
- // @Trace()
2930
2783
  /**
2931
- * @param {?} snapshot
2784
+ * @param {?} injector
2932
2785
  * @return {?}
2933
2786
  */
2934
- PlaceService.prototype.sanitise =
2935
- // @Trace()
2936
- /**
2937
- * @param {?} snapshot
2787
+ ParameterSnapshot.prototype.sanitise = /**
2788
+ * @param {?} injector
2938
2789
  * @return {?}
2939
2790
  */
2940
- function (snapshot) {
2791
+ function (injector) {
2941
2792
  return __awaiter(this, void 0, void 0, function () {
2942
2793
  return __generator(this, function (_a) {
2943
- return [2 /*return*/, snapshot];
2794
+ return [2 /*return*/, this];
2944
2795
  });
2945
2796
  });
2946
2797
  };
2947
- PlaceService.decorators = [
2948
- { type: core.Injectable, args: [{
2949
- providedIn: 'root'
2950
- },] }
2951
- ];
2952
- /** @nocollapse */
2953
- PlaceService.ctorParameters = function () { return [
2954
- { type: router.Router },
2955
- { type: core.Injector }
2956
- ]; };
2957
- /** @nocollapse */ PlaceService.ngInjectableDef = core.ɵɵdefineInjectable({ factory: function PlaceService_Factory() { return new PlaceService(core.ɵɵinject(router.Router), core.ɵɵinject(core.INJECTOR)); }, token: PlaceService, providedIn: "root" });
2958
- return PlaceService;
2959
- }(pectin.GarbageCollector));
2798
+ var _a;
2799
+ __decorate([
2800
+ src.Memoize(),
2801
+ __metadata("design:type", Function),
2802
+ __metadata("design:paramtypes", [exports.ParameterDefinition]),
2803
+ __metadata("design:returntype", ParameterSnapshot.ResolvedParameter)
2804
+ ], ParameterSnapshot.prototype, "getResolvedParameter", null);
2805
+ __decorate([
2806
+ src.Memoize(),
2807
+ __metadata("design:type", Function),
2808
+ __metadata("design:paramtypes", [exports.ParameterDefinition]),
2809
+ __metadata("design:returntype", typeof (_a = typeof S !== "undefined" && S) === "function" ? _a : Object)
2810
+ ], ParameterSnapshot.prototype, "getResolvedParameterValue", null);
2811
+ __decorate([
2812
+ src.Memoize(),
2813
+ __metadata("design:type", Function),
2814
+ __metadata("design:paramtypes", [String]),
2815
+ __metadata("design:returntype", Object)
2816
+ ], ParameterSnapshot.prototype, "getRouteParameter", null);
2817
+ __decorate([
2818
+ src.Memoize(),
2819
+ __metadata("design:type", Function),
2820
+ __metadata("design:paramtypes", []),
2821
+ __metadata("design:returntype", ParameterSnapshot.ResolvedValueParameter)
2822
+ ], ParameterSnapshot.prototype, "getResolvedRouteId", null);
2823
+ return ParameterSnapshot;
2824
+ }());
2960
2825
  if (false) {
2826
+ /** @type {?} */
2827
+ exports.ParameterSnapshot.prototype.placeDefinition;
2961
2828
  /**
2962
2829
  * @type {?}
2963
2830
  * @private
2964
2831
  */
2965
- PlaceService.prototype._activePlaces;
2832
+ exports.ParameterSnapshot.prototype.resolved;
2833
+ }
2834
+ (function (ParameterSnapshot) {
2966
2835
  /**
2967
- * @type {?}
2968
- * @protected
2836
+ * @param {?} placeDef
2837
+ * @param {?} paramMap
2838
+ * @return {?}
2969
2839
  */
2970
- PlaceService.prototype.router;
2840
+ function create(placeDef, paramMap) {
2841
+ /** @type {?} */
2842
+ var resolvedParameters = placeDef.getRouteParameters()
2843
+ .map((/**
2844
+ * @param {?} def
2845
+ * @return {?}
2846
+ */
2847
+ function (def) {
2848
+ if (def.isArray) {
2849
+ /** @type {?} */
2850
+ var value = paramMap.has(def.name) ? paramMap.getAll(def.name).map((/**
2851
+ * @param {?} raw
2852
+ * @return {?}
2853
+ */
2854
+ function (raw) { return def.type.parse(raw); })) : null;
2855
+ return new ResolvedArrayParameter(def, value);
2856
+ }
2857
+ else {
2858
+ /** @type {?} */
2859
+ var value = paramMap.has(def.name) ? def.type.parse(paramMap.get(def.name)) : null;
2860
+ return new ResolvedValueParameter(def, value);
2861
+ }
2862
+ }));
2863
+ return new ParameterSnapshot(placeDef, resolvedParameters);
2864
+ }
2865
+ ParameterSnapshot.create = create;
2971
2866
  /**
2972
- * @type {?}
2973
- * @protected
2867
+ * @abstract
2868
+ * @template T, S
2974
2869
  */
2975
- PlaceService.prototype.injector;
2976
- }
2870
+ var /**
2871
+ * @abstract
2872
+ * @template T, S
2873
+ */
2874
+ ResolvedParameter = /** @class */ (function () {
2875
+ function ResolvedParameter(parameterDef, value) {
2876
+ this.parameterDef = parameterDef;
2877
+ this.value = value;
2878
+ }
2879
+ /**
2880
+ * @return {?}
2881
+ */
2882
+ ResolvedParameter.prototype.isRouteId = /**
2883
+ * @return {?}
2884
+ */
2885
+ function () {
2886
+ return this.parameterDef.isRouteId;
2887
+ };
2888
+ return ResolvedParameter;
2889
+ }());
2890
+ ParameterSnapshot.ResolvedParameter = ResolvedParameter;
2891
+ if (false) {
2892
+ /** @type {?} */
2893
+ ResolvedParameter.prototype.parameterDef;
2894
+ /** @type {?} */
2895
+ ResolvedParameter.prototype.value;
2896
+ /**
2897
+ * @abstract
2898
+ * @param {?} dest
2899
+ * @return {?}
2900
+ */
2901
+ ResolvedParameter.prototype.injectRouteParam = function (dest) { };
2902
+ /**
2903
+ * @abstract
2904
+ * @param {?} otherValue
2905
+ * @return {?}
2906
+ */
2907
+ ResolvedParameter.prototype.isSame = function (otherValue) { };
2908
+ /**
2909
+ * @abstract
2910
+ * @return {?}
2911
+ */
2912
+ ResolvedParameter.prototype.formattedValue = function () { };
2913
+ /**
2914
+ * @abstract
2915
+ * @param {?} value
2916
+ * @return {?}
2917
+ */
2918
+ ResolvedParameter.prototype.replace = function (value) { };
2919
+ }
2920
+ /**
2921
+ * @template T
2922
+ */
2923
+ var /**
2924
+ * @template T
2925
+ */
2926
+ ResolvedValueParameter = /** @class */ (function (_super) {
2927
+ __extends(ResolvedValueParameter, _super);
2928
+ function ResolvedValueParameter() {
2929
+ return _super !== null && _super.apply(this, arguments) || this;
2930
+ }
2931
+ /**
2932
+ * @param {?} otherValue
2933
+ * @return {?}
2934
+ */
2935
+ ResolvedValueParameter.prototype.isSame = /**
2936
+ * @param {?} otherValue
2937
+ * @return {?}
2938
+ */
2939
+ function (otherValue) {
2940
+ return this.value === otherValue;
2941
+ };
2942
+ /**
2943
+ * @param {?} dest
2944
+ * @return {?}
2945
+ */
2946
+ ResolvedValueParameter.prototype.injectRouteParam = /**
2947
+ * @param {?} dest
2948
+ * @return {?}
2949
+ */
2950
+ function (dest) {
2951
+ dest[this.parameterDef.name] = this.parameterDef.type.format(this.value);
2952
+ };
2953
+ /**
2954
+ * @param {?} value
2955
+ * @return {?}
2956
+ */
2957
+ ResolvedValueParameter.prototype.replace = /**
2958
+ * @param {?} value
2959
+ * @return {?}
2960
+ */
2961
+ function (value) {
2962
+ return new ResolvedValueParameter(this.parameterDef, value);
2963
+ };
2964
+ /**
2965
+ * @return {?}
2966
+ */
2967
+ ResolvedValueParameter.prototype.formattedValue = /**
2968
+ * @return {?}
2969
+ */
2970
+ function () {
2971
+ return !___default__default.isNil(this.value) ? this.parameterDef.type.format(this.value) : null;
2972
+ };
2973
+ return ResolvedValueParameter;
2974
+ }(ResolvedParameter));
2975
+ ParameterSnapshot.ResolvedValueParameter = ResolvedValueParameter;
2976
+ /**
2977
+ * @template T
2978
+ */
2979
+ var /**
2980
+ * @template T
2981
+ */
2982
+ ResolvedArrayParameter = /** @class */ (function (_super) {
2983
+ __extends(ResolvedArrayParameter, _super);
2984
+ function ResolvedArrayParameter() {
2985
+ return _super !== null && _super.apply(this, arguments) || this;
2986
+ }
2987
+ /**
2988
+ * @param {?} otherValue
2989
+ * @return {?}
2990
+ */
2991
+ ResolvedArrayParameter.prototype.isSame = /**
2992
+ * @param {?} otherValue
2993
+ * @return {?}
2994
+ */
2995
+ function (otherValue) {
2996
+ return ___default__default.isEqual(this.value, otherValue);
2997
+ };
2998
+ /**
2999
+ * @param {?} dest
3000
+ * @return {?}
3001
+ */
3002
+ ResolvedArrayParameter.prototype.injectRouteParam = /**
3003
+ * @param {?} dest
3004
+ * @return {?}
3005
+ */
3006
+ function (dest) {
3007
+ var _this = this;
3008
+ dest[this.parameterDef.name] = this.value.map((/**
3009
+ * @param {?} v
3010
+ * @return {?}
3011
+ */
3012
+ function (v) { return _this.parameterDef.type.format(v); }));
3013
+ };
3014
+ /**
3015
+ * @param {?} value
3016
+ * @return {?}
3017
+ */
3018
+ ResolvedArrayParameter.prototype.replace = /**
3019
+ * @param {?} value
3020
+ * @return {?}
3021
+ */
3022
+ function (value) {
3023
+ return new ResolvedArrayParameter(this.parameterDef, value);
3024
+ };
3025
+ /**
3026
+ * @return {?}
3027
+ */
3028
+ ResolvedArrayParameter.prototype.formattedValue = /**
3029
+ * @return {?}
3030
+ */
3031
+ function () {
3032
+ var _this = this;
3033
+ return this.value ? this.value.map((/**
3034
+ * @param {?} v
3035
+ * @return {?}
3036
+ */
3037
+ function (v) { return _this.parameterDef.type.format(v); })) : [];
3038
+ };
3039
+ return ResolvedArrayParameter;
3040
+ }(ResolvedParameter));
3041
+ ParameterSnapshot.ResolvedArrayParameter = ResolvedArrayParameter;
3042
+ })(exports.ParameterSnapshot || (exports.ParameterSnapshot = {}));
2977
3043
 
2978
3044
  /**
2979
3045
  * @fileoverview added by tsickle
@@ -3026,56 +3092,88 @@
3026
3092
  ]);
3027
3093
  }
3028
3094
  /** @type {?} */
3029
- var LEFT_RIGHT_PLACE_ANIMATION = leftRightPlaceAnimation("0.3s");
3095
+ var LEFT_RIGHT_PLACE_ANIMATION = leftRightPlaceAnimation('0.3s');
3030
3096
 
3031
3097
  /**
3032
3098
  * @fileoverview added by tsickle
3033
3099
  * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
3034
3100
  */
3101
+ /**
3102
+ * @record
3103
+ */
3104
+ function PlaceRef() { }
3105
+ if (false) {
3106
+ /** @type {?} */
3107
+ PlaceRef.prototype.placeDefinition;
3108
+ /**
3109
+ * @param {?} param
3110
+ * @return {?}
3111
+ */
3112
+ PlaceRef.prototype.initialiseBindings = function (param) { };
3113
+ /**
3114
+ * @return {?}
3115
+ */
3116
+ PlaceRef.prototype.onPlaceReady = function () { };
3117
+ }
3035
3118
  var PlaceOutletComponent = /** @class */ (function (_super) {
3036
3119
  __extends(PlaceOutletComponent, _super);
3037
- function PlaceOutletComponent(placeService, activatedRoute) {
3120
+ function PlaceOutletComponent(router, placeHistory) {
3038
3121
  var _this = _super.call(this) || this;
3039
- _this.placeService = placeService;
3040
- _this.activatedRoute = activatedRoute;
3122
+ _this.router = router;
3123
+ _this.placeHistory = placeHistory;
3041
3124
  _this.animate = true;
3042
- _this.outletUrlSegment = new pectin.MutableListModel();
3125
+ _this._incomingRouteChange = new pectin.Guard();
3126
+ _this._inOutletUpdate = new pectin.Guard();
3127
+ _this._activatedRouteModel = new pectin.MutableValueModel();
3128
+ _this._placeDefinition = new pectin.MutableValueModel();
3129
+ _this._resolvedParameters = new pectin.MutableValueModel();
3043
3130
  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;
3044
- _this.myPath = observe.listsFrom(activatedRoute.url).last().map((/**
3045
- * @param {?} s
3046
- * @return {?}
3047
- */
3048
- function (s) { return s.toString(); })).reduce((/**
3049
- * @param {?} bits
3050
- * @return {?}
3051
- */
3052
- function (bits) { return bits.join(','); }));
3053
- console.log("new outlet@(" + _this.myPath.value + ")");
3054
- _this.outletChildPath = chain(_this.outletUrlSegment).map((/**
3055
- * @param {?} s
3131
+ _this._paramMap = chain(_this._activatedRouteModel).pullObservableValue((/**
3132
+ * @param {?} ar
3056
3133
  * @return {?}
3057
3134
  */
3058
- function (s) { return s.toString(); })).reduce((/**
3059
- * @param {?} bits
3060
- * @return {?}
3061
- */
3062
- function (bits) { return bits.join(","); }));
3063
- _this.state = chain(_this.myPath).map((/**
3064
- * @param {?} path
3135
+ function (ar) { return ar.paramMap; }));
3136
+ _this.placeConfigured = valueOf.all(chain(_this._inOutletUpdate).isFalsey(), _this._placeDefinition, _this._paramMap).areTruthy();
3137
+ when.valueOf(_this._paramMap).changes((/**
3138
+ * @param {?} params
3065
3139
  * @return {?}
3066
3140
  */
3067
- function (path) {
3068
- return "outlet@(" + path + "), child path->" + _this.outletChildPath.value;
3069
- }), { dependsOn: _this.outletChildPath });
3070
- when.valueOf(_this.state).changes((/**
3071
- * @param {?} debug
3141
+ function (params) {
3142
+ /** @type {?} */
3143
+ var snapshot = exports.ParameterSnapshot.create(_this._placeDefinition.value, params);
3144
+ _this._incomingRouteChange.whileTrue((/**
3145
+ * @return {?}
3146
+ */
3147
+ function () {
3148
+ _this._resolvedParameters.value = snapshot;
3149
+ _this.placeHistory.add(snapshot);
3150
+ }));
3151
+ }), {
3152
+ postponeUntil: _this.placeConfigured
3153
+ });
3154
+ when.valueOf(_this._resolvedParameters).changes((/**
3155
+ * @param {?} next
3156
+ * @param {?} previous
3072
3157
  * @return {?}
3073
3158
  */
3074
- function (debug) {
3075
- console.log("Outlet Changed -> " + debug);
3076
- }));
3159
+ function (next, previous) {
3160
+ _this.pushChangesToRoute(next, previous);
3161
+ _this.placeHistory.add(next); // the above route change doesn't seem to propagate back in, so I'm add the state to the history manually for now.
3162
+ }), {
3163
+ unless: _this.incomingRouteChange
3164
+ });
3077
3165
  return _this;
3078
3166
  }
3167
+ Object.defineProperty(PlaceOutletComponent.prototype, "incomingRouteChange", {
3168
+ get: /**
3169
+ * @return {?}
3170
+ */
3171
+ function () {
3172
+ return this._incomingRouteChange;
3173
+ },
3174
+ enumerable: true,
3175
+ configurable: true
3176
+ });
3079
3177
  /**
3080
3178
  * @return {?}
3081
3179
  */
@@ -3085,76 +3183,56 @@
3085
3183
  function () {
3086
3184
  };
3087
3185
  /**
3186
+ * @param {?} routerOutlet
3187
+ * @param {?} place
3088
3188
  * @return {?}
3089
3189
  */
3090
- PlaceOutletComponent.prototype.ngAfterViewInit = /**
3091
- * @return {?}
3092
- */
3093
- function () {
3094
- // this.routerOutLetQuery.changes.subscribe(() => {
3095
- // this.updateRouterOutlet(this.routerOutLetQuery.first);
3096
- // });
3097
- };
3098
- /**
3099
- * @return {?}
3100
- */
3101
- PlaceOutletComponent.prototype.ngAfterViewChecked = /**
3102
- * @return {?}
3103
- */
3104
- function () {
3105
- // console.log(`@AfterViewChecked: ${this.state.value}`);
3106
- this.updateRouterOutlet(this.routerOutLetQuery.first);
3107
- };
3108
- // @Trace()
3109
- // ngOnDestroy(): void {
3110
- // console.log('outletSegments', this.outletUrlSegment.value);
3111
- // console.log('mySegments', this.myPath.value);
3112
- // super.ngOnDestroy();
3113
- // }
3114
- // @Trace()
3115
- // @Trace()
3116
- // ngOnDestroy(): void {
3117
- // console.log('outletSegments', this.outletUrlSegment.value);
3118
- // console.log('mySegments', this.myPath.value);
3119
- // super.ngOnDestroy();
3120
- // }
3121
- // @Trace()
3122
- /**
3123
- * @param {?} $event
3124
- * @return {?}
3125
- */
3126
- PlaceOutletComponent.prototype.onOutletActivated =
3127
- // @Trace()
3128
- // ngOnDestroy(): void {
3129
- // console.log('outletSegments', this.outletUrlSegment.value);
3130
- // console.log('mySegments', this.myPath.value);
3131
- // super.ngOnDestroy();
3132
- // }
3133
- // @Trace()
3134
- /**
3135
- * @param {?} $event
3190
+ PlaceOutletComponent.prototype.onOutletActivated = /**
3191
+ * @param {?} routerOutlet
3192
+ * @param {?} place
3136
3193
  * @return {?}
3137
3194
  */
3138
- function ($event) {
3139
- // console.log(this.routerOutLet.activatedRoute.snapshot.url);
3140
- this.currentPlace = $event;
3141
- this.placeService.onActivate($event);
3195
+ function (routerOutlet, place) {
3196
+ var _this = this;
3197
+ this._inOutletUpdate.whileTrue((/**
3198
+ * @return {?}
3199
+ */
3200
+ function () {
3201
+ try {
3202
+ _this._currentPlace = place;
3203
+ _this._activatedRouteModel.value = routerOutlet.activatedRoute;
3204
+ _this._placeDefinition.value = place.placeDefinition;
3205
+ place.initialiseBindings(_this._resolvedParameters);
3206
+ }
3207
+ catch (error) {
3208
+ console.error(error);
3209
+ }
3210
+ }));
3142
3211
  if (!this.animate) {
3143
3212
  // we're not animating so trigger any post animation callbacks now.
3144
3213
  this.animationDone();
3145
3214
  }
3146
3215
  };
3147
3216
  /**
3217
+ * @param {?} routerOutlet
3148
3218
  * @param {?} $event
3149
3219
  * @return {?}
3150
3220
  */
3151
3221
  PlaceOutletComponent.prototype.onOutletDeactivated = /**
3222
+ * @param {?} routerOutlet
3152
3223
  * @param {?} $event
3153
3224
  * @return {?}
3154
3225
  */
3155
- function ($event) {
3156
- this.currentPlace = null;
3157
- this.placeService.onDeactivate($event);
3226
+ function (routerOutlet, $event) {
3227
+ var _this = this;
3228
+ this._inOutletUpdate.whileTrue((/**
3229
+ * @return {?}
3230
+ */
3231
+ function () {
3232
+ _this._currentPlace = null;
3233
+ _this._activatedRouteModel.value = null;
3234
+ _this._placeDefinition.value = null;
3235
+ }));
3158
3236
  };
3159
3237
  /**
3160
3238
  * @param {?} outlet
@@ -3174,45 +3252,54 @@
3174
3252
  * @return {?}
3175
3253
  */
3176
3254
  function () {
3177
- if (this.currentPlace) {
3178
- this.currentPlace.onPlaceReady();
3255
+ if (this._currentPlace) {
3256
+ this._currentPlace.onPlaceReady();
3179
3257
  }
3180
3258
  };
3181
- // @Trace()
3182
- // @Trace()
3183
3259
  /**
3184
- * @private
3185
- * @param {?} first
3260
+ * @param {?} next
3261
+ * @param {?} previous
3262
+ * @return {?}
3263
+ */
3264
+ PlaceOutletComponent.prototype.pushChangesToRoute = /**
3265
+ * @param {?} next
3266
+ * @param {?} previous
3186
3267
  * @return {?}
3187
3268
  */
3188
- PlaceOutletComponent.prototype.updateRouterOutlet =
3189
- // @Trace()
3269
+ function (next, previous) {
3270
+ /** @type {?} */
3271
+ var activatedRoute = this._activatedRouteModel.value;
3272
+ this.router.pushParameterChangesToRoute(activatedRoute, previous, next);
3273
+ };
3190
3274
  /**
3191
- * @private
3192
- * @param {?} first
3275
+ * @param {?} snapshot
3276
+ * @param {?} callback
3193
3277
  * @return {?}
3194
3278
  */
3195
- function (first) {
3196
- if (first.isActivated) {
3197
- this.outletUrlSegment.value = first.activatedRoute.snapshot.url;
3198
- }
3279
+ PlaceOutletComponent.prototype.sanitise = /**
3280
+ * @param {?} snapshot
3281
+ * @param {?} callback
3282
+ * @return {?}
3283
+ */
3284
+ function (snapshot, callback) {
3285
+ return snapshot;
3199
3286
  };
3200
3287
  PlaceOutletComponent.decorators = [
3201
3288
  { type: core.Component, args: [{
3202
3289
  selector: 'angular-ui-powerups-place-outlet',
3203
- template: "<div class=\"router-outlet-container\"\n [@routeAnimations]=\"getPlaceOrder(routerOutlet)\"\n (@routeAnimations.done)=\"animationDone()\"\n>\n <router-outlet #routerOutlet=\"outlet\"\n (activate)=\"onOutletActivated($event)\"\n (deactivate)=\"onOutletDeactivated($event)\">\n </router-outlet>\n</div>\n\n",
3290
+ template: "<div class=\"router-outlet-container\"\n [@routeAnimations]=\"getPlaceOrder(routerOutlet)\"\n (@routeAnimations.done)=\"animationDone()\"\n>\n <router-outlet #routerOutlet=\"outlet\"\n (activate)=\"onOutletActivated(routerOutlet, $event)\"\n (deactivate)=\"onOutletDeactivated(routerOutlet, $event)\">\n </router-outlet>\n</div>\n\n",
3204
3291
  animations: [LEFT_RIGHT_PLACE_ANIMATION],
3205
3292
  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}"]
3206
3293
  }] }
3207
3294
  ];
3208
3295
  /** @nocollapse */
3209
3296
  PlaceOutletComponent.ctorParameters = function () { return [
3210
- { type: PlaceService },
3211
- { type: router.ActivatedRoute }
3297
+ { type: PlaceRouter },
3298
+ { type: PlaceHistory }
3212
3299
  ]; };
3213
3300
  PlaceOutletComponent.propDecorators = {
3214
3301
  animate: [{ type: core.Input }],
3215
- routerOutLetQuery: [{ type: core.ViewChildren, args: [router.RouterOutlet,] }]
3302
+ routerOut: [{ type: core.ViewChild, args: ['routeOutlet', { static: true },] }]
3216
3303
  };
3217
3304
  return PlaceOutletComponent;
3218
3305
  }(DisposableComponent));
@@ -3220,42 +3307,54 @@
3220
3307
  /** @type {?} */
3221
3308
  PlaceOutletComponent.prototype.animate;
3222
3309
  /** @type {?} */
3223
- PlaceOutletComponent.prototype.routerOutLetQuery;
3310
+ PlaceOutletComponent.prototype.routerOut;
3311
+ /**
3312
+ * @type {?}
3313
+ * @private
3314
+ */
3315
+ PlaceOutletComponent.prototype._currentPlace;
3316
+ /**
3317
+ * @type {?}
3318
+ * @private
3319
+ */
3320
+ PlaceOutletComponent.prototype._incomingRouteChange;
3224
3321
  /**
3225
3322
  * @type {?}
3226
3323
  * @private
3227
3324
  */
3228
- PlaceOutletComponent.prototype.currentPlace;
3325
+ PlaceOutletComponent.prototype._inOutletUpdate;
3229
3326
  /**
3230
3327
  * @type {?}
3231
3328
  * @private
3232
3329
  */
3233
- PlaceOutletComponent.prototype.myPath;
3330
+ PlaceOutletComponent.prototype._activatedRouteModel;
3234
3331
  /**
3235
3332
  * @type {?}
3236
3333
  * @private
3237
3334
  */
3238
- PlaceOutletComponent.prototype.outletUrlSegment;
3335
+ PlaceOutletComponent.prototype._placeDefinition;
3239
3336
  /**
3240
3337
  * @type {?}
3241
3338
  * @private
3242
3339
  */
3243
- PlaceOutletComponent.prototype.outletChildPath;
3340
+ PlaceOutletComponent.prototype._paramMap;
3341
+ /** @type {?} */
3342
+ PlaceOutletComponent.prototype._resolvedParameters;
3244
3343
  /**
3245
3344
  * @type {?}
3246
3345
  * @private
3247
3346
  */
3248
- PlaceOutletComponent.prototype.state;
3347
+ PlaceOutletComponent.prototype.placeConfigured;
3249
3348
  /**
3250
3349
  * @type {?}
3251
3350
  * @private
3252
3351
  */
3253
- PlaceOutletComponent.prototype.placeService;
3352
+ PlaceOutletComponent.prototype.router;
3254
3353
  /**
3255
3354
  * @type {?}
3256
3355
  * @private
3257
3356
  */
3258
- PlaceOutletComponent.prototype.activatedRoute;
3357
+ PlaceOutletComponent.prototype.placeHistory;
3259
3358
  }
3260
3359
 
3261
3360
  /**
@@ -3313,9 +3412,7 @@
3313
3412
  TabbedPlaceNavigationComponent,
3314
3413
  ListPlaceNavComponent
3315
3414
  ],
3316
- providers: [
3317
- PlaceService
3318
- ]
3415
+ providers: []
3319
3416
  },] }
3320
3417
  ];
3321
3418
  return PlaceModule;
@@ -3754,39 +3851,6 @@
3754
3851
  NavItem.prototype.tooltip = function () { };
3755
3852
  }
3756
3853
 
3757
- /**
3758
- * @fileoverview added by tsickle
3759
- * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
3760
- */
3761
- /**
3762
- * @record
3763
- */
3764
- function PlaceComponentLike() { }
3765
- if (false) {
3766
- /** @type {?} */
3767
- PlaceComponentLike.prototype.activatedRoute;
3768
- /**
3769
- * @return {?}
3770
- */
3771
- PlaceComponentLike.prototype.onPlaceReady = function () { };
3772
- }
3773
-
3774
- /**
3775
- * @fileoverview added by tsickle
3776
- * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
3777
- */
3778
- /**
3779
- * @record
3780
- */
3781
- function PlaceUpdatesService() { }
3782
- if (false) {
3783
- /**
3784
- * @param {?} params
3785
- * @return {?}
3786
- */
3787
- PlaceUpdatesService.prototype.notifyRouteParametersChanged = function (params) { };
3788
- }
3789
-
3790
3854
  /**
3791
3855
  * @fileoverview added by tsickle
3792
3856
  * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
@@ -3801,12 +3865,37 @@
3801
3865
  * @return {?}
3802
3866
  */
3803
3867
  function (target) {
3804
- if (!pectin.lang.constructorChain((/** @type {?} */ (target))).includes(exports.PlaceComponent)) {
3868
+ if (exports.PlaceComponent.isPlaceComponentConstructor(target)) {
3869
+ exports.PlaceComponent.injectDefinition(target, new PlaceDefinition(target, options.path, ___default.isNil(options.authenticate) ? false : options.authenticate, options.order, options.data, exports.PlaceComponent.getRouteParameters(target), (options.children || []).map((/**
3870
+ * @param {?} c
3871
+ * @return {?}
3872
+ */
3873
+ function (c) { return exports.PlaceComponent.getDefinition(c); }))));
3874
+ }
3875
+ else {
3805
3876
  pectin.lang.illegalState(target + " must extend PlaceComponent to use the @Place decorator");
3806
3877
  }
3807
- exports.PlaceComponent.injectDefinition((/** @type {?} */ (target)), options);
3808
3878
  });
3809
3879
  }
3880
+ (function (Place) {
3881
+ /**
3882
+ * @record
3883
+ */
3884
+ function Options() { }
3885
+ Place.Options = Options;
3886
+ if (false) {
3887
+ /** @type {?} */
3888
+ Options.prototype.path;
3889
+ /** @type {?} */
3890
+ Options.prototype.order;
3891
+ /** @type {?|undefined} */
3892
+ Options.prototype.data;
3893
+ /** @type {?|undefined} */
3894
+ Options.prototype.authenticate;
3895
+ /** @type {?|undefined} */
3896
+ Options.prototype.children;
3897
+ }
3898
+ })(Place || (Place = {}));
3810
3899
 
3811
3900
  /**
3812
3901
  * @fileoverview added by tsickle
@@ -3857,14 +3946,16 @@
3857
3946
  // HACK: this will break with child routes...
3858
3947
  /** @type {?} */
3859
3948
  var path = "/" + component.placeDefinition.path;
3860
- console.log({
3861
- placePath: path,
3862
- currentRoute: currentRoute.toString(),
3863
- currentStateUrl: currentState.url,
3864
- nextStateUrl: nextState.url,
3865
- currentStateUrlTree: this.router.parseUrl(currentState.url).root.children[router.PRIMARY_OUTLET].segments,
3866
- nextStateUrlTree: this.router.parseUrl(nextState.url).root.children[router.PRIMARY_OUTLET].segments
3867
- });
3949
+ // let thisTree = this.router.parseUrl(currentState.url);
3950
+ // let nextTree = this.router.parseUrl(nextState.url);
3951
+ // console.log({
3952
+ // placePath: path,
3953
+ // currentRoute: currentRoute.toString(),
3954
+ // currentStateUrl: currentState.url,
3955
+ // nextStateUrl: nextState.url,
3956
+ // currentStateUrlTree: thisTree.root.children[PRIMARY_OUTLET].segments,
3957
+ // nextStateUrlTree: nextTree.root.children[PRIMARY_OUTLET].segments
3958
+ // });
3868
3959
  // nextState is the full path...
3869
3960
  if (!nextState.url.startsWith(path)) {
3870
3961
  return component.canDeactivate();
@@ -3904,36 +3995,43 @@
3904
3995
  * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
3905
3996
  */
3906
3997
  var PlaceRouteGuard = /** @class */ (function () {
3907
- function PlaceRouteGuard(placeService, router) {
3908
- this.placeService = placeService;
3909
- this.router = router;
3998
+ function PlaceRouteGuard(placeRouter, injector) {
3999
+ this.placeRouter = placeRouter;
4000
+ this.injector = injector;
3910
4001
  }
3911
4002
  /**
3912
- * @param {?} route
4003
+ * @param {?} activatedRoute
3913
4004
  * @param {?} state
3914
4005
  * @return {?}
3915
4006
  */
3916
4007
  PlaceRouteGuard.prototype.canActivate = /**
3917
- * @param {?} route
4008
+ * @param {?} activatedRoute
3918
4009
  * @param {?} state
3919
4010
  * @return {?}
3920
4011
  */
3921
- function (route, state) {
3922
- // Implement this when adding child routes.
3923
- // TODO: there are really two types of snapshot, ones with id's and ones without.
3924
- // Id snapshot are repesented by 2 url segments
3925
- // ID => [{'/basePath', params}, {'id', params}]
3926
- // NO ID => [{'/basePath', params}]
3927
- // console.log({urlSegments: route.url});
3928
- // const snapshot = ParameterSnapshot.create(PlaceComponent.getDefinition(route.component as Constructable<PlaceComponent>), route.paramMap);
3929
- // return this.placeService.sanitise(snapshot).then(sanitised => {
3930
- // if (sanitised.hasChanged(snapshot)) {
3931
- // return this.router.createUrlTree(snapshot.updateUrl(route.url))
3932
- // } else {
3933
- // return true;
3934
- // }
3935
- // });
3936
- return true;
4012
+ function (activatedRoute, state) {
4013
+ var _this = this;
4014
+ if (exports.PlaceComponent.isPlaceComponentConstructor(activatedRoute.component)) {
4015
+ /** @type {?} */
4016
+ var placeDefinition = exports.PlaceComponent.getDefinition(activatedRoute.component);
4017
+ /** @type {?} */
4018
+ var snapshot_1 = exports.ParameterSnapshot.create(placeDefinition, activatedRoute.paramMap);
4019
+ return snapshot_1.sanitise(this.injector).then((/**
4020
+ * @param {?} sanitised
4021
+ * @return {?}
4022
+ */
4023
+ function (sanitised) {
4024
+ if (sanitised.hasChanged(snapshot_1)) {
4025
+ return _this.placeRouter.createUrlTree(activatedRoute, snapshot_1, sanitised);
4026
+ }
4027
+ else {
4028
+ return true;
4029
+ }
4030
+ }));
4031
+ }
4032
+ else {
4033
+ return pectin.lang.illegalState("expected component to be an instance of PlaceComponent, got " + activatedRoute.component);
4034
+ }
3937
4035
  };
3938
4036
  PlaceRouteGuard.decorators = [
3939
4037
  { type: core.Injectable, args: [{
@@ -3942,10 +4040,10 @@
3942
4040
  ];
3943
4041
  /** @nocollapse */
3944
4042
  PlaceRouteGuard.ctorParameters = function () { return [
3945
- { type: PlaceService },
3946
- { type: router.Router }
4043
+ { type: PlaceRouter },
4044
+ { type: core.Injector }
3947
4045
  ]; };
3948
- /** @nocollapse */ PlaceRouteGuard.ngInjectableDef = core.ɵɵdefineInjectable({ factory: function PlaceRouteGuard_Factory() { return new PlaceRouteGuard(core.ɵɵinject(PlaceService), core.ɵɵinject(router.Router)); }, token: PlaceRouteGuard, providedIn: "root" });
4046
+ /** @nocollapse */ PlaceRouteGuard.ngInjectableDef = core.ɵɵdefineInjectable({ factory: function PlaceRouteGuard_Factory() { return new PlaceRouteGuard(core.ɵɵinject(PlaceRouter), core.ɵɵinject(core.INJECTOR)); }, token: PlaceRouteGuard, providedIn: "root" });
3949
4047
  return PlaceRouteGuard;
3950
4048
  }());
3951
4049
  if (false) {
@@ -3953,12 +4051,12 @@
3953
4051
  * @type {?}
3954
4052
  * @private
3955
4053
  */
3956
- PlaceRouteGuard.prototype.placeService;
4054
+ PlaceRouteGuard.prototype.placeRouter;
3957
4055
  /**
3958
4056
  * @type {?}
3959
4057
  * @private
3960
4058
  */
3961
- PlaceRouteGuard.prototype.router;
4059
+ PlaceRouteGuard.prototype.injector;
3962
4060
  }
3963
4061
 
3964
4062
  /**
@@ -3969,11 +4067,10 @@
3969
4067
  * @template T, S
3970
4068
  */
3971
4069
  var DefaultParameterSanitiser = /** @class */ (function () {
3972
- function DefaultParameterSanitiser(def, placeService, options) {
4070
+ function DefaultParameterSanitiser(def, remember, defaultValue) {
3973
4071
  this.def = def;
3974
- this.placeService = placeService;
3975
- this.remember = lodash.isNil(options.remember) ? false : options.remember;
3976
- this.defaultValue = lodash.isNil(options.defaultValue) ? null : options.defaultValue;
4072
+ this.remember = remember;
4073
+ this.defaultValue = defaultValue;
3977
4074
  }
3978
4075
  /**
3979
4076
  * @param {?} value
@@ -3990,7 +4087,7 @@
3990
4087
  if (this.remember) {
3991
4088
  // value = null;
3992
4089
  }
3993
- return this.isBlank(value) && !lodash.isNil(this.defaultValue) ? this.defaultValue : value;
4090
+ return this.isBlank(value) && !___default__default.isNil(this.defaultValue) ? this.defaultValue : value;
3994
4091
  }
3995
4092
  else {
3996
4093
  return value;
@@ -4008,8 +4105,8 @@
4008
4105
  */
4009
4106
  function (value) {
4010
4107
  /** @type {?} */
4011
- var isNil$1 = lodash.isNil(value);
4012
- return this.def.isArray ? !isNil$1 || value['length'] < 1 : isNil$1;
4108
+ var isNil = ___default__default.isNil(value);
4109
+ return this.def.isArray ? !isNil || value['length'] < 1 : isNil;
4013
4110
  };
4014
4111
  __decorate([
4015
4112
  pectin.Trace(),
@@ -4024,22 +4121,11 @@
4024
4121
  * @type {?}
4025
4122
  * @private
4026
4123
  */
4124
+ DefaultParameterSanitiser.prototype.def;
4125
+ /** @type {?} */
4027
4126
  DefaultParameterSanitiser.prototype.remember;
4028
- /**
4029
- * @type {?}
4030
- * @private
4031
- */
4127
+ /** @type {?} */
4032
4128
  DefaultParameterSanitiser.prototype.defaultValue;
4033
- /**
4034
- * @type {?}
4035
- * @private
4036
- */
4037
- DefaultParameterSanitiser.prototype.def;
4038
- /**
4039
- * @type {?}
4040
- * @private
4041
- */
4042
- DefaultParameterSanitiser.prototype.placeService;
4043
4129
  }
4044
4130
 
4045
4131
  /**
@@ -4073,8 +4159,6 @@
4073
4159
  ParameterOptions.prototype.remember;
4074
4160
  /** @type {?|undefined} */
4075
4161
  ParameterOptions.prototype.defaultValue;
4076
- /** @type {?|undefined} */
4077
- ParameterOptions.prototype.sanitiser;
4078
4162
  }
4079
4163
  /**
4080
4164
  * @record
@@ -4090,8 +4174,6 @@
4090
4174
  ListParameterOptions.prototype.remember;
4091
4175
  /** @type {?|undefined} */
4092
4176
  ListParameterOptions.prototype.defaultValue;
4093
- /** @type {?|undefined} */
4094
- ListParameterOptions.prototype.sanitiser;
4095
4177
  }
4096
4178
  /**
4097
4179
  * @template T
@@ -4100,7 +4182,6 @@
4100
4182
  * @return {?}
4101
4183
  */
4102
4184
  function RouteId(type, options) {
4103
- // assert.isTruthy(type.isValid());
4104
4185
  return (/**
4105
4186
  * @param {?} prototype
4106
4187
  * @param {?} propertyKey
@@ -4108,7 +4189,7 @@
4108
4189
  */
4109
4190
  function (prototype, propertyKey) {
4110
4191
  /** @type {?} */
4111
- var param = createDefinition(propertyKey, type, options, true);
4192
+ var param = new exports.ParameterDefinition.RouteId(propertyKey.toString(), type, options);
4112
4193
  typescriptUtilities.Klass.get(prototype).addToOwnMetadataList(ROUTE_PARAMETER_LIST_KEY, param);
4113
4194
  pectin.UseDelegate()(prototype, propertyKey);
4114
4195
  });
@@ -4120,7 +4201,6 @@
4120
4201
  * @return {?}
4121
4202
  */
4122
4203
  function RouteParameter(type, options) {
4123
- // assert.isTruthy(type.isValid());
4124
4204
  return (/**
4125
4205
  * @param {?} prototype
4126
4206
  * @param {?} propertyKey
@@ -4128,7 +4208,7 @@
4128
4208
  */
4129
4209
  function (prototype, propertyKey) {
4130
4210
  /** @type {?} */
4131
- var param = createDefinition(propertyKey, type, options, false);
4211
+ var param = new exports.ParameterDefinition.ValueParameter(propertyKey.toString(), type, options);
4132
4212
  typescriptUtilities.Klass.get(prototype).addToOwnMetadataList(ROUTE_PARAMETER_LIST_KEY, param);
4133
4213
  pectin.UseDelegate()(prototype, propertyKey);
4134
4214
  });
@@ -4140,7 +4220,6 @@
4140
4220
  * @return {?}
4141
4221
  */
4142
4222
  function RouteParameterList(elementType, options) {
4143
- // assert.isTruthy(type.isValid());
4144
4223
  return (/**
4145
4224
  * @param {?} prototype
4146
4225
  * @param {?} propertyKey
@@ -4148,82 +4227,11 @@
4148
4227
  */
4149
4228
  function (prototype, propertyKey) {
4150
4229
  /** @type {?} */
4151
- var param = createArrayDefinition(propertyKey, elementType, options);
4230
+ var param = new exports.ParameterDefinition.ArrayParameter(propertyKey.toString(), elementType, options);
4152
4231
  typescriptUtilities.Klass.get(prototype).addToOwnMetadataList(ROUTE_PARAMETER_LIST_KEY, param);
4153
4232
  pectin.UseDelegate()(prototype, propertyKey);
4154
4233
  });
4155
4234
  }
4156
- /**
4157
- * @template T
4158
- * @param {?} propertyName
4159
- * @param {?} type
4160
- * @param {?} options
4161
- * @param {?} routeId
4162
- * @return {?}
4163
- */
4164
- function createDefinition(propertyName, type, options, routeId) {
4165
- /** @type {?} */
4166
- var opts = typescriptUtilities.Opts.get(options);
4167
- /** @type {?} */
4168
- var propertyNameAsString = pectin.assert.notNil(propertyName).toString();
4169
- /** @type {?} */
4170
- var def = {
4171
- name: opts.getOptional('as', propertyNameAsString),
4172
- propertyName: propertyNameAsString,
4173
- type: pectin.assert.notNil(type),
4174
- sanitiser: opts.getOptional('sanitiser', null),
4175
- isRouteId: routeId,
4176
- isArray: false
4177
- };
4178
- return def;
4179
- }
4180
- /**
4181
- * @template T
4182
- * @param {?} propertyName
4183
- * @param {?} type
4184
- * @param {?} options
4185
- * @return {?}
4186
- */
4187
- function createArrayDefinition(propertyName, type, options) {
4188
- /** @type {?} */
4189
- var opts = typescriptUtilities.Opts.get(options);
4190
- /** @type {?} */
4191
- var propertyNameAsString = pectin.assert.notNil(propertyName).toString();
4192
- /** @type {?} */
4193
- var def = {
4194
- name: opts.getOptional('as', propertyNameAsString),
4195
- propertyName: propertyNameAsString,
4196
- type: pectin.assert.notNil(type),
4197
- sanitiser: opts.getOptional('sanitiser', null),
4198
- isRouteId: false,
4199
- isArray: true
4200
- };
4201
- return def;
4202
- }
4203
-
4204
- /**
4205
- * @fileoverview added by tsickle
4206
- * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
4207
- */
4208
- /**
4209
- * @record
4210
- * @template T, S
4211
- */
4212
- function ParameterDefinition() { }
4213
- if (false) {
4214
- /** @type {?} */
4215
- ParameterDefinition.prototype.name;
4216
- /** @type {?} */
4217
- ParameterDefinition.prototype.propertyName;
4218
- /** @type {?} */
4219
- ParameterDefinition.prototype.type;
4220
- /** @type {?} */
4221
- ParameterDefinition.prototype.sanitiser;
4222
- /** @type {?} */
4223
- ParameterDefinition.prototype.isRouteId;
4224
- /** @type {?} */
4225
- ParameterDefinition.prototype.isArray;
4226
- }
4227
4235
 
4228
4236
  /**
4229
4237
  * @fileoverview added by tsickle
@@ -4242,20 +4250,6 @@
4242
4250
  */
4243
4251
  ParameterSanitiser.prototype.sanitise = function (value, visit) { };
4244
4252
  }
4245
- (function (ParameterSanitiser) {
4246
- /**
4247
- * @record
4248
- * @template T
4249
- */
4250
- function Options() { }
4251
- ParameterSanitiser.Options = Options;
4252
- if (false) {
4253
- /** @type {?|undefined} */
4254
- Options.prototype.remember;
4255
- /** @type {?|undefined} */
4256
- Options.prototype.defaultValue;
4257
- }
4258
- })(ParameterSanitiser || (ParameterSanitiser = {}));
4259
4253
 
4260
4254
  /**
4261
4255
  * @fileoverview added by tsickle
@@ -4314,7 +4308,7 @@
4314
4308
  * @return {?}
4315
4309
  */
4316
4310
  function (value) {
4317
- return lodash.isNil(value) || lodash.isEmpty(value) ? null : +value;
4311
+ return ___default__default.isNil(value) || ___default__default.isEmpty(value) ? null : +value;
4318
4312
  };
4319
4313
  return NumberType;
4320
4314
  }());
@@ -4380,7 +4374,7 @@
4380
4374
  * @return {?}
4381
4375
  */
4382
4376
  function () {
4383
- return !lodash.isNil(this.initialValue) && this.hasChanged(this.initialValue, this.sanitisedValue);
4377
+ return !___default__default.isNil(this.initialValue) && this.hasChanged(this.initialValue, this.sanitisedValue);
4384
4378
  },
4385
4379
  enumerable: true,
4386
4380
  configurable: true
@@ -4482,11 +4476,10 @@
4482
4476
  exports.Sanitiser.prototype.sanitiser;
4483
4477
  }
4484
4478
  var RouteParameterSanitiser = /** @class */ (function () {
4485
- function RouteParameterSanitiser(parameterDefs, snapshot, placeService, injector) {
4479
+ function RouteParameterSanitiser(parameterDefs, snapshot, injector) {
4486
4480
  var _this = this;
4487
4481
  this.parameterDefs = parameterDefs;
4488
4482
  this.snapshot = snapshot;
4489
- this.placeService = placeService;
4490
4483
  this.injector = injector;
4491
4484
  this.parameterSanitisers = [];
4492
4485
  /** @type {?} */
@@ -4579,17 +4572,7 @@
4579
4572
  * @return {?}
4580
4573
  */
4581
4574
  function (def) {
4582
- if (def.sanitiser) {
4583
- if (this.isSanitiserContructor(def.sanitiser)) {
4584
- return this.injector.get(def.sanitiser, new def.sanitiser());
4585
- }
4586
- else {
4587
- return new DefaultParameterSanitiser(def, this.placeService, def.sanitiser);
4588
- }
4589
- }
4590
- else {
4591
- return null;
4592
- }
4575
+ return def.getSanitiser(this.injector);
4593
4576
  };
4594
4577
  /**
4595
4578
  * @return {?}
@@ -4635,12 +4618,12 @@
4635
4618
  * @return {?}
4636
4619
  */
4637
4620
  function (value) {
4638
- return lodash.isFunction(value) && pectin.lang.constructorChain((/** @type {?} */ ((/** @type {?} */ (value))))).includes(exports.Sanitiser);
4621
+ return ___default__default.isFunction(value) && pectin.lang.constructorChain((/** @type {?} */ ((/** @type {?} */ (value))))).includes(exports.Sanitiser);
4639
4622
  };
4640
4623
  __decorate([
4641
4624
  src.Memoize(),
4642
4625
  __metadata("design:type", Function),
4643
- __metadata("design:paramtypes", [Object]),
4626
+ __metadata("design:paramtypes", [exports.ParameterDefinition]),
4644
4627
  __metadata("design:returntype", Object)
4645
4628
  ], RouteParameterSanitiser.prototype, "getSanitiser", null);
4646
4629
  __decorate([
@@ -4667,8 +4650,6 @@
4667
4650
  /** @type {?} */
4668
4651
  RouteParameterSanitiser.prototype.snapshot;
4669
4652
  /** @type {?} */
4670
- RouteParameterSanitiser.prototype.placeService;
4671
- /** @type {?} */
4672
4653
  RouteParameterSanitiser.prototype.injector;
4673
4654
  }
4674
4655
  (function (Sanitiser) {
@@ -4794,8 +4775,8 @@
4794
4775
  exports.AbstractActivity = AbstractActivity;
4795
4776
  exports.AbstractInputComponent = AbstractInputComponent;
4796
4777
  exports.AbstractPlaceNavigationComponent = AbstractPlaceNavigationComponent;
4797
- exports.ActivityContainerComponent = exports.ɵt;
4798
- exports.ActivityOutletComponent = exports.ɵu;
4778
+ exports.ActivityContainerComponent = exports.ɵu;
4779
+ exports.ActivityOutletComponent = exports.ɵv;
4799
4780
  exports.AlertDialogComponent = AlertDialogComponent;
4800
4781
  exports.AngularUiPowerupsModule = AngularUiPowerupsModule;
4801
4782
  exports.BusyOverlayComponent = BusyOverlayComponent;
@@ -4817,10 +4798,12 @@
4817
4798
  exports.NumberInputComponent = NumberInputComponent;
4818
4799
  exports.PasswordInputComponent = PasswordInputComponent;
4819
4800
  exports.Place = Place;
4801
+ exports.PlaceDefinition = PlaceDefinition;
4802
+ exports.PlaceHistory = PlaceHistory;
4820
4803
  exports.PlaceModule = PlaceModule;
4821
4804
  exports.PlaceOutletComponent = PlaceOutletComponent;
4822
4805
  exports.PlaceRouteGuard = PlaceRouteGuard;
4823
- exports.PlaceService = PlaceService;
4806
+ exports.PlaceRouter = PlaceRouter;
4824
4807
  exports.Point = Point;
4825
4808
  exports.ROUTE_PARAMETER_LIST_KEY = ROUTE_PARAMETER_LIST_KEY;
4826
4809
  exports.ResizeAwareComponent = ResizeAwareComponent;
@@ -4835,8 +4818,9 @@
4835
4818
  exports.slideDownAndUpAnimation = slideDownAndUpAnimation;
4836
4819
  exports.ɵa = CommandDirective;
4837
4820
  exports.ɵb = FocusBindingDirective;
4838
- exports.ɵbb = DialogInteractionService;
4839
- exports.ɵbc = InteractionContext;
4821
+ exports.ɵba = AlertDialogComponent;
4822
+ exports.ɵbc = DialogInteractionService;
4823
+ exports.ɵbd = InteractionContext;
4840
4824
  exports.ɵc = DisposableComponent;
4841
4825
  exports.ɵd = NumberInputComponent;
4842
4826
  exports.ɵe = AbstractInputComponent;
@@ -4849,15 +4833,15 @@
4849
4833
  exports.ɵl = PlaceOutletComponent;
4850
4834
  exports.ɵm = leftRightPlaceAnimation;
4851
4835
  exports.ɵn = LEFT_RIGHT_PLACE_ANIMATION;
4852
- exports.ɵo = PlaceService;
4853
- exports.ɵp = TabbedPlaceNavigationComponent;
4854
- exports.ɵq = AbstractPlaceNavigationComponent;
4855
- exports.ɵr = ListPlaceNavComponent;
4856
- exports.ɵs = InteractionModule;
4857
- exports.ɵv = ConfirmationDialogComponent;
4858
- exports.ɵw = AbstractActivity;
4859
- exports.ɵx = ACTIVITY_DATA;
4860
- exports.ɵz = AlertDialogComponent;
4836
+ exports.ɵo = PlaceRouter;
4837
+ exports.ɵp = PlaceHistory;
4838
+ exports.ɵq = TabbedPlaceNavigationComponent;
4839
+ exports.ɵr = AbstractPlaceNavigationComponent;
4840
+ exports.ɵs = ListPlaceNavComponent;
4841
+ exports.ɵt = InteractionModule;
4842
+ exports.ɵw = ConfirmationDialogComponent;
4843
+ exports.ɵx = AbstractActivity;
4844
+ exports.ɵy = ACTIVITY_DATA;
4861
4845
 
4862
4846
  Object.defineProperty(exports, '__esModule', { value: true });
4863
4847