diff --git a/404/styles.css b/404/styles.css
index 756cebe..3671a80 100644
--- a/404/styles.css
+++ b/404/styles.css
@@ -1 +1 @@
- .gjpnqnxbbj { flex: 1; width: 100%; display: grid; margin-top: 10px; margin-left: auto; margin-right: auto; margin-bottom: 10px; grid-template-rows: auto; grid-template-columns: 1fr;}@media(min-width:576px) { .gjpnqnxbbj-sm { margin-left: auto; margin-right: auto; }}@media(min-width:768px) { .gjpnqnxbbj-md { margin-top: 0px; margin-left: auto; margin-right: auto; margin-bottom: 0px; }}@media(min-width:992px) { .gjpnqnxbbj-lg { margin-left: auto; margin-right: auto; }}@media(min-width:1200px) { .gjpnqnxbbj-xl { margin-top: 0px; margin-left: auto; margin-right: auto; margin-bottom: 0px; }} .ykiyguxiww { flex: 1; width: 100%; display: grid; grid-row-gap: 0; grid-column-gap: 50px; grid-template-rows: auto; grid-template-columns: 1fr;} .kltazpmqso { display: flex; flex-wrap: wrap; min-width: 0; align-items: center; padding-top: 5px; grid-row-end: 2; padding-left: 5px; align-content: center; padding-right: 5px; grid-row-start: 1; padding-bottom: 5px; grid-column-end: 2; justify-content: flex-start; grid-column-start: 1;}@media(min-width:576px) { .kltazpmqso-sm { display: flex; flex-wrap: wrap; min-width: 0; align-items: center; align-content: center; justify-content: flex-start; }}@media(min-width:768px) { .kltazpmqso-md { padding-top: 15px; padding-left: 15px; padding-right: 15px; padding-bottom: 15px; }}@media(min-width:1200px) { .kltazpmqso-xl { display: flex; flex-wrap: wrap; min-width: 0; align-items: center; align-content: center; justify-content: flex-start; }} .cmwjhkfdnp { flex: 1; width: 100%; display: grid; margin-top: 10px; margin-left: auto; margin-right: auto; margin-bottom: 10px; grid-template-rows: auto; grid-template-columns: 1fr;}@media(min-width:576px) { .cmwjhkfdnp-sm { max-width: 540px; }}@media(min-width:768px) { .cmwjhkfdnp-md { max-width: 720px; margin-top: 15px; margin-bottom: 15px; }}@media(min-width:992px) { .cmwjhkfdnp-lg { max-width: 960px; }}@media(min-width:1200px) { .cmwjhkfdnp-xl { max-width: 1140px; margin-top: 25px; margin-bottom: 25px; }} .ncwkpamvyl { display: flex; flex-wrap: wrap; min-width: 0; align-items: center; grid-row-end: 2; align-content: center; grid-row-start: 1; grid-column-end: 2; justify-content: center; grid-column-start: 1;}@media(min-width:1200px) { .ncwkpamvyl-xl { display: flex; flex-wrap: wrap; min-width: 0; align-items: flex-end; align-content: flex-end; justify-content: center; }} .rqgdafxoox { background-color: rgba(255, 255, 255, 1.0);}@media(min-width:768px) { .rqgdafxoox-md { display: flex; flex-wrap: wrap; align-content: center; justify-content: flex-end; background-color: rgba(167, 51, 51, 0.0); }}@media(min-width:992px) { .rqgdafxoox-lg { display: flex; flex-wrap: wrap; align-content: center; justify-content: flex-end; }} .myaxhjsvdw { display: flex; flex-wrap: wrap; min-width: 0; align-items: center; padding-top: 5px; grid-row-end: 2; padding-left: 5px; align-content: center; padding-right: 5px; grid-row-start: 1; padding-bottom: 5px; grid-column-end: 2; justify-content: center; grid-column-start: 1;}@media(min-width:768px) { .myaxhjsvdw-md { padding-top: 15px; padding-left: 15px; padding-right: 15px; padding-bottom: 15px; }}
\ No newline at end of file
+ .gjpnqnxbbj { flex: 1; width: 100%; display: grid; margin-top: 10px; margin-left: auto; margin-right: auto; margin-bottom: 10px; grid-template-rows: auto; grid-template-columns: 1fr;}@media(min-width:576px) { .gjpnqnxbbj { margin-left: auto; margin-right: auto; }}@media(min-width:768px) { .gjpnqnxbbj { margin-top: 0px; margin-left: auto; margin-right: auto; margin-bottom: 0px; }}@media(min-width:992px) { .gjpnqnxbbj { margin-left: auto; margin-right: auto; }}@media(min-width:1200px) { .gjpnqnxbbj { margin-top: 0px; margin-left: auto; margin-right: auto; margin-bottom: 0px; }} .ykiyguxiww { flex: 1; width: 100%; display: grid; grid-row-gap: 0; grid-column-gap: 50px; grid-template-rows: auto; grid-template-columns: 1fr;} .kltazpmqso { display: flex; flex-wrap: wrap; min-width: 0; align-items: center; padding-top: 5px; grid-row-end: 2; padding-left: 5px; align-content: center; padding-right: 5px; grid-row-start: 1; padding-bottom: 5px; grid-column-end: 2; justify-content: flex-start; grid-column-start: 1;}@media(min-width:576px) { .kltazpmqso { display: flex; flex-wrap: wrap; min-width: 0; align-items: center; align-content: center; justify-content: flex-start; }}@media(min-width:768px) { .kltazpmqso { padding-top: 15px; padding-left: 15px; padding-right: 15px; padding-bottom: 15px; }}@media(min-width:1200px) { .kltazpmqso { display: flex; flex-wrap: wrap; min-width: 0; align-items: center; align-content: center; justify-content: flex-start; }} .cmwjhkfdnp { flex: 1; width: 100%; display: grid; margin-top: 10px; margin-left: auto; margin-right: auto; margin-bottom: 10px; grid-template-rows: auto; grid-template-columns: 1fr;}@media(min-width:576px) { .cmwjhkfdnp { max-width: 540px; }}@media(min-width:768px) { .cmwjhkfdnp { max-width: 720px; margin-top: 15px; margin-bottom: 15px; }}@media(min-width:992px) { .cmwjhkfdnp { max-width: 960px; }}@media(min-width:1200px) { .cmwjhkfdnp { max-width: 1140px; margin-top: 25px; margin-bottom: 25px; }} .ncwkpamvyl { display: flex; flex-wrap: wrap; min-width: 0; align-items: center; grid-row-end: 2; align-content: center; grid-row-start: 1; grid-column-end: 2; justify-content: center; grid-column-start: 1;}@media(min-width:1200px) { .ncwkpamvyl { display: flex; flex-wrap: wrap; min-width: 0; align-items: flex-end; align-content: flex-end; justify-content: center; }} .rqgdafxoox { background-color: rgba(255, 255, 255, 1.0);}@media(min-width:768px) { .rqgdafxoox { display: flex; flex-wrap: wrap; align-content: center; justify-content: flex-end; background-color: rgba(167, 51, 51, 0.0); }}@media(min-width:992px) { .rqgdafxoox { display: flex; flex-wrap: wrap; align-content: center; justify-content: flex-end; }} .myaxhjsvdw { display: flex; flex-wrap: wrap; min-width: 0; align-items: center; padding-top: 5px; grid-row-end: 2; padding-left: 5px; align-content: center; padding-right: 5px; grid-row-start: 1; padding-bottom: 5px; grid-column-end: 2; justify-content: center; grid-column-start: 1;}@media(min-width:768px) { .myaxhjsvdw { padding-top: 15px; padding-left: 15px; padding-right: 15px; padding-bottom: 15px; }}
\ No newline at end of file
diff --git a/500/styles.css b/500/styles.css
index 756cebe..3671a80 100644
--- a/500/styles.css
+++ b/500/styles.css
@@ -1 +1 @@
- .gjpnqnxbbj { flex: 1; width: 100%; display: grid; margin-top: 10px; margin-left: auto; margin-right: auto; margin-bottom: 10px; grid-template-rows: auto; grid-template-columns: 1fr;}@media(min-width:576px) { .gjpnqnxbbj-sm { margin-left: auto; margin-right: auto; }}@media(min-width:768px) { .gjpnqnxbbj-md { margin-top: 0px; margin-left: auto; margin-right: auto; margin-bottom: 0px; }}@media(min-width:992px) { .gjpnqnxbbj-lg { margin-left: auto; margin-right: auto; }}@media(min-width:1200px) { .gjpnqnxbbj-xl { margin-top: 0px; margin-left: auto; margin-right: auto; margin-bottom: 0px; }} .ykiyguxiww { flex: 1; width: 100%; display: grid; grid-row-gap: 0; grid-column-gap: 50px; grid-template-rows: auto; grid-template-columns: 1fr;} .kltazpmqso { display: flex; flex-wrap: wrap; min-width: 0; align-items: center; padding-top: 5px; grid-row-end: 2; padding-left: 5px; align-content: center; padding-right: 5px; grid-row-start: 1; padding-bottom: 5px; grid-column-end: 2; justify-content: flex-start; grid-column-start: 1;}@media(min-width:576px) { .kltazpmqso-sm { display: flex; flex-wrap: wrap; min-width: 0; align-items: center; align-content: center; justify-content: flex-start; }}@media(min-width:768px) { .kltazpmqso-md { padding-top: 15px; padding-left: 15px; padding-right: 15px; padding-bottom: 15px; }}@media(min-width:1200px) { .kltazpmqso-xl { display: flex; flex-wrap: wrap; min-width: 0; align-items: center; align-content: center; justify-content: flex-start; }} .cmwjhkfdnp { flex: 1; width: 100%; display: grid; margin-top: 10px; margin-left: auto; margin-right: auto; margin-bottom: 10px; grid-template-rows: auto; grid-template-columns: 1fr;}@media(min-width:576px) { .cmwjhkfdnp-sm { max-width: 540px; }}@media(min-width:768px) { .cmwjhkfdnp-md { max-width: 720px; margin-top: 15px; margin-bottom: 15px; }}@media(min-width:992px) { .cmwjhkfdnp-lg { max-width: 960px; }}@media(min-width:1200px) { .cmwjhkfdnp-xl { max-width: 1140px; margin-top: 25px; margin-bottom: 25px; }} .ncwkpamvyl { display: flex; flex-wrap: wrap; min-width: 0; align-items: center; grid-row-end: 2; align-content: center; grid-row-start: 1; grid-column-end: 2; justify-content: center; grid-column-start: 1;}@media(min-width:1200px) { .ncwkpamvyl-xl { display: flex; flex-wrap: wrap; min-width: 0; align-items: flex-end; align-content: flex-end; justify-content: center; }} .rqgdafxoox { background-color: rgba(255, 255, 255, 1.0);}@media(min-width:768px) { .rqgdafxoox-md { display: flex; flex-wrap: wrap; align-content: center; justify-content: flex-end; background-color: rgba(167, 51, 51, 0.0); }}@media(min-width:992px) { .rqgdafxoox-lg { display: flex; flex-wrap: wrap; align-content: center; justify-content: flex-end; }} .myaxhjsvdw { display: flex; flex-wrap: wrap; min-width: 0; align-items: center; padding-top: 5px; grid-row-end: 2; padding-left: 5px; align-content: center; padding-right: 5px; grid-row-start: 1; padding-bottom: 5px; grid-column-end: 2; justify-content: center; grid-column-start: 1;}@media(min-width:768px) { .myaxhjsvdw-md { padding-top: 15px; padding-left: 15px; padding-right: 15px; padding-bottom: 15px; }}
\ No newline at end of file
+ .gjpnqnxbbj { flex: 1; width: 100%; display: grid; margin-top: 10px; margin-left: auto; margin-right: auto; margin-bottom: 10px; grid-template-rows: auto; grid-template-columns: 1fr;}@media(min-width:576px) { .gjpnqnxbbj { margin-left: auto; margin-right: auto; }}@media(min-width:768px) { .gjpnqnxbbj { margin-top: 0px; margin-left: auto; margin-right: auto; margin-bottom: 0px; }}@media(min-width:992px) { .gjpnqnxbbj { margin-left: auto; margin-right: auto; }}@media(min-width:1200px) { .gjpnqnxbbj { margin-top: 0px; margin-left: auto; margin-right: auto; margin-bottom: 0px; }} .ykiyguxiww { flex: 1; width: 100%; display: grid; grid-row-gap: 0; grid-column-gap: 50px; grid-template-rows: auto; grid-template-columns: 1fr;} .kltazpmqso { display: flex; flex-wrap: wrap; min-width: 0; align-items: center; padding-top: 5px; grid-row-end: 2; padding-left: 5px; align-content: center; padding-right: 5px; grid-row-start: 1; padding-bottom: 5px; grid-column-end: 2; justify-content: flex-start; grid-column-start: 1;}@media(min-width:576px) { .kltazpmqso { display: flex; flex-wrap: wrap; min-width: 0; align-items: center; align-content: center; justify-content: flex-start; }}@media(min-width:768px) { .kltazpmqso { padding-top: 15px; padding-left: 15px; padding-right: 15px; padding-bottom: 15px; }}@media(min-width:1200px) { .kltazpmqso { display: flex; flex-wrap: wrap; min-width: 0; align-items: center; align-content: center; justify-content: flex-start; }} .cmwjhkfdnp { flex: 1; width: 100%; display: grid; margin-top: 10px; margin-left: auto; margin-right: auto; margin-bottom: 10px; grid-template-rows: auto; grid-template-columns: 1fr;}@media(min-width:576px) { .cmwjhkfdnp { max-width: 540px; }}@media(min-width:768px) { .cmwjhkfdnp { max-width: 720px; margin-top: 15px; margin-bottom: 15px; }}@media(min-width:992px) { .cmwjhkfdnp { max-width: 960px; }}@media(min-width:1200px) { .cmwjhkfdnp { max-width: 1140px; margin-top: 25px; margin-bottom: 25px; }} .ncwkpamvyl { display: flex; flex-wrap: wrap; min-width: 0; align-items: center; grid-row-end: 2; align-content: center; grid-row-start: 1; grid-column-end: 2; justify-content: center; grid-column-start: 1;}@media(min-width:1200px) { .ncwkpamvyl { display: flex; flex-wrap: wrap; min-width: 0; align-items: flex-end; align-content: flex-end; justify-content: center; }} .rqgdafxoox { background-color: rgba(255, 255, 255, 1.0);}@media(min-width:768px) { .rqgdafxoox { display: flex; flex-wrap: wrap; align-content: center; justify-content: flex-end; background-color: rgba(167, 51, 51, 0.0); }}@media(min-width:992px) { .rqgdafxoox { display: flex; flex-wrap: wrap; align-content: center; justify-content: flex-end; }} .myaxhjsvdw { display: flex; flex-wrap: wrap; min-width: 0; align-items: center; padding-top: 5px; grid-row-end: 2; padding-left: 5px; align-content: center; padding-right: 5px; grid-row-start: 1; padding-bottom: 5px; grid-column-end: 2; justify-content: center; grid-column-start: 1;}@media(min-width:768px) { .myaxhjsvdw { padding-top: 15px; padding-left: 15px; padding-right: 15px; padding-bottom: 15px; }}
\ No newline at end of file
diff --git a/api-details/index.html b/api-details/index.html
index 8407104..6629801 100644
--- a/api-details/index.html
+++ b/api-details/index.html
@@ -1 +1 @@
-
= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar __metadata = (this && this.__metadata) || function (k, v) {\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.MapRuntime = void 0;\nconst ko = __webpack_require__(/*! knockout */ \"./node_modules/knockout/build/output/knockout-latest.js\");\nconst map_runtime_html_1 = __webpack_require__(/*! ./map-runtime.html */ \"./node_modules/@paperbits/core/map/ko/runtime/map-runtime.html\");\nconst decorators_1 = __webpack_require__(/*! @paperbits/common/ko/decorators */ \"./node_modules/@paperbits/common/ko/decorators/index.ts\");\nlet MapRuntime = class MapRuntime {\n constructor() {\n this.caption = ko.observable();\n this.layout = ko.observable();\n this.location = ko.observable();\n this.zoom = ko.observable();\n this.mapType = ko.observable();\n this.apiKey = ko.observable();\n this.markerIcon = ko.observable();\n this.markerPopupKey = ko.observable();\n }\n};\n__decorate([\n decorators_1.Param(),\n __metadata(\"design:type\", Function)\n], MapRuntime.prototype, \"caption\", void 0);\n__decorate([\n decorators_1.Param(),\n __metadata(\"design:type\", Function)\n], MapRuntime.prototype, \"layout\", void 0);\n__decorate([\n decorators_1.Param(),\n __metadata(\"design:type\", Function)\n], MapRuntime.prototype, \"location\", void 0);\n__decorate([\n decorators_1.Param(),\n __metadata(\"design:type\", Function)\n], MapRuntime.prototype, \"zoom\", void 0);\n__decorate([\n decorators_1.Param(),\n __metadata(\"design:type\", Function)\n], MapRuntime.prototype, \"mapType\", void 0);\n__decorate([\n decorators_1.Param(),\n __metadata(\"design:type\", Function)\n], MapRuntime.prototype, \"apiKey\", void 0);\n__decorate([\n decorators_1.Param(),\n __metadata(\"design:type\", Function)\n], MapRuntime.prototype, \"markerIcon\", void 0);\n__decorate([\n decorators_1.Param(),\n __metadata(\"design:type\", Function)\n], MapRuntime.prototype, \"markerPopupKey\", void 0);\nMapRuntime = __decorate([\n decorators_1.RuntimeComponent({\n selector: \"map-runtime\"\n }),\n decorators_1.Component({\n selector: \"map-runtime\",\n template: map_runtime_html_1.default\n }),\n __metadata(\"design:paramtypes\", [])\n], MapRuntime);\nexports.MapRuntime = MapRuntime;\n\n\n//# sourceURL=webpack:///./node_modules/@paperbits/core/map/ko/runtime/map-runtime.ts?");
+eval("\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\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;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar __metadata = (this && this.__metadata) || function (k, v) {\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.MapRuntime = void 0;\nconst ko = __webpack_require__(/*! knockout */ \"./node_modules/knockout/build/output/knockout-latest.js\");\nconst map_runtime_html_1 = __webpack_require__(/*! ./map-runtime.html */ \"./node_modules/@paperbits/core/map/ko/runtime/map-runtime.html\");\nconst decorators_1 = __webpack_require__(/*! @paperbits/common/ko/decorators */ \"./node_modules/@paperbits/common/ko/decorators/index.ts\");\nlet MapRuntime = class MapRuntime {\n constructor() {\n this.caption = ko.observable();\n this.layout = ko.observable();\n this.location = ko.observable();\n this.zoom = ko.observable();\n this.mapType = ko.observable();\n this.apiKey = ko.observable();\n this.markerIcon = ko.observable();\n this.markerPopupKey = ko.observable();\n this.customizations = ko.observable();\n }\n};\n__decorate([\n (0, decorators_1.Param)(),\n __metadata(\"design:type\", Function)\n], MapRuntime.prototype, \"caption\", void 0);\n__decorate([\n (0, decorators_1.Param)(),\n __metadata(\"design:type\", Function)\n], MapRuntime.prototype, \"layout\", void 0);\n__decorate([\n (0, decorators_1.Param)(),\n __metadata(\"design:type\", Function)\n], MapRuntime.prototype, \"location\", void 0);\n__decorate([\n (0, decorators_1.Param)(),\n __metadata(\"design:type\", Function)\n], MapRuntime.prototype, \"zoom\", void 0);\n__decorate([\n (0, decorators_1.Param)(),\n __metadata(\"design:type\", Function)\n], MapRuntime.prototype, \"mapType\", void 0);\n__decorate([\n (0, decorators_1.Param)(),\n __metadata(\"design:type\", Function)\n], MapRuntime.prototype, \"apiKey\", void 0);\n__decorate([\n (0, decorators_1.Param)(),\n __metadata(\"design:type\", Function)\n], MapRuntime.prototype, \"markerIcon\", void 0);\n__decorate([\n (0, decorators_1.Param)(),\n __metadata(\"design:type\", Function)\n], MapRuntime.prototype, \"markerPopupKey\", void 0);\n__decorate([\n (0, decorators_1.Param)(),\n __metadata(\"design:type\", Function)\n], MapRuntime.prototype, \"customizations\", void 0);\nMapRuntime = __decorate([\n (0, decorators_1.RuntimeComponent)({\n selector: \"map-runtime\"\n }),\n (0, decorators_1.Component)({\n selector: \"map-runtime\",\n template: map_runtime_html_1.default\n }),\n __metadata(\"design:paramtypes\", [])\n], MapRuntime);\nexports.MapRuntime = MapRuntime;\n\n\n//# sourceURL=webpack:///./node_modules/@paperbits/core/map/ko/runtime/map-runtime.ts?");
/***/ }),
-/***/ "./node_modules/@paperbits/core/map/mapContract.ts":
-/*!*********************************************************!*\
- !*** ./node_modules/@paperbits/core/map/mapContract.ts ***!
- \*********************************************************/
+/***/ "./node_modules/@paperbits/core/map/map.runtime.module.ts":
+/*!****************************************************************!*\
+ !*** ./node_modules/@paperbits/core/map/map.runtime.module.ts ***!
+ \****************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
"use strict";
-eval("\nObject.defineProperty(exports, \"__esModule\", { value: true });\n\n\n//# sourceURL=webpack:///./node_modules/@paperbits/core/map/mapContract.ts?");
+eval("\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.MapRuntimeModule = void 0;\nconst map_runtime_1 = __webpack_require__(/*! ./ko/runtime/map-runtime */ \"./node_modules/@paperbits/core/map/ko/runtime/map-runtime.ts\");\nconst bindingHandlers_googlemap_1 = __webpack_require__(/*! ./ko/bindingHandlers.googlemap */ \"./node_modules/@paperbits/core/map/ko/bindingHandlers.googlemap.ts\");\nclass MapRuntimeModule {\n register(injector) {\n injector.bind(\"mapRuntime\", map_runtime_1.MapRuntime);\n injector.bindToCollection(\"autostart\", bindingHandlers_googlemap_1.GooglmapsBindingHandler);\n }\n}\nexports.MapRuntimeModule = MapRuntimeModule;\n\n\n//# sourceURL=webpack:///./node_modules/@paperbits/core/map/map.runtime.module.ts?");
/***/ }),
-/***/ "./node_modules/@paperbits/core/map/mapHandlers.ts":
-/*!*********************************************************!*\
- !*** ./node_modules/@paperbits/core/map/mapHandlers.ts ***!
- \*********************************************************/
-/*! no static exports found */
-/***/ (function(module, exports, __webpack_require__) {
+/***/ "./node_modules/@paperbits/core/placeholder/ko/placeholder.html":
+/*!**********************************************************************!*\
+ !*** ./node_modules/@paperbits/core/placeholder/ko/placeholder.html ***!
+ \**********************************************************************/
+/*! exports provided: default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
-eval("\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.MapHandlers = void 0;\nconst mapModel_1 = __webpack_require__(/*! ./mapModel */ \"./node_modules/@paperbits/core/map/mapModel.ts\");\nclass MapHandlers {\n constructor() {\n this.name = \"map\";\n this.displayName = \"Map\";\n }\n prepareWidgetOrder(config) {\n return __awaiter(this, void 0, void 0, function* () {\n const widgetOrder = {\n name: \"map\",\n displayName: \"Map\",\n iconClass: \"widget-icon widget-icon-map\",\n requires: [\"html\", \"js\"],\n createModel: () => __awaiter(this, void 0, void 0, function* () {\n const model = new mapModel_1.MapModel();\n model.location = config.location;\n model.caption = config.caption;\n model.location = config.location;\n model.mapType = config.mapType;\n return model;\n })\n };\n return widgetOrder;\n });\n }\n getWidgetOrderByConfig(location, caption) {\n return __awaiter(this, void 0, void 0, function* () {\n const config = {\n type: \"map\",\n location: location,\n caption: caption,\n mapType: \"terrain\"\n };\n return yield this.prepareWidgetOrder(config);\n });\n }\n getWidgetOrder() {\n return Promise.resolve(this.getWidgetOrderByConfig(\"400 Broad St, Seattle, WA 98109\", \"Space Needle\"));\n }\n getContentDescriptorFromDataTransfer(dataTransfer) {\n const mapConfig = this.parseDataTransfer(dataTransfer);\n if (!mapConfig) {\n return null;\n }\n const getThumbnailPromise = () => Promise.resolve(`https://maps.googleapis.com/maps/api/staticmap?center=${mapConfig.location}&format=jpg&size=130x90`);\n const descriptor = {\n title: \"Map\",\n description: mapConfig.location,\n getWidgetOrder: () => Promise.resolve(this.getWidgetOrderByConfig(mapConfig.location, mapConfig.caption)),\n getThumbnailUrl: getThumbnailPromise\n };\n return descriptor;\n }\n parseDataTransfer(dataTransfer) {\n const source = dataTransfer.source;\n if (source && typeof source === \"string\") {\n const url = source.toLowerCase();\n if (url.startsWith(\"https://www.google.com/maps/\") || url.startsWith(\"http://www.google.com/maps/\")) {\n let location;\n let match = new RegExp(\"/place/([^/]+)\").exec(url);\n if (match && match.length > 1) {\n location = match[1].replaceAll(\"+\", \" \");\n }\n else {\n match = new RegExp(\"/@([^/]+)\").exec(url);\n if (match && match.length > 1) {\n const locationParts = match[1].split(\",\");\n location = locationParts.slice(0, 2).join(\",\");\n }\n }\n return location ? { location: location, type: \"map\" } : null;\n }\n }\n return null;\n }\n}\nexports.MapHandlers = MapHandlers;\n\n\n//# sourceURL=webpack:///./node_modules/@paperbits/core/map/mapHandlers.ts?");
+eval("__webpack_require__.r(__webpack_exports__);\n// Module\nvar code = \"
\";\n// Exports\n/* harmony default export */ __webpack_exports__[\"default\"] = (code);\n\n//# sourceURL=webpack:///./node_modules/@paperbits/core/placeholder/ko/placeholder.html?");
/***/ }),
-/***/ "./node_modules/@paperbits/core/map/mapModel.ts":
-/*!******************************************************!*\
- !*** ./node_modules/@paperbits/core/map/mapModel.ts ***!
- \******************************************************/
+/***/ "./node_modules/@paperbits/core/placeholder/ko/placeholderViewModel.ts":
+/*!*****************************************************************************!*\
+ !*** ./node_modules/@paperbits/core/placeholder/ko/placeholderViewModel.ts ***!
+ \*****************************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
"use strict";
-eval("\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.MapModel = exports.MarkerModel = void 0;\nclass MarkerModel {\n constructor(sourceKey) {\n this.sourceKey = sourceKey;\n }\n}\nexports.MarkerModel = MarkerModel;\nclass MapModel {\n constructor() {\n this.styles = {\n instance: {\n size: {\n xs: {\n width: 300,\n height: 200\n }\n }\n },\n };\n }\n}\nexports.MapModel = MapModel;\n\n\n//# sourceURL=webpack:///./node_modules/@paperbits/core/map/mapModel.ts?");
+eval("\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\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;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar __metadata = (this && this.__metadata) || function (k, v) {\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.PlaceholderViewModel = void 0;\nconst ko = __webpack_require__(/*! knockout */ \"./node_modules/knockout/build/output/knockout-latest.js\");\nconst placeholder_html_1 = __webpack_require__(/*! ./placeholder.html */ \"./node_modules/@paperbits/core/placeholder/ko/placeholder.html\");\nconst decorators_1 = __webpack_require__(/*! @paperbits/common/ko/decorators */ \"./node_modules/@paperbits/common/ko/decorators/index.ts\");\nlet PlaceholderViewModel = class PlaceholderViewModel {\n constructor(title) {\n this.title = ko.observable(title);\n this.widgetBinding = { displayName: title, flow: \"none\", readonly: true };\n }\n};\nPlaceholderViewModel = __decorate([\n (0, decorators_1.Component)({\n selector: \"paperbits-placeholder\",\n template: placeholder_html_1.default\n }),\n __metadata(\"design:paramtypes\", [String])\n], PlaceholderViewModel);\nexports.PlaceholderViewModel = PlaceholderViewModel;\n\n\n//# sourceURL=webpack:///./node_modules/@paperbits/core/placeholder/ko/placeholderViewModel.ts?");
/***/ }),
-/***/ "./node_modules/@paperbits/core/map/mapModelBinder.ts":
-/*!************************************************************!*\
- !*** ./node_modules/@paperbits/core/map/mapModelBinder.ts ***!
- \************************************************************/
+/***/ "./node_modules/@paperbits/core/placeholder/ko/placeholderViewModelBinder.ts":
+/*!***********************************************************************************!*\
+ !*** ./node_modules/@paperbits/core/placeholder/ko/placeholderViewModelBinder.ts ***!
+ \***********************************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
"use strict";
-eval("\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.MapModelBinder = void 0;\nconst mapModel_1 = __webpack_require__(/*! ./mapModel */ \"./node_modules/@paperbits/core/map/mapModel.ts\");\nclass MapModelBinder {\n canHandleContract(contract) {\n return contract.type === \"map\";\n }\n canHandleModel(model) {\n return model instanceof mapModel_1.MapModel;\n }\n contractToModel(contract) {\n return __awaiter(this, void 0, void 0, function* () {\n const model = new mapModel_1.MapModel();\n model.location = contract.location;\n model.caption = contract.caption;\n model.zoom = contract.zoom;\n model.mapType = contract.mapType;\n model.styles = contract.styles;\n if (contract.marker) {\n const markerModel = new mapModel_1.MarkerModel();\n markerModel.sourceKey = contract.marker.sourceKey;\n markerModel.width = contract.marker.width;\n markerModel.height = contract.marker.height;\n markerModel.popupKey = contract.marker.popupKey;\n model.marker = markerModel;\n }\n return model;\n });\n }\n modelToContract(model) {\n const contract = {\n type: \"map\",\n caption: model.caption,\n location: model.location,\n zoom: model.zoom,\n mapType: model.mapType,\n styles: model.styles\n };\n if (model.marker) {\n contract.marker = {\n sourceKey: model.marker.sourceKey,\n width: model.marker.width,\n height: model.marker.height,\n popupKey: model.marker.popupKey\n };\n }\n return contract;\n }\n}\nexports.MapModelBinder = MapModelBinder;\n\n\n//# sourceURL=webpack:///./node_modules/@paperbits/core/map/mapModelBinder.ts?");
+eval("\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.PlaceholderViewModelBinder = void 0;\nconst placeholder_1 = __webpack_require__(/*! @paperbits/common/widgets/placeholder */ \"./node_modules/@paperbits/common/widgets/placeholder/index.ts\");\nconst placeholderViewModel_1 = __webpack_require__(/*! ./placeholderViewModel */ \"./node_modules/@paperbits/core/placeholder/ko/placeholderViewModel.ts\");\nclass PlaceholderViewModelBinder {\n modelToViewModel(model) {\n return __awaiter(this, void 0, void 0, function* () {\n return new placeholderViewModel_1.PlaceholderViewModel(model.message);\n });\n }\n canHandleModel(model) {\n return model instanceof placeholder_1.PlaceholderModel;\n }\n}\nexports.PlaceholderViewModelBinder = PlaceholderViewModelBinder;\n\n\n//# sourceURL=webpack:///./node_modules/@paperbits/core/placeholder/ko/placeholderViewModelBinder.ts?");
/***/ }),
@@ -1941,7 +2061,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n// Module\nvar code = \"