@esri/solutions-components 0.6.27 → 0.6.29

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 (50) hide show
  1. package/dist/cjs/basemap-gallery_7.cjs.entry.js +2 -2
  2. package/dist/cjs/calcite-alert_3.cjs.entry.js +1 -1
  3. package/dist/cjs/calcite-combobox_6.cjs.entry.js +2 -2
  4. package/dist/cjs/card-manager_3.cjs.entry.js +335 -16
  5. package/dist/cjs/crowdsource-manager.cjs.entry.js +4 -4
  6. package/dist/cjs/loader.cjs.js +1 -1
  7. package/dist/cjs/solutions-components.cjs.js +1 -1
  8. package/dist/collection/components/basemap-gallery/basemap-gallery.js +2 -2
  9. package/dist/collection/components/crowdsource-manager/crowdsource-manager.css +0 -4
  10. package/dist/collection/components/crowdsource-manager/crowdsource-manager.js +3 -3
  11. package/dist/collection/components/edit-card/edit-card.js +1 -1
  12. package/dist/collection/components/layer-table/layer-table.css +6 -2
  13. package/dist/collection/components/layer-table/layer-table.js +337 -10
  14. package/dist/collection/components/map-card/map-card.js +2 -5
  15. package/dist/collection/components/map-layer-picker/map-layer-picker.js +2 -2
  16. package/dist/collection/demos/crowdsource-manager.html +0 -3
  17. package/dist/collection/utils/interfaces.ts +14 -0
  18. package/dist/components/basemap-gallery2.js +2 -2
  19. package/dist/components/crowdsource-manager.js +4 -4
  20. package/dist/components/edit-card2.js +1 -1
  21. package/dist/components/layer-table2.js +336 -11
  22. package/dist/components/map-card2.js +2 -5
  23. package/dist/components/map-layer-picker2.js +2 -2
  24. package/dist/esm/basemap-gallery_7.entry.js +2 -2
  25. package/dist/esm/calcite-alert_3.entry.js +1 -1
  26. package/dist/esm/calcite-combobox_6.entry.js +2 -2
  27. package/dist/esm/card-manager_3.entry.js +335 -16
  28. package/dist/esm/crowdsource-manager.entry.js +4 -4
  29. package/dist/esm/loader.js +1 -1
  30. package/dist/esm/polyfills/core-js.js +11 -0
  31. package/dist/esm/polyfills/dom.js +79 -0
  32. package/dist/esm/polyfills/es5-html-element.js +1 -0
  33. package/dist/esm/polyfills/index.js +34 -0
  34. package/dist/esm/polyfills/system.js +6 -0
  35. package/dist/esm/solutions-components.js +1 -1
  36. package/dist/solutions-components/demos/crowdsource-manager.html +0 -3
  37. package/dist/solutions-components/{p-5e446b18.entry.js → p-190c83b9.entry.js} +1 -1
  38. package/dist/solutions-components/p-3c702004.entry.js +6 -0
  39. package/dist/solutions-components/p-d44ad6c4.entry.js +6 -0
  40. package/dist/solutions-components/p-f2dcb05a.entry.js +6 -0
  41. package/dist/solutions-components/{p-3fe6368e.entry.js → p-f8687049.entry.js} +1 -1
  42. package/dist/solutions-components/solutions-components.esm.js +1 -1
  43. package/dist/solutions-components/utils/interfaces.ts +14 -0
  44. package/dist/types/components/layer-table/layer-table.d.ts +140 -4
  45. package/dist/types/components/map-card/map-card.d.ts +0 -1
  46. package/dist/types/utils/interfaces.d.ts +12 -0
  47. package/package.json +1 -1
  48. package/dist/solutions-components/p-25729b41.entry.js +0 -6
  49. package/dist/solutions-components/p-8144c528.entry.js +0 -6
  50. package/dist/solutions-components/p-ea238bbc.entry.js +0 -6
@@ -33,7 +33,7 @@ import { d as defineCustomElement$3 } from './shell.js';
33
33
  import { d as defineCustomElement$2 } from './tooltip.js';
34
34
  import { d as defineCustomElement$1 } from './map-layer-picker2.js';
35
35
 
36
- 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}.bottom-left{position:absolute;left:0;bottom:0}html[dir=\"rtl\"] .bottom-left{position:absolute;right:0;bottom:0}.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}";
36
+ 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}.bottom-left{position:absolute;left:5;bottom:0}html[dir=\"rtl\"] .bottom-left{position:absolute;right:5;bottom:0}.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}";
37
37
 
38
38
  const LayerTable = /*@__PURE__*/ proxyCustomElement(class LayerTable extends HTMLElement {
39
39
  constructor() {
@@ -69,6 +69,7 @@ const LayerTable = /*@__PURE__*/ proxyCustomElement(class LayerTable extends HTM
69
69
  this.showNewestFirst = undefined;
70
70
  this.zoomAndScrollToSelected = undefined;
71
71
  this._confirmDelete = false;
72
+ this._controlsThatFit = undefined;
72
73
  this._fetchingData = false;
73
74
  this._isDeleting = false;
74
75
  this._layer = undefined;
@@ -82,6 +83,22 @@ const LayerTable = /*@__PURE__*/ proxyCustomElement(class LayerTable extends HTM
82
83
  // Watch handlers
83
84
  //
84
85
  //--------------------------------------------------------------------------
86
+ /**
87
+ * watch for changes to the list of controls that will currently fit in the display
88
+ */
89
+ _controlsThatFitWatchHandler() {
90
+ const ids = this._controlsThatFit ? this._controlsThatFit.reduce((prev, cur) => {
91
+ prev.push(cur.id);
92
+ return prev;
93
+ }, []) : [];
94
+ this._toolInfos = this._toolInfos.map(ti => {
95
+ if (ti && this._controlsThatFit) {
96
+ const id = this._getId(ti.icon);
97
+ ti.isOverflow = ids.indexOf(id) < 0;
98
+ return ti;
99
+ }
100
+ });
101
+ }
85
102
  /**
86
103
  * watch for changes in map view and get the first layer
87
104
  */
@@ -103,6 +120,12 @@ const LayerTable = /*@__PURE__*/ proxyCustomElement(class LayerTable extends HTM
103
120
  await this._resetTable();
104
121
  this._fetchingData = false;
105
122
  }
123
+ /**
124
+ * watch for selection changes
125
+ */
126
+ async _selectedIndexesWatchHandler() {
127
+ this._validateEnabledActions();
128
+ }
106
129
  /**
107
130
  * When sortActive is false the user has not defined a sort and we should use the default sort
108
131
  */
@@ -140,8 +163,8 @@ const LayerTable = /*@__PURE__*/ proxyCustomElement(class LayerTable extends HTM
140
163
  * Refresh the table when edits are completed
141
164
  *
142
165
  */
143
- editsComplete() {
144
- this._refresh();
166
+ async editsComplete() {
167
+ await this._refresh();
145
168
  }
146
169
  /**
147
170
  * Refresh the table when edits are completed
@@ -165,6 +188,8 @@ const LayerTable = /*@__PURE__*/ proxyCustomElement(class LayerTable extends HTM
165
188
  async componentWillLoad() {
166
189
  await this._getTranslations();
167
190
  await this._initModules();
191
+ this._initToolInfos();
192
+ this._resizeObserver = new ResizeObserver(() => this._onResize());
168
193
  }
169
194
  /**
170
195
  * Renders the component.
@@ -174,10 +199,22 @@ const LayerTable = /*@__PURE__*/ proxyCustomElement(class LayerTable extends HTM
174
199
  const loadingClass = this._fetchingData ? "" : "display-none";
175
200
  const total = this._allIds.length.toString();
176
201
  const selected = this._selectedIndexes.length.toString();
177
- return (h(Host, null, h("calcite-shell", null, this._getTableControlRow("header"), h("div", { class: "height-full-adjusted 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 text-color" }, this._translations.recordsSelected
202
+ return (h(Host, null, h("calcite-shell", null, this._getTableControlRow("header"), h("div", { class: "height-full-adjusted 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 text-color height-19" }, this._translations.recordsSelected
178
203
  .replace("{{total}}", total)
179
204
  .replace("{{selected}}", selected)))), this._deleteMessage()));
180
205
  }
206
+ /**
207
+ * Called once after the component is loaded
208
+ */
209
+ async componentDidLoad() {
210
+ this._resizeObserver.observe(this._toolbar);
211
+ }
212
+ /**
213
+ * Called after the component is rendered
214
+ */
215
+ componentDidRender() {
216
+ this._updateToolbar();
217
+ }
181
218
  //--------------------------------------------------------------------------
182
219
  //
183
220
  // Functions (protected)
@@ -198,6 +235,14 @@ const LayerTable = /*@__PURE__*/ proxyCustomElement(class LayerTable extends HTM
198
235
  this.FeatureTable = FeatureTable;
199
236
  this.reactiveUtils = reactiveUtils;
200
237
  }
238
+ /**
239
+ * Update the toolbar when its size changes
240
+ *
241
+ * @returns void
242
+ */
243
+ _onResize() {
244
+ this._updateToolbar();
245
+ }
201
246
  /**
202
247
  * Gets a row of controls that can be used for various interactions with the table
203
248
  *
@@ -206,11 +251,261 @@ const LayerTable = /*@__PURE__*/ proxyCustomElement(class LayerTable extends HTM
206
251
  * @returns The dom node that contains the controls
207
252
  */
208
253
  _getTableControlRow(slot) {
254
+ const id = "more-table-options";
255
+ return (h("div", { class: "display-flex border-bottom height-51", ref: (el) => this._toolbar = el, slot: slot }, this._getActionBar(), this._getDropdown(id), this._getToolTip("", "bottom", id, this._translations.moreOptions)));
256
+ }
257
+ /**
258
+ * Gets a row of controls that can be used for various interactions with the table
259
+ *
260
+ * @param slot string optional slot to display the control within
261
+ *
262
+ * @returns The dom node that contains the controls
263
+ */
264
+ _getActionBar() {
265
+ return (h("calcite-action-bar", { expandDisabled: true, expanded: true, id: this._getId("bar"), layout: "horizontal" }, h("div", { class: "border-end", id: "solutions-map-layer-picker-container" }, h("map-layer-picker", { appearance: "transparent", mapView: this.mapView, onLayerSelectionChange: (evt) => this._layerSelectionChanged(evt), onlyShowUpdatableLayers: this.onlyShowUpdatableLayers, placeholderIcon: "layers", scale: "l", showTables: true, type: "dropdown" })), this._getActions()));
266
+ }
267
+ /**
268
+ * Get the actions that are used for various interactions with the table
269
+ *
270
+ * @returns VNode[] the action nodes
271
+ */
272
+ _getActions() {
273
+ const actions = this._getActionItems();
274
+ return actions.reduce((prev, cur) => {
275
+ if (cur && !cur.isOverflow) {
276
+ prev.push(cur.isDanger ?
277
+ this._getDangerAction(cur.icon, cur.label, cur.func, cur.disabled) :
278
+ this._getAction(cur.icon, cur.label, cur.func, cur.disabled));
279
+ }
280
+ return prev;
281
+ }, []);
282
+ }
283
+ /**
284
+ * Update actions enabled prop based on number of selected indexes
285
+ *
286
+ * @returns void
287
+ */
288
+ _validateEnabledActions() {
289
+ const featuresSelected = this._selectedIndexes.length > 0;
290
+ const selectionDependant = [
291
+ "zoom-to-object",
292
+ "trash",
293
+ "erase",
294
+ "selected-items-filter"
295
+ ];
296
+ this._toolInfos.forEach(ti => {
297
+ if (ti && selectionDependant.indexOf(ti.icon) > -1) {
298
+ ti.disabled = !featuresSelected;
299
+ }
300
+ });
301
+ }
302
+ /**
303
+ * Get the full list of toolInfos.
304
+ * Order is important. They should be listed in the order they should display in the UI from
305
+ * Left to Right for the action bar and Top to Bottom for the dropdown.
306
+ *
307
+ * @returns void
308
+ */
309
+ _initToolInfos() {
209
310
  var _a;
210
311
  const featuresSelected = this._selectedIndexes.length > 0;
211
- const id = "more-table-options";
212
- return (h("div", { class: "display-flex border-bottom height-51", slot: slot }, h("calcite-action-bar", { expandDisabled: true, expanded: true, layout: "horizontal" }, h("div", { class: "border-end" }, h("map-layer-picker", { appearance: "transparent", mapView: this.mapView, onLayerSelectionChange: (evt) => this._layerSelectionChanged(evt), onlyShowUpdatableLayers: this.onlyShowUpdatableLayers, placeholderIcon: "layers", scale: "l", showTables: true, type: "dropdown" })), this._getAction("zoom-to-object", this._translations.zoom, () => this._zoom(), !featuresSelected), ((_a = this.mapInfo) === null || _a === void 0 ? void 0 : _a.filters) ? this._getAction("filter", this._translations.filters, () => this._filter(), false) : undefined, this._deleteEnabled ? this._getDangerAction("trash", this._translations.delete, () => this._delete(), !featuresSelected) : undefined, this._getAction("erase", this._translations.clearSelection, () => this._clearSelection(), !featuresSelected), this._getAction("selected-items-filter", this._showOnlySelected ? this._translations.showAll : this._translations.showSelected, () => this._toggleShowSelected(), !featuresSelected)), h("calcite-dropdown", { disabled: this._layer === undefined }, h("calcite-action", { appearance: "solid", id: id, label: "", slot: "trigger", text: "" }, h("calcite-button", { appearance: "transparent", iconEnd: "chevron-down", kind: "neutral" }, this._translations.more)), h("calcite-dropdown-group", { "selection-mode": "none" }, h("calcite-dropdown-item", { iconStart: "list-check-all", onClick: () => this._selectAll() }, this._translations.selectAll), h("calcite-dropdown-item", { iconStart: "compare", onClick: () => this._switchSelected() }, this._translations.switchSelected), h("calcite-dropdown-item", { iconStart: "refresh", onClick: () => this._refresh() }, this._translations.refresh), this.enableCSV ?
213
- (h("calcite-dropdown-item", { iconStart: "export", onClick: () => void this._exportToCSV() }, this._translations.exportCSV)) : undefined)), h("calcite-tooltip", { label: "", placement: "bottom", "reference-element": id }, h("span", null, this._translations.moreOptions))));
312
+ this._toolInfos = [{
313
+ icon: "zoom-to-object",
314
+ label: this._translations.zoom,
315
+ func: () => this._zoom(),
316
+ disabled: !featuresSelected,
317
+ isOverflow: false
318
+ }, ((_a = this.mapInfo) === null || _a === void 0 ? void 0 : _a.filters) ? {
319
+ icon: "filter",
320
+ label: this._translations.filters,
321
+ func: () => this._filter(),
322
+ disabled: false,
323
+ isOverflow: false
324
+ } : undefined,
325
+ this._deleteEnabled ? {
326
+ icon: "trash",
327
+ label: this._translations.delete,
328
+ func: () => this._delete(),
329
+ disabled: !featuresSelected,
330
+ isDanger: true,
331
+ isOverflow: false
332
+ } : undefined, {
333
+ icon: "erase",
334
+ label: this._translations.clearSelection,
335
+ func: () => this._clearSelection(),
336
+ disabled: !featuresSelected,
337
+ isOverflow: false
338
+ }, {
339
+ icon: "selected-items-filter",
340
+ label: this._showOnlySelected ? this._translations.showAll : this._translations.showSelected,
341
+ func: () => this._toggleShowSelected(),
342
+ disabled: !featuresSelected,
343
+ isOverflow: false
344
+ }, {
345
+ icon: "list-check-all",
346
+ func: () => this._selectAll(),
347
+ label: this._translations.selectAll,
348
+ disabled: false,
349
+ isOverflow: true
350
+ }, {
351
+ icon: "compare",
352
+ func: () => this._switchSelected(),
353
+ label: this._translations.switchSelected,
354
+ disabled: false,
355
+ isOverflow: true
356
+ }, {
357
+ icon: "refresh",
358
+ func: () => this._refresh(),
359
+ label: this._translations.refresh,
360
+ disabled: false,
361
+ isOverflow: true
362
+ },
363
+ this.enableCSV ? {
364
+ icon: "export",
365
+ func: () => void this._exportToCSV(),
366
+ label: this._translations.exportCSV,
367
+ disabled: false,
368
+ isOverflow: true
369
+ } : undefined];
370
+ this._defaultVisibleToolSizeInfos = undefined;
371
+ }
372
+ /**
373
+ * Add/Remove tools from the action bar and dropdown based on available size
374
+ *
375
+ * @returns void
376
+ */
377
+ _updateToolbar() {
378
+ if (this._timeout) {
379
+ clearTimeout(this._timeout);
380
+ }
381
+ this._timeout = setTimeout(() => {
382
+ clearTimeout(this._timeout);
383
+ this._setToolbarSizeInfos();
384
+ const toolbarWidth = this._toolbar.offsetWidth;
385
+ let controlsWidth = this._toolbarSizeInfos.reduce((prev, cur) => {
386
+ prev += cur.width;
387
+ return prev;
388
+ }, 0);
389
+ const skipControls = ["solutions-more", "solutions-map-layer-picker-container"];
390
+ if (controlsWidth > toolbarWidth) {
391
+ if (this._toolbarSizeInfos.length > 0) {
392
+ const controlsThatFit = [...this._toolbarSizeInfos].reverse().reduce((prev, cur) => {
393
+ if (skipControls.indexOf(cur.id) < 0) {
394
+ if (controlsWidth > toolbarWidth) {
395
+ controlsWidth -= cur.width;
396
+ }
397
+ else {
398
+ prev.push(cur);
399
+ }
400
+ }
401
+ return prev;
402
+ }, []).reverse();
403
+ this._setControlsThatFit(controlsThatFit, skipControls);
404
+ }
405
+ }
406
+ else {
407
+ if (this._defaultVisibleToolSizeInfos) {
408
+ const currentTools = this._toolbarSizeInfos.reduce((prev, cur) => {
409
+ prev.push(cur.id);
410
+ return prev;
411
+ }, []);
412
+ const controlsThatFit = [...this._defaultVisibleToolSizeInfos].reduce((prev, cur) => {
413
+ if (skipControls.indexOf(cur.id) < 0 &&
414
+ (currentTools.indexOf(cur.id) > -1 || (controlsWidth + cur.width) <= toolbarWidth)) {
415
+ if (currentTools.indexOf(cur.id) < 0) {
416
+ controlsWidth += cur.width;
417
+ }
418
+ prev.push(cur);
419
+ }
420
+ return prev;
421
+ }, []);
422
+ this._setControlsThatFit(controlsThatFit, skipControls);
423
+ }
424
+ }
425
+ }, 5);
426
+ }
427
+ /**
428
+ * Validate if controls that fit the current display has changed or
429
+ * is different from what is currently displayed
430
+ *
431
+ * @returns void
432
+ */
433
+ _setControlsThatFit(controlsThatFit, skipControls) {
434
+ let update = JSON.stringify(controlsThatFit) !== JSON.stringify(this._controlsThatFit);
435
+ const actionbar = document.getElementById("solutions-action-bar");
436
+ actionbar.childNodes.forEach((n) => {
437
+ if (skipControls.indexOf(n.id) < 0 && !update) {
438
+ update = this._controlsThatFit.map(c => c.id).indexOf(n.id) < 0;
439
+ }
440
+ });
441
+ if (update) {
442
+ this._controlsThatFit = [...controlsThatFit];
443
+ }
444
+ }
445
+ /**
446
+ * Get the id and size for the toolbars current items
447
+ *
448
+ * @returns void
449
+ */
450
+ _setToolbarSizeInfos() {
451
+ let hasWidth = false;
452
+ this._toolbarSizeInfos = [];
453
+ this._toolbar.childNodes.forEach((c, i) => {
454
+ // handle the action bar
455
+ if (i === 0) {
456
+ c.childNodes.forEach((actionbarChild) => {
457
+ this._toolbarSizeInfos.push({
458
+ id: actionbarChild.id,
459
+ width: actionbarChild.offsetWidth
460
+ });
461
+ if (!hasWidth) {
462
+ hasWidth = actionbarChild.offsetWidth > 0;
463
+ }
464
+ });
465
+ }
466
+ else if (!c.referenceElement) {
467
+ // skip tooltips
468
+ this._toolbarSizeInfos.push({
469
+ id: c.id,
470
+ width: c.offsetWidth
471
+ });
472
+ if (!hasWidth) {
473
+ hasWidth = c.offsetWidth > 0;
474
+ }
475
+ }
476
+ });
477
+ if (hasWidth && !this._defaultVisibleToolSizeInfos) {
478
+ this._defaultVisibleToolSizeInfos = [...this._toolbarSizeInfos];
479
+ }
480
+ }
481
+ /**
482
+ * Get a list of toolInfos that should display outside of the dropdown
483
+ *
484
+ * @returns IToolInfo[] the list of toolInfos that should not display in the overflow dropdown
485
+ */
486
+ _getActionItems() {
487
+ return this._toolInfos.filter(toolInfo => toolInfo && !toolInfo.isOverflow);
488
+ }
489
+ /**
490
+ * Get a list of toolInfos that should display in the dropdown
491
+ *
492
+ * @param id string the id for the dropdown and its tooltip
493
+ *
494
+ * @returns VNode the dropdown node
495
+ */
496
+ _getDropdown(id) {
497
+ const dropdownItems = this._getDropdownItems();
498
+ return (h("calcite-dropdown", { disabled: this._layer === undefined, id: "solutions-more" }, h("calcite-action", { appearance: "solid", id: id, label: "", slot: "trigger", text: "" }, h("calcite-button", { appearance: "transparent", iconEnd: "chevron-down", kind: "neutral" }, this._translations.more)), h("calcite-dropdown-group", { "selection-mode": "none" }, dropdownItems.map(item => {
499
+ return (h("calcite-dropdown-item", { iconStart: item.icon, onClick: item.func }, item.label));
500
+ }))));
501
+ }
502
+ /**
503
+ * Get a list of toolInfos that should display in the dropdown
504
+ *
505
+ * @returns IToolInfo[] the list of toolInfos that should display in the dropdown
506
+ */
507
+ _getDropdownItems() {
508
+ return this._toolInfos.filter(toolInfo => toolInfo && toolInfo.isOverflow);
214
509
  }
215
510
  /**
216
511
  * Get an action and tooltip
@@ -224,7 +519,30 @@ const LayerTable = /*@__PURE__*/ proxyCustomElement(class LayerTable extends HTM
224
519
  */
225
520
  _getAction(icon, label, func, disabled) {
226
521
  const _disabled = this._layer === undefined ? true : disabled;
227
- return (h("div", { class: "display-flex" }, h("calcite-action", { appearance: "solid", disabled: _disabled, icon: icon, id: icon, label: label, onClick: func, text: label, textEnabled: true }), h("calcite-tooltip", { label: "", placement: "bottom", "reference-element": icon }, h("span", null, label))));
522
+ return (h("div", { class: "display-flex", id: this._getId(icon) }, h("calcite-action", { appearance: "solid", disabled: _disabled, icon: icon, id: icon, label: label, onClick: func, text: label, textEnabled: true }), this._getToolTip("", "bottom", icon, label)));
523
+ }
524
+ /**
525
+ * Get a tooltip
526
+ *
527
+ * @param label string accessible name for the component
528
+ * @param placement string where the tooltip should display
529
+ * @param referenceElement string the element the tooltip will be associated with
530
+ * @param text string the text to display in the tooltip
531
+ *
532
+ * @returns VNode The tooltip node
533
+ */
534
+ _getToolTip(label, placement, referenceElement, text) {
535
+ return (h("calcite-tooltip", { label: label, placement: placement, "reference-element": referenceElement }, h("span", null, text)));
536
+ }
537
+ /**
538
+ * Get an id with a prefix to the user supplied value
539
+ *
540
+ * @param id the unique value for the id
541
+ *
542
+ * @returns the new id with the prefix value
543
+ */
544
+ _getId(id) {
545
+ return `solutions-action-${id}`;
228
546
  }
229
547
  /**
230
548
  * Get an action with danger color icon and text
@@ -238,7 +556,7 @@ const LayerTable = /*@__PURE__*/ proxyCustomElement(class LayerTable extends HTM
238
556
  */
239
557
  _getDangerAction(icon, label, func, disabled) {
240
558
  const _disabled = this._layer === undefined ? true : disabled;
241
- return (h("div", { class: "display-flex" }, h("calcite-action", { appearance: "solid", disabled: _disabled, id: icon, onClick: func, text: "" }, h("calcite-button", { appearance: "transparent", iconStart: icon, kind: "danger" }, label)), h("calcite-tooltip", { label: "", placement: "bottom", "reference-element": icon }, h("span", null, label))));
559
+ return (h("div", { class: "display-flex", id: this._getId(icon) }, h("calcite-action", { appearance: "solid", disabled: _disabled, id: icon, onClick: func, text: "" }, h("calcite-button", { appearance: "transparent", iconStart: icon, kind: "danger" }, label)), this._getToolTip("", "bottom", icon, label)));
242
560
  }
243
561
  /**
244
562
  * Initialize the FeatureTable
@@ -309,6 +627,7 @@ const LayerTable = /*@__PURE__*/ proxyCustomElement(class LayerTable extends HTM
309
627
  this._table.view = this.mapView;
310
628
  this._checkEditEnabled();
311
629
  this._table.editingEnabled = this._editEnabled && this.enableInlineEdit;
630
+ this._initToolInfos();
312
631
  });
313
632
  await this._table.when(() => {
314
633
  this._table.clearSelectionFilter();
@@ -495,8 +814,9 @@ const LayerTable = /*@__PURE__*/ proxyCustomElement(class LayerTable extends HTM
495
814
  *
496
815
  * @returns void
497
816
  */
498
- _refresh() {
499
- void this._table.refresh();
817
+ async _refresh() {
818
+ await this._table.refresh();
819
+ this.featureSelectionChange.emit(this._selectedIndexes);
500
820
  }
501
821
  /**
502
822
  * Zoom to all selected features
@@ -594,8 +914,10 @@ const LayerTable = /*@__PURE__*/ proxyCustomElement(class LayerTable extends HTM
594
914
  }
595
915
  get el() { return this; }
596
916
  static get watchers() { return {
917
+ "_controlsThatFit": ["_controlsThatFitWatchHandler"],
597
918
  "mapView": ["mapViewWatchHandler"],
598
919
  "_layer": ["_layerWatchHandler"],
920
+ "_selectedIndexes": ["_selectedIndexesWatchHandler"],
599
921
  "_sortActive": ["_sortActiveWatchHandler"]
600
922
  }; }
601
923
  static get style() { return layerTableCss; }
@@ -609,6 +931,7 @@ const LayerTable = /*@__PURE__*/ proxyCustomElement(class LayerTable extends HTM
609
931
  "showNewestFirst": [4, "show-newest-first"],
610
932
  "zoomAndScrollToSelected": [4, "zoom-and-scroll-to-selected"],
611
933
  "_confirmDelete": [32],
934
+ "_controlsThatFit": [32],
612
935
  "_fetchingData": [32],
613
936
  "_isDeleting": [32],
614
937
  "_layer": [32],
@@ -617,8 +940,10 @@ const LayerTable = /*@__PURE__*/ proxyCustomElement(class LayerTable extends HTM
617
940
  "_sortActive": [32],
618
941
  "_translations": [32]
619
942
  }, [[8, "selectionChanged", "selectionChanged"], [8, "editsComplete", "editsComplete"], [8, "noLayersFound", "noLayersFound"]], {
943
+ "_controlsThatFit": ["_controlsThatFitWatchHandler"],
620
944
  "mapView": ["mapViewWatchHandler"],
621
945
  "_layer": ["_layerWatchHandler"],
946
+ "_selectedIndexes": ["_selectedIndexesWatchHandler"],
622
947
  "_sortActive": ["_sortActiveWatchHandler"]
623
948
  }]);
624
949
  function defineCustomElement() {
@@ -69,7 +69,6 @@ const MapCard = /*@__PURE__*/ proxyCustomElement(class MapCard extends HTMLEleme
69
69
  */
70
70
  async componentWillLoad() {
71
71
  await this._initModules();
72
- this.esriConfig.portalUrl = "https://holistic.mapsdevext.arcgis.com";
73
72
  }
74
73
  /**
75
74
  * Renders the component.
@@ -90,16 +89,14 @@ const MapCard = /*@__PURE__*/ proxyCustomElement(class MapCard extends HTMLEleme
90
89
  * @protected
91
90
  */
92
91
  async _initModules() {
93
- const [WebMap, MapView, Home, esriConfig] = await loadModules([
92
+ const [WebMap, MapView, Home] = await loadModules([
94
93
  "esri/WebMap",
95
94
  "esri/views/MapView",
96
- "esri/widgets/Home",
97
- "esri/config"
95
+ "esri/widgets/Home"
98
96
  ]);
99
97
  this.WebMap = WebMap;
100
98
  this.MapView = MapView;
101
99
  this.Home = Home;
102
- this.esriConfig = esriConfig;
103
100
  }
104
101
  /**
105
102
  * Load the webmap for the provided webMapInfo
@@ -202,8 +202,8 @@ const MapLayerPicker = /*@__PURE__*/ proxyCustomElement(class MapLayerPicker ext
202
202
  const mapTableIds = this.showTables ? this.onlyShowUpdatableLayers ?
203
203
  this._getEditableIds(this._tableNameHash) : Object.keys(this._tableNameHash) : [];
204
204
  this.ids = [
205
- ...mapLayerIds.filter(n => { var _a; return ((_a = this.enabledLayerIds) === null || _a === void 0 ? void 0 : _a.length) > 0 ? this.enabledLayerIds.indexOf(n) > -1 : true; }),
206
- ...mapTableIds.filter(n => { var _a; return ((_a = this.enabledTableIds) === null || _a === void 0 ? void 0 : _a.length) > 0 ? this.enabledTableIds.indexOf(n) > -1 : true; }),
205
+ ...mapLayerIds.reverse().filter(n => { var _a; return ((_a = this.enabledLayerIds) === null || _a === void 0 ? void 0 : _a.length) > 0 ? this.enabledLayerIds.reverse().indexOf(n) > -1 : true; }),
206
+ ...mapTableIds.reverse().filter(n => { var _a; return ((_a = this.enabledTableIds) === null || _a === void 0 ? void 0 : _a.length) > 0 ? this.enabledTableIds.reverse().indexOf(n) > -1 : true; }),
207
207
  ];
208
208
  }
209
209
  }
@@ -89,9 +89,9 @@ const BasemapGallery = class {
89
89
  }
90
90
  const source = new this.PortalBasemapsSource({
91
91
  query: ((_a = this.basemapConfig) === null || _a === void 0 ? void 0 : _a.basemapGroupId) ? `id:${this.basemapConfig.basemapGroupId}` : null,
92
- filterFunction: (basemap) => {
92
+ filterFunction: this.basemapConfig ? (basemap) => {
93
93
  return !this.basemapConfig.basemapIdsToFilter.includes(basemap.portalItem.id);
94
- }
94
+ } : () => true
95
95
  });
96
96
  await source.refresh();
97
97
  this.basemapWidget = new this.BasemapGallery({
@@ -441,7 +441,7 @@ const EditCard = class {
441
441
  const container = document.createElement("div");
442
442
  this._editor = new this.Editor({
443
443
  allowedWorkflows: "update",
444
- //view: this.mapView,
444
+ view: this.mapView,
445
445
  layerInfos: [{
446
446
  layer: this._layer,
447
447
  geometryUpdatesEnabled: false
@@ -1866,8 +1866,8 @@ const MapLayerPicker = class {
1866
1866
  const mapTableIds = this.showTables ? this.onlyShowUpdatableLayers ?
1867
1867
  this._getEditableIds(this._tableNameHash) : Object.keys(this._tableNameHash) : [];
1868
1868
  this.ids = [
1869
- ...mapLayerIds.filter(n => { var _a; return ((_a = this.enabledLayerIds) === null || _a === void 0 ? void 0 : _a.length) > 0 ? this.enabledLayerIds.indexOf(n) > -1 : true; }),
1870
- ...mapTableIds.filter(n => { var _a; return ((_a = this.enabledTableIds) === null || _a === void 0 ? void 0 : _a.length) > 0 ? this.enabledTableIds.indexOf(n) > -1 : true; }),
1869
+ ...mapLayerIds.reverse().filter(n => { var _a; return ((_a = this.enabledLayerIds) === null || _a === void 0 ? void 0 : _a.length) > 0 ? this.enabledLayerIds.reverse().indexOf(n) > -1 : true; }),
1870
+ ...mapTableIds.reverse().filter(n => { var _a; return ((_a = this.enabledTableIds) === null || _a === void 0 ? void 0 : _a.length) > 0 ? this.enabledTableIds.reverse().indexOf(n) > -1 : true; }),
1871
1871
  ];
1872
1872
  }
1873
1873
  }