@esri/solutions-components 0.7.4 → 0.7.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (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
  };