@coolon/angular-ui-powerups 0.0.71 → 0.0.72
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.
- package/bundles/coolon-angular-ui-powerups.umd.js +6 -4
- package/bundles/coolon-angular-ui-powerups.umd.js.map +1 -1
- package/bundles/coolon-angular-ui-powerups.umd.min.js +1 -1
- package/bundles/coolon-angular-ui-powerups.umd.min.js.map +1 -1
- package/esm2015/lib/place/components/place-outlet/place-outlet.component.js +5 -5
- package/esm2015/lib/place/place.decorator.js +3 -1
- package/esm5/lib/place/components/place-outlet/place-outlet.component.js +5 -5
- package/esm5/lib/place/place.decorator.js +3 -1
- package/fesm2015/coolon-angular-ui-powerups.js +6 -4
- package/fesm2015/coolon-angular-ui-powerups.js.map +1 -1
- package/fesm5/coolon-angular-ui-powerups.js +6 -4
- package/fesm5/coolon-angular-ui-powerups.js.map +1 -1
- package/lib/place/place.decorator.d.ts +1 -0
- package/package.json +1 -1
- package/schematics/place-routes/place-class-scanner.d.ts +1 -0
- package/schematics/place-routes/place-class-scanner.js +7 -1
- package/schematics/place-routes/place-class-scanner.js.map +1 -1
- package/schematics/place-routes/place-def.d.ts +4 -1
- package/schematics/place-routes/place-def.js +33 -19
- package/schematics/place-routes/place-def.js.map +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../node_modules/tslib/tslib.es6.js","ng://@coolon/angular-ui-powerups/lib/components/disposable-component.ts","ng://@coolon/angular-ui-powerups/lib/components/forms/abstract-input.component.ts","ng://@coolon/angular-ui-powerups/lib/components/forms/number-input/number-input.component.ts","ng://@coolon/angular-ui-powerups/lib/components/forms/password-input/password-input.component.ts","ng://@coolon/angular-ui-powerups/lib/components/forms/select-input/select-input.component.ts","ng://@coolon/angular-ui-powerups/lib/components/forms/string-input/string-input.component.ts","ng://@coolon/angular-ui-powerups/lib/components/noop/noop.component.ts","ng://@coolon/angular-ui-powerups/lib/directives/command.directive.ts","ng://@coolon/angular-ui-powerups/lib/directives/focus-binding.directive.ts","ng://@coolon/angular-ui-powerups/lib/interaction/interaction-context.ts","ng://@coolon/angular-ui-powerups/lib/interaction/activity.ts","ng://@coolon/angular-ui-powerups/lib/interaction/components/activity-outlet/activity-outlet.component.ts","ng://@coolon/angular-ui-powerups/lib/interaction/abstract-activity.ts","ng://@coolon/angular-ui-powerups/lib/interaction/components/alert-dialog/alert-dialog.component.ts","ng://@coolon/angular-ui-powerups/lib/interaction/components/confirm-then-dialog/confirm-then-dialog.component.ts","ng://@coolon/angular-ui-powerups/lib/interaction/components/confirmation-dialog/confirmation-dialog.component.ts","ng://@coolon/angular-ui-powerups/lib/interaction/components/activity-container/activity-container.component.ts","ng://@coolon/angular-ui-powerups/lib/interaction/components/interaction-outlet/interaction-outlet.component.ts","ng://@coolon/angular-ui-powerups/lib/interaction/services/dialog-interaction.service.ts","ng://@coolon/angular-ui-powerups/lib/interaction/interaction.module.ts","ng://@coolon/angular-ui-powerups/lib/place/components/busy-overlay/busy-overlay.component.ts","ng://@coolon/angular-ui-powerups/lib/place/components/empty-state/empty-state.component.ts","ng://@coolon/angular-ui-powerups/lib/place/route/parameter-definition.class.ts","ng://@coolon/angular-ui-powerups/lib/place/place-definition.ts","ng://@coolon/angular-ui-powerups/lib/place/place-component.ts","ng://@coolon/angular-ui-powerups/lib/place/components/abstract-place-navigation.component.ts","ng://@coolon/angular-ui-powerups/lib/place/navigation-session.ts","ng://@coolon/angular-ui-powerups/lib/place/components/list-place-nav/list-place-nav.component.ts","ng://@coolon/angular-ui-powerups/lib/place/place-history.ts","ng://@coolon/angular-ui-powerups/lib/place/visit.ts","ng://@coolon/angular-ui-powerups/lib/place/place-router.ts","ng://@coolon/angular-ui-powerups/lib/place/components/place-outlet/route-animations.ts","ng://@coolon/angular-ui-powerups/lib/place/components/place-outlet/place-outlet.component.ts","ng://@coolon/angular-ui-powerups/lib/place/components/tabbed-place-navigation/tabbed-place-navigation.component.ts","ng://@coolon/angular-ui-powerups/lib/place/place.module.ts","ng://@coolon/angular-ui-powerups/lib/angular-ui-powerups.module.ts","ng://@coolon/angular-ui-powerups/lib/animations/slideDownAndUpAnimation.ts","ng://@coolon/angular-ui-powerups/lib/components/types/dimension.class.ts","ng://@coolon/angular-ui-powerups/lib/components/types/point.class.ts","ng://@coolon/angular-ui-powerups/lib/components/types/bounds.class.ts","ng://@coolon/angular-ui-powerups/lib/components/resize-aware.component.ts","ng://@coolon/angular-ui-powerups/lib/interaction/result.ts","ng://@coolon/angular-ui-powerups/lib/place/route/formatter.ts","ng://@coolon/angular-ui-powerups/lib/interaction/guards/interaction-guard.service.ts","ng://@coolon/angular-ui-powerups/lib/place/place.decorator.ts","ng://@coolon/angular-ui-powerups/lib/place/route/visit-sanitiser.ts","ng://@coolon/angular-ui-powerups/lib/place/route/guards/leave-place.guard.ts","ng://@coolon/angular-ui-powerups/lib/place/route/guards/place-route.guard.ts","ng://@coolon/angular-ui-powerups/lib/place/route/parameter-decorators.ts"],"names":["extendStatics","d","b","Object","setPrototypeOf","__proto__","Array","p","hasOwnProperty","__extends","__","this","constructor","prototype","create","__assign","assign","t","s","i","n","arguments","length","call","apply","__decorate","decorators","target","key","desc","c","r","getOwnPropertyDescriptor","Reflect","decorate","defineProperty","__metadata","metadataKey","metadataValue","metadata","__awaiter","thisArg","_arguments","P","generator","Promise","resolve","reject","fulfilled","value","step","next","e","rejected","result","done","then","__generator","body","f","y","g","_","label","sent","trys","ops","verb","throw","return","Symbol","iterator","v","op","TypeError","pop","push","__read","o","m","ar","error","__spread","concat","DisposableComponent","tslib_1.__extends","ngOnDestroy","dispose","GarbageCollector","AbstractInputComponent","_super","_this","valueModel","DelegatingFormValueModel","focus","EventEmitter","blur","enterKey","escapeKey","self","errorStateMatcher","isErrorState","control","form","hasErrors","model","setDelegate","notifyClick","safelyInvoke","clickCommand","notifyFocusIn","focusCommand","emit","notifyFocusOut","blurCommand","notifyEnterKey","enterCommand","notifyEscapeKey","escapeCommand","command","enabled","execute","ngOnInit","isEnabled","errorList","query","isEmpty","Input","args","Output","HostListener","tslib_1.__decorate","UseDelegate","ValueModel","NumberInputComponent","Component","selector","template","PasswordInputComponent","SelectInputComponent","optionLabelFormat","option","optionLabel","ListModel","StoreInListModel","StringInputComponent","NoopComponent","CommandDirective","elementRef","_commandParameterProvided","_commandParameter","assert","notNil","pectinCommand","UnaryCommand","lang","illegalState","ngAfterViewInit","chain","pectin","Dsl","disposeWith","subscribe","nativeElement","removeAttribute","tagName","setAttribute","$event","preventDefault","stopPropagation","withContext","event","commandParameter","console","warn","Directive","ElementRef","type","Inject","FocusBindingDirective","el","ngZone","document","onFocusIn","hasBinding","pectinFocusBinding","focusContext","onFocusOut","focused","alreadyHasFocus","tryAndFocus","Logger","get","isFocused","focusTarget","element","activeElement","retries","modelShouldStillHaveFocus","canFocus","log","requestAnimationFrame","focusBindingTarget","dimension","getBoundingClientRect","height","NgZone","DOCUMENT","InteractionContext","_.last","activityList","ACTIVITY_DATA","InjectionToken","Activity","_busyModel","DelegatingValueModel","withDefault","initialise","activityContext","isNil","_activityContext","onDone","cancel","onCancel","onActivityReady","readonly","busyWhile","busyModel","isBusy","Callbacks","ActivityOutletComponent","componentFactoryResolver","viewContainerRef","injector","loadActivity","Injector","providers","provide","useValue","interactionContext","activityData","parent","componentFactory","resolveComponentFactory","activityClass","clear","activityComponentRef","createComponent","instance","componentReady","component","ComponentFactoryResolver","ViewContainerRef","AbstractActivity","AlertDialogComponent","alert","exports","ɵbd","ConfirmThenDialogComponent","config","confirm","isDestructive","destructive","onConfirm","startActivity","activityType","data","catch","Data","ConfirmationDialogComponent","TabContext","activityCallbacks","_complete","isComponentRealised","_component","isComplete","ActivityContainerComponent","activityFinishedEvents","MutableStream","activityTabs","MutableListModel","finished","_activityList","_a","valueOf","before","when","after","observe","switchOn","throttle","onActivityFinished","initialContext","initialActivityOutletContext","isActive","parentInteractionContext","valuesFrom","outlets","changes","setTimeout","updateActivityList","tabs","animationDone","onAnimationFinished","context","publish","selectedIndex","confirmThen","synchroniseSelectedTabIndex","cleanupStaleActivities","runInTransaction","draft","slice","previousIndex","newIndex","findIndex","getSelectedOutlet","filter","map","toArray","ViewChild","static","ViewChildren","InteractionOutletComponent","DIALOG_INTERACTION_SERVICE_DEFAULTS","Guard","initialValue","store","read","whileTrue","fun","startTransaction","commit","runIfFalse","defaultValue","DialogInteractionService","dialogService","location","router","dialogServiceDefaults","matDialogDefaultConfig","DelegatingListModel","startingGuard","currentActivityId","cancelActivity","currentActivity","_startActivity","disableClose","a","name","join","uuid.v1","autoFocus","hasBackdrop","closeOnNavigation","panelClass","matDialogRef","open","activityContainer","componentInstance","safelyUpdateActivityListDelegate","close","afterClosed","promiseAlreadyFinished","updateSize","finally","delegate","Injectable","providedIn","MatDialog","Location","Router","MatDialogConfig","Optional","MAT_DIALOG_DEFAULT_OPTIONS","InteractionModule","NgModule","imports","CommonModule","MatButtonModule","MatDialogModule","MatTabsModule","PortalModule","RouterModule","declarations","entryComponents","BusyOverlayComponent","StoreInValueModel","EmptyStateComponent","ParameterDefinition","propertyName","options","urlFormat","Opts","remember","getOptional","getOptionValue","sanitise","visit","placeHistory","isMissingFrom","previousVisit","first","getHistory","placeDefinition","getParameter","isEmptyValue","hasParameter","Options","RouteId","isRouteId","isArray","hasChanged","ValueParameter","ArrayParameter","parameterName","isEqual","PlaceDefinition","path","authenticate","order","routeParameters","children","hasRouteId","getRouteIdParameterDef","find","getRouteParameterDefs","includeRouteId","getVisitParameterDefs","includeRouteParameters","include","opts","includeNonRouteParameters","isRouteParameter","getPlaceData","searchPlaceData","keys","found","getRouteIdFrom","routeIdParameterDef","getFormattedRouteId","format","getRouteId","getFormattedRouteParameters","forEach","def","isFalsey","getNonRouteParameters","parseRouteParams","params","has","values","getAll","parse","Memoize","ParameterOptions","PlaceComponent","DEFINITION_META_DATA_KEY","ROUTE_PARAMETER_LIST_KEY","initialiseBindings","parameterDef","installBinding","registerDisposable","Binding","toRight","toLeft","currentVisit","replace","getDefinition","canDeactivate","onPlaceReady","isPlaceComponentConstructor","constructorChain","includes","getRouteParameters","klass","Klass","getMetadataList","getMetadata","injectDefinition","definition","defineMetadata","AbstractPlaceNavigationComponent","placeDefinitions","placesModel","getNav","placeDef","navItem","title","tooltip","icon","NavigationSession","External","Internal","ListPlaceNavComponent","expanded","expandMenu","collapseMenu","toggleMenu","HostBinding","firstNavigation","_alreadyAccepted","_visits","Map","storeVisit","set","getVisitFor","mergePrivatePlaceParameters","alreadyAccepted","placeComponent","rememberAcceptanceOf","setPopstateReturn","url","_popStateReturnUrl","getVisits","from","isFirstTime","isExternal","createInternal","createExternal","firstTimeRoute","PlaceHistory","_history","add","state","history","previousState","last","hasChangedFrom","unshift","setHistory","Visit","visitParameters","_.isNil","parameter","mergeRouteParameters","routeParams","routeParameterKeys","hasRoutingChangedFrom","other","samePlace","sameRouteParameters","_.isEqual","PlaceRouter","angularLocation","firstRoute","_navigationSessionModel","MutableValueModel","_activeVisits","activeVisitIndex","indexBy","onUrlChange","events","NavigationStart","onAngularRouterStarted","NavigationEnd","NavigationError","onAngularRouterFinished","navigationSessionActive","navigationSessionModel","isNotNil","active","navigate","doNavigation","commands","createRouteParameters","relativeTo","pushVisitChangesToRoute","activatedRoute","previous","extractChildPath","snapshot","customNavigation","navigationSession","getCurrentNavigation","firstTime","session","navigationTrigger","routerState","visits","flatten","child","Trace","ActivatedRoute","animationStartStyle","style","position","top","left","bottom","right","optional","group","transform","animate","leftRightPlaceAnimation","duration","trigger","transition","LEFT_RIGHT_PLACE_ANIMATION","PlaceOutletComponent","placeRouter","parentOutlet","placeChanged","_activePlace","_inOutletUpdate","_activatedRouteModel","_placeDefinition","_placeVisit","inRouteVisitUpdate","routeVisit","pluck","findIn","unless","postponeWhile","place","activatedRouteModel","onOutletActivated","routerOutlet","onOutletDeactivated","getPlaceOrder","outlet","activatedRouteData","animations","SkipSelf","RouterOutlet","TabbedPlaceNavigationComponent","PlaceModule","BrowserAnimationsModule","MatProgressSpinnerModule","MatListModule","MatTooltipModule","MatIconModule","AngularUiPowerupsModule","FormsModule","MatInputModule","MatFormFieldModule","MatSelectModule","defaultHiddenStyleDef","opacity","paddingTop","paddingBottom","Dimension","width","Bounds","Point","x","translate","relativePositionOf","point","MouseEvent","clientX","clientY","ofElement","rect","ResizeAwareComponent","_boundsModel","ValueHolder","updateBounds","ro","ResizeObserver","entries","observer","run","onDispose","disconnect","bounds","Result","Callback","Formatter","StringType","NumberType","BooleanType","InteractionGuard","canActivate","route","currentRoute","currentState","nextState","ActivatedRouteSnapshot","RouterStateSnapshot","Place","isNumber","isNaN","parsed","Number","parseFloat","STRING","NUMBER","BOOLEAN","VisitSanitiser","routeIdDef","routeId","sanitisedValue","parameterDefs","sanitisedVisit","LeavePlaceGuard","isLeavingTheCurrentPlace","placeDefinitionPath","startsWith","self_1","canLeave","activity","isPopState","go","popStateReturnUrl","PlaceRouteGuard","ConsolidatedParameterMap","paramMap","parsedParams","initialVisit","parameterCommands","createUrlTree","replaceUrl","skipLocationChange","urlSegments","paramMaps","ParamMapAdapter","parameters","reduce","propertyKey","param","toString","addToOwnMetadataList","triggerName","OptionsHelper","hiddenStyleDef"],"mappings":"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","sourcesContent":["/*! *****************************************************************************\r\nCopyright (c) Microsoft Corporation. All rights reserved.\r\nLicensed under the Apache License, Version 2.0 (the \"License\"); you may not use\r\nthis file except in compliance with the License. You may obtain a copy of the\r\nLicense at http://www.apache.org/licenses/LICENSE-2.0\r\n\r\nTHIS CODE IS PROVIDED ON AN *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\r\nKIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED\r\nWARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR PURPOSE,\r\nMERCHANTABLITY OR NON-INFRINGEMENT.\r\n\r\nSee the Apache Version 2.0 License for specific language governing permissions\r\nand limitations under the License.\r\n***************************************************************************** */\r\n/* global Reflect, Promise */\r\n\r\nvar extendStatics = function(d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n};\r\n\r\nexport function __extends(d, b) {\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n}\r\n\r\nexport var __assign = function() {\r\n __assign = Object.assign || function __assign(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n }\r\n return t;\r\n }\r\n return __assign.apply(this, arguments);\r\n}\r\n\r\nexport function __rest(s, e) {\r\n var t = {};\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\r\n t[p] = s[p];\r\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\r\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\r\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\r\n t[p[i]] = s[p[i]];\r\n }\r\n return t;\r\n}\r\n\r\nexport function __decorate(decorators, target, key, desc) {\r\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n}\r\n\r\nexport function __param(paramIndex, decorator) {\r\n return function (target, key) { decorator(target, key, paramIndex); }\r\n}\r\n\r\nexport function __metadata(metadataKey, metadataValue) {\r\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\r\n}\r\n\r\nexport function __awaiter(thisArg, _arguments, P, generator) {\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : new P(function (resolve) { resolve(result.value); }).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n}\r\n\r\nexport function __generator(thisArg, body) {\r\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\r\n return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n function verb(n) { return function (v) { return step([n, v]); }; }\r\n function step(op) {\r\n if (f) throw new TypeError(\"Generator is already executing.\");\r\n while (_) try {\r\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\r\n if (y = 0, t) op = [op[0] & 2, t.value];\r\n switch (op[0]) {\r\n case 0: case 1: t = op; break;\r\n case 4: _.label++; return { value: op[1], done: false };\r\n case 5: _.label++; y = op[1]; op = [0]; continue;\r\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n default:\r\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n if (t[2]) _.ops.pop();\r\n _.trys.pop(); continue;\r\n }\r\n op = body.call(thisArg, _);\r\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n }\r\n}\r\n\r\nexport function __exportStar(m, exports) {\r\n for (var p in m) if (!exports.hasOwnProperty(p)) exports[p] = m[p];\r\n}\r\n\r\nexport function __values(o) {\r\n var m = typeof Symbol === \"function\" && o[Symbol.iterator], i = 0;\r\n if (m) return m.call(o);\r\n return {\r\n next: function () {\r\n if (o && i >= o.length) o = void 0;\r\n return { value: o && o[i++], done: !o };\r\n }\r\n };\r\n}\r\n\r\nexport function __read(o, n) {\r\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\r\n if (!m) return o;\r\n var i = m.call(o), r, ar = [], e;\r\n try {\r\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\r\n }\r\n catch (error) { e = { error: error }; }\r\n finally {\r\n try {\r\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\r\n }\r\n finally { if (e) throw e.error; }\r\n }\r\n return ar;\r\n}\r\n\r\nexport function __spread() {\r\n for (var ar = [], i = 0; i < arguments.length; i++)\r\n ar = ar.concat(__read(arguments[i]));\r\n return ar;\r\n}\r\n\r\nexport function __spreadArrays() {\r\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\r\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\r\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\r\n r[k] = a[j];\r\n return r;\r\n};\r\n\r\nexport function __await(v) {\r\n return this instanceof __await ? (this.v = v, this) : new __await(v);\r\n}\r\n\r\nexport function __asyncGenerator(thisArg, _arguments, generator) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var g = generator.apply(thisArg, _arguments || []), i, q = [];\r\n return i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i;\r\n function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; }\r\n function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\r\n function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\r\n function fulfill(value) { resume(\"next\", value); }\r\n function reject(value) { resume(\"throw\", value); }\r\n function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\r\n}\r\n\r\nexport function __asyncDelegator(o) {\r\n var i, p;\r\n return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\r\n function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: n === \"return\" } : f ? f(v) : v; } : f; }\r\n}\r\n\r\nexport function __asyncValues(o) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var m = o[Symbol.asyncIterator], i;\r\n return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\r\n function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\r\n function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\r\n}\r\n\r\nexport function __makeTemplateObject(cooked, raw) {\r\n if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\r\n return cooked;\r\n};\r\n\r\nexport function __importStar(mod) {\r\n if (mod && mod.__esModule) return mod;\r\n var result = {};\r\n if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];\r\n result.default = mod;\r\n return result;\r\n}\r\n\r\nexport function __importDefault(mod) {\r\n return (mod && mod.__esModule) ? mod : { default: mod };\r\n}\r\n","import { OnDestroy } from '@angular/core';\nimport { GarbageCollector } from '@coolon/pectin';\n\nexport class DisposableComponent extends GarbageCollector implements OnDestroy {\n\n ngOnDestroy(): void {\n this.dispose();\n }\n}\n","/* tslint:disable:no-input-rename */\nimport { EventEmitter, HostListener, Input, OnInit, Output } from '@angular/core';\nimport { FormControl, FormGroupDirective, NgForm } from '@angular/forms';\nimport { ErrorStateMatcher } from '@angular/material';\nimport { Command, DelegatingFormValueModel, ListModel, UseDelegate, ValueModel } from '@coolon/pectin';\nimport { DisposableComponent } from '../disposable-component';\n\nexport abstract class AbstractInputComponent<T> extends DisposableComponent implements OnInit {\n\n readonly valueModel = new DelegatingFormValueModel<T>();\n\n @Input('valueModel') @UseDelegate()\n set userValueModel(model: ValueModel<T>) {\n this.valueModel.setDelegate(model);\n }\n\n @Input() label: string;\n @Input() floatLabel: 'auto' | 'always' | 'never';\n @Input() hint: string;\n @Input() placeholder: string;\n\n @Input('command.focus') focusCommand: Command<any>;\n @Input('command.blur') blurCommand: Command<any>;\n @Input('command.enter') enterCommand: Command<any>;\n @Input('command.escape') escapeCommand: Command<any>;\n @Input('command.click') clickCommand: Command<any>;\n\n // TODO: fix this.\n // tslint:disable-next-line:no-output-native\n @Output() focus = new EventEmitter();\n // tslint:disable-next-line:no-output-native\n @Output() blur = new EventEmitter();\n // tslint:disable-next-line:no-output-native\n @Output() enterKey = new EventEmitter();\n // tslint:disable-next-line:no-output-native\n @Output() escapeKey = new EventEmitter();\n\n readonly errorStateMatcher: ErrorStateMatcher;\n\n @HostListener('click')\n notifyClick() {\n this.safelyInvoke(this.clickCommand);\n }\n\n @HostListener('focusin')\n notifyFocusIn() {\n this.safelyInvoke(this.focusCommand);\n this.focus.emit();\n }\n\n @HostListener('focusout')\n notifyFocusOut() {\n this.safelyInvoke(this.blurCommand);\n this.blur.emit();\n }\n\n\n notifyEnterKey() {\n this.safelyInvoke(this.enterCommand);\n this.enterKey.emit();\n }\n\n notifyEscapeKey() {\n this.safelyInvoke(this.escapeCommand);\n this.escapeKey.emit();\n }\n\n protected safelyInvoke(command: Command<any>) {\n if (command && command.enabled.value) {\n command.execute();\n }\n }\n\n constructor() {\n super();\n const self = this;\n this.errorStateMatcher = {\n isErrorState(control: FormControl | null, form: FormGroupDirective | NgForm | null): boolean {\n return self.hasErrors();\n }\n };\n }\n\n ngOnInit(): void {\n }\n\n isEnabled(): boolean {\n return this.enabled.value;\n }\n\n get enabled(): ValueModel<boolean> {\n return this.valueModel.enabled;\n }\n\n hasErrors(): boolean {\n return !this.errorList.query().isEmpty();\n }\n\n get errorList(): ListModel<string> {\n return this.valueModel.errorList;\n }\n\n get firstError() {\n return this.hasErrors() ? this.errorList.value[0] : null;\n }\n\n\n}\n","import { Component, OnInit } from '@angular/core';\nimport { AbstractInputComponent } from '../abstract-input.component';\n\n\n@Component({\n selector: 'angular-ui-powerups-number-input',\n templateUrl: './number-input.component.html',\n styleUrls: ['./number-input.component.scss']\n})\nexport class NumberInputComponent extends AbstractInputComponent<string> implements OnInit {\n\n constructor() {\n super();\n }\n\n ngOnInit() {\n }\n\n}\n","import { Component, OnInit } from '@angular/core';\nimport { AbstractInputComponent } from '../abstract-input.component';\n\n@Component({\n selector: 'angular-ui-powerups-password-input',\n templateUrl: './password-input.component.html',\n styleUrls: ['./password-input.component.scss']\n})\nexport class PasswordInputComponent extends AbstractInputComponent<string> implements OnInit {\n\n constructor() {\n super();\n }\n\n ngOnInit() {\n }\n\n}\n","import { Component, Input, OnInit } from '@angular/core';\nimport { ListModel, StoreInListModel, UseDelegate } from '@coolon/pectin';\nimport { AbstractInputComponent } from '../abstract-input.component';\n\n@Component({\n selector: 'angular-ui-powerups-select-input',\n templateUrl: './select-input.component.html',\n styleUrls: ['./select-input.component.scss']\n})\nexport class SelectInputComponent<T = any> extends AbstractInputComponent<T> implements OnInit {\n\n @Input() @UseDelegate()\n optionsModel: ListModel<T>;\n\n @Input() @StoreInListModel('optionsModel')\n options: T[];\n\n @Input()\n optionLabel: keyof T;\n\n @Input()\n optionLabelFormat: (option: T) => any = (option) => (option && this.optionLabel) ? option[this.optionLabel] : option;\n\n constructor() {\n super();\n }\n\n ngOnInit() {\n }\n\n}\n","import { Component, OnInit } from '@angular/core';\nimport { AbstractInputComponent } from '../abstract-input.component';\n\n@Component({\n selector: 'angular-ui-powerups-string-input',\n templateUrl: './string-input.component.html',\n styleUrls: ['./string-input.component.scss']\n})\nexport class StringInputComponent extends AbstractInputComponent<string> implements OnInit {\n\n constructor() {\n super();\n }\n\n ngOnInit() {\n }\n\n}\n","import { Component } from '@angular/core';\n\n@Component({\n selector: 'angular-ui-powerups-noop',\n templateUrl: './noop.component.html',\n styleUrls: ['./noop.component.scss']\n})\nexport class NoopComponent {\n constructor() {\n }\n}\n","import { AfterViewInit, Directive, ElementRef, HostListener, Inject, Input, OnDestroy, OnInit } from '@angular/core';\nimport { assert, Command, Dsl, GarbageCollector, lang, UnaryCommand } from '@coolon/pectin';\n\n@Directive({\n // tslint:disable-next-line:directive-selector\n selector: '[pectinCommand]'\n})\nexport class CommandDirective<P = any> extends GarbageCollector implements OnInit, OnDestroy, AfterViewInit {\n\n @Input()\n pectinCommand: Command<any> | UnaryCommand<P>;\n\n private _commandParameter: P;\n private _commandParameterProvided = false;\n\n @Input()\n set commandParameter(value: P) {\n this._commandParameterProvided = true;\n this._commandParameter = value;\n }\n\n get commandParameter(): P {\n return this._commandParameter;\n }\n\n constructor(@Inject(ElementRef) private elementRef: ElementRef) {\n super();\n }\n\n ngOnInit(): void {\n assert.notNil(this.pectinCommand);\n if (this.pectinCommand instanceof UnaryCommand) {\n if (!this._commandParameterProvided) {\n lang.illegalState('UnaryCommands required the command parameter to be specified.');\n }\n } else {\n if (this._commandParameterProvided) {\n lang.illegalState('command parameters are only supported by UnaryCommands');\n }\n }\n }\n\n ngAfterViewInit(): void {\n // for some reason mat-buttons kills the disabled host binding. It works on a regular button but for now\n // we need to do this.\n const { chain } = Dsl.disposeWith(this);\n chain(this.pectinCommand.enabled).subscribe(enabled => {\n if (enabled) {\n this.elementRef.nativeElement.removeAttribute('disabled');\n if (this.elementRef.nativeElement.tagName === 'A') {\n this.elementRef.nativeElement.setAttribute('href', 'javascript:void');\n }\n } else {\n this.elementRef.nativeElement.setAttribute('disabled', 'disabled');\n if (this.elementRef.nativeElement.tagName === 'A') {\n this.elementRef.nativeElement.removeAttribute('href');\n }\n }\n });\n }\n\n ngOnDestroy(): void {\n this.dispose();\n }\n\n\n @HostListener('click', ['$event'])\n notifyClick($event: Event) {\n $event.preventDefault();\n $event.stopPropagation();\n if (this.pectinCommand.enabled.value) {\n if (this.pectinCommand instanceof UnaryCommand) {\n this.pectinCommand.withContext({ event: $event }).execute(this.commandParameter);\n } else {\n this.pectinCommand.withContext({ event: $event }).execute();\n }\n } else {\n console.warn('disabled command clicked, ignoring.');\n }\n }\n}\n","import { DOCUMENT } from '@angular/common';\nimport { AfterViewInit, Directive, ElementRef, HostListener, Inject, Input, NgZone, OnInit } from '@angular/core';\nimport { Dsl, HasFocusTracking, Logger } from '@coolon/pectin';\nimport { DisposableComponent } from '../components/disposable-component';\n\n\n@Directive({\n // tslint:disable-next-line:directive-selector\n selector: '[pectinFocusBinding]'\n})\nexport class FocusBindingDirective extends DisposableComponent implements OnInit, AfterViewInit {\n\n private readonly document: Document;\n\n @Input() pectinFocusBinding: HasFocusTracking;\n @Input() focusBindingTarget: HTMLElement;\n\n @HostListener('focusin')\n onFocusIn() {\n if (this.hasBinding()) {\n this.pectinFocusBinding.focusContext.notifyFocusIn();\n }\n }\n\n @HostListener('focusout')\n onFocusOut() {\n if (this.hasBinding()) {\n this.pectinFocusBinding.focusContext.notifyFocusOut();\n }\n }\n\n constructor(@Inject(ElementRef) private readonly el: ElementRef,\n @Inject(NgZone) private readonly ngZone: NgZone,\n @Inject(DOCUMENT) document: any) {\n super();\n // @see https://stackoverflow.com/questions/49513359/could-not-resolve-type-document-in-angular5/53715642#53715642\n this.document = document as Document;\n }\n\n ngOnInit(): void {\n }\n\n ngAfterViewInit(): void {\n // TODO: Make this also track the current enabled/disabled state.\n if (this.hasBinding()) {\n const { chain } = Dsl.disposeWith(this);\n chain(this.pectinFocusBinding.focusContext.focused).subscribe((focused) => {\n if (focused && !this.alreadyHasFocus()) {\n this.tryAndFocus();\n }\n });\n } else {\n Logger.get(this).warn('pectinFocusBinding was nil');\n }\n }\n\n private hasBinding() {\n return !!this.pectinFocusBinding && !!this.pectinFocusBinding.focusContext;\n }\n\n// Hook method for debugging via tracing.\n alreadyHasFocus() {\n return this.isFocused(this.focusTarget);\n }\n\n // Hook method for debugging via tracing.\n isFocused(element: Element): boolean {\n return this.document.activeElement === element;\n }\n\n tryAndFocus(retries: number = 5) {\n if (this.modelShouldStillHaveFocus() && this.canFocus()) {\n if (!this.alreadyHasFocus()) {\n this.focusTarget.focus();\n }\n // if we didn't get the focus we try again later.\n if (!this.alreadyHasFocus()) {\n Logger.get(this).log(`focus failed, trying ${retries} more times`);\n if (retries > 0) {\n // try again on the next paint\n // TODO: is there an angular way of doing this without calling a window function.\n requestAnimationFrame(() => {\n this.tryAndFocus(retries - 1);\n });\n } else {\n Logger.get(this).warn(`Tried to focus but gave up as the component wasn't enabled or visible.`);\n }\n }\n }\n }\n\n get focusTarget(): HTMLElement {\n return this.focusBindingTarget || this.el.nativeElement;\n }\n\n // Hook method for debugging via tracing.\n modelShouldStillHaveFocus() {\n return this.hasBinding() && this.pectinFocusBinding.focusContext.focused.value;\n }\n\n // Hook method for debugging via tracing.\n canFocus(): boolean {\n const dimension = this.focusTarget.getBoundingClientRect();\n const hasSize = dimension.height >= 0 && dimension.height >= 0;\n // tslint:disable-next-line:no-string-literal\n return hasSize && !this.focusTarget['disabled'];\n }\n}\n","import { Constructable, GarbageCollector, ListModel, Trace, ValueModel } from '@coolon/pectin';\nimport { Activity } from './activity';\nimport { Alert } from './alert';\nimport { Confirm } from './confirm';\nimport * as _ from 'lodash';\n\nexport abstract class InteractionContext extends GarbageCollector {\n\n /**\n * Returns the current list of activities that are in progress.\n * This model is only updated in the next tick after the view has been updated.\n */\n abstract readonly activityList: ListModel<Activity<any, any>>;\n\n protected constructor() {\n super();\n }\n\n /**\n * Returns the activity that is currently active.\n * This model is only updated in the next tick after the view has been updated.\n */\n get currentActivity(): Activity<any, any> {\n return _.last(this.activityList.value);\n }\n\n /**\n * Returns true if an activity is currently running.\n */\n abstract isActive(): boolean;\n\n abstract startActivity<D, R, E>(activityType: Constructable<Activity<D, R, E>>, data?: D): Promise<R>;\n\n abstract confirm(confirm: Confirm): Promise<void>;\n\n /**\n * Presents the confirmation to the user and runs the activity only if the user confirms.\n * @param confirm:Confirm the confirmation to display.\n * @param activityType the activity to run if confirmed.\n * @param data the activity data.\n */\n abstract confirmThen<D, R, E>(confirm: Confirm, activityType: Constructable<Activity<D, R, E>>, data?: D): Promise<R>;\n\n abstract alert(alert: Alert): Promise<void>;\n\n}\n\n","import { InjectionToken } from '@angular/core';\nimport { DelegatingValueModel, GarbageCollector, ValueModel } from '@coolon/pectin';\nimport { assert } from '@coolon/typescript-utilities';\n\nexport const ACTIVITY_DATA = new InjectionToken<any>('InteractionActivityData');\n\nexport abstract class Activity<D, R, E = any> extends GarbageCollector {\n\n private readonly _busyModel = new DelegatingValueModel<boolean>().withDefault(false);\n private _activityContext: Activity.Callbacks<R, E>;\n\n initialise(activityContext: Activity.Callbacks<R, E>): void {\n assert.isNil(this._activityContext);\n this._activityContext = activityContext;\n }\n\n done(result?: R): void {\n return this._activityContext.onDone(result);\n }\n\n cancel(error?: E): void {\n this._activityContext.onCancel(error);\n }\n\n // @Trace()\n onActivityReady() {\n }\n\n\n get busy(): ValueModel<boolean> {\n return this._busyModel.readonly;\n }\n\n busyWhile(busyModel: ValueModel<boolean>) {\n this._busyModel.setDelegate(busyModel);\n }\n\n isBusy() {\n return this._busyModel.value;\n }\n\n}\n\nexport namespace Activity {\n\n export interface Callbacks<R, E> {\n onDone: (result: R) => void,\n onCancel: (error: E) => void,\n }\n}\n","import {\n Component,\n ComponentFactoryResolver,\n ComponentRef,\n Injector,\n Input,\n OnInit,\n ViewContainerRef\n} from '@angular/core';\nimport { Activity, ACTIVITY_DATA } from '../../activity';\nimport { InteractionContext } from '../../interaction-context';\nimport { ActivityOutletContext } from './activity-outlet-context';\nimport { assert } from '@coolon/pectin';\n\n/**\n * ActivityOutletComponent creates and displays an activity and delegates the interaction context functionality to an\n * external service.\n *\n * It might be nice to have wrapper component that allows more declarative use, i.e.\n * <activity-view [activityClass]=\"...\", [activityData]=\"...\" (done)=\"..\" (cancel)=\"...\"></activity-view>\n */\n@Component({\n selector: 'angular-ui-powerups-activity-outlet',\n template: '',\n styleUrls: ['./activity-outlet.component.scss']\n})\nexport class ActivityOutletComponent<D, R, E> implements OnInit {\n\n @Input()\n interactionContext: InteractionContext;\n private _activityContext: ActivityOutletContext<D, R, E>;\n\n @Input()\n set activityContext(activityContext: ActivityOutletContext<D, R, E>) {\n assert.isNil(this._activityContext);\n this._activityContext = activityContext;\n this.loadActivity(activityContext);\n };\n get activityContext():ActivityOutletContext<D,R,E> {\n return this._activityContext;\n }\n\n\n private activityComponentRef: ComponentRef<Activity<D, R, E>>;\n\n constructor(\n private componentFactoryResolver: ComponentFactoryResolver,\n private viewContainerRef: ViewContainerRef,\n private injector: Injector\n ) {\n }\n\n ngOnInit() {\n }\n\n loadActivity(activityContext: ActivityOutletContext<D, R, E>) {\n const injector = Injector.create({\n providers: [\n {\n provide: InteractionContext,\n useValue: this.interactionContext\n },\n { provide: ACTIVITY_DATA, useValue: activityContext.activityData }\n ],\n parent: this.injector\n });\n const componentFactory = this.componentFactoryResolver.resolveComponentFactory(activityContext.activityClass);\n this.viewContainerRef.clear();\n this.activityComponentRef = this.viewContainerRef.createComponent(componentFactory, 0, injector);\n this.activityComponentRef.instance.initialise(activityContext);\n if (this.activityContext.componentReady) {\n this.activityContext.componentReady(this.component);\n }\n }\n\n get component(): Activity<D, R, E> {\n return this.activityComponentRef.instance;\n }\n\n}\n","import { DelegatingValueModel, EventListenerList, Trace, ValueModel } from '@coolon/pectin';\nimport { assert } from '@coolon/typescript-utilities';\nimport { DisposableComponent } from '../components/disposable-component';\nimport { Activity } from './activity';\nimport { ActivityOutletContext } from './components/activity-outlet/activity-outlet-context';\nimport { InteractionContext } from './interaction-context';\n\n/**\n * Deprecated. You can now extend the Activity class directly.\n */\nexport abstract class AbstractActivity<D, R, E = any> extends Activity<D, R, E> {\n}\n","import { Component, Inject, OnInit } from '@angular/core';\nimport { AbstractActivity } from '../../abstract-activity';\nimport { ACTIVITY_DATA } from '../../activity';\nimport { Alert } from '../../alert';\n\n@Component({\n selector: 'angular-ui-powerups-alert-dialog',\n templateUrl: './alert-dialog.component.html',\n styleUrls: ['./alert-dialog.component.scss']\n})\nexport class AlertDialogComponent extends AbstractActivity<Alert, void> implements OnInit {\n\n constructor(@Inject(ACTIVITY_DATA) readonly alert: Alert) {\n super();\n }\n\n ngOnInit() {\n }\n\n}\n","import { Component, Inject, OnInit } from '@angular/core';\nimport { assert, Constructable } from '@coolon/pectin';\nimport { AbstractActivity } from '../../abstract-activity';\nimport { Activity, ACTIVITY_DATA } from '../../activity';\nimport { Confirm } from '../../confirm';\nimport { InteractionContext } from '../../interaction-context';\n\n@Component({\n selector: 'angular-ui-powerups-confirmation-dialog',\n templateUrl: './confirm-then-dialog.component.html',\n styleUrls: ['./confirm-then-dialog.component.scss']\n})\nexport class ConfirmThenDialogComponent<D,R,E> extends AbstractActivity<ConfirmThenDialogComponent.Data<D,R,E>, R, E> implements OnInit {\n\n constructor(@Inject(ACTIVITY_DATA) readonly config: ConfirmThenDialogComponent.Data<D,R,E>, readonly interactionContext:InteractionContext) {\n super();\n assert.notNil(config);\n }\n\n ngOnInit() {\n }\n\n get confirm():Confirm {\n return this.config.confirm;\n }\n\n isDestructive(): boolean {\n return this.confirm.destructive && this.confirm.destructive();\n }\n\n onConfirm() {\n this.interactionContext.startActivity(this.config.activityType, this.config.data)\n .then((result) => this.done(result))\n .catch(error => this.cancel(error));\n }\n}\n\nexport namespace ConfirmThenDialogComponent {\n export interface Data<D, R, E> {\n confirm:Confirm,\n activityType:Constructable<Activity<D, R, E>>,\n data: D\n }\n}\n","import { Component, Inject, OnInit } from '@angular/core';\nimport { assert } from '@coolon/pectin';\nimport { AbstractActivity } from '../../abstract-activity';\nimport { ACTIVITY_DATA } from '../../activity';\nimport { Confirm } from '../../confirm';\n\n@Component({\n selector: 'angular-ui-powerups-confirmation-dialog',\n templateUrl: './confirmation-dialog.component.html',\n styleUrls: ['./confirmation-dialog.component.scss']\n})\nexport class ConfirmationDialogComponent extends AbstractActivity<Confirm, void> implements OnInit {\n\n constructor(@Inject(ACTIVITY_DATA) readonly confirm: Confirm) {\n super();\n assert.notNil(confirm);\n }\n\n ngOnInit() {\n }\n\n isDestructive(): boolean {\n return this.confirm.destructive && this.confirm.destructive();\n }\n}\n","import { AfterViewInit, Component, Input, OnInit, QueryList, ViewChild, ViewChildren } from '@angular/core';\nimport { MatTabGroup } from '@angular/material';\nimport { assert, Constructable, Dsl, ListModel, MutableListModel, MutableStream } from '@coolon/pectin';\n\nimport { Activity } from '../../activity';\nimport { Alert } from '../../alert';\nimport { Confirm } from '../../confirm';\nimport { InteractionContext } from '../../interaction-context';\nimport { ActivityOutletContext } from '../activity-outlet/activity-outlet-context';\nimport { ActivityOutletComponent } from '../activity-outlet/activity-outlet.component';\nimport { AlertDialogComponent } from '../alert-dialog/alert-dialog.component';\nimport { ConfirmThenDialogComponent } from '../confirm-then-dialog/confirm-then-dialog.component';\nimport { ConfirmationDialogComponent } from '../confirmation-dialog/confirmation-dialog.component';\n\n/**\n * Note: this class is mutable and is stored in a list model. This is normally a big no no but\n * we're manually deriving other models from the list after view state changes. I.e. we not\n * using pectin chains on any of the mutable fields.\n */\nclass TabContext<D, R, E> implements ActivityOutletContext<D, R, E> {\n\n private _complete = false;\n private _component: Activity<D, R, E>;\n\n constructor(readonly activityData: D,\n readonly activityClass: Constructable<Activity<D, R, E>>,\n readonly interactionContext: InteractionContext,\n readonly activityCallbacks: Activity.Callbacks<R, E>) {\n }\n\n isComponentRealised(): boolean {\n return !!this._component;\n }\n\n isComplete() {\n return this._complete;\n }\n\n componentReady(component: Activity<D, R, E>) {\n assert.isNil(this._component);\n this._component = component;\n }\n\n get component(): Activity<D, R, E> {\n return this._component;\n }\n\n // @Trace()\n onDone(result: R): void {\n this._complete = true;\n this.activityCallbacks.onDone(result);\n }\n\n // @Trace()\n onCancel(error: E): void {\n this._complete = true;\n this.activityCallbacks.onCancel(error);\n }\n\n}\n\n@Component({\n selector: 'angular-ui-powerups-activity-container',\n templateUrl: './activity-container.component.html',\n styleUrls: ['./activity-container.component.scss']\n})\nexport class ActivityContainerComponent<D, R, E> extends InteractionContext implements OnInit, AfterViewInit {\n\n private readonly activityFinishedEvents = new MutableStream<any>();\n\n @Input()\n parentInteractionContext: InteractionContext;\n\n @Input()\n set initialActivityOutletContext(initialContext: ActivityOutletContext<D, R, E>) {\n assert.isNil(this.initialActivityOutletContext);\n this.activityTabs.push(new TabContext(initialContext.activityData, initialContext.activityClass, this, {\n onDone: (result: R) => {\n this.finished = true;\n return initialContext.onDone(result);\n },\n onCancel: (error: E) => {\n this.finished = true;\n return initialContext.onCancel(error);\n }\n }));\n }\n\n get initialActivityOutletContext(): ActivityOutletContext<D, R, E> {\n return this.activityTabs.length > 0 ? this.activityTabs.value[0] : null;\n }\n\n @ViewChild('tabs', { static: true })\n tabs: MatTabGroup;\n\n @ViewChildren(ActivityOutletComponent)\n outlets: QueryList<ActivityOutletComponent<any, any, any>>;\n\n readonly activityTabs = new MutableListModel<TabContext<any, any, any>>();\n private finished = false;\n\n private readonly _activityList = new MutableListModel<Activity<any, any>>();\n\n constructor() {\n super();\n const { chain, valueOf, before, when, after, observe, switchOn } = Dsl.disposeWith(this);\n chain(this.activityFinishedEvents).throttle(50).subscribe(() => this.onActivityFinished());\n }\n\n isActive(): boolean {\n return this.parentInteractionContext.isActive();\n }\n\n get activityList(): ListModel<Activity<any, any, any>> {\n return this._activityList.readonly;\n }\n\n ngOnInit() {\n }\n\n ngAfterViewInit(): void {\n const { chain, observe } = Dsl.disposeWith(this);\n observe.valuesFrom(this.outlets.changes).subscribe(() => setTimeout(() => this.updateActivityList()));\n observe.valuesFrom(this.tabs.animationDone).subscribe(() => this.onAnimationFinished());\n this.updateActivityList();\n }\n\n startActivity<D1, R1, E1>(activityType: Constructable<Activity<D1, R1, E1>>, data?: D1): Promise<R1> {\n const self = this;\n return new Promise<R1>((resolve, reject) => {\n const context = new TabContext(data, activityType, self, {\n onDone: function(result: R1) {\n resolve(result);\n self.activityFinishedEvents.publish({});\n },\n onCancel: function(error: E1) {\n reject(error);\n self.activityFinishedEvents.publish({});\n }\n });\n self.activityTabs.push(context);\n self.tabs.selectedIndex = this.activityTabs.length;\n });\n }\n\n\n alert(alert: Alert): Promise<void> {\n return this.startActivity(AlertDialogComponent, alert);\n }\n\n confirm(confirm: Confirm): Promise<void> {\n return this.startActivity(ConfirmationDialogComponent, confirm);\n }\n\n confirmThen<D1, R1, E1>(confirm: Confirm, activityType: Constructable<Activity<D1, R1, E1>>, data?: D1): Promise<R1> {\n return this.startActivity<ConfirmThenDialogComponent.Data<D1, R1, E1>, R1, E1>(ConfirmThenDialogComponent, {\n confirm,\n activityType: activityType,\n data: data\n });\n }\n\n // @Trace()\n private onActivityFinished() {\n // don't do anything if job already queued up.\n if (!this.finished) {\n if (this.synchroniseSelectedTabIndex()) {\n this.cleanupStaleActivities();\n }\n this.updateActivityList();\n }\n }\n\n // @Trace()\n private cleanupStaleActivities() {\n // clean up old tabs\n if (this.tabs.selectedIndex < this.activityTabs.length - 1) {\n this.activityTabs.runInTransaction(draft => {\n draft.value = draft.value.slice(0, 1 + this.tabs.selectedIndex);\n });\n }\n }\n\n /**\n * Synchronises the selected tab index. Returns true if there was no change to the selected index.\n */\n // @Trace()\n private synchroniseSelectedTabIndex(): boolean {\n const previousIndex = this.tabs.selectedIndex;\n const newIndex = this.activityTabs.query().findIndex(t => t.isComplete()) - 1;\n this.tabs.selectedIndex = newIndex;\n return previousIndex === newIndex;\n }\n\n // @Trace()\n private onAnimationFinished() {\n this.getSelectedOutlet().component.onActivityReady();\n this.cleanupStaleActivities();\n this.updateActivityList();\n }\n\n private updateActivityList() {\n this._activityList.value = this.activityTabs.value.filter(t => !t.isComplete() && t.isComponentRealised()).map(t => t.component);\n }\n\n private getSelectedOutlet() {\n return this.outlets.toArray()[this.tabs.selectedIndex];\n }\n}\n","import { Component } from '@angular/core';\n\n@Component({\n selector: 'angular-ui-powerups-interaction-outlet',\n templateUrl: './interaction-outlet.component.html',\n styleUrls: ['./interaction-outlet.component.scss']\n})\nexport class InteractionOutletComponent {\n constructor() {\n }\n}\n","import { Location } from '@angular/common';\nimport { Inject, Injectable, InjectionToken, Optional } from '@angular/core';\nimport { MatDialog, MatDialogRef } from '@angular/material';\nimport { MAT_DIALOG_DEFAULT_OPTIONS, MatDialogConfig } from '@angular/material/dialog';\nimport { Router } from '@angular/router';\nimport { Constructable, DelegatingListModel, lang, ListModel, ValueModel } from '@coolon/pectin';\nimport { assert } from '@coolon/typescript-utilities';\nimport * as uuid from 'uuid';\nimport { Activity } from '../activity';\nimport { Alert } from '../alert';\nimport { ActivityContainerComponent } from '../components/activity-container/activity-container.component';\nimport { AlertDialogComponent } from '../components/alert-dialog/alert-dialog.component';\nimport { ConfirmThenDialogComponent } from '../components/confirm-then-dialog/confirm-then-dialog.component';\nimport { ConfirmationDialogComponent } from '../components/confirmation-dialog/confirmation-dialog.component';\nimport { Confirm } from '../confirm';\nimport { InteractionContext } from '../interaction-context';\n\nexport const DIALOG_INTERACTION_SERVICE_DEFAULTS = new InjectionToken<MatDialogConfig<any>>('DIALOG_INTERACTION_SERVICE_DEFAULTS');\n\nclass Guard extends ValueModel<boolean> {\n\n constructor() {\n super({ initialValue: false });\n }\n\n get value(): boolean {\n return this.store.read();\n }\n\n whileTrue<R>(fun: () => R): R {\n this.startTransaction().commit(true);\n try {\n return fun();\n } finally {\n this.startTransaction().commit(false);\n }\n }\n\n runIfFalse<R>(fun: () => R, defaultValue: R = null): R {\n return !this.value ? fun() : defaultValue;\n }\n}\n\n\n@Injectable({\n providedIn: 'root'\n})\nexport class DialogInteractionService extends InteractionContext {\n\n private readonly _activityList = new DelegatingListModel<Activity<any, any>>();\n private startingGuard = new Guard();\n private currentActivityId: string;\n\n constructor(private readonly dialogService: MatDialog,\n readonly location: Location,\n readonly router: Router,\n @Optional() @Inject(DIALOG_INTERACTION_SERVICE_DEFAULTS) readonly dialogServiceDefaults: MatDialogConfig<any>,\n @Optional() @Inject(MAT_DIALOG_DEFAULT_OPTIONS) readonly matDialogDefaultConfig: MatDialogConfig<any>\n ) {\n super();\n assert.notNil(dialogService);\n }\n\n isActive(): boolean {\n return !!this.currentActivityId;\n }\n\n cancelActivity() {\n this.currentActivity.cancel(null);\n }\n\n get activityList(): ListModel<Activity<any, any>> {\n return this._activityList.readonly;\n }\n\n startActivity<D, R, E>(activityType: Constructable<Activity<D, R, E>>, data?: D): Promise<R> {\n return this._startActivity(activityType, data);\n }\n\n private _startActivity<D, R, E>(activityType: Constructable<Activity<D, R, E>>, data: D, disableClose: boolean = true) {\n if (this.isActive()) {\n lang.illegalState(`Activity already in progress: ${this.activityList.value.map(a => a.constructor.name).join(', ')}`);\n }\n return this.startingGuard.whileTrue(() => {\n this.currentActivityId = uuid.v1();\n // this.location.go(this.router.routerState.snapshot.url, \"aup\");\n\n const self = this;\n const config: MatDialogConfig = {\n autoFocus: false,\n hasBackdrop: true,\n closeOnNavigation: false,\n ...this.matDialogDefaultConfig,\n ...this.dialogServiceDefaults,\n ...{\n data,\n disableClose,\n panelClass: 'dialog-interaction-service'\n }\n };\n const matDialogRef = this.dialogService.open(ActivityContainerComponent, config) as MatDialogRef<ActivityContainerComponent<D, R, E>>;\n return new Promise<R>((resolve, reject) => {\n const activityContainer = matDialogRef.componentInstance;\n activityContainer.parentInteractionContext = this;\n self.safelyUpdateActivityListDelegate(activityContainer.activityList);\n\n activityContainer.initialActivityOutletContext = {\n activityClass: activityType,\n activityData: data,\n onDone(result) {\n resolve(result);\n matDialogRef.close(true); // return true to let the after close listener know we've already handled it.\n },\n onCancel(error) {\n reject(error);\n matDialogRef.close(true); // return true to let the after close listener know we've already handled it.\n }\n };\n matDialogRef.afterClosed().subscribe(promiseAlreadyFinished => {\n if (!promiseAlreadyFinished) {\n reject(\"auto-closed\");\n }\n });\n matDialogRef.updateSize();\n }).finally(() => {\n this.currentActivityId = null;\n self.safelyUpdateActivityListDelegate(null);\n });\n });\n }\n\n /**\n * Updates teh delegate on the next tick to avoid modifying state during the current change detection cycle.\n * @param delegate\n */\n safelyUpdateActivityListDelegate(delegate: ListModel<Activity<any, any>>) {\n setTimeout(() => this._activityList.setDelegate(delegate));\n }\n\n alert(alert: Alert): Promise<void> {\n // TODO: Test disableClose === false\n return this._startActivity(AlertDialogComponent, alert, false);\n }\n\n confirm(confirm: Confirm): Promise<void> {\n return this._startActivity(ConfirmationDialogComponent, confirm, true);\n }\n\n confirmThen<D, R, E>(confirm: Confirm, activityType: Constructable<Activity<D, R, E>>, data?: D): Promise<R> {\n return this._startActivity<ConfirmThenDialogComponent.Data<D, R, E>, R, E>(ConfirmThenDialogComponent, {\n confirm,\n activityType: activityType,\n data: data\n }, true);\n }\n}\n","import { PortalModule } from '@angular/cdk/portal';\nimport { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { MatButtonModule, MatDialogModule, MatTabsModule } from '@angular/material';\nimport { RouterModule } from '@angular/router';\nimport { ActivityContainerComponent } from './components/activity-container/activity-container.component';\nimport { ActivityOutletComponent } from './components/activity-outlet/activity-outlet.component';\nimport { AlertDialogComponent } from './components/alert-dialog/alert-dialog.component';\nimport { ConfirmThenDialogComponent } from './components/confirm-then-dialog/confirm-then-dialog.component';\nimport { ConfirmationDialogComponent } from './components/confirmation-dialog/confirmation-dialog.component';\nimport { InteractionOutletComponent } from './components/interaction-outlet/interaction-outlet.component';\nimport { DialogInteractionService } from './services/dialog-interaction.service';\n\n@NgModule({\n imports: [\n CommonModule,\n MatButtonModule,\n MatDialogModule,\n MatTabsModule,\n PortalModule,\n RouterModule\n ],\n declarations: [\n ActivityContainerComponent,\n ConfirmationDialogComponent,\n ConfirmThenDialogComponent,\n AlertDialogComponent,\n ActivityOutletComponent,\n InteractionOutletComponent\n ],\n exports: [\n ActivityContainerComponent,\n ActivityOutletComponent,\n InteractionOutletComponent\n ],\n entryComponents: [\n ActivityContainerComponent,\n ConfirmationDialogComponent,\n ConfirmThenDialogComponent,\n AlertDialogComponent\n ],\n providers: [\n DialogInteractionService\n ]\n})\nexport class InteractionModule {\n}\n","import { Component, Input, OnInit } from '@angular/core';\nimport { StoreInValueModel, UseDelegate, ValueModel } from '@coolon/pectin';\n\n@Component({\n selector: 'angular-ui-powerups-busy-overlay',\n templateUrl: `./busy-overlay.component.html`,\n styleUrls: ['./busy-overlay.component.scss']\n})\nexport class BusyOverlayComponent implements OnInit {\n\n @Input() @UseDelegate()\n busyModel: ValueModel<boolean>;\n\n @Input() @StoreInValueModel('busyModel')\n busy: boolean;\n\n constructor() {\n }\n\n ngOnInit() {\n }\n\n}\n","import { Component, OnInit } from '@angular/core';\n\n@Component({\n selector: 'angular-ui-powerups-empty-state',\n template: `\n <div class=\"container\">\n <ng-content></ng-content>\n </div>\n `,\n styleUrls: ['./empty-state.component.scss']\n})\nexport class EmptyStateComponent implements OnInit {\n\n constructor() {\n }\n\n ngOnInit() {\n }\n}\n","import { Injector } from '@angular/core';\nimport { Trace } from '@coolon/pectin';\nimport { Opts } from '@coolon/typescript-utilities';\nimport _ from 'lodash';\nimport { PlaceHistory } from '../place-history';\nimport { Visit } from '../visit';\nimport { Formatter } from './formatter';\n\nexport abstract class ParameterDefinition<T, E = T> {\n\n abstract readonly isRouteId: boolean;\n abstract readonly isArray: boolean;\n\n readonly remember: boolean;\n readonly defaultValue: T;\n private options: Opts<ParameterDefinition.Options<T>>;\n\n constructor(readonly propertyName: string, options: ParameterDefinition.Options<T>, readonly urlFormat?: Formatter<E>) {\n this.options = Opts.get(options);\n this.remember = this.options.getOptional('remember', false);\n this.defaultValue = this.options.getOptional('defaultValue', null);\n }\n\n get name() {\n return this.options.getOptional('as', this.propertyName);\n }\n\n // @Trace()\n get isRouteParameter(): boolean {\n return !!this.urlFormat;\n }\n\n abstract isEmptyValue(value: T): boolean;\n\n abstract hasChanged(a: any, b: any): boolean;\n\n protected getOptionValue<K extends keyof ParameterDefinition.Options<T>>(key: K): ParameterDefinition.Options<T>[K] {\n return this.options.getOptional(key, null);\n }\n\n // @Trace()\n async sanitise(value:T, visit: Visit, placeHistory: PlaceHistory, injector: Injector) {\n if (this.isMissingFrom(visit)) {\n const previousVisit = _.first(placeHistory.getHistory(visit.placeDefinition));\n if (this.remember && previousVisit) {\n value = previousVisit.getParameter(this.name);\n }\n return this.isEmptyValue(value) ? this.defaultValue : value;\n } else {\n // todo: add custom sanitiser\n return value;\n }\n }\n\n private isMissingFrom(visit: Visit) {\n return !visit.hasParameter(this.name);\n }\n}\n\nexport namespace ParameterDefinition {\n\n export interface Options<T> {\n as?: string;\n optional?: boolean;\n remember?: boolean;\n defaultValue?: T;\n // sanitiser?: Constructable<ParameterSanitiser<T>> | ParameterSanitiser.Options<T>;\n }\n\n export class RouteId<T> extends ParameterDefinition<T> {\n readonly isRouteId = true;\n readonly isArray = false;\n\n isEmptyValue(value: T): boolean {\n return _.isNil(value);\n }\n\n hasChanged(a: any, b: any): boolean {\n return a !== b;\n }\n }\n\n export class ValueParameter<T> extends ParameterDefinition<T> {\n readonly isRouteId = false;\n readonly isArray = false;\n\n isEmptyValue(value: T): boolean {\n return _.isNil(value);\n }\n\n hasChanged(a: any, b: any): boolean {\n return a !== b;\n }\n }\n\n export class ArrayParameter<T> extends ParameterDefinition<T[], T> {\n readonly isRouteId = false;\n readonly isArray = true;\n\n constructor(parameterName: string, options: Options<T[]>, urlFormat: Formatter<T>) {\n super(parameterName, options, urlFormat);\n }\n\n isEmptyValue(value: T[]): boolean {\n return _.isNil(value) || value.length < 1;\n }\n\n hasChanged(a: T[], b: T[]): boolean {\n return !_.isEqual(a, b);\n }\n\n }\n}\n","import { ParamMap } from '@angular/router';\nimport { assert, Constructable, Trace } from '@coolon/pectin';\nimport { Opts } from '@coolon/typescript-utilities';\nimport { Memoize } from '@typescript-plus/fast-memoize-decorator/dist/src';\nimport _ from 'lodash';\nimport { PlaceComponent } from './place-component';\nimport { ParameterDefinition } from './route/parameter-definition.class';\nimport { Visit } from './visit';\n\nexport class PlaceDefinition {\n\n constructor(readonly component: Constructable<PlaceComponent>,\n readonly path: string,\n readonly authenticate: boolean,\n readonly order: number,\n readonly data: { [key: string]: any },\n readonly routeParameters: ParameterDefinition<any>[],\n readonly children: PlaceDefinition[]) {\n }\n\n hasRouteId() {\n return !!this.getRouteIdParameterDef();\n }\n\n @Memoize()\n getRouteIdParameterDef(): ParameterDefinition<any> {\n return this.routeParameters.find(p => p.isRouteId);\n }\n\n @Memoize()\n getRouteParameterDefs(includeRouteId = false): ParameterDefinition<any>[] {\n return this.getVisitParameterDefs({ includeRouteId, includeRouteParameters: true });\n }\n\n @Memoize()\n getVisitParameterDefs(include?: PlaceDefinition.ParameterOptions): ParameterDefinition<any>[] {\n const opts = Opts.get(include);\n // includes\n const includeRouteId = !include || opts.getOptional('includeRouteId', false);\n const includeRouteParameters = !include || opts.getOptional('includeRouteParameters', false);\n const includeNonRouteParameters = !include || opts.getOptional('includeNonRouteParameters', false);\n return this.routeParameters.filter(p => {\n return (includeRouteId && p.isRouteId)\n || (includeRouteParameters && p.isRouteParameter && !p.isRouteId) // route id is included in the line above\n || (includeNonRouteParameters && !p.isRouteParameter);\n });\n }\n\n getPlaceData<T>(key: string, defaultValue?: T): T {\n return this.data ?\n _.isNil(this.data[key]) ? defaultValue : this.data[key] :\n defaultValue;\n }\n\n searchPlaceData<T>(keys: string[], defaultValue?: T): T {\n if (this.data) {\n const found = keys.find(key => !_.isNil(this.data[key]));\n return found ? this.data[found] : defaultValue;\n } else {\n return defaultValue;\n }\n }\n\n getRouteIdFrom(visit: Visit) {\n const routeIdParameterDef = this.getRouteIdParameterDef();\n return routeIdParameterDef ? visit.getParameter(routeIdParameterDef.name) : null;\n }\n\n /**\n * Returns angular router commands that specify the route id and any route parameters. The result does\n * not include any path information.\n */\n // getFormattedRouterCommands(visit: Visit): any[] {\n // return this.hasRouteId() ?\n // [this.getFormattedRouteId(visit), this.getFormattedRouteParameters(visit)] :\n // [this.getFormattedRouteParameters(visit)];\n // }\n\n getFormattedRouteId(visit: Visit): any {\n return visit.hasRouteId() ? this.getRouteIdParameterDef().urlFormat.format(visit.getRouteId()) : null;\n }\n\n // @Trace()\n getFormattedRouteParameters(visit: Visit, includeRouteId = false): { [p: string]: string } {\n const result: { [p: string]: string } = {};\n this.getVisitParameterDefs({\n includeRouteId, includeRouteParameters: true\n }).forEach(def => {\n const value = visit.getParameter(def.name);\n if (!def.isEmptyValue(value)) {\n if (def.isArray) {\n assert.isArray(value);\n result[def.name] = value.map(v => def.urlFormat.format(v));\n } else {\n assert.isFalsey(Array.isArray(value));\n result[def.name] = def.urlFormat.format(value);\n }\n }\n });\n return result;\n }\n\n getNonRouteParameters(visit: Visit): { [p: string]: string } {\n const result: { [p: string]: string } = {};\n this.getVisitParameterDefs({ includeNonRouteParameters: true }).forEach(def => {\n const value = visit.getParameter(def.name);\n if (!def.isEmptyValue(value)) {\n result[def.name] = value;\n }\n });\n return result;\n }\n\n // @Trace()\n parseRouteParams(params: ParamMap): { [p: string]: any } {\n const result: { [p: string]: any } = {};\n this.getVisitParameterDefs({\n includeRouteId: true,\n includeRouteParameters: true,\n includeNonRouteParameters: false\n }).forEach(def => {\n // params will return null for non existent names\n if (params.has(def.name)) {\n if (def.isArray) {\n const values = params.getAll(def.name);\n result[def.name] = values.map(v => def.urlFormat.parse(v));\n } else {\n const value = def.urlFormat.parse(params.get(def.name));\n // because our id routes redirect if the id isn't pressent we always have a id\n // parameter in our params. This will bugger our remember and defaultvalue sanitisation\n // as it'll see that the id is present (event thought its null). The sanitisation can't\n // check for null as that's a valid value for the id.\n const isEmptyRouteId = def.isRouteId && def.isEmptyValue(value);\n if (!isEmptyRouteId) {\n result[def.name] = value;\n }\n }\n }\n });\n return result;\n }\n\n}\n\nexport namespace PlaceDefinition {\n export interface ParameterOptions {\n includeRouteId?: boolean;\n includeRouteParameters?: boolean;\n includeNonRouteParameters?: boolean;\n }\n}\n","import { assert, Binding, Constructable, IMutableHasValue, lang, ValueModel } from '@coolon/pectin';\nimport { Klass } from '@coolon/typescript-utilities';\nimport { Memoize } from '@typescript-plus/fast-memoize-decorator';\nimport 'reflect-metadata';\nimport { DisposableComponent } from '../components/disposable-component';\nimport { PlaceDefinition } from './place-definition';\nimport { ParameterDefinition } from './route/parameter-definition.class';\nimport { Visit } from './visit';\n\n// RAKE: making this Symbol(...) broke things.\nexport const DEFINITION_META_DATA_KEY = 'PLACE_DEFINITION_OPTIONS';\n// this one seems ok.\nexport const ROUTE_PARAMETER_LIST_KEY = Symbol('place:route:parameters');\n\nexport class PlaceComponent extends DisposableComponent {\n\n private visit: ValueModel<Visit>;\n\n constructor() {\n super();\n }\n\n public initialiseBindings(visit: ValueModel<Visit>) {\n assert.isNil(this.visit);\n this.visit = visit;\n this.placeDefinition.getVisitParameterDefs().forEach(parameterDef => {\n this.installBinding(parameterDef);\n });\n }\n\n private installBinding<T, S>(parameterDef: ParameterDefinition<T, S>) {\n const model = this[parameterDef.propertyName] as IMutableHasValue<S>;\n // this.txo.observe(parameterDef.propertyName, model);\n this.registerDisposable(new Binding(this.visit, model, {\n toRight(visit: Visit): S {\n const value = visit.getParameter(parameterDef.name);\n // console.log('push to component', {name:parameterDef.name, value, visit});\n return value;\n },\n toLeft(value: S, currentVisit?: Visit): Visit {\n console.log('push to route', {name:parameterDef.name, value, currentVisit});\n return currentVisit.replace(parameterDef, value);\n }\n }));\n }\n\n @Memoize()\n get placeDefinition(): PlaceDefinition {\n return PlaceComponent.getDefinition(this.constructor as any as Constructable<PlaceComponent>);\n }\n\n get childPlaces(): Constructable<PlaceComponent>[] {\n return this.placeDefinition.children.map(d => d.component);\n }\n\n canDeactivate(): boolean | Promise<boolean> {\n return true;\n }\n\n onPlaceReady() {\n }\n\n}\n\nexport namespace PlaceComponent {\n\n export function isPlaceComponentConstructor(target: any): target is Constructable<PlaceComponent> {\n return lang.constructorChain(target as Constructable<any>).includes(PlaceComponent);\n }\n\n export function getRouteParameters(klass: Constructable<PlaceComponent>): ParameterDefinition<any>[] {\n return Klass.get(klass).getMetadataList(ROUTE_PARAMETER_LIST_KEY);\n }\n\n export function getDefinition(klass: Constructable<PlaceComponent>): PlaceDefinition {\n return Reflect.getMetadata(DEFINITION_META_DATA_KEY, klass);\n }\n\n export function injectDefinition(klass: Constructable<PlaceComponent>, definition: PlaceDefinition) {\n Reflect.defineMetadata(DEFINITION_META_DATA_KEY, definition, klass);\n }\n\n}\n","import { Input, OnInit } from '@angular/core';\nimport { Constructable, Dsl, ListModel, ListModelChain, StoreInListModel, UseDelegate } from '@coolon/pectin';\nimport { Memoize } from '@typescript-plus/fast-memoize-decorator/dist/src';\nimport { DisposableComponent } from '../../components/disposable-component';\nimport { NavItem } from '../nav-item';\nimport { PlaceComponent } from '../place-component';\nimport { PlaceDefinition } from '../place-definition';\n\nexport class AbstractPlaceNavigationComponent extends DisposableComponent implements OnInit {\n\n @Input() @StoreInListModel('placesModel')\n places: Constructable<PlaceComponent>[];\n\n @Input() @UseDelegate()\n placesModel: ListModel<Constructable<PlaceComponent>>;\n\n readonly placeDefinitions: ListModelChain<PlaceDefinition>;\n\n constructor() {\n super();\n const { chain, valueOf, before, when, after, observe, switchOn } = Dsl.disposeWith(this);\n this.placeDefinitions = chain(this.placesModel).map(c => PlaceComponent.getDefinition(c));\n }\n\n @Memoize()\n getNav(placeDef: PlaceDefinition): NavItem {\n const navItem = placeDef.getPlaceData('nav') as NavItem;\n return {\n title: () => navItem ? navItem.title() : placeDef.searchPlaceData(['navTitle', 'title']),\n tooltip: () => navItem && navItem.tooltip ? navItem.tooltip() : placeDef.getPlaceData('navTooltip', null),\n icon: () => navItem && navItem.icon ? navItem.icon() : placeDef.getPlaceData('navIcon', null)\n };\n }\n\n ngOnInit() {\n }\n\n}\n","import { Trace } from '@coolon/pectin';\nimport { PlaceComponent } from './place-component';\nimport { PlaceDefinition } from './place-definition';\nimport { Visit } from './visit';\n\nexport abstract class NavigationSession {\n\n private _alreadyAccepted: PlaceComponent[] = [];\n\n private _visits = new Map<PlaceDefinition, Visit>();\n private _popStateReturnUrl: string;\n\n abstract readonly isExternal: boolean;\n\n protected constructor(readonly firstNavigation: boolean) {\n }\n\n storeVisit(visit: Visit) {\n this._visits.set(visit.placeDefinition, visit);\n }\n\n getVisitFor(placeDef: PlaceDefinition) {\n return this._visits.get(placeDef);\n }\n\n mergePrivatePlaceParameters(params: { [p: string]: any }): NavigationSession {\n return null;\n }\n\n // @Trace()\n alreadyAccepted(placeComponent: PlaceComponent): boolean {\n return this._alreadyAccepted.includes(placeComponent);\n }\n\n // @Trace()\n rememberAcceptanceOf(component: PlaceComponent) {\n this._alreadyAccepted.push(component);\n }\n\n setPopstateReturn(url: string) {\n this._popStateReturnUrl = url;\n }\n\n get isPopState(): boolean {\n return !!this._popStateReturnUrl;\n }\n\n get popStateReturnUrl() {\n return this._popStateReturnUrl;\n }\n\n getVisits(): Visit[] {\n return Array.from(this._visits.values());\n }\n}\n\nexport namespace NavigationSession {\n\n class External extends NavigationSession {\n readonly isExternal = true;\n\n constructor(isFirstTime: boolean) {\n super(isFirstTime);\n }\n }\n\n class Internal extends NavigationSession {\n readonly isExternal = false;\n\n constructor(visit: Visit) {\n super(false);\n this.storeVisit(visit);\n }\n }\n\n export function createInternal(visit: Visit): NavigationSession {\n return new Internal(visit);\n }\n\n export function createExternal(firstTimeRoute: boolean): NavigationSession {\n return new External(firstTimeRoute);\n }\n\n\n}\n\n","import { Component, HostBinding } from '@angular/core';\nimport { AbstractPlaceNavigationComponent } from '../abstract-place-navigation.component';\n\n@Component({\n selector: 'angular-ui-powerups-list-place-nav',\n templateUrl: './list-place-nav.component.html',\n styleUrls: ['./list-place-nav.component.scss']\n})\nexport class ListPlaceNavComponent extends AbstractPlaceNavigationComponent {\n\n @HostBinding('class.expanded')\n public expanded = true;\n\n constructor() {\n super();\n }\n\n expandMenu() {\n this.expanded = true;\n }\n\n collapseMenu() {\n this.expanded = false;\n }\n\n toggleMenu() {\n this.expanded = !this.expanded;\n }\n}\n","import { Injectable } from '@angular/core';\nimport { Router } from '@angular/router';\nimport { Trace } from '@coolon/pectin';\nimport _ from 'lodash';\nimport { PlaceDefinition } from './place-definition';\nimport { Visit } from './visit';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class PlaceHistory {\n\n private _history = new Map<PlaceDefinition, Visit[]>();\n\n constructor(private readonly router: Router) {\n }\n\n // @Trace()\n add(state: Visit) {\n const history = this.getHistory(state.placeDefinition);\n const previousState = _.last(history);\n if (!previousState || state.hasChangedFrom(previousState)) {\n history.unshift(state); // LIFO\n this.setHistory(state.placeDefinition, history.slice(0, 3)); // limit our history to 4 visits\n }\n }\n\n getHistory(placeDef: PlaceDefinition): Visit[] {\n let history = this._history.get(placeDef);\n if (!history) {\n history = [];\n this.setHistory(placeDef, history);\n }\n return history;\n }\n\n private setHistory(placeDef: PlaceDefinition, history: Visit[]) {\n this._history.set(placeDef, history);\n }\n\n// previousVisit(): Visit {\n // return _.last(this._history);\n // }\n //\n // withPreviousVisit<R>(callback:(previousVisit:Visit)=>R, defaultValue:R = null):R{\n // const visit = this.previousVisit();\n // return visit ? callback(visit) : defaultValue;\n // }\n //\n // previousVisitTo(place: Place): Visit {\n // return new VisitHistory.Query(this._history).to(place).last();\n // }\n}\n\nexport namespace VisitHistory {\n\n // export class Query {\n // private _history: Visit.State[];\n // private _places: Place[];\n // private _predicate: (visit: any) => boolean;\n // private _limit: number;\n //\n // constructor(history, limit = history.length) {\n // this._history = history;\n // this._places = [];\n // this._predicate = (visit => true);\n // this._limit = limit;\n // }\n //\n // to(...places:Place[]):this {\n // this._places = places;\n // return this;\n // }\n //\n // with(parameters: { [parameter: string]: any }): this {\n // this.matching(state => {\n // return Object.keys(parameters).reduce((acc, key) => {\n // const matchValue = parameters[key];\n // const visitValue = state.get(key);\n // const matched = matchValue === '*' ? !_.isNil(visitValue) : visitValue == matchValue;\n // // Logger.get(this).info(`matched=${matched}`, parameters, visitValue);\n // return acc && matched;\n // }, true);\n // });\n // return this;\n // }\n //\n // last(): Visit.State {\n // return _.findLast(this._history, visit => this._matches(visit))\n // }\n //\n // // @trace\n // allThatMatch(): Visit.State[] {\n // return _.filter(this._history, visit => this._matches(visit)).slice(-this._limit);\n // }\n //\n // // @trace\n // mostRecentValueOf<T=any>(param: string, defaultValue: T = null): T {\n // const lastStateWithParam = _.findLast(this.allThatMatch(), state => !_.isNil(state.get(param)));\n // return _.isNil(lastStateWithParam) ? defaultValue : lastStateWithParam.get(param);\n // }\n //\n // limit(limit: number): this {\n // this._limit = limit;\n // return this;\n // }\n //\n // matching(predicate: (visit: Visit.State) => boolean): this {\n // this._predicate = predicate;\n // return this;\n // }\n //\n // _matches(visit: Visit.State) {\n // return this._isPlaceMatch(visit) && this._predicate(visit);\n // }\n //\n // _isPlaceMatch(visit: Visit.State) {\n // return this._places.length < 1 || this._places.includes(visit.place)\n // }\n //\n // }\n\n}\n","import { Trace } from '@coolon/pectin';\nimport * as _ from 'lodash';\nimport { PlaceDefinition } from './place-definition';\nimport { ParameterDefinition } from './route/parameter-definition.class';\n\ninterface Params {\n [p: string]: any\n}\n\n\nexport class Visit {\n\n constructor(readonly placeDefinition: PlaceDefinition, private readonly visitParameters: Params = {}) {\n }\n\n // @Trace()\n getRouteId(): any {\n return this.placeDefinition.getRouteIdFrom(this);\n }\n\n // @Trace()\n hasRouteId(): boolean {\n return !_.isNil(this.getRouteId());\n }\n\n /**\n * Returns the value of the place parameter with the specified name. The parameter\n * name is taken from the `as` option, e.g. {as: 'aCustomName'} otherwise it is the\n * same as the the ValueModel property name.\n * @param parameterName the field name of the property model or the `as` option if specified.\n */\n getParameter(parameterName: string): any {\n return this.visitParameters[parameterName];\n }\n\n // @Trace()\n hasParameter(parameterName: string) {\n return Object.keys(this.visitParameters).includes(parameterName);\n }\n\n replace<S>(parameter: ParameterDefinition<any, S>, value: S): Visit {\n return new Visit(this.placeDefinition, { ...this.visitParameters, [parameter.name]: value });\n }\n\n mergeRouteParameters<S>(routeParams: { [p: string]: any }): Visit {\n // todo: whitelist parameters.\n const routeParameterKeys = Object.keys(routeParams);\n const params = {};\n this.placeDefinition.getVisitParameterDefs().forEach(def => {\n if (def.isRouteId || def.isRouteParameter) {\n if (routeParameterKeys.includes(def.name)) {\n params[def.name] = routeParams[def.name];\n }\n } else {\n // copy non route params as is, but only if they already exist otherwise we'll inject nil values and break the\n // defaults and remember sanitisation process.\n if (this.hasParameter(def.name)) {\n params[def.name] = this.getParameter(def.name);\n }\n }\n });\n return new Visit(this.placeDefinition, params);\n }\n\n hasRoutingChangedFrom(other: Visit): boolean {\n const samePlace = other.placeDefinition === this.placeDefinition;\n const sameRouteParameters = _.isEqual(\n this.placeDefinition.getFormattedRouteParameters(this, true),\n this.placeDefinition.getFormattedRouteParameters(other, true)\n );\n return !samePlace || !sameRouteParameters;\n }\n\n hasChangedFrom(other: Visit) {\n const sameNonRouteParameters = _.isEqual(\n this.placeDefinition.getNonRouteParameters(this),\n this.placeDefinition.getNonRouteParameters(other)\n );\n return !sameNonRouteParameters || this.hasRoutingChangedFrom(other);\n }\n}\n","import { Location } from '@angular/common';\nimport { Injectable } from '@angular/core';\nimport {\n ActivatedRoute,\n ActivatedRouteSnapshot,\n NavigationEnd,\n NavigationError,\n NavigationStart,\n Router\n} from '@angular/router';\nimport {\n BooleanValueModelChain,\n Dsl,\n GarbageCollector,\n HasOneIndexChain,\n ListModel,\n MutableListModel,\n MutableValueModel,\n Trace,\n ValueModel\n} from '@coolon/pectin';\nimport _ from 'lodash';\nimport { NavigationSession } from './navigation-session';\nimport { PlaceHistory } from './place-history';\nimport { Visit } from './visit';\n\n\n@Injectable({\n providedIn: 'root'\n})\nexport class PlaceRouter extends GarbageCollector {\n\n private firstRoute = true;\n\n private readonly _navigationSessionModel = new MutableValueModel<NavigationSession>();\n private readonly _activeVisits = new MutableListModel<Visit>();\n\n readonly navigationSessionActive: BooleanValueModelChain;\n readonly activeVisitIndex: HasOneIndexChain<'placeDefinition', Visit>;\n\n constructor(private readonly router: Router, readonly angularLocation: Location, readonly placeHistory: PlaceHistory) {\n super();\n const { chain, valueOf, before, when, after, observe, switchOn } = Dsl.disposeWith(this);\n this.activeVisitIndex = chain(this._activeVisits).indexBy('placeDefinition');\n\n angularLocation.onUrlChange(url => {\n console.log(`location.onUrlChange -> ${url}`);\n });\n\n // TODO: make setup the callbacks in during module initiation to make this testable.\n this.router.events.subscribe(event => {\n // Routing event sequence\n // ======================\n // NavigationStart -> .... -> NavigationCancel --> redirect, go around again in the same session\n // NavigationStart -> .... -> NavigationEnd --> navigation complete, end session.\n // NavigationStart -> .... -> NavigationError --> navigation canceled, end session.\n // =======================\n if (event instanceof NavigationStart) {\n this.onAngularRouterStarted(event);\n }\n if (event instanceof NavigationEnd || event instanceof NavigationError) {\n this.onAngularRouterFinished();\n }\n });\n\n this.navigationSessionActive = chain(this.navigationSessionModel).isNotNil();\n this.navigationSessionActive.subscribe(active => {\n console.log('navigationSessionActive', active);\n });\n // const txo = new TransactionObserver().onEvent(e => console.log(e.toString()));\n // txo.observe('this.navigationSessionModel', this.navigationSessionModel);\n }\n\n get navigationSession(): NavigationSession {\n return this._navigationSessionModel.value;\n }\n\n get navigationSessionModel(): ValueModel<NavigationSession> {\n return this._navigationSessionModel.readonly;\n }\n\n get activeVisits(): ListModel<Visit> {\n return this._activeVisits.readonly;\n }\n\n /**\n * placeRouter.navigate(placeDestinations.somePlace.createVisit(routeId, ...visitParams));\n * @param visit\n */\n @Trace()\n async navigate(visit: Visit, options?: { relativeTo: ActivatedRoute }) {\n this.doNavigation(visit, async router => {\n const commands = [\n visit.placeDefinition.path,\n ...this.createRouteParameters(visit)\n ];\n await this.router.navigate(commands, {\n relativeTo: options ? options.relativeTo : null\n });\n });\n }\n\n @Trace()\n async pushVisitChangesToRoute(activatedRoute: ActivatedRoute, previous: Visit, next: Visit) {\n\n // we have to push to history so our remember sanitisers don't pick up the previous value\n // when it's been cleared by the user.\n this.placeHistory.add(next);\n\n // FIXME: no route id -> route id duplicates route parameters\n if (next.hasRoutingChangedFrom(previous)) {\n return this.doNavigation(next, router => {\n const relativePath = !!previous.placeDefinition.hasRouteId() ? '..' : '.';\n const commands = [\n relativePath,\n ...this.createRouteParameters(next),\n ...this.extractChildPath(activatedRoute.snapshot)\n ];\n console.log('### Redirect', commands);\n return router.navigate(commands, {\n relativeTo: activatedRoute\n });\n });\n }\n }\n\n async doNavigation(visit: Visit, customNavigation: (router: Router) => any) {\n this._navigationSessionModel.value = NavigationSession.createInternal(visit);\n try {\n await customNavigation(this.router);\n } finally {\n if (this.navigationSession && !this.router.getCurrentNavigation()) {\n this.onAngularRouterFinished();\n }\n }\n }\n\n private createRouteParameters(visit: Visit) {\n const def = visit.placeDefinition;\n return visit.hasRouteId() ?\n [def.getFormattedRouteId(visit), def.getFormattedRouteParameters(visit)] :\n [def.getFormattedRouteParameters(visit)];\n }\n\n// @Trace()\n private onAngularRouterStarted(event: NavigationStart) {\n if (!this.navigationSession) { // We been activated by an external route rather than placeRouter.go(visit)\n console.log('navigation started', { firstTime: this.firstRoute });\n const session = NavigationSession.createExternal(this.firstRoute);\n if (event.navigationTrigger === 'popstate') {\n session.setPopstateReturn(this.router.routerState.snapshot.url);\n }\n this._navigationSessionModel.value = session;\n }\n this.firstRoute = false;\n }\n\n // @Trace()\n private onAngularRouterFinished() {\n const session = this._navigationSessionModel.value;\n // Update visits before we end the navigation session. This allows the place out let to\n // gate ignore changes that occur while the visit is active\n const visits = session.getVisits();\n visits.forEach(v => {\n this.placeHistory.add(v);\n });\n this._activeVisits.value = visits;\n\n this._navigationSessionModel.value = null;\n }\n\n extractChildPath(activatedRoute: ActivatedRouteSnapshot): any[] {\n return _.flatten(activatedRoute.children.map(child => child.url));\n }\n}\n","import { animate, group, query, style, transition, trigger } from '@angular/animations';\n\n// Freezes the state of the components at the start of the animation.\nconst animationStartStyle = style({ position: 'absolute', top: '0', left: '0', bottom: '0', right: '0' });\n\nconst left = [\n query(':enter, :leave', animationStartStyle, { optional: true }),\n group([\n query(':enter', [\n style({ transform: 'translateX(-100%)' }),\n animate('{{duration}} ease-out', style({ transform: 'translateX(0%)' }))\n ], {\n optional: true\n }),\n query(':leave', [\n style({ transform: 'translateX(0%)' }),\n animate('{{duration}} ease-out', style({ transform: 'translateX(100%)' }))\n ], {\n optional: true\n })\n ])\n];\n\nconst right = [\n query(':enter, :leave', animationStartStyle, { optional: true }),\n group([\n query(':enter', [\n style({ transform: 'translateX(100%)' }),\n animate('{{duration}} ease-out', style({ transform: 'translateX(0%)' }))\n ], {\n optional: true\n }),\n query(':leave', [style({ transform: 'translateX(0%)' }), animate('{{duration}} ease-out', style({ transform: 'translateX(-100%)' }))], {\n optional: true\n })\n ])\n];\n\nexport function leftRightPlaceAnimation(duration: string) {\n return trigger('routeAnimations', [\n transition(':increment', right, { params: { duration: duration } }),\n transition(':decrement', left, { params: { duration: duration } })\n ]);\n}\n\nexport const LEFT_RIGHT_PLACE_ANIMATION = leftRightPlaceAnimation('0.3s');\n","import { Component, EventEmitter, Input, OnInit, Optional, Output, SkipSelf, ViewChild } from '@angular/core';\nimport { ActivatedRoute, Router, RouterOutlet } from '@angular/router';\nimport { Dsl, Guard, MutableValueModel, Trace, ValueModel } from '@coolon/pectin';\nimport { DisposableComponent } from '../../../components/disposable-component';\nimport { PlaceComponent } from '../../place-component';\nimport { PlaceDefinition } from '../../place-definition';\nimport { PlaceRouter } from '../../place-router';\n\nimport { Visit } from '../../visit';\nimport { LEFT_RIGHT_PLACE_ANIMATION } from './route-animations';\n\n// Quick hack to avoid circular references between this and PlaceComponents.\ninterface PlaceRef {\n readonly placeDefinition: PlaceDefinition\n\n initialiseBindings(param: ValueModel<Visit>): void;\n\n onPlaceReady(): void;\n}\n\n@Component({\n selector: 'angular-ui-powerups-place-outlet',\n templateUrl: './place-outlet.component.html',\n styleUrls: ['./place-outlet.component.scss'],\n animations: [LEFT_RIGHT_PLACE_ANIMATION]\n})\nexport class PlaceOutletComponent extends DisposableComponent implements OnInit {\n\n @Input()\n animate = true;\n\n @Output()\n readonly placeChanged = new EventEmitter<PlaceComponent>();\n\n @ViewChild('routeOutlet', { static: true })\n routerOut: RouterOutlet;\n\n private readonly _activePlace = new MutableValueModel<PlaceComponent>();\n\n private readonly _inOutletUpdate = new Guard();\n private readonly _activatedRouteModel = new MutableValueModel<ActivatedRoute>();\n private readonly _placeDefinition = new MutableValueModel<PlaceDefinition>();\n\n /** TODO: This is now really a visit */\n readonly _placeVisit = new MutableValueModel<Visit>();\n\n constructor(private readonly router: Router, private readonly placeRouter: PlaceRouter, @SkipSelf() @Optional() readonly parentOutlet: PlaceOutletComponent) {\n super();\n const { chain, valueOf, before, when, after, observe, switchOn } = Dsl.disposeWith(this);\n\n // Handle incoming route changes.\n const inRouteVisitUpdate = new Guard();\n const routeVisit = chain(this._activePlace).pluck('placeDefinition').findIn(placeRouter.activeVisitIndex);\n when.valueOf(routeVisit).changes((visit) => {\n if (visit) {\n inRouteVisitUpdate.whileTrue(() => {\n this._placeVisit.value = visit;\n });\n }\n });\n\n // Handle component based changes\n when.valueOf(this._placeVisit).changes((next, previous) => {\n this.pushVisitChangesToRoute(next, previous);\n }, {\n unless: inRouteVisitUpdate\n });\n\n chain(this._activePlace)\n .postponeWhile(placeRouter.navigationSessionActive)\n .subscribe(place => this.placeChanged.emit(place));\n\n // const txo = new TransactionObserver().onEvent(e => console.log(e.toString()));\n // txo.observe('inRouteVisitUpdate', inRouteVisitUpdate);\n\n }\n\n ngOnInit() {\n }\n\n @Trace()\n navigate(visit: Visit) {\n console.log({ activatedRoute: this._activatedRouteModel.value });\n this.placeRouter.navigate(visit, {\n relativeTo: this.parentOutlet ? this.parentOutlet.activatedRouteModel.value : null\n });\n }\n\n pushVisitChangesToRoute(next: Visit, previous: Visit) {\n const activatedRoute = this._activatedRouteModel.value;\n this.placeRouter.pushVisitChangesToRoute(activatedRoute, previous, next);\n }\n\n get activePlaceModel(): ValueModel<PlaceComponent> {\n return this._activePlace.readonly;\n }\n\n get activatedRouteModel(): ValueModel<ActivatedRoute> {\n return this._activatedRouteModel.readonly;\n }\n\n @Trace()\n onOutletActivated(routerOutlet: RouterOutlet, place: PlaceComponent) {\n this._inOutletUpdate.whileTrue(() => {\n try {\n this._activePlace.value = place;\n this._activatedRouteModel.value = routerOutlet.activatedRoute;\n this._placeDefinition.value = place.placeDefinition;\n place.initialiseBindings(this._placeVisit);\n } catch (error) {\n console.error(error);\n }\n });\n if (!this.animate) {\n // we're not animating so trigger any post animation callbacks now.\n this.animationDone();\n }\n }\n\n @Trace()\n onOutletDeactivated(routerOutlet: RouterOutlet, $event: PlaceRef) {\n this._inOutletUpdate.whileTrue(() => {\n this._activePlace.value = null;\n this._activatedRouteModel.value = null;\n this._placeDefinition.value = null;\n });\n }\n\n getPlaceOrder(outlet: RouterOutlet) {\n return this.animate && outlet && outlet.activatedRouteData && outlet.activatedRouteData['placeOrder'];\n }\n\n animationDone() {\n if (this._activePlace.value) {\n this._activePlace.value.onPlaceReady();\n }\n }\n\n\n}\n","import { Component } from '@angular/core';\nimport { AbstractPlaceNavigationComponent } from '../abstract-place-navigation.component';\n\n@Component({\n selector: 'angular-ui-powerups-tabbed-place-navigation',\n templateUrl: './tabbed-place-navigation.component.html',\n styleUrls: ['./tabbed-place-navigation.component.scss']\n})\nexport class TabbedPlaceNavigationComponent extends AbstractPlaceNavigationComponent {\n constructor() {\n super();\n }\n}\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { MatProgressSpinnerModule } from '@angular/material';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatListModule } from '@angular/material/list';\nimport { MatTabsModule } from '@angular/material/tabs';\nimport { MatTooltipModule } from '@angular/material/tooltip';\nimport { BrowserAnimationsModule } from '@angular/platform-browser/animations';\nimport { RouterModule } from '@angular/router';\nimport { BusyOverlayComponent } from './components/busy-overlay/busy-overlay.component';\nimport { EmptyStateComponent } from './components/empty-state/empty-state.component';\nimport { ListPlaceNavComponent } from './components/list-place-nav/list-place-nav.component';\nimport { PlaceOutletComponent } from './components/place-outlet/place-outlet.component';\nimport { TabbedPlaceNavigationComponent } from './components/tabbed-place-navigation/tabbed-place-navigation.component';\n\n@NgModule({\n imports: [\n CommonModule,\n BrowserAnimationsModule,\n MatProgressSpinnerModule,\n RouterModule,\n MatTabsModule,\n MatListModule,\n MatTooltipModule,\n MatIconModule\n ],\n declarations: [\n EmptyStateComponent,\n BusyOverlayComponent,\n PlaceOutletComponent,\n TabbedPlaceNavigationComponent,\n ListPlaceNavComponent\n ],\n entryComponents: [BusyOverlayComponent],\n exports: [\n BusyOverlayComponent,\n PlaceOutletComponent,\n EmptyStateComponent,\n TabbedPlaceNavigationComponent,\n ListPlaceNavComponent\n ],\n providers: []\n})\nexport class PlaceModule {\n\n}\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { MatFormFieldModule, MatInputModule, MatSelectModule } from '@angular/material';\nimport { MatTabsModule } from '@angular/material/tabs';\nimport { BrowserAnimationsModule } from '@angular/platform-browser/animations';\nimport { NumberInputComponent } from './components/forms/number-input/number-input.component';\nimport { PasswordInputComponent } from './components/forms/password-input/password-input.component';\nimport { SelectInputComponent } from './components/forms/select-input/select-input.component';\nimport { StringInputComponent } from './components/forms/string-input/string-input.component';\nimport { NoopComponent } from './components/noop/noop.component';\nimport { CommandDirective } from './directives/command.directive';\nimport { FocusBindingDirective } from './directives/focus-binding.directive';\nimport { InteractionModule } from './interaction/interaction.module';\nimport { PlaceModule } from './place/place.module';\n\n@NgModule({\n declarations: [\n CommandDirective,\n FocusBindingDirective,\n NumberInputComponent,\n StringInputComponent,\n PasswordInputComponent,\n SelectInputComponent,\n NoopComponent\n ],\n imports: [\n CommonModule,\n BrowserAnimationsModule,\n FormsModule,\n MatInputModule,\n MatFormFieldModule,\n MatSelectModule,\n MatTabsModule,\n PlaceModule,\n InteractionModule\n ],\n exports: [\n CommandDirective,\n FocusBindingDirective,\n NumberInputComponent,\n StringInputComponent,\n PasswordInputComponent,\n SelectInputComponent,\n InteractionModule,\n PlaceModule,\n NoopComponent\n ]\n\n})\nexport class AngularUiPowerupsModule {\n}\n","import { animate, AnimationStyleMetadata, style, transition, trigger } from '@angular/animations';\nimport { OptionsHelper } from '@coolon/pectin';\n\nconst defaultHiddenStyleDef = style({\n opacity: 0,\n 'height': '0',\n paddingTop: '0',\n paddingBottom: '0'\n});\n\nexport function slideDownAndUpAnimation(triggerName: string, options?: {\n duration?: string;\n hiddenStyleDef?: AnimationStyleMetadata;\n}) {\n // SEE to fix this: https://github.com/angular/angular/issues/15587#issuecomment-351510501\n const duration = OptionsHelper.get(options).getOptional('duration', '100ms');\n const hiddenStyleDef = OptionsHelper.get(options).getOptional('hiddenStyleDef', defaultHiddenStyleDef);\n return trigger(triggerName, [\n transition(':enter', [hiddenStyleDef, animate('100ms')]),\n transition(':leave', [animate('100ms', hiddenStyleDef)])\n ]);\n}\n\n// export function slideOutLeftAnimation(triggerName: string, duration:string = \"100ms\") {\n// return trigger(triggerName, [\n// state('true', style(\n// {\n// 'width': '*',\n// 'overflow': 'hidden',\n// 'opacity': '1'\n// })),\n// state('false', style({\n// 'width': '0px',\n// 'overflow': 'hidden',\n// 'opacity': '0'\n// })),\n// transition('* => *', [animate(duration)])\n// ]);\n// }\n","export class Dimension {\n constructor(readonly width: number, readonly height: number) {\n }\n}\n","export class Point {\n\n static from(data: { x: number, y: number }) {\n return new Point(data.x, data.y);\n }\n\n constructor(readonly x: number, readonly y: number) {\n }\n\n translate(x: number, y: number): Point {\n return new Point(this.x + x, this.y + y);\n }\n}\n","import { Dimension } from './dimension.class';\nimport { Point } from './point.class';\n\nexport class Bounds extends Dimension {\n\n constructor(readonly top: number, readonly left: number, readonly width: number, readonly height: number) {\n super(width, height);\n }\n\n relativePositionOf(point: { x: number, y: number } | MouseEvent) {\n if (point instanceof MouseEvent) {\n return new Point(point.clientX - this.left, point.clientY - this.top);\n } else {\n return new Point(point.x - this.left, point.y - this.top);\n }\n }\n}\n\nexport namespace Bounds {\n export function ofElement(element: HTMLElement): Bounds {\n const rect = element.getBoundingClientRect();\n return new Bounds(rect.top, rect.left, rect.width, rect.height);\n }\n}\n\n","import { AfterViewInit, ElementRef, NgZone } from '@angular/core';\nimport { ValueHolder, ValueModel } from '@coolon/pectin';\nimport ResizeObserver from 'resize-observer-polyfill';\nimport { DisposableComponent } from './disposable-component';\nimport { Bounds } from './types/bounds.class';\nimport { Point } from './types/point.class';\n\nexport class ResizeAwareComponent extends DisposableComponent implements AfterViewInit {\n\n private _boundsModel = new ValueHolder<Bounds>(new Bounds(0, 0, 0, 0));\n\n constructor(protected readonly elementRef: ElementRef, protected readonly ngZone: NgZone) {\n super();\n }\n\n ngAfterViewInit(): void {\n this.updateBounds();\n const element = this.elementRef.nativeElement;\n const ro = new ResizeObserver((entries, observer) => {\n this.ngZone.run(() => this.updateBounds());\n });\n ro.observe(element);\n this.onDispose(() => ro.disconnect());\n }\n\n get boundsModel(): ValueModel<Bounds> {\n return this._boundsModel.readonly;\n }\n\n get nativeElement() {\n return this.elementRef.nativeElement;\n }\n\n // TODO: Make this handle body scroll\n public relativePositionOf(point: { x: number, y: number } | MouseEvent): Point {\n return this.bounds.relativePositionOf(point);\n }\n\n get bounds(): Bounds {\n return this._boundsModel.value;\n }\n\n private updateBounds() {\n this._boundsModel.value = Bounds.ofElement(this.nativeElement);\n }\n\n\n}\n\nexport namespace ResizeAwareComponent {\n\n}\n","export interface Result<R, E> {\n // catch(callback: (error: E) => void): Result<R,E>;\n}\n\nexport namespace Result {\n export interface Callback<R, E> {\n then: <T>(result: R) => T;\n catch: <T>(result: E) => T;\n }\n\n}\n\n// const r:Result<string, number> = null;\n\n// r.catch(e => {}).then();\n\n","import _ from 'lodash';\n\nexport interface Formatter<T> {\n format(value: T): string;\n\n parse(value: string): T;\n}\n\nexport namespace Formatter {\n\n class StringType implements Formatter<string> {\n format(value: string): string {\n return value;\n }\n\n parse(value: string): string {\n return value;\n }\n }\n\n class NumberType implements Formatter<number> {\n format(value: number): string {\n return _.isNumber(value) && !_.isNaN(value) ? `${value}` : null;\n }\n\n parse(value: string): number {\n const parsed = Number.parseFloat(value);\n return _.isNaN(parsed) ? null : parsed;\n }\n }\n\n class BooleanType implements Formatter<boolean> {\n format(value: boolean): string {\n return value ? 'true' : 'false';\n }\n\n parse(value: string): boolean {\n return value === 'true';\n }\n }\n\n export const STRING = new StringType();\n export const NUMBER = new NumberType();\n export const BOOLEAN = new BooleanType();\n}\n","import { Injectable, Injector } from '@angular/core';\nimport {\n ActivatedRouteSnapshot,\n CanActivate,\n CanDeactivate,\n Router,\n RouterStateSnapshot,\n UrlTree\n} from '@angular/router';\nimport { Trace } from '@coolon/pectin';\nimport { Observable } from 'rxjs';\nimport { NoopComponent } from '../../components/noop/noop.component';\nimport { InteractionContext } from '../interaction-context';\n\n\n@Injectable({\n providedIn: 'root'\n})\nexport class InteractionGuard implements CanDeactivate<NoopComponent>, CanActivate {\n\n constructor(private router: Router, private injector: Injector, private readonly interactionContext: InteractionContext) {\n }\n\n @Trace()\n canActivate(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): Observable<boolean | UrlTree> | Promise<boolean | UrlTree> | boolean | UrlTree {\n return true;\n }\n\n @Trace()\n canDeactivate(component: NoopComponent, currentRoute: ActivatedRouteSnapshot, currentState: RouterStateSnapshot, nextState?: RouterStateSnapshot): Observable<boolean | UrlTree> | Promise<boolean | UrlTree> | boolean | UrlTree {\n return !this.interactionContext.isActive();\n }\n\n}\n","import { Constructable, lang } from '@coolon/pectin';\nimport * as _ from 'lodash';\nimport { PlaceComponent } from './place-component';\nimport { PlaceDefinition } from './place-definition';\n\nexport function Place(options: Place.Options) {\n return (target: Function) => {\n if (PlaceComponent.isPlaceComponentConstructor(target)) {\n PlaceComponent.injectDefinition(target, new PlaceDefinition(\n target,\n options.path,\n _.isNil(options.authenticate) ? false : options.authenticate,\n options.order,\n options.data,\n PlaceComponent.getRouteParameters(target),\n (options.children || []).map(c => PlaceComponent.getDefinition(c))\n ));\n\n } else {\n lang.illegalState(`${target} must extend PlaceComponent to use the @Place decorator`);\n }\n };\n}\n\nexport namespace Place {\n\n export interface Options {\n path: string,\n order: number;\n data?: { [key: string]: any }, // defaults to true\n authenticate?: boolean, // defaults to true\n children?: Constructable<PlaceComponent>[]\n }\n\n}\n","import { Injector } from '@angular/core';\nimport { ActivatedRouteSnapshot, Router } from '@angular/router';\nimport { Trace } from '@coolon/pectin';\nimport { PlaceHistory } from '../place-history';\nimport { Visit } from '../visit';\n\nexport class VisitSanitiser {\n constructor(private activatedRoute: ActivatedRouteSnapshot, private router: Router, private placeHistory: PlaceHistory, private injector: Injector) {\n\n }\n\n // @Trace()\n async sanitise(visit: Visit): Promise<Visit> {\n const placeDef = visit.placeDefinition;\n if (placeDef.hasRouteId()) {\n const routeIdDef = placeDef.getRouteIdParameterDef();\n const routeId = visit.getRouteId();\n const sanitisedValue = await routeIdDef.sanitise(routeId, visit, this.placeHistory, this.injector);\n console.log({routeId, sanitisedValue});\n // ###------- EARLY EXIT --------###\n if (routeIdDef.hasChanged(routeId, sanitisedValue)) {\n // if the route id has changed we redirect immediately as other\n // parameter sanitisers might use it.\n return visit.replace(routeIdDef, sanitisedValue);\n }\n }\n\n // if we didn't replace the routeId we continue the url present parameters.\n const parameterDefs = placeDef.getVisitParameterDefs({\n includeRouteParameters: true,\n includeNonRouteParameters: true\n });\n let sanitisedVisit: Visit = visit;\n for (let i = 0; i < parameterDefs.length; i++) {\n const def = parameterDefs[i];\n const value = visit.getParameter(def.name);\n const sanitisedValue = await def.sanitise(value, sanitisedVisit, this.placeHistory, this.injector);\n if (def.hasChanged(value, sanitisedValue)) {\n sanitisedVisit = sanitisedVisit.replace(def, sanitisedValue);\n }\n }\n\n return sanitisedVisit.hasChangedFrom(visit) ? sanitisedVisit : visit;\n }\n\n}\n","import { Location } from '@angular/common';\nimport { Injectable, Injector } from '@angular/core';\nimport { ActivatedRouteSnapshot, CanDeactivate, Router, RouterStateSnapshot } from '@angular/router';\nimport { InteractionContext } from '../../../interaction/interaction-context';\nimport { PlaceComponent } from '../../place-component';\nimport { PlaceRouter } from '../../place-router';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class LeavePlaceGuard implements CanDeactivate<PlaceComponent> {\n\n constructor(private router: Router,\n private injector: Injector,\n private placeRouter: PlaceRouter,\n readonly interactionContext: InteractionContext, readonly angularLocation: Location) {\n }\n\n private isLeavingTheCurrentPlace(nextState: RouterStateSnapshot, placeDefinitionPath: string) {\n // TODO: this will break with child routes... need to examine the router states properly.\n return !nextState.url.startsWith(placeDefinitionPath);\n }\n\n async canDeactivate(component: PlaceComponent, currentRoute: ActivatedRouteSnapshot, currentState: RouterStateSnapshot, nextState?: RouterStateSnapshot): Promise<boolean> {\n const placeDefinitionPath = `/${component.placeDefinition.path}`;\n // console.log('canDeactivate', {\n // staticPath: placeDefinitionPath,\n // currentStateUrl: currentState.url,\n // nextStateUrl: nextState.url\n // // alreadyDeclined: this._alreadyAccepted\n // });\n // Example of the above when navigating to a different child route.\n // canDeactivate {staticPath: \"/hero-details\",\n // currentStateUrl: \"/route-parameters/-1;dv=A;dl=a,b,c;rdv=A;rdl=a,b,c/hero-details\",\n // nextStateUrl: \"/route-parameters/-1;dv=A;dl=a,b,c;rdv=A;rdl=a,b,c/hero-stats\"\n // }\n\n // Example clicking on router tab of the parent component (de-activates the parent due to route param changes)\n // canDeactivate {\n // staticPath: \"/hero-stats\",\n // currentStateUrl: \"/route-parameters/-1;dv=A;dl=a,b,c;rdv=A;rdl=a,b,c/hero-stats\",\n // nextStateUrl: \"/route-parameters/\"\n // }\n // canDeactivate {\n // staticPath: \"/route-parameters\",\n // currentStateUrl: \"/route-parameters/-1;dv=A;dl=a,b,c;rdv=A;rdl=a,b,c/hero-stats\",\n // nextStateUrl: \"/route-parameters/\"\n // }\n // logger.class.js:54 ParameterSnapshot.sanitise -> {idModel: -1, pv: undefined, pl: Array(0), dv: undefined, dl: Array(0), â¦}\n // parameter-snapshot.ts:20 {name: \"idModel\", mine: -1, theirs: null}\n // place-router.ts:28 redirect path (3) [\"route-parameters\", \"-1\", {â¦}]\n // canDeactivate {\n // staticPath: \"/hero-stats\",\n // currentStateUrl: \"/route-parameters/-1;dv=A;dl=a,b,c;rdv=A;rdl=a,b,c/hero-stats\",\n // nextStateUrl: \"/route-parameters/-1\"\n // }\n // canDeactivate {\n // staticPath: \"/route-parameters\",\n // currentStateUrl: \"/route-parameters/-1;dv=A;dl=a,b,c;rdv=A;rdl=a,b,c/hero-stats\",\n // nextStateUrl: \"/route-parameters/-1\"\n // }\n // logger.class.js:54 ParameterSnapshot.sanitise -> {idModel: -1, pv: undefined, pl: Array(0), dv: \"A\", dl: Array(3), â¦}\n // parameter-snapshot.ts:20 {name: \"dv\", mine: \"A\", theirs: undefined}\n // place-router.ts:28 redirect path (3) [\"route-parameters\", \"-1\", {â¦}]\n // canDeactivate {\n // staticPath: \"/hero-stats\",\n // currentStateUrl: \"/route-parameters/-1;dv=A;dl=a,b,c;rdv=A;rdl=a,b,c/hero-stats\",\n // nextStateUrl: \"/route-parameters/-1;dv=A;dl=a,b,c;rdv=A;rdl=a,b,c\"\n // }\n\n\n // TODO: Add tests\n if (this.placeRouter.navigationSession.alreadyAccepted(component)) {\n // We'll get called multiple times if there's any parameter sanitisation so\n // we always return true if we accepted on a previous cycle of the current\n // navigation session.\n return true;\n } else {\n const self = this;\n let canLeave = true;\n\n if (this.isLeavingTheCurrentPlace(nextState, placeDefinitionPath)) {\n // we check the interaction first, so that components that don't need to check if they're in an\n // interaction during the canDeactivate cycle.\n // TODO: Add tests: show dialog -> hit back -> same route\n if (this.interactionContext.isActive()) {\n canLeave = false;\n console.log('cancelling', { activity: this.interactionContext.currentActivity });\n this.interactionContext.currentActivity.cancel(null);\n }\n // No interaction in progress, so ask the component .\n // This may start an interaction, hence checking the interaction context above. I.e. if the place pops up the dialog, and\n // the user clicks back again, we'll re-enter here and go bang when the component tries to open another\n // dialog.\n if (canLeave) {\n // TODO: Add tests: hit back -> confirm leave dialog -> hit back -> close dialog -> hit back -> confirm leave dialog.\n canLeave = await component.canDeactivate();\n }\n\n\n // We also block back button parameter changes while the dialog is open.\n // NOTE: Now that I'm catching parameter changes I could possibly retry using a fragment or\n // query parameter to track the dialog being open. Previously I was just checking this on\n // path changes... if that worked it'd fix the case where the back button breaks with an activity\n // open on the first page: https://coolon.atlassian.net/browse/AUP-33\n } else {\n if (this.interactionContext.isActive()) {\n console.log('cancelling', { activity: this.interactionContext.currentActivity });\n this.interactionContext.currentActivity.cancel(null);\n canLeave = false;\n } else {\n canLeave = true;\n }\n }\n\n if (canLeave) {\n // We'll get called multiple times if there's any parameter sanitisation so\n // we remember the acceptance for the duration of the current navigation session.\n self.placeRouter.navigationSession.rememberAcceptanceOf(component);\n } else {\n // Angular doesn't preserve the url when a guard cancels the back button.\n // See https://github.com/angular/angular/issues/13586#issuecomment-432795720\n if (this.placeRouter.navigationSession.isPopState) {\n console.log('cancelled during popstate');\n this.angularLocation.go(this.placeRouter.navigationSession.popStateReturnUrl);\n }\n }\n\n return canLeave;\n }\n }\n}\n","import { Injectable, Injector } from '@angular/core';\nimport {\n ActivatedRouteSnapshot,\n CanActivate,\n ParamMap,\n Router,\n RouterStateSnapshot,\n UrlSegment,\n UrlTree\n} from '@angular/router';\nimport { lang, Trace } from '@coolon/pectin';\nimport { Memoize } from '@typescript-plus/fast-memoize-decorator/dist/src';\nimport { PlaceComponent } from '../../place-component';\nimport { PlaceHistory } from '../../place-history';\nimport { PlaceRouter } from '../../place-router';\nimport { Visit } from '../../visit';\nimport { VisitSanitiser } from '../visit-sanitiser';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class PlaceRouteGuard implements CanActivate {\n\n constructor(private readonly router: Router,\n private readonly placeRouter: PlaceRouter,\n private readonly placeHistory: PlaceHistory,\n private readonly injector: Injector) {\n }\n\n // @Trace()\n async canActivate(activatedRoute: ActivatedRouteSnapshot, state: RouterStateSnapshot): Promise<boolean | UrlTree> {\n if (PlaceComponent.isPlaceComponentConstructor(activatedRoute.component)) {\n const placeDefinition = PlaceComponent.getDefinition(activatedRoute.component);\n // Parse our route params.\n const params = new PlaceRouteGuard.ConsolidatedParameterMap(activatedRoute.paramMap, activatedRoute.url);\n const parsedParams = placeDefinition.parseRouteParams(params);\n\n const initialVisit = this.placeRouter.navigationSession.getVisitFor(placeDefinition) || new Visit(placeDefinition, parsedParams);\n const sanitiser = new VisitSanitiser(activatedRoute, this.router, this.placeHistory, this.injector);\n const sanitisedVisit = await sanitiser.sanitise(initialVisit.mergeRouteParameters(parsedParams));\n\n // Save the visit with any updated parameters. We need to save it so we remember any non route parameters\n this.placeRouter.navigationSession.storeVisit(sanitisedVisit);\n if (initialVisit.hasRoutingChangedFrom(sanitisedVisit)) {\n const parameterCommands = sanitisedVisit.hasRouteId() ?\n [placeDefinition.getFormattedRouteId(sanitisedVisit), placeDefinition.getFormattedRouteParameters(sanitisedVisit)] :\n [placeDefinition.getFormattedRouteParameters(sanitisedVisit)];\n\n const commands = [(activatedRoute.url[0].path)].concat(parameterCommands, this.placeRouter.extractChildPath(activatedRoute));\n console.log('##### Redirect', commands);\n return this.router.createUrlTree(commands, {\n replaceUrl: true,\n skipLocationChange: false\n });\n } else {\n return true;\n }\n } else {\n return lang.illegalState(`expected component to be an instance of PlaceComponent, got ${activatedRoute.component}`);\n }\n }\n\n\n}\n\nexport namespace PlaceRouteGuard {\n /**\n * This a work around for the fact that an activated route with multiple segments doesn't\n * include the segment params in the paramMap as well as each segment returns an empty\n * param map even when `parameter`s has content.\n */\n export class ConsolidatedParameterMap implements ParamMap {\n\n private paramMaps: ParamMap[];\n\n constructor(paramMap: ParamMap, urlSegments: UrlSegment[]) {\n this.paramMaps = [paramMap].concat(\n (urlSegments || []).map(s => new ParamMapAdapter(s.parameters))\n ).filter(m => !!m); // the activated route param map can be null\n }\n\n get(name: string): string | null {\n const paramMap = this.paramMaps.find(m => m.has(name));\n return paramMap.get(name);\n }\n\n getAll(name: string): string[] {\n const paramMap = this.paramMaps.find(m => m.has(name));\n return paramMap.getAll(name);\n }\n\n has(name: string): boolean {\n return !!this.paramMaps.find(m => m.has(name));\n }\n\n @Memoize()\n get keys(): string[] {\n return this.paramMaps.reduce((result, params) => result.concat(params.keys), []);\n }\n }\n\n class ParamMapAdapter implements ParamMap {\n constructor(private readonly params: { [p: string]: string }) {\n }\n\n get(name: string): string | null {\n return this.params[name];\n }\n\n getAll(name: string): string[] {\n const value = this.get(name);\n return Array.isArray(value) ? value : [value];\n }\n\n has(name: string): boolean {\n return this.keys.includes(name);\n }\n\n get keys(): string[] {\n return Object.keys(this.params);\n }\n\n }\n}\n","import { UseDelegate } from '@coolon/pectin';\nimport { Klass, Opts } from '@coolon/typescript-utilities';\nimport { ROUTE_PARAMETER_LIST_KEY } from '../place-component';\nimport { ParameterDefinition } from './parameter-definition.class';\nimport { Formatter } from './formatter';\n\n\nexport interface RouteIdOptions<T> {\n as?: string;\n optional?: boolean;\n remember?: boolean;\n defaultValue?: T;\n // sanitiser?: Constructable<ParameterSanitiser<T>> | ParameterSanitiser<T>;\n}\n\nexport interface RouteParameterOptions<T> {\n as?: string;\n optional?: boolean;\n remember?: boolean;\n defaultValue?: T;\n storeInUrl?: Formatter<T>\n // sanitiser?: Constructable<ParameterSanitiser<T>> | ParameterSanitiser<T>;\n}\n\nexport interface RouteListParameterOptions<T> {\n as?: string;\n optional?: boolean;\n remember?: boolean;\n defaultValue?: T[];\n storeInUrl?: Formatter<T>\n // sanitiser?: Constructable<ParameterSanitiser<T[]>> | ParameterSanitiser<T[]>;\n}\n\nexport function RouteId<T extends string | number>(type: Formatter<T>, options?: RouteIdOptions<T>): PropertyDecorator {\n return (prototype: Object, propertyKey: string | symbol) => {\n const param = new ParameterDefinition.RouteId(propertyKey.toString(), options, type);\n Klass.get(prototype).addToOwnMetadataList(ROUTE_PARAMETER_LIST_KEY, param);\n UseDelegate()(prototype, propertyKey);\n };\n}\n\nexport function VisitParameter<T>(options?: RouteParameterOptions<T>): PropertyDecorator {\n const opts = Opts.get(options);\n return (prototype: Object, propertyKey: string | symbol) => {\n const param = new ParameterDefinition.ValueParameter(propertyKey.toString(), options, opts.getOptional(\"storeInUrl\", null));\n Klass.get(prototype).addToOwnMetadataList(ROUTE_PARAMETER_LIST_KEY, param);\n UseDelegate()(prototype, propertyKey);\n };\n}\n\nexport function VisitParameterList<E>(options?: RouteListParameterOptions<E>): PropertyDecorator {\n const opts = Opts.get(options);\n return (prototype: Object, propertyKey: string | symbol) => {\n const param = new ParameterDefinition.ArrayParameter(propertyKey.toString(), options, opts.getOptional(\"storeInUrl\", null));\n Klass.get(prototype).addToOwnMetadataList(ROUTE_PARAMETER_LIST_KEY, param);\n UseDelegate()(prototype, propertyKey);\n };\n}\n\n// export function RouteParameter<T>(type: ParameterType<T>, options?: RouteParameterOptions<T>): PropertyDecorator {\n// return (prototype: Object, propertyKey: string | symbol) => {\n// const param = new ParameterDefinition.ValueParameter(propertyKey.toString(), options, type);\n// Klass.get(prototype).addToOwnMetadataList(ROUTE_PARAMETER_LIST_KEY, param);\n// UseDelegate()(prototype, propertyKey);\n// };\n// }\n//\n// export function RouteParameterList<E>(elementType: ParameterType<E>, options?: RouteListParameterOptions<E>): PropertyDecorator {\n// return (prototype: Object, propertyKey: string | symbol) => {\n// const param = new ParameterDefinition.ArrayParameter(propertyKey.toString(), options, elementType);\n// Klass.get(prototype).addToOwnMetadataList(ROUTE_PARAMETER_LIST_KEY, param);\n// UseDelegate()(prototype, propertyKey);\n// };\n// }\n"]}
|
|
1
|
+
{"version":3,"sources":["../../../../node_modules/tslib/tslib.es6.js","ng://@coolon/angular-ui-powerups/lib/components/disposable-component.ts","ng://@coolon/angular-ui-powerups/lib/components/forms/abstract-input.component.ts","ng://@coolon/angular-ui-powerups/lib/components/forms/number-input/number-input.component.ts","ng://@coolon/angular-ui-powerups/lib/components/forms/password-input/password-input.component.ts","ng://@coolon/angular-ui-powerups/lib/components/forms/select-input/select-input.component.ts","ng://@coolon/angular-ui-powerups/lib/components/forms/string-input/string-input.component.ts","ng://@coolon/angular-ui-powerups/lib/components/noop/noop.component.ts","ng://@coolon/angular-ui-powerups/lib/directives/command.directive.ts","ng://@coolon/angular-ui-powerups/lib/directives/focus-binding.directive.ts","ng://@coolon/angular-ui-powerups/lib/interaction/interaction-context.ts","ng://@coolon/angular-ui-powerups/lib/interaction/activity.ts","ng://@coolon/angular-ui-powerups/lib/interaction/components/activity-outlet/activity-outlet.component.ts","ng://@coolon/angular-ui-powerups/lib/interaction/abstract-activity.ts","ng://@coolon/angular-ui-powerups/lib/interaction/components/alert-dialog/alert-dialog.component.ts","ng://@coolon/angular-ui-powerups/lib/interaction/components/confirm-then-dialog/confirm-then-dialog.component.ts","ng://@coolon/angular-ui-powerups/lib/interaction/components/confirmation-dialog/confirmation-dialog.component.ts","ng://@coolon/angular-ui-powerups/lib/interaction/components/activity-container/activity-container.component.ts","ng://@coolon/angular-ui-powerups/lib/interaction/components/interaction-outlet/interaction-outlet.component.ts","ng://@coolon/angular-ui-powerups/lib/interaction/services/dialog-interaction.service.ts","ng://@coolon/angular-ui-powerups/lib/interaction/interaction.module.ts","ng://@coolon/angular-ui-powerups/lib/place/components/busy-overlay/busy-overlay.component.ts","ng://@coolon/angular-ui-powerups/lib/place/components/empty-state/empty-state.component.ts","ng://@coolon/angular-ui-powerups/lib/place/route/parameter-definition.class.ts","ng://@coolon/angular-ui-powerups/lib/place/place-definition.ts","ng://@coolon/angular-ui-powerups/lib/place/place-component.ts","ng://@coolon/angular-ui-powerups/lib/place/components/abstract-place-navigation.component.ts","ng://@coolon/angular-ui-powerups/lib/place/navigation-session.ts","ng://@coolon/angular-ui-powerups/lib/place/components/list-place-nav/list-place-nav.component.ts","ng://@coolon/angular-ui-powerups/lib/place/place-history.ts","ng://@coolon/angular-ui-powerups/lib/place/visit.ts","ng://@coolon/angular-ui-powerups/lib/place/place-router.ts","ng://@coolon/angular-ui-powerups/lib/place/components/place-outlet/route-animations.ts","ng://@coolon/angular-ui-powerups/lib/place/components/place-outlet/place-outlet.component.ts","ng://@coolon/angular-ui-powerups/lib/place/components/tabbed-place-navigation/tabbed-place-navigation.component.ts","ng://@coolon/angular-ui-powerups/lib/place/place.module.ts","ng://@coolon/angular-ui-powerups/lib/angular-ui-powerups.module.ts","ng://@coolon/angular-ui-powerups/lib/animations/slideDownAndUpAnimation.ts","ng://@coolon/angular-ui-powerups/lib/components/types/dimension.class.ts","ng://@coolon/angular-ui-powerups/lib/components/types/point.class.ts","ng://@coolon/angular-ui-powerups/lib/components/types/bounds.class.ts","ng://@coolon/angular-ui-powerups/lib/components/resize-aware.component.ts","ng://@coolon/angular-ui-powerups/lib/interaction/result.ts","ng://@coolon/angular-ui-powerups/lib/place/route/formatter.ts","ng://@coolon/angular-ui-powerups/lib/interaction/guards/interaction-guard.service.ts","ng://@coolon/angular-ui-powerups/lib/place/place.decorator.ts","ng://@coolon/angular-ui-powerups/lib/place/route/visit-sanitiser.ts","ng://@coolon/angular-ui-powerups/lib/place/route/guards/leave-place.guard.ts","ng://@coolon/angular-ui-powerups/lib/place/route/guards/place-route.guard.ts","ng://@coolon/angular-ui-powerups/lib/place/route/parameter-decorators.ts"],"names":["extendStatics","d","b","Object","setPrototypeOf","__proto__","Array","p","hasOwnProperty","__extends","__","this","constructor","prototype","create","__assign","assign","t","s","i","n","arguments","length","call","apply","__decorate","decorators","target","key","desc","c","r","getOwnPropertyDescriptor","Reflect","decorate","defineProperty","__metadata","metadataKey","metadataValue","metadata","__awaiter","thisArg","_arguments","P","generator","Promise","resolve","reject","fulfilled","value","step","next","e","rejected","result","done","then","__generator","body","f","y","g","_","label","sent","trys","ops","verb","throw","return","Symbol","iterator","v","op","TypeError","pop","push","__read","o","m","ar","error","__spread","concat","DisposableComponent","tslib_1.__extends","ngOnDestroy","dispose","GarbageCollector","AbstractInputComponent","_super","_this","valueModel","DelegatingFormValueModel","focus","EventEmitter","blur","enterKey","escapeKey","self","errorStateMatcher","isErrorState","control","form","hasErrors","model","setDelegate","notifyClick","safelyInvoke","clickCommand","notifyFocusIn","focusCommand","emit","notifyFocusOut","blurCommand","notifyEnterKey","enterCommand","notifyEscapeKey","escapeCommand","command","enabled","execute","ngOnInit","isEnabled","errorList","query","isEmpty","Input","args","Output","HostListener","tslib_1.__decorate","UseDelegate","ValueModel","NumberInputComponent","Component","selector","template","PasswordInputComponent","SelectInputComponent","optionLabelFormat","option","optionLabel","ListModel","StoreInListModel","StringInputComponent","NoopComponent","CommandDirective","elementRef","_commandParameterProvided","_commandParameter","assert","notNil","pectinCommand","UnaryCommand","lang","illegalState","ngAfterViewInit","chain","pectin","Dsl","disposeWith","subscribe","nativeElement","removeAttribute","tagName","setAttribute","$event","preventDefault","stopPropagation","withContext","event","commandParameter","console","warn","Directive","ElementRef","type","Inject","FocusBindingDirective","el","ngZone","document","onFocusIn","hasBinding","pectinFocusBinding","focusContext","onFocusOut","focused","alreadyHasFocus","tryAndFocus","Logger","get","isFocused","focusTarget","element","activeElement","retries","modelShouldStillHaveFocus","canFocus","log","requestAnimationFrame","focusBindingTarget","dimension","getBoundingClientRect","height","NgZone","DOCUMENT","InteractionContext","_.last","activityList","ACTIVITY_DATA","InjectionToken","Activity","_busyModel","DelegatingValueModel","withDefault","initialise","activityContext","isNil","_activityContext","onDone","cancel","onCancel","onActivityReady","readonly","busyWhile","busyModel","isBusy","Callbacks","ActivityOutletComponent","componentFactoryResolver","viewContainerRef","injector","loadActivity","Injector","providers","provide","useValue","interactionContext","activityData","parent","componentFactory","resolveComponentFactory","activityClass","clear","activityComponentRef","createComponent","instance","componentReady","component","ComponentFactoryResolver","ViewContainerRef","AbstractActivity","AlertDialogComponent","alert","exports","ɵbd","ConfirmThenDialogComponent","config","confirm","isDestructive","destructive","onConfirm","startActivity","activityType","data","catch","Data","ConfirmationDialogComponent","TabContext","activityCallbacks","_complete","isComponentRealised","_component","isComplete","ActivityContainerComponent","activityFinishedEvents","MutableStream","activityTabs","MutableListModel","finished","_activityList","_a","valueOf","before","when","after","observe","switchOn","throttle","onActivityFinished","initialContext","initialActivityOutletContext","isActive","parentInteractionContext","valuesFrom","outlets","changes","setTimeout","updateActivityList","tabs","animationDone","onAnimationFinished","context","publish","selectedIndex","confirmThen","synchroniseSelectedTabIndex","cleanupStaleActivities","runInTransaction","draft","slice","previousIndex","newIndex","findIndex","getSelectedOutlet","filter","map","toArray","ViewChild","static","ViewChildren","InteractionOutletComponent","DIALOG_INTERACTION_SERVICE_DEFAULTS","Guard","initialValue","store","read","whileTrue","fun","startTransaction","commit","runIfFalse","defaultValue","DialogInteractionService","dialogService","location","router","dialogServiceDefaults","matDialogDefaultConfig","DelegatingListModel","startingGuard","currentActivityId","cancelActivity","currentActivity","_startActivity","disableClose","a","name","join","uuid.v1","autoFocus","hasBackdrop","closeOnNavigation","panelClass","matDialogRef","open","activityContainer","componentInstance","safelyUpdateActivityListDelegate","close","afterClosed","promiseAlreadyFinished","updateSize","finally","delegate","Injectable","providedIn","MatDialog","Location","Router","MatDialogConfig","Optional","MAT_DIALOG_DEFAULT_OPTIONS","InteractionModule","NgModule","imports","CommonModule","MatButtonModule","MatDialogModule","MatTabsModule","PortalModule","RouterModule","declarations","entryComponents","BusyOverlayComponent","StoreInValueModel","EmptyStateComponent","ParameterDefinition","propertyName","options","urlFormat","Opts","remember","getOptional","getOptionValue","sanitise","visit","placeHistory","isMissingFrom","previousVisit","first","getHistory","placeDefinition","getParameter","isEmptyValue","hasParameter","Options","RouteId","isRouteId","isArray","hasChanged","ValueParameter","ArrayParameter","parameterName","isEqual","PlaceDefinition","path","authenticate","order","routeParameters","children","hasRouteId","getRouteIdParameterDef","find","getRouteParameterDefs","includeRouteId","getVisitParameterDefs","includeRouteParameters","include","opts","includeNonRouteParameters","isRouteParameter","getPlaceData","searchPlaceData","keys","found","getRouteIdFrom","routeIdParameterDef","getFormattedRouteId","format","getRouteId","getFormattedRouteParameters","forEach","def","isFalsey","getNonRouteParameters","parseRouteParams","params","has","values","getAll","parse","Memoize","ParameterOptions","PlaceComponent","DEFINITION_META_DATA_KEY","ROUTE_PARAMETER_LIST_KEY","initialiseBindings","parameterDef","installBinding","registerDisposable","Binding","toRight","toLeft","currentVisit","replace","getDefinition","canDeactivate","onPlaceReady","isPlaceComponentConstructor","constructorChain","includes","getRouteParameters","klass","Klass","getMetadataList","getMetadata","injectDefinition","definition","defineMetadata","AbstractPlaceNavigationComponent","placeDefinitions","placesModel","getNav","placeDef","navItem","title","tooltip","icon","NavigationSession","External","Internal","ListPlaceNavComponent","expanded","expandMenu","collapseMenu","toggleMenu","HostBinding","firstNavigation","_alreadyAccepted","_visits","Map","storeVisit","set","getVisitFor","mergePrivatePlaceParameters","alreadyAccepted","placeComponent","rememberAcceptanceOf","setPopstateReturn","url","_popStateReturnUrl","getVisits","from","isFirstTime","isExternal","createInternal","createExternal","firstTimeRoute","PlaceHistory","_history","add","state","history","previousState","last","hasChangedFrom","unshift","setHistory","Visit","visitParameters","_.isNil","parameter","mergeRouteParameters","routeParams","routeParameterKeys","hasRoutingChangedFrom","other","samePlace","sameRouteParameters","_.isEqual","PlaceRouter","angularLocation","firstRoute","_navigationSessionModel","MutableValueModel","_activeVisits","activeVisitIndex","indexBy","onUrlChange","events","NavigationStart","onAngularRouterStarted","NavigationEnd","NavigationError","onAngularRouterFinished","navigationSessionActive","navigationSessionModel","isNotNil","active","navigate","doNavigation","commands","createRouteParameters","relativeTo","pushVisitChangesToRoute","activatedRoute","previous","extractChildPath","snapshot","customNavigation","navigationSession","getCurrentNavigation","firstTime","session","navigationTrigger","routerState","visits","flatten","child","Trace","ActivatedRoute","animationStartStyle","style","position","top","left","bottom","right","optional","group","transform","animate","leftRightPlaceAnimation","duration","trigger","transition","LEFT_RIGHT_PLACE_ANIMATION","PlaceOutletComponent","placeRouter","parentOutlet","placeChanged","_activePlace","_inOutletUpdate","_activatedRouteModel","_placeDefinition","_placeVisit","routeVisit","pluck","findIn","inRouteVisitUpdate","unless","postponeWhile","place","activatedRouteModel","onOutletActivated","routerOutlet","onOutletDeactivated","getPlaceOrder","outlet","activatedRouteData","animations","SkipSelf","RouterOutlet","TabbedPlaceNavigationComponent","PlaceModule","BrowserAnimationsModule","MatProgressSpinnerModule","MatListModule","MatTooltipModule","MatIconModule","AngularUiPowerupsModule","FormsModule","MatInputModule","MatFormFieldModule","MatSelectModule","defaultHiddenStyleDef","opacity","paddingTop","paddingBottom","Dimension","width","Bounds","Point","x","translate","relativePositionOf","point","MouseEvent","clientX","clientY","ofElement","rect","ResizeAwareComponent","_boundsModel","ValueHolder","updateBounds","ro","ResizeObserver","entries","observer","run","onDispose","disconnect","bounds","Result","Callback","Formatter","StringType","NumberType","BooleanType","InteractionGuard","canActivate","route","currentRoute","currentState","nextState","ActivatedRouteSnapshot","RouterStateSnapshot","Place","isNumber","isNaN","parsed","Number","parseFloat","STRING","NUMBER","BOOLEAN","VisitSanitiser","routeIdDef","routeId","sanitisedValue","parameterDefs","sanitisedVisit","LeavePlaceGuard","isLeavingTheCurrentPlace","placeDefinitionPath","startsWith","self_1","canLeave","activity","isPopState","go","popStateReturnUrl","PlaceRouteGuard","ConsolidatedParameterMap","paramMap","parsedParams","initialVisit","parameterCommands","createUrlTree","replaceUrl","skipLocationChange","urlSegments","paramMaps","ParamMapAdapter","parameters","reduce","propertyKey","param","toString","addToOwnMetadataList","triggerName","OptionsHelper","hiddenStyleDef"],"mappings":"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","sourcesContent":["/*! *****************************************************************************\r\nCopyright (c) Microsoft Corporation. All rights reserved.\r\nLicensed under the Apache License, Version 2.0 (the \"License\"); you may not use\r\nthis file except in compliance with the License. You may obtain a copy of the\r\nLicense at http://www.apache.org/licenses/LICENSE-2.0\r\n\r\nTHIS CODE IS PROVIDED ON AN *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\r\nKIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED\r\nWARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR PURPOSE,\r\nMERCHANTABLITY OR NON-INFRINGEMENT.\r\n\r\nSee the Apache Version 2.0 License for specific language governing permissions\r\nand limitations under the License.\r\n***************************************************************************** */\r\n/* global Reflect, Promise */\r\n\r\nvar extendStatics = function(d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n};\r\n\r\nexport function __extends(d, b) {\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n}\r\n\r\nexport var __assign = function() {\r\n __assign = Object.assign || function __assign(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n }\r\n return t;\r\n }\r\n return __assign.apply(this, arguments);\r\n}\r\n\r\nexport function __rest(s, e) {\r\n var t = {};\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\r\n t[p] = s[p];\r\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\r\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\r\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\r\n t[p[i]] = s[p[i]];\r\n }\r\n return t;\r\n}\r\n\r\nexport function __decorate(decorators, target, key, desc) {\r\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n}\r\n\r\nexport function __param(paramIndex, decorator) {\r\n return function (target, key) { decorator(target, key, paramIndex); }\r\n}\r\n\r\nexport function __metadata(metadataKey, metadataValue) {\r\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\r\n}\r\n\r\nexport function __awaiter(thisArg, _arguments, P, generator) {\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : new P(function (resolve) { resolve(result.value); }).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n}\r\n\r\nexport function __generator(thisArg, body) {\r\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\r\n return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n function verb(n) { return function (v) { return step([n, v]); }; }\r\n function step(op) {\r\n if (f) throw new TypeError(\"Generator is already executing.\");\r\n while (_) try {\r\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\r\n if (y = 0, t) op = [op[0] & 2, t.value];\r\n switch (op[0]) {\r\n case 0: case 1: t = op; break;\r\n case 4: _.label++; return { value: op[1], done: false };\r\n case 5: _.label++; y = op[1]; op = [0]; continue;\r\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n default:\r\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n if (t[2]) _.ops.pop();\r\n _.trys.pop(); continue;\r\n }\r\n op = body.call(thisArg, _);\r\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n }\r\n}\r\n\r\nexport function __exportStar(m, exports) {\r\n for (var p in m) if (!exports.hasOwnProperty(p)) exports[p] = m[p];\r\n}\r\n\r\nexport function __values(o) {\r\n var m = typeof Symbol === \"function\" && o[Symbol.iterator], i = 0;\r\n if (m) return m.call(o);\r\n return {\r\n next: function () {\r\n if (o && i >= o.length) o = void 0;\r\n return { value: o && o[i++], done: !o };\r\n }\r\n };\r\n}\r\n\r\nexport function __read(o, n) {\r\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\r\n if (!m) return o;\r\n var i = m.call(o), r, ar = [], e;\r\n try {\r\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\r\n }\r\n catch (error) { e = { error: error }; }\r\n finally {\r\n try {\r\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\r\n }\r\n finally { if (e) throw e.error; }\r\n }\r\n return ar;\r\n}\r\n\r\nexport function __spread() {\r\n for (var ar = [], i = 0; i < arguments.length; i++)\r\n ar = ar.concat(__read(arguments[i]));\r\n return ar;\r\n}\r\n\r\nexport function __spreadArrays() {\r\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\r\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\r\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\r\n r[k] = a[j];\r\n return r;\r\n};\r\n\r\nexport function __await(v) {\r\n return this instanceof __await ? (this.v = v, this) : new __await(v);\r\n}\r\n\r\nexport function __asyncGenerator(thisArg, _arguments, generator) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var g = generator.apply(thisArg, _arguments || []), i, q = [];\r\n return i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i;\r\n function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; }\r\n function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\r\n function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\r\n function fulfill(value) { resume(\"next\", value); }\r\n function reject(value) { resume(\"throw\", value); }\r\n function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\r\n}\r\n\r\nexport function __asyncDelegator(o) {\r\n var i, p;\r\n return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\r\n function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: n === \"return\" } : f ? f(v) : v; } : f; }\r\n}\r\n\r\nexport function __asyncValues(o) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var m = o[Symbol.asyncIterator], i;\r\n return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\r\n function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\r\n function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\r\n}\r\n\r\nexport function __makeTemplateObject(cooked, raw) {\r\n if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\r\n return cooked;\r\n};\r\n\r\nexport function __importStar(mod) {\r\n if (mod && mod.__esModule) return mod;\r\n var result = {};\r\n if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];\r\n result.default = mod;\r\n return result;\r\n}\r\n\r\nexport function __importDefault(mod) {\r\n return (mod && mod.__esModule) ? mod : { default: mod };\r\n}\r\n","import { OnDestroy } from '@angular/core';\nimport { GarbageCollector } from '@coolon/pectin';\n\nexport class DisposableComponent extends GarbageCollector implements OnDestroy {\n\n ngOnDestroy(): void {\n this.dispose();\n }\n}\n","/* tslint:disable:no-input-rename */\nimport { EventEmitter, HostListener, Input, OnInit, Output } from '@angular/core';\nimport { FormControl, FormGroupDirective, NgForm } from '@angular/forms';\nimport { ErrorStateMatcher } from '@angular/material';\nimport { Command, DelegatingFormValueModel, ListModel, UseDelegate, ValueModel } from '@coolon/pectin';\nimport { DisposableComponent } from '../disposable-component';\n\nexport abstract class AbstractInputComponent<T> extends DisposableComponent implements OnInit {\n\n readonly valueModel = new DelegatingFormValueModel<T>();\n\n @Input('valueModel') @UseDelegate()\n set userValueModel(model: ValueModel<T>) {\n this.valueModel.setDelegate(model);\n }\n\n @Input() label: string;\n @Input() floatLabel: 'auto' | 'always' | 'never';\n @Input() hint: string;\n @Input() placeholder: string;\n\n @Input('command.focus') focusCommand: Command<any>;\n @Input('command.blur') blurCommand: Command<any>;\n @Input('command.enter') enterCommand: Command<any>;\n @Input('command.escape') escapeCommand: Command<any>;\n @Input('command.click') clickCommand: Command<any>;\n\n // TODO: fix this.\n // tslint:disable-next-line:no-output-native\n @Output() focus = new EventEmitter();\n // tslint:disable-next-line:no-output-native\n @Output() blur = new EventEmitter();\n // tslint:disable-next-line:no-output-native\n @Output() enterKey = new EventEmitter();\n // tslint:disable-next-line:no-output-native\n @Output() escapeKey = new EventEmitter();\n\n readonly errorStateMatcher: ErrorStateMatcher;\n\n @HostListener('click')\n notifyClick() {\n this.safelyInvoke(this.clickCommand);\n }\n\n @HostListener('focusin')\n notifyFocusIn() {\n this.safelyInvoke(this.focusCommand);\n this.focus.emit();\n }\n\n @HostListener('focusout')\n notifyFocusOut() {\n this.safelyInvoke(this.blurCommand);\n this.blur.emit();\n }\n\n\n notifyEnterKey() {\n this.safelyInvoke(this.enterCommand);\n this.enterKey.emit();\n }\n\n notifyEscapeKey() {\n this.safelyInvoke(this.escapeCommand);\n this.escapeKey.emit();\n }\n\n protected safelyInvoke(command: Command<any>) {\n if (command && command.enabled.value) {\n command.execute();\n }\n }\n\n constructor() {\n super();\n const self = this;\n this.errorStateMatcher = {\n isErrorState(control: FormControl | null, form: FormGroupDirective | NgForm | null): boolean {\n return self.hasErrors();\n }\n };\n }\n\n ngOnInit(): void {\n }\n\n isEnabled(): boolean {\n return this.enabled.value;\n }\n\n get enabled(): ValueModel<boolean> {\n return this.valueModel.enabled;\n }\n\n hasErrors(): boolean {\n return !this.errorList.query().isEmpty();\n }\n\n get errorList(): ListModel<string> {\n return this.valueModel.errorList;\n }\n\n get firstError() {\n return this.hasErrors() ? this.errorList.value[0] : null;\n }\n\n\n}\n","import { Component, OnInit } from '@angular/core';\nimport { AbstractInputComponent } from '../abstract-input.component';\n\n\n@Component({\n selector: 'angular-ui-powerups-number-input',\n templateUrl: './number-input.component.html',\n styleUrls: ['./number-input.component.scss']\n})\nexport class NumberInputComponent extends AbstractInputComponent<string> implements OnInit {\n\n constructor() {\n super();\n }\n\n ngOnInit() {\n }\n\n}\n","import { Component, OnInit } from '@angular/core';\nimport { AbstractInputComponent } from '../abstract-input.component';\n\n@Component({\n selector: 'angular-ui-powerups-password-input',\n templateUrl: './password-input.component.html',\n styleUrls: ['./password-input.component.scss']\n})\nexport class PasswordInputComponent extends AbstractInputComponent<string> implements OnInit {\n\n constructor() {\n super();\n }\n\n ngOnInit() {\n }\n\n}\n","import { Component, Input, OnInit } from '@angular/core';\nimport { ListModel, StoreInListModel, UseDelegate } from '@coolon/pectin';\nimport { AbstractInputComponent } from '../abstract-input.component';\n\n@Component({\n selector: 'angular-ui-powerups-select-input',\n templateUrl: './select-input.component.html',\n styleUrls: ['./select-input.component.scss']\n})\nexport class SelectInputComponent<T = any> extends AbstractInputComponent<T> implements OnInit {\n\n @Input() @UseDelegate()\n optionsModel: ListModel<T>;\n\n @Input() @StoreInListModel('optionsModel')\n options: T[];\n\n @Input()\n optionLabel: keyof T;\n\n @Input()\n optionLabelFormat: (option: T) => any = (option) => (option && this.optionLabel) ? option[this.optionLabel] : option;\n\n constructor() {\n super();\n }\n\n ngOnInit() {\n }\n\n}\n","import { Component, OnInit } from '@angular/core';\nimport { AbstractInputComponent } from '../abstract-input.component';\n\n@Component({\n selector: 'angular-ui-powerups-string-input',\n templateUrl: './string-input.component.html',\n styleUrls: ['./string-input.component.scss']\n})\nexport class StringInputComponent extends AbstractInputComponent<string> implements OnInit {\n\n constructor() {\n super();\n }\n\n ngOnInit() {\n }\n\n}\n","import { Component } from '@angular/core';\n\n@Component({\n selector: 'angular-ui-powerups-noop',\n templateUrl: './noop.component.html',\n styleUrls: ['./noop.component.scss']\n})\nexport class NoopComponent {\n constructor() {\n }\n}\n","import { AfterViewInit, Directive, ElementRef, HostListener, Inject, Input, OnDestroy, OnInit } from '@angular/core';\nimport { assert, Command, Dsl, GarbageCollector, lang, UnaryCommand } from '@coolon/pectin';\n\n@Directive({\n // tslint:disable-next-line:directive-selector\n selector: '[pectinCommand]'\n})\nexport class CommandDirective<P = any> extends GarbageCollector implements OnInit, OnDestroy, AfterViewInit {\n\n @Input()\n pectinCommand: Command<any> | UnaryCommand<P>;\n\n private _commandParameter: P;\n private _commandParameterProvided = false;\n\n @Input()\n set commandParameter(value: P) {\n this._commandParameterProvided = true;\n this._commandParameter = value;\n }\n\n get commandParameter(): P {\n return this._commandParameter;\n }\n\n constructor(@Inject(ElementRef) private elementRef: ElementRef) {\n super();\n }\n\n ngOnInit(): void {\n assert.notNil(this.pectinCommand);\n if (this.pectinCommand instanceof UnaryCommand) {\n if (!this._commandParameterProvided) {\n lang.illegalState('UnaryCommands required the command parameter to be specified.');\n }\n } else {\n if (this._commandParameterProvided) {\n lang.illegalState('command parameters are only supported by UnaryCommands');\n }\n }\n }\n\n ngAfterViewInit(): void {\n // for some reason mat-buttons kills the disabled host binding. It works on a regular button but for now\n // we need to do this.\n const { chain } = Dsl.disposeWith(this);\n chain(this.pectinCommand.enabled).subscribe(enabled => {\n if (enabled) {\n this.elementRef.nativeElement.removeAttribute('disabled');\n if (this.elementRef.nativeElement.tagName === 'A') {\n this.elementRef.nativeElement.setAttribute('href', 'javascript:void');\n }\n } else {\n this.elementRef.nativeElement.setAttribute('disabled', 'disabled');\n if (this.elementRef.nativeElement.tagName === 'A') {\n this.elementRef.nativeElement.removeAttribute('href');\n }\n }\n });\n }\n\n ngOnDestroy(): void {\n this.dispose();\n }\n\n\n @HostListener('click', ['$event'])\n notifyClick($event: Event) {\n $event.preventDefault();\n $event.stopPropagation();\n if (this.pectinCommand.enabled.value) {\n if (this.pectinCommand instanceof UnaryCommand) {\n this.pectinCommand.withContext({ event: $event }).execute(this.commandParameter);\n } else {\n this.pectinCommand.withContext({ event: $event }).execute();\n }\n } else {\n console.warn('disabled command clicked, ignoring.');\n }\n }\n}\n","import { DOCUMENT } from '@angular/common';\nimport { AfterViewInit, Directive, ElementRef, HostListener, Inject, Input, NgZone, OnInit } from '@angular/core';\nimport { Dsl, HasFocusTracking, Logger } from '@coolon/pectin';\nimport { DisposableComponent } from '../components/disposable-component';\n\n\n@Directive({\n // tslint:disable-next-line:directive-selector\n selector: '[pectinFocusBinding]'\n})\nexport class FocusBindingDirective extends DisposableComponent implements OnInit, AfterViewInit {\n\n private readonly document: Document;\n\n @Input() pectinFocusBinding: HasFocusTracking;\n @Input() focusBindingTarget: HTMLElement;\n\n @HostListener('focusin')\n onFocusIn() {\n if (this.hasBinding()) {\n this.pectinFocusBinding.focusContext.notifyFocusIn();\n }\n }\n\n @HostListener('focusout')\n onFocusOut() {\n if (this.hasBinding()) {\n this.pectinFocusBinding.focusContext.notifyFocusOut();\n }\n }\n\n constructor(@Inject(ElementRef) private readonly el: ElementRef,\n @Inject(NgZone) private readonly ngZone: NgZone,\n @Inject(DOCUMENT) document: any) {\n super();\n // @see https://stackoverflow.com/questions/49513359/could-not-resolve-type-document-in-angular5/53715642#53715642\n this.document = document as Document;\n }\n\n ngOnInit(): void {\n }\n\n ngAfterViewInit(): void {\n // TODO: Make this also track the current enabled/disabled state.\n if (this.hasBinding()) {\n const { chain } = Dsl.disposeWith(this);\n chain(this.pectinFocusBinding.focusContext.focused).subscribe((focused) => {\n if (focused && !this.alreadyHasFocus()) {\n this.tryAndFocus();\n }\n });\n } else {\n Logger.get(this).warn('pectinFocusBinding was nil');\n }\n }\n\n private hasBinding() {\n return !!this.pectinFocusBinding && !!this.pectinFocusBinding.focusContext;\n }\n\n// Hook method for debugging via tracing.\n alreadyHasFocus() {\n return this.isFocused(this.focusTarget);\n }\n\n // Hook method for debugging via tracing.\n isFocused(element: Element): boolean {\n return this.document.activeElement === element;\n }\n\n tryAndFocus(retries: number = 5) {\n if (this.modelShouldStillHaveFocus() && this.canFocus()) {\n if (!this.alreadyHasFocus()) {\n this.focusTarget.focus();\n }\n // if we didn't get the focus we try again later.\n if (!this.alreadyHasFocus()) {\n Logger.get(this).log(`focus failed, trying ${retries} more times`);\n if (retries > 0) {\n // try again on the next paint\n // TODO: is there an angular way of doing this without calling a window function.\n requestAnimationFrame(() => {\n this.tryAndFocus(retries - 1);\n });\n } else {\n Logger.get(this).warn(`Tried to focus but gave up as the component wasn't enabled or visible.`);\n }\n }\n }\n }\n\n get focusTarget(): HTMLElement {\n return this.focusBindingTarget || this.el.nativeElement;\n }\n\n // Hook method for debugging via tracing.\n modelShouldStillHaveFocus() {\n return this.hasBinding() && this.pectinFocusBinding.focusContext.focused.value;\n }\n\n // Hook method for debugging via tracing.\n canFocus(): boolean {\n const dimension = this.focusTarget.getBoundingClientRect();\n const hasSize = dimension.height >= 0 && dimension.height >= 0;\n // tslint:disable-next-line:no-string-literal\n return hasSize && !this.focusTarget['disabled'];\n }\n}\n","import { Constructable, GarbageCollector, ListModel, Trace, ValueModel } from '@coolon/pectin';\nimport { Activity } from './activity';\nimport { Alert } from './alert';\nimport { Confirm } from './confirm';\nimport * as _ from 'lodash';\n\nexport abstract class InteractionContext extends GarbageCollector {\n\n /**\n * Returns the current list of activities that are in progress.\n * This model is only updated in the next tick after the view has been updated.\n */\n abstract readonly activityList: ListModel<Activity<any, any>>;\n\n protected constructor() {\n super();\n }\n\n /**\n * Returns the activity that is currently active.\n * This model is only updated in the next tick after the view has been updated.\n */\n get currentActivity(): Activity<any, any> {\n return _.last(this.activityList.value);\n }\n\n /**\n * Returns true if an activity is currently running.\n */\n abstract isActive(): boolean;\n\n abstract startActivity<D, R, E>(activityType: Constructable<Activity<D, R, E>>, data?: D): Promise<R>;\n\n abstract confirm(confirm: Confirm): Promise<void>;\n\n /**\n * Presents the confirmation to the user and runs the activity only if the user confirms.\n * @param confirm:Confirm the confirmation to display.\n * @param activityType the activity to run if confirmed.\n * @param data the activity data.\n */\n abstract confirmThen<D, R, E>(confirm: Confirm, activityType: Constructable<Activity<D, R, E>>, data?: D): Promise<R>;\n\n abstract alert(alert: Alert): Promise<void>;\n\n}\n\n","import { InjectionToken } from '@angular/core';\nimport { DelegatingValueModel, GarbageCollector, ValueModel } from '@coolon/pectin';\nimport { assert } from '@coolon/typescript-utilities';\n\nexport const ACTIVITY_DATA = new InjectionToken<any>('InteractionActivityData');\n\nexport abstract class Activity<D, R, E = any> extends GarbageCollector {\n\n private readonly _busyModel = new DelegatingValueModel<boolean>().withDefault(false);\n private _activityContext: Activity.Callbacks<R, E>;\n\n initialise(activityContext: Activity.Callbacks<R, E>): void {\n assert.isNil(this._activityContext);\n this._activityContext = activityContext;\n }\n\n done(result?: R): void {\n return this._activityContext.onDone(result);\n }\n\n cancel(error?: E): void {\n this._activityContext.onCancel(error);\n }\n\n // @Trace()\n onActivityReady() {\n }\n\n\n get busy(): ValueModel<boolean> {\n return this._busyModel.readonly;\n }\n\n busyWhile(busyModel: ValueModel<boolean>) {\n this._busyModel.setDelegate(busyModel);\n }\n\n isBusy() {\n return this._busyModel.value;\n }\n\n}\n\nexport namespace Activity {\n\n export interface Callbacks<R, E> {\n onDone: (result: R) => void,\n onCancel: (error: E) => void,\n }\n}\n","import {\n Component,\n ComponentFactoryResolver,\n ComponentRef,\n Injector,\n Input,\n OnInit,\n ViewContainerRef\n} from '@angular/core';\nimport { Activity, ACTIVITY_DATA } from '../../activity';\nimport { InteractionContext } from '../../interaction-context';\nimport { ActivityOutletContext } from './activity-outlet-context';\nimport { assert } from '@coolon/pectin';\n\n/**\n * ActivityOutletComponent creates and displays an activity and delegates the interaction context functionality to an\n * external service.\n *\n * It might be nice to have wrapper component that allows more declarative use, i.e.\n * <activity-view [activityClass]=\"...\", [activityData]=\"...\" (done)=\"..\" (cancel)=\"...\"></activity-view>\n */\n@Component({\n selector: 'angular-ui-powerups-activity-outlet',\n template: '',\n styleUrls: ['./activity-outlet.component.scss']\n})\nexport class ActivityOutletComponent<D, R, E> implements OnInit {\n\n @Input()\n interactionContext: InteractionContext;\n private _activityContext: ActivityOutletContext<D, R, E>;\n\n @Input()\n set activityContext(activityContext: ActivityOutletContext<D, R, E>) {\n assert.isNil(this._activityContext);\n this._activityContext = activityContext;\n this.loadActivity(activityContext);\n };\n get activityContext():ActivityOutletContext<D,R,E> {\n return this._activityContext;\n }\n\n\n private activityComponentRef: ComponentRef<Activity<D, R, E>>;\n\n constructor(\n private componentFactoryResolver: ComponentFactoryResolver,\n private viewContainerRef: ViewContainerRef,\n private injector: Injector\n ) {\n }\n\n ngOnInit() {\n }\n\n loadActivity(activityContext: ActivityOutletContext<D, R, E>) {\n const injector = Injector.create({\n providers: [\n {\n provide: InteractionContext,\n useValue: this.interactionContext\n },\n { provide: ACTIVITY_DATA, useValue: activityContext.activityData }\n ],\n parent: this.injector\n });\n const componentFactory = this.componentFactoryResolver.resolveComponentFactory(activityContext.activityClass);\n this.viewContainerRef.clear();\n this.activityComponentRef = this.viewContainerRef.createComponent(componentFactory, 0, injector);\n this.activityComponentRef.instance.initialise(activityContext);\n if (this.activityContext.componentReady) {\n this.activityContext.componentReady(this.component);\n }\n }\n\n get component(): Activity<D, R, E> {\n return this.activityComponentRef.instance;\n }\n\n}\n","import { DelegatingValueModel, EventListenerList, Trace, ValueModel } from '@coolon/pectin';\nimport { assert } from '@coolon/typescript-utilities';\nimport { DisposableComponent } from '../components/disposable-component';\nimport { Activity } from './activity';\nimport { ActivityOutletContext } from './components/activity-outlet/activity-outlet-context';\nimport { InteractionContext } from './interaction-context';\n\n/**\n * Deprecated. You can now extend the Activity class directly.\n */\nexport abstract class AbstractActivity<D, R, E = any> extends Activity<D, R, E> {\n}\n","import { Component, Inject, OnInit } from '@angular/core';\nimport { AbstractActivity } from '../../abstract-activity';\nimport { ACTIVITY_DATA } from '../../activity';\nimport { Alert } from '../../alert';\n\n@Component({\n selector: 'angular-ui-powerups-alert-dialog',\n templateUrl: './alert-dialog.component.html',\n styleUrls: ['./alert-dialog.component.scss']\n})\nexport class AlertDialogComponent extends AbstractActivity<Alert, void> implements OnInit {\n\n constructor(@Inject(ACTIVITY_DATA) readonly alert: Alert) {\n super();\n }\n\n ngOnInit() {\n }\n\n}\n","import { Component, Inject, OnInit } from '@angular/core';\nimport { assert, Constructable } from '@coolon/pectin';\nimport { AbstractActivity } from '../../abstract-activity';\nimport { Activity, ACTIVITY_DATA } from '../../activity';\nimport { Confirm } from '../../confirm';\nimport { InteractionContext } from '../../interaction-context';\n\n@Component({\n selector: 'angular-ui-powerups-confirmation-dialog',\n templateUrl: './confirm-then-dialog.component.html',\n styleUrls: ['./confirm-then-dialog.component.scss']\n})\nexport class ConfirmThenDialogComponent<D,R,E> extends AbstractActivity<ConfirmThenDialogComponent.Data<D,R,E>, R, E> implements OnInit {\n\n constructor(@Inject(ACTIVITY_DATA) readonly config: ConfirmThenDialogComponent.Data<D,R,E>, readonly interactionContext:InteractionContext) {\n super();\n assert.notNil(config);\n }\n\n ngOnInit() {\n }\n\n get confirm():Confirm {\n return this.config.confirm;\n }\n\n isDestructive(): boolean {\n return this.confirm.destructive && this.confirm.destructive();\n }\n\n onConfirm() {\n this.interactionContext.startActivity(this.config.activityType, this.config.data)\n .then((result) => this.done(result))\n .catch(error => this.cancel(error));\n }\n}\n\nexport namespace ConfirmThenDialogComponent {\n export interface Data<D, R, E> {\n confirm:Confirm,\n activityType:Constructable<Activity<D, R, E>>,\n data: D\n }\n}\n","import { Component, Inject, OnInit } from '@angular/core';\nimport { assert } from '@coolon/pectin';\nimport { AbstractActivity } from '../../abstract-activity';\nimport { ACTIVITY_DATA } from '../../activity';\nimport { Confirm } from '../../confirm';\n\n@Component({\n selector: 'angular-ui-powerups-confirmation-dialog',\n templateUrl: './confirmation-dialog.component.html',\n styleUrls: ['./confirmation-dialog.component.scss']\n})\nexport class ConfirmationDialogComponent extends AbstractActivity<Confirm, void> implements OnInit {\n\n constructor(@Inject(ACTIVITY_DATA) readonly confirm: Confirm) {\n super();\n assert.notNil(confirm);\n }\n\n ngOnInit() {\n }\n\n isDestructive(): boolean {\n return this.confirm.destructive && this.confirm.destructive();\n }\n}\n","import { AfterViewInit, Component, Input, OnInit, QueryList, ViewChild, ViewChildren } from '@angular/core';\nimport { MatTabGroup } from '@angular/material';\nimport { assert, Constructable, Dsl, ListModel, MutableListModel, MutableStream } from '@coolon/pectin';\n\nimport { Activity } from '../../activity';\nimport { Alert } from '../../alert';\nimport { Confirm } from '../../confirm';\nimport { InteractionContext } from '../../interaction-context';\nimport { ActivityOutletContext } from '../activity-outlet/activity-outlet-context';\nimport { ActivityOutletComponent } from '../activity-outlet/activity-outlet.component';\nimport { AlertDialogComponent } from '../alert-dialog/alert-dialog.component';\nimport { ConfirmThenDialogComponent } from '../confirm-then-dialog/confirm-then-dialog.component';\nimport { ConfirmationDialogComponent } from '../confirmation-dialog/confirmation-dialog.component';\n\n/**\n * Note: this class is mutable and is stored in a list model. This is normally a big no no but\n * we're manually deriving other models from the list after view state changes. I.e. we not\n * using pectin chains on any of the mutable fields.\n */\nclass TabContext<D, R, E> implements ActivityOutletContext<D, R, E> {\n\n private _complete = false;\n private _component: Activity<D, R, E>;\n\n constructor(readonly activityData: D,\n readonly activityClass: Constructable<Activity<D, R, E>>,\n readonly interactionContext: InteractionContext,\n readonly activityCallbacks: Activity.Callbacks<R, E>) {\n }\n\n isComponentRealised(): boolean {\n return !!this._component;\n }\n\n isComplete() {\n return this._complete;\n }\n\n componentReady(component: Activity<D, R, E>) {\n assert.isNil(this._component);\n this._component = component;\n }\n\n get component(): Activity<D, R, E> {\n return this._component;\n }\n\n // @Trace()\n onDone(result: R): void {\n this._complete = true;\n this.activityCallbacks.onDone(result);\n }\n\n // @Trace()\n onCancel(error: E): void {\n this._complete = true;\n this.activityCallbacks.onCancel(error);\n }\n\n}\n\n@Component({\n selector: 'angular-ui-powerups-activity-container',\n templateUrl: './activity-container.component.html',\n styleUrls: ['./activity-container.component.scss']\n})\nexport class ActivityContainerComponent<D, R, E> extends InteractionContext implements OnInit, AfterViewInit {\n\n private readonly activityFinishedEvents = new MutableStream<any>();\n\n @Input()\n parentInteractionContext: InteractionContext;\n\n @Input()\n set initialActivityOutletContext(initialContext: ActivityOutletContext<D, R, E>) {\n assert.isNil(this.initialActivityOutletContext);\n this.activityTabs.push(new TabContext(initialContext.activityData, initialContext.activityClass, this, {\n onDone: (result: R) => {\n this.finished = true;\n return initialContext.onDone(result);\n },\n onCancel: (error: E) => {\n this.finished = true;\n return initialContext.onCancel(error);\n }\n }));\n }\n\n get initialActivityOutletContext(): ActivityOutletContext<D, R, E> {\n return this.activityTabs.length > 0 ? this.activityTabs.value[0] : null;\n }\n\n @ViewChild('tabs', { static: true })\n tabs: MatTabGroup;\n\n @ViewChildren(ActivityOutletComponent)\n outlets: QueryList<ActivityOutletComponent<any, any, any>>;\n\n readonly activityTabs = new MutableListModel<TabContext<any, any, any>>();\n private finished = false;\n\n private readonly _activityList = new MutableListModel<Activity<any, any>>();\n\n constructor() {\n super();\n const { chain, valueOf, before, when, after, observe, switchOn } = Dsl.disposeWith(this);\n chain(this.activityFinishedEvents).throttle(50).subscribe(() => this.onActivityFinished());\n }\n\n isActive(): boolean {\n return this.parentInteractionContext.isActive();\n }\n\n get activityList(): ListModel<Activity<any, any, any>> {\n return this._activityList.readonly;\n }\n\n ngOnInit() {\n }\n\n ngAfterViewInit(): void {\n const { chain, observe } = Dsl.disposeWith(this);\n observe.valuesFrom(this.outlets.changes).subscribe(() => setTimeout(() => this.updateActivityList()));\n observe.valuesFrom(this.tabs.animationDone).subscribe(() => this.onAnimationFinished());\n this.updateActivityList();\n }\n\n startActivity<D1, R1, E1>(activityType: Constructable<Activity<D1, R1, E1>>, data?: D1): Promise<R1> {\n const self = this;\n return new Promise<R1>((resolve, reject) => {\n const context = new TabContext(data, activityType, self, {\n onDone: function(result: R1) {\n resolve(result);\n self.activityFinishedEvents.publish({});\n },\n onCancel: function(error: E1) {\n reject(error);\n self.activityFinishedEvents.publish({});\n }\n });\n self.activityTabs.push(context);\n self.tabs.selectedIndex = this.activityTabs.length;\n });\n }\n\n\n alert(alert: Alert): Promise<void> {\n return this.startActivity(AlertDialogComponent, alert);\n }\n\n confirm(confirm: Confirm): Promise<void> {\n return this.startActivity(ConfirmationDialogComponent, confirm);\n }\n\n confirmThen<D1, R1, E1>(confirm: Confirm, activityType: Constructable<Activity<D1, R1, E1>>, data?: D1): Promise<R1> {\n return this.startActivity<ConfirmThenDialogComponent.Data<D1, R1, E1>, R1, E1>(ConfirmThenDialogComponent, {\n confirm,\n activityType: activityType,\n data: data\n });\n }\n\n // @Trace()\n private onActivityFinished() {\n // don't do anything if job already queued up.\n if (!this.finished) {\n if (this.synchroniseSelectedTabIndex()) {\n this.cleanupStaleActivities();\n }\n this.updateActivityList();\n }\n }\n\n // @Trace()\n private cleanupStaleActivities() {\n // clean up old tabs\n if (this.tabs.selectedIndex < this.activityTabs.length - 1) {\n this.activityTabs.runInTransaction(draft => {\n draft.value = draft.value.slice(0, 1 + this.tabs.selectedIndex);\n });\n }\n }\n\n /**\n * Synchronises the selected tab index. Returns true if there was no change to the selected index.\n */\n // @Trace()\n private synchroniseSelectedTabIndex(): boolean {\n const previousIndex = this.tabs.selectedIndex;\n const newIndex = this.activityTabs.query().findIndex(t => t.isComplete()) - 1;\n this.tabs.selectedIndex = newIndex;\n return previousIndex === newIndex;\n }\n\n // @Trace()\n private onAnimationFinished() {\n this.getSelectedOutlet().component.onActivityReady();\n this.cleanupStaleActivities();\n this.updateActivityList();\n }\n\n private updateActivityList() {\n this._activityList.value = this.activityTabs.value.filter(t => !t.isComplete() && t.isComponentRealised()).map(t => t.component);\n }\n\n private getSelectedOutlet() {\n return this.outlets.toArray()[this.tabs.selectedIndex];\n }\n}\n","import { Component } from '@angular/core';\n\n@Component({\n selector: 'angular-ui-powerups-interaction-outlet',\n templateUrl: './interaction-outlet.component.html',\n styleUrls: ['./interaction-outlet.component.scss']\n})\nexport class InteractionOutletComponent {\n constructor() {\n }\n}\n","import { Location } from '@angular/common';\nimport { Inject, Injectable, InjectionToken, Optional } from '@angular/core';\nimport { MatDialog, MatDialogRef } from '@angular/material';\nimport { MAT_DIALOG_DEFAULT_OPTIONS, MatDialogConfig } from '@angular/material/dialog';\nimport { Router } from '@angular/router';\nimport { Constructable, DelegatingListModel, lang, ListModel, ValueModel } from '@coolon/pectin';\nimport { assert } from '@coolon/typescript-utilities';\nimport * as uuid from 'uuid';\nimport { Activity } from '../activity';\nimport { Alert } from '../alert';\nimport { ActivityContainerComponent } from '../components/activity-container/activity-container.component';\nimport { AlertDialogComponent } from '../components/alert-dialog/alert-dialog.component';\nimport { ConfirmThenDialogComponent } from '../components/confirm-then-dialog/confirm-then-dialog.component';\nimport { ConfirmationDialogComponent } from '../components/confirmation-dialog/confirmation-dialog.component';\nimport { Confirm } from '../confirm';\nimport { InteractionContext } from '../interaction-context';\n\nexport const DIALOG_INTERACTION_SERVICE_DEFAULTS = new InjectionToken<MatDialogConfig<any>>('DIALOG_INTERACTION_SERVICE_DEFAULTS');\n\nclass Guard extends ValueModel<boolean> {\n\n constructor() {\n super({ initialValue: false });\n }\n\n get value(): boolean {\n return this.store.read();\n }\n\n whileTrue<R>(fun: () => R): R {\n this.startTransaction().commit(true);\n try {\n return fun();\n } finally {\n this.startTransaction().commit(false);\n }\n }\n\n runIfFalse<R>(fun: () => R, defaultValue: R = null): R {\n return !this.value ? fun() : defaultValue;\n }\n}\n\n\n@Injectable({\n providedIn: 'root'\n})\nexport class DialogInteractionService extends InteractionContext {\n\n private readonly _activityList = new DelegatingListModel<Activity<any, any>>();\n private startingGuard = new Guard();\n private currentActivityId: string;\n\n constructor(private readonly dialogService: MatDialog,\n readonly location: Location,\n readonly router: Router,\n @Optional() @Inject(DIALOG_INTERACTION_SERVICE_DEFAULTS) readonly dialogServiceDefaults: MatDialogConfig<any>,\n @Optional() @Inject(MAT_DIALOG_DEFAULT_OPTIONS) readonly matDialogDefaultConfig: MatDialogConfig<any>\n ) {\n super();\n assert.notNil(dialogService);\n }\n\n isActive(): boolean {\n return !!this.currentActivityId;\n }\n\n cancelActivity() {\n this.currentActivity.cancel(null);\n }\n\n get activityList(): ListModel<Activity<any, any>> {\n return this._activityList.readonly;\n }\n\n startActivity<D, R, E>(activityType: Constructable<Activity<D, R, E>>, data?: D): Promise<R> {\n return this._startActivity(activityType, data);\n }\n\n private _startActivity<D, R, E>(activityType: Constructable<Activity<D, R, E>>, data: D, disableClose: boolean = true) {\n if (this.isActive()) {\n lang.illegalState(`Activity already in progress: ${this.activityList.value.map(a => a.constructor.name).join(', ')}`);\n }\n return this.startingGuard.whileTrue(() => {\n this.currentActivityId = uuid.v1();\n // this.location.go(this.router.routerState.snapshot.url, \"aup\");\n\n const self = this;\n const config: MatDialogConfig = {\n autoFocus: false,\n hasBackdrop: true,\n closeOnNavigation: false,\n ...this.matDialogDefaultConfig,\n ...this.dialogServiceDefaults,\n ...{\n data,\n disableClose,\n panelClass: 'dialog-interaction-service'\n }\n };\n const matDialogRef = this.dialogService.open(ActivityContainerComponent, config) as MatDialogRef<ActivityContainerComponent<D, R, E>>;\n return new Promise<R>((resolve, reject) => {\n const activityContainer = matDialogRef.componentInstance;\n activityContainer.parentInteractionContext = this;\n self.safelyUpdateActivityListDelegate(activityContainer.activityList);\n\n activityContainer.initialActivityOutletContext = {\n activityClass: activityType,\n activityData: data,\n onDone(result) {\n resolve(result);\n matDialogRef.close(true); // return true to let the after close listener know we've already handled it.\n },\n onCancel(error) {\n reject(error);\n matDialogRef.close(true); // return true to let the after close listener know we've already handled it.\n }\n };\n matDialogRef.afterClosed().subscribe(promiseAlreadyFinished => {\n if (!promiseAlreadyFinished) {\n reject(\"auto-closed\");\n }\n });\n matDialogRef.updateSize();\n }).finally(() => {\n this.currentActivityId = null;\n self.safelyUpdateActivityListDelegate(null);\n });\n });\n }\n\n /**\n * Updates teh delegate on the next tick to avoid modifying state during the current change detection cycle.\n * @param delegate\n */\n safelyUpdateActivityListDelegate(delegate: ListModel<Activity<any, any>>) {\n setTimeout(() => this._activityList.setDelegate(delegate));\n }\n\n alert(alert: Alert): Promise<void> {\n // TODO: Test disableClose === false\n return this._startActivity(AlertDialogComponent, alert, false);\n }\n\n confirm(confirm: Confirm): Promise<void> {\n return this._startActivity(ConfirmationDialogComponent, confirm, true);\n }\n\n confirmThen<D, R, E>(confirm: Confirm, activityType: Constructable<Activity<D, R, E>>, data?: D): Promise<R> {\n return this._startActivity<ConfirmThenDialogComponent.Data<D, R, E>, R, E>(ConfirmThenDialogComponent, {\n confirm,\n activityType: activityType,\n data: data\n }, true);\n }\n}\n","import { PortalModule } from '@angular/cdk/portal';\nimport { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { MatButtonModule, MatDialogModule, MatTabsModule } from '@angular/material';\nimport { RouterModule } from '@angular/router';\nimport { ActivityContainerComponent } from './components/activity-container/activity-container.component';\nimport { ActivityOutletComponent } from './components/activity-outlet/activity-outlet.component';\nimport { AlertDialogComponent } from './components/alert-dialog/alert-dialog.component';\nimport { ConfirmThenDialogComponent } from './components/confirm-then-dialog/confirm-then-dialog.component';\nimport { ConfirmationDialogComponent } from './components/confirmation-dialog/confirmation-dialog.component';\nimport { InteractionOutletComponent } from './components/interaction-outlet/interaction-outlet.component';\nimport { DialogInteractionService } from './services/dialog-interaction.service';\n\n@NgModule({\n imports: [\n CommonModule,\n MatButtonModule,\n MatDialogModule,\n MatTabsModule,\n PortalModule,\n RouterModule\n ],\n declarations: [\n ActivityContainerComponent,\n ConfirmationDialogComponent,\n ConfirmThenDialogComponent,\n AlertDialogComponent,\n ActivityOutletComponent,\n InteractionOutletComponent\n ],\n exports: [\n ActivityContainerComponent,\n ActivityOutletComponent,\n InteractionOutletComponent\n ],\n entryComponents: [\n ActivityContainerComponent,\n ConfirmationDialogComponent,\n ConfirmThenDialogComponent,\n AlertDialogComponent\n ],\n providers: [\n DialogInteractionService\n ]\n})\nexport class InteractionModule {\n}\n","import { Component, Input, OnInit } from '@angular/core';\nimport { StoreInValueModel, UseDelegate, ValueModel } from '@coolon/pectin';\n\n@Component({\n selector: 'angular-ui-powerups-busy-overlay',\n templateUrl: `./busy-overlay.component.html`,\n styleUrls: ['./busy-overlay.component.scss']\n})\nexport class BusyOverlayComponent implements OnInit {\n\n @Input() @UseDelegate()\n busyModel: ValueModel<boolean>;\n\n @Input() @StoreInValueModel('busyModel')\n busy: boolean;\n\n constructor() {\n }\n\n ngOnInit() {\n }\n\n}\n","import { Component, OnInit } from '@angular/core';\n\n@Component({\n selector: 'angular-ui-powerups-empty-state',\n template: `\n <div class=\"container\">\n <ng-content></ng-content>\n </div>\n `,\n styleUrls: ['./empty-state.component.scss']\n})\nexport class EmptyStateComponent implements OnInit {\n\n constructor() {\n }\n\n ngOnInit() {\n }\n}\n","import { Injector } from '@angular/core';\nimport { Trace } from '@coolon/pectin';\nimport { Opts } from '@coolon/typescript-utilities';\nimport _ from 'lodash';\nimport { PlaceHistory } from '../place-history';\nimport { Visit } from '../visit';\nimport { Formatter } from './formatter';\n\nexport abstract class ParameterDefinition<T, E = T> {\n\n abstract readonly isRouteId: boolean;\n abstract readonly isArray: boolean;\n\n readonly remember: boolean;\n readonly defaultValue: T;\n private options: Opts<ParameterDefinition.Options<T>>;\n\n constructor(readonly propertyName: string, options: ParameterDefinition.Options<T>, readonly urlFormat?: Formatter<E>) {\n this.options = Opts.get(options);\n this.remember = this.options.getOptional('remember', false);\n this.defaultValue = this.options.getOptional('defaultValue', null);\n }\n\n get name() {\n return this.options.getOptional('as', this.propertyName);\n }\n\n // @Trace()\n get isRouteParameter(): boolean {\n return !!this.urlFormat;\n }\n\n abstract isEmptyValue(value: T): boolean;\n\n abstract hasChanged(a: any, b: any): boolean;\n\n protected getOptionValue<K extends keyof ParameterDefinition.Options<T>>(key: K): ParameterDefinition.Options<T>[K] {\n return this.options.getOptional(key, null);\n }\n\n // @Trace()\n async sanitise(value:T, visit: Visit, placeHistory: PlaceHistory, injector: Injector) {\n if (this.isMissingFrom(visit)) {\n const previousVisit = _.first(placeHistory.getHistory(visit.placeDefinition));\n if (this.remember && previousVisit) {\n value = previousVisit.getParameter(this.name);\n }\n return this.isEmptyValue(value) ? this.defaultValue : value;\n } else {\n // todo: add custom sanitiser\n return value;\n }\n }\n\n private isMissingFrom(visit: Visit) {\n return !visit.hasParameter(this.name);\n }\n}\n\nexport namespace ParameterDefinition {\n\n export interface Options<T> {\n as?: string;\n optional?: boolean;\n remember?: boolean;\n defaultValue?: T;\n // sanitiser?: Constructable<ParameterSanitiser<T>> | ParameterSanitiser.Options<T>;\n }\n\n export class RouteId<T> extends ParameterDefinition<T> {\n readonly isRouteId = true;\n readonly isArray = false;\n\n isEmptyValue(value: T): boolean {\n return _.isNil(value);\n }\n\n hasChanged(a: any, b: any): boolean {\n return a !== b;\n }\n }\n\n export class ValueParameter<T> extends ParameterDefinition<T> {\n readonly isRouteId = false;\n readonly isArray = false;\n\n isEmptyValue(value: T): boolean {\n return _.isNil(value);\n }\n\n hasChanged(a: any, b: any): boolean {\n return a !== b;\n }\n }\n\n export class ArrayParameter<T> extends ParameterDefinition<T[], T> {\n readonly isRouteId = false;\n readonly isArray = true;\n\n constructor(parameterName: string, options: Options<T[]>, urlFormat: Formatter<T>) {\n super(parameterName, options, urlFormat);\n }\n\n isEmptyValue(value: T[]): boolean {\n return _.isNil(value) || value.length < 1;\n }\n\n hasChanged(a: T[], b: T[]): boolean {\n return !_.isEqual(a, b);\n }\n\n }\n}\n","import { ParamMap } from '@angular/router';\nimport { assert, Constructable, Trace } from '@coolon/pectin';\nimport { Opts } from '@coolon/typescript-utilities';\nimport { Memoize } from '@typescript-plus/fast-memoize-decorator/dist/src';\nimport _ from 'lodash';\nimport { PlaceComponent } from './place-component';\nimport { ParameterDefinition } from './route/parameter-definition.class';\nimport { Visit } from './visit';\n\nexport class PlaceDefinition {\n\n constructor(readonly component: Constructable<PlaceComponent>,\n readonly path: string,\n readonly authenticate: boolean,\n readonly order: number,\n readonly data: { [key: string]: any },\n readonly routeParameters: ParameterDefinition<any>[],\n readonly children: PlaceDefinition[]) {\n }\n\n hasRouteId() {\n return !!this.getRouteIdParameterDef();\n }\n\n @Memoize()\n getRouteIdParameterDef(): ParameterDefinition<any> {\n return this.routeParameters.find(p => p.isRouteId);\n }\n\n @Memoize()\n getRouteParameterDefs(includeRouteId = false): ParameterDefinition<any>[] {\n return this.getVisitParameterDefs({ includeRouteId, includeRouteParameters: true });\n }\n\n @Memoize()\n getVisitParameterDefs(include?: PlaceDefinition.ParameterOptions): ParameterDefinition<any>[] {\n const opts = Opts.get(include);\n // includes\n const includeRouteId = !include || opts.getOptional('includeRouteId', false);\n const includeRouteParameters = !include || opts.getOptional('includeRouteParameters', false);\n const includeNonRouteParameters = !include || opts.getOptional('includeNonRouteParameters', false);\n return this.routeParameters.filter(p => {\n return (includeRouteId && p.isRouteId)\n || (includeRouteParameters && p.isRouteParameter && !p.isRouteId) // route id is included in the line above\n || (includeNonRouteParameters && !p.isRouteParameter);\n });\n }\n\n getPlaceData<T>(key: string, defaultValue?: T): T {\n return this.data ?\n _.isNil(this.data[key]) ? defaultValue : this.data[key] :\n defaultValue;\n }\n\n searchPlaceData<T>(keys: string[], defaultValue?: T): T {\n if (this.data) {\n const found = keys.find(key => !_.isNil(this.data[key]));\n return found ? this.data[found] : defaultValue;\n } else {\n return defaultValue;\n }\n }\n\n getRouteIdFrom(visit: Visit) {\n const routeIdParameterDef = this.getRouteIdParameterDef();\n return routeIdParameterDef ? visit.getParameter(routeIdParameterDef.name) : null;\n }\n\n /**\n * Returns angular router commands that specify the route id and any route parameters. The result does\n * not include any path information.\n */\n // getFormattedRouterCommands(visit: Visit): any[] {\n // return this.hasRouteId() ?\n // [this.getFormattedRouteId(visit), this.getFormattedRouteParameters(visit)] :\n // [this.getFormattedRouteParameters(visit)];\n // }\n\n getFormattedRouteId(visit: Visit): any {\n return visit.hasRouteId() ? this.getRouteIdParameterDef().urlFormat.format(visit.getRouteId()) : null;\n }\n\n // @Trace()\n getFormattedRouteParameters(visit: Visit, includeRouteId = false): { [p: string]: string } {\n const result: { [p: string]: string } = {};\n this.getVisitParameterDefs({\n includeRouteId, includeRouteParameters: true\n }).forEach(def => {\n const value = visit.getParameter(def.name);\n if (!def.isEmptyValue(value)) {\n if (def.isArray) {\n assert.isArray(value);\n result[def.name] = value.map(v => def.urlFormat.format(v));\n } else {\n assert.isFalsey(Array.isArray(value));\n result[def.name] = def.urlFormat.format(value);\n }\n }\n });\n return result;\n }\n\n getNonRouteParameters(visit: Visit): { [p: string]: string } {\n const result: { [p: string]: string } = {};\n this.getVisitParameterDefs({ includeNonRouteParameters: true }).forEach(def => {\n const value = visit.getParameter(def.name);\n if (!def.isEmptyValue(value)) {\n result[def.name] = value;\n }\n });\n return result;\n }\n\n // @Trace()\n parseRouteParams(params: ParamMap): { [p: string]: any } {\n const result: { [p: string]: any } = {};\n this.getVisitParameterDefs({\n includeRouteId: true,\n includeRouteParameters: true,\n includeNonRouteParameters: false\n }).forEach(def => {\n // params will return null for non existent names\n if (params.has(def.name)) {\n if (def.isArray) {\n const values = params.getAll(def.name);\n result[def.name] = values.map(v => def.urlFormat.parse(v));\n } else {\n const value = def.urlFormat.parse(params.get(def.name));\n // because our id routes redirect if the id isn't pressent we always have a id\n // parameter in our params. This will bugger our remember and defaultvalue sanitisation\n // as it'll see that the id is present (event thought its null). The sanitisation can't\n // check for null as that's a valid value for the id.\n const isEmptyRouteId = def.isRouteId && def.isEmptyValue(value);\n if (!isEmptyRouteId) {\n result[def.name] = value;\n }\n }\n }\n });\n return result;\n }\n\n}\n\nexport namespace PlaceDefinition {\n export interface ParameterOptions {\n includeRouteId?: boolean;\n includeRouteParameters?: boolean;\n includeNonRouteParameters?: boolean;\n }\n}\n","import { assert, Binding, Constructable, IMutableHasValue, lang, ValueModel } from '@coolon/pectin';\nimport { Klass } from '@coolon/typescript-utilities';\nimport { Memoize } from '@typescript-plus/fast-memoize-decorator';\nimport 'reflect-metadata';\nimport { DisposableComponent } from '../components/disposable-component';\nimport { PlaceDefinition } from './place-definition';\nimport { ParameterDefinition } from './route/parameter-definition.class';\nimport { Visit } from './visit';\n\n// RAKE: making this Symbol(...) broke things.\nexport const DEFINITION_META_DATA_KEY = 'PLACE_DEFINITION_OPTIONS';\n// this one seems ok.\nexport const ROUTE_PARAMETER_LIST_KEY = Symbol('place:route:parameters');\n\nexport class PlaceComponent extends DisposableComponent {\n\n private visit: ValueModel<Visit>;\n\n constructor() {\n super();\n }\n\n public initialiseBindings(visit: ValueModel<Visit>) {\n assert.isNil(this.visit);\n this.visit = visit;\n this.placeDefinition.getVisitParameterDefs().forEach(parameterDef => {\n this.installBinding(parameterDef);\n });\n }\n\n private installBinding<T, S>(parameterDef: ParameterDefinition<T, S>) {\n const model = this[parameterDef.propertyName] as IMutableHasValue<S>;\n // this.txo.observe(parameterDef.propertyName, model);\n this.registerDisposable(new Binding(this.visit, model, {\n toRight(visit: Visit): S {\n const value = visit.getParameter(parameterDef.name);\n // console.log('push to component', {name:parameterDef.name, value, visit});\n return value;\n },\n toLeft(value: S, currentVisit?: Visit): Visit {\n console.log('push to route', {name:parameterDef.name, value, currentVisit});\n return currentVisit.replace(parameterDef, value);\n }\n }));\n }\n\n @Memoize()\n get placeDefinition(): PlaceDefinition {\n return PlaceComponent.getDefinition(this.constructor as any as Constructable<PlaceComponent>);\n }\n\n get childPlaces(): Constructable<PlaceComponent>[] {\n return this.placeDefinition.children.map(d => d.component);\n }\n\n canDeactivate(): boolean | Promise<boolean> {\n return true;\n }\n\n onPlaceReady() {\n }\n\n}\n\nexport namespace PlaceComponent {\n\n export function isPlaceComponentConstructor(target: any): target is Constructable<PlaceComponent> {\n return lang.constructorChain(target as Constructable<any>).includes(PlaceComponent);\n }\n\n export function getRouteParameters(klass: Constructable<PlaceComponent>): ParameterDefinition<any>[] {\n return Klass.get(klass).getMetadataList(ROUTE_PARAMETER_LIST_KEY);\n }\n\n export function getDefinition(klass: Constructable<PlaceComponent>): PlaceDefinition {\n return Reflect.getMetadata(DEFINITION_META_DATA_KEY, klass);\n }\n\n export function injectDefinition(klass: Constructable<PlaceComponent>, definition: PlaceDefinition) {\n Reflect.defineMetadata(DEFINITION_META_DATA_KEY, definition, klass);\n }\n\n}\n","import { Input, OnInit } from '@angular/core';\nimport { Constructable, Dsl, ListModel, ListModelChain, StoreInListModel, UseDelegate } from '@coolon/pectin';\nimport { Memoize } from '@typescript-plus/fast-memoize-decorator/dist/src';\nimport { DisposableComponent } from '../../components/disposable-component';\nimport { NavItem } from '../nav-item';\nimport { PlaceComponent } from '../place-component';\nimport { PlaceDefinition } from '../place-definition';\n\nexport class AbstractPlaceNavigationComponent extends DisposableComponent implements OnInit {\n\n @Input() @StoreInListModel('placesModel')\n places: Constructable<PlaceComponent>[];\n\n @Input() @UseDelegate()\n placesModel: ListModel<Constructable<PlaceComponent>>;\n\n readonly placeDefinitions: ListModelChain<PlaceDefinition>;\n\n constructor() {\n super();\n const { chain, valueOf, before, when, after, observe, switchOn } = Dsl.disposeWith(this);\n this.placeDefinitions = chain(this.placesModel).map(c => PlaceComponent.getDefinition(c));\n }\n\n @Memoize()\n getNav(placeDef: PlaceDefinition): NavItem {\n const navItem = placeDef.getPlaceData('nav') as NavItem;\n return {\n title: () => navItem ? navItem.title() : placeDef.searchPlaceData(['navTitle', 'title']),\n tooltip: () => navItem && navItem.tooltip ? navItem.tooltip() : placeDef.getPlaceData('navTooltip', null),\n icon: () => navItem && navItem.icon ? navItem.icon() : placeDef.getPlaceData('navIcon', null)\n };\n }\n\n ngOnInit() {\n }\n\n}\n","import { Trace } from '@coolon/pectin';\nimport { PlaceComponent } from './place-component';\nimport { PlaceDefinition } from './place-definition';\nimport { Visit } from './visit';\n\nexport abstract class NavigationSession {\n\n private _alreadyAccepted: PlaceComponent[] = [];\n\n private _visits = new Map<PlaceDefinition, Visit>();\n private _popStateReturnUrl: string;\n\n abstract readonly isExternal: boolean;\n\n protected constructor(readonly firstNavigation: boolean) {\n }\n\n storeVisit(visit: Visit) {\n this._visits.set(visit.placeDefinition, visit);\n }\n\n getVisitFor(placeDef: PlaceDefinition) {\n return this._visits.get(placeDef);\n }\n\n mergePrivatePlaceParameters(params: { [p: string]: any }): NavigationSession {\n return null;\n }\n\n // @Trace()\n alreadyAccepted(placeComponent: PlaceComponent): boolean {\n return this._alreadyAccepted.includes(placeComponent);\n }\n\n // @Trace()\n rememberAcceptanceOf(component: PlaceComponent) {\n this._alreadyAccepted.push(component);\n }\n\n setPopstateReturn(url: string) {\n this._popStateReturnUrl = url;\n }\n\n get isPopState(): boolean {\n return !!this._popStateReturnUrl;\n }\n\n get popStateReturnUrl() {\n return this._popStateReturnUrl;\n }\n\n getVisits(): Visit[] {\n return Array.from(this._visits.values());\n }\n}\n\nexport namespace NavigationSession {\n\n class External extends NavigationSession {\n readonly isExternal = true;\n\n constructor(isFirstTime: boolean) {\n super(isFirstTime);\n }\n }\n\n class Internal extends NavigationSession {\n readonly isExternal = false;\n\n constructor(visit: Visit) {\n super(false);\n this.storeVisit(visit);\n }\n }\n\n export function createInternal(visit: Visit): NavigationSession {\n return new Internal(visit);\n }\n\n export function createExternal(firstTimeRoute: boolean): NavigationSession {\n return new External(firstTimeRoute);\n }\n\n\n}\n\n","import { Component, HostBinding } from '@angular/core';\nimport { AbstractPlaceNavigationComponent } from '../abstract-place-navigation.component';\n\n@Component({\n selector: 'angular-ui-powerups-list-place-nav',\n templateUrl: './list-place-nav.component.html',\n styleUrls: ['./list-place-nav.component.scss']\n})\nexport class ListPlaceNavComponent extends AbstractPlaceNavigationComponent {\n\n @HostBinding('class.expanded')\n public expanded = true;\n\n constructor() {\n super();\n }\n\n expandMenu() {\n this.expanded = true;\n }\n\n collapseMenu() {\n this.expanded = false;\n }\n\n toggleMenu() {\n this.expanded = !this.expanded;\n }\n}\n","import { Injectable } from '@angular/core';\nimport { Router } from '@angular/router';\nimport { Trace } from '@coolon/pectin';\nimport _ from 'lodash';\nimport { PlaceDefinition } from './place-definition';\nimport { Visit } from './visit';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class PlaceHistory {\n\n private _history = new Map<PlaceDefinition, Visit[]>();\n\n constructor(private readonly router: Router) {\n }\n\n // @Trace()\n add(state: Visit) {\n const history = this.getHistory(state.placeDefinition);\n const previousState = _.last(history);\n if (!previousState || state.hasChangedFrom(previousState)) {\n history.unshift(state); // LIFO\n this.setHistory(state.placeDefinition, history.slice(0, 3)); // limit our history to 4 visits\n }\n }\n\n getHistory(placeDef: PlaceDefinition): Visit[] {\n let history = this._history.get(placeDef);\n if (!history) {\n history = [];\n this.setHistory(placeDef, history);\n }\n return history;\n }\n\n private setHistory(placeDef: PlaceDefinition, history: Visit[]) {\n this._history.set(placeDef, history);\n }\n\n// previousVisit(): Visit {\n // return _.last(this._history);\n // }\n //\n // withPreviousVisit<R>(callback:(previousVisit:Visit)=>R, defaultValue:R = null):R{\n // const visit = this.previousVisit();\n // return visit ? callback(visit) : defaultValue;\n // }\n //\n // previousVisitTo(place: Place): Visit {\n // return new VisitHistory.Query(this._history).to(place).last();\n // }\n}\n\nexport namespace VisitHistory {\n\n // export class Query {\n // private _history: Visit.State[];\n // private _places: Place[];\n // private _predicate: (visit: any) => boolean;\n // private _limit: number;\n //\n // constructor(history, limit = history.length) {\n // this._history = history;\n // this._places = [];\n // this._predicate = (visit => true);\n // this._limit = limit;\n // }\n //\n // to(...places:Place[]):this {\n // this._places = places;\n // return this;\n // }\n //\n // with(parameters: { [parameter: string]: any }): this {\n // this.matching(state => {\n // return Object.keys(parameters).reduce((acc, key) => {\n // const matchValue = parameters[key];\n // const visitValue = state.get(key);\n // const matched = matchValue === '*' ? !_.isNil(visitValue) : visitValue == matchValue;\n // // Logger.get(this).info(`matched=${matched}`, parameters, visitValue);\n // return acc && matched;\n // }, true);\n // });\n // return this;\n // }\n //\n // last(): Visit.State {\n // return _.findLast(this._history, visit => this._matches(visit))\n // }\n //\n // // @trace\n // allThatMatch(): Visit.State[] {\n // return _.filter(this._history, visit => this._matches(visit)).slice(-this._limit);\n // }\n //\n // // @trace\n // mostRecentValueOf<T=any>(param: string, defaultValue: T = null): T {\n // const lastStateWithParam = _.findLast(this.allThatMatch(), state => !_.isNil(state.get(param)));\n // return _.isNil(lastStateWithParam) ? defaultValue : lastStateWithParam.get(param);\n // }\n //\n // limit(limit: number): this {\n // this._limit = limit;\n // return this;\n // }\n //\n // matching(predicate: (visit: Visit.State) => boolean): this {\n // this._predicate = predicate;\n // return this;\n // }\n //\n // _matches(visit: Visit.State) {\n // return this._isPlaceMatch(visit) && this._predicate(visit);\n // }\n //\n // _isPlaceMatch(visit: Visit.State) {\n // return this._places.length < 1 || this._places.includes(visit.place)\n // }\n //\n // }\n\n}\n","import { Trace } from '@coolon/pectin';\nimport * as _ from 'lodash';\nimport { PlaceDefinition } from './place-definition';\nimport { ParameterDefinition } from './route/parameter-definition.class';\n\ninterface Params {\n [p: string]: any\n}\n\n\nexport class Visit {\n\n constructor(readonly placeDefinition: PlaceDefinition, private readonly visitParameters: Params = {}) {\n }\n\n // @Trace()\n getRouteId(): any {\n return this.placeDefinition.getRouteIdFrom(this);\n }\n\n // @Trace()\n hasRouteId(): boolean {\n return !_.isNil(this.getRouteId());\n }\n\n /**\n * Returns the value of the place parameter with the specified name. The parameter\n * name is taken from the `as` option, e.g. {as: 'aCustomName'} otherwise it is the\n * same as the the ValueModel property name.\n * @param parameterName the field name of the property model or the `as` option if specified.\n */\n getParameter(parameterName: string): any {\n return this.visitParameters[parameterName];\n }\n\n // @Trace()\n hasParameter(parameterName: string) {\n return Object.keys(this.visitParameters).includes(parameterName);\n }\n\n replace<S>(parameter: ParameterDefinition<any, S>, value: S): Visit {\n return new Visit(this.placeDefinition, { ...this.visitParameters, [parameter.name]: value });\n }\n\n mergeRouteParameters<S>(routeParams: { [p: string]: any }): Visit {\n // todo: whitelist parameters.\n const routeParameterKeys = Object.keys(routeParams);\n const params = {};\n this.placeDefinition.getVisitParameterDefs().forEach(def => {\n if (def.isRouteId || def.isRouteParameter) {\n if (routeParameterKeys.includes(def.name)) {\n params[def.name] = routeParams[def.name];\n }\n } else {\n // copy non route params as is, but only if they already exist otherwise we'll inject nil values and break the\n // defaults and remember sanitisation process.\n if (this.hasParameter(def.name)) {\n params[def.name] = this.getParameter(def.name);\n }\n }\n });\n return new Visit(this.placeDefinition, params);\n }\n\n hasRoutingChangedFrom(other: Visit): boolean {\n const samePlace = other.placeDefinition === this.placeDefinition;\n const sameRouteParameters = _.isEqual(\n this.placeDefinition.getFormattedRouteParameters(this, true),\n this.placeDefinition.getFormattedRouteParameters(other, true)\n );\n return !samePlace || !sameRouteParameters;\n }\n\n hasChangedFrom(other: Visit) {\n const sameNonRouteParameters = _.isEqual(\n this.placeDefinition.getNonRouteParameters(this),\n this.placeDefinition.getNonRouteParameters(other)\n );\n return !sameNonRouteParameters || this.hasRoutingChangedFrom(other);\n }\n}\n","import { Location } from '@angular/common';\nimport { Injectable } from '@angular/core';\nimport {\n ActivatedRoute,\n ActivatedRouteSnapshot,\n NavigationEnd,\n NavigationError,\n NavigationStart,\n Router\n} from '@angular/router';\nimport {\n BooleanValueModelChain,\n Dsl,\n GarbageCollector,\n HasOneIndexChain,\n ListModel,\n MutableListModel,\n MutableValueModel,\n Trace,\n ValueModel\n} from '@coolon/pectin';\nimport _ from 'lodash';\nimport { NavigationSession } from './navigation-session';\nimport { PlaceHistory } from './place-history';\nimport { Visit } from './visit';\n\n\n@Injectable({\n providedIn: 'root'\n})\nexport class PlaceRouter extends GarbageCollector {\n\n private firstRoute = true;\n\n private readonly _navigationSessionModel = new MutableValueModel<NavigationSession>();\n private readonly _activeVisits = new MutableListModel<Visit>();\n\n readonly navigationSessionActive: BooleanValueModelChain;\n readonly activeVisitIndex: HasOneIndexChain<'placeDefinition', Visit>;\n\n constructor(private readonly router: Router, readonly angularLocation: Location, readonly placeHistory: PlaceHistory) {\n super();\n const { chain, valueOf, before, when, after, observe, switchOn } = Dsl.disposeWith(this);\n this.activeVisitIndex = chain(this._activeVisits).indexBy('placeDefinition');\n\n angularLocation.onUrlChange(url => {\n console.log(`location.onUrlChange -> ${url}`);\n });\n\n // TODO: make setup the callbacks in during module initiation to make this testable.\n this.router.events.subscribe(event => {\n // Routing event sequence\n // ======================\n // NavigationStart -> .... -> NavigationCancel --> redirect, go around again in the same session\n // NavigationStart -> .... -> NavigationEnd --> navigation complete, end session.\n // NavigationStart -> .... -> NavigationError --> navigation canceled, end session.\n // =======================\n if (event instanceof NavigationStart) {\n this.onAngularRouterStarted(event);\n }\n if (event instanceof NavigationEnd || event instanceof NavigationError) {\n this.onAngularRouterFinished();\n }\n });\n\n this.navigationSessionActive = chain(this.navigationSessionModel).isNotNil();\n this.navigationSessionActive.subscribe(active => {\n console.log('navigationSessionActive', active);\n });\n // const txo = new TransactionObserver().onEvent(e => console.log(e.toString()));\n // txo.observe('this.navigationSessionModel', this.navigationSessionModel);\n }\n\n get navigationSession(): NavigationSession {\n return this._navigationSessionModel.value;\n }\n\n get navigationSessionModel(): ValueModel<NavigationSession> {\n return this._navigationSessionModel.readonly;\n }\n\n get activeVisits(): ListModel<Visit> {\n return this._activeVisits.readonly;\n }\n\n /**\n * placeRouter.navigate(placeDestinations.somePlace.createVisit(routeId, ...visitParams));\n * @param visit\n */\n @Trace()\n async navigate(visit: Visit, options?: { relativeTo: ActivatedRoute }) {\n this.doNavigation(visit, async router => {\n const commands = [\n visit.placeDefinition.path,\n ...this.createRouteParameters(visit)\n ];\n await this.router.navigate(commands, {\n relativeTo: options ? options.relativeTo : null\n });\n });\n }\n\n @Trace()\n async pushVisitChangesToRoute(activatedRoute: ActivatedRoute, previous: Visit, next: Visit) {\n\n // we have to push to history so our remember sanitisers don't pick up the previous value\n // when it's been cleared by the user.\n this.placeHistory.add(next);\n\n // FIXME: no route id -> route id duplicates route parameters\n if (next.hasRoutingChangedFrom(previous)) {\n return this.doNavigation(next, router => {\n const relativePath = !!previous.placeDefinition.hasRouteId() ? '..' : '.';\n const commands = [\n relativePath,\n ...this.createRouteParameters(next),\n ...this.extractChildPath(activatedRoute.snapshot)\n ];\n console.log('### Redirect', commands);\n return router.navigate(commands, {\n relativeTo: activatedRoute\n });\n });\n }\n }\n\n async doNavigation(visit: Visit, customNavigation: (router: Router) => any) {\n this._navigationSessionModel.value = NavigationSession.createInternal(visit);\n try {\n await customNavigation(this.router);\n } finally {\n if (this.navigationSession && !this.router.getCurrentNavigation()) {\n this.onAngularRouterFinished();\n }\n }\n }\n\n private createRouteParameters(visit: Visit) {\n const def = visit.placeDefinition;\n return visit.hasRouteId() ?\n [def.getFormattedRouteId(visit), def.getFormattedRouteParameters(visit)] :\n [def.getFormattedRouteParameters(visit)];\n }\n\n// @Trace()\n private onAngularRouterStarted(event: NavigationStart) {\n if (!this.navigationSession) { // We been activated by an external route rather than placeRouter.go(visit)\n console.log('navigation started', { firstTime: this.firstRoute });\n const session = NavigationSession.createExternal(this.firstRoute);\n if (event.navigationTrigger === 'popstate') {\n session.setPopstateReturn(this.router.routerState.snapshot.url);\n }\n this._navigationSessionModel.value = session;\n }\n this.firstRoute = false;\n }\n\n // @Trace()\n private onAngularRouterFinished() {\n const session = this._navigationSessionModel.value;\n // Update visits before we end the navigation session. This allows the place out let to\n // gate ignore changes that occur while the visit is active\n const visits = session.getVisits();\n visits.forEach(v => {\n this.placeHistory.add(v);\n });\n this._activeVisits.value = visits;\n\n this._navigationSessionModel.value = null;\n }\n\n extractChildPath(activatedRoute: ActivatedRouteSnapshot): any[] {\n return _.flatten(activatedRoute.children.map(child => child.url));\n }\n}\n","import { animate, group, query, style, transition, trigger } from '@angular/animations';\n\n// Freezes the state of the components at the start of the animation.\nconst animationStartStyle = style({ position: 'absolute', top: '0', left: '0', bottom: '0', right: '0' });\n\nconst left = [\n query(':enter, :leave', animationStartStyle, { optional: true }),\n group([\n query(':enter', [\n style({ transform: 'translateX(-100%)' }),\n animate('{{duration}} ease-out', style({ transform: 'translateX(0%)' }))\n ], {\n optional: true\n }),\n query(':leave', [\n style({ transform: 'translateX(0%)' }),\n animate('{{duration}} ease-out', style({ transform: 'translateX(100%)' }))\n ], {\n optional: true\n })\n ])\n];\n\nconst right = [\n query(':enter, :leave', animationStartStyle, { optional: true }),\n group([\n query(':enter', [\n style({ transform: 'translateX(100%)' }),\n animate('{{duration}} ease-out', style({ transform: 'translateX(0%)' }))\n ], {\n optional: true\n }),\n query(':leave', [style({ transform: 'translateX(0%)' }), animate('{{duration}} ease-out', style({ transform: 'translateX(-100%)' }))], {\n optional: true\n })\n ])\n];\n\nexport function leftRightPlaceAnimation(duration: string) {\n return trigger('routeAnimations', [\n transition(':increment', right, { params: { duration: duration } }),\n transition(':decrement', left, { params: { duration: duration } })\n ]);\n}\n\nexport const LEFT_RIGHT_PLACE_ANIMATION = leftRightPlaceAnimation('0.3s');\n","import { Component, EventEmitter, Input, OnInit, Optional, Output, SkipSelf, ViewChild } from '@angular/core';\nimport { ActivatedRoute, Router, RouterOutlet } from '@angular/router';\nimport { Dsl, Guard, MutableValueModel, Trace, ValueModel } from '@coolon/pectin';\nimport { DisposableComponent } from '../../../components/disposable-component';\nimport { PlaceComponent } from '../../place-component';\nimport { PlaceDefinition } from '../../place-definition';\nimport { PlaceRouter } from '../../place-router';\n\nimport { Visit } from '../../visit';\nimport { LEFT_RIGHT_PLACE_ANIMATION } from './route-animations';\n\n// Quick hack to avoid circular references between this and PlaceComponents.\ninterface PlaceRef {\n readonly placeDefinition: PlaceDefinition\n\n initialiseBindings(param: ValueModel<Visit>): void;\n\n onPlaceReady(): void;\n}\n\n@Component({\n selector: 'angular-ui-powerups-place-outlet',\n templateUrl: './place-outlet.component.html',\n styleUrls: ['./place-outlet.component.scss'],\n animations: [LEFT_RIGHT_PLACE_ANIMATION]\n})\nexport class PlaceOutletComponent extends DisposableComponent implements OnInit {\n\n @Input()\n animate = true;\n\n @Output()\n readonly placeChanged = new EventEmitter<PlaceComponent>();\n\n @ViewChild('routeOutlet', { static: true })\n routerOut: RouterOutlet;\n\n private readonly _activePlace = new MutableValueModel<PlaceComponent>();\n\n private readonly _inOutletUpdate = new Guard();\n private readonly _activatedRouteModel = new MutableValueModel<ActivatedRoute>();\n private readonly _placeDefinition = new MutableValueModel<PlaceDefinition>();\n\n /** TODO: This is now really a visit */\n readonly _placeVisit = new MutableValueModel<Visit>();\n\n constructor(private readonly router: Router, private readonly placeRouter: PlaceRouter, @SkipSelf() @Optional() readonly parentOutlet: PlaceOutletComponent) {\n super();\n const { chain, valueOf, before, when, after, observe, switchOn } = Dsl.disposeWith(this);\n\n // Push incoming changes into the component\n const routeVisit = chain(this._activePlace).pluck('placeDefinition').findIn(placeRouter.activeVisitIndex);\n const inRouteVisitUpdate = new Guard();\n when.valueOf(routeVisit).changes((visit) => {\n if (visit) { // can be null while the place and index sync up\n inRouteVisitUpdate.whileTrue(() => {\n this._placeVisit.value = visit;\n });\n }\n });\n\n // Handle component based changes\n when.valueOf(this._placeVisit).changes((next, previous) => {\n this.pushVisitChangesToRoute(next, previous);\n }, {\n unless: inRouteVisitUpdate\n });\n\n chain(this._activePlace)\n .postponeWhile(placeRouter.navigationSessionActive)\n .subscribe(place => this.placeChanged.emit(place));\n\n // const txo = new TransactionObserver().onEvent(e => console.log(e.toString()));\n // txo.observe('inRouteVisitUpdate', inRouteVisitUpdate);\n\n }\n\n ngOnInit() {\n }\n\n @Trace()\n navigate(visit: Visit) {\n console.log({ activatedRoute: this._activatedRouteModel.value });\n this.placeRouter.navigate(visit, {\n relativeTo: this.parentOutlet ? this.parentOutlet.activatedRouteModel.value : null\n });\n }\n\n pushVisitChangesToRoute(next: Visit, previous: Visit) {\n const activatedRoute = this._activatedRouteModel.value;\n this.placeRouter.pushVisitChangesToRoute(activatedRoute, previous, next);\n }\n\n get activePlaceModel(): ValueModel<PlaceComponent> {\n return this._activePlace.readonly;\n }\n\n get activatedRouteModel(): ValueModel<ActivatedRoute> {\n return this._activatedRouteModel.readonly;\n }\n\n @Trace()\n onOutletActivated(routerOutlet: RouterOutlet, place: PlaceComponent) {\n this._inOutletUpdate.whileTrue(() => {\n try {\n this._activePlace.value = place;\n this._activatedRouteModel.value = routerOutlet.activatedRoute;\n this._placeDefinition.value = place.placeDefinition;\n place.initialiseBindings(this._placeVisit);\n } catch (error) {\n console.error(error);\n }\n });\n if (!this.animate) {\n // we're not animating so trigger any post animation callbacks now.\n this.animationDone();\n }\n }\n\n @Trace()\n onOutletDeactivated(routerOutlet: RouterOutlet, $event: PlaceRef) {\n this._inOutletUpdate.whileTrue(() => {\n this._activePlace.value = null;\n this._activatedRouteModel.value = null;\n this._placeDefinition.value = null;\n });\n }\n\n getPlaceOrder(outlet: RouterOutlet) {\n return this.animate && outlet && outlet.activatedRouteData && outlet.activatedRouteData['placeOrder'];\n }\n\n animationDone() {\n if (this._activePlace.value) {\n this._activePlace.value.onPlaceReady();\n }\n }\n\n\n}\n","import { Component } from '@angular/core';\nimport { AbstractPlaceNavigationComponent } from '../abstract-place-navigation.component';\n\n@Component({\n selector: 'angular-ui-powerups-tabbed-place-navigation',\n templateUrl: './tabbed-place-navigation.component.html',\n styleUrls: ['./tabbed-place-navigation.component.scss']\n})\nexport class TabbedPlaceNavigationComponent extends AbstractPlaceNavigationComponent {\n constructor() {\n super();\n }\n}\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { MatProgressSpinnerModule } from '@angular/material';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatListModule } from '@angular/material/list';\nimport { MatTabsModule } from '@angular/material/tabs';\nimport { MatTooltipModule } from '@angular/material/tooltip';\nimport { BrowserAnimationsModule } from '@angular/platform-browser/animations';\nimport { RouterModule } from '@angular/router';\nimport { BusyOverlayComponent } from './components/busy-overlay/busy-overlay.component';\nimport { EmptyStateComponent } from './components/empty-state/empty-state.component';\nimport { ListPlaceNavComponent } from './components/list-place-nav/list-place-nav.component';\nimport { PlaceOutletComponent } from './components/place-outlet/place-outlet.component';\nimport { TabbedPlaceNavigationComponent } from './components/tabbed-place-navigation/tabbed-place-navigation.component';\n\n@NgModule({\n imports: [\n CommonModule,\n BrowserAnimationsModule,\n MatProgressSpinnerModule,\n RouterModule,\n MatTabsModule,\n MatListModule,\n MatTooltipModule,\n MatIconModule\n ],\n declarations: [\n EmptyStateComponent,\n BusyOverlayComponent,\n PlaceOutletComponent,\n TabbedPlaceNavigationComponent,\n ListPlaceNavComponent\n ],\n entryComponents: [BusyOverlayComponent],\n exports: [\n BusyOverlayComponent,\n PlaceOutletComponent,\n EmptyStateComponent,\n TabbedPlaceNavigationComponent,\n ListPlaceNavComponent\n ],\n providers: []\n})\nexport class PlaceModule {\n\n}\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { MatFormFieldModule, MatInputModule, MatSelectModule } from '@angular/material';\nimport { MatTabsModule } from '@angular/material/tabs';\nimport { BrowserAnimationsModule } from '@angular/platform-browser/animations';\nimport { NumberInputComponent } from './components/forms/number-input/number-input.component';\nimport { PasswordInputComponent } from './components/forms/password-input/password-input.component';\nimport { SelectInputComponent } from './components/forms/select-input/select-input.component';\nimport { StringInputComponent } from './components/forms/string-input/string-input.component';\nimport { NoopComponent } from './components/noop/noop.component';\nimport { CommandDirective } from './directives/command.directive';\nimport { FocusBindingDirective } from './directives/focus-binding.directive';\nimport { InteractionModule } from './interaction/interaction.module';\nimport { PlaceModule } from './place/place.module';\n\n@NgModule({\n declarations: [\n CommandDirective,\n FocusBindingDirective,\n NumberInputComponent,\n StringInputComponent,\n PasswordInputComponent,\n SelectInputComponent,\n NoopComponent\n ],\n imports: [\n CommonModule,\n BrowserAnimationsModule,\n FormsModule,\n MatInputModule,\n MatFormFieldModule,\n MatSelectModule,\n MatTabsModule,\n PlaceModule,\n InteractionModule\n ],\n exports: [\n CommandDirective,\n FocusBindingDirective,\n NumberInputComponent,\n StringInputComponent,\n PasswordInputComponent,\n SelectInputComponent,\n InteractionModule,\n PlaceModule,\n NoopComponent\n ]\n\n})\nexport class AngularUiPowerupsModule {\n}\n","import { animate, AnimationStyleMetadata, style, transition, trigger } from '@angular/animations';\nimport { OptionsHelper } from '@coolon/pectin';\n\nconst defaultHiddenStyleDef = style({\n opacity: 0,\n 'height': '0',\n paddingTop: '0',\n paddingBottom: '0'\n});\n\nexport function slideDownAndUpAnimation(triggerName: string, options?: {\n duration?: string;\n hiddenStyleDef?: AnimationStyleMetadata;\n}) {\n // SEE to fix this: https://github.com/angular/angular/issues/15587#issuecomment-351510501\n const duration = OptionsHelper.get(options).getOptional('duration', '100ms');\n const hiddenStyleDef = OptionsHelper.get(options).getOptional('hiddenStyleDef', defaultHiddenStyleDef);\n return trigger(triggerName, [\n transition(':enter', [hiddenStyleDef, animate('100ms')]),\n transition(':leave', [animate('100ms', hiddenStyleDef)])\n ]);\n}\n\n// export function slideOutLeftAnimation(triggerName: string, duration:string = \"100ms\") {\n// return trigger(triggerName, [\n// state('true', style(\n// {\n// 'width': '*',\n// 'overflow': 'hidden',\n// 'opacity': '1'\n// })),\n// state('false', style({\n// 'width': '0px',\n// 'overflow': 'hidden',\n// 'opacity': '0'\n// })),\n// transition('* => *', [animate(duration)])\n// ]);\n// }\n","export class Dimension {\n constructor(readonly width: number, readonly height: number) {\n }\n}\n","export class Point {\n\n static from(data: { x: number, y: number }) {\n return new Point(data.x, data.y);\n }\n\n constructor(readonly x: number, readonly y: number) {\n }\n\n translate(x: number, y: number): Point {\n return new Point(this.x + x, this.y + y);\n }\n}\n","import { Dimension } from './dimension.class';\nimport { Point } from './point.class';\n\nexport class Bounds extends Dimension {\n\n constructor(readonly top: number, readonly left: number, readonly width: number, readonly height: number) {\n super(width, height);\n }\n\n relativePositionOf(point: { x: number, y: number } | MouseEvent) {\n if (point instanceof MouseEvent) {\n return new Point(point.clientX - this.left, point.clientY - this.top);\n } else {\n return new Point(point.x - this.left, point.y - this.top);\n }\n }\n}\n\nexport namespace Bounds {\n export function ofElement(element: HTMLElement): Bounds {\n const rect = element.getBoundingClientRect();\n return new Bounds(rect.top, rect.left, rect.width, rect.height);\n }\n}\n\n","import { AfterViewInit, ElementRef, NgZone } from '@angular/core';\nimport { ValueHolder, ValueModel } from '@coolon/pectin';\nimport ResizeObserver from 'resize-observer-polyfill';\nimport { DisposableComponent } from './disposable-component';\nimport { Bounds } from './types/bounds.class';\nimport { Point } from './types/point.class';\n\nexport class ResizeAwareComponent extends DisposableComponent implements AfterViewInit {\n\n private _boundsModel = new ValueHolder<Bounds>(new Bounds(0, 0, 0, 0));\n\n constructor(protected readonly elementRef: ElementRef, protected readonly ngZone: NgZone) {\n super();\n }\n\n ngAfterViewInit(): void {\n this.updateBounds();\n const element = this.elementRef.nativeElement;\n const ro = new ResizeObserver((entries, observer) => {\n this.ngZone.run(() => this.updateBounds());\n });\n ro.observe(element);\n this.onDispose(() => ro.disconnect());\n }\n\n get boundsModel(): ValueModel<Bounds> {\n return this._boundsModel.readonly;\n }\n\n get nativeElement() {\n return this.elementRef.nativeElement;\n }\n\n // TODO: Make this handle body scroll\n public relativePositionOf(point: { x: number, y: number } | MouseEvent): Point {\n return this.bounds.relativePositionOf(point);\n }\n\n get bounds(): Bounds {\n return this._boundsModel.value;\n }\n\n private updateBounds() {\n this._boundsModel.value = Bounds.ofElement(this.nativeElement);\n }\n\n\n}\n\nexport namespace ResizeAwareComponent {\n\n}\n","export interface Result<R, E> {\n // catch(callback: (error: E) => void): Result<R,E>;\n}\n\nexport namespace Result {\n export interface Callback<R, E> {\n then: <T>(result: R) => T;\n catch: <T>(result: E) => T;\n }\n\n}\n\n// const r:Result<string, number> = null;\n\n// r.catch(e => {}).then();\n\n","import _ from 'lodash';\n\nexport interface Formatter<T> {\n format(value: T): string;\n\n parse(value: string): T;\n}\n\nexport namespace Formatter {\n\n class StringType implements Formatter<string> {\n format(value: string): string {\n return value;\n }\n\n parse(value: string): string {\n return value;\n }\n }\n\n class NumberType implements Formatter<number> {\n format(value: number): string {\n return _.isNumber(value) && !_.isNaN(value) ? `${value}` : null;\n }\n\n parse(value: string): number {\n const parsed = Number.parseFloat(value);\n return _.isNaN(parsed) ? null : parsed;\n }\n }\n\n class BooleanType implements Formatter<boolean> {\n format(value: boolean): string {\n return value ? 'true' : 'false';\n }\n\n parse(value: string): boolean {\n return value === 'true';\n }\n }\n\n export const STRING = new StringType();\n export const NUMBER = new NumberType();\n export const BOOLEAN = new BooleanType();\n}\n","import { Injectable, Injector } from '@angular/core';\nimport {\n ActivatedRouteSnapshot,\n CanActivate,\n CanDeactivate,\n Router,\n RouterStateSnapshot,\n UrlTree\n} from '@angular/router';\nimport { Trace } from '@coolon/pectin';\nimport { Observable } from 'rxjs';\nimport { NoopComponent } from '../../components/noop/noop.component';\nimport { InteractionContext } from '../interaction-context';\n\n\n@Injectable({\n providedIn: 'root'\n})\nexport class InteractionGuard implements CanDeactivate<NoopComponent>, CanActivate {\n\n constructor(private router: Router, private injector: Injector, private readonly interactionContext: InteractionContext) {\n }\n\n @Trace()\n canActivate(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): Observable<boolean | UrlTree> | Promise<boolean | UrlTree> | boolean | UrlTree {\n return true;\n }\n\n @Trace()\n canDeactivate(component: NoopComponent, currentRoute: ActivatedRouteSnapshot, currentState: RouterStateSnapshot, nextState?: RouterStateSnapshot): Observable<boolean | UrlTree> | Promise<boolean | UrlTree> | boolean | UrlTree {\n return !this.interactionContext.isActive();\n }\n\n}\n","import { Constructable, lang } from '@coolon/pectin';\nimport * as _ from 'lodash';\nimport { PlaceComponent } from './place-component';\nimport { PlaceDefinition } from './place-definition';\n\nexport function Place(options: Place.Options) {\n return (target: Function) => {\n if (PlaceComponent.isPlaceComponentConstructor(target)) {\n PlaceComponent.injectDefinition(target, new PlaceDefinition(\n target,\n options.path,\n _.isNil(options.authenticate) ? false : options.authenticate,\n options.order,\n options.data,\n PlaceComponent.getRouteParameters(target),\n (options.children || []).map(c => PlaceComponent.getDefinition(c))\n ));\n\n } else {\n lang.illegalState(`${target} must extend PlaceComponent to use the @Place decorator`);\n }\n };\n}\n\nexport namespace Place {\n\n export interface Options {\n path: string,\n order: number;\n data?: { [key: string]: any }, // defaults to true\n authenticate?: boolean, // defaults to true\n children?: Constructable<PlaceComponent>[]\n defaultChild?: Constructable<PlaceComponent>\n }\n\n}\n","import { Injector } from '@angular/core';\nimport { ActivatedRouteSnapshot, Router } from '@angular/router';\nimport { Trace } from '@coolon/pectin';\nimport { PlaceHistory } from '../place-history';\nimport { Visit } from '../visit';\n\nexport class VisitSanitiser {\n constructor(private activatedRoute: ActivatedRouteSnapshot, private router: Router, private placeHistory: PlaceHistory, private injector: Injector) {\n\n }\n\n // @Trace()\n async sanitise(visit: Visit): Promise<Visit> {\n const placeDef = visit.placeDefinition;\n if (placeDef.hasRouteId()) {\n const routeIdDef = placeDef.getRouteIdParameterDef();\n const routeId = visit.getRouteId();\n const sanitisedValue = await routeIdDef.sanitise(routeId, visit, this.placeHistory, this.injector);\n console.log({routeId, sanitisedValue});\n // ###------- EARLY EXIT --------###\n if (routeIdDef.hasChanged(routeId, sanitisedValue)) {\n // if the route id has changed we redirect immediately as other\n // parameter sanitisers might use it.\n return visit.replace(routeIdDef, sanitisedValue);\n }\n }\n\n // if we didn't replace the routeId we continue the url present parameters.\n const parameterDefs = placeDef.getVisitParameterDefs({\n includeRouteParameters: true,\n includeNonRouteParameters: true\n });\n let sanitisedVisit: Visit = visit;\n for (let i = 0; i < parameterDefs.length; i++) {\n const def = parameterDefs[i];\n const value = visit.getParameter(def.name);\n const sanitisedValue = await def.sanitise(value, sanitisedVisit, this.placeHistory, this.injector);\n if (def.hasChanged(value, sanitisedValue)) {\n sanitisedVisit = sanitisedVisit.replace(def, sanitisedValue);\n }\n }\n\n return sanitisedVisit.hasChangedFrom(visit) ? sanitisedVisit : visit;\n }\n\n}\n","import { Location } from '@angular/common';\nimport { Injectable, Injector } from '@angular/core';\nimport { ActivatedRouteSnapshot, CanDeactivate, Router, RouterStateSnapshot } from '@angular/router';\nimport { InteractionContext } from '../../../interaction/interaction-context';\nimport { PlaceComponent } from '../../place-component';\nimport { PlaceRouter } from '../../place-router';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class LeavePlaceGuard implements CanDeactivate<PlaceComponent> {\n\n constructor(private router: Router,\n private injector: Injector,\n private placeRouter: PlaceRouter,\n readonly interactionContext: InteractionContext, readonly angularLocation: Location) {\n }\n\n private isLeavingTheCurrentPlace(nextState: RouterStateSnapshot, placeDefinitionPath: string) {\n // TODO: this will break with child routes... need to examine the router states properly.\n return !nextState.url.startsWith(placeDefinitionPath);\n }\n\n async canDeactivate(component: PlaceComponent, currentRoute: ActivatedRouteSnapshot, currentState: RouterStateSnapshot, nextState?: RouterStateSnapshot): Promise<boolean> {\n const placeDefinitionPath = `/${component.placeDefinition.path}`;\n // console.log('canDeactivate', {\n // staticPath: placeDefinitionPath,\n // currentStateUrl: currentState.url,\n // nextStateUrl: nextState.url\n // // alreadyDeclined: this._alreadyAccepted\n // });\n // Example of the above when navigating to a different child route.\n // canDeactivate {staticPath: \"/hero-details\",\n // currentStateUrl: \"/route-parameters/-1;dv=A;dl=a,b,c;rdv=A;rdl=a,b,c/hero-details\",\n // nextStateUrl: \"/route-parameters/-1;dv=A;dl=a,b,c;rdv=A;rdl=a,b,c/hero-stats\"\n // }\n\n // Example clicking on router tab of the parent component (de-activates the parent due to route param changes)\n // canDeactivate {\n // staticPath: \"/hero-stats\",\n // currentStateUrl: \"/route-parameters/-1;dv=A;dl=a,b,c;rdv=A;rdl=a,b,c/hero-stats\",\n // nextStateUrl: \"/route-parameters/\"\n // }\n // canDeactivate {\n // staticPath: \"/route-parameters\",\n // currentStateUrl: \"/route-parameters/-1;dv=A;dl=a,b,c;rdv=A;rdl=a,b,c/hero-stats\",\n // nextStateUrl: \"/route-parameters/\"\n // }\n // logger.class.js:54 ParameterSnapshot.sanitise -> {idModel: -1, pv: undefined, pl: Array(0), dv: undefined, dl: Array(0), â¦}\n // parameter-snapshot.ts:20 {name: \"idModel\", mine: -1, theirs: null}\n // place-router.ts:28 redirect path (3) [\"route-parameters\", \"-1\", {â¦}]\n // canDeactivate {\n // staticPath: \"/hero-stats\",\n // currentStateUrl: \"/route-parameters/-1;dv=A;dl=a,b,c;rdv=A;rdl=a,b,c/hero-stats\",\n // nextStateUrl: \"/route-parameters/-1\"\n // }\n // canDeactivate {\n // staticPath: \"/route-parameters\",\n // currentStateUrl: \"/route-parameters/-1;dv=A;dl=a,b,c;rdv=A;rdl=a,b,c/hero-stats\",\n // nextStateUrl: \"/route-parameters/-1\"\n // }\n // logger.class.js:54 ParameterSnapshot.sanitise -> {idModel: -1, pv: undefined, pl: Array(0), dv: \"A\", dl: Array(3), â¦}\n // parameter-snapshot.ts:20 {name: \"dv\", mine: \"A\", theirs: undefined}\n // place-router.ts:28 redirect path (3) [\"route-parameters\", \"-1\", {â¦}]\n // canDeactivate {\n // staticPath: \"/hero-stats\",\n // currentStateUrl: \"/route-parameters/-1;dv=A;dl=a,b,c;rdv=A;rdl=a,b,c/hero-stats\",\n // nextStateUrl: \"/route-parameters/-1;dv=A;dl=a,b,c;rdv=A;rdl=a,b,c\"\n // }\n\n\n // TODO: Add tests\n if (this.placeRouter.navigationSession.alreadyAccepted(component)) {\n // We'll get called multiple times if there's any parameter sanitisation so\n // we always return true if we accepted on a previous cycle of the current\n // navigation session.\n return true;\n } else {\n const self = this;\n let canLeave = true;\n\n if (this.isLeavingTheCurrentPlace(nextState, placeDefinitionPath)) {\n // we check the interaction first, so that components that don't need to check if they're in an\n // interaction during the canDeactivate cycle.\n // TODO: Add tests: show dialog -> hit back -> same route\n if (this.interactionContext.isActive()) {\n canLeave = false;\n console.log('cancelling', { activity: this.interactionContext.currentActivity });\n this.interactionContext.currentActivity.cancel(null);\n }\n // No interaction in progress, so ask the component .\n // This may start an interaction, hence checking the interaction context above. I.e. if the place pops up the dialog, and\n // the user clicks back again, we'll re-enter here and go bang when the component tries to open another\n // dialog.\n if (canLeave) {\n // TODO: Add tests: hit back -> confirm leave dialog -> hit back -> close dialog -> hit back -> confirm leave dialog.\n canLeave = await component.canDeactivate();\n }\n\n\n // We also block back button parameter changes while the dialog is open.\n // NOTE: Now that I'm catching parameter changes I could possibly retry using a fragment or\n // query parameter to track the dialog being open. Previously I was just checking this on\n // path changes... if that worked it'd fix the case where the back button breaks with an activity\n // open on the first page: https://coolon.atlassian.net/browse/AUP-33\n } else {\n if (this.interactionContext.isActive()) {\n console.log('cancelling', { activity: this.interactionContext.currentActivity });\n this.interactionContext.currentActivity.cancel(null);\n canLeave = false;\n } else {\n canLeave = true;\n }\n }\n\n if (canLeave) {\n // We'll get called multiple times if there's any parameter sanitisation so\n // we remember the acceptance for the duration of the current navigation session.\n self.placeRouter.navigationSession.rememberAcceptanceOf(component);\n } else {\n // Angular doesn't preserve the url when a guard cancels the back button.\n // See https://github.com/angular/angular/issues/13586#issuecomment-432795720\n if (this.placeRouter.navigationSession.isPopState) {\n console.log('cancelled during popstate');\n this.angularLocation.go(this.placeRouter.navigationSession.popStateReturnUrl);\n }\n }\n\n return canLeave;\n }\n }\n}\n","import { Injectable, Injector } from '@angular/core';\nimport {\n ActivatedRouteSnapshot,\n CanActivate,\n ParamMap,\n Router,\n RouterStateSnapshot,\n UrlSegment,\n UrlTree\n} from '@angular/router';\nimport { lang, Trace } from '@coolon/pectin';\nimport { Memoize } from '@typescript-plus/fast-memoize-decorator/dist/src';\nimport { PlaceComponent } from '../../place-component';\nimport { PlaceHistory } from '../../place-history';\nimport { PlaceRouter } from '../../place-router';\nimport { Visit } from '../../visit';\nimport { VisitSanitiser } from '../visit-sanitiser';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class PlaceRouteGuard implements CanActivate {\n\n constructor(private readonly router: Router,\n private readonly placeRouter: PlaceRouter,\n private readonly placeHistory: PlaceHistory,\n private readonly injector: Injector) {\n }\n\n // @Trace()\n async canActivate(activatedRoute: ActivatedRouteSnapshot, state: RouterStateSnapshot): Promise<boolean | UrlTree> {\n if (PlaceComponent.isPlaceComponentConstructor(activatedRoute.component)) {\n const placeDefinition = PlaceComponent.getDefinition(activatedRoute.component);\n // Parse our route params.\n const params = new PlaceRouteGuard.ConsolidatedParameterMap(activatedRoute.paramMap, activatedRoute.url);\n const parsedParams = placeDefinition.parseRouteParams(params);\n\n const initialVisit = this.placeRouter.navigationSession.getVisitFor(placeDefinition) || new Visit(placeDefinition, parsedParams);\n const sanitiser = new VisitSanitiser(activatedRoute, this.router, this.placeHistory, this.injector);\n const sanitisedVisit = await sanitiser.sanitise(initialVisit.mergeRouteParameters(parsedParams));\n\n // Save the visit with any updated parameters. We need to save it so we remember any non route parameters\n this.placeRouter.navigationSession.storeVisit(sanitisedVisit);\n if (initialVisit.hasRoutingChangedFrom(sanitisedVisit)) {\n const parameterCommands = sanitisedVisit.hasRouteId() ?\n [placeDefinition.getFormattedRouteId(sanitisedVisit), placeDefinition.getFormattedRouteParameters(sanitisedVisit)] :\n [placeDefinition.getFormattedRouteParameters(sanitisedVisit)];\n\n const commands = [(activatedRoute.url[0].path)].concat(parameterCommands, this.placeRouter.extractChildPath(activatedRoute));\n console.log('##### Redirect', commands);\n return this.router.createUrlTree(commands, {\n replaceUrl: true,\n skipLocationChange: false\n });\n } else {\n return true;\n }\n } else {\n return lang.illegalState(`expected component to be an instance of PlaceComponent, got ${activatedRoute.component}`);\n }\n }\n\n\n}\n\nexport namespace PlaceRouteGuard {\n /**\n * This a work around for the fact that an activated route with multiple segments doesn't\n * include the segment params in the paramMap as well as each segment returns an empty\n * param map even when `parameter`s has content.\n */\n export class ConsolidatedParameterMap implements ParamMap {\n\n private paramMaps: ParamMap[];\n\n constructor(paramMap: ParamMap, urlSegments: UrlSegment[]) {\n this.paramMaps = [paramMap].concat(\n (urlSegments || []).map(s => new ParamMapAdapter(s.parameters))\n ).filter(m => !!m); // the activated route param map can be null\n }\n\n get(name: string): string | null {\n const paramMap = this.paramMaps.find(m => m.has(name));\n return paramMap.get(name);\n }\n\n getAll(name: string): string[] {\n const paramMap = this.paramMaps.find(m => m.has(name));\n return paramMap.getAll(name);\n }\n\n has(name: string): boolean {\n return !!this.paramMaps.find(m => m.has(name));\n }\n\n @Memoize()\n get keys(): string[] {\n return this.paramMaps.reduce((result, params) => result.concat(params.keys), []);\n }\n }\n\n class ParamMapAdapter implements ParamMap {\n constructor(private readonly params: { [p: string]: string }) {\n }\n\n get(name: string): string | null {\n return this.params[name];\n }\n\n getAll(name: string): string[] {\n const value = this.get(name);\n return Array.isArray(value) ? value : [value];\n }\n\n has(name: string): boolean {\n return this.keys.includes(name);\n }\n\n get keys(): string[] {\n return Object.keys(this.params);\n }\n\n }\n}\n","import { UseDelegate } from '@coolon/pectin';\nimport { Klass, Opts } from '@coolon/typescript-utilities';\nimport { ROUTE_PARAMETER_LIST_KEY } from '../place-component';\nimport { ParameterDefinition } from './parameter-definition.class';\nimport { Formatter } from './formatter';\n\n\nexport interface RouteIdOptions<T> {\n as?: string;\n optional?: boolean;\n remember?: boolean;\n defaultValue?: T;\n // sanitiser?: Constructable<ParameterSanitiser<T>> | ParameterSanitiser<T>;\n}\n\nexport interface RouteParameterOptions<T> {\n as?: string;\n optional?: boolean;\n remember?: boolean;\n defaultValue?: T;\n storeInUrl?: Formatter<T>\n // sanitiser?: Constructable<ParameterSanitiser<T>> | ParameterSanitiser<T>;\n}\n\nexport interface RouteListParameterOptions<T> {\n as?: string;\n optional?: boolean;\n remember?: boolean;\n defaultValue?: T[];\n storeInUrl?: Formatter<T>\n // sanitiser?: Constructable<ParameterSanitiser<T[]>> | ParameterSanitiser<T[]>;\n}\n\nexport function RouteId<T extends string | number>(type: Formatter<T>, options?: RouteIdOptions<T>): PropertyDecorator {\n return (prototype: Object, propertyKey: string | symbol) => {\n const param = new ParameterDefinition.RouteId(propertyKey.toString(), options, type);\n Klass.get(prototype).addToOwnMetadataList(ROUTE_PARAMETER_LIST_KEY, param);\n UseDelegate()(prototype, propertyKey);\n };\n}\n\nexport function VisitParameter<T>(options?: RouteParameterOptions<T>): PropertyDecorator {\n const opts = Opts.get(options);\n return (prototype: Object, propertyKey: string | symbol) => {\n const param = new ParameterDefinition.ValueParameter(propertyKey.toString(), options, opts.getOptional(\"storeInUrl\", null));\n Klass.get(prototype).addToOwnMetadataList(ROUTE_PARAMETER_LIST_KEY, param);\n UseDelegate()(prototype, propertyKey);\n };\n}\n\nexport function VisitParameterList<E>(options?: RouteListParameterOptions<E>): PropertyDecorator {\n const opts = Opts.get(options);\n return (prototype: Object, propertyKey: string | symbol) => {\n const param = new ParameterDefinition.ArrayParameter(propertyKey.toString(), options, opts.getOptional(\"storeInUrl\", null));\n Klass.get(prototype).addToOwnMetadataList(ROUTE_PARAMETER_LIST_KEY, param);\n UseDelegate()(prototype, propertyKey);\n };\n}\n\n// export function RouteParameter<T>(type: ParameterType<T>, options?: RouteParameterOptions<T>): PropertyDecorator {\n// return (prototype: Object, propertyKey: string | symbol) => {\n// const param = new ParameterDefinition.ValueParameter(propertyKey.toString(), options, type);\n// Klass.get(prototype).addToOwnMetadataList(ROUTE_PARAMETER_LIST_KEY, param);\n// UseDelegate()(prototype, propertyKey);\n// };\n// }\n//\n// export function RouteParameterList<E>(elementType: ParameterType<E>, options?: RouteListParameterOptions<E>): PropertyDecorator {\n// return (prototype: Object, propertyKey: string | symbol) => {\n// const param = new ParameterDefinition.ArrayParameter(propertyKey.toString(), options, elementType);\n// Klass.get(prototype).addToOwnMetadataList(ROUTE_PARAMETER_LIST_KEY, param);\n// UseDelegate()(prototype, propertyKey);\n// };\n// }\n"]}
|