@esri/solutions-components 0.7.4 → 0.7.5

Sign up to get free protection for your applications and to get access to all the features.
Files changed (46) hide show
  1. package/dist/assets/t9n/map-tools/resources.json +2 -2
  2. package/dist/assets/t9n/map-tools/resources_en.json +2 -2
  3. package/dist/cjs/basemap-gallery_7.cjs.entry.js +38 -20
  4. package/dist/cjs/calcite-alert_3.cjs.entry.js +17 -13
  5. package/dist/cjs/card-manager_3.cjs.entry.js +9 -9
  6. package/dist/cjs/crowdsource-manager.cjs.entry.js +30 -5
  7. package/dist/cjs/loader.cjs.js +1 -1
  8. package/dist/cjs/solutions-components.cjs.js +1 -1
  9. package/dist/collection/components/crowdsource-manager/crowdsource-manager.js +70 -5
  10. package/dist/collection/components/edit-card/edit-card.js +30 -13
  11. package/dist/collection/components/info-card/info-card.js +12 -0
  12. package/dist/collection/components/layer-table/layer-table.css +7 -1
  13. package/dist/collection/components/layer-table/layer-table.js +7 -7
  14. package/dist/collection/components/map-card/map-card.js +1 -1
  15. package/dist/collection/components/map-fullscreen/map-fullscreen.js +33 -17
  16. package/dist/collection/components/map-tools/map-tools.js +22 -3
  17. package/dist/components/crowdsource-manager.js +34 -5
  18. package/dist/components/edit-card2.js +11 -13
  19. package/dist/components/info-card2.js +7 -1
  20. package/dist/components/layer-table2.js +8 -8
  21. package/dist/components/map-card2.js +1 -1
  22. package/dist/components/map-fullscreen2.js +17 -18
  23. package/dist/components/map-tools2.js +22 -3
  24. package/dist/esm/basemap-gallery_7.entry.js +38 -20
  25. package/dist/esm/calcite-alert_3.entry.js +17 -13
  26. package/dist/esm/card-manager_3.entry.js +9 -9
  27. package/dist/esm/crowdsource-manager.entry.js +30 -5
  28. package/dist/esm/loader.js +1 -1
  29. package/dist/esm/solutions-components.js +1 -1
  30. package/dist/solutions-components/{p-3272b303.entry.js → p-14236e25.entry.js} +1 -1
  31. package/dist/solutions-components/p-4b3ebd24.entry.js +6 -0
  32. package/dist/solutions-components/p-a4a0c7c5.entry.js +6 -0
  33. package/dist/solutions-components/p-b070bd54.entry.js +6 -0
  34. package/dist/solutions-components/solutions-components.esm.js +1 -1
  35. package/dist/types/components/crowdsource-manager/crowdsource-manager.d.ts +27 -2
  36. package/dist/types/components/edit-card/edit-card.d.ts +5 -0
  37. package/dist/types/components/info-card/info-card.d.ts +4 -0
  38. package/dist/types/components/layer-table/layer-table.d.ts +1 -1
  39. package/dist/types/components/map-fullscreen/map-fullscreen.d.ts +14 -1
  40. package/dist/types/components/map-tools/map-tools.d.ts +8 -0
  41. package/dist/types/components.d.ts +40 -0
  42. package/dist/types/preact.d.ts +5 -2
  43. package/package.json +1 -1
  44. package/dist/solutions-components/p-089dc6bf.entry.js +0 -6
  45. package/dist/solutions-components/p-dfb33c83.entry.js +0 -6
  46. package/dist/solutions-components/p-ed254530.entry.js +0 -6
@@ -4,7 +4,7 @@
4
4
  "expand": "Expand",
5
5
  "basemap": "Basemap",
6
6
  "collapse": "Collapse",
7
- "enterFullscreen": "Enter fullscreen",
8
- "exitFullscreen": "Exit fullscreen",
7
+ "enterFullscreen": "Enter full screen",
8
+ "exitFullscreen": "Exit full screen",
9
9
  "floorFilter": "Floor filter"
10
10
  }
@@ -4,7 +4,7 @@
4
4
  "expand": "Expand",
5
5
  "basemap": "Basemap",
6
6
  "collapse": "Collapse",
7
- "enterFullscreen": "Enter fullscreen",
8
- "exitFullscreen": "Exit fullscreen",
7
+ "enterFullscreen": "Enter full screen",
8
+ "exitFullscreen": "Exit full screen",
9
9
  "floorFilter": "Floor filter"
10
10
  }
@@ -215,6 +215,7 @@ const mapFullscreenCss = ":host{display:block}";
215
215
  const MapFullscreen = class {
216
216
  constructor(hostRef) {
217
217
  index.registerInstance(this, hostRef);
218
+ this.fullscreenStateChange = index.createEvent(this, "fullscreenStateChange", 7);
218
219
  this.mapView = undefined;
219
220
  this.fullscreenWidget = undefined;
220
221
  }
@@ -229,22 +230,12 @@ const MapFullscreen = class {
229
230
  * @returns Promise when complete
230
231
  */
231
232
  async mapViewWatchHandler() {
232
- await this.mapView.when(() => {
233
- this._initFullscreenWidget();
233
+ await this.mapView.when(async () => {
234
+ await this._initFullscreenWidget();
234
235
  });
235
236
  }
236
237
  //--------------------------------------------------------------------------
237
238
  //
238
- // Methods (public)
239
- //
240
- //--------------------------------------------------------------------------
241
- //--------------------------------------------------------------------------
242
- //
243
- // Events (public)
244
- //
245
- //--------------------------------------------------------------------------
246
- //--------------------------------------------------------------------------
247
- //
248
239
  // Functions (lifecycle)
249
240
  //
250
241
  //--------------------------------------------------------------------------
@@ -265,13 +256,13 @@ const MapFullscreen = class {
265
256
  * It's never called during the first render().
266
257
  */
267
258
  async componentDidUpdate() {
268
- this._initFullscreenWidget();
259
+ await this._initFullscreenWidget();
269
260
  }
270
261
  /**
271
262
  * StencilJS: Called once just after the component is fully loaded and the first render() occurs.
272
263
  */
273
264
  async componentDidLoad() {
274
- this._initFullscreenWidget();
265
+ await this._initFullscreenWidget();
275
266
  }
276
267
  //--------------------------------------------------------------------------
277
268
  //
@@ -286,21 +277,29 @@ const MapFullscreen = class {
286
277
  * @protected
287
278
  */
288
279
  async _initModules() {
289
- const [Fullscreen] = await loadModules.loadModules([
290
- "esri/widgets/Fullscreen"
280
+ const [Fullscreen, reactiveUtils] = await loadModules.loadModules([
281
+ "esri/widgets/Fullscreen",
282
+ "esri/core/reactiveUtils"
291
283
  ]);
292
284
  this.Fullscreen = Fullscreen;
285
+ this.reactiveUtils = reactiveUtils;
293
286
  }
294
287
  /**
295
288
  * Initialize the search widget
296
289
  *
297
290
  * @protected
298
291
  */
299
- _initFullscreenWidget() {
292
+ async _initFullscreenWidget() {
300
293
  if (this.mapView && this._fullscreenElement && !this.fullscreenWidget) {
301
294
  this.fullscreenWidget = new this.Fullscreen({
302
295
  view: this.mapView
303
296
  });
297
+ await this.fullscreenWidget.when(() => {
298
+ if (this._fullscreenStateChangeHandle) {
299
+ this._fullscreenStateChangeHandle.remove();
300
+ }
301
+ this._fullscreenStateChangeHandle = this.reactiveUtils.watch(() => this.fullscreenWidget.viewModel.state, (state) => this.fullscreenStateChange.emit(state));
302
+ });
304
303
  }
305
304
  else if (this.fullscreenWidget) {
306
305
  this.fullscreenWidget.view = this.mapView;
@@ -813,10 +812,14 @@ const MapTools = class {
813
812
  async _showFullscreenWatchHandler(v) {
814
813
  const fs = this._fullscreenElement.fullscreenWidget;
815
814
  if (v) {
816
- fs.viewModel.enter();
815
+ if (fs.viewModel.state === "ready") {
816
+ fs.viewModel.enter();
817
+ }
817
818
  }
818
819
  else {
819
- fs.viewModel.exit();
820
+ if (fs.viewModel.state === "active") {
821
+ fs.viewModel.exit();
822
+ }
820
823
  }
821
824
  }
822
825
  /**
@@ -893,7 +896,22 @@ const MapTools = class {
893
896
  this._getActionGroup("basemap", false, this._translations.basemap, () => this._toggleBasemapPicker()) :
894
897
  undefined, this.enableFloorFilter && this._hasFloorInfo ?
895
898
  this._getActionGroup("urban-model", false, this._translations.floorFilter, () => this._toggleFloorFilter()) :
896
- undefined)), index.h("basemap-gallery", { basemapConfig: this.basemapConfig, class: basemapClass, mapView: this.mapView, ref: (el) => { this._basemapElement = el; } }), index.h("map-search", { class: searchClass, mapView: this.mapView, ref: (el) => { this._searchElement = el; }, resultGraphicEnabled: true, searchConfiguration: this.searchConfiguration }), index.h("map-legend", { class: legendClass, mapView: this.mapView, ref: (el) => { this._legendElement = el; } }), index.h("map-fullscreen", { class: fullscreenClass, mapView: this.mapView, ref: (el) => { this._fullscreenElement = el; } }), index.h("floor-filter", { class: floorFilterClass, enabled: this.enableFloorFilter, mapView: this.mapView, ref: (el) => { this._floorFilterElement = el; } })));
899
+ undefined)), index.h("basemap-gallery", { basemapConfig: this.basemapConfig, class: basemapClass, mapView: this.mapView, ref: (el) => { this._basemapElement = el; } }), index.h("map-search", { class: searchClass, mapView: this.mapView, ref: (el) => { this._searchElement = el; }, resultGraphicEnabled: true, searchConfiguration: this.searchConfiguration }), index.h("map-legend", { class: legendClass, mapView: this.mapView, ref: (el) => { this._legendElement = el; } }), index.h("map-fullscreen", { class: fullscreenClass, mapView: this.mapView, onFullscreenStateChange: (evt) => this._fullscreenStateChange(evt.detail), ref: (el) => { this._fullscreenElement = el; } }), index.h("floor-filter", { class: floorFilterClass, enabled: this.enableFloorFilter, mapView: this.mapView, ref: (el) => { this._floorFilterElement = el; } })));
900
+ }
901
+ /**
902
+ * Respond to fullscreen state change and ensure our state var is in sync
903
+ *
904
+ * @param state The fullscreen view model's state.
905
+ *
906
+ * @protected
907
+ */
908
+ _fullscreenStateChange(state) {
909
+ if (state === "ready" && this._showFullscreen) {
910
+ this._showFullscreen = false;
911
+ }
912
+ else if (state === "active" && !this._showFullscreen) {
913
+ this._showFullscreen = true;
914
+ }
897
915
  }
898
916
  //--------------------------------------------------------------------------
899
917
  //
@@ -318,6 +318,7 @@ const EditCard = class {
318
318
  index.registerInstance(this, hostRef);
319
319
  this.closeEdit = index.createEvent(this, "closeEdit", 7);
320
320
  this.editsComplete = index.createEvent(this, "editsComplete", 7);
321
+ this.refreshGraphics = index.createEvent(this, "refreshGraphics", 7);
321
322
  /**
322
323
  * boolean: When true the Editor widget should be closed
323
324
  */
@@ -388,7 +389,7 @@ const EditCard = class {
388
389
  }
389
390
  this._layerEditHandle = this._layer.on("edits", () => {
390
391
  this.editsComplete.emit();
391
- void this._closeEdit();
392
+ this.open = false;
392
393
  });
393
394
  }
394
395
  }
@@ -451,8 +452,7 @@ const EditCard = class {
451
452
  },
452
453
  container
453
454
  });
454
- if (this._editHandle && this._attachmentHandle && this._activeWorkflowHandle) {
455
- this._editHandle.remove();
455
+ if (this._attachmentHandle && this._activeWorkflowHandle) {
456
456
  this._attachmentHandle.remove();
457
457
  this._activeWorkflowHandle.remove();
458
458
  }
@@ -461,18 +461,13 @@ const EditCard = class {
461
461
  this._editor.viewModel.state === "creating-features", () => {
462
462
  this._shouldClose = false;
463
463
  });
464
- this._editHandle = this.reactiveUtils.when(() => this._editor.viewModel.state === "ready", () => {
465
- if (this._shouldClose) {
466
- void this._closeEdit();
467
- }
468
- else if (this.graphicIndex > -1 && this.graphics.length > 0 && this.open && !this._shouldClose) {
469
- void this._startUpdate();
470
- }
471
- });
472
464
  this._activeWorkflowHandle = this.reactiveUtils.watch(() => { var _a; return (_a = this._editor.viewModel.activeWorkflow) === null || _a === void 0 ? void 0 : _a.activeWorkflow; }, (activeWorkflow) => {
473
465
  if ((activeWorkflow === null || activeWorkflow === void 0 ? void 0 : activeWorkflow.type) === "update-table-record" || (activeWorkflow === null || activeWorkflow === void 0 ? void 0 : activeWorkflow.type) === "create-features") {
474
466
  this._shouldClose = false;
475
467
  }
468
+ if (!(activeWorkflow === null || activeWorkflow === void 0 ? void 0 : activeWorkflow.type) && !(activeWorkflow === null || activeWorkflow === void 0 ? void 0 : activeWorkflow.hasPendingEdits)) {
469
+ this.open = false;
470
+ }
476
471
  });
477
472
  // had issues with destroy before adding like this
478
473
  this._editContainer.appendChild(container);
@@ -484,12 +479,15 @@ const EditCard = class {
484
479
  * @returns void
485
480
  */
486
481
  async _closeEdit() {
487
- var _a, _b, _c;
482
+ var _a, _b, _c, _d;
488
483
  this._shouldClose = true;
489
484
  if ((_a = this._editor) === null || _a === void 0 ? void 0 : _a.activeWorkflow) {
490
485
  await ((_b = this._editor) === null || _b === void 0 ? void 0 : _b.cancelWorkflow());
491
486
  }
492
- (_c = this._editor) === null || _c === void 0 ? void 0 : _c.destroy();
487
+ if (this.graphicIndex > -1 && ((_c = this.graphics) === null || _c === void 0 ? void 0 : _c.length) > 0) {
488
+ this.refreshGraphics.emit(this.graphics);
489
+ }
490
+ (_d = this._editor) === null || _d === void 0 ? void 0 : _d.destroy();
493
491
  this._shouldClose = false;
494
492
  this.closeEdit.emit();
495
493
  }
@@ -587,6 +585,12 @@ const InfoCard = class {
587
585
  async closeEdit() {
588
586
  this._editRecordOpen = false;
589
587
  }
588
+ /**
589
+ * Refresh the info-card graphics
590
+ */
591
+ async refreshGraphics(evt) {
592
+ this.graphics = [...evt.detail];
593
+ }
590
594
  //--------------------------------------------------------------------------
591
595
  //
592
596
  // Functions (lifecycle)
@@ -106,7 +106,7 @@ const CardManager = class {
106
106
  };
107
107
  CardManager.style = cardManagerCss;
108
108
 
109
- const layerTableCss = ":host{display:block}.height-full{height:100%}.height-full-adjusted{height:calc(100% - 20px)}.width-full{width:100%}.display-flex{display:flex}.table-border{border:1px solid var(--calcite-ui-border-2)}.border-end{border-inline-end:1px solid var(--calcite-ui-border-2)}.border-bottom{border-bottom:1px solid var(--calcite-ui-border-2)}.padding-5{padding:5px}.padding-end-1{padding-inline-end:1rem}.height-51{height:51px}.height-50-px{height:50px}.bottom-left{position:absolute;left:0;bottom:0;padding-left:5px}html[dir=\"rtl\"] .bottom-left{position:absolute;right:0;bottom:0;padding-right:5px}.height-19{height:19px}.background{background-color:var(--calcite-ui-background)}.text-color{color:var(--calcite-ui-text-1)}.align-center{align-items:center}.danger-color{color:var(--calcite-ui-danger)}.esri-feature-table vaadin-grid{border:none !important}vaadin-grid-cell-content{padding:var(--lumo-space-xs) var(--lumo-space-m) !important;font-size:14px !important}.share-action{position:absolute;right:0;margin-top:9px;margin-inline-end:4px}html[dir=\"rtl\"] .share-action{left:0}.disabled{cursor:default !important;-webkit-user-select:none;-moz-user-select:none;user-select:none;opacity:var(--calcite-ui-opacity-disabled);pointer-events:none}";
109
+ const layerTableCss = ":host{display:block}.height-full{height:100%}.height-full-adjusted{height:calc(100% - 20px)}.width-full{width:100%}.display-flex{display:flex}.table-border{border:1px solid var(--calcite-ui-border-2)}.border-end{border-inline-end:1px solid var(--calcite-ui-border-2)}.border-bottom{border-bottom:1px solid var(--calcite-ui-border-2)}.padding-5{padding:5px}.padding-end-1{padding-inline-end:1rem}.height-51{height:51px}.height-50-px{height:50px}.bottom-left{position:absolute;left:0;bottom:0;padding-left:5px}html[dir=\"rtl\"] .bottom-left{position:absolute;right:0;bottom:0;padding-right:5px}.height-19{height:19px}.background{background-color:var(--calcite-ui-background)}.text-color{color:var(--calcite-ui-text-1)}.align-center{align-items:center}.danger-color{color:var(--calcite-ui-danger)}.esri-feature-table vaadin-grid{border:none !important}vaadin-grid-cell-content{padding:var(--lumo-space-xs) var(--lumo-space-m) !important;font-size:14px !important}.share-action{position:absolute;right:0;margin-top:4px;margin-inline-end:4px;margin-bottom:4px}html[dir=\"rtl\"] .share-action{left:0}.disabled{cursor:default !important;-webkit-user-select:none;-moz-user-select:none;user-select:none;opacity:var(--calcite-ui-opacity-disabled);pointer-events:none}.instant-app-share{height:42px !important;display:inline-flex}";
110
110
 
111
111
  const LayerTable = class {
112
112
  constructor(hostRef) {
@@ -699,7 +699,7 @@ const LayerTable = class {
699
699
  * @returns VNode The node representing the DOM element that will contain the action
700
700
  */
701
701
  _getShare(icon) {
702
- return (index.h("div", { class: "share-action", id: this._getId(icon) }, index.h("instant-apps-social-share", { autoUpdateShareUrl: false, popoverButtonIconScale: "s", ref: el => this._shareNode = el, scale: "m", shareButtonColor: "neutral", socialMedia: true, view: this.mapView }), this._getToolTip("bottom", icon, this._translations.share)));
702
+ return (index.h("div", { class: "share-action", id: this._getId(icon) }, index.h("instant-apps-social-share", { autoUpdateShareUrl: false, class: "instant-app-share", popoverButtonIconScale: "s", ref: el => this._shareNode = el, scale: "m", shareButtonColor: "neutral", socialMedia: true, view: this.mapView }), this._getToolTip("bottom", icon, this._translations.share)));
703
703
  }
704
704
  /**
705
705
  * Called each time the values that are used for custom url params change
@@ -818,11 +818,11 @@ const LayerTable = class {
818
818
  * @returns void
819
819
  */
820
820
  async _resetTable() {
821
- var _a, _b;
821
+ var _a;
822
822
  this._clearSelection();
823
823
  this._allIds = [];
824
824
  this.featureSelectionChange.emit(this._selectedIndexes);
825
- const columnTemplates = this._getColumnTemplates(this._layer.id, (_b = (_a = this._layer) === null || _a === void 0 ? void 0 : _a.popupTemplate) === null || _b === void 0 ? void 0 : _b.fieldInfos);
825
+ const columnTemplates = this._getColumnTemplates(this._layer.id, (_a = this._layer) === null || _a === void 0 ? void 0 : _a.fields);
826
826
  this._allIds = await mapViewUtils.queryAllIds(this._layer);
827
827
  if (!this._table) {
828
828
  await this._getTable(this._tableNode, columnTemplates);
@@ -1153,8 +1153,8 @@ const LayerTable = class {
1153
1153
  if (fieldInfos) {
1154
1154
  columnTemplates = columnTemplates ? columnTemplates.map(columnTemplate => {
1155
1155
  fieldInfos.some(fieldInfo => {
1156
- if (fieldInfo.fieldName === columnTemplate.fieldName) {
1157
- columnTemplate.label = fieldInfo.label;
1156
+ if (fieldInfo.name === columnTemplate.fieldName) {
1157
+ columnTemplate.label = fieldInfo.alias;
1158
1158
  return true;
1159
1159
  }
1160
1160
  });
@@ -1162,8 +1162,8 @@ const LayerTable = class {
1162
1162
  }) : fieldInfos.map(fieldInfo => {
1163
1163
  return {
1164
1164
  type: "field",
1165
- fieldName: fieldInfo.fieldName,
1166
- label: fieldInfo.label
1165
+ fieldName: fieldInfo.name,
1166
+ label: fieldInfo.alias
1167
1167
  };
1168
1168
  });
1169
1169
  }
@@ -1306,7 +1306,7 @@ const MapCard = class {
1306
1306
  this.mapView = new this.MapView({
1307
1307
  container: this._mapDiv,
1308
1308
  map: webMap,
1309
- resizeAlign: "top-left"
1309
+ resizeAlign: "center"
1310
1310
  });
1311
1311
  this._loadedId = id;
1312
1312
  this._searchConfiguration = this._webMapInfo.searchConfiguration;
@@ -24,8 +24,10 @@ const CrowdsourceManager = class {
24
24
  */
25
25
  this._shouldSetMapView = false;
26
26
  this.classicGrid = false;
27
+ this.defaultCenter = "";
27
28
  this.defaultGlobalId = "";
28
29
  this.defaultLayer = "";
30
+ this.defaultLevel = "";
29
31
  this.defaultOid = "";
30
32
  this.defaultWebmap = "";
31
33
  this.enableAutoRefresh = false;
@@ -59,6 +61,13 @@ const CrowdsourceManager = class {
59
61
  // Watch handlers
60
62
  //
61
63
  //--------------------------------------------------------------------------
64
+ /**
65
+ * Watch for center url param to be set
66
+ */
67
+ defaultCenterWatchHandler() {
68
+ this._defaultCenter = !this.defaultCenter ? undefined :
69
+ this.defaultCenter.split(";").map(v => parseFloat(v));
70
+ }
62
71
  /**
63
72
  * Watch for globalid url param to be set
64
73
  */
@@ -73,6 +82,12 @@ const CrowdsourceManager = class {
73
82
  this._defaultOid = !this.defaultOid ? undefined :
74
83
  this.defaultOid.indexOf(",") > -1 ? this.defaultOid.split(",").map(o => parseInt(o, 10)) : [parseInt(this.defaultOid, 10)];
75
84
  }
85
+ /**
86
+ * Watch for zoom level param to be set
87
+ */
88
+ defaultLevelWatchHandler() {
89
+ this._defaultLevel = !this.defaultLevel ? undefined : parseInt(this.defaultLevel, 10);
90
+ }
76
91
  /**
77
92
  * When true the map zoom tools will be available
78
93
  */
@@ -100,8 +115,8 @@ const CrowdsourceManager = class {
100
115
  */
101
116
  async mapChanged(evt) {
102
117
  this._mapChange = evt.detail;
103
- await this._mapChange.mapView.when(() => {
104
- this._setMapView();
118
+ await this._mapChange.mapView.when(async () => {
119
+ await this._setMapView();
105
120
  });
106
121
  }
107
122
  /**
@@ -136,10 +151,10 @@ const CrowdsourceManager = class {
136
151
  * Called after each render
137
152
  * Used to delay the setting of the mapView when the popup is expaneded and obstructs the view
138
153
  */
139
- componentDidRender() {
154
+ async componentDidRender() {
140
155
  if (this._shouldSetMapView) {
141
156
  this._shouldSetMapView = false;
142
- this._setMapView();
157
+ await this._setMapView();
143
158
  }
144
159
  }
145
160
  //--------------------------------------------------------------------------
@@ -361,11 +376,19 @@ const CrowdsourceManager = class {
361
376
  *
362
377
  * @protected
363
378
  */
364
- _setMapView() {
379
+ async _setMapView() {
365
380
  this._mapInfo = this._getMapInfo(this._mapChange.id);
366
381
  this._mapView = this._mapChange.mapView;
367
382
  this._initMapZoom();
368
383
  this._mapView.popupEnabled = false;
384
+ if (this._defaultCenter && this._defaultLevel) {
385
+ await this._mapView.goTo({
386
+ center: this._defaultCenter,
387
+ zoom: this._defaultLevel
388
+ });
389
+ this._defaultCenter = undefined;
390
+ this._defaultLevel = undefined;
391
+ }
369
392
  }
370
393
  /**
371
394
  * Add/remove zoom tools based on enableZoom prop
@@ -396,8 +419,10 @@ const CrowdsourceManager = class {
396
419
  }
397
420
  get el() { return index.getElement(this); }
398
421
  static get watchers() { return {
422
+ "defaultCenter": ["defaultCenterWatchHandler"],
399
423
  "defaultGlobalId": ["defaultGlobalIdWatchHandler"],
400
424
  "defaultOid": ["defaultOidWatchHandler"],
425
+ "defaultLevel": ["defaultLevelWatchHandler"],
401
426
  "enableZoom": ["enableZoomWatchHandler"]
402
427
  }; }
403
428
  };