@esri/solutions-components 0.6.9 → 0.6.11

Sign up to get free protection for your applications and to get access to all the features.
Files changed (81) hide show
  1. package/dist/assets/t9n/crowdsource-manager/resources.json +2 -1
  2. package/dist/assets/t9n/crowdsource-manager/resources_en.json +2 -1
  3. package/dist/assets/t9n/info-card/resources.json +4 -1
  4. package/dist/assets/t9n/info-card/resources_en.json +4 -1
  5. package/dist/assets/t9n/layer-table/resources.json +2 -1
  6. package/dist/assets/t9n/layer-table/resources_en.json +2 -1
  7. package/dist/assets/t9n/map-tools/resources.json +0 -3
  8. package/dist/assets/t9n/map-tools/resources_en.json +0 -3
  9. package/dist/cjs/basemap-gallery_5.cjs.entry.js +6 -61
  10. package/dist/cjs/buffer-tools_4.cjs.entry.js +4 -2
  11. package/dist/cjs/card-manager_3.cjs.entry.js +22 -12
  12. package/dist/cjs/crowdsource-manager.cjs.entry.js +27 -5
  13. package/dist/cjs/{downloadUtils-1f057ec0.js → downloadUtils-471a6a2d.js} +16 -10
  14. package/dist/cjs/edit-card_2.cjs.entry.js +34 -2
  15. package/dist/cjs/{index.es-a1507f1c.js → index.es-33154f03.js} +1 -1
  16. package/dist/cjs/loader.cjs.js +1 -1
  17. package/dist/cjs/map-select-tools_3.cjs.entry.js +1 -1
  18. package/dist/cjs/public-notification.cjs.entry.js +1 -1
  19. package/dist/cjs/solutions-components.cjs.js +1 -1
  20. package/dist/collection/components/buffer-tools/buffer-tools.js +4 -2
  21. package/dist/collection/components/card-manager/card-manager.js +1 -1
  22. package/dist/collection/components/crowdsource-manager/crowdsource-manager.css +23 -2
  23. package/dist/collection/components/crowdsource-manager/crowdsource-manager.js +27 -4
  24. package/dist/collection/components/info-card/info-card.css +15 -2
  25. package/dist/collection/components/info-card/info-card.js +34 -1
  26. package/dist/collection/components/layer-table/layer-table.css +20 -0
  27. package/dist/collection/components/layer-table/layer-table.js +5 -1
  28. package/dist/collection/components/map-card/map-card.css +0 -7
  29. package/dist/collection/components/map-card/map-card.js +13 -7
  30. package/dist/collection/components/map-picker/map-picker.css +64 -60
  31. package/dist/collection/components/map-picker/map-picker.js +2 -2
  32. package/dist/collection/components/map-tools/map-tools.css +45 -31
  33. package/dist/collection/components/map-tools/map-tools.js +2 -59
  34. package/dist/collection/utils/downloadUtils.js +15 -9
  35. package/dist/collection/utils/downloadUtils.ts +21 -10
  36. package/dist/components/buffer-tools2.js +4 -2
  37. package/dist/components/card-manager2.js +6 -6
  38. package/dist/components/crowdsource-manager.js +28 -5
  39. package/dist/components/downloadUtils.js +15 -9
  40. package/dist/components/info-card2.js +40 -7
  41. package/dist/components/layer-table2.js +6 -2
  42. package/dist/components/map-card2.js +14 -8
  43. package/dist/components/map-picker2.js +3 -3
  44. package/dist/components/map-tools2.js +3 -58
  45. package/dist/esm/basemap-gallery_5.entry.js +6 -61
  46. package/dist/esm/buffer-tools_4.entry.js +4 -2
  47. package/dist/esm/card-manager_3.entry.js +22 -12
  48. package/dist/esm/crowdsource-manager.entry.js +27 -5
  49. package/dist/esm/{downloadUtils-64c27514.js → downloadUtils-8d4c13bb.js} +16 -10
  50. package/dist/esm/edit-card_2.entry.js +34 -2
  51. package/dist/esm/{index.es-b7bc2db1.js → index.es-065c3035.js} +1 -1
  52. package/dist/esm/loader.js +1 -1
  53. package/dist/esm/map-select-tools_3.entry.js +1 -1
  54. package/dist/esm/public-notification.entry.js +1 -1
  55. package/dist/esm/solutions-components.js +1 -1
  56. package/dist/solutions-components/{p-12f06497.entry.js → p-0dd8368d.entry.js} +1 -1
  57. package/dist/solutions-components/p-46352a57.entry.js +6 -0
  58. package/dist/solutions-components/{p-22d06238.js → p-6eb4ba8f.js} +1 -1
  59. package/dist/solutions-components/{p-35cb6eca.entry.js → p-7a8d99fe.entry.js} +2 -2
  60. package/dist/solutions-components/{p-a26dc184.js → p-95c11620.js} +2 -2
  61. package/dist/solutions-components/p-9eba78eb.entry.js +6 -0
  62. package/dist/solutions-components/{p-b2a52acb.entry.js → p-c26cd409.entry.js} +1 -1
  63. package/dist/solutions-components/p-d4cb29ed.entry.js +6 -0
  64. package/dist/solutions-components/p-fb7ca639.entry.js +6 -0
  65. package/dist/solutions-components/solutions-components.esm.js +1 -1
  66. package/dist/solutions-components/utils/downloadUtils.ts +21 -10
  67. package/dist/types/components/crowdsource-manager/crowdsource-manager.d.ts +17 -0
  68. package/dist/types/components/info-card/info-card.d.ts +23 -0
  69. package/dist/types/components/map-card/map-card.d.ts +4 -0
  70. package/dist/types/components/map-tools/map-tools.d.ts +0 -42
  71. package/dist/types/utils/downloadUtils.d.ts +7 -3
  72. package/package.json +1 -1
  73. package/dist/esm/polyfills/core-js.js +0 -11
  74. package/dist/esm/polyfills/dom.js +0 -79
  75. package/dist/esm/polyfills/es5-html-element.js +0 -1
  76. package/dist/esm/polyfills/index.js +0 -34
  77. package/dist/esm/polyfills/system.js +0 -6
  78. package/dist/solutions-components/p-0dce2c3b.entry.js +0 -6
  79. package/dist/solutions-components/p-476eb52c.entry.js +0 -6
  80. package/dist/solutions-components/p-8b8a6c1f.entry.js +0 -6
  81. package/dist/solutions-components/p-97a4001d.entry.js +0 -6
@@ -153,7 +153,11 @@ export class LayerTable {
153
153
  const tableNodeClass = this._fetchingData ? "display-none" : "";
154
154
  const loadingClass = this._fetchingData ? "" : "display-none";
155
155
  const alertActionClass = this._alertShowAction ? "" : "display-none";
156
- return (h(Host, null, h("calcite-shell", null, this._getTableControlRow("header"), h("div", { class: "height-full width-full" }, h("calcite-panel", { class: "height-full width-full" }, h("calcite-loader", { class: loadingClass, label: this._translations.fetchingData, scale: "l" }), h("div", { class: tableNodeClass, ref: this.onTableNodeCreate }))), h("calcite-alert", { icon: this._alertIcon, kind: this._alertKind, label: "", onCalciteAlertClose: () => this._alertClosed(), open: this._alertOpen, placement: "top" }, h("div", { slot: "title" }, this._alertTitle), h("div", { slot: "message" }, this._alertMessage), h("calcite-link", { class: alertActionClass, onClick: this._alertActionFunction, slot: "link" }, this._alertActionText)))));
156
+ const total = this._allIds.length.toString();
157
+ const selected = this._selectedIndexes.length.toString();
158
+ return (h(Host, null, h("calcite-shell", null, this._getTableControlRow("header"), h("div", { class: "height-full width-full" }, h("calcite-panel", { class: "height-full width-full" }, h("calcite-loader", { class: loadingClass, label: this._translations.fetchingData, scale: "l" }), h("div", { class: tableNodeClass, ref: this.onTableNodeCreate })), h("div", { class: "bottom-left background text-color" }, this._translations.recordsSelected
159
+ .replace("{{total}}", total)
160
+ .replace("{{selected}}", selected))), h("calcite-alert", { icon: this._alertIcon, kind: this._alertKind, label: "", onCalciteAlertClose: () => this._alertClosed(), open: this._alertOpen, placement: "top" }, h("div", { slot: "title" }, this._alertTitle), h("div", { slot: "message" }, this._alertMessage), h("calcite-link", { class: alertActionClass, onClick: this._alertActionFunction, slot: "link" }, this._alertActionText)))));
157
161
  }
158
162
  //--------------------------------------------------------------------------
159
163
  //
@@ -23,10 +23,3 @@
23
23
  .map-height {
24
24
  height: calc(100% - 58px);
25
25
  }
26
-
27
- /* Not sure how else to do this
28
- tried navigation gamepad settings but enabled: false still shows this */
29
-
30
- .esri-zoom {
31
- display: none !important;
32
- }
@@ -73,12 +73,14 @@ export class MapCard {
73
73
  * @protected
74
74
  */
75
75
  async _initModules() {
76
- const [WebMap, MapView] = await loadModules([
76
+ const [WebMap, MapView, Home] = await loadModules([
77
77
  "esri/WebMap",
78
- "esri/views/MapView"
78
+ "esri/views/MapView",
79
+ "esri/widgets/Home"
79
80
  ]);
80
81
  this.WebMap = WebMap;
81
82
  this.MapView = MapView;
83
+ this.Home = Home;
82
84
  }
83
85
  /**
84
86
  * Load the webmap for the provided webMapInfo
@@ -104,13 +106,17 @@ export class MapCard {
104
106
  map: webMap,
105
107
  resizeAlign: "top-left"
106
108
  });
109
+ this._loadedId = id;
110
+ this._searchConfiguration = this._webMapInfo.searchConfiguration;
111
+ this.mapChanged.emit({
112
+ id: id,
113
+ mapView: this.mapView
114
+ });
107
115
  await this.mapView.when(() => {
108
- this._loadedId = id;
109
- this._searchConfiguration = this._webMapInfo.searchConfiguration;
110
- this.mapChanged.emit({
111
- id: id,
112
- mapView: this.mapView
116
+ const home = new this.Home({
117
+ view: this.mapView
113
118
  });
119
+ this.mapView.ui.add(home, { position: "top-left", index: 3 });
114
120
  this.mapView.ui.add(this._mapTools, { position: "top-right", index: 0 });
115
121
  });
116
122
  }
@@ -1,60 +1,64 @@
1
- /** @license
2
- * Copyright 2023 Esri
3
- *
4
- * Licensed under the Apache License, Version 2.0 (the "License");
5
- * you may not use this file except in compliance with the License.
6
- * You may obtain a copy of the License at
7
- *
8
- * http://www.apache.org/licenses/LICENSE-2.0
9
- *
10
- * Unless required by applicable law or agreed to in writing, software
11
- * distributed under the License is distributed on an "AS IS" BASIS,
12
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
- * See the License for the specific language governing permissions and
14
- * limitations under the License.
15
- */
16
-
17
- :host {
18
- display: block;
19
- }
20
-
21
- .width-full {
22
- width: 100%;
23
- }
24
-
25
- .height-full {
26
- height: 100%;
27
- }
28
-
29
- .display-flex {
30
- display: flex;
31
- }
32
-
33
- .border-bottom-1 {
34
- border-width: 0px;
35
- border-bottom-width: 1px;
36
- border-style: solid;
37
- border-color: var(--calcite-ui-border-3);
38
- }
39
-
40
- .action-bar-size {
41
- height: 51px;
42
- width: 100%;
43
- }
44
-
45
- .map-list {
46
- position: absolute;
47
- display: flex;
48
- flex-direction: column;
49
- overflow: hidden;
50
- animation: calcite-scrim-fade-in var(--calcite-internal-animation-timing-medium) ease-in-out;
51
- background-color: var(--calcite-scrim-background);
52
- z-index: 1;
53
- width: 100%;
54
- height: -moz-fit-content;
55
- height: fit-content;
56
- }
57
-
58
- .display-none {
59
- display: none;
60
- }
1
+ /** @license
2
+ * Copyright 2023 Esri
3
+ *
4
+ * Licensed under the Apache License, Version 2.0 (the "License");
5
+ * you may not use this file except in compliance with the License.
6
+ * You may obtain a copy of the License at
7
+ *
8
+ * http://www.apache.org/licenses/LICENSE-2.0
9
+ *
10
+ * Unless required by applicable law or agreed to in writing, software
11
+ * distributed under the License is distributed on an "AS IS" BASIS,
12
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
+ * See the License for the specific language governing permissions and
14
+ * limitations under the License.
15
+ */
16
+
17
+ :host {
18
+ display: block;
19
+ }
20
+
21
+ .width-full {
22
+ width: 100%;
23
+ }
24
+
25
+ .height-full {
26
+ height: 100%;
27
+ }
28
+
29
+ .display-flex {
30
+ display: flex;
31
+ }
32
+
33
+ .border-bottom-1 {
34
+ border-width: 0px;
35
+ border-bottom-width: 1px;
36
+ border-style: solid;
37
+ border-color: var(--calcite-ui-border-3);
38
+ }
39
+
40
+ .action-bar-size {
41
+ height: 51px;
42
+ width: 100%;
43
+ }
44
+
45
+ .map-list {
46
+ position: absolute;
47
+ display: flex;
48
+ flex-direction: column;
49
+ overflow: hidden;
50
+ animation: calcite-scrim-fade-in var(--calcite-internal-animation-timing-medium) ease-in-out;
51
+ background-color: var(--calcite-scrim-background);
52
+ z-index: 1000;
53
+ width: 100%;
54
+ height: -moz-fit-content;
55
+ height: fit-content;
56
+ }
57
+
58
+ .display-none {
59
+ display: none;
60
+ }
61
+
62
+ .action-bar-color {
63
+ background-color: var(--calcite-ui-border-3) !important;
64
+ }
@@ -95,7 +95,7 @@ export class MapPicker {
95
95
  _getMapPicker() {
96
96
  var _a;
97
97
  const mapListIcon = this._mapListExpanded ? "chevron-up" : "chevron-down";
98
- return (h("calcite-button", { alignment: "icon-end-space-between", appearance: "solid", class: "width-full height-full", iconEnd: mapListIcon, kind: "neutral", onClick: () => this._chooseMap(), width: "full" }, (_a = this._webMapInfo) === null || _a === void 0 ? void 0 : _a.name));
98
+ return (h("calcite-button", { alignment: "icon-end-space-between", appearance: "transparent", class: "width-full height-full", iconEnd: mapListIcon, kind: "neutral", onClick: () => this._chooseMap(), width: "full" }, (_a = this._webMapInfo) === null || _a === void 0 ? void 0 : _a.name));
99
99
  }
100
100
  /**
101
101
  * Create the toolbar (controls used for map and app interactions)
@@ -105,7 +105,7 @@ export class MapPicker {
105
105
  * @protected
106
106
  */
107
107
  _getToolbar() {
108
- return (h("div", { class: "display-flex" }, h("calcite-action-bar", { class: "border-bottom-1 action-bar-size", "expand-disabled": true, layout: "horizontal", slot: "header" }, this._getMapPicker())));
108
+ return (h("div", { class: "display-flex" }, h("calcite-action-bar", { class: "action-bar-color border-bottom-1 action-bar-size", "expand-disabled": true, layout: "horizontal", slot: "header" }, this._getMapPicker())));
109
109
  }
110
110
  /**
111
111
  * Get a pick list for all maps in mapInfos
@@ -1,31 +1,45 @@
1
- /** @license
2
- * Copyright 2022 Esri
3
- *
4
- * Licensed under the Apache License, Version 2.0 (the "License");
5
- * you may not use this file except in compliance with the License.
6
- * You may obtain a copy of the License at
7
- *
8
- * http://www.apache.org/licenses/LICENSE-2.0
9
- *
10
- * Unless required by applicable law or agreed to in writing, software
11
- * distributed under the License is distributed on an "AS IS" BASIS,
12
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
- * See the License for the specific language governing permissions and
14
- * limitations under the License.
15
- */
16
-
17
- :host {
18
- display: block;
19
- }
20
-
21
- .display-none {
22
- display: none;
23
- }
24
-
25
- .border {
26
- border: 1px solid var(--calcite-ui-border-3);
27
- }
28
-
29
- .margin-top-1-2 {
30
- margin-top: 0.5rem;
31
- }
1
+ /** @license
2
+ * Copyright 2022 Esri
3
+ *
4
+ * Licensed under the Apache License, Version 2.0 (the "License");
5
+ * you may not use this file except in compliance with the License.
6
+ * You may obtain a copy of the License at
7
+ *
8
+ * http://www.apache.org/licenses/LICENSE-2.0
9
+ *
10
+ * Unless required by applicable law or agreed to in writing, software
11
+ * distributed under the License is distributed on an "AS IS" BASIS,
12
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
+ * See the License for the specific language governing permissions and
14
+ * limitations under the License.
15
+ */
16
+
17
+ :host {
18
+ display: block;
19
+ }
20
+
21
+ .display-none {
22
+ display: none;
23
+ }
24
+
25
+ .border {
26
+ border: 1px solid var(--calcite-ui-border-3);
27
+ }
28
+
29
+ .margin-top-1-2 {
30
+ margin-top: 0.5rem;
31
+ }
32
+
33
+ .square-40 {
34
+ width: 40px;
35
+ height: 40px;
36
+ }
37
+
38
+ .width-40 {
39
+ width: 40px;
40
+ }
41
+
42
+ .square-40-41 {
43
+ width: 40px;
44
+ height: 41px;
45
+ }
@@ -37,14 +37,6 @@ export class MapTools {
37
37
  // Watch handlers
38
38
  //
39
39
  //--------------------------------------------------------------------------
40
- /**
41
- * Store the home extent when the map view changes
42
- */
43
- async mapViewWatchHandler() {
44
- await this.mapView.when(() => {
45
- this._homeExtent = this.mapView.extent;
46
- });
47
- }
48
40
  /**
49
41
  * When the _showBasemapWidget property is true display the basemap gallery
50
42
  */
@@ -107,7 +99,7 @@ export class MapTools {
107
99
  const searchClass = this._showSearchWidget ? "" : "display-none";
108
100
  const basemapClass = this._showBasemapWidget ? "" : "display-none";
109
101
  const legendClass = this._showLegendWidget ? "" : "display-none";
110
- return (h(Host, null, h("div", null, h("calcite-action", { alignment: "center", class: "border", compact: false, icon: toggleIcon, onClick: () => { this._toggleTools(); }, text: "" }), h("calcite-action-bar", { class: `border margin-top-1-2 ${toolsClass}`, "expand-disabled": true, layout: this.layout }, this._getActionGroup("home", false, this._translations.home, () => void this._goHome()), this._getActionGroup("plus", false, this._translations.zoomIn, () => void this._zoomIn()), this._getActionGroup("minus", false, this._translations.zoomOut, () => void this._zoomOut()), this._getActionGroup("legend", false, this._translations.legend, () => this._showLegend()), this._getActionGroup("magnifying-glass", false, this._translations.search, () => this._search()), this._getActionGroup("expand", false, this._translations.expand, () => this._expand()), this._getActionGroup("basemap", false, this._translations.basemap, () => this._toggleBasemapPicker()))), h("basemap-gallery", { class: basemapClass, mapView: this.mapView, ref: (el) => { this._basemapElement = el; } }), h("map-search", { class: searchClass, mapView: this.mapView, ref: (el) => { this._searchElement = el; }, searchConfiguration: this.searchConfiguration }), h("map-legend", { class: legendClass, mapView: this.mapView, ref: (el) => { this._legendElement = el; } })));
102
+ return (h(Host, null, h("div", null, h("calcite-action", { alignment: "center", class: "border square-40", compact: false, icon: toggleIcon, onClick: () => { this._toggleTools(); }, scale: "s", text: "" }), h("calcite-action-bar", { class: `width-40 border margin-top-1-2 ${toolsClass}`, "expand-disabled": true, layout: this.layout }, this._getActionGroup("legend", false, this._translations.legend, () => this._showLegend()), this._getActionGroup("magnifying-glass", false, this._translations.search, () => this._search()), this._getActionGroup("expand", false, this._translations.expand, () => this._expand()), this._getActionGroup("basemap", false, this._translations.basemap, () => this._toggleBasemapPicker()))), h("basemap-gallery", { class: basemapClass, mapView: this.mapView, ref: (el) => { this._basemapElement = el; } }), h("map-search", { class: searchClass, mapView: this.mapView, ref: (el) => { this._searchElement = el; }, searchConfiguration: this.searchConfiguration }), h("map-legend", { class: legendClass, mapView: this.mapView, ref: (el) => { this._legendElement = el; } })));
111
103
  }
112
104
  //--------------------------------------------------------------------------
113
105
  //
@@ -127,17 +119,7 @@ export class MapTools {
127
119
  * @protected
128
120
  */
129
121
  _getActionGroup(icon, disabled, tip, func) {
130
- return (h("calcite-action-group", null, h("calcite-action", { alignment: "center", compact: false, disabled: disabled, icon: icon, id: icon, onClick: func, text: "" }, h("calcite-icon", { icon: "cheveron-up", scale: "s", slot: "icon" })), h("calcite-tooltip", { label: "", placement: "bottom", "reference-element": icon }, h("span", null, tip))));
131
- }
132
- /**
133
- * Go to the exent that was first used when loading the map
134
- *
135
- * @returns void
136
- *
137
- * @protected
138
- */
139
- async _goHome() {
140
- await this.mapView.goTo(this._homeExtent);
122
+ return (h("calcite-action-group", { class: "square-40-41" }, h("calcite-action", { alignment: "center", class: "square-40", compact: false, disabled: disabled, icon: icon, id: icon, onClick: func, scale: "s", text: "" }, h("calcite-icon", { icon: "cheveron-up", scale: "s", slot: "icon" })), h("calcite-tooltip", { label: "", placement: "trailing", "reference-element": icon }, h("span", null, tip))));
141
123
  }
142
124
  // need to discuss this with the team
143
125
  _showLegend() {
@@ -149,42 +131,6 @@ export class MapTools {
149
131
  this._showSearchWidget = !this._showSearchWidget;
150
132
  this._showTools = false;
151
133
  }
152
- /**
153
- * Fixed zoom in
154
- *
155
- * @returns void
156
- *
157
- * @protected
158
- */
159
- async _zoomIn() {
160
- await this._zoom(this.mapView.zoom + 1);
161
- }
162
- /**
163
- * Fixed zoom out
164
- *
165
- * @returns void
166
- *
167
- * @protected
168
- */
169
- async _zoomOut() {
170
- await this._zoom(this.mapView.zoom - 1);
171
- }
172
- /**
173
- * Zoom in/out at the maps current center point
174
- *
175
- * @param zoom Number to zoom level to go to
176
- *
177
- * @returns void
178
- *
179
- * @protected
180
- */
181
- async _zoom(zoom) {
182
- var _a;
183
- await ((_a = this.mapView) === null || _a === void 0 ? void 0 : _a.goTo({
184
- target: this.mapView.center,
185
- zoom
186
- }));
187
- }
188
134
  /**
189
135
  * Show/Hide the basemap picker
190
136
  *
@@ -342,9 +288,6 @@ export class MapTools {
342
288
  static get elementRef() { return "el"; }
343
289
  static get watchers() {
344
290
  return [{
345
- "propName": "mapView",
346
- "methodName": "mapViewWatchHandler"
347
- }, {
348
291
  "propName": "_showBasemapWidget",
349
292
  "methodName": "_showBasemapWidgetWatchHandler"
350
293
  }, {
@@ -324,8 +324,8 @@ export function _getFieldNamesFromFieldExpressions(fieldExpressions) {
324
324
  * all attributes are exported
325
325
  * @param attributeFormats Empty object to hold the formats for each attribute in a feature; the object is filled
326
326
  * with formats by this function
327
- * @returns A Promise resolving to the format of a single label, e.g., for ILabelFormat type "pattern":
328
- * "{NAME}|{STREET}|{CITY}, {STATE} {ZIP}"
327
+ * @returns A Promise resolving to the format of a single label with fields coerced to lowercase, e.g.,
328
+ * for ILabelFormat type "pattern": "{name}|{street}|{city}, {state} {zip}"
329
329
  */
330
330
  export async function _getLabelFormat(layer, formatUsingLayerPopup, attributeFormats) {
331
331
  var _a, _b, _c, _d, _e, _f;
@@ -338,7 +338,7 @@ export async function _getLabelFormat(layer, formatUsingLayerPopup, attributeFor
338
338
  // Extract any format info that we have
339
339
  fieldInfo => {
340
340
  if (fieldInfo.format) {
341
- attributeFormats[fieldInfo.fieldName] = fieldInfo.format;
341
+ attributeFormats[fieldInfo.fieldName.toLowerCase()] = fieldInfo.format;
342
342
  }
343
343
  });
344
344
  // What is the nature of the label content?
@@ -447,11 +447,14 @@ export async function _prepareLabels(layer, ids, formatUsingLayerPopup = true, i
447
447
  // Get the features to export
448
448
  const featureSet = await queryFeaturesByID(ids, layer, [], false);
449
449
  // Get field data types. Do we have any domain-based fields?
450
+ const attributeOrigNames = {};
450
451
  const attributeTypes = {};
451
452
  const attributeDomains = {};
452
453
  layer.fields.forEach(field => {
453
- attributeTypes[field.name] = field.type;
454
- attributeDomains[field.name] = field.domain;
454
+ const lowercaseFieldname = field.name.toLowerCase();
455
+ attributeOrigNames[lowercaseFieldname] = field.name;
456
+ attributeDomains[lowercaseFieldname] = field.domain;
457
+ attributeTypes[lowercaseFieldname] = field.type;
455
458
  });
456
459
  const attributeFormats = {};
457
460
  // Get the label formatting, if any
@@ -462,7 +465,7 @@ export async function _prepareLabels(layer, ids, formatUsingLayerPopup = true, i
462
465
  await _prepareLabelsFromAll(featureSet, attributeTypes, attributeDomains, includeHeaderNames)
463
466
  : labelFormat.type == "pattern" ?
464
467
  // Export attributes in format
465
- await _prepareLabelsFromPattern(featureSet, attributeTypes, attributeDomains, attributeFormats, labelFormat.format, includeHeaderNames)
468
+ await _prepareLabelsFromPattern(featureSet, attributeOrigNames, attributeTypes, attributeDomains, attributeFormats, labelFormat.format, includeHeaderNames)
466
469
  :
467
470
  // Export attributes in expression
468
471
  await _prepareLabelsUsingExecutor(featureSet, labelFormat.format);
@@ -482,7 +485,8 @@ export async function _prepareLabelsFromAll(featureSet, attributeTypes, attribut
482
485
  // Export all attributes
483
486
  const labels = featureSet.map(feature => {
484
487
  return Object.keys(feature.attributes).map((attributeName) => {
485
- return _prepareAttributeValue(feature.attributes[attributeName], attributeTypes[attributeName], attributeDomains[attributeName], null, intl);
488
+ const lowercaseFieldname = attributeName.toLowerCase();
489
+ return _prepareAttributeValue(feature.attributes[attributeName], attributeTypes[lowercaseFieldname], attributeDomains[lowercaseFieldname], null, intl);
486
490
  });
487
491
  });
488
492
  // Add header names
@@ -500,6 +504,7 @@ export async function _prepareLabelsFromAll(featureSet, attributeTypes, attribut
500
504
  * Creates labels from attributes in a layer popup.
501
505
  *
502
506
  * @param featureSet Features to convert to labels
507
+ * @param attributeOrigNames Mapping from lowercase field names to original field names
503
508
  * @param attributeTypes Type for each attribute in a feature
504
509
  * @param attributeDomains Domains for each attribute in a feature
505
510
  * @param attributeFormats Formats for each attribute in a feature
@@ -507,7 +512,7 @@ export async function _prepareLabelsFromAll(featureSet, attributeTypes, attribut
507
512
  * @param includeHeaderNames Add the label format at the front of the list of generated labels
508
513
  * @returns Promise resolving with list of labels, each of which is a list of label lines
509
514
  */
510
- export async function _prepareLabelsFromPattern(featureSet, attributeTypes, attributeDomains, attributeFormats, labelFormat, includeHeaderNames = false) {
515
+ export async function _prepareLabelsFromPattern(featureSet, attributeOrigNames, attributeTypes, attributeDomains, attributeFormats, labelFormat, includeHeaderNames = false) {
511
516
  const [intl] = await loadModules(["esri/intl"]);
512
517
  // Find the label fields that we need to replace with values
513
518
  const attributeExpressionMatches = _getFieldExpressionsFromLabel(labelFormat);
@@ -517,7 +522,8 @@ export async function _prepareLabelsFromPattern(featureSet, attributeTypes, attr
517
522
  let labelPrep = labelFormat;
518
523
  // Replace non-Arcade fields in this feature
519
524
  attributeNames.forEach((attributeName, i) => {
520
- const value = _prepareAttributeValue(feature.attributes[attributeName], attributeTypes[attributeName], attributeDomains[attributeName], attributeFormats[attributeName], intl);
525
+ const lowercaseFieldname = attributeName.toLowerCase();
526
+ const value = _prepareAttributeValue(feature.attributes[attributeOrigNames[lowercaseFieldname]], attributeTypes[lowercaseFieldname], attributeDomains[lowercaseFieldname], attributeFormats[lowercaseFieldname], intl);
521
527
  labelPrep = labelPrep.replace(attributeExpressionMatches[i], value);
522
528
  });
523
529
  // Split label into lines
@@ -24,6 +24,10 @@ import { IExportInfo, IExportInfos } from "../utils/interfaces";
24
24
 
25
25
  export { ILabel } from "./pdfUtils";
26
26
 
27
+ export interface IAttributeOrigNames {
28
+ [lowercaseName: string]: string;
29
+ }
30
+
27
31
  export interface IAttributeDomains {
28
32
  [attributeName: string]: __esri.CodedValueDomain | __esri.RangeDomain | __esri.InheritedDomain | null;
29
33
  }
@@ -436,8 +440,8 @@ export function _getFieldNamesFromFieldExpressions(
436
440
  * all attributes are exported
437
441
  * @param attributeFormats Empty object to hold the formats for each attribute in a feature; the object is filled
438
442
  * with formats by this function
439
- * @returns A Promise resolving to the format of a single label, e.g., for ILabelFormat type "pattern":
440
- * "{NAME}|{STREET}|{CITY}, {STATE} {ZIP}"
443
+ * @returns A Promise resolving to the format of a single label with fields coerced to lowercase, e.g.,
444
+ * for ILabelFormat type "pattern": "{name}|{street}|{city}, {state} {zip}"
441
445
  */
442
446
  export async function _getLabelFormat(
443
447
  layer: __esri.FeatureLayer,
@@ -454,7 +458,7 @@ export async function _getLabelFormat(
454
458
  // Extract any format info that we have
455
459
  fieldInfo => {
456
460
  if (fieldInfo.format) {
457
- attributeFormats[fieldInfo.fieldName] = fieldInfo.format;
461
+ attributeFormats[fieldInfo.fieldName.toLowerCase()] = fieldInfo.format;
458
462
  }
459
463
  }
460
464
  );
@@ -586,12 +590,15 @@ export async function _prepareLabels(
586
590
  const featureSet = await queryFeaturesByID(ids, layer, [], false);
587
591
 
588
592
  // Get field data types. Do we have any domain-based fields?
593
+ const attributeOrigNames: IAttributeOrigNames = {};
589
594
  const attributeTypes: IAttributeTypes = {};
590
595
  const attributeDomains: IAttributeDomains = {};
591
596
  layer.fields.forEach(
592
597
  field => {
593
- attributeTypes[field.name] = field.type;
594
- attributeDomains[field.name] = field.domain;
598
+ const lowercaseFieldname = field.name.toLowerCase();
599
+ attributeOrigNames[lowercaseFieldname] = field.name;
600
+ attributeDomains[lowercaseFieldname] = field.domain;
601
+ attributeTypes[lowercaseFieldname] = field.type;
595
602
  }
596
603
  );
597
604
  const attributeFormats: IAttributeFormats = {};
@@ -605,7 +612,7 @@ export async function _prepareLabels(
605
612
  await _prepareLabelsFromAll(featureSet, attributeTypes, attributeDomains, includeHeaderNames)
606
613
  : labelFormat.type == "pattern" ?
607
614
  // Export attributes in format
608
- await _prepareLabelsFromPattern(featureSet, attributeTypes, attributeDomains,
615
+ await _prepareLabelsFromPattern(featureSet, attributeOrigNames, attributeTypes, attributeDomains,
609
616
  attributeFormats, labelFormat.format as string, includeHeaderNames)
610
617
  :
611
618
  // Export attributes in expression
@@ -636,8 +643,9 @@ export async function _prepareLabelsFromAll(
636
643
  feature => {
637
644
  return Object.keys(feature.attributes).map(
638
645
  (attributeName: string) => {
646
+ const lowercaseFieldname = attributeName.toLowerCase();
639
647
  return _prepareAttributeValue(feature.attributes[attributeName],
640
- attributeTypes[attributeName], attributeDomains[attributeName],
648
+ attributeTypes[lowercaseFieldname], attributeDomains[lowercaseFieldname],
641
649
  null, intl);
642
650
  }
643
651
  );
@@ -661,6 +669,7 @@ export async function _prepareLabelsFromAll(
661
669
  * Creates labels from attributes in a layer popup.
662
670
  *
663
671
  * @param featureSet Features to convert to labels
672
+ * @param attributeOrigNames Mapping from lowercase field names to original field names
664
673
  * @param attributeTypes Type for each attribute in a feature
665
674
  * @param attributeDomains Domains for each attribute in a feature
666
675
  * @param attributeFormats Formats for each attribute in a feature
@@ -670,6 +679,7 @@ export async function _prepareLabelsFromAll(
670
679
  */
671
680
  export async function _prepareLabelsFromPattern(
672
681
  featureSet: __esri.Graphic[],
682
+ attributeOrigNames: IAttributeOrigNames,
673
683
  attributeTypes: IAttributeTypes,
674
684
  attributeDomains: IAttributeDomains,
675
685
  attributeFormats: IAttributeFormats,
@@ -690,9 +700,10 @@ export async function _prepareLabelsFromPattern(
690
700
  // Replace non-Arcade fields in this feature
691
701
  attributeNames.forEach(
692
702
  (attributeName: string, i: number) => {
693
- const value = _prepareAttributeValue(feature.attributes[attributeName],
694
- attributeTypes[attributeName], attributeDomains[attributeName],
695
- attributeFormats[attributeName], intl);
703
+ const lowercaseFieldname = attributeName.toLowerCase();
704
+ const value = _prepareAttributeValue(feature.attributes[attributeOrigNames[lowercaseFieldname]],
705
+ attributeTypes[lowercaseFieldname], attributeDomains[lowercaseFieldname],
706
+ attributeFormats[lowercaseFieldname], intl);
696
707
  labelPrep = labelPrep.replace(attributeExpressionMatches[i], value);
697
708
 
698
709
  },
@@ -155,9 +155,11 @@ const BufferTools = /*@__PURE__*/ proxyCustomElement(class BufferTools extends H
155
155
  }
156
156
  this._bufferTimeout = setTimeout(() => {
157
157
  var _a;
158
- // needs to be wgs 84 or Web Mercator
159
158
  if (((_a = this.geometries) === null || _a === void 0 ? void 0 : _a.length) > 0 && this.unit && this.distance > 0) {
160
- const buffer = this._geometryEngine.geodesicBuffer(this.geometries, this.distance, this.unit, this.unionResults);
159
+ const geom = this.geometries[0];
160
+ const sr = geom.spatialReference;
161
+ const buffer = (sr.isWGS84 || sr.isWebMercator) ?
162
+ this._geometryEngine.geodesicBuffer(this.geometries, this.distance, this.unit, this.unionResults) : this._geometryEngine.buffer(this.geometries, this.distance, this.unit, this.unionResults);
161
163
  this.bufferComplete.emit(buffer);
162
164
  }
163
165
  }, 400);
@@ -7,8 +7,8 @@ import { proxyCustomElement, HTMLElement, h, Host } from '@stencil/core/internal
7
7
  import { g as getLocaleComponentStrings } from './locale.js';
8
8
  import { q as queryFeaturesByID } from './queryUtils.js';
9
9
  import { g as getLayer } from './mapViewUtils.js';
10
- import { d as defineCustomElement$a } from './action.js';
11
- import { d as defineCustomElement$9 } from './alert.js';
10
+ import { d as defineCustomElement$a } from './alert.js';
11
+ import { d as defineCustomElement$9 } from './button.js';
12
12
  import { d as defineCustomElement$8 } from './chip.js';
13
13
  import { d as defineCustomElement$7 } from './icon.js';
14
14
  import { d as defineCustomElement$6 } from './loader.js';
@@ -84,7 +84,7 @@ const CardManager = /*@__PURE__*/ proxyCustomElement(class CardManager extends H
84
84
  var _a, _b;
85
85
  const featuresClass = ((_a = this._graphics) === null || _a === void 0 ? void 0 : _a.length) > 0 ? "" : "display-none";
86
86
  const messageClass = ((_b = this._graphics) === null || _b === void 0 ? void 0 : _b.length) > 0 ? "display-none" : "";
87
- return (h(Host, null, h("div", { class: "border-rounded overflow-auto height-full" }, h("calcite-shell", { class: "position-relative padding-1 " + featuresClass }, h("div", null, h("info-card", { graphics: this._graphics, isLoading: this._cardLoading, mapView: this.mapView, zoomAndScrollToSelected: this.zoomAndScrollToSelected }))), h("div", { class: "padding-1 " + messageClass }, h("calcite-notice", { icon: "table", open: true }, h("div", { slot: "message" }, this._translations.selectFeaturesToStart))))));
87
+ return (h(Host, null, h("div", { class: "border-rounded overflow-auto height-full" }, h("calcite-shell", { class: "position-relative " + featuresClass }, h("div", null, h("info-card", { graphics: this._graphics, isLoading: this._cardLoading, mapView: this.mapView, zoomAndScrollToSelected: this.zoomAndScrollToSelected }))), h("div", { class: "padding-1 " + messageClass }, h("calcite-notice", { icon: "table", open: true }, h("div", { slot: "message" }, this._translations.selectFeaturesToStart))))));
88
88
  }
89
89
  //--------------------------------------------------------------------------
90
90
  //
@@ -115,19 +115,19 @@ function defineCustomElement() {
115
115
  if (typeof customElements === "undefined") {
116
116
  return;
117
117
  }
118
- const components = ["card-manager", "calcite-action", "calcite-alert", "calcite-chip", "calcite-icon", "calcite-loader", "calcite-notice", "calcite-shell", "calcite-tooltip", "edit-card", "info-card"];
118
+ const components = ["card-manager", "calcite-alert", "calcite-button", "calcite-chip", "calcite-icon", "calcite-loader", "calcite-notice", "calcite-shell", "calcite-tooltip", "edit-card", "info-card"];
119
119
  components.forEach(tagName => { switch (tagName) {
120
120
  case "card-manager":
121
121
  if (!customElements.get(tagName)) {
122
122
  customElements.define(tagName, CardManager);
123
123
  }
124
124
  break;
125
- case "calcite-action":
125
+ case "calcite-alert":
126
126
  if (!customElements.get(tagName)) {
127
127
  defineCustomElement$a();
128
128
  }
129
129
  break;
130
- case "calcite-alert":
130
+ case "calcite-button":
131
131
  if (!customElements.get(tagName)) {
132
132
  defineCustomElement$9();
133
133
  }